Przeglądaj źródła

Merge pull request #1326 from coolljt0725/fix_update_endpoint_cnt

Fix update endpoint count to store
Madhu Venugopal 9 lat temu
rodzic
commit
7b470ea14d
1 zmienionych plików z 10 dodań i 1 usunięć
  1. 10 1
      libnetwork/endpoint_cnt.go

+ 10 - 1
libnetwork/endpoint_cnt.go

@@ -113,6 +113,9 @@ func (ec *endpointCnt) updateStore() error {
 	if store == nil {
 	if store == nil {
 		return fmt.Errorf("store not found for scope %s on endpoint count update", ec.DataScope())
 		return fmt.Errorf("store not found for scope %s on endpoint count update", ec.DataScope())
 	}
 	}
+	// make a copy of count and n to avoid being overwritten by store.GetObject
+	count := ec.EndpointCnt()
+	n := ec.n
 	for {
 	for {
 		if err := ec.n.getController().updateToStore(ec); err == nil || err != datastore.ErrKeyModified {
 		if err := ec.n.getController().updateToStore(ec); err == nil || err != datastore.ErrKeyModified {
 			return err
 			return err
@@ -120,6 +123,10 @@ func (ec *endpointCnt) updateStore() error {
 		if err := store.GetObject(datastore.Key(ec.Key()...), ec); err != nil {
 		if err := store.GetObject(datastore.Key(ec.Key()...), ec); err != nil {
 			return fmt.Errorf("could not update the kvobject to latest on endpoint count update: %v", err)
 			return fmt.Errorf("could not update the kvobject to latest on endpoint count update: %v", err)
 		}
 		}
+		ec.Lock()
+		ec.Count = count
+		ec.n = n
+		ec.Unlock()
 	}
 	}
 }
 }
 
 
@@ -136,7 +143,9 @@ retry:
 	if inc {
 	if inc {
 		ec.Count++
 		ec.Count++
 	} else {
 	} else {
-		ec.Count--
+		if ec.Count > 0 {
+			ec.Count--
+		}
 	}
 	}
 	ec.Unlock()
 	ec.Unlock()