Skip to content

Commit 910787d

Browse files
authored
Merge pull request #40 from ne-sachirou/default-timeout-is-infinity
[BREAKING]GracefulShutdownTimeoutを省略した場合にpanicしていたところ、正常終了を無期限に待つように変えた
2 parents 81b8551 + e4bdf4d commit 910787d

File tree

6 files changed

+23
-34
lines changed

6 files changed

+23
-34
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ A library implemented in Go to gracefully shutdown the server.
1313
- Trap os.Signal and exit gracefully.
1414
- You can specify os.Signal to trap. By default, only os.Interrupt is trapped.
1515
- Exit processing can be specified.
16-
- If the specified timeout period elapses, a forced termination will occur. By default, it terminates immediately.
16+
- If the specified timeout period elapses, a forced termination will occur. By default, it waits indefinitely for a normal termination.
1717
- Multiple servers can be started gracefully.
1818
- If one of the servers fails to start, all started servers will be terminated gracefully.
1919
- The HTTP and gRPC servers implement a wrapper function for easy startup.
@@ -277,7 +277,7 @@ Go で実装した server を graceful に shutdown する library です。
277277
- os.Signal を trap し、graceful に終了します
278278
- trap する os.Signal を指定できます。標準では os.Interrupt のみを trap します
279279
- 終了処理を指定できます
280-
- 指定した timeout 時間を過ぎると、強制終了します。標準では即座に強制終了します
280+
- 指定した timeout 時間を過ぎると、強制終了します。標準では正常終了を永遠に待ちます
281281
- 複数の server を graceful に起動できます
282282
- その内の server の 1 つでも起動に失敗したら、起動済みの全ての server を graceful に終了します
283283
- HTTP と gRPC の server は、簡単に起動できる wrapper 函数を実装してあります

cmd/example-grpc/main.go

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,10 @@ package main
33

44
import (
55
"context"
6-
"time"
76

87
"google.golang.org/grpc"
98
"google.golang.org/grpc/reflection"
109

11-
"github.com/ne-sachirou/go-graceful"
1210
"github.com/ne-sachirou/go-graceful/gracefulgrpc"
1311
)
1412

@@ -19,12 +17,7 @@ func main() {
1917
srv := grpc.NewServer(opts...)
2018
reflection.Register(srv)
2119

22-
if err := gracefulgrpc.ListenAndServe(
23-
ctx,
24-
":4317",
25-
srv,
26-
graceful.GracefulShutdownTimeout(time.Second),
27-
); err != nil {
20+
if err := gracefulgrpc.ListenAndServe(ctx, ":4317", srv); err != nil {
2821
panic(err)
2922
}
3023
}

cmd/example-http/main.go

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@ import (
55
"context"
66
"fmt"
77
"net/http"
8-
"time"
98

10-
"github.com/ne-sachirou/go-graceful"
119
"github.com/ne-sachirou/go-graceful/gracefulhttp"
1210
)
1311

@@ -21,12 +19,7 @@ func main() {
2119
}
2220
})
2321

24-
if err := gracefulhttp.ListenAndServe(
25-
ctx,
26-
":8000",
27-
mux,
28-
graceful.GracefulShutdownTimeout(time.Second),
29-
); err != nil {
22+
if err := gracefulhttp.ListenAndServe(ctx, ":8000", mux); err != nil {
3023
panic(err)
3124
}
3225
}

cmd/example/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ func main() {
101101
},
102102
}
103103

104-
if err := srv.Graceful(ctx, graceful.GracefulShutdownTimeout(time.Second)); err != nil {
104+
if err := srv.Graceful(ctx); err != nil {
105105
panic(err)
106106
}
107107
}

go.sum

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,16 @@ github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
88
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
99
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
1010
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
11-
go.opentelemetry.io/otel v1.31.0 h1:NsJcKPIW0D0H3NgzPDHmo0WW6SptzPdqg/L1zsIm2hY=
12-
go.opentelemetry.io/otel v1.31.0/go.mod h1:O0C14Yl9FgkjqcCZAsE053C13OaddMYr/hz6clDkEJE=
13-
go.opentelemetry.io/otel/metric v1.31.0 h1:FSErL0ATQAmYHUIzSezZibnyVlft1ybhy4ozRPcF2fE=
14-
go.opentelemetry.io/otel/metric v1.31.0/go.mod h1:C3dEloVbLuYoX41KpmAhOqNriGbA+qqH6PQ5E5mUfnY=
15-
go.opentelemetry.io/otel/sdk v1.31.0 h1:xLY3abVHYZ5HSfOg3l2E5LUj2Cwva5Y7yGxnSW9H5Gk=
16-
go.opentelemetry.io/otel/sdk v1.31.0/go.mod h1:TfRbMdhvxIIr/B2N2LQW2S5v9m3gOQ/08KsbbO5BPT0=
17-
go.opentelemetry.io/otel/sdk/metric v1.31.0 h1:i9hxxLJF/9kkvfHppyLL55aW7iIJz4JjxTeYusH7zMc=
18-
go.opentelemetry.io/otel/sdk/metric v1.31.0/go.mod h1:CRInTMVvNhUKgSAMbKyTMxqOBC0zgyxzW55lZzX43Y8=
19-
go.opentelemetry.io/otel/trace v1.31.0 h1:ffjsj1aRouKewfr85U2aGagJ46+MvodynlQ1HYdmJys=
20-
go.opentelemetry.io/otel/trace v1.31.0/go.mod h1:TXZkRk7SM2ZQLtR6eoAWQFIHPvzQ06FJAsO1tJg480A=
11+
go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U=
12+
go.opentelemetry.io/otel v1.32.0/go.mod h1:00DCVSB0RQcnzlwyTfqtxSm+DRr9hpYrHjNGiBHVQIg=
13+
go.opentelemetry.io/otel/metric v1.32.0 h1:xV2umtmNcThh2/a/aCP+h64Xx5wsj8qqnkYZktzNa0M=
14+
go.opentelemetry.io/otel/metric v1.32.0/go.mod h1:jH7CIbbK6SH2V2wE16W05BHCtIDzauciCRLoc/SyMv8=
15+
go.opentelemetry.io/otel/sdk v1.32.0 h1:RNxepc9vK59A8XsgZQouW8ue8Gkb4jpWtJm9ge5lEG4=
16+
go.opentelemetry.io/otel/sdk v1.32.0/go.mod h1:LqgegDBjKMmb2GC6/PrTnteJG39I8/vJCAP9LlJXEjU=
17+
go.opentelemetry.io/otel/sdk/metric v1.32.0 h1:rZvFnvmvawYb0alrYkjraqJq0Z4ZUJAiyYCU9snn1CU=
18+
go.opentelemetry.io/otel/sdk/metric v1.32.0/go.mod h1:PWeZlq0zt9YkYAp3gjKZ0eicRYvOh1Gd+X99x6GHpCQ=
19+
go.opentelemetry.io/otel/trace v1.32.0 h1:WIC9mYrXf8TmY/EXuULKc8hR17vE+Hjv2cssQDe03fM=
20+
go.opentelemetry.io/otel/trace v1.32.0/go.mod h1:+i4rkvCraA+tG6AzwloGaCtkx53Fa+L+V8e9a7YvhT8=
2121
golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
2222
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
2323
golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
@@ -26,10 +26,6 @@ golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
2626
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
2727
google.golang.org/genproto/googleapis/rpc v0.0.0-20241223144023-3abc09e42ca8 h1:TqExAhdPaB60Ux47Cn0oLV07rGnxZzIsaRhQaqS666A=
2828
google.golang.org/genproto/googleapis/rpc v0.0.0-20241223144023-3abc09e42ca8/go.mod h1:lcTa1sDdWEIHMWlITnIczmw5w60CF9ffkb8Z+DVmmjA=
29-
google.golang.org/grpc v1.69.2 h1:U3S9QEtbXC0bYNvRtcoklF3xGtLViumSYxWykJS+7AU=
30-
google.golang.org/grpc v1.69.2/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4=
31-
google.golang.org/grpc v1.69.4 h1:MF5TftSMkd8GLw/m0KM6V8CMOCY6NZ1NQDPGFgbTt4A=
32-
google.golang.org/grpc v1.69.4/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4=
3329
google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ=
3430
google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw=
3531
google.golang.org/protobuf v1.36.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk=

graceful.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,14 @@ func (s Servers) Graceful(ctx context.Context, options ...Option) error {
7777
return errors.Join(errors.New("failed to start servers"), err) // nolint:govet
7878
}
7979

80-
ctx, cancelT := context.WithTimeout(context.Background(), opts.ShutdownTimeout)
80+
var shutdownCtx context.Context
81+
var cancelT context.CancelFunc
82+
if opts.ShutdownTimeout > 0 {
83+
shutdownCtx, cancelT = context.WithTimeout(context.Background(), opts.ShutdownTimeout)
84+
} else {
85+
shutdownCtx, cancelT = context.WithCancel(context.Background())
86+
}
87+
ctx = shutdownCtx
8188
defer cancelT()
8289

8390
var wg sync.WaitGroup

0 commit comments

Comments
 (0)