hyperledger / fabric-sdk-go

https://wiki.hyperledger.org/display/fabric
Apache License 2.0
911 stars 508 forks source link

gateway should implement function close() #229

Open 1170300722 opened 2 years ago

1170300722 commented 2 years ago

now it is :

// Close the gateway connection and all associated resources, including removing listeners attached to networks and
// contracts created by the gateway.
func (gw *Gateway) Close() {
    // future use
}

after connect gateway ,get network and submit Transaction, I cannot break the tcp connection.

gw, err := gateway.Connect(
        gateway.WithConfig(config.FromFile(filepath.Clean(ccpPath))),
        gateway.WithUser(userid),
    )
...
network, err := gw.GetNetwork(channel)
...
connector.UseContract(..., ...)
funcName = "QueryAllRecords"
result, err = connector.Contract.EvaluateTransaction(funcName)

I can read the leadger by doing this ,the var result is expected, but I notice the connection is still active, I cannot close the gateway connection, after invoking chaincode some times ,the connection is getting more

root@hecs-ubuntu-18:/home/localrootchain/service_proxy# netstat -ap | grep serviceProxy
tcp        0      0 192.168.0.16:60070      peer0.cn:8050           ESTABLISHED 1249/./serviceProxy 
tcp        0      0 192.168.0.16:34686      peer0.cn:8050           ESTABLISHED 1249/./serviceProxy 
tcp        0      0 192.168.0.16:41730      peer0.cn:7050           ESTABLISHED 1249/./serviceProxy 
tcp        0      0 192.168.0.16:41282      peer0.cn:7050           ESTABLISHED 1249/./serviceProxy 
tcp        0      0 192.168.0.16:41050      peer0.cn:7050           ESTABLISHED 1249/./serviceProxy 
tcp        0      0 192.168.0.16:59808      peer0.cn:8050           ESTABLISHED 1249/./serviceProxy 
tcp6       0      0 [::]:8001               [::]:*                  LISTEN      1249/./serviceProxy

more and more memory and cpu is occupied ,and I cannot close the sdk in gateway because it is not leaked, it is in lower case

type Gateway struct {
    sdk        *fabsdk.FabricSDK
    options    *gatewayOptions
    cfg        core.ConfigBackend
    org        string
    mspid      string
    peers      []fab.PeerConfig
    mspfactory api.MSPProviderFactory
}

after some time, the gateway will write log as "error from discovery request...."so many times ,I think it is reported byhttps://github.com/hyperledger/fabric-sdk-go/blob/main/pkg/client/common/discovery/dynamicdiscovery/chservice.go#L120 besides ,I can find many tcp connection and I can hardly query ledger ,peer will response like "context deadline exceeded". nothing i can do, i just restart my client, and it will work fine for some time ,and the same problem will appear again. How can I Close the gateway connection and all associated resources?

1170300722 commented 2 years ago

I was intended to write like

gw, err := gateway.Connect(
        gateway.WithConfig(config.FromFile(filepath.Clean(ccpPath))),
        gateway.WithUser(userid),
    )
defer gw.Close()

but as we know ,it wont be closed, it hasnt been implement ,and nothing will happen