启动 Chaincode 时 Hyperledger Fabric Java Chaincode 超时

JK锯

我在 Oracle Linux 8 中运行 Hyperledger Fabric v2.2.3,并尝试使用 External Builder 和 Launcher 方法运行 Java 链代码。我不知道在哪一点我做错了或配置错误。通过 cli 调用链码,在等待了很长一段时间后,大约 15 分钟,它总是发出chaincode registration failed: timeout expired while starting chaincode. 在我看来无法连接或到达我的链码,但似乎我的怀疑是错误的,如果没有到达,我的链码日志将不会有任何调试信息,如下所示。

这是我在同行中提交的链码:

[user@hyperledgerfabric ~]# /appl/hyperledger-fabric/bin/peer lifecycle chaincode queryapproved -C orderer-channel -n TestHLF --peerAddresses localhost:7051 -o localhost:7050

Approved chaincode definition for chaincode 'TestHLF' on channel 'orderer-channel':
sequence: 1, version: 1.0.0, init-required: false, package-id: TestHLF:9081c95c231420aff76d311b14ae0eb468c199ee7aecea6e74934b588e3a3672, endorsement plugin: escc, validation plugin: vscc

[user@hyperledgerfabric ~]# /appl/hyperledger-fabric/bin/peer lifecycle chaincode querycommitted -C orderer-channel -n TestHLF --peerAddresses localhost:7051 -o localhost:7050

Committed chaincode definition for chaincode 'TestHLF' on channel 'orderer-channel':
Version: 1.0.0, Sequence: 1, Endorsement Plugin: escc, Validation Plugin: vscc, Approvals: [MyOrg1: true]

连接.json:

{
  "address": "192.168.196.1:9999",
  "dial_timeout": "10s",
  "tls_required": false,
  "client_auth_required": false
}

我的 Java 链码(运行在 192.168.196.1):

@Contract(
  name = "TestHLF",
  info = @Info(
    title = "Testing Hyperledger Fabric",
    description = "Testing Hyperledger Fabric",
    version = "1.0.0",
    license = @License(
      name = "Apache 2.0 License",
      url = "http://www.apache.org/licenses/LICENSE-2.0.html"
    ),
    contact = @Contact(
      email = "[email protected]",
      name = "Test",
      url = "https://test.example.com"
    )
  )
)

@Default
public final class TestHLF implements ContractInterface {
  @Transaction()
  public void init(Context context) {
    // do nothing
  }

  @Transaction(intent = TYPE.EVALUATE)
  public void insert(Context context, String key, String val) {
    ChaincodeStub stub = context.getStub();
    stub.putStringState(key, val);
  }

  @Transaction(intent = TYPE.EVALUATE)
  public String retrieve(Context context, String key) {
    ChaincodeStub stub = context.getStub();
    String val = stub.getStringState(key);
    return val;
  }

  public static void main(String[] args) throws Exception {
    ChaincodeServerProperties props = new ChaincodeServerProperties();
    props.setPortChaincodeServer(9999);
    props.setTlsEnabled(false);

    ContractRouter router = new ContractRouter(new String[] { "-i", "TestHLF:9081c95c231420aff76d311b14ae0eb468c199ee7aecea6e74934b588e3a3672", "-a", "192.168.196.134:7052" });
    ChaincodeServer server = new NettyChaincodeServer(router, props);
    router.startRouterWithChaincodeServer(server);
  }
}

一旦我启动了我的 Java 链码,这里的日志就会打印在控制台中:

org.hyperledger.fabric.contract.ContractRouter startRouterWithChaincodeServer    Starting ChaincodeServer
org.hyperledger.fabric.shim.ChaincodeBase newChannelBuilder                      Configuring channel connection to peer.
org.hyperledger.fabric.shim.ChaincodeBase getMaxInboundMessageSize               Maximum Inbound Message Size [MAX_INBOUND_MESSAGE_SIZE] = 104857600
org.hyperledger.fabric.shim.impl.InvocationTaskManager <init>                    Max Pool Size [TP_MAX_POOL_SIZE]5
org.hyperledger.fabric.shim.impl.InvocationTaskManager <init>                    Queue Size [TP_CORE_POOL_SIZE]5000
org.hyperledger.fabric.shim.impl.InvocationTaskManager <init>                    Core Pool Size [TP_QUEUE_SIZE]5
org.hyperledger.fabric.shim.impl.InvocationTaskManager <init>                    Keep Alive Time [TP_KEEP_ALIVE_MS]5000
org.hyperledger.fabric.shim.impl.InvocationTaskExecutor <init>                   Thread pool created
org.hyperledger.fabric.shim.impl.InvocationTaskManager register                  Registering new chaincode name: "TestHLF:faf2e95f07eeb641dc445e5b8c1ed4d838e08110e233f86d3a157369e8ab68f4"

通过 cli 调用链码,这里是调试日志:

[user@hyperledgerfabric ~]# /appl/hyperledger-fabric/bin/peer chaincode query -C orderer-channel -n TestHLF -c '{"Args":["retrieve", "key1"]}' --peerAddresses localhost:7051 -o localhost:7050

[msp] setupSigningIdentity -> DEBU 01a Signing identity expires at 2041-09-03 11:18:06 +0000 UTC
[grpc] Infof -> DEBU 01b parsed scheme: ""
[grpc] Infof -> DEBU 01c scheme "" not registered, fallback to default scheme
[grpc] Infof -> DEBU 01d ccResolverWrapper: sending update to cc: {[{localhost:7051  <nil> 0 <nil>}] <nil> <nil>}
[grpc] Infof -> DEBU 01e ClientConn switching balancer to "pick_first"
[grpc] Infof -> DEBU 01f Channel switches to new LB policy "pick_first"
[grpc] Infof -> DEBU 020 Subchannel Connectivity change to CONNECTING
[grpc] Infof -> DEBU 021 Subchannel picks a new address "localhost:7051" to connect
[grpc] UpdateSubConnState -> DEBU 022 pickfirstBalancer: HandleSubConnStateChange: 0xc00062f180, {CONNECTING <nil>}
[grpc] Infof -> DEBU 023 Channel Connectivity change to CONNECTING
[grpc] Infof -> DEBU 024 Subchannel Connectivity change to READY
[grpc] UpdateSubConnState -> DEBU 025 pickfirstBalancer: HandleSubConnStateChange: 0xc00062f180, {READY <nil>}
[grpc] Infof -> DEBU 026 Channel Connectivity change to READY
[grpc] Infof -> DEBU 027 parsed scheme: ""
[grpc] Infof -> DEBU 028 scheme "" not registered, fallback to default scheme
[grpc] Infof -> DEBU 029 ccResolverWrapper: sending update to cc: {[{localhost:7051  <nil> 0 <nil>}] <nil> <nil>}
[grpc] Infof -> DEBU 02a ClientConn switching balancer to "pick_first"
[grpc] Infof -> DEBU 02b Channel switches to new LB policy "pick_first"
[grpc] Infof -> DEBU 02c Subchannel Connectivity change to CONNECTING
[grpc] Infof -> DEBU 02d Subchannel picks a new address "localhost:7051" to connect
[grpc] UpdateSubConnState -> DEBU 02e pickfirstBalancer: HandleSubConnStateChange: 0xc000487740, {CONNECTING <nil>}
[grpc] Infof -> DEBU 02f Channel Connectivity change to CONNECTING
[grpc] Infof -> DEBU 030 Subchannel Connectivity change to READY
[grpc] UpdateSubConnState -> DEBU 031 pickfirstBalancer: HandleSubConnStateChange: 0xc000487740, {READY <nil>}
[grpc] Infof -> DEBU 032 Channel Connectivity change to READY
[msp] GetDefaultSigningIdentity -> DEBU 033 Obtaining default signing identity
[msp.identity] Sign -> DEBU 034 Sign: plaintext: 0ADA080A7008031A0C089D8DE7890610...0A0872657472696576650A046B657931
[msp.identity] Sign -> DEBU 035 Sign: digest: 4547C3BCC4282800F22B492EAEACA349210131015A22084C726B14F6B1740B26
Error: endorsement failure during query. response: status:500 message:"error in simulation: failed to execute transaction 6beee4b1394198e8b2d7890c96d880f3aabbf3782932492ff3a0af3a5336fd50: could not launch chaincode TestHLF:9081c95c231420aff76d311b14ae0eb468c199ee7aecea6e74934b588e3a3672: chaincode registration failed: timeout expired while starting chaincode TestHLF:9081c95c231420aff76d311b14ae0eb468c199ee7aecea6e74934b588e3a3672 for transaction"

由于无法在此处发布的调试日志(体型限制和“这看起来像垃圾邮件”),

在启动和执行链代码后 Peer 的调试日志:https : //github.com/SawJK/fabric-temp/blob/main/fabric-peer-log-0001

使用 log4j2 的 Java 链码调试日志:https : //github.com/SawJK/fabric-temp/blob/main/fabric-java-chaincode-log-0001

凯科马尔

我想念链码的 CCID。不太确定 Java API(我更喜欢 Go API),但应该在某处指定它。你可以试试...

    ContractRouter router = new ContractRouter(new String[] { "-i", "TestHLF:9081c95c231420aff76d311b14ae0eb468c199ee7aecea6e74934b588e3a3672", "-a", "192.168.196.134:7052" });

...虽然我认为它只是期望“TestHLF”。它似乎没有为 Java 记录... https://hyperledger-fabric.readthedocs.io/en/release-2.2/cc_service.html#writing-chaincode-to-run-as-an-external-service

我已经直接从您同行的错误日志中获取了 CCID。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Hyperledger Fabric Chaincode能否部署新的Chaincode?

如何从Hyperledger Fabric Java SDK调用Hyperledger Composer编写的Chaincode

Hyperledger Fabric 2.1 Chaincode安装

在Hyperledger Fabric Network中安装Chaincode时出错

Hyperledger Fabric Chaincode开发语言-NodeJS,Java还是Go?

缺少数据Hyperledger Fabric Chaincode

Hyperledger Fabric网络中的Chaincode问题

在HyperLedger架构上安装Chaincode时出错

Hyperledger Fabric:对等chaincode调用:将JSON对象传递给chaincode函数吗?

Hyperledger Fabric Chaincode抛出MVCC_READ_CONFLICT

使用Kubernetes的Hyperledger Fabric:无法实例化Chaincode

未在Hyperledger Fabric 2.2上创建Chaincode Docker容器

在HyperLedger Fabric中的对等方上安装Chaincode

HyperLedger-Fabric ChainCode部署-Base64错误

排序在Golang Chaincode Hyperledger Fabric中不起作用

将数组数据传递给Hyperledger Fabric中的Chaincode

如何使用Hyperledger Fabric Network SDK查询Chaincode Metada

部署Fabric测试网络fabcar chaincode时出错

hyperledger作曲家中的chaincode与hyperleger结构中的chaincode?

如何在开发人员模式下运行hyperledger-fabric节点js chaincode?

Hyperledger Fabric:如果要在Node.js中编写Chaincode,我是否需要安装Go?

如何在HyperLedger Fabric中将字节数组传递给chaincode

在Hyperledger Fabric Chaincode上调用外部数据(外部数据作为业务逻辑中的输入)

Hyperledger Fabric:无法在chainecode_example02中调用chaincode吗?

使用Fabric Node SDK实例化Chaincode会产生API错误(404):hyperledger / fabric-ccenv的清单:未找到

Hyperledger自定义Chaincode部署错误

Hyperledger Composer-Chaincode:过早执行

如何在Hyperledger Fabric V0.6 Chaincode实现中查询一段时间的状态

开发ChainCode时删除存储的BlockChain