Skip to content

Commit c2eb805

Browse files
author
Luis Sanchez
committed
[FAB-3658] improve h/f/orderer coverage
improve hyperledger/fabric/orderer coverage to 86.3% Change-Id: If2c79c1b7b4eec8a1d969a09590a91176b775ef4 Signed-off-by: Luis Sanchez <[email protected]>
1 parent 92e1dc3 commit c2eb805

File tree

4 files changed

+431
-56
lines changed

4 files changed

+431
-56
lines changed

orderer/main.go

+70-54
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,12 @@ import (
2727

2828
genesisconfig "github.com/hyperledger/fabric/common/configtx/tool/localconfig"
2929
"github.com/hyperledger/fabric/common/configtx/tool/provisional"
30+
"github.com/hyperledger/fabric/common/crypto"
3031
"github.com/hyperledger/fabric/common/flogging"
3132
"github.com/hyperledger/fabric/core/comm"
3233
"github.com/hyperledger/fabric/orderer/common/bootstrap/file"
3334
"github.com/hyperledger/fabric/orderer/kafka"
35+
"github.com/hyperledger/fabric/orderer/ledger"
3436
"github.com/hyperledger/fabric/orderer/localconfig"
3537
"github.com/hyperledger/fabric/orderer/multichain"
3638
"github.com/hyperledger/fabric/orderer/sbft"
@@ -49,28 +51,38 @@ var logger = logging.MustGetLogger("orderer/main")
4951

5052
func main() {
5153
conf := config.Load()
54+
initializeLoggingLevel(conf)
55+
initializeProfilingService(conf)
56+
grpcServer := initializeGrpcServer(conf)
57+
initializeLocalMsp(conf)
58+
signer := localmsp.NewSigner()
59+
manager := initializeMultiChainManager(conf, signer)
60+
server := NewServer(manager, signer)
61+
ab.RegisterAtomicBroadcastServer(grpcServer.Server(), server)
62+
logger.Info("Beginning to serve requests")
63+
grpcServer.Start()
64+
}
5265

53-
// Set the logging level
66+
// Set the logging level
67+
func initializeLoggingLevel(conf *config.TopLevel) {
5468
flogging.InitFromSpec(conf.General.LogLevel)
5569
if conf.Kafka.Verbose {
5670
sarama.Logger = log.New(os.Stdout, "[sarama] ", log.Lshortfile)
5771
}
72+
}
5873

59-
// Start the profiling service if enabled.
60-
// The ListenAndServe() call does not return unless an error occurs.
74+
// Start the profiling service if enabled.
75+
func initializeProfilingService(conf *config.TopLevel) {
6176
if conf.General.Profile.Enabled {
6277
go func() {
6378
logger.Info("Starting Go pprof profiling service on:", conf.General.Profile.Address)
79+
// The ListenAndServe() call does not return unless an error occurs.
6480
logger.Panic("Go pprof service failed:", http.ListenAndServe(conf.General.Profile.Address, nil))
6581
}()
6682
}
83+
}
6784

68-
lis, err := net.Listen("tcp", fmt.Sprintf("%s:%d", conf.General.ListenAddress, conf.General.ListenPort))
69-
if err != nil {
70-
logger.Error("Failed to listen:", err)
71-
return
72-
}
73-
85+
func initializeSecureServerConfig(conf *config.TopLevel) comm.SecureServerConfig {
7486
// secure server config
7587
secureConfig := comm.SecureServerConfig{
7688
UseTLS: conf.General.TLS.Enabled,
@@ -114,52 +126,67 @@ func main() {
114126
secureConfig.ServerRootCAs = serverRootCAs
115127
secureConfig.ClientRootCAs = clientRootCAs
116128
}
129+
return secureConfig
130+
}
131+
132+
func initializeBootstrapChannel(conf *config.TopLevel, lf ledger.Factory) {
133+
var genesisBlock *cb.Block
134+
135+
// Select the bootstrapping mechanism
136+
switch conf.General.GenesisMethod {
137+
case "provisional":
138+
genesisBlock = provisional.New(genesisconfig.Load(conf.General.GenesisProfile)).GenesisBlock()
139+
case "file":
140+
genesisBlock = file.New(conf.General.GenesisFile).GenesisBlock()
141+
default:
142+
logger.Panic("Unknown genesis method:", conf.General.GenesisMethod)
143+
}
144+
145+
chainID, err := utils.GetChainIDFromBlock(genesisBlock)
146+
if err != nil {
147+
logger.Fatal("Failed to parse chain ID from genesis block:", err)
148+
}
149+
gl, err := lf.GetOrCreate(chainID)
150+
if err != nil {
151+
logger.Fatal("Failed to create the system chain:", err)
152+
}
153+
154+
err = gl.Append(genesisBlock)
155+
if err != nil {
156+
logger.Fatal("Could not write genesis block to ledger:", err)
157+
}
158+
}
159+
160+
func initializeGrpcServer(conf *config.TopLevel) comm.GRPCServer {
161+
secureConfig := initializeSecureServerConfig(conf)
162+
163+
lis, err := net.Listen("tcp", fmt.Sprintf("%s:%d", conf.General.ListenAddress, conf.General.ListenPort))
164+
if err != nil {
165+
logger.Fatal("Failed to listen:", err)
166+
}
117167

118168
// Create GRPC server - return if an error occurs
119169
grpcServer, err := comm.NewGRPCServerFromListener(lis, secureConfig)
120170
if err != nil {
121-
logger.Error("Failed to return new GRPC server:", err)
122-
return
171+
logger.Fatal("Failed to return new GRPC server:", err)
123172
}
124173

174+
return grpcServer
175+
}
176+
177+
func initializeLocalMsp(conf *config.TopLevel) {
125178
// Load local MSP
126-
err = mspmgmt.LoadLocalMsp(conf.General.LocalMSPDir, conf.General.BCCSP, conf.General.LocalMSPID)
179+
err := mspmgmt.LoadLocalMsp(conf.General.LocalMSPDir, conf.General.BCCSP, conf.General.LocalMSPID)
127180
if err != nil { // Handle errors reading the config file
128-
logger.Panic("Failed to initialize local MSP:", err)
181+
logger.Fatal("Failed to initialize local MSP:", err)
129182
}
183+
}
130184

185+
func initializeMultiChainManager(conf *config.TopLevel, signer crypto.LocalSigner) multichain.Manager {
131186
lf, _ := createLedgerFactory(conf)
132-
133187
// Are we bootstrapping?
134188
if len(lf.ChainIDs()) == 0 {
135-
var genesisBlock *cb.Block
136-
137-
// Select the bootstrapping mechanism
138-
switch conf.General.GenesisMethod {
139-
case "provisional":
140-
genesisBlock = provisional.New(genesisconfig.Load(conf.General.GenesisProfile)).GenesisBlock()
141-
case "file":
142-
genesisBlock = file.New(conf.General.GenesisFile).GenesisBlock()
143-
default:
144-
logger.Panic("Unknown genesis method:", conf.General.GenesisMethod)
145-
}
146-
147-
chainID, err := utils.GetChainIDFromBlock(genesisBlock)
148-
if err != nil {
149-
logger.Error("Failed to parse chain ID from genesis block:", err)
150-
return
151-
}
152-
gl, err := lf.GetOrCreate(chainID)
153-
if err != nil {
154-
logger.Error("Failed to create the system chain:", err)
155-
return
156-
}
157-
158-
err = gl.Append(genesisBlock)
159-
if err != nil {
160-
logger.Error("Could not write genesis block to ledger:", err)
161-
return
162-
}
189+
initializeBootstrapChannel(conf, lf)
163190
} else {
164191
logger.Info("Not bootstrapping because of existing chains")
165192
}
@@ -169,16 +196,5 @@ func main() {
169196
consenters["kafka"] = kafka.New(conf.Kafka.Version, conf.Kafka.Retry, conf.Kafka.TLS)
170197
consenters["sbft"] = sbft.New(makeSbftConsensusConfig(conf), makeSbftStackConfig(conf))
171198

172-
signer := localmsp.NewSigner()
173-
174-
manager := multichain.NewManagerImpl(lf, consenters, signer)
175-
176-
server := NewServer(
177-
manager,
178-
signer,
179-
)
180-
181-
ab.RegisterAtomicBroadcastServer(grpcServer.Server(), server)
182-
logger.Info("Beginning to serve requests")
183-
grpcServer.Start()
199+
return multichain.NewManagerImpl(lf, consenters, signer)
184200
}

0 commit comments

Comments
 (0)