Merge pull request #3632 from wpaulino/server-not-active-closechannel
rpcserver: ensure server has started before CloseChannel
This commit is contained in:
commit
13b56d5849
@ -13,17 +13,17 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"google.golang.org/grpc/grpclog"
|
|
||||||
|
|
||||||
"github.com/btcsuite/btcd/chaincfg"
|
"github.com/btcsuite/btcd/chaincfg"
|
||||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||||
"github.com/btcsuite/btcd/integration/rpctest"
|
"github.com/btcsuite/btcd/integration/rpctest"
|
||||||
"github.com/btcsuite/btcd/txscript"
|
"github.com/btcsuite/btcd/txscript"
|
||||||
"github.com/btcsuite/btcd/wire"
|
"github.com/btcsuite/btcd/wire"
|
||||||
"github.com/btcsuite/btcutil"
|
"github.com/btcsuite/btcutil"
|
||||||
|
"github.com/lightningnetwork/lnd"
|
||||||
"github.com/lightningnetwork/lnd/lnrpc"
|
"github.com/lightningnetwork/lnd/lnrpc"
|
||||||
"github.com/lightningnetwork/lnd/lntest/wait"
|
"github.com/lightningnetwork/lnd/lntest/wait"
|
||||||
"github.com/lightningnetwork/lnd/lnwire"
|
"github.com/lightningnetwork/lnd/lnwire"
|
||||||
|
"google.golang.org/grpc/grpclog"
|
||||||
)
|
)
|
||||||
|
|
||||||
// DefaultCSV is the CSV delay (remotedelay) we will start our test nodes with.
|
// DefaultCSV is the CSV delay (remotedelay) we will start our test nodes with.
|
||||||
@ -395,7 +395,7 @@ func (n *NetworkHarness) connect(ctx context.Context,
|
|||||||
tryconnect:
|
tryconnect:
|
||||||
if _, err := a.ConnectPeer(ctx, req); err != nil {
|
if _, err := a.ConnectPeer(ctx, req); err != nil {
|
||||||
// If the chain backend is still syncing, retry.
|
// If the chain backend is still syncing, retry.
|
||||||
if strings.Contains(err.Error(), "still syncing") {
|
if err == lnd.ErrServerNotActive {
|
||||||
select {
|
select {
|
||||||
case <-time.After(100 * time.Millisecond):
|
case <-time.After(100 * time.Millisecond):
|
||||||
goto tryconnect
|
goto tryconnect
|
||||||
|
22
rpcserver.go
22
rpcserver.go
@ -1294,8 +1294,7 @@ func (r *rpcServer) ConnectPeer(ctx context.Context,
|
|||||||
// The server hasn't yet started, so it won't be able to service any of
|
// The server hasn't yet started, so it won't be able to service any of
|
||||||
// our requests, so we'll bail early here.
|
// our requests, so we'll bail early here.
|
||||||
if !r.server.Started() {
|
if !r.server.Started() {
|
||||||
return nil, fmt.Errorf("chain backend is still syncing, server " +
|
return nil, ErrServerNotActive
|
||||||
"not active yet")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if in.Addr == nil {
|
if in.Addr == nil {
|
||||||
@ -1348,8 +1347,7 @@ func (r *rpcServer) DisconnectPeer(ctx context.Context,
|
|||||||
rpcsLog.Debugf("[disconnectpeer] from peer(%s)", in.PubKey)
|
rpcsLog.Debugf("[disconnectpeer] from peer(%s)", in.PubKey)
|
||||||
|
|
||||||
if !r.server.Started() {
|
if !r.server.Started() {
|
||||||
return nil, fmt.Errorf("chain backend is still syncing, server " +
|
return nil, ErrServerNotActive
|
||||||
"not active yet")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// First we'll validate the string passed in within the request to
|
// First we'll validate the string passed in within the request to
|
||||||
@ -1435,8 +1433,7 @@ func (r *rpcServer) OpenChannel(in *lnrpc.OpenChannelRequest,
|
|||||||
in.LocalFundingAmount, in.PushSat)
|
in.LocalFundingAmount, in.PushSat)
|
||||||
|
|
||||||
if !r.server.Started() {
|
if !r.server.Started() {
|
||||||
return fmt.Errorf("chain backend is still syncing, server " +
|
return ErrServerNotActive
|
||||||
"not active yet")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
localFundingAmt := btcutil.Amount(in.LocalFundingAmount)
|
localFundingAmt := btcutil.Amount(in.LocalFundingAmount)
|
||||||
@ -1595,8 +1592,7 @@ func (r *rpcServer) OpenChannelSync(ctx context.Context,
|
|||||||
// syncing, as otherwise we may not be able to obtain the relevant
|
// syncing, as otherwise we may not be able to obtain the relevant
|
||||||
// notifications.
|
// notifications.
|
||||||
if !r.server.Started() {
|
if !r.server.Started() {
|
||||||
return nil, fmt.Errorf("chain backend is still syncing, server " +
|
return nil, ErrServerNotActive
|
||||||
"not active yet")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Creation of channels before the wallet syncs up is currently
|
// Creation of channels before the wallet syncs up is currently
|
||||||
@ -1739,6 +1735,10 @@ func GetChanPointFundingTxid(chanPoint *lnrpc.ChannelPoint) (*chainhash.Hash, er
|
|||||||
func (r *rpcServer) CloseChannel(in *lnrpc.CloseChannelRequest,
|
func (r *rpcServer) CloseChannel(in *lnrpc.CloseChannelRequest,
|
||||||
updateStream lnrpc.Lightning_CloseChannelServer) error {
|
updateStream lnrpc.Lightning_CloseChannelServer) error {
|
||||||
|
|
||||||
|
if !r.server.Started() {
|
||||||
|
return ErrServerNotActive
|
||||||
|
}
|
||||||
|
|
||||||
// If the user didn't specify a channel point, then we'll reject this
|
// If the user didn't specify a channel point, then we'll reject this
|
||||||
// request all together.
|
// request all together.
|
||||||
if in.GetChannelPoint() == nil {
|
if in.GetChannelPoint() == nil {
|
||||||
@ -3275,8 +3275,7 @@ func (r *rpcServer) sendPayment(stream *paymentStream) error {
|
|||||||
// syncing as we may be trying to sent a payment over a "stale"
|
// syncing as we may be trying to sent a payment over a "stale"
|
||||||
// channel.
|
// channel.
|
||||||
if !r.server.Started() {
|
if !r.server.Started() {
|
||||||
return fmt.Errorf("chain backend is still syncing, server " +
|
return ErrServerNotActive
|
||||||
"not active yet")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(roasbeef): check payment filter to see if already used?
|
// TODO(roasbeef): check payment filter to see if already used?
|
||||||
@ -3466,8 +3465,7 @@ func (r *rpcServer) sendPaymentSync(ctx context.Context,
|
|||||||
// syncing as we may be trying to sent a payment over a "stale"
|
// syncing as we may be trying to sent a payment over a "stale"
|
||||||
// channel.
|
// channel.
|
||||||
if !r.server.Started() {
|
if !r.server.Started() {
|
||||||
return nil, fmt.Errorf("chain backend is still syncing, server " +
|
return nil, ErrServerNotActive
|
||||||
"not active yet")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// First we'll attempt to map the proto describing the next payment to
|
// First we'll attempt to map the proto describing the next payment to
|
||||||
|
@ -90,6 +90,11 @@ var (
|
|||||||
// given peer.
|
// given peer.
|
||||||
ErrPeerNotConnected = errors.New("peer is not connected")
|
ErrPeerNotConnected = errors.New("peer is not connected")
|
||||||
|
|
||||||
|
// ErrServerNotActive indicates that the server has started but hasn't
|
||||||
|
// fully finished the startup process.
|
||||||
|
ErrServerNotActive = errors.New("server is still in the process of " +
|
||||||
|
"starting")
|
||||||
|
|
||||||
// ErrServerShuttingDown indicates that the server is in the process of
|
// ErrServerShuttingDown indicates that the server is in the process of
|
||||||
// gracefully exiting.
|
// gracefully exiting.
|
||||||
ErrServerShuttingDown = errors.New("server is shutting down")
|
ErrServerShuttingDown = errors.New("server is shutting down")
|
||||||
|
Loading…
Reference in New Issue
Block a user