Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 21 additions & 14 deletions pkg/capabilities/capabilities.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,11 @@ import (
"strings"
"time"

p2ptypes "github.com/smartcontractkit/libocr/ragep2p/types"
"google.golang.org/protobuf/proto"
"google.golang.org/protobuf/types/known/anypb"

p2ptypes "github.com/smartcontractkit/libocr/ragep2p/types"

"github.com/smartcontractkit/chainlink-protos/cre/go/values"

ocrtypes "github.com/smartcontractkit/libocr/offchainreporting2plus/types"
Expand Down Expand Up @@ -554,22 +555,24 @@ func MustNewRemoteCapabilityInfo(
}

const (
DefaultRegistrationRefresh = 30 * time.Second
DefaultRegistrationExpiry = 2 * time.Minute
DefaultMessageExpiry = 2 * time.Minute
DefaultBatchSize = 100
DefaultBatchCollectionPeriod = 100 * time.Millisecond
DefaultExecutableRequestTimeout = 8 * time.Minute
DefaultServerMaxParallelRequests = uint32(1000)
DefaultRegistrationRefresh = 30 * time.Second
DefaultRegistrationExpiry = 2 * time.Minute
DefaultMessageExpiry = 2 * time.Minute
DefaultBatchSize = 100
DefaultBatchCollectionPeriod = 100 * time.Millisecond
DefaultExecutableRequestTimeout = 8 * time.Minute
DefaultServerMaxParallelRequests = uint32(1000)
DefaultRegistrationStatusUpdateTimeout = 0
)

type RemoteTriggerConfig struct {
RegistrationRefresh time.Duration
RegistrationExpiry time.Duration
MinResponsesToAggregate uint32
MessageExpiry time.Duration
MaxBatchSize uint32
BatchCollectionPeriod time.Duration
RegistrationRefresh time.Duration
RegistrationExpiry time.Duration
MinResponsesToAggregate uint32
MessageExpiry time.Duration
MaxBatchSize uint32
BatchCollectionPeriod time.Duration
RegistrationStatusUpdateTimeout time.Duration
}

type RemoteTargetConfig struct { // deprecated - v1 only
Expand Down Expand Up @@ -608,6 +611,10 @@ func (c *RemoteTriggerConfig) ApplyDefaults() {
if c.BatchCollectionPeriod == 0 {
c.BatchCollectionPeriod = DefaultBatchCollectionPeriod
}

if c.RegistrationStatusUpdateTimeout == 0 {
c.RegistrationStatusUpdateTimeout = DefaultRegistrationStatusUpdateTimeout
}
Comment on lines +614 to +617
Copy link

Copilot AI Feb 25, 2026

Choose a reason for hiding this comment

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

DefaultRegistrationStatusUpdateTimeout is defined as 0 and ApplyDefaults() assigns it when the field is 0, which is a no-op and makes it unclear whether 0 is meant to be a real default or an “unset/disabled” sentinel. Consider either (a) removing the constant + defaulting block entirely if 0 is the intended default, or (b) setting a non-zero default here (and documenting whether callers can explicitly disable by setting 0).

Suggested change
if c.RegistrationStatusUpdateTimeout == 0 {
c.RegistrationStatusUpdateTimeout = DefaultRegistrationStatusUpdateTimeout
}

Copilot uses AI. Check for mistakes.
}

func (c *RemoteExecutableConfig) ApplyDefaults() {
Expand Down
82 changes: 46 additions & 36 deletions pkg/capabilities/pb/registry.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions pkg/capabilities/pb/registry.proto
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ message RemoteTriggerConfig {
google.protobuf.Duration messageExpiry = 4;
uint32 maxBatchSize = 5;
google.protobuf.Duration batchCollectionPeriod = 6;
google.protobuf.Duration registrationStatusUpdateTimeout = 7;
}

// deprecated - v1 only
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,7 @@ func decodeRemoteTriggerConfig(prtc *capabilitiespb.RemoteTriggerConfig) *capabi
remoteTriggerConfig.MessageExpiry = prtc.MessageExpiry.AsDuration()
remoteTriggerConfig.MaxBatchSize = prtc.MaxBatchSize
remoteTriggerConfig.BatchCollectionPeriod = prtc.BatchCollectionPeriod.AsDuration()
remoteTriggerConfig.RegistrationStatusUpdateTimeout = prtc.RegistrationStatusUpdateTimeout.AsDuration()
return remoteTriggerConfig
}

Expand Down Expand Up @@ -424,12 +425,13 @@ func (c *capabilitiesRegistryServer) ConfigForCapability(ctx context.Context, re
if cc.RemoteTriggerConfig != nil {
ccp.RemoteConfig = &capabilitiespb.CapabilityConfig_RemoteTriggerConfig{
RemoteTriggerConfig: &capabilitiespb.RemoteTriggerConfig{
RegistrationRefresh: durationpb.New(cc.RemoteTriggerConfig.RegistrationRefresh),
RegistrationExpiry: durationpb.New(cc.RemoteTriggerConfig.RegistrationExpiry),
MinResponsesToAggregate: cc.RemoteTriggerConfig.MinResponsesToAggregate,
MessageExpiry: durationpb.New(cc.RemoteTriggerConfig.MessageExpiry),
MaxBatchSize: cc.RemoteTriggerConfig.MaxBatchSize,
BatchCollectionPeriod: durationpb.New(cc.RemoteTriggerConfig.BatchCollectionPeriod),
RegistrationRefresh: durationpb.New(cc.RemoteTriggerConfig.RegistrationRefresh),
RegistrationExpiry: durationpb.New(cc.RemoteTriggerConfig.RegistrationExpiry),
MinResponsesToAggregate: cc.RemoteTriggerConfig.MinResponsesToAggregate,
MessageExpiry: durationpb.New(cc.RemoteTriggerConfig.MessageExpiry),
MaxBatchSize: cc.RemoteTriggerConfig.MaxBatchSize,
BatchCollectionPeriod: durationpb.New(cc.RemoteTriggerConfig.BatchCollectionPeriod),
RegistrationStatusUpdateTimeout: durationpb.New(cc.RemoteTriggerConfig.RegistrationStatusUpdateTimeout),
},
Comment on lines +431 to 435
Copy link

Copilot AI Feb 25, 2026

Choose a reason for hiding this comment

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

The new RegistrationStatusUpdateTimeout field is now serialized into the top-level remote trigger config, but there isn’t a focused test that verifies a non-zero value round-trips through the registry client/server conversion. Add a unit test that sets this field to a non-zero duration and asserts it is preserved after ConfigForCapability.

Copilot uses AI. Check for mistakes.
}
}
Expand Down Expand Up @@ -465,12 +467,13 @@ func (c *capabilitiesRegistryServer) ConfigForCapability(ctx context.Context, re
if mConfig.RemoteTriggerConfig != nil {
pbMethodConfig.RemoteConfig = &capabilitiespb.CapabilityMethodConfig_RemoteTriggerConfig{
RemoteTriggerConfig: &capabilitiespb.RemoteTriggerConfig{
RegistrationRefresh: durationpb.New(mConfig.RemoteTriggerConfig.RegistrationRefresh),
RegistrationExpiry: durationpb.New(mConfig.RemoteTriggerConfig.RegistrationExpiry),
MinResponsesToAggregate: mConfig.RemoteTriggerConfig.MinResponsesToAggregate,
MessageExpiry: durationpb.New(mConfig.RemoteTriggerConfig.MessageExpiry),
MaxBatchSize: mConfig.RemoteTriggerConfig.MaxBatchSize,
BatchCollectionPeriod: durationpb.New(mConfig.RemoteTriggerConfig.BatchCollectionPeriod),
RegistrationRefresh: durationpb.New(mConfig.RemoteTriggerConfig.RegistrationRefresh),
RegistrationExpiry: durationpb.New(mConfig.RemoteTriggerConfig.RegistrationExpiry),
MinResponsesToAggregate: mConfig.RemoteTriggerConfig.MinResponsesToAggregate,
MessageExpiry: durationpb.New(mConfig.RemoteTriggerConfig.MessageExpiry),
MaxBatchSize: mConfig.RemoteTriggerConfig.MaxBatchSize,
BatchCollectionPeriod: durationpb.New(mConfig.RemoteTriggerConfig.BatchCollectionPeriod),
RegistrationStatusUpdateTimeout: durationpb.New(mConfig.RemoteTriggerConfig.RegistrationStatusUpdateTimeout),
},
Comment on lines +472 to 477
Copy link

Copilot AI Feb 25, 2026

Choose a reason for hiding this comment

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

The new RegistrationStatusUpdateTimeout field is now serialized for method-level remote trigger configs as well, but there isn’t a test asserting that a non-zero value round-trips correctly for CapabilityMethodConfig entries. Extend existing registry tests to cover a method config with a non-zero timeout and verify it survives encode/decode.

Copilot uses AI. Check for mistakes.
}
}
Expand Down
Loading