Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(rpc): no success if no channels to close (#1689) #1942

Merged
merged 6 commits into from
Nov 6, 2020

Conversation

rsercano
Copy link
Collaborator

resolves #1689 for LND but I'm not sure what to do for connext since it doesn't show currently available channels and we directly call withdraw

@rsercano rsercano self-assigned this Oct 20, 2020
@rsercano rsercano requested review from sangaman and raladev October 20, 2020 11:26
@raladev
Copy link
Contributor

raladev commented Oct 20, 2020

  • it would be good to add alias to response message - 0252f366111259996a101c5a82c880e9c95c8278d7e668c40163c0db656161cbbf (OzoneYellow)
Error: 2 UNKNOWN: no channels found for 0252f366111259996a101c5a82c880e9c95c8278d7e668c40163c0db656161cbbf to close 
  • connext now throws 500 err for closechannel when channel balance = 0;

we can just add check for connext currencies - throw errorCodes.NO_CHANNELS_TO_CLOSE if channel balance = 0

simnet > closechannel ETH
Error: 2 UNKNOWN: connext server error 500: Internal Server Error

Bd39EC9EDDB315B45 request in 60 ms
[1603201176510] ERROR (70 on connext): Error: Error: Cannot install an app with zero valued deposits for both initiator and responder.
    at commonAppProposalValidation (/app/node_modules/@connext/apps/dist/index.js:66:15)
    at sharedProposalMiddleware (/app/node_modules/@connext/apps/dist/index.js:432:12)
    at proposeMiddleware (/app/node_modules/@connext/apps/dist/index.js:491:5)
    at validationMiddleware (/app/node_modules/@connext/apps/dist/index.js:438:23)
    at /app/node_modules/@connext/client/dist/channelProvider.js:60:15
    at Generator.next (<anonymous>)
    at /app/node_modules/@connext/client/dist/channelProvider.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/app/node_modules/@connext/client/dist/channelProvider.js:4:12)
    at validationMiddleware (/app/node_modules/@connext/client/dist/channelProvider.js:59:67)
    at /app/node_modules/@connext/cf-core/dist/protocol/propose.js:55:23
    at Generator.next (<anonymous>)
    at resume (/app/node_modules/@connext/cf-core/dist/protocol/propose.js:8:44)
    at /app/node_modules/@connext/cf-core/dist/protocol/propose.js:7:121
    at new Promise (<anonymous>)
    at Object.i.<computed> [as next] (/app/node_modules/@connext/cf-core/dist/protocol/propose.js:7:63)
    at ProtocolRunner.runProtocol (/app/node_modules/@connext/cf-core/dist/machine/protocol-runner.js:84:39)
    at runMicrotasks (<anonymous>)
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
    at async ProtocolRunner.initiateProtocol (/app/node_modules/@connext/cf-core/dist/machine/protocol-runner.js:44:33)
    Error: Error: Error: Cannot install an app with zero valued deposits for both initiator and responder.
        at commonAppProposalValidation (/app/node_modules/@connext/apps/dist/index.js:66:15)
        at sharedProposalMiddleware (/app/node_modules/@connext/apps/dist/index.js:432:12)
        at proposeMiddleware (/app/node_modules/@connext/apps/dist/index.js:491:5)
        at validationMiddleware (/app/node_modules/@connext/apps/dist/index.js:438:23)
        at /app/node_modules/@connext/client/dist/channelProvider.js:60:15
        at Generator.next (<anonymous>)
        at /app/node_modules/@connext/client/dist/channelProvider.js:8:71
        at new Promise (<anonymous>)
        at __awaiter (/app/node_modules/@connext/client/dist/channelProvider.js:4:12)
        at validationMiddleware (/app/node_modules/@connext/client/dist/channelProvider.js:59:67)
        at /app/node_modules/@connext/cf-core/dist/protocol/propose.js:55:23
        at Generator.next (<anonymous>)
        at resume (/app/node_modules/@connext/cf-core/dist/protocol/propose.js:8:44)
        at /app/node_modules/@connext/cf-core/dist/protocol/propose.js:7:121
        at new Promise (<anonymous>)
        at Object.i.<computed> [as next] (/app/node_modules/@connext/cf-core/dist/protocol/propose.js:7:63)
        at ProtocolRunner.runProtocol (/app/node_modules/@connext/cf-core/dist/machine/protocol-runner.js:84:39)
        at runMicrotasks (<anonymous>)
        at processTicksAndRejections (internal/process/task_queues.js:97:5)
        at async ProtocolRunner.initiateProtocol (/app/node_modules/@connext/cf-core/dist/machine/protocol-runner.js:44:33)
        at WithdrawalController.<anonymous> (/app/node_modules/@connext/client/dist/controllers/WithdrawalController.js:83:23)
        at Generator.throw (<anonymous>)
        at rejected (/app/node_modules/@connext/client/dist/controllers/WithdrawalController.js:6:65)
        at runMicrotasks (<anonymous>)
        at processTicksAndRejections (internal/process/task_queues.js:97:5)
[1603201176510] INFO  (70 on connext): request completed
    url: "/withdraw"
    statusCode: 500
    reqId: 4747
[1603201178439] INFO  (70 on

@kilrau
Copy link
Contributor

kilrau commented Oct 20, 2020

we can just add check for connext currencies - throw errorCodes.NO_CHANNELS_TO_CLOSE if channel balance = 0

Would fix it, but certainly not beautiful. If then we should have the same for lnd. Thoughts? @sangaman

Copy link
Collaborator

@sangaman sangaman left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should add this error code to getGrpcErrorCode.ts as one of the FAILED_PRECONDITION cases, otherwise it will use a grpc error code of UNKNOWN which isn't ideal.

@rsercano rsercano force-pushed the fix/closechannel-prints-success-for-no-channel branch from 71b870b to 18234dc Compare October 21, 2020 08:52
@rsercano
Copy link
Collaborator Author

rsercano commented Oct 21, 2020

@sangaman added error code to the getGrpcErrorCode, thanks for pointing.

@raladev I'm not sure about showing alias, this requires me to pick Pool.ts into LndClient.ts which would necessarily be a bad practice just to show a log if there's no other way @sangaman

@sangaman could you please clarify @kilrau @raladev's point about connext channel balance?

@raladev
Copy link
Contributor

raladev commented Oct 21, 2020

@raladev I'm not sure about showing alias, this requires me to pick Pool.ts into LndClient.ts which would necessarily be a bad practice just to show a log if there's no other way @sangaman

Oke, understood

@raladev raladev requested a review from sangaman October 21, 2020 11:21
@sangaman sangaman added the grpc gRPC API label Oct 27, 2020
@sangaman sangaman force-pushed the fix/closechannel-prints-success-for-no-channel branch from 2f95e8c to 1981357 Compare October 27, 2020 07:52
@rsercano
Copy link
Collaborator Author

Let me know if anything else has to be done for this please @sangaman

@kilrau
Copy link
Contributor

kilrau commented Oct 27, 2020

Let me know if anything else has to be done for this please @sangaman

Yep that needs to be clarified...

@raladev
Copy link
Contributor

raladev commented Oct 27, 2020

  • connext still returns 500 err instead of blocking withdraw request
└──────────┴───────────────┴───────────────────────────────┴────────────────────────────┘
native@ubuntu:~/xud/bin$ ./xucli closechannel ETH 
{
  "transactionIdsList": [
    "0x3d9c7f415d353ebc0b68042013d148261f518f8ffb4232fbddba34ef392073b8"
  ]
}
native@ubuntu:~/xud/bin$ ./xucli closechannel ETH 
Error: 2 UNKNOWN: connext server error 500: Internal Server Error
native@ubuntu:~/xud/bin$ ./xucli closechannel BTC
Error: 3 INVALID_ARGUMENT: operation failed due to a missing remote identifier
native@ubuntu:~/xud/bin$ ./xucli closechannel BTC OzoneYelloqw
Error: 5 NOT_FOUND: node with alias OzoneYelloqw not found
native@ubuntu:~/xud/bin$ ./xucli closechannel BTC OzoneYellow
{
  "transactionIdsList": [
    "07f32820ccaeb3596965fe99573964b8024f14b396d1876d7ac00f96211e48ee"
  ]
}
native@ubuntu:~/xud/bin$ ./xucli closechannel BTC OzoneYellow
Error: 9 FAILED_PRECONDITION: no channels found to close for OzoneYellow
native@ubuntu:~/xud/bin$ ./xucli closechannel ETH 
Error: 2 UNKNOWN: connext server error 500: Internal Server Error
native@ubuntu:~/xud/bin$ 
27/10/2020 06:14:07.176 [RPC] trace: received call /xudrpc.Xud/CloseChannel
27/10/2020 06:14:07.177 [CONNEXT] trace: sending request to /balance/0x0000000000000000000000000000000000000000
27/10/2020 06:14:07.395 [CONNEXT] trace: sending request to /withdraw: {"recipient":"","amount":"0","assetId":"0x0000000000000000000000000000000000000000"}
27/10/2020 06:14:07.784 [CONNEXT] error: connext server error 500: Internal Server Error
27/10/2020 06:14:07.789 [RPC] error: call /xudrpc.Xud/CloseChannel errored with code 2: connext server error 500: Internal Server Error

Copy link
Contributor

@raladev raladev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Above

@sangaman sangaman self-assigned this Oct 27, 2020
@sangaman
Copy link
Collaborator

@raladev Could you please try this again? The amount was sometimes being a string so it would fail the === 0 number comparison.

@raladev
Copy link
Contributor

raladev commented Oct 27, 2020

works, but:

  • we need change message for connext currencies because we have no Peer value for connext
native@ubuntu:~/xud/bin$ ./xucli closechannel usdt 
Error: 9 FAILED_PRECONDITION: no channels found to close for 

native@ubuntu:~/xud/bin$ ./xucli closechannel LTC OzoneYellow
Error: 9 FAILED_PRECONDITION: no channels found to close for OzoneYellow

@rsercano rsercano force-pushed the fix/closechannel-prints-success-for-no-channel branch from f7a2eb7 to 029eae8 Compare October 28, 2020 07:18
@rsercano
Copy link
Collaborator Author

added @raladev

@rsercano rsercano requested a review from raladev October 28, 2020 07:18
raladev
raladev previously approved these changes Oct 28, 2020
@ghost
Copy link

ghost commented Oct 29, 2020

Needs a rebase.

@rsercano rsercano requested a review from a user October 30, 2020 06:37
raladev
raladev previously approved these changes Oct 30, 2020
sangaman
sangaman previously approved these changes Nov 1, 2020
@sangaman sangaman dismissed their stale review November 1, 2020 20:47

looks like some changes were lost during rebase

This ensures we don't return a successful response and print success in
the cli when attempting to close channel(s) that don't exist.

Closes #1689.

Co-Authored-By: rsercano <ozdemirsercan27@gmail.com>
@sangaman sangaman force-pushed the fix/closechannel-prints-success-for-no-channel branch from 995626d to b279e72 Compare November 1, 2020 20:59
@raladev raladev self-requested a review November 2, 2020 10:55
sangaman
sangaman previously approved these changes Nov 2, 2020
@raladev
Copy link
Contributor

raladev commented Nov 2, 2020

  • something is still missing

closechannel USDT throwed Error: 9 FAILED_PRECONDITION: no channels found to close before instead of 500 Err

simnet > closechannel BTC
Error: 3 INVALID_ARGUMENT: operation failed due to a missing remote identifier
simnet > closechannel BTC OzoneYelow
Error: 5 NOT_FOUND: node with alias OzoneYelow not found
simnet > closechannel BTC OzoneYellow
{
  "transactionIdsList": [
    "3e5eec5e9bb3c12c2f0f9d3890fc268a0aa3632bbaf1fd2f60f61d8bcef31bd9"
  ]
}
simnet > closechannel BTC OzoneYellow
Error: 9 FAILED_PRECONDITION: no channels found to close for OzoneYellow
simnet > closechannel ETH --amount 1
{
  "transactionIdsList": [
    "0xb0dc8025f777e477ebb35f36517885f855977576f4b206f1541108a8edfe2771"
  ]
}
simnet > closechannel ETH --amount 9
{
  "transactionIdsList": [
    "0x9d14d60da493f0740a4a0a521e23de4a4d93ecc6a1c0b47675e5d87c09284ef1"
  ]
}
simnet > closechannel ETH --amount 9
Error: 9 FAILED_PRECONDITION: insufficient balance to perform request
simnet > closechannel ETH
Error: 2 UNKNOWN: connext server error 500: Internal Server Error
simnet > closechannel ETH
Error: 2 UNKNOWN: connext server error 500: Internal Server Error
simnet > closechannel ETH
Error: 2 UNKNOWN: connext server error 500: Internal Server Error
simnet > closechannel USDT
{
  "transactionIdsList": [
    "0x7fa666342dbc6a0008424adab0ce7754318716c70014fd8c34ef7e0871081adc"
  ]
}
simnet > closechannel USDT
Error: 2 UNKNOWN: connext server error 500: Internal Server Error
simnet > 

Copy link
Contributor

@raladev raladev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Above

@sangaman
Copy link
Collaborator

sangaman commented Nov 2, 2020

Above

Hm... could you attach the xud logs? It looks like the call to get ETH/USDT balance are failing. Maybe that's simply what happens when there is no balance or no channel for Connext and so we can just handle that error as no channels found to close, unfortunately the 500 connext server error isn't very helpful.

@rsercano
Copy link
Collaborator Author

rsercano commented Nov 3, 2020

Let me know, if I can do anything on this please

@raladev
Copy link
Contributor

raladev commented Nov 3, 2020

Above

Hm... could you attach the xud logs? It looks like the call to get ETH/USDT balance are failing. Maybe that's simply what happens when there is no balance or no channel for Connext and so we can just handle that error as no channels found to close, unfortunately the 500 connext server error isn't very helpful.

Same error as was before, this case was fixed by @rsercano previously, but it seems we lose the fix during rebase

xud:

03/11/2020 11:30:21.325 [CONNEXT] error: connext server error 500: Internal Server Error
03/11/2020 11:30:21.342 [RPC] error: call /xudrpc.Xud/CloseChannel errored with code 2: connext server error 500: Internal Server Error

Connext:

2020-11-03T11:30:21.318Z [CF-ProposeInstall] Acquired locks 0x227Ef60B59F7B82EeB05aC4042B7503292A1dD25 in 194 ms
[1604403021320] ERROR (70 on connext): Error: Error: Cannot install an app with zero valued deposits for both initiator and responder.
    at commonAppProposalValidation (/app/node_modules/@connext/apps/dist/index.js:66:15)
    at sharedProposalMiddleware (/app/node_modules/@connext/apps/dist/index.js:432:12)
    at proposeMiddleware (/app/node_modules/@connext/apps/dist/index.js:491:5)
    at validationMiddleware (/app/node_modules/@connext/apps/dist/index.js:438:23)
    at /app/node_modules/@connext/client/dist/channelProvider.js:60:15
    at Generator.next (<anonymous>)
    at /app/node_modules/@connext/client/dist/channelProvider.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/app/node_modules/@connext/client/dist/channelProvider.js:4:12)
    at validationMiddleware (/app/node_modules/@connext/client/dist/channelProvider.js:59:67)
    at /app/node_modules/@connext/cf-core/dist/protocol/propose.js:55:23
    at Generator.next (<anonymous>)
    at resume (/app/node_modules/@connext/cf-core/dist/protocol/propose.js:8:44)
    at /app/node_modules/@connext/cf-core/dist/protocol/propose.js:7:121
    at new Promise (<anonymous>)
    at Object.i.<computed> [as next] (/app/node_modules/@connext/cf-core/dist/protocol/propose.js:7:63)
    at ProtocolRunner.runProtocol (/app/node_modules/@connext/cf-core/dist/machine/protocol-runner.js:84:39)
    at runMicrotasks (<anonymous>)
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
    at async ProtocolRunner.initiateProtocol (/app/node_modules/@connext/cf-core/dist/machine/protocol-runner.js:44:33)
    Error: Error: Error: Cannot install an app with zero valued deposits for both initiator and responder.

@rsercano
Copy link
Collaborator Author

rsercano commented Nov 5, 2020

I don't think we lost the changes tho, it still shows changes are there, @sangaman's addition is as simple as checking swap client type in the Service.ts and adding amount check to connext.

@raladev
Copy link
Contributor

raladev commented Nov 5, 2020

checked once more time, same result, but im sure that it was fine some time ago
Screenshot from 2020-11-05 16-24-15

@kilrau
Copy link
Contributor

kilrau commented Nov 6, 2020

@rsercano Roman stated:

if i remember correctly it was fine before 029eae8 (at least there was no 500 err)

@rsercano rsercano force-pushed the fix/closechannel-prints-success-for-no-channel branch from 10eb823 to 70d6678 Compare November 6, 2020 12:55
@raladev raladev self-requested a review November 6, 2020 13:21
@sangaman
Copy link
Collaborator

sangaman commented Nov 6, 2020

Interesting, the only difference between the previous commit and the current one is at line 778 in ConnextClient.ts

-    if (Number(amount) === 0) {
+    if (amount === 0) {
      return []; // there is nothing to withdraw and no tx to return
    }

It didn't have the Number casting and that's what was causing the issue, but I'm not sure how or where that got lost in the commits. Anyway I think once the tests pass this is good to squash merge.

@sangaman sangaman changed the title fix: close channel should not print success for no channels (#1689) fix(rpc): no success if no channels to close (#1689) Nov 6, 2020
@sangaman sangaman merged commit 17e40de into master Nov 6, 2020
@sangaman sangaman deleted the fix/closechannel-prints-success-for-no-channel branch November 6, 2020 13:46
raladev added a commit that referenced this pull request Nov 19, 2020
* feat: removeorder output changed to a more meaningful message (#1526)

* fix(p2p): don't reconnect peers when pool closed (#1965)

This ensures that we don't attempt to reconnect to peers that have
disconnected from us after we have started closing the p2p pool. This
may help prevent scenarios where we unintentionally attempt to
reconnect to peers after shutting down xud.

> Should be tested against [#1668 (comment)](#1668 (comment)) @raladev

re-connection after shutdown is disappeared, but my xud still can not be gracefully  terminated, it waits something:

```
28/10/2020 05:17:43.164 [CONNEXT] trace: sending request to /balance/0x69C3d485623bA3f382Fc0FB6756c4574d43C1618
^C28/10/2020 05:17:44.087 [GLOBAL] info: XUD is shutting down
28/10/2020 05:17:44.088 [LND-BTC] info: new status: Disconnected
28/10/2020 05:17:44.089 [LND-LTC] info: new status: Disconnected
28/10/2020 05:17:44.090 [CONNEXT] info: new status: Disconnected
28/10/2020 05:17:44.093 [P2P] debug: Peer 03ece33a30db1dbce4b62fa96a5e9541138a24997ef5672eebed2d332270e39542 (OzoneYellow): closing socket. reason: Shutdown
28/10/2020 05:17:44.095 [HTTP] info: http server has closed
28/10/2020 05:17:44.096 [RPC] info: gRPC server completed shutdown
28/10/2020 05:17:44.097 [P2P] trace: Sent Disconnecting packet to 03ece33a30db1dbce4b62fa96a5e9541138a24997ef5672eebed2d332270e39542 (OzoneYellow): "{\"body\":{\"reason\":9},\"header\":{\"id\":\"95133be0-1917-11eb-b75b-73d0f0278756\"}}"
28/10/2020 05:17:44.109 [ORDERBOOK] debug: removed all orders for peer 03ece33a30db1dbce4b62fa96a5e9541138a24997ef5672eebed2d332270e39542 (OzoneYellow)
28/10/2020 05:17:44.118 [GLOBAL] info: XUD shutdown gracefully
```

* feat(lnd): change gRPC client options

* fix(connext): not enough balance for closechannel (#1963)

This introduces better error handling for Connext when using
`closeChannel` to remove funds from a Connext channel and specifying an
amount to remove that is greater than the available balance.

* feat: reserved capacity checks on PlaceOrder (#1949)

This rejects orders that would put our total reserved balance over our
total capacity for either the outbound or inbound currency. The sum of
the inbound & outbound amounts for a newly placed order are added to
the amounts reserved by open orders, and if either of these amounts
exceed the corresponding capacity then the request to place the order is
rejected.

An exception to this are inbound limits for Connext currencies, since we
have the ability to dynamically request additional inbound collateral
via our "lazy collateral" approach.

It is still possible for market orders to cause our open orders to
exceed our capacity. This is a difficult problem to avoid entirely, as
the price that market orders will execute at is unknown until the
execution is complete. Even if we simulate the matching routine, we
won't know which matches will succeed until we attempt a swap.

Instead, we generously assume that market orders will execute at the
best quoted price for purposes of these capacity checks. For users that
simultaneously place limit orders and market orders for the same
currencies, it should be made clear that market orders may use up their
available balance needed for their limit orders to succeed.

Closes #1947.

* fix(cli): openchannel assertion error for string amount (#1950)

Fixes #1643.

* feat(swapclient): auto init wallets on xud unlock (#1973)

This adds a new feature to xud to automatically attempt to create a
wallet for any new swap client configured after an xud node has been
created. Effectively this only changes the behavior for lnd clients, as
this is already the existing behavior for Connext. The process for
initializing has now been standardized instead of the ad hoc approach
used previously.

If xud tries to unlock an lnd node and gets an error message indicating
that the wallet has not been created, then it will generate a client &
currency specific seed mnemonic using seedutil and call `InitWallet`
with that seed and the existing xud password, such that the wallet
funds and node identity for the new lnd client can be unlocked and
restored along with the rest of lnd.

Closes #1929.

* feat(rpc): runtime addcurrency for lnd & connext (#1746)

Co-authored-by: Le Premier Homme <interjoint1@gmail.com>

* refactor(rpc): rename reserved TradingLimits fields

This renames the `reservedOutbound` and `reservedInbound` fields on the
`TradingLimits` call to `reservedSell` and `reservedBuy` respectively.

* fix(rpc): no success if no channels to close (#1689) (#1942)

Co-authored-by: rsercano <ozdemirsercan27@gmail.com>
Co-authored-by: Daniel McNally <mcnallydp@gmail.com>

* fix: tls certificate check on startup (#1510)

* fix: alias missing in streamorders (#1725) (#1962)

* fix(lnd): handling hold invoice check errors (#1969)

This adds better error handling for when the test calls to verify lnd
hold invoices are available fail due to connectivity reasons. Previously
any error that occurred at this step would cause us to set lnd's status
to `NoHoldInvoiceSupport` including connection issues. There was also a
bug that caused us to try to set the status to connected even when a
hold invoice status check failed.

This could result in the unusual behavior of status going to
`Disconnected` upon a call failing due to the grpc `UNAVAILABLE` error
status, then being set to `NoHoldInvoiceSupport` and then to
`ConnectionVerified`. Now we only set `NoHoldInvoiceSupport` when the
test calls fail for a reason other than `UNAVAILABLE`, and we only set
the status to `ConnectionVerified` when the hold invoice calls succeed.

Closes #1968.

* feat(lnd): SendPaymentV2

This migrates the call we use to send payments with lnd from the
deprecated `SendPaymentSync` to `SendPaymentV2` which allows for multi
path payments, among other improvements. As part of this change, the
lnd proto files have been updated to their v0.11.x versions and the
version of lnd used in simulation tests has been updated to v0.11.1 as
well.

Closes #1590.

* Revert "feat: removeorder output changed to a more meaningful message (#1526)"

* fix: use regtest instead of regnet arg

This fixes a bug where the xud flag to set the network was incorrectly
configured as `regnet` when it should be `regtest` to match what xud
expects.

* fix(lnd): don't calculate negative capacities

This fixes a bug in the logic for calculating the inbound & outbound
amount/capacity totals. We subtract the channel reserve amounts from the
balances when determining how large a payment the channel could support,
however we should not end up with a negative number.

* feat: new grpc call for subscribring alerts such as low balance (#864)

* fix: changes removeorder output to a more meaningful message (#1526) (#1986)

Co-authored-by: rsercano <ozdemirsercan27@gmail.com>
Co-authored-by: Daniel McNally <mcnallydp@gmail.com>
Co-authored-by: Karl Ranna <karl@karlranna.com>
Co-authored-by: Le Premier Homme <interjoint1@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
grpc gRPC API
Projects
None yet
Development

Successfully merging this pull request may close these issues.

closechannel reports success if there is no channel to be closed
4 participants