0

I tried to use fabric node sdk to call for service discovery function of Fabric v1.2, but I got these errors:

2018-12-12 11:51:26.413 UTC [endorser] callChaincode -> INFO 05d [mychannel][16a59ced] Entry chaincode: name:"mycc" 
2018-12-12 11:51:30.138 UTC [chaincode] ProcessStream -> ERRO 05e handling chaincode support stream: rpc error: code = Canceled desc = context canceled
receive failed
github.com/hyperledger/fabric/core/chaincode.(*Handler).ProcessStream
    /opt/gopath/src/github.com/hyperledger/fabric/core/chaincode/handler.go:408
github.com/hyperledger/fabric/core/chaincode.(*ChaincodeSupport).HandleChaincodeStream
    /opt/gopath/src/github.com/hyperledger/fabric/core/chaincode/chaincode_support.go:182
github.com/hyperledger/fabric/core/chaincode.(*ChaincodeSupport).Register
    /opt/gopath/src/github.com/hyperledger/fabric/core/chaincode/chaincode_support.go:187
github.com/hyperledger/fabric/core/chaincode/accesscontrol.(*interceptor).Register
    /opt/gopath/src/github.com/hyperledger/fabric/core/chaincode/accesscontrol/interceptor.go:57
github.com/hyperledger/fabric/protos/peer._ChaincodeSupport_Register_Handler
    /opt/gopath/src/github.com/hyperledger/fabric/protos/peer/chaincode_shim.pb.go:1066
github.com/hyperledger/fabric/vendor/google.golang.org/grpc.(*Server).processStreamingRPC
    /opt/gopath/src/github.com/hyperledger/fabric/vendor/google.golang.org/grpc/server.go:1160
github.com/hyperledger/fabric/vendor/google.golang.org/grpc.(*Server).handleStream
    /opt/gopath/src/github.com/hyperledger/fabric/vendor/google.golang.org/grpc/server.go:1253
github.com/hyperledger/fabric/vendor/google.golang.org/grpc.(*Server).serveStreams.func1.1
    /opt/gopath/src/github.com/hyperledger/fabric/vendor/google.golang.org/grpc/server.go:680
runtime.goexit
    /opt/go/src/runtime/asm_amd64.s:2361
2018-12-12 11:52:00.041 UTC [endorser] callChaincode -> INFO 05f [mychannel][16a59ced] Exit chaincode: name:"mycc"  (33628ms)

However, I can totally ensure that I have already instantiated my chaincode, and I can normally invoke it if I do not use service discovery.

And here is my code for service discovery:

let client = await helper.getClientForOrg(orgName);
let channel = client.newChannel(channelName);
channel.addPeer(client.getPeer("peer0.org1.example.com"));
await channel.initialize({discover:true, asLocalhost:true});

let request = {
  chaincodeId: chaincodeName,
  fcn: functionName,
  args: args,
  transientMap: transient
};
logger.debug("Make query");
let response_payloads = await channel.queryByChaincode(request);

Where am I wrong? And there are codes before I use service discovery:

let client = await helper.getClientForOrg(orgName);

let channel = client.newChannel(channelName);
// assign orderer to channel
channel.addOrderer(client.getOrderer(ordererName));
// assign peers to channel
peers.forEach(function (peerName) {
  channel.addPeer(client.getPeer(peerName));
});

let request = {
  targets: peers,
  chaincodeId: chaincodeName,
  fcn: functionName,
  args: args,
  transientMap: transient
};
logger.debug("Make query");
let response_payloads = await channel.queryByChaincode(request);
Dedog Xu
  • 9
  • 2

1 Answers1

0

I just solved it myself. That may be some kind of a network error.

Now I changed port of peer1.org1.example.com, peer0.org2.example.com, peer1.org2.example.com to 8051, 9051, 10051, 11051. According to the node sdk official doc, I set asLocalhost = true.

And here are my codes that could work for me:

let channel = client.newChannel(channelName);
channel.addPeer(client.getPeer("peer0.org1.example.com"));
await channel.initialize({discover: true, asLocalhost: true});

let tx_id = client.newTransactionID();
tx_id_string = tx_id.getTransactionID();
let request = {
  args: args,
  chaincodeId: chaincodeName,
  chainId: channelName,
  fcn: functionName,
  txId: tx_id,
  transientMap: transient
};
let results = await channel.sendTransactionProposal(request);

hope this could help others.

Dedog Xu
  • 9
  • 2