forked from TrueCloudLab/frostfs-node
[#963] node: Go on initialization even deposit notary is hung
* Make makeAndWaitNotaryDeposit run asynchronously as worker during application boot-up. Signed-off-by: Airat Arifullin <a.arifullin@yadro.com>
This commit is contained in:
parent
6eb63cf5c7
commit
b4cb54e7ed
4 changed files with 24 additions and 2 deletions
|
@ -67,7 +67,10 @@ func main() {
|
|||
|
||||
bootUp(ctx, c)
|
||||
|
||||
c.compareAndSwapHealthStatus(control.HealthStatus_STARTING, control.HealthStatus_READY)
|
||||
go func() {
|
||||
c.initAppWG.Wait()
|
||||
c.compareAndSwapHealthStatus(control.HealthStatus_STARTING, control.HealthStatus_READY)
|
||||
}()
|
||||
|
||||
wait(c)
|
||||
}
|
||||
|
@ -144,7 +147,16 @@ func stopAndLog(c *cfg, name string, stopper func() error) {
|
|||
func bootUp(ctx context.Context, c *cfg) {
|
||||
runAndLog(ctx, c, "NATS", true, connectNats)
|
||||
runAndLog(ctx, c, "gRPC", false, func(_ context.Context, c *cfg) { serveGRPC(c) })
|
||||
runAndLog(ctx, c, "notary", true, makeAndWaitNotaryDeposit)
|
||||
|
||||
// It may happen that boot-up waits for the execution of a notary deposit transaction
|
||||
// and waiting loop may hang for an indefinite time. In this case, we need to let
|
||||
// frostfs-node go on initialization, although its functionality will be available partially.
|
||||
// That's why makeAndWaitNotaryDeposit is run asynchroniosly.
|
||||
c.initAppWG.Add(1)
|
||||
c.workers = append(c.workers, newWorkerFromFunc(func(ctx context.Context) {
|
||||
defer c.initAppWG.Done()
|
||||
runAndLog(ctx, c, "notary", true, makeAndWaitNotaryDeposit)
|
||||
}))
|
||||
|
||||
bootstrapNode(c)
|
||||
startWorkers(ctx, c)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue