From b45f08b0c9f81a82fba03c2cc24a7b0dda5e2f19 Mon Sep 17 00:00:00 2001 From: Robert Raynor <35671663+mooselumph@users.noreply.github.com> Date: Tue, 12 Dec 2023 21:52:15 +0000 Subject: [PATCH 1/6] Add blob rate limit to disperser --- disperser/apiserver/rate_config.go | 50 ++++++++++++++++++++++++++++-- disperser/apiserver/server.go | 26 ++++++++++++++-- disperser/cmd/apiserver/config.go | 7 ++++- 3 files changed, 78 insertions(+), 5 deletions(-) diff --git a/disperser/apiserver/rate_config.go b/disperser/apiserver/rate_config.go index 4058e2aff..07457a65a 100644 --- a/disperser/apiserver/rate_config.go +++ b/disperser/apiserver/rate_config.go @@ -1,6 +1,9 @@ package apiserver import ( + "fmt" + "strconv" + "github.com/Layr-Labs/eigenda/common" "github.com/Layr-Labs/eigenda/core" "github.com/urfave/cli" @@ -10,12 +13,18 @@ const ( RegisteredQuorumFlagName = "auth.registered-quorum" TotalUnauthThroughputFlagName = "auth.total-unauth-throughput" PerUserUnauthThroughputFlagName = "auth.per-user-unauth-throughput" + TotalUnauthBlobRateFlagName = "auth.total-unauth-blob-rate" + PerUserUnauthBlobRateFlagName = "auth.per-user-unauth-blob-rate" ClientIPHeaderFlagName = "auth.client-ip-header" + + blobRateMultiplier = 1e6 ) type QuorumRateInfo struct { PerUserUnauthThroughput common.RateParam TotalUnauthThroughput common.RateParam + PerUserUnauthBlobRate common.RateParam + TotalUnauthBlobRate common.RateParam } type RateConfig struct { @@ -43,6 +52,18 @@ func CLIFlags(envPrefix string) []cli.Flag { Required: true, EnvVar: common.PrefixEnvVar(envPrefix, "PER_USER_UNAUTH_THROUGHPUT"), }, + cli.StringSliceFlag{ + Name: TotalUnauthBlobRateFlagName, + Usage: "Total blob rate for unauthenticated requests (Blobs/sec)", + Required: true, + EnvVar: common.PrefixEnvVar(envPrefix, "TOTAL_UNAUTH_BLOB_RATE"), + }, + cli.StringSliceFlag{ + Name: PerUserUnauthBlobRateFlagName, + Usage: "Per-user blob interval for unauthenticated requests (Blobs/sec)", + Required: true, + EnvVar: common.PrefixEnvVar(envPrefix, "PER_USER_UNAUTH_BLOB_INTERVAL"), + }, cli.StringFlag{ Name: ClientIPHeaderFlagName, Usage: "The name of the header used to get the client IP address. If set to empty string, the IP address will be taken from the connection. The rightmost value of the header will be used. For AWS, this should be set to 'x-forwarded-for'.", @@ -53,19 +74,44 @@ func CLIFlags(envPrefix string) []cli.Flag { } } -func ReadCLIConfig(c *cli.Context) RateConfig { +func ReadCLIConfig(c *cli.Context) (RateConfig, error) { + + numQuorums := len(c.IntSlice(RegisteredQuorumFlagName)) + if len(c.StringSlice(TotalUnauthBlobRateFlagName)) != numQuorums { + return RateConfig{}, fmt.Errorf("number of total unauth blob rates does not match number of quorums") + } + if len(c.StringSlice(PerUserUnauthBlobRateFlagName)) != numQuorums { + return RateConfig{}, fmt.Errorf("number of per user unauth blob intervals does not match number of quorums") + } + if len(c.IntSlice(TotalUnauthThroughputFlagName)) != numQuorums { + return RateConfig{}, fmt.Errorf("number of total unauth throughput does not match number of quorums") + } + if len(c.IntSlice(PerUserUnauthThroughputFlagName)) != numQuorums { + return RateConfig{}, fmt.Errorf("number of per user unauth throughput does not match number of quorums") + } quorumRateInfos := make(map[core.QuorumID]QuorumRateInfo) for ind, quorumID := range c.IntSlice(RegisteredQuorumFlagName) { + totalBlobRate, err := strconv.ParseFloat(c.StringSlice(TotalUnauthBlobRateFlagName)[ind], 64) + if err != nil { + return RateConfig{}, err + } + accountBlobRate, err := strconv.ParseFloat(c.StringSlice(PerUserUnauthBlobRateFlagName)[ind], 64) + if err != nil { + return RateConfig{}, err + } + quorumRateInfos[core.QuorumID(quorumID)] = QuorumRateInfo{ TotalUnauthThroughput: common.RateParam(c.IntSlice(TotalUnauthThroughputFlagName)[ind]), PerUserUnauthThroughput: common.RateParam(c.IntSlice(PerUserUnauthThroughputFlagName)[ind]), + TotalUnauthBlobRate: common.RateParam(totalBlobRate * blobRateMultiplier), + PerUserUnauthBlobRate: common.RateParam(accountBlobRate * blobRateMultiplier), } } return RateConfig{ QuorumRateInfos: quorumRateInfos, ClientIPHeader: c.String(ClientIPHeaderFlagName), - } + }, nil } diff --git a/disperser/apiserver/server.go b/disperser/apiserver/server.go index 0fa7b93b6..dae960fac 100644 --- a/disperser/apiserver/server.go +++ b/disperser/apiserver/server.go @@ -201,10 +201,22 @@ func (s *DispersalServer) checkRateLimitsAndAddRates(ctx context.Context, blob * return fmt.Errorf("ratelimiter error: %v", err) } if !allowed { - s.logger.Warn("system ratelimit exceeded", "systemQuorumKey", systemQuorumKey, "rate", rates.TotalUnauthThroughput) + s.logger.Warn("system data ratelimit exceeded", "systemQuorumKey", systemQuorumKey, "rate", rates.TotalUnauthThroughput) return errSystemRateLimit } + systemQuorumKey = fmt.Sprintf("%s:%d-blobrate", systemAccountKey, param.QuorumID) + allowed, err = s.ratelimiter.AllowRequest(ctx, systemQuorumKey, blobRateMultiplier, rates.TotalUnauthBlobRate) + if err != nil { + return fmt.Errorf("ratelimiter error: %v", err) + } + if !allowed { + s.logger.Warn("system blob ratelimit exceeded", "systemQuorumKey", systemQuorumKey, "rate", float32(rates.TotalUnauthBlobRate)/blobRateMultiplier) + return errSystemRateLimit + } + + // Check Account Ratelimit + blob.RequestHeader.AccountID = "ip:" + origin userQuorumKey := fmt.Sprintf("%s:%d", blob.RequestHeader.AccountID, param.QuorumID) @@ -213,7 +225,17 @@ func (s *DispersalServer) checkRateLimitsAndAddRates(ctx context.Context, blob * return fmt.Errorf("ratelimiter error: %v", err) } if !allowed { - s.logger.Warn("account ratelimit exceeded", "userQuorumKey", userQuorumKey, "rate", rates.PerUserUnauthThroughput) + s.logger.Warn("account data ratelimit exceeded", "userQuorumKey", userQuorumKey, "rate", rates.PerUserUnauthThroughput) + return errAccountRateLimit + } + + userQuorumKey = fmt.Sprintf("%s:%d-blobrate", blob.RequestHeader.AccountID, param.QuorumID) + allowed, err = s.ratelimiter.AllowRequest(ctx, userQuorumKey, blobRateMultiplier, rates.PerUserUnauthBlobRate) + if err != nil { + return fmt.Errorf("ratelimiter error: %v", err) + } + if !allowed { + s.logger.Warn("account blob ratelimit exceeded", "userQuorumKey", userQuorumKey, "rate", float32(rates.PerUserUnauthBlobRate)/blobRateMultiplier) return errAccountRateLimit } diff --git a/disperser/cmd/apiserver/config.go b/disperser/cmd/apiserver/config.go index b0af8244a..65d8d9340 100644 --- a/disperser/cmd/apiserver/config.go +++ b/disperser/cmd/apiserver/config.go @@ -36,6 +36,11 @@ func NewConfig(ctx *cli.Context) (Config, error) { return Config{}, err } + rateConfig, err := apiserver.ReadCLIConfig(ctx) + if err != nil { + return Config{}, err + } + config := Config{ AwsClientConfig: aws.ReadClientConfig(ctx, flags.FlagPrefix), ServerConfig: disperser.ServerConfig{ @@ -51,7 +56,7 @@ func NewConfig(ctx *cli.Context) (Config, error) { EnableMetrics: ctx.GlobalBool(flags.EnableMetrics.Name), }, RatelimiterConfig: ratelimiterConfig, - RateConfig: apiserver.ReadCLIConfig(ctx), + RateConfig: rateConfig, EnableRatelimiter: ctx.GlobalBool(flags.EnableRatelimiter.Name), BucketTableName: ctx.GlobalString(flags.BucketTableName.Name), BucketStoreSize: ctx.GlobalInt(flags.BucketStoreSize.Name), From 33db50ee6b9e3b73fabc5135de2287415f486a05 Mon Sep 17 00:00:00 2001 From: Robert Raynor <35671663+mooselumph@users.noreply.github.com> Date: Wed, 13 Dec 2023 21:51:56 +0000 Subject: [PATCH 2/6] Update config --- disperser/apiserver/rate_config.go | 2 +- inabox/deploy/config.go | 2 ++ inabox/deploy/env_vars.go | 12 ++++++++---- inabox/tests/ratelimit_test.go | 8 ++++---- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/disperser/apiserver/rate_config.go b/disperser/apiserver/rate_config.go index 07457a65a..7686ca5cc 100644 --- a/disperser/apiserver/rate_config.go +++ b/disperser/apiserver/rate_config.go @@ -62,7 +62,7 @@ func CLIFlags(envPrefix string) []cli.Flag { Name: PerUserUnauthBlobRateFlagName, Usage: "Per-user blob interval for unauthenticated requests (Blobs/sec)", Required: true, - EnvVar: common.PrefixEnvVar(envPrefix, "PER_USER_UNAUTH_BLOB_INTERVAL"), + EnvVar: common.PrefixEnvVar(envPrefix, "PER_USER_UNAUTH_BLOB_RATE"), }, cli.StringFlag{ Name: ClientIPHeaderFlagName, diff --git a/inabox/deploy/config.go b/inabox/deploy/config.go index 332a6cce3..03f2883ef 100644 --- a/inabox/deploy/config.go +++ b/inabox/deploy/config.go @@ -175,6 +175,8 @@ func (env *Config) generateDisperserVars(ind int, key, address, logPath, dbPath, DISPERSER_SERVER_REGISTERED_QUORUM_ID: "0", DISPERSER_SERVER_TOTAL_UNAUTH_THROUGHPUT: "10000000", DISPERSER_SERVER_PER_USER_UNAUTH_THROUGHPUT: "32000", + DISPERSER_SERVER_TOTAL_UNAUTH_BLOB_RATE: "10", + DISPERSER_SERVER_PER_USER_UNAUTH_BLOB_RATE: "2", DISPERSER_SERVER_ENABLE_RATELIMITER: "true", DISPERSER_SERVER_BUCKET_SIZES: "5s", diff --git a/inabox/deploy/env_vars.go b/inabox/deploy/env_vars.go index 2a6ef4590..30a0261cc 100644 --- a/inabox/deploy/env_vars.go +++ b/inabox/deploy/env_vars.go @@ -55,6 +55,10 @@ type DisperserVars struct { DISPERSER_SERVER_PER_USER_UNAUTH_THROUGHPUT string + DISPERSER_SERVER_TOTAL_UNAUTH_BLOB_RATE string + + DISPERSER_SERVER_PER_USER_UNAUTH_BLOB_RATE string + DISPERSER_SERVER_CLIENT_IP_HEADER string } @@ -344,8 +348,12 @@ type ChurnerVars struct { CHURNER_EIGENDA_SERVICE_MANAGER string + CHURNER_ENABLE_METRICS string + CHURNER_PER_PUBLIC_KEY_RATE_LIMIT string + CHURNER_METRICS_HTTP_PORT string + CHURNER_CHAIN_RPC string CHURNER_PRIVATE_KEY string @@ -357,10 +365,6 @@ type ChurnerVars struct { CHURNER_LOG_PATH string CHURNER_INDEXER_PULL_INTERVAL string - - CHURNER_ENABLE_METRICS string - - CHURNER_METRICS_HTTP_PORT string } func (vars ChurnerVars) getEnvMap() map[string]string { diff --git a/inabox/tests/ratelimit_test.go b/inabox/tests/ratelimit_test.go index 0774c233f..6a3edae0a 100644 --- a/inabox/tests/ratelimit_test.go +++ b/inabox/tests/ratelimit_test.go @@ -31,7 +31,7 @@ type result struct { err error } -func dispserse(t *testing.T, ctx context.Context, client traffic.DisperserClient, resultChan chan result, data []byte, param core.SecurityParam) { +func disperse(t *testing.T, ctx context.Context, client traffic.DisperserClient, resultChan chan result, data []byte, param core.SecurityParam) { blobStatus, key, err := client.DisperseBlob(ctx, data, param.QuorumID, param.QuorumThreshold, param.AdversaryThreshold) if err != nil { @@ -127,7 +127,7 @@ func testRatelimit(t *testing.T, testConfig *deploy.Config, c ratelimitTestCase) go func() { for i := 0; i < c.numDispersal; i++ { <-dispersalTicker.C - go dispserse(t, ctx, disp, resultChan, data, c.param) + go disperse(t, ctx, disp, resultChan, data, c.param) } }() @@ -172,7 +172,7 @@ func testRatelimit(t *testing.T, testConfig *deploy.Config, c ratelimitTestCase) func TestRatelimit(t *testing.T) { - t.Skip("Manual test for now") + // t.Skip("Manual test for now") rootPath := "../../" testname, err := deploy.GetLatestTestDirectory(rootPath) @@ -190,7 +190,7 @@ func TestRatelimit(t *testing.T) { t.Run("no ratelimiting when dispersing and retrieving within rate", func(t *testing.T) { - t.Skip("Manual test for now") + // t.Skip("Manual test for now") testCase := ratelimitTestCase{ numDispersal: 10, From 89399c1e04ac7db0ee689c29e2c30ba7ca9337be Mon Sep 17 00:00:00 2001 From: Robert Raynor <35671663+mooselumph@users.noreply.github.com> Date: Wed, 20 Dec 2023 05:23:26 +0000 Subject: [PATCH 3/6] Fix unit tests --- inabox/tests/ratelimit_test.go | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/inabox/tests/ratelimit_test.go b/inabox/tests/ratelimit_test.go index 6a3edae0a..e191c24e3 100644 --- a/inabox/tests/ratelimit_test.go +++ b/inabox/tests/ratelimit_test.go @@ -190,7 +190,7 @@ func TestRatelimit(t *testing.T) { t.Run("no ratelimiting when dispersing and retrieving within rate", func(t *testing.T) { - // t.Skip("Manual test for now") + t.Skip("Manual test for now") testCase := ratelimitTestCase{ numDispersal: 10, @@ -281,4 +281,31 @@ func TestRatelimit(t *testing.T) { }) + t.Run("ratelimiting when dispersing greater than blob rate", func(t *testing.T) { + + t.Skip("Manual test for now") + + testCase := ratelimitTestCase{ + numDispersal: 200, + numRetrieval: 0, + dispersalInterval: 450 * time.Millisecond, + retrievalInterval: 500 * time.Millisecond, + pause: 0, + blobSize: 5, + param: core.SecurityParam{ + QuorumID: 0, + AdversaryThreshold: 50, + QuorumThreshold: 100, + }, + } + + dispersalErrors, retrievalErrors := testRatelimit(t, testConfig, testCase) + + fmt.Println("Dispersal Ratelimited: ", dispersalErrors) + + assert.Greater(t, dispersalErrors, 0) + assert.Equal(t, 0, retrievalErrors) + + }) + } From 4bc32fdc8b46e9256a92615274a91c9d5561482e Mon Sep 17 00:00:00 2001 From: Robert Raynor <35671663+mooselumph@users.noreply.github.com> Date: Wed, 20 Dec 2023 05:49:46 +0000 Subject: [PATCH 4/6] Fix tests --- inabox/tests/integration_suite_test.go | 2 +- inabox/tests/ratelimit_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/inabox/tests/integration_suite_test.go b/inabox/tests/integration_suite_test.go index 1ea9df47c..daa22c51b 100644 --- a/inabox/tests/integration_suite_test.go +++ b/inabox/tests/integration_suite_test.go @@ -162,7 +162,7 @@ func setupRetrievalClient(testConfig *deploy.Config) error { NumWorker: 1, SRSOrder: uint64(srsOrder), Verbose: true, - PreloadEncoder: true, + PreloadEncoder: false, }, }) if err != nil { diff --git a/inabox/tests/ratelimit_test.go b/inabox/tests/ratelimit_test.go index e191c24e3..aa6619d77 100644 --- a/inabox/tests/ratelimit_test.go +++ b/inabox/tests/ratelimit_test.go @@ -172,7 +172,7 @@ func testRatelimit(t *testing.T, testConfig *deploy.Config, c ratelimitTestCase) func TestRatelimit(t *testing.T) { - // t.Skip("Manual test for now") + t.Skip("Manual test for now") rootPath := "../../" testname, err := deploy.GetLatestTestDirectory(rootPath) From 676a352cf5d36ebb82edc0348c5aa9a0695ea348 Mon Sep 17 00:00:00 2001 From: Robert Raynor <35671663+mooselumph@users.noreply.github.com> Date: Wed, 20 Dec 2023 19:36:51 +0000 Subject: [PATCH 5/6] Address comments --- disperser/apiserver/rate_config.go | 10 ++++++---- disperser/apiserver/server.go | 4 ++-- inabox/deploy/config.go | 12 ++++++------ inabox/deploy/env_vars.go | 10 ++++++++-- inabox/tests/ratelimit_test.go | 2 +- 5 files changed, 23 insertions(+), 15 deletions(-) diff --git a/disperser/apiserver/rate_config.go b/disperser/apiserver/rate_config.go index 7686ca5cc..3ad427d3e 100644 --- a/disperser/apiserver/rate_config.go +++ b/disperser/apiserver/rate_config.go @@ -11,12 +11,14 @@ import ( const ( RegisteredQuorumFlagName = "auth.registered-quorum" - TotalUnauthThroughputFlagName = "auth.total-unauth-throughput" - PerUserUnauthThroughputFlagName = "auth.per-user-unauth-throughput" + TotalUnauthThroughputFlagName = "auth.total-unauth-byte-rate" + PerUserUnauthThroughputFlagName = "auth.per-user-unauth-byte-rate" TotalUnauthBlobRateFlagName = "auth.total-unauth-blob-rate" PerUserUnauthBlobRateFlagName = "auth.per-user-unauth-blob-rate" ClientIPHeaderFlagName = "auth.client-ip-header" + // We allow the user to specify the blob rate in blobs/sec, but internally we use blobs/sec * 1e6 (i.e. blobs/microsec). + // This is because the rate limiter takes an integer rate. blobRateMultiplier = 1e6 ) @@ -44,13 +46,13 @@ func CLIFlags(envPrefix string) []cli.Flag { Name: TotalUnauthThroughputFlagName, Usage: "Total encoded throughput for unauthenticated requests (Bytes/sec)", Required: true, - EnvVar: common.PrefixEnvVar(envPrefix, "TOTAL_UNAUTH_THROUGHPUT"), + EnvVar: common.PrefixEnvVar(envPrefix, "TOTAL_UNAUTH_BYTE_RATE"), }, cli.IntSliceFlag{ Name: PerUserUnauthThroughputFlagName, Usage: "Per-user encoded throughput for unauthenticated requests (Bytes/sec)", Required: true, - EnvVar: common.PrefixEnvVar(envPrefix, "PER_USER_UNAUTH_THROUGHPUT"), + EnvVar: common.PrefixEnvVar(envPrefix, "PER_USER_UNAUTH_BYTE_RATE"), }, cli.StringSliceFlag{ Name: TotalUnauthBlobRateFlagName, diff --git a/disperser/apiserver/server.go b/disperser/apiserver/server.go index dae960fac..a5fcb1046 100644 --- a/disperser/apiserver/server.go +++ b/disperser/apiserver/server.go @@ -201,7 +201,7 @@ func (s *DispersalServer) checkRateLimitsAndAddRates(ctx context.Context, blob * return fmt.Errorf("ratelimiter error: %v", err) } if !allowed { - s.logger.Warn("system data ratelimit exceeded", "systemQuorumKey", systemQuorumKey, "rate", rates.TotalUnauthThroughput) + s.logger.Warn("system byte ratelimit exceeded", "systemQuorumKey", systemQuorumKey, "rate", rates.TotalUnauthThroughput) return errSystemRateLimit } @@ -225,7 +225,7 @@ func (s *DispersalServer) checkRateLimitsAndAddRates(ctx context.Context, blob * return fmt.Errorf("ratelimiter error: %v", err) } if !allowed { - s.logger.Warn("account data ratelimit exceeded", "userQuorumKey", userQuorumKey, "rate", rates.PerUserUnauthThroughput) + s.logger.Warn("account byte ratelimit exceeded", "userQuorumKey", userQuorumKey, "rate", rates.PerUserUnauthThroughput) return errAccountRateLimit } diff --git a/inabox/deploy/config.go b/inabox/deploy/config.go index 3cc564c49..569ee4c22 100644 --- a/inabox/deploy/config.go +++ b/inabox/deploy/config.go @@ -173,12 +173,12 @@ func (env *Config) generateDisperserVars(ind int, key, address, logPath, dbPath, DISPERSER_SERVER_PRIVATE_KEY: "123", DISPERSER_SERVER_NUM_CONFIRMATIONS: "0", - DISPERSER_SERVER_REGISTERED_QUORUM_ID: "0", - DISPERSER_SERVER_TOTAL_UNAUTH_THROUGHPUT: "10000000", - DISPERSER_SERVER_PER_USER_UNAUTH_THROUGHPUT: "32000", - DISPERSER_SERVER_TOTAL_UNAUTH_BLOB_RATE: "10", - DISPERSER_SERVER_PER_USER_UNAUTH_BLOB_RATE: "2", - DISPERSER_SERVER_ENABLE_RATELIMITER: "true", + DISPERSER_SERVER_REGISTERED_QUORUM_ID: "0", + DISPERSER_SERVER_TOTAL_UNAUTH_BYTE_RATE: "10000000", + DISPERSER_SERVER_PER_USER_UNAUTH_BYTE_RATE: "32000", + DISPERSER_SERVER_TOTAL_UNAUTH_BLOB_RATE: "10", + DISPERSER_SERVER_PER_USER_UNAUTH_BLOB_RATE: "2", + DISPERSER_SERVER_ENABLE_RATELIMITER: "true", DISPERSER_SERVER_BUCKET_SIZES: "5s", DISPERSER_SERVER_BUCKET_MULTIPLIERS: "1", diff --git a/inabox/deploy/env_vars.go b/inabox/deploy/env_vars.go index 506de82c5..939fc1794 100644 --- a/inabox/deploy/env_vars.go +++ b/inabox/deploy/env_vars.go @@ -43,6 +43,8 @@ type DisperserVars struct { DISPERSER_SERVER_BUCKET_STORE_SIZE string + DISPERSER_SERVER_ALLOWLIST string + DISPERSER_SERVER_AWS_REGION string DISPERSER_SERVER_AWS_ACCESS_KEY_ID string @@ -53,9 +55,9 @@ type DisperserVars struct { DISPERSER_SERVER_REGISTERED_QUORUM_ID string - DISPERSER_SERVER_TOTAL_UNAUTH_THROUGHPUT string + DISPERSER_SERVER_TOTAL_UNAUTH_BYTE_RATE string - DISPERSER_SERVER_PER_USER_UNAUTH_THROUGHPUT string + DISPERSER_SERVER_PER_USER_UNAUTH_BYTE_RATE string DISPERSER_SERVER_TOTAL_UNAUTH_BLOB_RATE string @@ -307,6 +309,10 @@ type RetrieverVars struct { RETRIEVER_METRICS_HTTP_PORT string + RETRIEVER_GRAPH_URL string + + RETRIEVER_USE_GRAPH string + RETRIEVER_G1_PATH string RETRIEVER_G2_PATH string diff --git a/inabox/tests/ratelimit_test.go b/inabox/tests/ratelimit_test.go index aa6619d77..65da63752 100644 --- a/inabox/tests/ratelimit_test.go +++ b/inabox/tests/ratelimit_test.go @@ -181,7 +181,7 @@ func TestRatelimit(t *testing.T) { } testConfig := deploy.NewTestConfig(testname, rootPath) - if testConfig.Dispersers[0].DISPERSER_SERVER_PER_USER_UNAUTH_THROUGHPUT != fmt.Sprint(perUserThroughput) { + if testConfig.Dispersers[0].DISPERSER_SERVER_PER_USER_UNAUTH_BYTE_RATE != fmt.Sprint(perUserThroughput) { t.Fatalf("per user throughput should be %v", perUserThroughput) } if testConfig.Dispersers[0].DISPERSER_SERVER_BUCKET_MULTIPLIERS != fmt.Sprint(dispersalMultiplier) { From 7436ae62e665354749f2b4e64154970cb6c2ce10 Mon Sep 17 00:00:00 2001 From: Robert Raynor <35671663+mooselumph@users.noreply.github.com> Date: Wed, 20 Dec 2023 22:20:07 +0000 Subject: [PATCH 6/6] Trigger CI --- disperser/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/disperser/Makefile b/disperser/Makefile index 599bfe05d..65dac8bd8 100644 --- a/disperser/Makefile +++ b/disperser/Makefile @@ -57,4 +57,4 @@ run_encoder: build_encoder --kzg.srs-order 3000 \ --kzg.num-workers 12 \ --disperser-encoder.log.level-std trace \ - --disperser-encoder.log.level-file trace + --disperser-encoder.log.level-file trace \ No newline at end of file