From 7800470a242b549f9c531402d9164e3ab5d36f4e Mon Sep 17 00:00:00 2001 From: Robert Pirtle Date: Mon, 27 Nov 2023 12:45:30 -0800 Subject: [PATCH 01/14] setup env & testing for shard routing * setup two shard peer nodes * set new .env for sharded nodes * add intervalmap data structure * add parsing of shard env variables --- .env | 5 +++- config/config.go | 54 ++++++++++++++++++++++++++++++++++++++ config/config_test.go | 26 ++++++++++++++++++ config/intervalmap.go | 41 +++++++++++++++++++++++++++++ config/intervalmap_test.go | 54 ++++++++++++++++++++++++++++++++++++++ docker-compose.yml | 28 ++++++++++++++++++++ 6 files changed, 207 insertions(+), 1 deletion(-) create mode 100644 config/intervalmap.go create mode 100644 config/intervalmap_test.go diff --git a/.env b/.env index 50e21bb..40d7a5e 100644 --- a/.env +++ b/.env @@ -71,9 +71,12 @@ PROXY_BACKEND_HOST_URL_MAP=localhost:7777>http://kava-validator:8545,localhost:7 # otherwise, it falls back to the value in PROXY_BACKEND_HOST_URL_MAP PROXY_HEIGHT_BASED_ROUTING_ENABLED=true PROXY_PRUNING_BACKEND_HOST_URL_MAP=localhost:7777>http://kava-pruning:8545,localhost:7778>http://kava-pruning:8545 +# enable shard routing for hosts defined in PROXY_SHARD_BACKEND_HOST_URL_MAP +PROXY_SHARDED_ROUTING_ENABLED=true +PROXY_SHARD_BACKEND_HOST_URL_MAP=localhost:7777>10|http://kava-shard-10:8545|20|http://kava-shard-20:8545 # PROXY_MAXIMUM_REQ_BATCH_SIZE is a proxy-enforced limit on the number of subrequest in a batch PROXY_MAXIMUM_REQ_BATCH_SIZE=100 -# Configuration for the servcie to connect to it's database +# Configuration for the service to connect to it's database DATABASE_NAME=postgres DATABASE_ENDPOINT_URL=postgres:5432 DATABASE_USERNAME=postgres diff --git a/config/config.go b/config/config.go index b244ce4..2b4b079 100644 --- a/config/config.go +++ b/config/config.go @@ -20,6 +20,9 @@ type Config struct { EnableHeightBasedRouting bool ProxyPruningBackendHostURLMapRaw string ProxyPruningBackendHostURLMap map[string]url.URL + EnableShardedRouting bool + ProxyShardBackendHostURLMapRaw string + ProxyShardBackendHostURLMap map[string]IntervalURLMap ProxyMaximumBatchSize int EvmQueryServiceURL string DatabaseName string @@ -65,6 +68,8 @@ const ( PROXY_BACKEND_HOST_URL_MAP_ENVIRONMENT_KEY = "PROXY_BACKEND_HOST_URL_MAP" PROXY_HEIGHT_BASED_ROUTING_ENABLED_KEY = "PROXY_HEIGHT_BASED_ROUTING_ENABLED" PROXY_PRUNING_BACKEND_HOST_URL_MAP_ENVIRONMENT_KEY = "PROXY_PRUNING_BACKEND_HOST_URL_MAP" + PROXY_SHARDED_ROUTING_ENABLED_ENVIRONMENT_KEY = "PROXY_SHARDED_ROUTING_ENABLED" + PROXY_SHARD_BACKEND_HOST_URL_MAP_ENVIRONMENT_KEY = "PROXY_SHARD_BACKEND_HOST_URL_MAP" PROXY_MAXIMUM_BATCH_SIZE_ENVIRONMENT_KEY = "PROXY_MAXIMUM_REQ_BATCH_SIZE" DEFAULT_PROXY_MAXIMUM_BATCH_SIZE = 500 PROXY_SERVICE_PORT_ENVIRONMENT_KEY = "PROXY_SERVICE_PORT" @@ -220,6 +225,50 @@ func ParseRawProxyBackendHostURLMap(raw string) (map[string]url.URL, error) { return hostURLMap, combinedErr } +// ParseRawShardRoutingBackendHostURLMap attempts to parse backend host URL mapping for shards. +// The shard map is a map of host name => (map of end block => backend route) +// returning the mapping and error (if any) +func ParseRawShardRoutingBackendHostURLMap(raw string) (map[string]IntervalURLMap, error) { + parsed := make(map[string]IntervalURLMap) + hostConfigs := strings.Split(raw, ",") + for _, hc := range hostConfigs { + pieces := strings.Split(hc, ">") + if len(pieces) != 2 { + return parsed, fmt.Errorf("expected shard definition like :|, found '%s'", hc) + } + + host := pieces[0] + endpointBackendValues := strings.Split(pieces[1], "|") + if len(endpointBackendValues)%2 != 0 { + return parsed, fmt.Errorf("unexpected | sequence for %s: %s", + host, pieces[1], + ) + } + + backendByEndHeight := make(map[uint64]*url.URL, len(endpointBackendValues)/2) + for i := 0; i < len(endpointBackendValues); i += 2 { + endHeight, err := strconv.ParseUint(endpointBackendValues[i], 10, 64) + if err != nil || endHeight == 0 { + return parsed, fmt.Errorf("invalid shard end height (%s) for host %s: %s", + endpointBackendValues[i], host, err, + ) + } + + backendRoute, err := url.Parse(endpointBackendValues[i+1]) + if err != nil || backendRoute.String() == "" { + return parsed, fmt.Errorf("invalid shard backend route (%s) for height %d of host %s: %s", + endpointBackendValues[i+1], endHeight, host, err, + ) + } + backendByEndHeight[endHeight] = backendRoute + } + + parsed[host] = NewIntervalURLMap(backendByEndHeight) + } + + return parsed, nil +} + // ParseRawHostnameToHeaderValueMap attempts to parse mappings of hostname to corresponding header value. // For example hostname to access-control-allow-origin header value. func ParseRawHostnameToHeaderValueMap(raw string) (map[string]string, error) { @@ -257,10 +306,12 @@ func ParseRawHostnameToHeaderValueMap(raw string) (map[string]string, error) { func ReadConfig() Config { rawProxyBackendHostURLMap := os.Getenv(PROXY_BACKEND_HOST_URL_MAP_ENVIRONMENT_KEY) rawProxyPruningBackendHostURLMap := os.Getenv(PROXY_PRUNING_BACKEND_HOST_URL_MAP_ENVIRONMENT_KEY) + rawProxyShardedBackendHostURLMap := os.Getenv(PROXY_SHARD_BACKEND_HOST_URL_MAP_ENVIRONMENT_KEY) // best effort to parse, callers are responsible for validating // before using any values read parsedProxyBackendHostURLMap, _ := ParseRawProxyBackendHostURLMap(rawProxyBackendHostURLMap) parsedProxyPruningBackendHostURLMap, _ := ParseRawProxyBackendHostURLMap(rawProxyPruningBackendHostURLMap) + parsedProxyShardedBackendHostURLMap, _ := ParseRawShardRoutingBackendHostURLMap(rawProxyShardedBackendHostURLMap) whitelistedHeaders := os.Getenv(WHITELISTED_HEADERS_ENVIRONMENT_KEY) parsedWhitelistedHeaders := strings.Split(whitelistedHeaders, ",") @@ -282,6 +333,9 @@ func ReadConfig() Config { EnableHeightBasedRouting: EnvOrDefaultBool(PROXY_HEIGHT_BASED_ROUTING_ENABLED_KEY, false), ProxyPruningBackendHostURLMapRaw: rawProxyPruningBackendHostURLMap, ProxyPruningBackendHostURLMap: parsedProxyPruningBackendHostURLMap, + EnableShardedRouting: EnvOrDefaultBool(PROXY_HEIGHT_BASED_ROUTING_ENABLED_KEY, false), + ProxyShardBackendHostURLMapRaw: rawProxyShardedBackendHostURLMap, + ProxyShardBackendHostURLMap: parsedProxyShardedBackendHostURLMap, ProxyMaximumBatchSize: EnvOrDefaultInt(PROXY_MAXIMUM_BATCH_SIZE_ENVIRONMENT_KEY, DEFAULT_PROXY_MAXIMUM_BATCH_SIZE), DatabaseName: os.Getenv(DATABASE_NAME_ENVIRONMENT_KEY), DatabaseEndpointURL: os.Getenv(DATABASE_ENDPOINT_URL_ENVIRONMENT_KEY), diff --git a/config/config_test.go b/config/config_test.go index c29375a..47b8d21 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -1,11 +1,13 @@ package config_test import ( + "net/url" "os" "testing" "github.com/kava-labs/kava-proxy-service/config" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) var ( @@ -53,6 +55,30 @@ func TestUnitTestParseHostMapReturnsErrEmptyHostMapWhenEmpty(t *testing.T) { assert.ErrorIs(t, err, config.ErrEmptyHostMap) } +func TestUnitTestParseRawShardRoutingBackendHostURLMap(t *testing.T) { + parsed, err := config.ParseRawShardRoutingBackendHostURLMap("localhost:7777>10|http://kava-shard-10:8545|20|http://kava-shard-20:8545") + require.NoError(t, err) + expected := map[string]config.IntervalURLMap{ + "localhost:7777": config.NewIntervalURLMap(map[uint64]*url.URL{ + 10: mustUrl("http://kava-shard-10:8545"), + 20: mustUrl("http://kava-shard-20:8545"), + }), + } + require.Equal(t, expected, parsed) + + _, err = config.ParseRawShardRoutingBackendHostURLMap("no-shard-def") + require.ErrorContains(t, err, "expected shard definition like :|") + + _, err = config.ParseRawShardRoutingBackendHostURLMap("invalid-shard-def>odd|number|bad") + require.ErrorContains(t, err, "unexpected | sequence for invalid-shard-def") + + _, err = config.ParseRawShardRoutingBackendHostURLMap("invalid-height>NaN|backend-host") + require.ErrorContains(t, err, "invalid shard end height (NaN) for host invalid-height") + + _, err = config.ParseRawShardRoutingBackendHostURLMap("invalid-backend-host>100|") + require.ErrorContains(t, err, "invalid shard backend route () for height 100 of host invalid-backend-host") +} + func setDefaultEnv() { os.Setenv(config.PROXY_BACKEND_HOST_URL_MAP_ENVIRONMENT_KEY, proxyServiceBackendHostURLMap) os.Setenv(config.PROXY_HEIGHT_BASED_ROUTING_ENABLED_KEY, proxyServiceHeightBasedRouting) diff --git a/config/intervalmap.go b/config/intervalmap.go new file mode 100644 index 0000000..e63bdc7 --- /dev/null +++ b/config/intervalmap.go @@ -0,0 +1,41 @@ +package config + +import ( + "net/url" + "sort" +) + +// IntervalURLMap stores URLs associated with a range of numbers. +// The intervals are defined by their endpoints and must not overlap. +// The intervals are exclusive of the endpoints. +type IntervalURLMap struct { + valueByEndpoint map[uint64]*url.URL + endpoints []uint64 +} + +// NewIntervalURLMap creates a new IntervalMap from a map of interval endpoint => url. +// The intervals are exclusive of their endpoint. +// ie. if the lowest value endpoint in the map is 10, the interval is for all numbers 1 through 9. +func NewIntervalURLMap(valueByEndpoint map[uint64]*url.URL) IntervalURLMap { + endpoints := make([]uint64, 0, len(valueByEndpoint)) + for e := range valueByEndpoint { + endpoints = append(endpoints, e) + } + sort.Slice(endpoints, func(i, j int) bool { return endpoints[i] < endpoints[j] }) + + return IntervalURLMap{ + valueByEndpoint: valueByEndpoint, + endpoints: endpoints, + } +} + +// Lookup finds the value associated with the interval containing the number, if it exists. +func (im *IntervalURLMap) Lookup(num uint64) (*url.URL, bool) { + i := sort.Search(len(im.endpoints), func(i int) bool { return im.endpoints[i] > num }) + + if i < len(im.endpoints) && num < im.endpoints[i] { + return im.valueByEndpoint[im.endpoints[i]], true + } + + return nil, false +} diff --git a/config/intervalmap_test.go b/config/intervalmap_test.go new file mode 100644 index 0000000..b7c1df9 --- /dev/null +++ b/config/intervalmap_test.go @@ -0,0 +1,54 @@ +package config_test + +import ( + "fmt" + "net/url" + "testing" + + "github.com/kava-labs/kava-proxy-service/config" + "github.com/stretchr/testify/require" +) + +func mustUrl(s string) *url.URL { + u, err := url.Parse(s) + if err != nil { + panic(fmt.Sprintf("failed to parse url %s: %s", s, err)) + } + return u +} + +func TestUnitTestIntervalMap(t *testing.T) { + valueByEndpoint := map[uint64]*url.URL{ + 10: mustUrl("A"), + 20: mustUrl("B"), + 100: mustUrl("C"), + } + intervalmap := config.NewIntervalURLMap(valueByEndpoint) + + testCases := []struct { + value uint64 + expectFound bool + expectResult string + }{ + {1, true, "A"}, + {9, true, "A"}, + {10, true, "B"}, + {15, true, "B"}, + {20, true, "C"}, + {75, true, "C"}, + {100, false, ""}, + {300, false, ""}, + } + + for _, tc := range testCases { + t.Run(fmt.Sprintf("Lookup(%d)", tc.value), func(t *testing.T) { + result, found := intervalmap.Lookup(tc.value) + require.Equal(t, tc.expectFound, found) + if tc.expectResult == "" { + require.Nil(t, result) + } else { + require.Equal(t, tc.expectResult, result.String()) + } + }) + } +} diff --git a/docker-compose.yml b/docker-compose.yml index 1731230..020984c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -51,6 +51,34 @@ services: - "${KAVA_CONTAINER_COSMOS_RPC_PORT}" - "${KAVA_CONTAINER_EVM_RPC_PORT}" + # shards are in name only. they are standard peer nodes, but will only recieve traffic + # for a specific block range. kava-shard-10 receives requests for heights 1-9 + kava-shard-10: + image: kava/kava:${KAVA_CONTAINER_TAG} + entrypoint: /docker/shared/kava-entrypoint.sh + env_file: .env + volumes: + - ./docker/shared:/docker/shared + # expose ports for other services to be able to connect to within + # the default docker-compose network + expose: + - "${KAVA_CONTAINER_COSMOS_RPC_PORT}" + - "${KAVA_CONTAINER_EVM_RPC_PORT}" + + # shards are in name only. they are standard peer nodes, but will only recieve traffic + # for a specific block range. kava-shard-20 receives requests for heights 10-19 + kava-shard-20: + image: kava/kava:${KAVA_CONTAINER_TAG} + entrypoint: /docker/shared/kava-entrypoint.sh + env_file: .env + volumes: + - ./docker/shared:/docker/shared + # expose ports for other services to be able to connect to within + # the default docker-compose network + expose: + - "${KAVA_CONTAINER_COSMOS_RPC_PORT}" + - "${KAVA_CONTAINER_EVM_RPC_PORT}" + # run proxy service to observe, route, and scale requests to kava api endpoints proxy: build: From 08d88a8d5c6bcbd4e75f7a1632c7b17653401f8f Mon Sep 17 00:00:00 2001 From: Robert Pirtle Date: Mon, 27 Nov 2023 15:38:39 -0800 Subject: [PATCH 02/14] rename HeightShardingProxies -> PruningOrDefaultProxies --- architecture/PROXY_ROUTING.md | 2 +- config/config_test.go | 4 ++++ service/proxy.go | 6 +++--- service/proxy_test.go | 4 ++-- service/shard.go | 16 ++++++++-------- service/shard_test.go | 2 +- 6 files changed, 19 insertions(+), 15 deletions(-) diff --git a/architecture/PROXY_ROUTING.md b/architecture/PROXY_ROUTING.md index 0a730d1..be63a00 100644 --- a/architecture/PROXY_ROUTING.md +++ b/architecture/PROXY_ROUTING.md @@ -77,7 +77,7 @@ Now suppose you want multiple backends for the same host. The proxy service supports height-based routing to direct requests that only require the most recent block to a different cluster. -This support is handled via the [`HeightShardingProxies` implementation](../service/shard.go#L16). +This support is handled via the [`PruningOrDefaultProxies` implementation](../service/shard.go#L16). This is configured via the `PROXY_HEIGHT_BASED_ROUTING_ENABLED` and `PROXY_PRUNING_BACKEND_HOST_URL_MAP` environment variables. diff --git a/config/config_test.go b/config/config_test.go index 47b8d21..868dc42 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -16,6 +16,8 @@ var ( proxyServiceBackendHostURLMap = os.Getenv("TEST_PROXY_BACKEND_HOST_URL_MAP") proxyServiceHeightBasedRouting = os.Getenv("TEST_PROXY_HEIGHT_BASED_ROUTING_ENABLED") proxyServicePruningBackendHostURLMap = os.Getenv("TEST_PROXY_PRUNING_BACKEND_HOST_URL_MAP") + proxyServiceShardedRoutingEnabled = os.Getenv("TEST_PROXY_HEIGHT_BASED_ROUTING_ENABLED") + proxyServiceShardBackendHostURLMap = os.Getenv("TEST_PROXY_SHARD_BACKEND_HOST_URL_MAP") ) func TestUnitTestEnvODefaultReturnsDefaultIfEnvironmentVariableNotSet(t *testing.T) { @@ -83,6 +85,8 @@ func setDefaultEnv() { os.Setenv(config.PROXY_BACKEND_HOST_URL_MAP_ENVIRONMENT_KEY, proxyServiceBackendHostURLMap) os.Setenv(config.PROXY_HEIGHT_BASED_ROUTING_ENABLED_KEY, proxyServiceHeightBasedRouting) os.Setenv(config.PROXY_PRUNING_BACKEND_HOST_URL_MAP_ENVIRONMENT_KEY, proxyServicePruningBackendHostURLMap) + os.Setenv(config.PROXY_SHARDED_ROUTING_ENABLED_ENVIRONMENT_KEY, proxyServiceShardedRoutingEnabled) + os.Setenv(config.PROXY_SHARD_BACKEND_HOST_URL_MAP_ENVIRONMENT_KEY, proxyServiceShardBackendHostURLMap) os.Setenv(config.PROXY_SERVICE_PORT_ENVIRONMENT_KEY, proxyServicePort) os.Setenv(config.LOG_LEVEL_ENVIRONMENT_KEY, config.DEFAULT_LOG_LEVEL) } diff --git a/service/proxy.go b/service/proxy.go index ca81b95..bddf717 100644 --- a/service/proxy.go +++ b/service/proxy.go @@ -33,11 +33,11 @@ type ProxyMetadata struct { // NewProxies creates a Proxies instance based on the service configuration: // - for non-sharding configuration, it returns a HostProxies -// - for sharding configurations, it returns a HeightShardingProxies +// - for height-based-routing configurations, it returns a PruningOrDefaultProxies func NewProxies(config config.Config, serviceLogger *logging.ServiceLogger) Proxies { if config.EnableHeightBasedRouting { - serviceLogger.Debug().Msg("configuring reverse proxies based on host AND height") - return newHeightShardingProxies(config, serviceLogger) + serviceLogger.Debug().Msg("configuring reverse proxies based on host AND height (pruning or default)") + return newPruningOrDefaultProxies(config, serviceLogger) } serviceLogger.Debug().Msg("configuring reverse proxies based solely on request host") return newHostProxies(ResponseBackendDefault, config.ProxyBackendHostURLMapParsed, serviceLogger) diff --git a/service/proxy_test.go b/service/proxy_test.go index 15022bf..66bf507 100644 --- a/service/proxy_test.go +++ b/service/proxy_test.go @@ -37,10 +37,10 @@ func TestUnitTest_NewProxies(t *testing.T) { require.IsType(t, service.HostProxies{}, proxies) }) - t.Run("returns a HeightShardingProxies when sharding enabled", func(t *testing.T) { + t.Run("returns a PruningOrDefaultProxies when sharding enabled", func(t *testing.T) { config := newConfig(t, dummyConfig.ProxyBackendHostURLMapRaw, dummyConfig.ProxyPruningBackendHostURLMapRaw) proxies := service.NewProxies(config, dummyLogger) - require.IsType(t, service.HeightShardingProxies{}, proxies) + require.IsType(t, service.PruningOrDefaultProxies{}, proxies) }) } diff --git a/service/shard.go b/service/shard.go index 5924065..5b4843b 100644 --- a/service/shard.go +++ b/service/shard.go @@ -10,23 +10,23 @@ import ( "github.com/kava-labs/kava-proxy-service/logging" ) -// HeightShardingProxies routes traffic based on the host _and_ the height of the query. +// PruningOrDefaultProxies routes traffic based on the host _and_ the height of the query. // If the height is "latest" (or equivalent), return Pruning node proxy host. // Otherwise return default node proxy host. -type HeightShardingProxies struct { +type PruningOrDefaultProxies struct { *logging.ServiceLogger pruningProxies HostProxies defaultProxies HostProxies } -var _ Proxies = HeightShardingProxies{} +var _ Proxies = PruningOrDefaultProxies{} // ProxyForRequest implements Proxies. // Decodes height of request // - routes to Pruning proxy if defined & height is "latest" // - otherwise routes to Default proxy -func (hsp HeightShardingProxies) ProxyForRequest(r *http.Request) (*httputil.ReverseProxy, ProxyMetadata, bool) { +func (hsp PruningOrDefaultProxies) ProxyForRequest(r *http.Request) (*httputil.ReverseProxy, ProxyMetadata, bool) { _, _, found := hsp.pruningProxies.ProxyForRequest(r) // if the host isn't in the pruning proxies, short circuit fallback to default if !found { @@ -38,7 +38,7 @@ func (hsp HeightShardingProxies) ProxyForRequest(r *http.Request) (*httputil.Rev req := r.Context().Value(DecodedRequestContextKey) decodedReq, ok := (req).(*decode.EVMRPCRequestEnvelope) if !ok { - hsp.Trace().Msg("HeightShardingProxies failed to find & cast the decoded request envelope from the request context") + hsp.Trace().Msg("PruningOrDefaultProxies failed to find & cast the decoded request envelope from the request context") return hsp.defaultProxies.ProxyForRequest(r) } @@ -70,9 +70,9 @@ func (hsp HeightShardingProxies) ProxyForRequest(r *http.Request) (*httputil.Rev return hsp.defaultProxies.ProxyForRequest(r) } -// newHeightShardingProxies creates a new HeightShardingProxies from the service config. -func newHeightShardingProxies(config config.Config, serviceLogger *logging.ServiceLogger) HeightShardingProxies { - return HeightShardingProxies{ +// newPruningOrDefaultProxies creates a new PruningOrDefaultProxies from the service config. +func newPruningOrDefaultProxies(config config.Config, serviceLogger *logging.ServiceLogger) PruningOrDefaultProxies { + return PruningOrDefaultProxies{ ServiceLogger: serviceLogger, pruningProxies: newHostProxies(ResponseBackendPruning, config.ProxyPruningBackendHostURLMap, serviceLogger), defaultProxies: newHostProxies(ResponseBackendDefault, config.ProxyBackendHostURLMapParsed, serviceLogger), diff --git a/service/shard_test.go b/service/shard_test.go index 2f80405..0fc5f58 100644 --- a/service/shard_test.go +++ b/service/shard_test.go @@ -9,7 +9,7 @@ import ( "github.com/stretchr/testify/require" ) -func TestUnitTest_HeightShardingProxies(t *testing.T) { +func TestUnitTest_PruningOrDefaultProxies(t *testing.T) { archiveBackend := "archivenode.kava.io/" pruningBackend := "pruningnode.kava.io/" config := newConfig(t, From 777427287b9bd51640cf8ca8b6477a4d07ca94ee Mon Sep 17 00:00:00 2001 From: Robert Pirtle Date: Mon, 27 Nov 2023 16:57:36 -0800 Subject: [PATCH 03/14] implement ShardProxies for shard routing * scaffold new Proxies to handle shards * handle shard routing * update PruningOrDefaultProxies logs to Trace --- config/intervalmap.go | 20 +++++------ config/intervalmap_test.go | 26 +++++++------- service/proxy.go | 19 ++++++++-- service/shard.go | 72 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 112 insertions(+), 25 deletions(-) diff --git a/config/intervalmap.go b/config/intervalmap.go index e63bdc7..09a73e5 100644 --- a/config/intervalmap.go +++ b/config/intervalmap.go @@ -9,33 +9,33 @@ import ( // The intervals are defined by their endpoints and must not overlap. // The intervals are exclusive of the endpoints. type IntervalURLMap struct { - valueByEndpoint map[uint64]*url.URL - endpoints []uint64 + UrlByEndHeight map[uint64]*url.URL + endpoints []uint64 } // NewIntervalURLMap creates a new IntervalMap from a map of interval endpoint => url. // The intervals are exclusive of their endpoint. // ie. if the lowest value endpoint in the map is 10, the interval is for all numbers 1 through 9. -func NewIntervalURLMap(valueByEndpoint map[uint64]*url.URL) IntervalURLMap { - endpoints := make([]uint64, 0, len(valueByEndpoint)) - for e := range valueByEndpoint { +func NewIntervalURLMap(urlByEndHeight map[uint64]*url.URL) IntervalURLMap { + endpoints := make([]uint64, 0, len(urlByEndHeight)) + for e := range urlByEndHeight { endpoints = append(endpoints, e) } sort.Slice(endpoints, func(i, j int) bool { return endpoints[i] < endpoints[j] }) return IntervalURLMap{ - valueByEndpoint: valueByEndpoint, - endpoints: endpoints, + UrlByEndHeight: urlByEndHeight, + endpoints: endpoints, } } // Lookup finds the value associated with the interval containing the number, if it exists. -func (im *IntervalURLMap) Lookup(num uint64) (*url.URL, bool) { +func (im *IntervalURLMap) Lookup(num uint64) (*url.URL, uint64, bool) { i := sort.Search(len(im.endpoints), func(i int) bool { return im.endpoints[i] > num }) if i < len(im.endpoints) && num < im.endpoints[i] { - return im.valueByEndpoint[im.endpoints[i]], true + return im.UrlByEndHeight[im.endpoints[i]], im.endpoints[i], true } - return nil, false + return nil, 0, false } diff --git a/config/intervalmap_test.go b/config/intervalmap_test.go index b7c1df9..7e9cae0 100644 --- a/config/intervalmap_test.go +++ b/config/intervalmap_test.go @@ -26,24 +26,26 @@ func TestUnitTestIntervalMap(t *testing.T) { intervalmap := config.NewIntervalURLMap(valueByEndpoint) testCases := []struct { - value uint64 - expectFound bool - expectResult string + value uint64 + expectFound bool + expectEndHeight uint64 + expectResult string }{ - {1, true, "A"}, - {9, true, "A"}, - {10, true, "B"}, - {15, true, "B"}, - {20, true, "C"}, - {75, true, "C"}, - {100, false, ""}, - {300, false, ""}, + {1, true, 10, "A"}, + {9, true, 10, "A"}, + {10, true, 20, "B"}, + {15, true, 20, "B"}, + {20, true, 100, "C"}, + {75, true, 100, "C"}, + {100, false, 0, ""}, + {300, false, 0, ""}, } for _, tc := range testCases { t.Run(fmt.Sprintf("Lookup(%d)", tc.value), func(t *testing.T) { - result, found := intervalmap.Lookup(tc.value) + result, endHeight, found := intervalmap.Lookup(tc.value) require.Equal(t, tc.expectFound, found) + require.Equal(t, tc.expectEndHeight, endHeight) if tc.expectResult == "" { require.Nil(t, result) } else { diff --git a/service/proxy.go b/service/proxy.go index bddf717..0894985 100644 --- a/service/proxy.go +++ b/service/proxy.go @@ -14,6 +14,7 @@ import ( const ( ResponseBackendDefault = "DEFAULT" ResponseBackendPruning = "PRUNING" + ResponseBackendShard = "SHARD" ) // Proxies is an interface for getting a reverse proxy for a given request. @@ -29,18 +30,30 @@ type ProxyMetadata struct { BackendName string // url of the backend used BackendRoute url.URL + // height interval endpoint of shard. + // only defined if BackendName is "SHARD" + ShardEndHeight uint64 } // NewProxies creates a Proxies instance based on the service configuration: // - for non-sharding configuration, it returns a HostProxies // - for height-based-routing configurations, it returns a PruningOrDefaultProxies func NewProxies(config config.Config, serviceLogger *logging.ServiceLogger) Proxies { + var proxies Proxies + // configure proxies for default &/or pruning cluster routing if config.EnableHeightBasedRouting { serviceLogger.Debug().Msg("configuring reverse proxies based on host AND height (pruning or default)") - return newPruningOrDefaultProxies(config, serviceLogger) + proxies = newPruningOrDefaultProxies(config, serviceLogger) + } else { + serviceLogger.Debug().Msg("configuring reverse proxies based solely on request host") + proxies = newHostProxies(ResponseBackendDefault, config.ProxyBackendHostURLMapParsed, serviceLogger) } - serviceLogger.Debug().Msg("configuring reverse proxies based solely on request host") - return newHostProxies(ResponseBackendDefault, config.ProxyBackendHostURLMapParsed, serviceLogger) + + // wrap the baseline proxies with shard info if enabled + if config.EnableShardedRouting { + return newShardProxies(config.ProxyShardBackendHostURLMap, proxies, serviceLogger) + } + return proxies } // HostProxies chooses a proxy based solely on the Host of the incoming request, diff --git a/service/shard.go b/service/shard.go index 5b4843b..e9e6e6d 100644 --- a/service/shard.go +++ b/service/shard.go @@ -4,6 +4,7 @@ import ( "fmt" "net/http" "net/http/httputil" + "net/url" "github.com/kava-labs/kava-proxy-service/config" "github.com/kava-labs/kava-proxy-service/decode" @@ -94,3 +95,74 @@ var blockTagEncodingsRoutedToLatest = map[int64]bool{ func shouldRouteToPruning(encodedHeight int64) bool { return blockTagEncodingsRoutedToLatest[encodedHeight] } + +type ShardProxies struct { + *logging.ServiceLogger + + defaultProxies Proxies + shardsByHost map[string]config.IntervalURLMap + proxyByURL map[*url.URL]*httputil.ReverseProxy +} + +var _ Proxies = ShardProxies{} + +// ProxyForRequest implements Proxies. +func (sp ShardProxies) ProxyForRequest(r *http.Request) (*httputil.ReverseProxy, ProxyMetadata, bool) { + // short circuit if not host not in shards map + shardsForHost, found := sp.shardsByHost[r.Host] + if !found { + return sp.defaultProxies.ProxyForRequest(r) + } + + // handle unsupported hosts or routing to pruning (if enabled) + proxy, metadata, found := sp.defaultProxies.ProxyForRequest(r) + if metadata.BackendName != ResponseBackendDefault || !found { + return proxy, metadata, found + } + + // get decoded request + req := r.Context().Value(DecodedRequestContextKey) + decodedReq, ok := (req).(*decode.EVMRPCRequestEnvelope) + if !ok { + sp.Trace().Msg("PruningOrDefaultProxies failed to find & cast the decoded request envelope from the request context") + return sp.defaultProxies.ProxyForRequest(r) + } + + // parse height from the request + height, err := decode.ParseBlockNumberFromParams(decodedReq.Method, decodedReq.Params) + if err != nil { + sp.Error().Msg(fmt.Sprintf("expected but failed to parse block number for %+v: %s", decodedReq, err)) + return sp.defaultProxies.ProxyForRequest(r) + } + + // look for shard including height + url, shardHeight, found := shardsForHost.Lookup(uint64(height)) + if !found { + return sp.defaultProxies.ProxyForRequest(r) + } + + // shard exists, route to it! + metadata = ProxyMetadata{ + BackendName: ResponseBackendShard, + BackendRoute: *url, + ShardEndHeight: shardHeight, + } + return sp.proxyByURL[url], metadata, true +} + +func newShardProxies(shardHostMap map[string]config.IntervalURLMap, beyondShardProxies Proxies, serviceLogger *logging.ServiceLogger) ShardProxies { + // create reverse proxy for each backend url + proxyByURL := make(map[*url.URL]*httputil.ReverseProxy) + for _, shards := range shardHostMap { + for _, route := range shards.UrlByEndHeight { + proxyByURL[route] = httputil.NewSingleHostReverseProxy(route) + } + } + + return ShardProxies{ + ServiceLogger: serviceLogger, + shardsByHost: shardHostMap, + defaultProxies: beyondShardProxies, + proxyByURL: proxyByURL, + } +} From 5a9f4c4885f92e42959dc49c8fa56f44ef557bed Mon Sep 17 00:00:00 2001 From: Robert Pirtle Date: Mon, 4 Mar 2024 10:57:19 -0800 Subject: [PATCH 04/14] update failing test for shard routing --- main_test.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/main_test.go b/main_test.go index 18f589a..e0f3f5d 100644 --- a/main_test.go +++ b/main_test.go @@ -89,8 +89,9 @@ var ( // search for any request metrics between startTime and time.Now() for particular request methods // if testedmethods is empty, all metrics in timeframe are returned. func findMetricsInWindowForMethods(db database.PostgresClient, startTime time.Time, testedmethods []string) []database.ProxiedRequestMetric { + extension := time.Duration(testExtendMetricWindowMs) * time.Millisecond // add small buffer into future in case metrics are still being created - endTime := time.Now().Add(time.Duration(testExtendMetricWindowMs) * time.Millisecond) + endTime := time.Now().Add(extension) var nextCursor int64 var proxiedRequestMetrics []database.ProxiedRequestMetric @@ -130,6 +131,8 @@ func findMetricsInWindowForMethods(db database.PostgresClient, startTime time.Ti } } + // ensure next window has no overlap with current one + time.Sleep(extension) return requestMetricsDuringRequestWindow } @@ -422,7 +425,7 @@ func TestE2ETest_HeightBasedRouting(t *testing.T) { { name: "request for non-latest height -> default", method: "eth_getBlockByNumber", - params: []interface{}{"0x2", false}, + params: []interface{}{"0x15", false}, // block 21 is beyond shards expectRoute: service.ResponseBackendDefault, }, { From 3c53de9909d6ff4ecf31b2e4d37c00b33fb02119 Mon Sep 17 00:00:00 2001 From: Robert Pirtle Date: Mon, 4 Mar 2024 11:13:18 -0800 Subject: [PATCH 05/14] add tests for shard backend responses --- main_test.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/main_test.go b/main_test.go index e0f3f5d..f0f7bb8 100644 --- a/main_test.go +++ b/main_test.go @@ -428,6 +428,18 @@ func TestE2ETest_HeightBasedRouting(t *testing.T) { params: []interface{}{"0x15", false}, // block 21 is beyond shards expectRoute: service.ResponseBackendDefault, }, + { + name: "request for height in 1st shard -> shard", + method: "eth_getBlockByNumber", + params: []interface{}{"0x2", false}, // block 2 + expectRoute: service.ResponseBackendShard, + }, + { + name: "request for height in 2nd shard -> shard", + method: "eth_getBlockByNumber", + params: []interface{}{"0xF", false}, // block 15 + expectRoute: service.ResponseBackendShard, + }, { name: "request for earliest height -> default", method: "eth_getBlockByNumber", From 1afa8c85c9c4957ac5e5f928d1b5da4c6fe35305 Mon Sep 17 00:00:00 2001 From: Robert Pirtle Date: Mon, 4 Mar 2024 11:40:45 -0800 Subject: [PATCH 06/14] add unit tests for shard routing proxies --- .env | 1 + service/proxy_test.go | 22 +++-- service/service_test.go | 8 +- service/shard_test.go | 185 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 210 insertions(+), 6 deletions(-) diff --git a/.env b/.env index 40d7a5e..5bda30c 100644 --- a/.env +++ b/.env @@ -43,6 +43,7 @@ TEST_DATABASE_ENDPOINT_URL=localhost:5432 TEST_PROXY_BACKEND_HOST_URL_MAP=localhost:7777>http://kava-validator:8545,localhost:7778>http://kava-pruning:8545 TEST_PROXY_HEIGHT_BASED_ROUTING_ENABLED=true TEST_PROXY_PRUNING_BACKEND_HOST_URL_MAP=localhost:7777>http://kava-pruning:8545,localhost:7778>http://kava-pruning:8545 +TEST_PROXY_SHARD_BACKEND_HOST_URL_MAP=localhost:7777>10|http://kava-shard-10:8545|20|http://kava-shard-20:8545 # What level of logging to use for service objects constructed during # unit tests TEST_SERVICE_LOG_LEVEL=ERROR diff --git a/service/proxy_test.go b/service/proxy_test.go index 66bf507..fb5d2f2 100644 --- a/service/proxy_test.go +++ b/service/proxy_test.go @@ -14,7 +14,7 @@ import ( "github.com/stretchr/testify/require" ) -func newConfig(t *testing.T, defaultHostMap string, pruningHostMap string) config.Config { +func newConfig(t *testing.T, defaultHostMap string, pruningHostMap string, shardHostMap string) config.Config { parsed, err := config.ParseRawProxyBackendHostURLMap(defaultHostMap) require.NoError(t, err) result := config.Config{ @@ -27,27 +27,39 @@ func newConfig(t *testing.T, defaultHostMap string, pruningHostMap string) confi result.ProxyPruningBackendHostURLMap, err = config.ParseRawProxyBackendHostURLMap(pruningHostMap) require.NoError(t, err) } + if shardHostMap != "" { + result.EnableShardedRouting = true + result.ProxyShardBackendHostURLMapRaw = shardHostMap + result.ProxyShardBackendHostURLMap, err = config.ParseRawShardRoutingBackendHostURLMap(shardHostMap) + require.NoError(t, err) + } return result } func TestUnitTest_NewProxies(t *testing.T) { t.Run("returns a HostProxies when sharding disabled", func(t *testing.T) { - config := newConfig(t, dummyConfig.ProxyBackendHostURLMapRaw, "") + config := newConfig(t, dummyConfig.ProxyBackendHostURLMapRaw, "", "") proxies := service.NewProxies(config, dummyLogger) require.IsType(t, service.HostProxies{}, proxies) }) - t.Run("returns a PruningOrDefaultProxies when sharding enabled", func(t *testing.T) { - config := newConfig(t, dummyConfig.ProxyBackendHostURLMapRaw, dummyConfig.ProxyPruningBackendHostURLMapRaw) + t.Run("returns a PruningOrDefaultProxies when height-based routing enabled", func(t *testing.T) { + config := newConfig(t, dummyConfig.ProxyBackendHostURLMapRaw, dummyConfig.ProxyPruningBackendHostURLMapRaw, "") proxies := service.NewProxies(config, dummyLogger) require.IsType(t, service.PruningOrDefaultProxies{}, proxies) }) + + t.Run("returns a ShardProxies when sharding enabled", func(t *testing.T) { + config := newConfig(t, dummyConfig.ProxyBackendHostURLMapRaw, "", dummyConfig.ProxyShardBackendHostURLMapRaw) + proxies := service.NewProxies(config, dummyLogger) + require.IsType(t, service.ShardProxies{}, proxies) + }) } func TestUnitTest_HostProxies(t *testing.T) { config := newConfig(t, "magic.kava.io>magicalbackend.kava.io,archive.kava.io>archivenode.kava.io,pruning.kava.io>pruningnode.kava.io", - "", + "", "", ) proxies := service.NewProxies(config, dummyLogger) diff --git a/service/service_test.go b/service/service_test.go index 9733509..bd2d005 100644 --- a/service/service_test.go +++ b/service/service_test.go @@ -15,6 +15,7 @@ var ( testDefaultContext = context.TODO() proxyServiceDefaultURLMapRaw = os.Getenv("TEST_PROXY_BACKEND_HOST_URL_MAP") proxyServicePruningURLMapRaw = os.Getenv("TEST_PROXY_PRUNING_BACKEND_HOST_URL_MAP") + proxyServiceShardURLMapRaw = os.Getenv("TEST_PROXY_SHARD_BACKEND_HOST_URL_MAP") databaseName = os.Getenv("DATABASE_NAME") databaseUsername = os.Getenv("DATABASE_USERNAME") databasePassword = os.Getenv("DATABASE_PASSWORD") @@ -23,7 +24,6 @@ var ( evmQueryServiceURL = os.Getenv("TEST_EVM_QUERY_SERVICE_URL") dummyConfig = func() config.Config { - proxyBackendHostURLMapParsed, err := config.ParseRawProxyBackendHostURLMap(proxyServiceDefaultURLMapRaw) if err != nil { panic(err) @@ -32,12 +32,18 @@ var ( if err != nil { panic(err) } + proxyShardBackendHostURLMapParsed, err := config.ParseRawShardRoutingBackendHostURLMap(proxyServiceShardURLMapRaw) + if err != nil { + panic(err) + } conf := config.Config{ ProxyBackendHostURLMapRaw: proxyServiceDefaultURLMapRaw, ProxyBackendHostURLMapParsed: proxyBackendHostURLMapParsed, ProxyPruningBackendHostURLMapRaw: proxyServicePruningURLMapRaw, ProxyPruningBackendHostURLMap: proxyPruningBackendHostURLMapParsed, + ProxyShardBackendHostURLMapRaw: proxyServiceShardURLMapRaw, + ProxyShardBackendHostURLMap: proxyShardBackendHostURLMapParsed, DatabaseName: databaseName, DatabaseUserName: databaseUsername, diff --git a/service/shard_test.go b/service/shard_test.go index 0fc5f58..60e36ff 100644 --- a/service/shard_test.go +++ b/service/shard_test.go @@ -15,8 +15,10 @@ func TestUnitTest_PruningOrDefaultProxies(t *testing.T) { config := newConfig(t, fmt.Sprintf("archive.kava.io>%s,pruning.kava.io>%s", archiveBackend, pruningBackend), fmt.Sprintf("archive.kava.io>%s", pruningBackend), + "", ) proxies := service.NewProxies(config, dummyLogger) + require.IsType(t, service.PruningOrDefaultProxies{}, proxies) testCases := []struct { name string @@ -160,3 +162,186 @@ func TestUnitTest_PruningOrDefaultProxies(t *testing.T) { }) } } + +// shard proxies with a pruning underlying proxy expects the same as above +// except that requests for specific heights that fall within a shard route to that shard. +func TestUnitTest_ShardProxies(t *testing.T) { + archiveBackend := "archivenode.kava.io/" + pruningBackend := "pruningnode.kava.io/" + shard1Backend := "shard-1.kava.io/" + shard2Backend := "shard-2.kava.io/" + config := newConfig(t, + fmt.Sprintf("archive.kava.io>%s,pruning.kava.io>%s", archiveBackend, pruningBackend), + fmt.Sprintf("archive.kava.io>%s", pruningBackend), + fmt.Sprintf("archive.kava.io>10|%s|20|%s", shard1Backend, shard2Backend), + ) + proxies := service.NewProxies(config, dummyLogger) + require.IsType(t, service.ShardProxies{}, proxies) + + testCases := []struct { + name string + url string + req *decode.EVMRPCRequestEnvelope + expectFound bool + expectBackend string + expectRoute string + }{ + // DEFAULT ROUTE CASES + { + name: "routes to default when not in pruning or shard map", + url: "//pruning.kava.io", + req: &decode.EVMRPCRequestEnvelope{}, + expectFound: true, + expectBackend: service.ResponseBackendDefault, + expectRoute: pruningBackend, + }, + { + name: "routes to default for specific height beyond latest shard", + url: "//archive.kava.io", + req: &decode.EVMRPCRequestEnvelope{ + Method: "eth_getBlockByNumber", + Params: []interface{}{"0xbaddad", false}, + }, + expectFound: true, + expectBackend: service.ResponseBackendDefault, + expectRoute: archiveBackend, + }, + { + name: "routes to default for methods that don't have block number", + url: "//archive.kava.io", + req: &decode.EVMRPCRequestEnvelope{ + Method: "eth_getBlockByHash", + Params: []interface{}{"0xe9bd10bc1d62b4406dd1fb3dbf3adb54f640bdb9ebbe3dd6dfc6bcc059275e54", false}, + }, + expectFound: true, + expectBackend: service.ResponseBackendDefault, + expectRoute: archiveBackend, + }, + { + name: "routes to default if it fails to decode req", + url: "//archive.kava.io", + req: nil, + expectFound: true, + expectBackend: service.ResponseBackendDefault, + expectRoute: archiveBackend, + }, + { + name: "routes to default if it fails to parse block number", + url: "//archive.kava.io", + req: &decode.EVMRPCRequestEnvelope{ + Method: "eth_getBlockByNumber", + Params: []interface{}{"not-a-block-tag", false}, + }, + expectFound: true, + expectBackend: service.ResponseBackendDefault, + expectRoute: archiveBackend, + }, + { + // TODO: should it do this? if shards exist, route to first shard? + name: "routes to default for 'earliest' block", + url: "//archive.kava.io", + req: &decode.EVMRPCRequestEnvelope{ + Method: "eth_getBlockByNumber", + Params: []interface{}{"earliest", false}, + }, + expectFound: true, + expectBackend: service.ResponseBackendDefault, + expectRoute: archiveBackend, + }, + + // PRUNING ROUTE CASES + { + name: "routes to pruning for 'latest' block", + url: "//archive.kava.io", + req: &decode.EVMRPCRequestEnvelope{ + Method: "eth_getBlockByNumber", + Params: []interface{}{"latest", false}, + }, + expectFound: true, + expectBackend: service.ResponseBackendPruning, + expectRoute: pruningBackend, + }, + { + name: "routes to pruning when block number empty", + url: "//archive.kava.io", + req: &decode.EVMRPCRequestEnvelope{ + Method: "eth_getBlockByNumber", + Params: []interface{}{nil, false}, + }, + expectFound: true, + expectBackend: service.ResponseBackendPruning, + expectRoute: pruningBackend, + }, + { + name: "routes to pruning for no-history methods", + url: "//archive.kava.io", + req: &decode.EVMRPCRequestEnvelope{ + Method: "eth_chainId", + }, + expectFound: true, + expectBackend: service.ResponseBackendPruning, + expectRoute: pruningBackend, + }, + { + // this is just another example of the above, but worth pointing out! + name: "routes to pruning when sending txs", + url: "//archive.kava.io", + req: &decode.EVMRPCRequestEnvelope{ + Method: "eth_sendTransaction", + Params: []interface{}{ + map[string]string{ + "from": "0xdeadbeef00000000000000000000000000000123", + "to": "0xbaddad0000000000000000000000000000000123", + "value": "0x1", + "gas": "0xeeee", + "gasPrice": "0x12345678900", + "nonce": "0x0", + }, + }, + }, + expectFound: true, + expectBackend: service.ResponseBackendPruning, + expectRoute: pruningBackend, + }, + + // SHARD ROUTE CASES + { + name: "routes to shard 1 for specific height in shard 1", + url: "//archive.kava.io", + req: &decode.EVMRPCRequestEnvelope{ + Method: "eth_getBlockByNumber", + Params: []interface{}{"0x5", false}, // block 5 + }, + expectFound: true, + expectBackend: service.ResponseBackendShard, + expectRoute: shard1Backend, + }, + { + name: "routes to shard 2 for specific height in shard 2", + url: "//archive.kava.io", + req: &decode.EVMRPCRequestEnvelope{ + Method: "eth_getBlockByNumber", + Params: []interface{}{"0xF", false}, // block 15 + }, + expectFound: true, + expectBackend: service.ResponseBackendShard, + expectRoute: shard2Backend, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + req := mockJsonRpcReqToUrl(tc.url, tc.req) + proxy, metadata, found := proxies.ProxyForRequest(req) + if !tc.expectFound { + require.False(t, found, "expected proxy not to be found") + return + } + require.True(t, found, "expected proxy to be found") + require.NotNil(t, proxy) + require.Equal(t, metadata.BackendName, tc.expectBackend) + require.Equal(t, metadata.BackendRoute.String(), tc.expectRoute) + requireProxyRoutesToUrl(t, proxy, req, tc.expectRoute) + }) + } +} From bbca4de3fd5d300c7a79a15eefd2fd9a4dc1b57d Mon Sep 17 00:00:00 2001 From: Robert Pirtle Date: Mon, 4 Mar 2024 11:56:06 -0800 Subject: [PATCH 07/14] route "earliest" to first shard also, prevent uint64 conversion underflows by routing any other block tag that is encoded to a negative number to the default proxy --- main_test.go | 4 ++-- service/shard.go | 14 +++++++++++++- service/shard_test.go | 23 +++++++++++------------ 3 files changed, 26 insertions(+), 15 deletions(-) diff --git a/main_test.go b/main_test.go index f0f7bb8..6f554bd 100644 --- a/main_test.go +++ b/main_test.go @@ -441,10 +441,10 @@ func TestE2ETest_HeightBasedRouting(t *testing.T) { expectRoute: service.ResponseBackendShard, }, { - name: "request for earliest height -> default", + name: "request for earliest height -> 1st shard", method: "eth_getBlockByNumber", params: []interface{}{"earliest", false}, - expectRoute: service.ResponseBackendDefault, + expectRoute: service.ResponseBackendShard, }, { name: "request for latest height -> pruning", diff --git a/service/shard.go b/service/shard.go index e9e6e6d..893802f 100644 --- a/service/shard.go +++ b/service/shard.go @@ -129,12 +129,24 @@ func (sp ShardProxies) ProxyForRequest(r *http.Request) (*httputil.ReverseProxy, } // parse height from the request - height, err := decode.ParseBlockNumberFromParams(decodedReq.Method, decodedReq.Params) + parsedHeight, err := decode.ParseBlockNumberFromParams(decodedReq.Method, decodedReq.Params) if err != nil { sp.Error().Msg(fmt.Sprintf("expected but failed to parse block number for %+v: %s", decodedReq, err)) return sp.defaultProxies.ProxyForRequest(r) } + // handle encoded block numbers + height := parsedHeight + if height == decode.BlockTagToNumberCodec[decode.BlockTagEarliest] { + // convert "earliest" to "1" so it routes to first shard + height = 1 + } else if parsedHeight < 1 { + // route all other encoded tags to default proxy. + // in practice, this is unreachable because they will be handled by the pruning Proxies + // if shard routing is enabled without PruningOrDefaultProxies, this handles all special block tags + return sp.defaultProxies.ProxyForRequest(r) + } + // look for shard including height url, shardHeight, found := shardsForHost.Lookup(uint64(height)) if !found { diff --git a/service/shard_test.go b/service/shard_test.go index 60e36ff..1f9c06a 100644 --- a/service/shard_test.go +++ b/service/shard_test.go @@ -236,18 +236,6 @@ func TestUnitTest_ShardProxies(t *testing.T) { expectBackend: service.ResponseBackendDefault, expectRoute: archiveBackend, }, - { - // TODO: should it do this? if shards exist, route to first shard? - name: "routes to default for 'earliest' block", - url: "//archive.kava.io", - req: &decode.EVMRPCRequestEnvelope{ - Method: "eth_getBlockByNumber", - Params: []interface{}{"earliest", false}, - }, - expectFound: true, - expectBackend: service.ResponseBackendDefault, - expectRoute: archiveBackend, - }, // PRUNING ROUTE CASES { @@ -305,6 +293,17 @@ func TestUnitTest_ShardProxies(t *testing.T) { }, // SHARD ROUTE CASES + { + name: "routes to 1st shard for 'earliest' block", + url: "//archive.kava.io", + req: &decode.EVMRPCRequestEnvelope{ + Method: "eth_getBlockByNumber", + Params: []interface{}{"earliest", false}, + }, + expectFound: true, + expectBackend: service.ResponseBackendShard, + expectRoute: shard1Backend, + }, { name: "routes to shard 1 for specific height in shard 1", url: "//archive.kava.io", From e737fa0746e95cfbd8de71b318ce04e4a3ee583d Mon Sep 17 00:00:00 2001 From: Robert Pirtle Date: Mon, 4 Mar 2024 12:09:07 -0800 Subject: [PATCH 08/14] configure shard routing in CI tests --- ci.docker-compose.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ci.docker-compose.yml b/ci.docker-compose.yml index 209346e..2d19f18 100644 --- a/ci.docker-compose.yml +++ b/ci.docker-compose.yml @@ -23,11 +23,14 @@ services: env_file: .env environment: PROXY_HEIGHT_BASED_ROUTING_ENABLED: "true" + PROXY_SHARDED_ROUTING_ENABLED: "true" # use public testnet as backend origin server to avoid having # to self-host a beefy Github Action runner # to build and run a kava node each execution PROXY_BACKEND_HOST_URL_MAP: localhost:7777>https://evmrpcdata.internal.testnet.proxy.kava.io,localhost:7778>https://evmrpc.internal.testnet.proxy.kava.io PROXY_PRUNING_BACKEND_HOST_URL_MAP: localhost:7777>https://evmrpc.internal.testnet.proxy.kava.io + # fake the shards by defining shards with existing backends + PROXY_SHARD_BACKEND_HOST_URL_MAP: localhost:7777>10|https://evmrpc.internal.testnet.proxy.kava.io|20|https://evmrpc.internal.testnet.proxy.kava.io EVM_QUERY_SERVICE_URL: https://evmrpc.internal.testnet.proxy.kava.io ports: - "${PROXY_HOST_PORT}:${PROXY_CONTAINER_PORT}" From fb04d8b0d701e579b92f90269cb11d26310d3b94 Mon Sep 17 00:00:00 2001 From: Robert Pirtle Date: Mon, 4 Mar 2024 13:28:46 -0800 Subject: [PATCH 09/14] document shard-based routing --- architecture/PROXY_ROUTING.md | 111 +++++++++++++++++- .../images/proxy_service_sharding.jpg | Bin 0 -> 415400 bytes service/shard.go | 4 + 3 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 architecture/images/proxy_service_sharding.jpg diff --git a/architecture/PROXY_ROUTING.md b/architecture/PROXY_ROUTING.md index be63a00..3075d6e 100644 --- a/architecture/PROXY_ROUTING.md +++ b/architecture/PROXY_ROUTING.md @@ -77,7 +77,7 @@ Now suppose you want multiple backends for the same host. The proxy service supports height-based routing to direct requests that only require the most recent block to a different cluster. -This support is handled via the [`PruningOrDefaultProxies` implementation](../service/shard.go#L16). +This support is handled via the [`PruningOrDefaultProxies` implementation](../service/shard.go#L17). This is configured via the `PROXY_HEIGHT_BASED_ROUTING_ENABLED` and `PROXY_PRUNING_BACKEND_HOST_URL_MAP` environment variables. @@ -136,6 +136,114 @@ in `PROXY_BACKEND_HOST_URL_MAP`. Any request made to a host not in the `PROXY_BACKEND_HOST_URL_MAP` map responds 502 Bad Gateway. +## Sharding + +Taking the example one step further, support the backend consists of data shards each containing a set of blocks. Although sharded routing can be configured without pruning vs default cluster routing, this example assumes it is. + +The above example supports fielding requests to a particular endpoint with pruning & archive clusters: +* request for tip-of-chain -> pruning cluster +* everything else -> archive cluster ("default") + +The proxy service supports breaking down "everything else" further by defining "shards": clusters that contain a fixed set of block heights. + +This is configured via the `PROXY_SHARDED_ROUTING_ENABLED` and `PROXY_SHARD_BACKEND_HOST_URL_MAP` environment variables: +* `PROXY_SHARDED_ROUTING_ENABLED` - flag to toggle this functionality +* `PROXY_SHARD_BACKEND_HOST_URL_MAP` - encodes the shard cluster urls and block ranges for a given endpoint. +This support is handled via the [`ShardProxies` implementation](../service/shard.go#L103). + + +The map is encoded as follows: +``` +PROXY_SHARDED_ROUTING_ENABLED=true +PROXY_SHARD_BACKEND_HOST_URL_MAP=HOST_A>ENDBLOCK_A1|ROUTE_A1|ENDBLOCK_A2|ROUTE_A2,HOST_B>ENDBLOCK_B1|ROUTE_B1 +``` + +This defines two shards for `HOST_A` and one shard for `HOST_B`: +* `HOST_A`'s shards: + * blocks 1 to `ENDBLOCK_A1` hosted at `ROUTE_A1` + * blocks `ENDBLOCK_A1`+1 to `ENDBLOCK_A2` hosted at `ROUTE_A2` +* `HOST_B`'s shard: + * blocks 1 to `ENDBLOCK_B1` hosted at `ROUTE_B1` + +Shards are inclusive of their end blocks and they must collectively contain all data from block 1 to the end bock of the last shard. + +Shards field requests that would route to the "Default" cluster in any of the above configurations: +* requests for `"earliest"` block are routed to the first defined shard +* any request for a specific height that is contained in a shard is routed to that shard. + +All other requests continue to route to the default cluster. In this context, the default cluster is referred to as the "active" cluster (see below). + +Requests for tx hashes or block hashes are routed to the "active" cluster. + +### Shard Routing + +When `PROXY_SHARDED_ROUTING_ENABLED` is `true`, "everything else" can be broken down further into clusters that contain fixed ranges of blocks. + +As an example, consider a setup that has the following clusters: +* Pruning cluster (`http://kava-pruning:8545`) +* "Active" cluster - blocks 4,000,001 to chain tip (`http://kava-archive:8545`) +* Shard 2 - blocks 2,000,001 to 4,000,000 (`http://kava-shard-4M:8545`) +* Shard 1 - blocks 1 to 2,000,000 (`http://kava-shard-2M:8545`) + +The proxy service can be configured to as follows: +``` +PROXY_HEIGHT_BASED_ROUTING_ENABLED=true +PROXY_SHARDED_ROUTING_ENABLED=true +PROXY_BACKEND_HOST_URL_MAP=evm.data.kava.io>http://kava-archive:8545 +PROXY_PRUNING_BACKEND_HOST_URL_MAP=evm.data.kava.io>http://kava-pruning:8545 +PROXY_SHARD_BACKEND_HOST_URL_MAP=evm.data.kava.io>2000000|http://kava-shard-2M:8545|4000000|http://kava-shard-4M:8545 +``` + +This value is parsed into a map that looks like the following: +``` +{ + "default": { + "evm.data.kava.io" => "http://kava-archive:8545", + }, + "pruning": { + "evm.data.kava.io" => "http://kava-pruning:8545", + }, + "shards": { + 2000000 => "http://kava-shard-2M:8545", + 4000000 => "http://kava-shard-4M:8545" + } +} +``` + +All requests that would route to the "default" cluster in teh "Default vs Pruning Backend Routing" example route as follows: +* requests for specific height between 1 and 2M -> `http://kava-shard-2M:8545` + * this includes requests for `"earliest"` +* requests for specific height between 2M+1 and 4M -> `http://kava-shard-4M:8545` +* requests for a block hash or tx hash -> the active cluster: `http://kava-archive:8545`. + +Otherwise, requests are routed as they are in the "Default vs Pruning Backend Routing" example. + +![Proxy service configured with shard-based routing](images/proxy_service_sharding.jpg) + +### "Active" Cluster + +In practice, a full-archive node can be used as the active cluster. However, the data can be slimmed down by accounting for the fact that it doesn't need the application data for blocks contained in the shards. + +The optimally-sized active cluster runs on a unique data set that includes: +* At least one recent block - this will be the starting point for the node to begin syncing once spun up. Ideally, this is the last shard's end block + 1. +* A complete blockstore, cometbft state, and tx_index + +The blockstore, cometbft state, and tx_index are required for fielding requests for data on unknown heights. These are requests for block hashes and transaction hashes. Because the proxy service can't know which height a particular hash is for (and therefore, to which shard the request should be routed), these complete databases are required to handle requests for the hashes. + +The optimally-sized node data can be created from a full-archive node by pruning only the application state for the node. On Kava, this can be accomplished with the `--only-app-state` flag of the shard command: +``` +kava shard --start --end -1 --only-appstate- +``` + +The bulk of data on cosmos-sdk chains like Kava is in the application.db, so pruning the blocks allow for a much smaller cluster footprint than a full archive node. + +### Shard Clusters + +On Kava, data for shards can be created with the `shard` command of the Kava CLI from any node that contains the desired shard block range: +``` +kava shard --home ~/.kava --start --end +``` + ## Metrics When metrics are enabled, the `proxied_request_metrics` table tracks the backend to which requests @@ -147,6 +255,7 @@ always `DEFAULT`. When enabled, the column will have one of the following values: * `DEFAULT` - the request was routed to the backend defined in `PROXY_BACKEND_HOST_URL_MAP` * `PRUNING` - the request was routed to the backend defined in `PROXY_PRUNING_BACKEND_HOST_URL_MAP` +* `SHARD` - the request was routed to a shard defined in the `PROXY_SHARD_BACKEND_HOST_URL_MAP` Additionally, the actual URL to which the request is routed to is tracked in the `response_backend_route` column. diff --git a/architecture/images/proxy_service_sharding.jpg b/architecture/images/proxy_service_sharding.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cfcdd3a5a52992e719390f454e2c0a8967bde758 GIT binary patch literal 415400 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 (p*+2=X+SX}+|k{e-akHu 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࿕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%0D61hDh$7FdgOu;N61BTbiWMy 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 c&^huJW{<351@7C?<$ Date: Mon, 4 Mar 2024 13:42:17 -0800 Subject: [PATCH 10/14] make shards inclusive of end block --- config/intervalmap.go | 10 +++++----- config/intervalmap_test.go | 11 +++++----- docker-compose.yml | 4 ++-- service/shard_test.go | 41 ++++++++++++++++++++++++++++++++++---- 4 files changed, 50 insertions(+), 16 deletions(-) diff --git a/config/intervalmap.go b/config/intervalmap.go index 09a73e5..07dc531 100644 --- a/config/intervalmap.go +++ b/config/intervalmap.go @@ -7,15 +7,15 @@ import ( // IntervalURLMap stores URLs associated with a range of numbers. // The intervals are defined by their endpoints and must not overlap. -// The intervals are exclusive of the endpoints. +// The intervals are inclusive of the endpoints. type IntervalURLMap struct { UrlByEndHeight map[uint64]*url.URL endpoints []uint64 } // NewIntervalURLMap creates a new IntervalMap from a map of interval endpoint => url. -// The intervals are exclusive of their endpoint. -// ie. if the lowest value endpoint in the map is 10, the interval is for all numbers 1 through 9. +// The intervals are inclusive of their endpoint. +// ie. if the lowest value endpoint in the map is 10, the interval is for all numbers 1 through 10. func NewIntervalURLMap(urlByEndHeight map[uint64]*url.URL) IntervalURLMap { endpoints := make([]uint64, 0, len(urlByEndHeight)) for e := range urlByEndHeight { @@ -31,9 +31,9 @@ func NewIntervalURLMap(urlByEndHeight map[uint64]*url.URL) IntervalURLMap { // Lookup finds the value associated with the interval containing the number, if it exists. func (im *IntervalURLMap) Lookup(num uint64) (*url.URL, uint64, bool) { - i := sort.Search(len(im.endpoints), func(i int) bool { return im.endpoints[i] > num }) + i := sort.Search(len(im.endpoints), func(i int) bool { return im.endpoints[i] >= num }) - if i < len(im.endpoints) && num < im.endpoints[i] { + if i < len(im.endpoints) && num <= im.endpoints[i] { return im.UrlByEndHeight[im.endpoints[i]], im.endpoints[i], true } diff --git a/config/intervalmap_test.go b/config/intervalmap_test.go index 7e9cae0..6a9b24c 100644 --- a/config/intervalmap_test.go +++ b/config/intervalmap_test.go @@ -33,19 +33,20 @@ func TestUnitTestIntervalMap(t *testing.T) { }{ {1, true, 10, "A"}, {9, true, 10, "A"}, - {10, true, 20, "B"}, + {10, true, 10, "A"}, {15, true, 20, "B"}, - {20, true, 100, "C"}, + {20, true, 20, "B"}, {75, true, 100, "C"}, - {100, false, 0, ""}, + {100, true, 100, "C"}, + {101, false, 0, ""}, {300, false, 0, ""}, } for _, tc := range testCases { t.Run(fmt.Sprintf("Lookup(%d)", tc.value), func(t *testing.T) { result, endHeight, found := intervalmap.Lookup(tc.value) - require.Equal(t, tc.expectFound, found) - require.Equal(t, tc.expectEndHeight, endHeight) + require.Equal(t, tc.expectFound, found, "unexpected found value") + require.Equal(t, tc.expectEndHeight, endHeight, "unexpected end height found") if tc.expectResult == "" { require.Nil(t, result) } else { diff --git a/docker-compose.yml b/docker-compose.yml index 020984c..178fba2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -52,7 +52,7 @@ services: - "${KAVA_CONTAINER_EVM_RPC_PORT}" # shards are in name only. they are standard peer nodes, but will only recieve traffic - # for a specific block range. kava-shard-10 receives requests for heights 1-9 + # for a specific block range. kava-shard-10 receives requests for heights 1-10 kava-shard-10: image: kava/kava:${KAVA_CONTAINER_TAG} entrypoint: /docker/shared/kava-entrypoint.sh @@ -66,7 +66,7 @@ services: - "${KAVA_CONTAINER_EVM_RPC_PORT}" # shards are in name only. they are standard peer nodes, but will only recieve traffic - # for a specific block range. kava-shard-20 receives requests for heights 10-19 + # for a specific block range. kava-shard-20 receives requests for heights 11-20 kava-shard-20: image: kava/kava:${KAVA_CONTAINER_TAG} entrypoint: /docker/shared/kava-entrypoint.sh diff --git a/service/shard_test.go b/service/shard_test.go index 1f9c06a..9927940 100644 --- a/service/shard_test.go +++ b/service/shard_test.go @@ -156,8 +156,8 @@ func TestUnitTest_PruningOrDefaultProxies(t *testing.T) { } require.True(t, found, "expected proxy to be found") require.NotNil(t, proxy) - require.Equal(t, metadata.BackendName, tc.expectBackend) - require.Equal(t, metadata.BackendRoute.String(), tc.expectRoute) + require.Equal(t, tc.expectBackend, metadata.BackendName) + require.Equal(t, tc.expectRoute, metadata.BackendRoute.String()) requireProxyRoutesToUrl(t, proxy, req, tc.expectRoute) }) } @@ -315,6 +315,28 @@ func TestUnitTest_ShardProxies(t *testing.T) { expectBackend: service.ResponseBackendShard, expectRoute: shard1Backend, }, + { + name: "end block of shard 1 routes to shard 1", + url: "//archive.kava.io", + req: &decode.EVMRPCRequestEnvelope{ + Method: "eth_getBlockByNumber", + Params: []interface{}{"0xA", false}, // block 10 + }, + expectFound: true, + expectBackend: service.ResponseBackendShard, + expectRoute: shard1Backend, + }, + { + name: "first block of shard 2 routes to shard 2", + url: "//archive.kava.io", + req: &decode.EVMRPCRequestEnvelope{ + Method: "eth_getBlockByNumber", + Params: []interface{}{"0xB", false}, // block 11 + }, + expectFound: true, + expectBackend: service.ResponseBackendShard, + expectRoute: shard2Backend, + }, { name: "routes to shard 2 for specific height in shard 2", url: "//archive.kava.io", @@ -326,6 +348,17 @@ func TestUnitTest_ShardProxies(t *testing.T) { expectBackend: service.ResponseBackendShard, expectRoute: shard2Backend, }, + { + name: "end block of shard 2 routes to shard 2", + url: "//archive.kava.io", + req: &decode.EVMRPCRequestEnvelope{ + Method: "eth_getBlockByNumber", + Params: []interface{}{"0x14", false}, // block 20 + }, + expectFound: true, + expectBackend: service.ResponseBackendShard, + expectRoute: shard2Backend, + }, } for _, tc := range testCases { @@ -338,8 +371,8 @@ func TestUnitTest_ShardProxies(t *testing.T) { } require.True(t, found, "expected proxy to be found") require.NotNil(t, proxy) - require.Equal(t, metadata.BackendName, tc.expectBackend) - require.Equal(t, metadata.BackendRoute.String(), tc.expectRoute) + require.Equal(t, tc.expectBackend, metadata.BackendName) + require.Equal(t, tc.expectRoute, metadata.BackendRoute.String()) requireProxyRoutesToUrl(t, proxy, req, tc.expectRoute) }) } From 1955b3609673194c22020a9705aa71649a2cfaba Mon Sep 17 00:00:00 2001 From: Robert Pirtle Date: Mon, 4 Mar 2024 13:53:01 -0800 Subject: [PATCH 11/14] fix comment typo --- service/shard.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/shard.go b/service/shard.go index 4fcea6b..c7e79d0 100644 --- a/service/shard.go +++ b/service/shard.go @@ -112,7 +112,7 @@ var _ Proxies = ShardProxies{} // ProxyForRequest implements Proxies. func (sp ShardProxies) ProxyForRequest(r *http.Request) (*httputil.ReverseProxy, ProxyMetadata, bool) { - // short circuit if not host not in shards map + // short circuit if host not in shards map shardsForHost, found := sp.shardsByHost[r.Host] if !found { return sp.defaultProxies.ProxyForRequest(r) From 00d98e4b7076b8325e38534dca38dedeadecb91b Mon Sep 17 00:00:00 2001 From: Robert Pirtle Date: Tue, 5 Mar 2024 10:28:13 -0800 Subject: [PATCH 12/14] add more validation to shard backend url map parsing will error in cases of: * unordered shards * multiple shards for same endblock --- config/config.go | 15 +++++++++++++++ config/config_test.go | 6 ++++++ 2 files changed, 21 insertions(+) diff --git a/config/config.go b/config/config.go index 2b4b079..bd275d7 100644 --- a/config/config.go +++ b/config/config.go @@ -245,6 +245,7 @@ func ParseRawShardRoutingBackendHostURLMap(raw string) (map[string]IntervalURLMa ) } + prevMaxHeight := uint64(0) backendByEndHeight := make(map[uint64]*url.URL, len(endpointBackendValues)/2) for i := 0; i < len(endpointBackendValues); i += 2 { endHeight, err := strconv.ParseUint(endpointBackendValues[i], 10, 64) @@ -253,6 +254,19 @@ func ParseRawShardRoutingBackendHostURLMap(raw string) (map[string]IntervalURLMa endpointBackendValues[i], host, err, ) } + // ensure this is the only shard defined with this endBlock for this host + if _, exists := backendByEndHeight[endHeight]; exists { + return parsed, fmt.Errorf("multiple shards defined for %s with end block %d", host, endHeight) + } + // require height definitions to be ordered + // this is enforced because the shards are expected to cover the entire range + // from the previous shard's endBlock to the current shard's endBlock + if endHeight < prevMaxHeight { + return parsed, fmt.Errorf( + "shard map expects end blocks to be ordered. for host %s, shard for height %d found after shard for height %d", + host, endHeight, prevMaxHeight, + ) + } backendRoute, err := url.Parse(endpointBackendValues[i+1]) if err != nil || backendRoute.String() == "" { @@ -261,6 +275,7 @@ func ParseRawShardRoutingBackendHostURLMap(raw string) (map[string]IntervalURLMa ) } backendByEndHeight[endHeight] = backendRoute + prevMaxHeight = endHeight } parsed[host] = NewIntervalURLMap(backendByEndHeight) diff --git a/config/config_test.go b/config/config_test.go index 868dc42..3c46b57 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -79,6 +79,12 @@ func TestUnitTestParseRawShardRoutingBackendHostURLMap(t *testing.T) { _, err = config.ParseRawShardRoutingBackendHostURLMap("invalid-backend-host>100|") require.ErrorContains(t, err, "invalid shard backend route () for height 100 of host invalid-backend-host") + + _, err = config.ParseRawShardRoutingBackendHostURLMap("unsorted-shards>100|backend-100|50|backend-50") + require.ErrorContains(t, err, "shard map expects end blocks to be ordered") + + _, err = config.ParseRawShardRoutingBackendHostURLMap("multiple-shards-for-same-height>10|magic|20|dino|20|dinosaur") + require.ErrorContains(t, err, "multiple shards defined for multiple-shards-for-same-height with end block 20") } func setDefaultEnv() { From 8eaa1bc15bab1d4d890f885d8a642d8b3e13a514 Mon Sep 17 00:00:00 2001 From: Robert Pirtle Date: Tue, 5 Mar 2024 10:28:43 -0800 Subject: [PATCH 13/14] fix doc typo --- architecture/PROXY_ROUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/architecture/PROXY_ROUTING.md b/architecture/PROXY_ROUTING.md index 3075d6e..15dc843 100644 --- a/architecture/PROXY_ROUTING.md +++ b/architecture/PROXY_ROUTING.md @@ -138,7 +138,7 @@ Any request made to a host not in the `PROXY_BACKEND_HOST_URL_MAP` map responds ## Sharding -Taking the example one step further, support the backend consists of data shards each containing a set of blocks. Although sharded routing can be configured without pruning vs default cluster routing, this example assumes it is. +Taking the example one step further, suppose the backend consists of data shards each containing a set of blocks. Although sharded routing can be configured without pruning vs default cluster routing, this example assumes it is. The above example supports fielding requests to a particular endpoint with pruning & archive clusters: * request for tip-of-chain -> pruning cluster From dafa109f1da287b7c42ce3a5e47d05d3e983cb2e Mon Sep 17 00:00:00 2001 From: Robert Pirtle Date: Tue, 5 Mar 2024 10:38:43 -0800 Subject: [PATCH 14/14] actually validate shard backend url map --- config/validate.go | 10 ++++++++++ config/validate_test.go | 12 +++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/config/validate.go b/config/validate.go index 8e87176..bc98fc2 100644 --- a/config/validate.go +++ b/config/validate.go @@ -44,6 +44,10 @@ func Validate(config Config) error { allErrs = errors.Join(allErrs, fmt.Errorf("invalid %s specified %s", PROXY_PRUNING_BACKEND_HOST_URL_MAP_ENVIRONMENT_KEY, config.ProxyPruningBackendHostURLMapRaw), err) } + if err = validateShardRoutingBackendHostURLMap(config.ProxyShardBackendHostURLMapRaw); err != nil { + allErrs = errors.Join(allErrs, fmt.Errorf("invalid %s specified %s", PROXY_SHARD_BACKEND_HOST_URL_MAP_ENVIRONMENT_KEY, config.ProxyShardBackendHostURLMapRaw), err) + } + if err = validateDefaultHostMapContainsHosts( PROXY_PRUNING_BACKEND_HOST_URL_MAP_ENVIRONMENT_KEY, config.ProxyBackendHostURLMapParsed, @@ -122,6 +126,12 @@ func validateHostnameToHeaderValueMap(raw string, allowEmpty bool) error { return err } +// validateShardRoutingBackendHostURLMap validates the host-backend url map for shard-based routing +func validateShardRoutingBackendHostURLMap(raw string) error { + _, err := ParseRawShardRoutingBackendHostURLMap(raw) + return err +} + // validateDefaultHostMapContainsHosts returns an error if there are hosts in hostMap that // are not in defaultHostMap // example: hosts in the pruning map should always have a default fallback backend diff --git a/config/validate_test.go b/config/validate_test.go index a4d8563..ee60bbc 100644 --- a/config/validate_test.go +++ b/config/validate_test.go @@ -1,9 +1,10 @@ package config_test import ( - "github.com/stretchr/testify/require" "testing" + "github.com/stretchr/testify/require" + "github.com/kava-labs/kava-proxy-service/config" "github.com/stretchr/testify/assert" ) @@ -84,6 +85,15 @@ func TestUnitTestValidateConfigReturnsErrorIfInvalidProxyPruningBackendHostURLCo assert.NotNil(t, err) } +func TestUnitTestValidateConfigReturnsErrorIfInvaidShardRoutingBackendURLMap(t *testing.T) { + testConfig := defaultConfig + testConfig.ProxyShardBackendHostURLMapRaw = "my-misconfigured-backend>10|backend-10|20|backend-20|20|uh-oh-20-again" + + err := config.Validate(testConfig) + + assert.NotNil(t, err) +} + func TestUnitTestValidateConfigReturnsErrorIfInvalidProxyServicePort(t *testing.T) { testConfig := defaultConfig testConfig.ProxyServicePort = "abc"