Monorepo for Tangled
tangled.org
1package knotacl
2
3import (
4 "context"
5 "log/slog"
6 "time"
7
8 "tangled.org/core/appview/db"
9 "tangled.org/core/appview/knotcompat"
10)
11
12const latchOpTimeout = 5 * time.Second
13
14type latch struct {
15 execer db.Execer
16 log *slog.Logger
17}
18
19func NewLatch(execer db.Execer, logger *slog.Logger) knotcompat.NativeLatch {
20 return latch{execer: execer, log: logger}
21}
22
23func (l latch) IsNative(host string) bool {
24 ctx, cancel := context.WithTimeout(context.Background(), latchOpTimeout)
25 defer cancel()
26 native, err := db.IsKnotAclNative(ctx, l.execer, host)
27 return err == nil && native
28}
29
30func (l latch) MarkNative(host string) {
31 ctx, cancel := context.WithTimeout(context.Background(), latchOpTimeout)
32 defer cancel()
33 if err := db.MarkKnotAclNative(ctx, l.execer, host); err != nil {
34 l.log.Error("failed to persist native knot latch, it will be re-probed after restart", "host", host, "err", err)
35 }
36}