Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement polling improvements #2652

Merged
merged 144 commits into from
Oct 27, 2023
Merged
Show file tree
Hide file tree
Changes from 143 commits
Commits
Show all changes
144 commits
Select commit Hold shift + click to select a range
12710ce
tempodb: update poller tests and mocks to support new work
zalegrala Jul 12, 2023
92e6ba8
include Blocklist interface for testing
zalegrala Jul 13, 2023
a5bb5f7
tempodb: include quick poller
zalegrala Jul 13, 2023
59eb3b3
Include QuickBlocks on tempodb
zalegrala Jul 13, 2023
1ba21d8
Include notes about what is being implemented
zalegrala Jul 13, 2023
2e5b0da
Add initial ListBlocks() stubs and implement s3
zalegrala Jul 13, 2023
8146c5f
Fix poller commits
zalegrala Jul 13, 2023
c8eb1c1
Lint fix
zalegrala Jul 13, 2023
3c3b149
Fix method for unimplemented test
zalegrala Jul 13, 2023
cfb4ab0
Add test coverage for previous compactions
zalegrala Jul 13, 2023
fb8993b
Fix method for unimplemented test
zalegrala Jul 14, 2023
d6cecc8
Lint fix
zalegrala Jul 14, 2023
0c1ee7b
Drop some debug printing
zalegrala Jul 14, 2023
59cb36f
Drop unused variablea and update debug message
zalegrala Jul 14, 2023
c4ddeaa
Relocate allocations
zalegrala Jul 14, 2023
755926d
Invent fewer objects
zalegrala Jul 14, 2023
bcb359e
Lint fix
zalegrala Jul 17, 2023
ddaa258
Implement gcs ListBlocks()
zalegrala Jul 21, 2023
925d73d
Tidy up s3.go
zalegrala Jul 21, 2023
adbe16a
Import fix
zalegrala Jul 26, 2023
97cb6ad
Adjust list_test.go for eyeball parse
zalegrala Jul 27, 2023
810e932
Include notes after discoverying why
zalegrala Jul 27, 2023
3ce562a
Wrap a couple errors for clarity
zalegrala Jul 27, 2023
10c6e22
Modify error test for additional details
zalegrala Jul 27, 2023
0960935
Modify gcs backend for single character delimiter
zalegrala Jul 27, 2023
35ee13d
Add note about call change
zalegrala Jul 27, 2023
efa8b5d
Add note about call change and implement listv2 for s3
zalegrala Jul 27, 2023
43d501a
Adjust uuidInBlocklist to use existing allocations
zalegrala Aug 9, 2023
2f4ca7f
Add config and defaults for tenant polling concurrency
zalegrala Aug 16, 2023
4df1a4d
Implement concurrent tenant polling
zalegrala Aug 16, 2023
f81fe24
Implement Find() on backend readers
zalegrala Aug 16, 2023
07c81b0
Add Find to MockRawReader
zalegrala Aug 16, 2023
b9fa456
Convert QuickBlocks over to use Find()
zalegrala Aug 16, 2023
9595ace
Implement Find() on local/cache backend readers
zalegrala Aug 16, 2023
be7165c
Drop ListBlocks in favor of Find
zalegrala Aug 16, 2023
41a4221
Replace Blocks() with QuickBlocks() and update usage everywhere
zalegrala Aug 16, 2023
54cc938
Fix local.Find for path handling
zalegrala Aug 16, 2023
a651356
Fix backend raw tests for Find mocks
zalegrala Aug 16, 2023
14b4844
Reorder to reduce PR diff
zalegrala Aug 16, 2023
b50457e
Relocate super-handy block boudary method
zalegrala Aug 17, 2023
2a37214
Extend FindFunc to indicate Done
zalegrala Aug 17, 2023
2b8ff47
Parallelize the Find() calls within Blocks()
zalegrala Aug 17, 2023
7c0cbc4
Fix race
zalegrala Aug 17, 2023
973f57a
Fix boundedwaitgroup init in test
zalegrala Aug 17, 2023
8fea99a
Update backend implementations
zalegrala Aug 17, 2023
7bcaca6
Make note of implemenation details
zalegrala Aug 17, 2023
a1ade3e
Capture errors from tenant polling
zalegrala Aug 18, 2023
f28cfb8
Add feature detection on backend readers
zalegrala Aug 18, 2023
acbc9dc
Use backend.HasFeature() to determine if appropriate function
zalegrala Aug 18, 2023
b0ebb3a
Fix error handling in poller
zalegrala Aug 18, 2023
d480514
Pick lint
zalegrala Aug 18, 2023
a9ac89d
Extend log message to include tenant_concurrency
zalegrala Aug 18, 2023
9007e2b
Add doc for HasFeature
zalegrala Aug 18, 2023
069d98c
Local backend supports no features
zalegrala Aug 18, 2023
4132775
Pick lint
zalegrala Aug 21, 2023
344fd42
Ensure we wait for results
zalegrala Aug 22, 2023
8e78f64
Avoid early return
zalegrala Aug 22, 2023
75d029c
Improve error handling to include all errors
zalegrala Aug 23, 2023
9d44a7b
Remove HasFeature() from RawReader interface after discussion
zalegrala Aug 24, 2023
c6ed469
Drop start argument from Find signature
zalegrala Aug 24, 2023
9ae8912
Include range calculation for sharded list calls
zalegrala Aug 24, 2023
e886fbf
Enable concurrent list calls for s3.Find()
zalegrala Aug 24, 2023
1a77bec
Include useful OwnsEverythingSharder
zalegrala Aug 24, 2023
3154a8a
Remove concurrency handling from tempodb.Blocks()
zalegrala Aug 24, 2023
42049f0
Add docs for new config options
zalegrala Aug 24, 2023
1385d49
Fix GCS e2e object path
zalegrala Aug 25, 2023
9e3b881
Clean up comments
zalegrala Aug 30, 2023
566d696
Include a test to ensure retained blocks are forgotten
zalegrala Sep 8, 2023
d3748ef
Begin reimplementing ListBlock() in RawReaders after discussion
zalegrala Sep 8, 2023
0150bc9
Reimplement ListBlocks() on the backends
zalegrala Sep 8, 2023
083b0e1
Fix ListBlocks() for gcs
zalegrala Sep 8, 2023
2ad5ebf
Drop Find and supporting code
zalegrala Sep 11, 2023
3110006
Drop unused method
zalegrala Sep 12, 2023
fbf7365
Back out proto change, since `main` also has this issue
zalegrala Sep 12, 2023
7e5e1df
Update docs/sources/tempo/configuration/_index.md
zalegrala Sep 13, 2023
5d4deed
Reimplement ListBlocks() for Azure
zalegrala Sep 22, 2023
40b948a
Lint
zalegrala Sep 22, 2023
e26b0a8
Rename config option for concurrent block list
zalegrala Sep 22, 2023
a304e0c
Relocate block boundary code to own package
zalegrala Sep 22, 2023
181ef66
Relocate Blocklist interface to poller package
zalegrala Sep 22, 2023
c1e22d6
Rely on error count for early exit condition
zalegrala Sep 22, 2023
469873c
Avoid polling additional tenants if we have already reached our error…
zalegrala Sep 22, 2023
30f5bca
Improve tests
zalegrala Sep 25, 2023
2cb127b
Include initial benchmarks
zalegrala Sep 25, 2023
fc2f45f
Update docs/sources/tempo/configuration/_index.md
zalegrala Sep 25, 2023
d30429f
Update docs/sources/tempo/configuration/_index.md
zalegrala Sep 25, 2023
f07e28c
Use *List directly, drop Blocklist interface
zalegrala Sep 26, 2023
2f232c2
Use builtin clear() to avoid heap escape
zalegrala Sep 26, 2023
3e9b5ac
Adhere to new error usage
zalegrala Sep 26, 2023
dc38e63
Speed up benchmark setup
zalegrala Sep 28, 2023
7f13587
Trade memory for time in large data sets
zalegrala Sep 28, 2023
32ff2e1
Lock for race
zalegrala Sep 28, 2023
9742b00
Update CLI handling for Blocks() call to include compacted results
zalegrala Sep 28, 2023
818be36
Add doc to mention the concurrency per-instance
zalegrala Sep 28, 2023
37a5d0d
Tidy up backends a bit
zalegrala Oct 2, 2023
b93ccb2
Implement concurrent ListBlocks() on gcs
zalegrala Oct 2, 2023
525e2af
Clean up
zalegrala Oct 2, 2023
0f6824d
Include ListBlocksConcurrency config option for GCS
zalegrala Oct 2, 2023
6f8c00e
Test for compacted migration
zalegrala Oct 2, 2023
b113afa
Start tracing ListBlocks()
zalegrala Oct 2, 2023
d523b4c
Start tracing the poller
zalegrala Oct 2, 2023
5d82697
Fix span attribute
zalegrala Oct 2, 2023
1ea496b
Sort the block list for test
zalegrala Oct 3, 2023
eead2be
Use slice collection instead of channel collection for deadlock
zalegrala Oct 4, 2023
d5ba41b
Revert tenant poll concurrency
zalegrala Oct 4, 2023
7044431
Pass context to the EnablePolling method for future use
zalegrala Oct 4, 2023
bf65ef2
Handle context on pollingLoop
zalegrala Oct 4, 2023
4719d5b
Use attribtues not events for better traceql
zalegrala Oct 4, 2023
78dbb23
Drop last tenant concurrency reference
zalegrala Oct 4, 2023
ca5c83f
Fix Do() revert to old code
zalegrala Oct 4, 2023
762ca7e
Update for context
zalegrala Oct 4, 2023
bc12f1e
Update tracing attributes for poller
zalegrala Oct 4, 2023
8b5845d
Back out proto update
zalegrala Oct 18, 2023
a7a9a83
Remove unused error
zalegrala Oct 18, 2023
d392115
Remove inacurate docs after refactor
zalegrala Oct 18, 2023
35e8570
Clean up
zalegrala Oct 18, 2023
0544845
Include additional span attributes
zalegrala Oct 20, 2023
f24c37e
Drop unused
zalegrala Oct 23, 2023
f3447ac
Drop unused
zalegrala Oct 23, 2023
63c9bf2
Address some feedback in the backend
zalegrala Oct 23, 2023
d65450e
Skip compacted blocks on trace summary
zalegrala Oct 24, 2023
9d3b064
Include TODO about reducing the 404 on meta.json for compacted blocks
zalegrala Oct 24, 2023
e3c1aab
Include integration test for poller
zalegrala Oct 24, 2023
cb8d2a6
Upgrade fake-gcs-server
zalegrala Oct 24, 2023
4e54cc1
Use JSONRead in gcs client for fake-gcs-server when Endpoint is set
zalegrala Oct 24, 2023
2703973
Avoid early allocation of error for concurent operations
zalegrala Oct 24, 2023
7585b5a
Include EndOffset in gcs backend
zalegrala Oct 24, 2023
56ded80
Include integration configs
zalegrala Oct 24, 2023
30f63f8
Fix for global min/max
zalegrala Oct 24, 2023
e51b23d
Include poller integration test in ci
zalegrala Oct 24, 2023
40faa93
Preallocate for review comments
zalegrala Oct 25, 2023
a8a9035
Lock for all results and break early if error
zalegrala Oct 25, 2023
7a877ba
Include additional assertion for poller_test
zalegrala Oct 26, 2023
b805fb8
Adjust gcs and s3 locking
zalegrala Oct 26, 2023
aeaba0a
Adjust ListBlocks interface to take a tenant string instead of a keypath
zalegrala Oct 26, 2023
d0c3fdd
Move OwnsEverythingSharder
zalegrala Oct 26, 2023
c080db0
Remove some comments
zalegrala Oct 26, 2023
0a4fdd9
Ensure exclusive max unless global max
zalegrala Oct 26, 2023
89f4a68
Restructure for clarity
zalegrala Oct 26, 2023
15855f4
Tidy up backends a bit
zalegrala Oct 26, 2023
2cffd49
Fix test call count after avoiding BlockMeta for known compacted blocks
zalegrala Oct 26, 2023
983612b
Update tests to include CompactedMeta call count
zalegrala Oct 26, 2023
2173034
Include error message when block UUID is below shard minimum
zalegrala Oct 27, 2023
d2b7009
Centralize backend.GlobalMaxBlockID
zalegrala Oct 27, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,9 @@ jobs:
- name: Test
run: make test-e2e

- name: Poller
run: make test-integration-poller
zalegrala marked this conversation as resolved.
Show resolved Hide resolved

integration-tests-serverless:
name: Test serverless integration e2e suite
runs-on: ubuntu-latest
Expand Down
6 changes: 5 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -129,9 +129,13 @@ test-e2e: tools docker-tempo docker-tempo-query
test-e2e-serverless: tools docker-tempo docker-serverless
$(GOTEST) -v $(GOTEST_OPT) ./integration/e2e/serverless

.PHONY: test-integration-poller
test-integration-poller: tools
$(GOTEST) -v $(GOTEST_OPT) ./integration/poller

# test-all/bench use a docker image so build it first to make sure we're up to date
.PHONY: test-all
test-all: test-with-cover test-e2e test-e2e-serverless
test-all: test-with-cover test-e2e test-e2e-serverless test-integration-poller

.PHONY: test-bench
test-bench: tools docker-tempo
Expand Down
2 changes: 1 addition & 1 deletion cmd/tempo-cli/cmd-analyse-blocks.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ func (cmd *analyseBlocksCmd) Run(ctx *globalOptions) error {
}

// TODO: Parallelize this
blocks, err := r.Blocks(context.Background(), cmd.TenantID)
blocks, _, err := r.Blocks(context.Background(), cmd.TenantID)
if err != nil {
return err
}
Expand Down
2 changes: 1 addition & 1 deletion cmd/tempo-cli/cmd-migrate-tenant.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ func (cmd *migrateTenantCmd) Run(opts *globalOptions) error {

// TODO create dest directory if it doesn't exist yet?

blocksDest, err := readerDest.Blocks(ctx, cmd.DestTenantID)
blocksDest, _, err := readerDest.Blocks(ctx, cmd.DestTenantID)
joe-elliott marked this conversation as resolved.
Show resolved Hide resolved
if err != nil {
return err
}
Expand Down
4 changes: 3 additions & 1 deletion cmd/tempo-cli/cmd-query-blocks.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,13 +84,15 @@ func (cmd *queryBlocksCmd) Run(ctx *globalOptions) error {
}

func queryBucket(ctx context.Context, r backend.Reader, c backend.Compactor, tenantID string, traceID common.ID) ([]queryResults, error) {
blockIDs, err := r.Blocks(context.Background(), tenantID)
blockIDs, compactedBlockIDs, err := r.Blocks(context.Background(), tenantID)
if err != nil {
return nil, err
}

fmt.Println("total blocks to search: ", len(blockIDs))

blockIDs = append(blockIDs, compactedBlockIDs...)

// Load in parallel
wg := boundedwaitgroup.New(100)
resultsCh := make(chan queryResults, len(blockIDs))
Expand Down
2 changes: 1 addition & 1 deletion cmd/tempo-cli/cmd-query-trace-summary.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ func sortServiceNames(nameFrequencies map[string]int) PairList {
}

func queryBucketForSummary(ctx context.Context, percentage float32, r backend.Reader, c backend.Compactor, tenantID string, traceID common.ID) (*TraceSummary, error) {
blockIDs, err := r.Blocks(context.Background(), tenantID)
blockIDs, _, err := r.Blocks(context.Background(), tenantID)
if err != nil {
return nil, err
}
Expand Down
2 changes: 1 addition & 1 deletion cmd/tempo-cli/cmd-search.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ func (cmd *searchBlocksCmd) Run(opts *globalOptions) error {

ctx := context.Background()

blockIDs, err := r.Blocks(ctx, cmd.TenantID)
blockIDs, _, err := r.Blocks(ctx, cmd.TenantID)
if err != nil {
return err
}
Expand Down
4 changes: 3 additions & 1 deletion cmd/tempo-cli/shared.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,13 @@ type blockStats struct {
}

func loadBucket(r backend.Reader, c backend.Compactor, tenantID string, windowRange time.Duration, includeCompacted bool) ([]blockStats, error) {
blockIDs, err := r.Blocks(context.Background(), tenantID)
blockIDs, compactedBlockIDs, err := r.Blocks(context.Background(), tenantID)
if err != nil {
return nil, err
}

blockIDs = append(blockIDs, compactedBlockIDs...)

fmt.Println("total blocks: ", len(blockIDs))

// Load in parallel
Expand Down
5 changes: 3 additions & 2 deletions cmd/tempo/app/modules.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package app

import (
"context"
"errors"
"fmt"
"io"
Expand Down Expand Up @@ -295,7 +296,7 @@ func (t *App) initQuerier() (services.Service, error) {

// do not enable polling if this is the single binary. in that case the compactor will take care of polling
if t.cfg.Target == Querier {
t.store.EnablePolling(nil)
t.store.EnablePolling(context.Background(), nil)
}

ingesterRings := []ring.ReadRing{t.readRings[ringIngester]}
Expand Down Expand Up @@ -394,7 +395,7 @@ func (t *App) initQueryFrontend() (services.Service, error) {
t.Server.HTTP.Handle(addHTTPAPIPrefix(&t.cfg, api.PathSpanMetricsSummary), spanMetricsSummaryHandler)

// the query frontend needs to have knowledge of the blocks so it can shard search jobs
t.store.EnablePolling(nil)
t.store.EnablePolling(context.Background(), nil)

// http query echo endpoint
t.Server.HTTP.Handle(addHTTPAPIPrefix(&t.cfg, api.PathEcho), echoHandler())
Expand Down
5 changes: 5 additions & 0 deletions docs/sources/tempo/configuration/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -731,6 +731,11 @@ storage:
# Example: "endpoint: s3.dualstack.us-east-2.amazonaws.com"
[endpoint: <string>]

# The number of list calls to make in parallel to the backend per instance.
# Adjustments here will impact the polling time, as well as the number of Go routines.
# Default is 3
Copy link
Contributor Author

Choose a reason for hiding this comment

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

I'm rethinking this and perhaps a default of 1 is better here. Thoughts?

Copy link
Member

Choose a reason for hiding this comment

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

what do you envision this setting will be in a large cluster with 100k+ blocks? i think 3-5 as a default makes sense. it will help smaller clusters grow w/o putting a huge burden on the tenant index builders

i suppose a goal would be to pick a default where an average user will not see a change in behavior.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I had tested with 20 on gcs and got the best performance, but this was not running with the large number of instances we see in some of our environments. The good thing is that we have a configuration option to tune. I'm fine with coming out the gate with 3 and then finding a nice balance as we roll this out, then come back and adjust our defaults if it turns out we were way off.

[list_blocks_concurrency: <int>]

# optional.
# By default the region is inferred from the endpoint,
# but is required for some S3-compatible storage engines.
Expand Down
2 changes: 1 addition & 1 deletion integration/e2e/backend/backend.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import (

const (
azuriteImage = "mcr.microsoft.com/azure-storage/azurite"
gcsImage = "fsouza/fake-gcs-server:1.47.3"
gcsImage = "fsouza/fake-gcs-server:1.47.6"
)

func parsePort(endpoint string) (int, error) {
Expand Down
54 changes: 54 additions & 0 deletions integration/poller/config-azurite.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
target: all
stream_over_http_enabled: true

server:
http_listen_port: 3200

query_frontend:
search:
query_backend_after: 0 # setting these both to 0 will force all range searches to hit the backend
query_ingesters_until: 0

distributor:
receivers:
jaeger:
protocols:
grpc:

ingester:
lifecycler:
address: 127.0.0.1
ring:
kvstore:
store: inmemory
replication_factor: 1
final_sleep: 0s
trace_idle_period: 1s
max_block_duration: 5s
complete_block_timeout: 5s
flush_check_period: 1s

storage:
trace:
blocklist_poll: 1s
backend: azure
azure:
container_name: tempo # how to store data in azure
endpoint_suffix: tempo_e2e-azurite:10000
storage_account_name: "devstoreaccount1"
storage_account_key: "Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw=="
pool:
max_workers: 10
queue_depth: 100

overrides:
user_configurable_overrides:
enabled: true
poll_interval: 10s
client:
backend: azure
azure:
container_name: tempo
endpoint_suffix: tempo_e2e-azurite:10000
storage_account_name: "devstoreaccount1"
storage_account_key: "Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw=="
54 changes: 54 additions & 0 deletions integration/poller/config-gcs.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
target: all
stream_over_http_enabled: true

server:
http_listen_port: 3200

query_frontend:
search:
query_ingesters_until: 0 # setting these both to 0 will force all range searches to hit the backend
query_backend_after: 0

distributor:
receivers:
jaeger:
protocols:
grpc:

ingester:
lifecycler:
address: 127.0.0.1
ring:
kvstore:
store: inmemory
replication_factor: 1
final_sleep: 0s
trace_idle_period: 1s
max_block_duration: 5s
complete_block_timeout: 5s
flush_check_period: 1s

storage:
trace:
blocklist_poll: 1s
backend: gcs
gcs:
bucket_name: tempo
endpoint: https://tempo_e2e-gcs:4443/storage/v1/
insecure: true
pool:
max_workers: 10
queue_depth: 1000

overrides:
user_configurable_overrides:
enabled: true
poll_interval: 10s
client:
backend: gcs
# fsouza/fake-gcs-server does not support versioning
confirm_versioning: false
gcs:
bucket_name: tempo
endpoint: https://tempo_e2e-gcs:4443/storage/v1/
insecure: true
57 changes: 57 additions & 0 deletions integration/poller/config-s3.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
target: all
stream_over_http_enabled: true

server:
http_listen_port: 3200

query_frontend:
search:
query_backend_after: 0 # setting these both to 0 will force all range searches to hit the backend
query_ingesters_until: 0

distributor:
receivers:
jaeger:
protocols:
grpc:

ingester:
lifecycler:
address: 127.0.0.1
ring:
kvstore:
store: inmemory
replication_factor: 1
final_sleep: 0s
trace_idle_period: 1s
max_block_duration: 5s
complete_block_timeout: 5s
flush_check_period: 1s

storage:
trace:
blocklist_poll: 1s
backend: s3
s3:
bucket: tempo
endpoint: tempo-integration-minio-9000:9000 # TODO: this is brittle, fix this eventually
access_key: Cheescake # TODO: use cortex_e2e.MinioAccessKey
secret_key: supersecret # TODO: use cortex_e2e.MinioSecretKey
insecure: true
pool:
max_workers: 10
queue_depth: 100

overrides:
user_configurable_overrides:
enabled: true
poll_interval: 10s
client:
backend: s3
s3:
# TODO use separate bucket?
bucket: tempo
endpoint: tempo-integration-minio-9000:9000 # TODO: this is brittle, fix this eventually
access_key: Cheescake # TODO: use cortex_e2e.MinioAccessKey
secret_key: supersecret # TODO: use cortex_e2e.MinioSecretKey
insecure: true
Loading
Loading