forked from tangled.org/core
this repo has no description

knotserver/jetstream: preserve last time_us even on err'd exit

Also reduces last time_us discard window down to 2 days.

anirudh.fi 71252a20 cd93d12e

verified
Changed files
+16 -11
jetstream
knotserver
+2 -2
jetstream/jetstream.go
···
}
// If last time is older than a week, start from now
-
if time.Now().UnixMicro()-lastTimeUs > 7*24*60*60*1000*1000 {
+
if time.Now().UnixMicro()-lastTimeUs > 2*24*60*60*1000*1000 {
lastTimeUs = time.Now().UnixMicro()
-
l.Warn("last time us is older than a week. discarding that and starting from now")
+
l.Warn("last time us is older than 2 days; discarding that and starting from now")
err = j.db.UpdateLastTimeUs(lastTimeUs)
if err != nil {
l.Error("failed to save last time us", "error", err)
+14 -9
knotserver/jetstream.go
···
return nil
}
-
func (h *Handle) processKnotMember(ctx context.Context, did string, record tangled.KnotMember, eventTime int64) error {
+
func (h *Handle) processKnotMember(ctx context.Context, did string, record tangled.KnotMember) error {
l := log.FromContext(ctx)
if record.Domain != h.c.Server.Hostname {
···
return fmt.Errorf("failed to fetch and add keys: %w", err)
}
-
lastTimeUs := eventTime + 1
-
fmt.Println("lastTimeUs", lastTimeUs)
-
if err := h.db.UpdateLastTimeUs(lastTimeUs); err != nil {
-
return fmt.Errorf("failed to save last time us: %w", err)
-
}
-
h.jc.UpdateDids([]string{did})
return nil
}
···
return nil
}
+
var err error
+
defer func() {
+
eventTime := event.TimeUS
+
lastTimeUs := eventTime + 1
+
fmt.Println("lastTimeUs", lastTimeUs)
+
if err := h.db.UpdateLastTimeUs(lastTimeUs); err != nil {
+
err = fmt.Errorf("(deferred) failed to save last time us: %w", err)
+
}
+
h.jc.UpdateDids([]string{did})
+
}()
+
raw := json.RawMessage(event.Commit.Record)
switch event.Commit.Collection {
···
if err := json.Unmarshal(raw, &record); err != nil {
return fmt.Errorf("failed to unmarshal record: %w", err)
}
-
if err := h.processKnotMember(ctx, did, record, event.TimeUS); err != nil {
+
if err := h.processKnotMember(ctx, did, record); err != nil {
return fmt.Errorf("failed to process knot member: %w", err)
}
}
-
return nil
+
return err
}