Skip to content

Commit

Permalink
adding migration
Browse files Browse the repository at this point in the history
Signed-off-by: Chengxuan Xing <[email protected]>
  • Loading branch information
Chengxuan committed Dec 9, 2024
1 parent ee05f58 commit c220338
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 11 deletions.
6 changes: 3 additions & 3 deletions config.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@
|connectionTimeout|The maximum amount of time that a connection is allowed to remain with no data transmitted|[`time.Duration`](https://pkg.go.dev/time#Duration)|`30s`
|dataFormat|Configure the JSON data format for query output and events|map,flat_array,self_describing|`map`
|expectContinueTimeout|See [ExpectContinueTimeout in the Go docs](https://pkg.go.dev/net/http#Transport)|[`time.Duration`](https://pkg.go.dev/time#Duration)|`1s`
|gasEstimationFactor|The factor to apply to the gas estimation to determine the gas limit|float|`1.5`
|gasEstimationFactor|The factor to apply to the gas estimation to determine the gas limit|`float32`|`1.5`
|headers|Adds custom headers to HTTP requests|`map[string]string`|`<nil>`
|hederaCompatibilityMode|Compatibility mode for Hedera, allowing non-standard block header hashes to be processed|`boolean`|`false`
|idleTimeout|The max duration to hold a HTTP keepalive connection between calls|[`time.Duration`](https://pkg.go.dev/time#Duration)|`475ms`
Expand All @@ -95,7 +95,7 @@

|Key|Description|Type|Default Value|
|---|-----------|----|-------------|
|factor|Factor to increase the delay by, between each block indexing http requests retry to the RPC endpoint|`int`|`2`
|factor|Factor to increase the delay by, between each block indexing http requests retry to the RPC endpoint|`float32`|`2`
|initialDelay|Initial delay for retrying block indexing http requests to the RPC endpoint|[`time.Duration`](https://pkg.go.dev/time#Duration)|`100ms`
|maxDelay|Maximum delay for between each block indexing http requests retry to the RPC endpoint|[`time.Duration`](https://pkg.go.dev/time#Duration)|`30s`

Expand Down Expand Up @@ -123,7 +123,7 @@
|count|The maximum number of times to retry|`int`|`5`
|enabled|Enables retries|`boolean`|`false`
|errorStatusCodeRegex|The regex that the error response status code must match to trigger retry|`string`|`<nil>`
|factor|<Deprecated> use 'connector.blockListenerRetry.factor' instead|`int`|`<nil>`
|factor|<Deprecated> use 'connector.blockListenerRetry.factor' instead|`float32`|`<nil>`
|initWaitTime|The initial retry delay|[`time.Duration`](https://pkg.go.dev/time#Duration)|`250ms`
|initialDelay|<Deprecated> use 'connector.blockListenerRetry.initialDelay' instead|[`time.Duration`](https://pkg.go.dev/time#Duration)|`<nil>`
|maxDelay|<Deprecated> use 'connector.blockListenerRetry.maxDelay' instead|[`time.Duration`](https://pkg.go.dev/time#Duration)|`<nil>`
Expand Down
25 changes: 20 additions & 5 deletions internal/ethereum/ethereum.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,12 +66,27 @@ func NewEthereumConnector(ctx context.Context, conf config.Section) (cc ffcapi.A
eventBlockTimestamps: conf.GetBool(EventsBlockTimestamps),
eventFilterPollingInterval: conf.GetDuration(EventsFilterPollingInterval),
traceTXForRevertReason: conf.GetBool(TraceTXForRevertReason),
retry: &retry.Retry{
InitialDelay: conf.GetDuration(RetryInitDelay),
MaximumDelay: conf.GetDuration(RetryMaxDelay),
Factor: conf.GetFloat64(RetryFactor),
},
retry: &retry.Retry{},
}

if !conf.IsSet(DeprecatedRetryInitDelay) || (conf.IsSet(DeprecatedRetryInitDelay) && conf.IsSet(RetryInitDelay)) {
c.retry.InitialDelay = conf.GetDuration(RetryInitDelay)
} else {
c.retry.InitialDelay = conf.GetDuration(DeprecatedRetryInitDelay)
}

if !conf.IsSet(DeprecatedRetryFactor) || (conf.IsSet(DeprecatedRetryFactor) && conf.IsSet(RetryFactor)) {
c.retry.Factor = conf.GetFloat64(RetryFactor)
} else {
c.retry.Factor = conf.GetFloat64(DeprecatedRetryFactor)
}

if !conf.IsSet(DeprecatedRetryMaxDelay) || (conf.IsSet(DeprecatedRetryMaxDelay) && conf.IsSet(RetryMaxDelay)) {
c.retry.MaximumDelay = conf.GetDuration(RetryMaxDelay)
} else {
c.retry.MaximumDelay = conf.GetDuration(DeprecatedRetryMaxDelay)
}

if c.catchupThreshold < c.catchupPageSize {
log.L(ctx).Warnf("Catchup threshold %d must be at least as large as the catchup page size %d (overridden to %d)", c.catchupThreshold, c.catchupPageSize, c.catchupPageSize)
c.catchupThreshold = c.catchupPageSize
Expand Down
38 changes: 38 additions & 0 deletions internal/ethereum/ethereum_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package ethereum
import (
"context"
"testing"
"time"

"github.com/hyperledger/firefly-common/pkg/config"
"github.com/hyperledger/firefly-common/pkg/ffresty"
Expand Down Expand Up @@ -153,3 +154,40 @@ func TestConnectorInit(t *testing.T) {
cc, err = NewEthereumConnector(context.Background(), conf)
assert.Regexp(t, "FF23051", err)
}
func TestNewEthereumConnector(t *testing.T) {
// Test deprecated fields
config.RootConfigReset()
conf := config.RootSection("unittest")
InitConfig(conf)
conf.Set(ffresty.HTTPConfigURL, "http://localhost:8545")

// check default
cc, err := NewEthereumConnector(context.Background(), conf)
assert.NoError(t, err)
assert.NotNil(t, cc)
assert.Equal(t, 100*time.Millisecond, cc.(*ethConnector).retry.InitialDelay)
assert.Equal(t, 2.0, cc.(*ethConnector).retry.Factor)
assert.Equal(t, 30*time.Second, cc.(*ethConnector).retry.MaximumDelay)

// check default
conf.Set(DeprecatedRetryInitDelay, "100ms")
conf.Set(DeprecatedRetryFactor, 2.0)
conf.Set(DeprecatedRetryMaxDelay, "30s")
cc, err = NewEthereumConnector(context.Background(), conf)
assert.NoError(t, err)
assert.NotNil(t, cc)
assert.Equal(t, 100*time.Millisecond, cc.(*ethConnector).retry.InitialDelay)
assert.Equal(t, 2.0, cc.(*ethConnector).retry.Factor)
assert.Equal(t, 30*time.Second, cc.(*ethConnector).retry.MaximumDelay)

// check new values set
conf.Set(RetryInitDelay, "10s")
conf.Set(RetryFactor, 4.0)
conf.Set(RetryMaxDelay, "30s")
cc, err = NewEthereumConnector(context.Background(), conf)
assert.NoError(t, err)
assert.NotNil(t, cc)
assert.Equal(t, 10*time.Second, cc.(*ethConnector).retry.InitialDelay)
assert.Equal(t, 4.0, cc.(*ethConnector).retry.Factor)
assert.Equal(t, 30*time.Second, cc.(*ethConnector).retry.MaximumDelay)
}
6 changes: 3 additions & 3 deletions internal/msgs/en_config_descriptions.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,14 @@ var (
ConfigEthereumURL = ffc("config.connector.url", "URL of JSON/RPC endpoint for the Ethereum node/gateway", "string")
ConfigEthereumWSEnabled = ffc("config.connector.ws.enabled", "When true a WebSocket is established for block listening, in addition to the HTTP RPC connections used for other functions", i18n.BooleanType)
ConfigEthereumDataFormat = ffc("config.connector.dataFormat", "Configure the JSON data format for query output and events", "map,flat_array,self_describing")
ConfigEthereumGasEstimationFactor = ffc("config.connector.gasEstimationFactor", "The factor to apply to the gas estimation to determine the gas limit", "float")
ConfigEthereumGasEstimationFactor = ffc("config.connector.gasEstimationFactor", "The factor to apply to the gas estimation to determine the gas limit", i18n.FloatType)
ConfigBlockCacheSize = ffc("config.connector.blockCacheSize", "Maximum of blocks to hold in the block info cache", i18n.IntType)
ConfigBlockPollingInterval = ffc("config.connector.blockPollingInterval", "Interval for polling to check for new blocks", i18n.TimeDurationType)
ConfigBlockIndexRetryInitialDelay = ffc("config.connector.blockListenerRetry.initialDelay", "Initial delay for retrying block indexing http requests to the RPC endpoint", i18n.TimeDurationType)
ConfigBlockIndexRetryFactor = ffc("config.connector.blockListenerRetry.factor", "Factor to increase the delay by, between each block indexing http requests retry to the RPC endpoint", i18n.IntType)
ConfigBlockIndexRetryFactor = ffc("config.connector.blockListenerRetry.factor", "Factor to increase the delay by, between each block indexing http requests retry to the RPC endpoint", i18n.FloatType)
ConfigBlockIndexRetryMaxDelay = ffc("config.connector.blockListenerRetry.maxDelay", "Maximum delay for between each block indexing http requests retry to the RPC endpoint", i18n.TimeDurationType)
DeprecatedConfigBlockIndexRetryInitialDelay = ffc("config.connector.retry.initialDelay", "<Deprecated> use 'connector.blockListenerRetry.initialDelay' instead", i18n.TimeDurationType)
DeprecatedConfigBlockIndexRetryFactor = ffc("config.connector.retry.factor", "<Deprecated> use 'connector.blockListenerRetry.factor' instead", i18n.IntType)
DeprecatedConfigBlockIndexRetryFactor = ffc("config.connector.retry.factor", "<Deprecated> use 'connector.blockListenerRetry.factor' instead", i18n.FloatType)
DeprecatedConfigBlockIndexRetryMaxDelay = ffc("config.connector.retry.maxDelay", "<Deprecated> use 'connector.blockListenerRetry.maxDelay' instead", i18n.TimeDurationType)
ConfigEventsBlockTimestamps = ffc("config.connector.events.blockTimestamps", "Whether to include the block timestamps in the event information", i18n.BooleanType)
ConfigEventsCatchupPageSize = ffc("config.connector.events.catchupPageSize", "Number of blocks to query per poll when catching up to the head of the blockchain", i18n.IntType)
Expand Down

0 comments on commit c220338

Please sign in to comment.