|
8 | 8 | "fmt" |
9 | 9 | "io" |
10 | 10 | "log" |
| 11 | + "sync" |
11 | 12 |
|
12 | 13 | "github.com/hashicorp/go-plugin" |
13 | 14 | "github.com/hashicorp/terraform-svchost/disco" |
@@ -47,40 +48,50 @@ func (c GRPCStacksClient) registerBrokers(stdout, stderr io.Writer) brokerIDs { |
47 | 48 | packagesServer := dynrpcserver.NewPackagesStub() |
48 | 49 | stacksServer := dynrpcserver.NewStacksStub() |
49 | 50 |
|
50 | | - var s *grpc.Server |
| 51 | + var serverWG sync.WaitGroup |
| 52 | + // wait for all 3 servers to start |
| 53 | + serverWG.Add(3) |
| 54 | + |
51 | 55 | dependenciesServerFunc := func(opts []grpc.ServerOption) *grpc.Server { |
52 | | - s = grpc.NewServer(opts...) |
| 56 | + s := grpc.NewServer(opts...) |
53 | 57 | dependencies.RegisterDependenciesServer(s, dependenciesServer) |
54 | 58 | dependenciesServer.ActivateRPCServer(newDependenciesServer(handles, c.Services)) |
55 | 59 |
|
| 60 | + serverWG.Done() |
56 | 61 | return s |
57 | 62 | } |
58 | 63 |
|
59 | 64 | dependenciesBrokerID := c.Broker.NextId() |
60 | 65 | go c.Broker.AcceptAndServe(dependenciesBrokerID, dependenciesServerFunc) |
61 | 66 |
|
62 | 67 | packagesServerFunc := func(opts []grpc.ServerOption) *grpc.Server { |
63 | | - s = grpc.NewServer(opts...) |
| 68 | + s := grpc.NewServer(opts...) |
64 | 69 | packages.RegisterPackagesServer(s, packagesServer) |
65 | 70 | packagesServer.ActivateRPCServer(newPackagesServer(c.Services)) |
66 | 71 |
|
| 72 | + serverWG.Done() |
67 | 73 | return s |
68 | 74 | } |
69 | 75 |
|
70 | 76 | packagesBrokerID := c.Broker.NextId() |
71 | 77 | go c.Broker.AcceptAndServe(packagesBrokerID, packagesServerFunc) |
72 | 78 |
|
73 | 79 | stacksServerFunc := func(opts []grpc.ServerOption) *grpc.Server { |
74 | | - s = grpc.NewServer(opts...) |
| 80 | + s := grpc.NewServer(opts...) |
75 | 81 | stacks.RegisterStacksServer(s, stacksServer) |
76 | 82 | stacksServer.ActivateRPCServer(newStacksServer( |
77 | 83 | newStopper(), handles, c.Services, &serviceOpts{experimentsAllowed: true})) |
| 84 | + |
| 85 | + serverWG.Done() |
78 | 86 | return s |
79 | 87 | } |
80 | 88 |
|
81 | 89 | stacksBrokerID := c.Broker.NextId() |
82 | 90 | go c.Broker.AcceptAndServe(stacksBrokerID, stacksServerFunc) |
83 | 91 |
|
| 92 | + // block till all 3 servers have signaled readiness |
| 93 | + serverWG.Wait() |
| 94 | + |
84 | 95 | return brokerIDs{ |
85 | 96 | dependenciesBrokerID: dependenciesBrokerID, |
86 | 97 | packagesBrokerID: packagesBrokerID, |
|
0 commit comments