فهرست منبع

Merge pull request #424 from squat/dependabot/go_modules/github.com/oklog/run-1.2.0

build(deps): bump github.com/oklog/run from 1.1.0 to 1.2.0
Lucas Servén Marín 2 ماه پیش
والد
کامیت
6526bc9555
6فایلهای تغییر یافته به همراه96 افزوده شده و 22 حذف شده
  1. 1 1
      go.mod
  2. 2 2
      go.sum
  3. 1 1
      vendor/github.com/oklog/run/LICENSE
  4. 24 8
      vendor/github.com/oklog/run/README.md
  5. 66 8
      vendor/github.com/oklog/run/actors.go
  6. 2 2
      vendor/modules.txt

+ 1 - 1
go.mod

@@ -10,7 +10,7 @@ require (
 	github.com/go-kit/kit v0.9.0
 	github.com/kylelemons/godebug v1.1.0
 	github.com/metalmatze/signal v0.0.0-20210307161603-1c9aa721a97a
-	github.com/oklog/run v1.1.0
+	github.com/oklog/run v1.2.0
 	github.com/prometheus/client_golang v1.23.2
 	github.com/spf13/cobra v1.10.2
 	github.com/vishvananda/netlink v1.3.1

+ 2 - 2
go.sum

@@ -160,8 +160,8 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8m
 github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
 github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
 github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
-github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA=
-github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU=
+github.com/oklog/run v1.2.0 h1:O8x3yXwah4A73hJdlrwo/2X6J62gE5qTMusH0dvz60E=
+github.com/oklog/run v1.2.0/go.mod h1:mgDbKRSwPhJfesJ4PntqFUbKQRZ50NgmZTSPlFA0YFk=
 github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
 github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
 github.com/onsi/ginkgo/v2 v2.27.2 h1:LzwLj0b89qtIy6SSASkzlNvX6WktqurSHwkk2ipF/Ns=

+ 1 - 1
vendor/github.com/oklog/run/LICENSE

@@ -186,7 +186,7 @@
       same "printed page" as the copyright notice for easier
       identification within third-party archives.
 
-   Copyright [yyyy] [name of copyright owner]
+   Copyright 2017 Peter Bourgon
 
    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.

+ 24 - 8
vendor/github.com/oklog/run/README.md

@@ -1,7 +1,7 @@
 # run
 
-[![GoDoc](https://godoc.org/github.com/oklog/run?status.svg)](https://godoc.org/github.com/oklog/run) 
-[![Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Foklog%2Frun%2Fbadge&style=flat-square&label=build)](https://github.com/oklog/run/actions?query=workflow%3ATest)
+[![GoDoc](https://godoc.org/github.com/oklog/run?status.svg)](https://godoc.org/github.com/oklog/run)
+[![test](https://github.com/oklog/run/actions/workflows/test.yaml/badge.svg?branch=main&event=push)](https://github.com/oklog/run/actions/workflows/test.yaml)
 [![Go Report Card](https://goreportcard.com/badge/github.com/oklog/run)](https://goreportcard.com/report/github.com/oklog/run)
 [![Apache 2 licensed](https://img.shields.io/badge/license-Apache2-blue.svg)](https://raw.githubusercontent.com/oklog/run/master/LICENSE)
 
@@ -16,8 +16,8 @@ finally returns control to the caller only once all actors have returned. This
 general-purpose API allows callers to model pretty much any runnable task, and
 achieve well-defined lifecycle semantics for the group.
 
-run.Group was written to manage component lifecycles in func main for 
-[OK Log](https://github.com/oklog/oklog). 
+run.Group was written to manage component lifecycles in func main for
+[OK Log](https://github.com/oklog/oklog).
 But it's useful in any circumstance where you need to orchestrate multiple
 goroutines as a unit whole.
 [Click here](https://www.youtube.com/watch?v=LHe1Cb_Ud_M&t=15m45s) to see a
@@ -62,14 +62,30 @@ g.Add(func() error {
 })
 ```
 
+### http.Server graceful Shutdown
+
+```go
+httpServer := &http.Server{
+	Addr:    "localhost:8080",
+	Handler: ...,
+}
+g.Add(func() error {
+	return httpServer.ListenAndServe()
+}, func(error) {
+	ctx, cancel := context.WithTimeout(context.TODO(), 3*time.Second)
+	defer cancel()
+	httpServer.Shutdown(ctx)
+})
+```
+
 ## Comparisons
 
-Package run is somewhat similar to package 
-[errgroup](https://godoc.org/golang.org/x/sync/errgroup), 
+Package run is somewhat similar to package
+[errgroup](https://godoc.org/golang.org/x/sync/errgroup),
 except it doesn't require actor goroutines to understand context semantics.
 
 It's somewhat similar to package
-[tomb.v1](https://godoc.org/gopkg.in/tomb.v1) or 
+[tomb.v1](https://godoc.org/gopkg.in/tomb.v1) or
 [tomb.v2](https://godoc.org/gopkg.in/tomb.v2),
-except it has a much smaller API surface, delegating e.g. staged shutdown of 
+except it has a much smaller API surface, delegating e.g. staged shutdown of
 goroutines to the caller.

+ 66 - 8
vendor/github.com/oklog/run/actors.go

@@ -2,22 +2,41 @@ package run
 
 import (
 	"context"
+	"errors"
 	"fmt"
 	"os"
 	"os/signal"
 )
 
+// ContextHandler returns an actor, i.e. an execute and interrupt func, that
+// terminates when the provided context is canceled.
+func ContextHandler(ctx context.Context) (execute func() error, interrupt func(error)) {
+	ctx, cancel := context.WithCancel(ctx)
+	return func() error {
+			<-ctx.Done()
+			return ctx.Err()
+		}, func(error) {
+			cancel()
+		}
+}
+
 // SignalHandler returns an actor, i.e. an execute and interrupt func, that
-// terminates with SignalError when the process receives one of the provided
-// signals, or the parent context is canceled.
+// terminates with ErrSignal when the process receives one of the provided
+// signals, or with ctx.Error() when the parent context is canceled. If no
+// signals are provided, the actor will terminate on any signal, per
+// [signal.Notify].
 func SignalHandler(ctx context.Context, signals ...os.Signal) (execute func() error, interrupt func(error)) {
 	ctx, cancel := context.WithCancel(ctx)
 	return func() error {
-			c := make(chan os.Signal, 1)
-			signal.Notify(c, signals...)
+			testc := getTestSigChan(ctx)
+			sigc := make(chan os.Signal, 1)
+			signal.Notify(sigc, signals...)
+			defer signal.Stop(sigc)
 			select {
-			case sig := <-c:
-				return SignalError{Signal: sig}
+			case sig := <-testc:
+				return &SignalError{Signal: sig}
+			case sig := <-sigc:
+				return &SignalError{Signal: sig}
 			case <-ctx.Done():
 				return ctx.Err()
 			}
@@ -26,13 +45,52 @@ func SignalHandler(ctx context.Context, signals ...os.Signal) (execute func() er
 		}
 }
 
-// SignalError is returned by the signal handler's execute function
-// when it terminates due to a received signal.
+type testSigChanKey struct{}
+
+func getTestSigChan(ctx context.Context) <-chan os.Signal {
+	c, _ := ctx.Value(testSigChanKey{}).(<-chan os.Signal) // can be nil
+	return c
+}
+
+func putTestSigChan(ctx context.Context, c <-chan os.Signal) context.Context {
+	return context.WithValue(ctx, testSigChanKey{}, c)
+}
+
+// SignalError is returned by the signal handler's execute function when it
+// terminates due to a received signal.
+//
+// SignalError has a design error that impacts comparison with errors.As.
+// Callers should prefer using errors.Is(err, ErrSignal) to check for signal
+// errors, and should only use errors.As in the rare case that they need to
+// program against the specific os.Signal value.
 type SignalError struct {
 	Signal os.Signal
 }
 
 // Error implements the error interface.
+//
+// It was a design error to define this method on a value receiver rather than a
+// pointer receiver. For compatibility reasons it won't be changed.
 func (e SignalError) Error() string {
 	return fmt.Sprintf("received signal %s", e.Signal)
 }
+
+// Is addresses a design error in the SignalError type, so that errors.Is with
+// ErrSignal will return true.
+func (e SignalError) Is(err error) bool {
+	return errors.Is(err, ErrSignal)
+}
+
+// As fixes a design error in the SignalError type, so that errors.As with the
+// literal `&SignalError{}` will return true.
+func (e SignalError) As(target interface{}) bool {
+	switch target.(type) {
+	case *SignalError, SignalError:
+		return true
+	default:
+		return false
+	}
+}
+
+// ErrSignal is returned by SignalHandler when a signal triggers termination.
+var ErrSignal = errors.New("signal error")

+ 2 - 2
vendor/modules.txt

@@ -145,8 +145,8 @@ github.com/modern-go/reflect2
 # github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822
 ## explicit
 github.com/munnerz/goautoneg
-# github.com/oklog/run v1.1.0
-## explicit; go 1.13
+# github.com/oklog/run v1.2.0
+## explicit; go 1.20
 github.com/oklog/run
 # github.com/pmezard/go-difflib v1.0.0
 ## explicit