From fe235d43fc4510c59ebd339e35f3b31fee5a6de8 Mon Sep 17 00:00:00 2001 From: Sandra Vrtikapa Date: Tue, 19 Jul 2022 12:45:48 -0400 Subject: [PATCH] chore: Add proof monitoring expiry period Add startup parameter for proof monitoring expiry period Closes #1401 Signed-off-by: Sandra Vrtikapa --- cmd/orb-server/startcmd/params.go | 12 ++++++++++++ cmd/orb-server/startcmd/params_test.go | 15 ++++++++++++++- cmd/orb-server/startcmd/start.go | 2 ++ pkg/observer/observer.go | 16 ++++++++-------- pkg/observer/observer_test.go | 2 +- test/bdd/fixtures/docker-compose.yml | 1 + 6 files changed, 38 insertions(+), 10 deletions(-) diff --git a/cmd/orb-server/startcmd/params.go b/cmd/orb-server/startcmd/params.go index 8b55f5feb..f3ac6f4e0 100644 --- a/cmd/orb-server/startcmd/params.go +++ b/cmd/orb-server/startcmd/params.go @@ -167,6 +167,10 @@ const ( "Defaults to 10s if not set. " + commonEnvVarUsageText + vctProofMonitoringIntervalEnvKey + vctProofMonitoringExpiryPeriodFlagName = "vct-proof-monitoring-expiry-period" + vctProofMonitoringExpiryPeriodEnvKey = "VCT_PROOF_MONITORING_EXPIRY_PERIOD" + vctProofMonitoringExpiryPeriodFlagUsage = "Monitoring service will keep checking for this period of time for proof to be included(default 1h). " + commonEnvVarUsageText + vctProofMonitoringExpiryPeriodEnvKey + vctLogMonitoringIntervalFlagName = "vct-log-monitoring-interval" vctLogMonitoringIntervalEnvKey = "VCT_LOG_MONITORING_INTERVAL" vctLogMonitoringIntervalFlagUsage = "The interval in which VCT logs are monitored to ensure that they are consistent. " + @@ -697,6 +701,7 @@ type orbParameters struct { maxWitnessDelay time.Duration maxClockSkew time.Duration witnessStoreExpiryPeriod time.Duration + proofMonitoringExpiryPeriod time.Duration syncTimeout uint64 signWithLocalWitness bool httpSignaturesEnabled bool @@ -1309,6 +1314,11 @@ func getOrbParameters(cmd *cobra.Command) (*orbParameters, error) { return nil, fmt.Errorf("%s: %w", vctProofMonitoringIntervalFlagName, err) } + proofMonitoringExpiryPeriod, err := getDuration(cmd, vctProofMonitoringExpiryPeriodFlagName, vctProofMonitoringExpiryPeriodEnvKey, defaultProofMonitoringExpiryPeriod) + if err != nil { + return nil, fmt.Errorf("%s: %w", vctProofMonitoringExpiryPeriodFlagName, err) + } + vctLogMonitoringInterval, err := getDuration(cmd, vctLogMonitoringIntervalFlagName, vctLogMonitoringIntervalEnvKey, defaultVCTLogMonitoringInterval) if err != nil { @@ -1421,6 +1431,7 @@ func getOrbParameters(cmd *cobra.Command) (*orbParameters, error) { maxWitnessDelay: maxWitnessDelay, maxClockSkew: maxClockSkew, witnessStoreExpiryPeriod: witnessStoreExpiryPeriod, + proofMonitoringExpiryPeriod: proofMonitoringExpiryPeriod, syncTimeout: syncTimeout, signWithLocalWitness: signWithLocalWitness, httpSignaturesEnabled: httpSignaturesEnabled, @@ -2098,6 +2109,7 @@ func createFlags(startCmd *cobra.Command) { startCmd.Flags().StringP(anchorSyncIntervalFlagName, anchorSyncIntervalFlagShorthand, "", anchorSyncIntervalFlagUsage) startCmd.Flags().StringP(anchorSyncMinActivityAgeFlagName, "", "", anchorSyncMinActivityAgeFlagUsage) startCmd.Flags().StringP(vctProofMonitoringIntervalFlagName, "", "", vctProofMonitoringIntervalFlagUsage) + startCmd.Flags().StringP(vctProofMonitoringExpiryPeriodFlagName, "", "", vctProofMonitoringExpiryPeriodFlagUsage) startCmd.Flags().StringP(vctLogMonitoringIntervalFlagName, "", "", vctLogMonitoringIntervalFlagUsage) startCmd.Flags().StringP(vctLogMonitoringMaxTreeSizeFlagName, "", "", vctLogMonitoringMaxTreeSizeFlagUsage) startCmd.Flags().StringP(vctLogMonitoringGetEntriesRangeFlagName, "", "", vctLogMonitoringGetEntriesRangeFlagUsage) diff --git a/cmd/orb-server/startcmd/params_test.go b/cmd/orb-server/startcmd/params_test.go index f6e1c9db9..ef443dd57 100644 --- a/cmd/orb-server/startcmd/params_test.go +++ b/cmd/orb-server/startcmd/params_test.go @@ -13,7 +13,7 @@ import ( "testing" "time" - "github.com/cenkalti/backoff/v4" + backoff "github.com/cenkalti/backoff/v4" ariesmemstorage "github.com/hyperledger/aries-framework-go/component/storageutil/mem" "github.com/hyperledger/aries-framework-go/spi/storage" "github.com/spf13/cobra" @@ -733,6 +733,19 @@ func TestStartCmdWithMissingArg(t *testing.T) { require.Contains(t, err.Error(), "vct-proof-monitoring-interval: invalid value [xxx]") }) + t.Run("VCT proof monitoring expiry period", func(t *testing.T) { + restoreEnv := setEnv(t, vctProofMonitoringExpiryPeriodEnvKey, "xxx") + defer restoreEnv() + + startCmd := GetStartCmd() + + startCmd.SetArgs(getTestArgs("localhost:8081", "local", "false", databaseTypeMemOption, "")) + + err := startCmd.Execute() + require.Error(t, err) + require.Contains(t, err.Error(), "vct-proof-monitoring-expiry-period: invalid value [xxx]") + }) + t.Run("VCT log monitoring interval", func(t *testing.T) { restoreEnv := setEnv(t, vctLogMonitoringIntervalEnvKey, "xxx") defer restoreEnv() diff --git a/cmd/orb-server/startcmd/start.go b/cmd/orb-server/startcmd/start.go index e9b3dcfc5..174b054b6 100644 --- a/cmd/orb-server/startcmd/start.go +++ b/cmd/orb-server/startcmd/start.go @@ -163,6 +163,7 @@ const ( defaultMaxWitnessDelay = 10 * time.Minute defaultMaxClockSkew = 1 * time.Minute defaultWitnessStoreExpiryDelta = 12 * time.Minute + defaultProofMonitoringExpiryPeriod = 1 * time.Hour defaultSyncTimeout = 1 defaulthttpSignaturesEnabled = true defaultDidDiscoveryEnabled = false @@ -949,6 +950,7 @@ func startOrbServices(parameters *orbParameters) error { observer, err := observer.New(apConfig.ServiceIRI, providers, observer.WithDiscoveryDomain(parameters.discoveryDomain), observer.WithSubscriberPoolSize(parameters.mqParams.observerPoolSize), + observer.WithProofMonitoringExpiryPeriod(parameters.proofMonitoringExpiryPeriod), ) if err != nil { return fmt.Errorf("failed to create observer: %w", err) diff --git a/pkg/observer/observer.go b/pkg/observer/observer.go index 9f790e561..ceed8654c 100644 --- a/pkg/observer/observer.go +++ b/pkg/observer/observer.go @@ -111,9 +111,9 @@ type monitoringSvc interface { type outboxProvider func() Outbox type options struct { - discoveryDomain string - subscriberPoolSize int - monitoringSvcExpiry time.Duration + discoveryDomain string + subscriberPoolSize int + proofMonitoringSvcExpiry time.Duration } // Option is an option for observer. @@ -133,10 +133,10 @@ func WithSubscriberPoolSize(value int) Option { } } -// WithMonitoringServiceExpiry sets expiry period for proof monitoring service. -func WithMonitoringServiceExpiry(value time.Duration) Option { +// WithProofMonitoringExpiryPeriod sets expiry period for proof monitoring service. +func WithProofMonitoringExpiryPeriod(value time.Duration) Option { return func(opts *options) { - opts.monitoringSvcExpiry = value + opts.proofMonitoringSvcExpiry = value } } @@ -169,7 +169,7 @@ type Observer struct { // New returns a new observer. func New(serviceIRI *url.URL, providers *Providers, opts ...Option) (*Observer, error) { optns := &options{ - monitoringSvcExpiry: defaultMonitoringSvcExpiry, + proofMonitoringSvcExpiry: defaultMonitoringSvcExpiry, } for _, opt := range opts { @@ -180,7 +180,7 @@ func New(serviceIRI *url.URL, providers *Providers, opts ...Option) (*Observer, serviceIRI: serviceIRI, Providers: providers, discoveryDomain: optns.discoveryDomain, - monitoringSvcExpiry: optns.monitoringSvcExpiry, + monitoringSvcExpiry: optns.proofMonitoringSvcExpiry, } subscriberPoolSize := optns.subscriberPoolSize diff --git a/pkg/observer/observer_test.go b/pkg/observer/observer_test.go index 405dd57b3..1476188df 100644 --- a/pkg/observer/observer_test.go +++ b/pkg/observer/observer_test.go @@ -195,7 +195,7 @@ func TestStartObserver(t *testing.T) { o, err := New(serviceIRI, providers, WithDiscoveryDomain("webcas:shared.domain.com"), - WithMonitoringServiceExpiry(20*time.Second), + WithProofMonitoringExpiryPeriod(20*time.Second), WithSubscriberPoolSize(3)) require.NotNil(t, o) require.NoError(t, err) diff --git a/test/bdd/fixtures/docker-compose.yml b/test/bdd/fixtures/docker-compose.yml index 8a0f91c30..0a361a0cf 100644 --- a/test/bdd/fixtures/docker-compose.yml +++ b/test/bdd/fixtures/docker-compose.yml @@ -692,6 +692,7 @@ services: - MAX_WITNESS_DELAY=25s - MAX_CLOCK_SKEW=5s - WITNESS_STORE_EXPIRY_PERIOD=32s + - VCT_PROOF_MONITORING_EXPIRY_PERIOD=5s # ORB_AUTH_TOKENS_DEF contains the authorization definition for each of the REST endpoints. Format: #