@@ -27,10 +27,12 @@ import (
27
27
28
28
genesisconfig "github.com/hyperledger/fabric/common/configtx/tool/localconfig"
29
29
"github.com/hyperledger/fabric/common/configtx/tool/provisional"
30
+ "github.com/hyperledger/fabric/common/crypto"
30
31
"github.com/hyperledger/fabric/common/flogging"
31
32
"github.com/hyperledger/fabric/core/comm"
32
33
"github.com/hyperledger/fabric/orderer/common/bootstrap/file"
33
34
"github.com/hyperledger/fabric/orderer/kafka"
35
+ "github.com/hyperledger/fabric/orderer/ledger"
34
36
"github.com/hyperledger/fabric/orderer/localconfig"
35
37
"github.com/hyperledger/fabric/orderer/multichain"
36
38
"github.com/hyperledger/fabric/orderer/sbft"
@@ -49,28 +51,38 @@ var logger = logging.MustGetLogger("orderer/main")
49
51
50
52
func main () {
51
53
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
+ }
52
65
53
- // Set the logging level
66
+ // Set the logging level
67
+ func initializeLoggingLevel (conf * config.TopLevel ) {
54
68
flogging .InitFromSpec (conf .General .LogLevel )
55
69
if conf .Kafka .Verbose {
56
70
sarama .Logger = log .New (os .Stdout , "[sarama] " , log .Lshortfile )
57
71
}
72
+ }
58
73
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 ) {
61
76
if conf .General .Profile .Enabled {
62
77
go func () {
63
78
logger .Info ("Starting Go pprof profiling service on:" , conf .General .Profile .Address )
79
+ // The ListenAndServe() call does not return unless an error occurs.
64
80
logger .Panic ("Go pprof service failed:" , http .ListenAndServe (conf .General .Profile .Address , nil ))
65
81
}()
66
82
}
83
+ }
67
84
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 {
74
86
// secure server config
75
87
secureConfig := comm.SecureServerConfig {
76
88
UseTLS : conf .General .TLS .Enabled ,
@@ -114,52 +126,67 @@ func main() {
114
126
secureConfig .ServerRootCAs = serverRootCAs
115
127
secureConfig .ClientRootCAs = clientRootCAs
116
128
}
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
+ }
117
167
118
168
// Create GRPC server - return if an error occurs
119
169
grpcServer , err := comm .NewGRPCServerFromListener (lis , secureConfig )
120
170
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 )
123
172
}
124
173
174
+ return grpcServer
175
+ }
176
+
177
+ func initializeLocalMsp (conf * config.TopLevel ) {
125
178
// 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 )
127
180
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 )
129
182
}
183
+ }
130
184
185
+ func initializeMultiChainManager (conf * config.TopLevel , signer crypto.LocalSigner ) multichain.Manager {
131
186
lf , _ := createLedgerFactory (conf )
132
-
133
187
// Are we bootstrapping?
134
188
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 )
163
190
} else {
164
191
logger .Info ("Not bootstrapping because of existing chains" )
165
192
}
@@ -169,16 +196,5 @@ func main() {
169
196
consenters ["kafka" ] = kafka .New (conf .Kafka .Version , conf .Kafka .Retry , conf .Kafka .TLS )
170
197
consenters ["sbft" ] = sbft .New (makeSbftConsensusConfig (conf ), makeSbftStackConfig (conf ))
171
198
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 )
184
200
}
0 commit comments