2019-01-02 10:23:25 +00:00
// Copyright (C) 2019 Storj Labs, Inc.
// See LICENSE for copying information.
package server
import (
"context"
"net"
"go.uber.org/zap"
"google.golang.org/grpc"
"storj.io/storj/pkg/identity"
"storj.io/storj/pkg/peertls"
"storj.io/storj/pkg/utils"
)
// Config holds server specific configuration parameters
type Config struct {
2019-02-06 16:40:55 +00:00
RevocationDBURL string ` default:"bolt://$CONFDIR/revocations.db" help:"url for revocation database (e.g. bolt://some.db OR redis://127.0.0.1:6378?db=2&password=abc123)" `
2019-01-17 17:36:45 +00:00
PeerCAWhitelistPath string ` help:"path to the CA cert whitelist (peer identities must be signed by one these to be verified). this will override the default peer whitelist" `
UsePeerCAWhitelist bool ` help:"if true, uses peer ca whitelist checking" default:"false" `
2019-01-15 13:55:33 +00:00
Address string ` user:"true" help:"address to listen on" default:":7777" `
2019-01-02 10:23:25 +00:00
Extensions peertls . TLSExtConfig
}
// Run will run the given responsibilities with the configured identity.
2019-01-25 14:54:54 +00:00
func ( sc Config ) Run ( ctx context . Context , identity * identity . FullIdentity , interceptor grpc . UnaryServerInterceptor , services ... Service ) ( err error ) {
2019-01-02 10:23:25 +00:00
defer mon . Task ( ) ( & ctx ) ( & err )
lis , err := net . Listen ( "tcp" , sc . Address )
if err != nil {
return err
}
defer func ( ) { _ = lis . Close ( ) } ( )
2019-01-25 14:54:54 +00:00
opts , err := NewOptions ( identity , sc )
2019-01-02 10:23:25 +00:00
if err != nil {
return err
}
defer func ( ) { err = utils . CombineErrors ( err , opts . RevDB . Close ( ) ) } ( )
2019-01-28 15:04:53 +00:00
server , err := New ( opts , lis , interceptor , services ... )
2019-01-02 10:23:25 +00:00
if err != nil {
return err
}
2019-01-17 21:08:05 +00:00
go func ( ) {
<- ctx . Done ( )
2019-01-28 15:04:53 +00:00
if closeErr := server . Close ( ) ; closeErr != nil {
2019-01-17 21:08:05 +00:00
zap . S ( ) . Errorf ( "Failed to close server: %s" , closeErr )
}
} ( )
2019-01-02 10:23:25 +00:00
2019-01-28 15:04:53 +00:00
zap . S ( ) . Infof ( "Node %s started on %s" , server . Identity ( ) . ID , sc . Address )
return server . Run ( ctx )
2019-01-02 10:23:25 +00:00
}