Riccardo Fiorini
Riccardo Fiorini

Reputation: 31

Connecting to Hyperledger Fabric network from Java SDK fails

I am currently developing an HF network based on two nodes on different physical machines, each one representing an organization. I can execute all the commands of my chaincode from the CLI, but I would like to connect to a channel and invoke transactions from the organization's applications. A problem arises when invoking gateway.getNetwork("mychannel");: Channel by the name mychannel already exists.

The channel already exists, of course, since the network is up and running (I manage channel creation from CLI). However, I am not trying to instantiate any channel here, I am just trying to connect to an existing one...or am I doing something wrong? Below an extract of the Java code from the app, the error output that I am getting and part of the connection.yaml file for the gateway.

Java code:

...
Path networkConfigPath = Paths.get("/home/rfiorini/work/src/github.com/hyperledger/fabric-samples/fabric-multi-network/connection.yaml");

Gateway.Builder builder = Gateway.createBuilder();
builder.identity(wallet, "Admin@org1.example.com").networkConfig(networkConfigPath).discovery(true);

// create a gateway connection
try (Gateway gateway = builder.connect()) {

// get the network and chaincode
Network network = gateway.getNetwork("mychannel");
...

Error output:

org.hyperledger.fabric.gateway.GatewayRuntimeException: org.hyperledger.fabric.sdk.exception.InvalidArgumentException: Channel by the name mychannel already exists
        at org.hyperledger.fabric.gateway.impl.GatewayImpl.getNetwork(GatewayImpl.java:278)
        at org.example.ClientApp.main(ClientApp.java:33)
        at org.example.ClientTest.testApp(ClientTest.java:12)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
        at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
        at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
        at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
        at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)
Caused by: org.hyperledger.fabric.sdk.exception.InvalidArgumentException: Channel by the name mychannel already exists
        at org.hyperledger.fabric.sdk.HFClient.newChannel(HFClient.java:181)
        at org.hyperledger.fabric.gateway.impl.GatewayImpl.getNetwork(GatewayImpl.java:270)
        ... 31 more

connection.yaml:

client:
    organization: Org1
    connection:
        timeout:
            peer:
                endorser: '300'
            orderer: '300'

channels:
  mychannel:
    orderers:
      - orderer0.example.com

    peers:
      peer0.org1.example.com:
      peer1.org1.example.com:
      peer0.org2.example.com:
      peer1.org2.example.com:

organizations:
  Org1:
    mspid: Org1MSP

    peers:
      - peer0.org1.example.com
      - peer1.org1.example.com

  Org2:
    mspid: Org2MSP

    peers:
      - peer0.org2.example.com
      - peer1.org2.example.com

orderers:
  orderer0.example.com:
    url: grpc://localhost:7050

    grpcOptions:
      ssl-target-name-override: orderer.example.com

peers:
  peer0.org1.example.com:
    url: grpc://localhost:7051

    grpcOptions:
      ssl-target-name-override: peer0.org1.example.com
      request-timeout: 120001

  peer1.org1.example.com:
    url: grpc://localhost:8051

    grpcOptions:
      ssl-target-name-override: peer1.org1.example.com
      request-timeout: 120001

  peer1.org2.example.com:
    url: grpc://10.5.16.104:8051

    grpcOptions:
      ssl-target-name-override: peer1.org2.example.com
      request-timeout: 120001

  peer0.org2.example.com:
    url: grpc://10.5.16.104:7051

    grpcOptions:
      ssl-target-name-override: peer0.org2.example.com
      request-timeout: 120001

Upvotes: 1

Views: 967

Answers (1)

kori2000
kori2000

Reputation: 21

we had the same issue here, solution:

  • Delete the channel entry in your connection.yaml
  • Restart your client application
  • Done.

Hope that might work out.

Upvotes: 1

Related Questions