summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJackLivio <jack@livio.io>2016-04-26 14:16:20 -0400
committerJackLivio <jack@livio.io>2016-04-26 14:16:20 -0400
commite0fda2c1b4c3bbefd7770b153250087ab35fe9b8 (patch)
tree020ef371177f5d645d080492bebdde75e9adcb87
parentdd1bb4b463894c2d78dedbd16b13dabbe41559e9 (diff)
downloadsdl_core-hotfix/generate_snapshot_fix_#461.tar.gz
Rewrite GenerateSnapshot()hotfix/generate_snapshot_fix_#461
This pr is to fix issue #461. SDL core was crashing due to the snapshot returned from CacheManager::GenerateSnapshot() was being ruled as invalid. When generating a snapshot, instead of copying the entire contents of the policy table, I copy all contents except for the messages in consumer friendly messages. Policy table snapshot are not supposed to include the actual messages in consumer friendly messages, just the version number of the messages. I also added an extra condition in ConsumerFriendlyMessages::Validate() that looks to see if messages is initialized. A pt snapshot can have a consumer friendly messages portion, just not the messages included in consumer fiendly messages.
-rw-r--r--src/components/policy/src/policy/policy_table/table_struct/validation.cc3
-rw-r--r--src/components/policy/src/policy/src/cache_manager.cc16
2 files changed, 17 insertions, 2 deletions
diff --git a/src/components/policy/src/policy/policy_table/table_struct/validation.cc b/src/components/policy/src/policy/policy_table/table_struct/validation.cc
index be39b8022e..a7656960fa 100644
--- a/src/components/policy/src/policy/policy_table/table_struct/validation.cc
+++ b/src/components/policy/src/policy/policy_table/table_struct/validation.cc
@@ -153,7 +153,8 @@ bool MessageLanguages::Validate() const {
}
bool ConsumerFriendlyMessages::Validate() const {
- if (PT_SNAPSHOT == GetPolicyTableType()) {
+ if (PT_SNAPSHOT == GetPolicyTableType() &&
+ messages.is_initialized()) {
return false;
}
return true;
diff --git a/src/components/policy/src/policy/src/cache_manager.cc b/src/components/policy/src/policy/src/cache_manager.cc
index c6df31f35a..b679f27c15 100644
--- a/src/components/policy/src/policy/src/cache_manager.cc
+++ b/src/components/policy/src/policy/src/cache_manager.cc
@@ -790,8 +790,22 @@ utils::SharedPtr<policy_table::Table>
CacheManager::GenerateSnapshot() {
CACHE_MANAGER_CHECK(snapshot_);
sync_primitives::AutoLock lock(cache_lock_);
+
snapshot_ = new policy_table::Table();
- snapshot_->policy_table = pt_->policy_table;
+
+ //Copy all members of policy table except messages in consumer friendly messages
+ snapshot_->policy_table.app_policies_section = pt_->policy_table.app_policies_section;
+ snapshot_->policy_table.functional_groupings = pt_->policy_table.functional_groupings;
+ snapshot_->policy_table.consumer_friendly_messages->version = pt_->policy_table.consumer_friendly_messages->version;
+ snapshot_->policy_table.consumer_friendly_messages->mark_initialized();
+ snapshot_->policy_table.module_config = pt_->policy_table.module_config;
+ snapshot_->policy_table.module_meta = pt_->policy_table.module_meta;
+ snapshot_->policy_table.usage_and_error_counts = pt_->policy_table.usage_and_error_counts;
+ snapshot_->policy_table.device_data = pt_->policy_table.device_data;
+
+ //Set policy table type to Snapshot
+ snapshot_->SetPolicyTableType(rpc::policy_table_interface_base::PolicyTableType::PT_SNAPSHOT);
+
CheckSnapshotInitialization();
return snapshot_;
}