aboutsummaryrefslogtreecommitdiff
path: root/src/garage/cli_v2/bucket.rs
diff options
context:
space:
mode:
authorAlex Auvolat <lx@deuxfleurs.fr>2025-01-30 17:45:54 +0100
committerAlex Auvolat <lx@deuxfleurs.fr>2025-02-03 18:54:51 +0100
commitbdaf55ab3f866234bd5a7d585758265a88d2906a (patch)
treee5160b9cc4ca312c6c649989b80d4ba7e6490559 /src/garage/cli_v2/bucket.rs
parente96014ca60331b50a5a67383589ba5b1c74018d0 (diff)
downloadgarage-bdaf55ab3f866234bd5a7d585758265a88d2906a.tar.gz
garage-bdaf55ab3f866234bd5a7d585758265a88d2906a.zip
cli_v2: migrate cleanupincompleteuploads to Admin API
admin api: add CleanupIncompleteUploads spec
Diffstat (limited to 'src/garage/cli_v2/bucket.rs')
-rw-r--r--src/garage/cli_v2/bucket.rs46
1 files changed, 36 insertions, 10 deletions
diff --git a/src/garage/cli_v2/bucket.rs b/src/garage/cli_v2/bucket.rs
index ee3b6800..c25c2c3e 100644
--- a/src/garage/cli_v2/bucket.rs
+++ b/src/garage/cli_v2/bucket.rs
@@ -5,7 +5,6 @@ use garage_util::error::*;
use garage_api_admin::api::*;
-use crate::cli as cli_v1;
use crate::cli::structs::*;
use crate::cli_v2::*;
@@ -22,15 +21,9 @@ impl Cli {
BucketOperation::Deny(query) => self.cmd_bucket_deny(query).await,
BucketOperation::Website(query) => self.cmd_bucket_website(query).await,
BucketOperation::SetQuotas(query) => self.cmd_bucket_set_quotas(query).await,
-
- // TODO
- x => cli_v1::cmd_admin(
- &self.admin_rpc_endpoint,
- self.rpc_host,
- AdminRpc::BucketOperation(x),
- )
- .await
- .ok_or_message("old error"),
+ BucketOperation::CleanupIncompleteUploads(query) => {
+ self.cmd_cleanup_incomplete_uploads(query).await
+ }
}
}
@@ -520,4 +513,37 @@ impl Cli {
Ok(())
}
+
+ pub async fn cmd_cleanup_incomplete_uploads(
+ &self,
+ opt: CleanupIncompleteUploadsOpt,
+ ) -> Result<(), Error> {
+ let older_than = parse_duration::parse::parse(&opt.older_than)
+ .ok_or_message("Invalid duration passed for --older-than parameter")?;
+
+ for b in opt.buckets.iter() {
+ let bucket = self
+ .api_request(GetBucketInfoRequest {
+ id: None,
+ global_alias: None,
+ search: Some(b.clone()),
+ })
+ .await?;
+
+ let res = self
+ .api_request(CleanupIncompleteUploadsRequest {
+ bucket_id: bucket.id.clone(),
+ older_than_secs: older_than.as_secs(),
+ })
+ .await?;
+
+ if res.uploads_deleted > 0 {
+ println!("{:.16}: {} uploads deleted", bucket.id, res.uploads_deleted);
+ } else {
+ println!("{:.16}: no uploads deleted", bucket.id);
+ }
+ }
+
+ Ok(())
+ }
}