mirror of
https://github.com/rustfs/rustfs.git
synced 2026-07-26 08:18:18 +00:00
eb392f24d6
chore(scripts): index scripts/ and archive 29 one-shot scripts backlog#1153 infra-13. scripts/ had 80+ unlabelled top-level entries mixing CI gates with finished one-shot issue-validation scripts. - scripts/README.md — one index row per entry with status (ci-gate / dev-tool / archived), purpose, and wiring; subdirectories get one row each. run_scanner_benchmarks.sh is annotated "disposition owned by backlog perf-10" and deliberately untouched. - git mv 29 confirmed-stale one-shot entries to scripts/archive/: 11 issue-scoped validation/perf-capture scripts, the 5-script backlog#706 large-PUT breakdown family, the 4-file GET-optimization stress suite, 2 gt1g one-shots, and 7 other orphaned one-shots. Evidence: a whole-tree boundary-aware reference census showed zero references from CI/Makefiles/docs/code for every moved entry (or references only from other scripts inside the same archived set); re-run after the move shows zero dangling references. - docs/testing/README.md links the index. Moves only — no script content changed.
250 lines
6.6 KiB
Bash
Executable File
250 lines
6.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ENDPOINT=""
|
|
ACCESS_KEY=""
|
|
SECRET_KEY=""
|
|
BUCKET=""
|
|
PREFIX="bench/issue713"
|
|
OBJECTS="1GiB=plain-1g.bin,2GiB=plain-2g.bin"
|
|
REGION="us-east-1"
|
|
MC_BIN="${MC_BIN:-mc}"
|
|
FORCE=false
|
|
INSECURE=false
|
|
DRY_RUN=false
|
|
|
|
usage() {
|
|
cat <<'USAGE'
|
|
Usage:
|
|
scripts/prepare_gt1g_get_test_objects.sh \
|
|
--endpoint <url> --access-key <ak> --secret-key <sk> --bucket <bucket> [options]
|
|
|
|
Required:
|
|
--endpoint <url>
|
|
--access-key <ak>
|
|
--secret-key <sk>
|
|
--bucket <bucket>
|
|
|
|
Options:
|
|
--prefix <path> Default: bench/issue713
|
|
--objects <csv> Default: 1GiB=plain-1g.bin,2GiB=plain-2g.bin
|
|
Format: size=object-name,size=object-name
|
|
--region <name> Default: us-east-1
|
|
--mc-bin <path> Default: mc
|
|
--force Re-upload even if object already exists
|
|
--insecure Allow insecure TLS
|
|
--dry-run
|
|
-h, --help
|
|
|
|
Examples:
|
|
scripts/prepare_gt1g_get_test_objects.sh \
|
|
--endpoint http://127.0.0.1:9000 \
|
|
--access-key rustfsadmin \
|
|
--secret-key rustfsadmin \
|
|
--bucket rustfs-bench \
|
|
--prefix bench/issue713/plain
|
|
USAGE
|
|
}
|
|
|
|
arg_value() {
|
|
local flag="$1"
|
|
local value="${2:-}"
|
|
if [[ -z "$value" || "$value" == --* ]]; then
|
|
echo "ERROR: missing value for $flag" >&2
|
|
exit 1
|
|
fi
|
|
printf '%s\n' "$value"
|
|
}
|
|
|
|
require_cmd() {
|
|
if ! command -v "$1" >/dev/null 2>&1; then
|
|
echo "ERROR: command not found: $1" >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
run_rust_helper_fallback() {
|
|
local objects_arg=""
|
|
local helper_out_dir="$OUT_DIR"
|
|
local raw_spec
|
|
IFS=',' read -r -a object_specs <<< "$OBJECTS"
|
|
for raw_spec in "${object_specs[@]}"; do
|
|
local spec size object_name
|
|
spec="$(echo "$raw_spec" | awk '{$1=$1;print}')"
|
|
[[ -z "$spec" ]] && continue
|
|
size="${spec%%=*}"
|
|
object_name="${spec#*=}"
|
|
objects_arg+="${size}=${PREFIX%/}/${object_name},"
|
|
done
|
|
objects_arg="${objects_arg%,}"
|
|
|
|
if [[ -n "$helper_out_dir" && "$helper_out_dir" != /* ]]; then
|
|
helper_out_dir="$PWD/$helper_out_dir"
|
|
fi
|
|
|
|
echo "mc not found; falling back to rustfs/tests/gt1g_get_benchmark_tool.rs"
|
|
GT1G_GET_ACTION=prepare \
|
|
GT1G_GET_ENDPOINT="$ENDPOINT" \
|
|
GT1G_GET_ACCESS_KEY="$ACCESS_KEY" \
|
|
GT1G_GET_SECRET_KEY="$SECRET_KEY" \
|
|
GT1G_GET_BUCKET="$BUCKET" \
|
|
GT1G_GET_REGION="$REGION" \
|
|
GT1G_GET_OBJECTS="$objects_arg" \
|
|
GT1G_GET_OUT_DIR="${helper_out_dir:-$PWD/target/bench/issue713-prepare-helper}" \
|
|
GT1G_GET_FORCE="$([[ "$FORCE" == "true" ]] && echo true || echo false)" \
|
|
cargo test -p rustfs --test gt1g_get_benchmark_tool gt1g_get_benchmark_tool -- --ignored --nocapture
|
|
}
|
|
|
|
parse_args() {
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
--endpoint) ENDPOINT="$(arg_value "$1" "${2:-}")"; shift 2 ;;
|
|
--access-key) ACCESS_KEY="$(arg_value "$1" "${2:-}")"; shift 2 ;;
|
|
--secret-key) SECRET_KEY="$(arg_value "$1" "${2:-}")"; shift 2 ;;
|
|
--bucket) BUCKET="$(arg_value "$1" "${2:-}")"; shift 2 ;;
|
|
--prefix) PREFIX="$(arg_value "$1" "${2:-}")"; shift 2 ;;
|
|
--objects) OBJECTS="$(arg_value "$1" "${2:-}")"; shift 2 ;;
|
|
--region) REGION="$(arg_value "$1" "${2:-}")"; shift 2 ;;
|
|
--mc-bin) MC_BIN="$(arg_value "$1" "${2:-}")"; shift 2 ;;
|
|
--force) FORCE=true; shift ;;
|
|
--insecure) INSECURE=true; shift ;;
|
|
--dry-run) DRY_RUN=true; shift ;;
|
|
-h|--help) usage; exit 0 ;;
|
|
*)
|
|
echo "ERROR: unknown arg: $1" >&2
|
|
usage
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
validate_args() {
|
|
if [[ -z "$ENDPOINT" || -z "$ACCESS_KEY" || -z "$SECRET_KEY" || -z "$BUCKET" ]]; then
|
|
echo "ERROR: --endpoint, --access-key, --secret-key, and --bucket are required" >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
size_to_bytes() {
|
|
local size="$1"
|
|
case "$size" in
|
|
*GiB)
|
|
local n="${size%GiB}"
|
|
echo $((n * 1024 * 1024 * 1024))
|
|
;;
|
|
*MiB)
|
|
local n="${size%MiB}"
|
|
echo $((n * 1024 * 1024))
|
|
;;
|
|
*KiB)
|
|
local n="${size%KiB}"
|
|
echo $((n * 1024))
|
|
;;
|
|
*B)
|
|
echo "${size%B}"
|
|
;;
|
|
*)
|
|
echo "ERROR"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
create_sparse_file() {
|
|
local file_path="$1"
|
|
local bytes="$2"
|
|
if command -v mkfile >/dev/null 2>&1; then
|
|
mkfile -n "$bytes" "$file_path"
|
|
else
|
|
truncate -s "$bytes" "$file_path"
|
|
fi
|
|
}
|
|
|
|
object_exists() {
|
|
local alias_path="$1"
|
|
local -a cmd=("$MC_BIN" stat "$alias_path")
|
|
if [[ "$INSECURE" == "true" ]]; then
|
|
cmd=("$MC_BIN" --insecure stat "$alias_path")
|
|
fi
|
|
|
|
"${cmd[@]}" >/dev/null 2>&1
|
|
}
|
|
|
|
main() {
|
|
parse_args "$@"
|
|
validate_args
|
|
|
|
if ! command -v "$MC_BIN" >/dev/null 2>&1; then
|
|
run_rust_helper_fallback
|
|
exit 0
|
|
fi
|
|
|
|
local tmp_root
|
|
tmp_root="$(mktemp -d "${TMPDIR:-/tmp}/issue713-gt1g-get.XXXXXX")"
|
|
trap 'rm -rf "$tmp_root"' EXIT
|
|
|
|
local mc_config_dir="$tmp_root/mc"
|
|
mkdir -p "$mc_config_dir"
|
|
|
|
local -a mc_alias_cmd=("$MC_BIN" --config-dir "$mc_config_dir")
|
|
if [[ "$INSECURE" == "true" ]]; then
|
|
mc_alias_cmd+=("--insecure")
|
|
fi
|
|
|
|
if [[ "$DRY_RUN" == "true" ]]; then
|
|
echo "[DRY-RUN] ${mc_alias_cmd[*]} alias set issue713 ${ENDPOINT} REDACTED REDACTED"
|
|
else
|
|
"${mc_alias_cmd[@]}" alias set issue713 "$ENDPOINT" "$ACCESS_KEY" "$SECRET_KEY" >/dev/null
|
|
fi
|
|
|
|
IFS=',' read -r -a object_specs <<< "$OBJECTS"
|
|
for raw_spec in "${object_specs[@]}"; do
|
|
local spec size object_name bytes local_file object_key alias_path
|
|
spec="$(echo "$raw_spec" | awk '{$1=$1;print}')"
|
|
[[ -z "$spec" ]] && continue
|
|
|
|
size="${spec%%=*}"
|
|
object_name="${spec#*=}"
|
|
if [[ -z "$size" || -z "$object_name" || "$size" == "$object_name" ]]; then
|
|
echo "ERROR: invalid object spec: $spec" >&2
|
|
exit 1
|
|
fi
|
|
|
|
bytes="$(size_to_bytes "$size")"
|
|
if [[ "$bytes" == "ERROR" ]]; then
|
|
echo "ERROR: unsupported size label: $size" >&2
|
|
exit 1
|
|
fi
|
|
|
|
object_key="${PREFIX%/}/${object_name}"
|
|
alias_path="issue713/${BUCKET}/${object_key}"
|
|
|
|
if [[ "$FORCE" != "true" && "$DRY_RUN" != "true" ]] && object_exists "$alias_path"; then
|
|
echo "skip existing: s3://${BUCKET}/${object_key}"
|
|
continue
|
|
fi
|
|
|
|
local_file="${tmp_root}/${object_name}"
|
|
create_sparse_file "$local_file" "$bytes"
|
|
|
|
if [[ "$DRY_RUN" == "true" ]]; then
|
|
echo "[DRY-RUN] create sparse file ${local_file} (${bytes} bytes)"
|
|
echo "[DRY-RUN] ${mc_alias_cmd[*]} cp ${local_file} ${alias_path}"
|
|
else
|
|
echo "uploading: s3://${BUCKET}/${object_key} (${size})"
|
|
"${mc_alias_cmd[@]}" cp "$local_file" "$alias_path" >/dev/null
|
|
fi
|
|
done
|
|
|
|
echo "prepared objects:"
|
|
for raw_spec in "${object_specs[@]}"; do
|
|
local spec object_name
|
|
spec="$(echo "$raw_spec" | awk '{$1=$1;print}')"
|
|
[[ -z "$spec" ]] && continue
|
|
object_name="${spec#*=}"
|
|
echo " s3://${BUCKET}/${PREFIX%/}/${object_name}"
|
|
done
|
|
}
|
|
|
|
main "$@"
|