97a89c3476
placement.AllowedCountry is the old way to specify placement, with the new approach we can use a more generic (dynamic method), which can check full node information instead of just the country code. The 90% of this patch is just search and replace: * we need to use NodeFilters instead of placement.AllowedCountry * which means, we need an initialized PlacementRules available everywhere * which means we need to configure the placement rules The remaining 10% is the placement.go, where we introduced a new type of configuration (lightweight expression language) to define any kind of placement without code change. Change-Id: Ie644b0b1840871b0e6bbcf80c6b50a947503d7df |
||
---|---|---|
.. | ||
batch.go | ||
csv_test.go | ||
csv.go | ||
main.go | ||
node_check_test.go | ||
node_check.go | ||
nodealias_test.go | ||
nodealias.go | ||
process_test.go | ||
process.go | ||
README.md | ||
service_test.go | ||
service.go | ||
summarize.go | ||
verify_test.go | ||
verify.go |
segment-verify is a tool for verifying the segments.
High Level Overview
segment-verify verifies segment status on storage nodes in a few stages:
- First it loads the metabase for a batch of
--service.batch-size=10000
segments. - They are then distributed into queues using every storage nodes. It will preferentially choose nodes specified in
--service.priority-nodes-path
file, one storagenode id per line. - Then it will query each storage node a single byte for each segment.
--service.concurrency=1000
concurrent connections at a time are made. - Every segment will be checked
--service.check=3
times. However, any failed attempt (e.g. node is offline) is only retried once. - When there are failures in verification process itself, then those segments are written into
--service.retry-path=segments-retry.csv
path. - When the segment isn't found at least on one of the nodes, then it's written into
--service.not-found-path=segments-not-found.csv
file.
There are few parameters for controlling the verification itself:
# This allows to throttle requests, to avoid overloading the storage nodes.
--verify.request-throttle minimum interval for sending out each request (default 150ms)
# When there's a failure to make a request, the process will retry after this duration.
--verify.order-retry-throttle duration how much to wait before retrying order creation (default 50ms)
# This is the time each storage-node has to respond to the request.
--verify.per-piece-timeout duration duration to wait per piece download (default 800ms)
# Just the regular dialing timeout.
--verify.dial-timeout duration how long to wait for a successful dial (default 2s)
# This allows to specify the minimum node version that has the Exists endpoint.
--verify.version-with-exists string minimum storage node version with implemented Exists method (default "v1.69.2")
Running the tool
- by specifying range boundaries:
segment-verify run range --low 00 --high ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff --config-dir ./satellite-config-dir
- by specifying buckets to be checked:
segment-verify run buckets --buckets-csv bucket.csv