Files
indra/pkg/seed/server.go
2023-03-01 07:25:16 +00:00

93 lines
1.1 KiB
Go

package seed
import (
"context"
"git-indra.lan/indra-labs/indra/pkg/p2p"
"git-indra.lan/indra-labs/indra/pkg/storage"
"sync"
)
var (
inUse sync.Mutex
)
func Run(ctx context.Context) {
if !inUse.TryLock() {
log.E.Ln("seed is in use")
return
}
log.I.Ln("running seed")
//
// Storage
//
go storage.Run()
select {
case err := <-storage.WhenStartFailed():
log.E.Ln("storage can't start:", err)
startupErrors <- err
return
case <-storage.WhenReady():
// continue
case <-ctx.Done():
Shutdown()
return
}
//
// P2P
//
go p2p.Run()
select {
case err := <-p2p.WhenStartFailed():
log.E.Ln("p2p can't start:", err)
startupErrors <- err
return
case <-p2p.WhenReady():
// continue
case <-ctx.Done():
Shutdown()
return
}
//
// RPC
//
//
// Ready!
//
log.I.Ln("seed is ready")
isReadyChan <- true
select {
case <-ctx.Done():
Shutdown()
return
}
}
func Shutdown() {
log.I.Ln("shutting down seed")
var err error
err = p2p.Shutdown()
check(err)
err = storage.Shutdown()
check(err)
log.I.Ln("seed shutdown completed")
isShutdownChan <- true
}