an app.bsky.* indexer

fixup context stop/cancel patterns

Changed files
+15 -5
cmd
monarch
+15 -5
cmd/monarch/main.go
···
import (
"context"
+
"errors"
"fmt"
"log/slog"
"os"
"os/signal"
"runtime"
-
"syscall"
"time"
comatproto "github.com/bluesky-social/indigo/api/atproto"
···
}
app.Action = func(cctx *cli.Context) error {
-
ctx, cancel := signal.NotifyContext(context.TODO(), syscall.SIGINT, syscall.SIGTERM)
-
defer cancel()
+
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt)
+
defer stop()
statedburl := cctx.String("state-db-url")
contentdburl := cctx.String("content-db-url")
···
}
<-ctx.Done()
+
stop()
slog.Info("shutting down")
endctx, cancel := context.WithTimeout(context.TODO(), time.Minute)
defer cancel()
-
if err := app.Stop(endctx); err != nil {
-
slog.Error("error during shutdown", "err", err)
+
go func() {
+
if err := app.Stop(endctx); err != nil {
+
slog.Error("error during shutdown", "err", err)
+
}
+
}()
+
+
select {
+
case <-endctx.Done():
+
if errors.Is(endctx.Err(), context.DeadlineExceeded) {
+
slog.Info("timeout exceeded")
+
}
}
return nil