]> Sergey Matveev's repositories - btrtrc.git/commitdiff
cmd/torrent: Some log, ctx and error handling cleanup
authorMatt Joiner <anacrolix@gmail.com>
Fri, 4 Apr 2025 05:21:23 +0000 (16:21 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Mon, 7 Apr 2025 02:44:07 +0000 (12:44 +1000)
cmd/torrent/download.go
cmd/torrent/main.go

index 9bc16c1598e683fe2130fc863da45733520ecca2..e3cbdf5ff35b11880a520bbf24517a60408a787e 100644 (file)
@@ -98,6 +98,9 @@ func addTorrents(
 ) error {
        testPeers := resolveTestPeers(flags.TestPeer)
        for _, arg := range flags.Torrent {
+               if ctx.Err() != nil {
+                       return ctx.Err()
+               }
                t, err := func() (*torrent.Torrent, error) {
                        if strings.HasPrefix(arg, "magnet:") {
                                t, err := client.AddMagnet(arg)
@@ -108,7 +111,7 @@ func addTorrents(
                        } else if strings.HasPrefix(arg, "http://") || strings.HasPrefix(arg, "https://") {
                                response, err := http.Get(arg)
                                if err != nil {
-                                       return nil, fmt.Errorf("Error downloading torrent file: %s", err)
+                                       return nil, fmt.Errorf("error downloading torrent file: %w", err)
                                }
 
                                metaInfo, err := metainfo.Load(response.Body)
@@ -156,7 +159,7 @@ func addTorrents(
                        case <-t.GotInfo():
                        }
                        if flags.SaveMetainfos {
-                               path := fmt.Sprintf("%v.torrent", t.InfoHash().HexString())
+                               path := fmt.Sprintf("%s.torrent", t.InfoHash().HexString())
                                err := writeMetainfoToFile(t.Metainfo(), path)
                                if err == nil {
                                        log.Printf("wrote %q", path)
@@ -296,7 +299,7 @@ func statsEnabled(flags downloadFlags) bool {
        return flags.Stats
 }
 
-func downloadErr(flags downloadFlags) error {
+func downloadErr(ctx context.Context, flags downloadFlags) error {
        clientConfig := torrent.NewDefaultClientConfig()
        clientConfig.DisableWebseeds = flags.DisableWebseeds
        clientConfig.DisableTCP = !flags.TcpPeers
@@ -347,7 +350,7 @@ func downloadErr(flags downloadFlags) error {
                clientConfig.MaxUnverifiedBytes = flags.MaxUnverifiedBytes.Int64()
        }
 
-       ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
+       ctx, cancel := signal.NotifyContext(ctx, os.Interrupt, syscall.SIGTERM)
        defer cancel()
 
        client, err := torrent.NewClient(clientConfig)
index 3f5b82ccfadb9f1dba41e6db9c99b30cdc758180..3ae99f8b4e5ee3a671c013cfa5fabeda63389895 100644 (file)
@@ -36,7 +36,11 @@ func shutdownTracerProvider(ctx context.Context, tp *trace.TracerProvider) {
        started := time.Now()
        err := tp.Shutdown(ctx)
        elapsed := time.Since(started)
-       log.Levelf(log.Error, "shutting down tracer provider (took %v): %v", elapsed, err)
+       logger := log.Default.Slogger()
+       logger.Debug("shutting down tracer provider", "took", elapsed)
+       if err != nil && ctx.Err() == nil {
+               log.Default.Slogger().Error("error shutting down tracer provider", "err", err)
+       }
 }
 
 func main() {
@@ -51,7 +55,6 @@ func mainErr(ctx context.Context) error {
                return fmt.Errorf("creating tracing exporter: %w", err)
        }
        tracerProvider := trace.NewTracerProvider(trace.WithBatcher(tracingExporter))
-       defer shutdownTracerProvider(ctx, tracerProvider)
        otel.SetTracerProvider(tracerProvider)
 
        main := bargle.Main{}
@@ -84,7 +87,7 @@ func mainErr(ctx context.Context) error {
                        var dlc DownloadCmd
                        cmd := bargle.FromStruct(&dlc)
                        cmd.DefaultAction = func() error {
-                               return downloadErr(downloadFlags{
+                               return downloadErr(ctx, downloadFlags{
                                        Debug:       debug,
                                        DownloadCmd: dlc,
                                })