Skip to content

Commit 85fd812

Browse files
add context to node run
1 parent 759daa5 commit 85fd812

File tree

12 files changed

+75
-18
lines changed

12 files changed

+75
-18
lines changed

cmd/access/main.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package main
22

33
import (
4+
"context"
5+
46
"github.com/onflow/flow-go/cmd"
57
nodebuilder "github.com/onflow/flow-go/cmd/access/node_builder"
68
"github.com/onflow/flow-go/model/flow"
@@ -24,5 +26,5 @@ func main() {
2426
if err != nil {
2527
builder.Logger.Fatal().Err(err).Send()
2628
}
27-
node.Run()
29+
node.Run(context.Background())
2830
}

cmd/collection/main.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package main
22

33
import (
4+
"context"
45
"fmt"
56
"time"
67

@@ -646,7 +647,7 @@ func main() {
646647
if err != nil {
647648
nodeBuilder.Logger.Fatal().Err(err).Send()
648649
}
649-
node.Run()
650+
node.Run(context.Background())
650651
}
651652

652653
// createQCContractClient creates QC contract client

cmd/consensus/main.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package main
22

33
import (
4+
"context"
45
"encoding/json"
56
"errors"
67
"fmt"
@@ -933,7 +934,7 @@ func main() {
933934
if err != nil {
934935
nodeBuilder.Logger.Fatal().Err(err).Send()
935936
}
936-
node.Run()
937+
node.Run(context.Background())
937938
}
938939

939940
func loadBeaconPrivateKey(dir string, myID flow.Identifier) (*encodable.RandomBeaconPrivKey, error) {

cmd/execution/main.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package main
22

33
import (
4+
"context"
5+
46
"github.com/onflow/flow-go/cmd"
57
"github.com/onflow/flow-go/model/flow"
68
)
@@ -19,5 +21,5 @@ func main() {
1921
if err != nil {
2022
exeBuilder.FlowNodeBuilder.Logger.Fatal().Err(err).Send()
2123
}
22-
node.Run()
24+
node.Run(context.Background())
2325
}

cmd/ghost/main.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package main
22

33
import (
4+
"context"
5+
46
"github.com/spf13/pflag"
57

68
"github.com/onflow/flow-go/cmd"
@@ -45,5 +47,5 @@ func main() {
4547
if err != nil {
4648
nodeBuilder.Logger.Fatal().Err(err).Send()
4749
}
48-
node.Run()
50+
node.Run(context.Background())
4951
}

cmd/node.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ type Node interface {
2222
// Run initiates all common components (logger, database, protocol state etc.)
2323
// then starts each component. It also sets up a channel to gracefully shut
2424
// down each component if a SIGINT is received.
25-
Run()
25+
// The context can also be used to signal the node to shutdown.
26+
Run(ctx context.Context)
2627
}
2728

2829
// FlowNodeImp is created by the FlowNodeBuilder with all components ready to be started.
@@ -86,8 +87,7 @@ func NewBaseNode(
8687
// which point it gracefully shuts down.
8788
// Any unhandled irrecoverable errors thrown in child components will propagate up to here and
8889
// result in a fatal error.
89-
func (node *NodeImp) Run() {
90-
ctx := context.Background()
90+
func (node *NodeImp) Run(ctx context.Context) {
9191

9292
// Block until node is shutting down
9393
err := node.run(ctx)

cmd/node_test.go

Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cmd
22

33
import (
4+
"context"
45
"errors"
56
"os"
67
"syscall"
@@ -42,7 +43,7 @@ func TestRunShutsDownCleanly(t *testing.T) {
4243

4344
finished := make(chan struct{})
4445
go func() {
45-
node.Run()
46+
node.Run(context.Background())
4647
close(finished)
4748
}()
4849

@@ -62,6 +63,44 @@ func TestRunShutsDownCleanly(t *testing.T) {
6263
}, testLogger.logs)
6364
})
6465

66+
t.Run("Run shuts down gracefully on context cancel", func(t *testing.T) {
67+
testLogger.Reset()
68+
manager := component.NewComponentManagerBuilder().
69+
AddWorker(func(ctx irrecoverable.SignalerContext, ready component.ReadyFunc) {
70+
testLogger.Log("worker starting up")
71+
ready()
72+
testLogger.Log("worker startup complete")
73+
74+
<-ctx.Done()
75+
testLogger.Log("worker shutting down")
76+
testLogger.Log("worker shutdown complete")
77+
}).
78+
Build()
79+
node := NewNode(manager, nodeConfig, logger, postShutdown, fatalHandler)
80+
81+
ctx, cancel := context.WithCancel(context.Background())
82+
83+
finished := make(chan struct{})
84+
go func() {
85+
node.Run(ctx)
86+
close(finished)
87+
}()
88+
89+
<-node.Ready()
90+
91+
cancel()
92+
93+
<-finished
94+
95+
assert.Equal(t, []string{
96+
"worker starting up",
97+
"worker startup complete",
98+
"worker shutting down",
99+
"worker shutdown complete",
100+
"running cleanup",
101+
}, testLogger.logs)
102+
})
103+
65104
t.Run("Run encounters error during postShutdown", func(t *testing.T) {
66105
testLogger.Reset()
67106
manager := component.NewComponentManagerBuilder().
@@ -82,7 +121,7 @@ func TestRunShutsDownCleanly(t *testing.T) {
82121

83122
finished := make(chan struct{})
84123
go func() {
85-
node.Run()
124+
node.Run(context.Background())
86125
close(finished)
87126
}()
88127

@@ -123,7 +162,7 @@ func TestRunShutsDownCleanly(t *testing.T) {
123162

124163
finished := make(chan struct{})
125164
go func() {
126-
node.Run()
165+
node.Run(context.Background())
127166
close(finished)
128167
}()
129168

@@ -157,7 +196,7 @@ func TestRunShutsDownCleanly(t *testing.T) {
157196

158197
finished := make(chan struct{})
159198
go func() {
160-
node.Run()
199+
node.Run(context.Background())
161200
close(finished)
162201
}()
163202

@@ -191,7 +230,7 @@ func TestRunShutsDownCleanly(t *testing.T) {
191230

192231
finished := make(chan struct{})
193232
go func() {
194-
node.Run()
233+
node.Run(context.Background())
195234
close(finished)
196235
}()
197236

cmd/observer/main.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package main
22

33
import (
4+
"context"
5+
46
nodebuilder "github.com/onflow/flow-go/cmd/observer/node_builder"
57
)
68

@@ -22,5 +24,5 @@ func main() {
2224
if err != nil {
2325
anb.Logger.Fatal().Err(err).Send()
2426
}
25-
node.Run()
27+
node.Run(context.Background())
2628
}

cmd/verification/main.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package main
22

33
import (
4+
"context"
5+
46
"github.com/onflow/flow-go/cmd"
57
"github.com/onflow/flow-go/model/flow"
68
)
@@ -20,5 +22,5 @@ func main() {
2022
if err != nil {
2123
verificationBuilder.FlowNodeBuilder.Logger.Fatal().Err(err).Send()
2224
}
23-
node.Run()
25+
node.Run(context.Background())
2426
}

insecure/cmd/access/main.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package main
22

33
import (
4+
"context"
5+
46
nodebuilder "github.com/onflow/flow-go/cmd/access/node_builder"
57
insecmd "github.com/onflow/flow-go/insecure/cmd"
68
"github.com/onflow/flow-go/model/flow"
@@ -31,5 +33,5 @@ func main() {
3133
builder.Logger.Fatal().Err(err).Send()
3234
}
3335

34-
node.Run()
36+
node.Run(context.Background())
3537
}

0 commit comments

Comments
 (0)