Browse Source

tka: don't panic if no clock set in tka.Mem

This is causing confusing panics in tailscale/corp#34485. We'll keep
using the tka.ChonkMem constructor as much as we can, but don't panic
if you create a tka.Mem directly -- we know what the sensible thing is.

Updates #cleanup

Signed-off-by: Alex Chan <[email protected]>

Change-Id: I49309f5f403fc26ce4f9a6cf0edc8eddf6a6f3a4
Alex Chan 3 months ago
parent
commit
ce95bc77fb
1 changed files with 11 additions and 1 deletions
  1. 11 1
      tka/tailchonk.go

+ 11 - 1
tka/tailchonk.go

@@ -193,7 +193,7 @@ updateLoop:
 	for _, aum := range updates {
 		aumHash := aum.Hash()
 		c.aums[aumHash] = aum
-		c.commitTimes[aumHash] = c.clock.Now()
+		c.commitTimes[aumHash] = c.now()
 
 		parent, ok := aum.Parent()
 		if ok {
@@ -209,6 +209,16 @@ updateLoop:
 	return nil
 }
 
+// now returns the current time, optionally using the overridden
+// clock if set.
+func (c *Mem) now() time.Time {
+	if c.clock == nil {
+		return time.Now()
+	} else {
+		return c.clock.Now()
+	}
+}
+
 // RemoveAll permanently and completely clears the TKA state.
 func (c *Mem) RemoveAll() error {
 	c.mu.Lock()