Merge branch '21461-excessive-scrollbars-fix'. Closes #21461
[arvados.git] / services / ws / event_source.go
index 3593c3aebd58ceae6932e9667eca43aba8a8c0cf..e0269701c9715f5673650750dc7c00ba0b66159d 100644 (file)
@@ -19,6 +19,11 @@ import (
        "github.com/sirupsen/logrus"
 )
 
+var (
+       listenerPingInterval = time.Minute
+       testSlowPing         = false
+)
+
 type pgEventSource struct {
        DataSource   string
        MaxOpenConns int
@@ -248,22 +253,36 @@ func (ps *pgEventSource) Run() {
        }()
 
        var serial uint64
-       ticker := time.NewTicker(time.Minute)
-       defer ticker.Stop()
+
+       go func() {
+               ticker := time.NewTicker(listenerPingInterval)
+               defer ticker.Stop()
+               for {
+                       select {
+                       case <-ctx.Done():
+                               ps.Logger.Debug("ctx done")
+                               return
+
+                       case <-ticker.C:
+                               ps.Logger.Debug("listener ping")
+                               if testSlowPing {
+                                       time.Sleep(time.Second / 2)
+                               }
+                               err := ps.pqListener.Ping()
+                               if err != nil {
+                                       ps.listenerProblem(-1, fmt.Errorf("pqListener ping failed: %s", err))
+                                       continue
+                               }
+                       }
+               }
+       }()
+
        for {
                select {
                case <-ctx.Done():
                        ps.Logger.Debug("ctx done")
                        return
 
-               case <-ticker.C:
-                       ps.Logger.Debug("listener ping")
-                       err := ps.pqListener.Ping()
-                       if err != nil {
-                               ps.listenerProblem(-1, fmt.Errorf("pqListener ping failed: %s", err))
-                               continue
-                       }
-
                case pqEvent, ok := <-ps.pqListener.Notify:
                        if !ok {
                                ps.Logger.Error("pqListener Notify chan closed")
@@ -281,7 +300,7 @@ func (ps *pgEventSource) Run() {
                                ps.Logger.WithField("pqEvent", pqEvent).Error("unexpected notify from wrong channel")
                                continue
                        }
-                       logID, err := strconv.ParseUint(pqEvent.Extra, 10, 64)
+                       logID, err := strconv.ParseInt(pqEvent.Extra, 10, 64)
                        if err != nil {
                                ps.Logger.WithField("pqEvent", pqEvent).Error("bad notify payload")
                                continue