bzp2010 commented on code in PR #2650:
URL: https://github.com/apache/apisix-dashboard/pull/2650#discussion_r1006381673


##########
api/cmd/root.go:
##########
@@ -81,3 +89,57 @@ func manageAPI() error {
        }
        return nil
 }
+
+func etcdConnectionChecker() context.CancelFunc {
+       ctx, cancel := context.WithCancel(context.TODO())
+       unavailableTimes := 0
+
+       go func() {
+               etcdClient := storage.GenEtcdStorage().GetClient()
+               for {
+                       select {
+                       case <-time.Tick(10 * time.Second):
+                               sCtx, sCancel := 
context.WithTimeout(context.TODO(), 5*time.Second)
+                               err := etcdClient.Sync(sCtx)
+                               sCancel()
+                               if err != nil {
+                                       unavailableTimes++
+                                       log.Errorf("etcd connection loss 
detected, times: %d", unavailableTimes)
+                                       continue
+                               }
+
+                               // After multiple failures, the connection is 
restored
+                               if unavailableTimes >= 1 {
+                                       log.Warnf("etcd connection recovered, 
but after several connection losses, reinitializing stores, times: %d", 
unavailableTimes)
+                                       unavailableTimes = 0
+
+                                       // When this happens, force a full 
re-initialization of the store
+                                       store.RangeStore(func(key store.HubKey, 
store *store.GenericStore) bool {
+                                               log.Warnf("etcd store 
reinitializing: resource: %s", key)
+                                               _ = store.Init()

Review Comment:
   @nic-chen fixed



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to