VOL-1497 : Further improved data synchronization between cores
- Introduced locking when modifying branches
- Introduced locking when modifying rev children
- Rewrote persistence loading logic to avoid unecessary changes
- Access controlled CreateProxy to ensure a proxy is not created
against an incomplete device entry
- Removed locking logic from etcd client
- Replaced revision merging logic with persistence loading
VOL-1544 : Cleanup revisions to improve overall performance
- Ensure that old revisions are discarded
- Ensure that children do not contain discarded revisions
- Disabled cache logic for now
Change-Id: I1b952c82aba379fce64a47a71b5309a6f28fb5ff
diff --git a/db/model/proxy_access_control.go b/db/model/proxy_access_control.go
index 66d3222..2a5d034 100644
--- a/db/model/proxy_access_control.go
+++ b/db/model/proxy_access_control.go
@@ -109,6 +109,7 @@
// lock will prevent access to a model path
func (pac *proxyAccessControl) lock() {
+ log.Debugw("locking", log.Fields{"path": pac.Path})
pac.PathLock <- struct{}{}
pac.setStart(time.Now())
}
@@ -116,6 +117,7 @@
// unlock will release control of a model path
func (pac *proxyAccessControl) unlock() {
<-pac.PathLock
+ log.Debugw("unlocking", log.Fields{"path": pac.Path})
pac.setStop(time.Now())
GetProfiling().AddToInMemoryLockTime(pac.getStop().Sub(pac.getStart()).Seconds())
}
@@ -243,3 +245,20 @@
return pac.getProxy().GetRoot().Remove(path, txid, nil)
}
+
+// CreateProxy allows interaction for a specific path
+func (pac *proxyAccessControl) CreateProxy(path string, exclusive bool, control bool) *Proxy {
+ if control {
+ pac.lock()
+ log.Debugw("locked-access--create-proxy", log.Fields{"path": path, "fullPath": pac.Path})
+ defer pac.unlock()
+ defer log.Debugw("unlocked-access--create-proxy", log.Fields{"path": path, "fullPath": pac.Proxy.getFullPath()})
+ }
+
+ result := pac.getProxy().GetRoot().CreateProxy(path, exclusive)
+
+ if result != nil {
+ return result
+ }
+ return nil
+}