@@ -40,6 +40,9 @@ import (
40
40
"google.golang.org/grpc/grpclog"
41
41
)
42
42
43
+ //function used by chaincode support
44
+ type ccEndpointFunc func () (* pb.PeerEndpoint , error )
45
+
43
46
var chaincodeDevMode bool
44
47
var peerDefaultChain bool
45
48
var orderingEndpoint string
@@ -128,7 +131,9 @@ func serve(args []string) error {
128
131
// enable the cache of chaincode info
129
132
ccprovider .EnableCCInfoCache ()
130
133
131
- registerChaincodeSupport (peerServer .Server ())
134
+ ccSrv , ccEpFunc := createChaincodeServer (peerServer , listenAddr )
135
+ registerChaincodeSupport (ccSrv .Server (), ccEpFunc )
136
+ go ccSrv .Start ()
132
137
133
138
logger .Debugf ("Running peer" )
134
139
@@ -247,10 +252,52 @@ func serve(args []string) error {
247
252
return <- serve
248
253
}
249
254
255
+ //create a CC listener using peer.chaincodeListenAddress (and if that's not set use peer.peerAddress)
256
+ func createChaincodeServer (peerServer comm.GRPCServer , peerListenAddress string ) (comm.GRPCServer , ccEndpointFunc ) {
257
+ cclistenAddress := viper .GetString ("peer.chaincodeListenAddress" )
258
+
259
+ var srv comm.GRPCServer
260
+ var ccEpFunc ccEndpointFunc
261
+
262
+ //use the chaincode address endpoint function..
263
+ //three cases
264
+ // - peer.chaincodeListenAddress not specied (use peer's server)
265
+ // - peer.chaincodeListenAddress identical to peer.listenAddress (use peer's server)
266
+ // - peer.chaincodeListenAddress different and specified (create chaincode server)
267
+ if cclistenAddress == "" {
268
+ //...but log a warning
269
+ logger .Warningf ("peer.chaincodeListenAddress is not set, use peer.listenAddress %s" , peerListenAddress )
270
+
271
+ //we are using peer address, use peer endpoint
272
+ ccEpFunc = peer .GetPeerEndpoint
273
+ srv = peerServer
274
+ } else if cclistenAddress == peerListenAddress {
275
+ //using peer's endpoint...log a warning
276
+ logger .Warningf ("peer.chaincodeListenAddress is identical to peer.listenAddress %s" , cclistenAddress )
277
+
278
+ //we are using peer address, use peer endpoint
279
+ ccEpFunc = peer .GetPeerEndpoint
280
+ srv = peerServer
281
+ } else {
282
+ config , err := peer .GetSecureConfig ()
283
+ if err != nil {
284
+ panic (err )
285
+ }
286
+
287
+ srv , err = comm .NewGRPCServer (cclistenAddress , config )
288
+ if err != nil {
289
+ panic (err )
290
+ }
291
+ ccEpFunc = getChaincodeAddressEndpoint
292
+ }
293
+
294
+ return srv , ccEpFunc
295
+ }
296
+
250
297
//NOTE - when we implment JOIN we will no longer pass the chainID as param
251
298
//The chaincode support will come up without registering system chaincodes
252
299
//which will be registered only during join phase.
253
- func registerChaincodeSupport (grpcServer * grpc.Server ) {
300
+ func registerChaincodeSupport (grpcServer * grpc.Server , ccEpFunc ccEndpointFunc ) {
254
301
//get user mode
255
302
userRunsCC := chaincode .IsDevMode ()
256
303
@@ -263,14 +310,36 @@ func registerChaincodeSupport(grpcServer *grpc.Server) {
263
310
logger .Debugf ("Chaincode startup timeout value set to %s" , ccStartupTimeout )
264
311
}
265
312
266
- ccSrv := chaincode .NewChaincodeSupport (peer . GetPeerEndpoint , userRunsCC , ccStartupTimeout )
313
+ ccSrv := chaincode .NewChaincodeSupport (ccEpFunc , userRunsCC , ccStartupTimeout )
267
314
268
315
//Now that chaincode is initialized, register all system chaincodes.
269
316
scc .RegisterSysCCs ()
270
317
271
318
pb .RegisterChaincodeSupportServer (grpcServer , ccSrv )
272
319
}
273
320
321
+ func getChaincodeAddressEndpoint () (* pb.PeerEndpoint , error ) {
322
+ //need this for the ID to create chaincode endpoint
323
+ peerEndpoint , err := peer .GetPeerEndpoint ()
324
+ if err != nil {
325
+ return nil , err
326
+ }
327
+
328
+ ccendpoint := viper .GetString ("peer.chaincodeListenAddress" )
329
+ if ccendpoint == "" {
330
+ return nil , fmt .Errorf ("peer.chaincodeListenAddress not specified" )
331
+ }
332
+
333
+ if _ , _ , err = net .SplitHostPort (ccendpoint ); err != nil {
334
+ return nil , err
335
+ }
336
+
337
+ return & pb.PeerEndpoint {
338
+ Id : peerEndpoint .Id ,
339
+ Address : ccendpoint ,
340
+ }, nil
341
+ }
342
+
274
343
func createEventHubServer (secureConfig comm.SecureServerConfig ) (comm.GRPCServer , error ) {
275
344
var lis net.Listener
276
345
var err error
0 commit comments