VOL-1387 : Fixed issue introduced with watch mechanism submission
- Added flag to determine when a revision is watched
- Added flag to determine when a revision is stored
- Refactored confusing method names for Set/GetChildren
- Fixed issue with deletion of devices due to previous submission
Change-Id: I68c46951f9d40d47e4e74854bba449c9fec4a427
diff --git a/db/model/non_persisted_revision.go b/db/model/non_persisted_revision.go
index 66e6f74..765bbaf 100644
--- a/db/model/non_persisted_revision.go
+++ b/db/model/non_persisted_revision.go
@@ -72,18 +72,35 @@
return npr.Config
}
-func (npr *NonPersistedRevision) SetChildren(children map[string][]Revision) {
+func (npr *NonPersistedRevision) SetAllChildren(children map[string][]Revision) {
npr.mutex.Lock()
defer npr.mutex.Unlock()
npr.Children = children
}
-func (npr *NonPersistedRevision) GetChildren() map[string][]Revision {
+func (npr *NonPersistedRevision) SetChildren(name string, children []Revision) {
+ npr.mutex.Lock()
+ defer npr.mutex.Unlock()
+ if _, exists := npr.Children[name]; exists {
+ npr.Children[name] = children
+ }
+}
+
+func (npr *NonPersistedRevision) GetAllChildren() map[string][]Revision {
npr.mutex.Lock()
defer npr.mutex.Unlock()
return npr.Children
}
+func (npr *NonPersistedRevision) GetChildren(name string) []Revision {
+ npr.mutex.Lock()
+ defer npr.mutex.Unlock()
+ if _, exists := npr.Children[name]; exists {
+ return npr.Children[name]
+ }
+ return nil
+}
+
func (npr *NonPersistedRevision) SetHash(hash string) {
npr.mutex.Lock()
defer npr.mutex.Unlock()
@@ -188,7 +205,7 @@
for fieldName, field := range ChildrenFields(latestRev.GetData()) {
childDataName, childDataHolder := GetAttributeValue(data, fieldName, 0)
if field.IsContainer {
- for _, rev := range latestRev.GetChildren()[fieldName] {
+ for _, rev := range latestRev.GetChildren(fieldName) {
childData := rev.Get(depth - 1)
foundEntry := false
for i := 0; i < childDataHolder.Len(); i++ {
@@ -204,8 +221,8 @@
}
}
} else {
- if revs := latestRev.GetChildren()[fieldName]; revs != nil && len(revs) > 0 {
- rev := latestRev.GetChildren()[fieldName][0]
+ if revs := latestRev.GetChildren(fieldName); revs != nil && len(revs) > 0 {
+ rev := latestRev.GetChildren(fieldName)[0]
if rev != nil {
childData := rev.Get(depth - 1)
if reflect.TypeOf(childData) == reflect.TypeOf(childDataHolder.Interface()) {