Skip to content

Commit

Permalink
Remove cross-chain requests
Browse files Browse the repository at this point in the history
  • Loading branch information
darioush committed Aug 7, 2024
1 parent 6626d2b commit 93cef38
Show file tree
Hide file tree
Showing 36 changed files with 506 additions and 2,833 deletions.
158 changes: 0 additions & 158 deletions message/internal_msg_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ package message

import (
"fmt"
"time"

"github.com/ava-labs/avalanchego/ids"
"github.com/ava-labs/avalanchego/proto/pb/p2p"
Expand Down Expand Up @@ -48,21 +47,6 @@ var (
_ chainIDGetter = (*QueryFailed)(nil)
_ requestIDGetter = (*QueryFailed)(nil)

_ fmt.Stringer = (*CrossChainAppRequest)(nil)
_ sourceChainIDGetter = (*CrossChainAppRequest)(nil)
_ chainIDGetter = (*CrossChainAppRequest)(nil)
_ requestIDGetter = (*CrossChainAppRequest)(nil)

_ fmt.Stringer = (*CrossChainAppRequestFailed)(nil)
_ sourceChainIDGetter = (*CrossChainAppRequestFailed)(nil)
_ chainIDGetter = (*CrossChainAppRequestFailed)(nil)
_ requestIDGetter = (*CrossChainAppRequestFailed)(nil)

_ fmt.Stringer = (*CrossChainAppResponse)(nil)
_ sourceChainIDGetter = (*CrossChainAppResponse)(nil)
_ chainIDGetter = (*CrossChainAppResponse)(nil)
_ requestIDGetter = (*CrossChainAppResponse)(nil)

_ fmt.Stringer = (*Disconnected)(nil)

_ fmt.Stringer = (*GossipRequest)(nil)
Expand Down Expand Up @@ -329,148 +313,6 @@ func InternalQueryFailed(
}
}

type CrossChainAppRequest struct {
SourceChainID ids.ID `json:"source_chain_id,omitempty"`
DestinationChainID ids.ID `json:"destination_chain_id,omitempty"`
RequestID uint32 `json:"request_id,omitempty"`
Message []byte `json:"message,omitempty"`
}

func (m *CrossChainAppRequest) String() string {
return fmt.Sprintf(
"SourceChainID: %s DestinationChainID: %s RequestID: %d Message: 0x%x",
m.SourceChainID, m.DestinationChainID, m.RequestID, m.Message,
)
}

func (m *CrossChainAppRequest) GetSourceChainID() ids.ID {
return m.SourceChainID
}

func (m *CrossChainAppRequest) GetChainId() []byte {
return m.DestinationChainID[:]
}

func (m *CrossChainAppRequest) GetRequestId() uint32 {
return m.RequestID
}

func InternalCrossChainAppRequest(
nodeID ids.NodeID,
sourceChainID ids.ID,
destinationChainID ids.ID,
requestID uint32,
deadline time.Duration,
msg []byte,
) InboundMessage {
return &inboundMessage{
nodeID: nodeID,
op: CrossChainAppRequestOp,
message: &CrossChainAppRequest{
SourceChainID: sourceChainID,
DestinationChainID: destinationChainID,
RequestID: requestID,
Message: msg,
},
expiration: time.Now().Add(deadline),
}
}

type CrossChainAppRequestFailed struct {
SourceChainID ids.ID `json:"source_chain_id,omitempty"`
DestinationChainID ids.ID `json:"destination_chain_id,omitempty"`
RequestID uint32 `json:"request_id,omitempty"`
ErrorCode int32 `json:"error_code,omitempty"`
ErrorMessage string `json:"error_message,omitempty"`
}

func (m *CrossChainAppRequestFailed) String() string {
return fmt.Sprintf(
"SourceChainID: %s DestinationChainID: %s RequestID: %d",
m.SourceChainID, m.DestinationChainID, m.RequestID,
)
}

func (m *CrossChainAppRequestFailed) GetSourceChainID() ids.ID {
return m.SourceChainID
}

func (m *CrossChainAppRequestFailed) GetChainId() []byte {
return m.DestinationChainID[:]
}

func (m *CrossChainAppRequestFailed) GetRequestId() uint32 {
return m.RequestID
}

func InternalCrossChainAppError(
nodeID ids.NodeID,
sourceChainID ids.ID,
destinationChainID ids.ID,
requestID uint32,
errorCode int32,
errorMessage string,
) InboundMessage {
return &inboundMessage{
nodeID: nodeID,
op: CrossChainAppErrorOp,
message: &CrossChainAppRequestFailed{
SourceChainID: sourceChainID,
DestinationChainID: destinationChainID,
RequestID: requestID,
ErrorCode: errorCode,
ErrorMessage: errorMessage,
},
expiration: mockable.MaxTime,
}
}

type CrossChainAppResponse struct {
SourceChainID ids.ID `json:"source_chain_id,omitempty"`
DestinationChainID ids.ID `json:"destination_chain_id,omitempty"`
RequestID uint32 `json:"request_id,omitempty"`
Message []byte `json:"message,omitempty"`
}

func (m *CrossChainAppResponse) String() string {
return fmt.Sprintf(
"SourceChainID: %s DestinationChainID: %s RequestID: %d Message: 0x%x",
m.SourceChainID, m.DestinationChainID, m.RequestID, m.Message,
)
}

func (m *CrossChainAppResponse) GetSourceChainID() ids.ID {
return m.SourceChainID
}

func (m *CrossChainAppResponse) GetChainId() []byte {
return m.DestinationChainID[:]
}

func (m *CrossChainAppResponse) GetRequestId() uint32 {
return m.RequestID
}

func InternalCrossChainAppResponse(
nodeID ids.NodeID,
sourceChainID ids.ID,
destinationChainID ids.ID,
requestID uint32,
msg []byte,
) InboundMessage {
return &inboundMessage{
nodeID: nodeID,
op: CrossChainAppResponseOp,
message: &CrossChainAppResponse{
SourceChainID: sourceChainID,
DestinationChainID: destinationChainID,
RequestID: requestID,
Message: msg,
},
expiration: mockable.MaxTime,
}
}

type Connected struct {
NodeVersion *version.Application `json:"node_version,omitempty"`
}
Expand Down
22 changes: 1 addition & 21 deletions message/ops.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,6 @@ const (
AppErrorOp
AppResponseOp
AppGossipOp
// Cross chain:
CrossChainAppRequestOp
CrossChainAppErrorOp
CrossChainAppResponseOp
// Internal:
ConnectedOp
ConnectedSubnetOp
Expand Down Expand Up @@ -116,9 +112,6 @@ var (
GetAncestorsFailedOp,
GetFailedOp,
QueryFailedOp,
CrossChainAppRequestOp,
CrossChainAppErrorOp,
CrossChainAppResponseOp,
ConnectedOp,
ConnectedSubnetOp,
DisconnectedOp,
Expand Down Expand Up @@ -168,10 +161,6 @@ var (
AppErrorOp,
AppGossipOp,
AppResponseOp,
// Cross chain
CrossChainAppRequestOp,
CrossChainAppErrorOp,
CrossChainAppResponseOp,
}

FailedToResponseOps = map[Op]Op{
Expand All @@ -183,7 +172,6 @@ var (
GetFailedOp: PutOp,
QueryFailedOp: ChitsOp,
AppErrorOp: AppResponseOp,
CrossChainAppErrorOp: CrossChainAppResponseOp,
}
UnrequestedOps = set.Of(
GetAcceptedFrontierOp,
Expand All @@ -194,7 +182,6 @@ var (
PullQueryOp,
AppRequestOp,
AppGossipOp,
CrossChainAppRequestOp,
GetStateSummaryFrontierOp,
GetAcceptedStateSummaryOp,
)
Expand Down Expand Up @@ -271,14 +258,7 @@ func (op Op) String() string {
return "app_response"
case AppGossipOp:
return "app_gossip"
// Cross chain
case CrossChainAppRequestOp:
return "cross_chain_app_request"
case CrossChainAppErrorOp:
return "cross_chain_app_error"
case CrossChainAppResponseOp:
return "cross_chain_app_response"
// Internal
// Internal
case ConnectedOp:
return "connected"
case ConnectedSubnetOp:
Expand Down
62 changes: 0 additions & 62 deletions network/p2p/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,16 +31,6 @@ type AppResponseCallback func(
err error,
)

// CrossChainAppResponseCallback is called upon receiving an
// CrossChainAppResponse for a CrossChainAppRequest issued by Client.
// Callers should check [err] to see whether the AppRequest failed or not.
type CrossChainAppResponseCallback func(
ctx context.Context,
chainID ids.ID,
responseBytes []byte,
err error,
)

type Client struct {
handlerID uint64
handlerIDStr string
Expand Down Expand Up @@ -140,58 +130,6 @@ func (c *Client) AppGossip(
)
}

// CrossChainAppRequest sends a cross chain app request to another vm.
// [onResponse] is invoked upon an error or a response.
func (c *Client) CrossChainAppRequest(
ctx context.Context,
chainID ids.ID,
appRequestBytes []byte,
onResponse CrossChainAppResponseCallback,
) error {
// Cancellation is removed from this context to avoid erroring unexpectedly.
// SendCrossChainAppRequest should be non-blocking and any error other than
// context cancellation is unexpected.
//
// This guarantees that the router should never receive an unexpected
// CrossChainAppResponse.
ctxWithoutCancel := context.WithoutCancel(ctx)

c.router.lock.Lock()
defer c.router.lock.Unlock()

requestID := c.router.requestID
if _, ok := c.router.pendingCrossChainAppRequests[requestID]; ok {
return fmt.Errorf(
"failed to issue request with request id %d: %w",
requestID,
ErrRequestPending,
)
}

if err := c.sender.SendCrossChainAppRequest(
ctxWithoutCancel,
chainID,
requestID,
PrefixMessage(c.handlerPrefix, appRequestBytes),
); err != nil {
c.router.log.Error("unexpected error when sending message",
zap.Stringer("op", message.CrossChainAppRequestOp),
zap.Stringer("chainID", chainID),
zap.Uint32("requestID", requestID),
zap.Error(err),
)
return err
}

c.router.pendingCrossChainAppRequests[requestID] = pendingCrossChainAppRequest{
handlerID: c.handlerIDStr,
callback: onResponse,
}
c.router.requestID += 2

return nil
}

// PrefixMessage prefixes the original message with the protocol identifier.
//
// Only gossip and request messages need to be prefixed.
Expand Down
Loading

0 comments on commit 93cef38

Please sign in to comment.