Skip to content

Commit 58d9203

Browse files
authored
refactored all functions (#145)
* refactored stat_object refactored select_object_content refactor get_presigned_object_url refactor get_presigned_policy_form_data refactored upload-part-copy * fixed object.unwrap * update region * made client Arc * made client Arc * update client * update tests * update segmented_bytes * bench updated * cleanup version handling * cleanup of headers: multimap * added inner in Client * updated clients: added Into<String>in API * Separated http_client and shared client items in Client
1 parent f23572d commit 58d9203

File tree

213 files changed

+9508
-7138
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

213 files changed

+9508
-7138
lines changed

.github/workflows/rust.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
cargo clippy --all-targets --all-features
2424
cargo build --bins --examples --tests --benches --verbose
2525
26-
- name: Run tests
26+
- name: Run tests S3
2727
run: |
2828
./tests/start-server.sh
2929
export SERVER_ENDPOINT=localhost:9000

Cargo.toml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ ring = { version = "0.17.14", optional = true, default-features = false, feature
4848
serde = { version = "1.0.219", features = ["derive"] }
4949
serde_json = "1.0.140"
5050
sha2 = { version = "0.10.8", optional = true }
51-
tokio = { version = "1.44.1", features = ["full"] }
51+
tokio = { version = "1.44.2", features = ["full"] }
5252
tokio-stream = "0.1.17"
5353
tokio-util = { version = "0.7.14", features = ["io"] }
5454
urlencoding = "2.1.3"
@@ -59,7 +59,7 @@ http = "1.3.1"
5959
[dev-dependencies]
6060
minio_common = { path = "./common" }
6161
async-std = { version = "1.13.1", features = ["attributes", "tokio1"] }
62-
clap = { version = "4.5.34", features = ["derive"] }
62+
clap = { version = "4.5.35", features = ["derive"] }
6363
quickcheck = "1.0.3"
6464
criterion = "0.5.1"
6565

@@ -76,6 +76,9 @@ name = "file_downloader"
7676
[[example]]
7777
name = "object_prompt"
7878

79+
[[example]]
80+
name = "append_object"
81+
7982
[[bench]]
8083
name = "s3-api"
8184
path = "benches/s3/api_benchmarks.rs"

benches/s3/api_benchmarks.rs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,15 @@ mod bench_bucket_replication;
2121
mod bench_bucket_tags;
2222
mod bench_bucket_versioning;
2323
mod bench_list_bucket;
24+
mod bench_object_append;
25+
mod bench_object_copy;
2426
mod bench_object_legal_hold;
2527
mod bench_object_lock_config;
28+
mod bench_object_put;
2629
mod bench_object_retention;
2730
mod bench_object_tags;
2831
mod common_benches;
2932

30-
mod bench_object_copy;
31-
3233
use criterion::{Criterion, criterion_group, criterion_main};
3334
use std::time::Duration;
3435

@@ -43,9 +44,12 @@ use crate::bench_bucket_tags::*;
4344
use crate::bench_bucket_versioning::*;
4445
use crate::bench_list_bucket::*;
4546
#[allow(unused_imports)]
47+
use crate::bench_object_append::bench_object_append;
48+
#[allow(unused_imports)]
4649
use crate::bench_object_copy::*;
4750
use crate::bench_object_legal_hold::*;
4851
use crate::bench_object_lock_config::*;
52+
use crate::bench_object_put::bench_object_put;
4953
use crate::bench_object_retention::*;
5054
use crate::bench_object_tags::*;
5155

@@ -54,9 +58,9 @@ criterion_group!(
5458
config = Criterion::default()
5559
.configure_from_args()
5660
.warm_up_time(Duration::from_secs_f32(0.01))
57-
.sample_size(100)
61+
.sample_size(1000)
5862
.nresamples(1001)
59-
.measurement_time(Duration::from_secs_f32(0.5));
63+
.measurement_time(Duration::from_secs_f32(10.0));
6064
targets =
6165
bench_bucket_exists,
6266
bench_set_bucket_lifecycle,
@@ -83,7 +87,9 @@ criterion_group!(
8387
bench_get_bucket_versioning,
8488
//
8589
bench_list_buckets,
86-
//bench_object_copy, //TODO first refactor object_copy
90+
bench_object_copy_internal,
91+
bench_object_append,
92+
bench_object_put,
8793
//
8894
bench_enable_object_legal_hold,
8995
bench_disable_object_legal_hold,

benches/s3/bench_bucket_exists.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,6 @@ pub(crate) fn bench_bucket_exists(criterion: &mut Criterion) {
2323
"bucket_exists",
2424
criterion,
2525
|| async { Ctx2::new().await },
26-
|ctx| BucketExists::new(&ctx.bucket).client(&ctx.client),
26+
|ctx| BucketExists::new(ctx.client.clone(), ctx.bucket.clone()),
2727
);
2828
}

benches/s3/bench_bucket_lifecycle.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,7 @@ pub(crate) fn bench_set_bucket_lifecycle(criterion: &mut Criterion) {
2727
|| async { Ctx2::new().await },
2828
|ctx| {
2929
let config = create_bucket_lifecycle_config_examples();
30-
SetBucketLifecycle::new(&ctx.bucket)
31-
.client(&ctx.client)
30+
SetBucketLifecycle::new(ctx.client.clone(), ctx.bucket.clone())
3231
.life_cycle_config(config)
3332
},
3433
)
@@ -40,22 +39,22 @@ pub(crate) fn bench_get_bucket_lifecycle(criterion: &mut Criterion) {
4039
|| async {
4140
let ctx = Ctx2::new().await;
4241
let config = create_bucket_lifecycle_config_examples();
43-
SetBucketLifecycle::new(&ctx.bucket)
44-
.client(&ctx.client)
42+
ctx.client
43+
.set_bucket_lifecycle(&ctx.bucket)
4544
.life_cycle_config(config)
4645
.send()
4746
.await
4847
.unwrap();
4948
ctx
5049
},
51-
|ctx| GetBucketLifecycle::new(&ctx.bucket).client(&ctx.client),
50+
|ctx| GetBucketLifecycle::new(ctx.client.clone(), ctx.bucket.clone()),
5251
)
5352
}
5453
pub(crate) fn bench_delete_bucket_lifecycle(criterion: &mut Criterion) {
5554
benchmark_s3_api(
5655
"delete_bucket_lifecycle",
5756
criterion,
5857
|| async { Ctx2::new().await },
59-
|ctx| DeleteBucketLifecycle::new(&ctx.bucket).client(&ctx.client),
58+
|ctx| DeleteBucketLifecycle::new(ctx.client.clone(), ctx.bucket.clone()),
6059
)
6160
}

benches/s3/bench_bucket_notification.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,7 @@ pub(crate) fn bench_set_bucket_notification(criterion: &mut Criterion) {
2828
|| async { Ctx2::new().await },
2929
|ctx| {
3030
let config = create_bucket_notification_config_example();
31-
SetBucketNotification::new(&ctx.bucket)
32-
.client(&ctx.client)
31+
SetBucketNotification::new(ctx.client.clone(), ctx.bucket.clone())
3332
.notification_config(config)
3433
},
3534
)
@@ -42,15 +41,15 @@ pub(crate) fn bench_get_bucket_notification(criterion: &mut Criterion) {
4241
|| async {
4342
let ctx = Ctx2::new().await;
4443
let config = create_bucket_notification_config_example();
45-
SetBucketNotification::new(&ctx.bucket)
46-
.client(&ctx.client)
44+
ctx.client
45+
.set_bucket_notification(&ctx.bucket)
4746
.notification_config(config)
4847
.send()
4948
.await
5049
.unwrap();
5150
ctx
5251
},
53-
|ctx| GetBucketNotification::new(&ctx.bucket).client(&ctx.client),
52+
|ctx| GetBucketNotification::new(ctx.client.clone(), ctx.bucket.clone()),
5453
)
5554
}
5655
#[allow(dead_code)]
@@ -59,6 +58,6 @@ pub(crate) fn bench_delete_bucket_notification(criterion: &mut Criterion) {
5958
"delete_bucket_notification",
6059
criterion,
6160
|| async { Ctx2::new().await },
62-
|ctx| DeleteBucketNotification::new(&ctx.bucket).client(&ctx.client),
61+
|ctx| DeleteBucketNotification::new(ctx.client.clone(), ctx.bucket.clone()),
6362
)
6463
}

benches/s3/bench_bucket_policy.rs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,7 @@ pub(crate) fn bench_set_bucket_policy(criterion: &mut Criterion) {
2727
|| async { Ctx2::new().await },
2828
|ctx| {
2929
let config = create_bucket_policy_config_example(&ctx.bucket);
30-
SetBucketPolicy::new(&ctx.bucket)
31-
.client(&ctx.client)
32-
.config(config)
30+
SetBucketPolicy::new(ctx.client.clone(), ctx.bucket.clone()).config(config)
3331
},
3432
)
3533
}
@@ -40,22 +38,21 @@ pub(crate) fn bench_get_bucket_policy(criterion: &mut Criterion) {
4038
|| async {
4139
let ctx = Ctx2::new().await;
4240
let config = create_bucket_policy_config_example(&ctx.bucket);
43-
SetBucketPolicy::new(&ctx.bucket)
44-
.client(&ctx.client)
41+
SetBucketPolicy::new(ctx.client.clone(), ctx.bucket.clone())
4542
.config(config)
4643
.send()
4744
.await
4845
.unwrap();
4946
ctx
5047
},
51-
|ctx| GetBucketPolicy::new(&ctx.bucket).client(&ctx.client),
48+
|ctx| GetBucketPolicy::new(ctx.client.clone(), ctx.bucket.clone()),
5249
)
5350
}
5451
pub(crate) fn bench_delete_bucket_policy(criterion: &mut Criterion) {
5552
benchmark_s3_api(
5653
"delete_bucket_policy",
5754
criterion,
5855
|| async { Ctx2::new().await },
59-
|ctx| DeleteBucketPolicy::new(&ctx.bucket).client(&ctx.client),
56+
|ctx| DeleteBucketPolicy::new(ctx.client.clone(), ctx.bucket.clone()),
6057
)
6158
}

benches/s3/bench_bucket_replication.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,7 @@ pub(crate) fn bench_set_bucket_replication(criterion: &mut Criterion) {
5353
|ctx| {
5454
let config =
5555
create_bucket_replication_config_example(ctx.aux_bucket.clone().unwrap().as_str());
56-
SetBucketReplication::new(&ctx.bucket)
57-
.client(&ctx.client)
56+
SetBucketReplication::new(ctx.client.clone(), ctx.bucket.clone())
5857
.replication_config(config)
5958
},
6059
)
@@ -86,7 +85,7 @@ pub(crate) fn bench_get_bucket_replication(criterion: &mut Criterion) {
8685

8786
ctx
8887
},
89-
|ctx| GetBucketReplication::new(&ctx.bucket).client(&ctx.client),
88+
|ctx| GetBucketReplication::new(ctx.client.clone(), ctx.bucket.clone()),
9089
)
9190
}
9291
#[allow(dead_code)]
@@ -116,6 +115,6 @@ pub(crate) fn bench_delete_bucket_replication(criterion: &mut Criterion) {
116115

117116
ctx
118117
},
119-
|ctx| DeleteBucketReplication::new(&ctx.bucket).client(&ctx.client),
118+
|ctx| DeleteBucketReplication::new(ctx.client.clone(), ctx.bucket.clone()),
120119
)
121120
}

benches/s3/bench_bucket_tags.rs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,49 +13,54 @@
1313
// See the License for the specific language governing permissions and
1414
// limitations under the License.
1515

16-
use crate::common_benches::{Ctx2, benchmark_s3_api};
16+
use crate::common_benches::{Ctx2, benchmark_s3_api, skip_express_mode};
1717

1818
use criterion::Criterion;
1919
use minio::s3::builders::{DeleteBucketTags, GetBucketTags, SetBucketTags};
20-
use minio::s3::response::SetBucketTagsResponse;
2120
use minio::s3::types::S3Api;
2221
use minio_common::example::create_tags_example;
2322

2423
pub(crate) fn bench_set_bucket_tags(criterion: &mut Criterion) {
24+
if skip_express_mode("bench_set_bucket_tags") {
25+
return;
26+
}
2527
benchmark_s3_api(
2628
"set_bucket_tags",
2729
criterion,
2830
|| async { Ctx2::new().await },
2931
|ctx| {
30-
SetBucketTags::new(&ctx.bucket)
31-
.client(&ctx.client)
32-
.tags(create_tags_example())
32+
SetBucketTags::new(ctx.client.clone(), ctx.bucket.clone()).tags(create_tags_example())
3333
},
3434
)
3535
}
3636
pub(crate) fn bench_get_bucket_tags(criterion: &mut Criterion) {
37+
if skip_express_mode("bench_get_bucket_tags") {
38+
return;
39+
}
3740
benchmark_s3_api(
3841
"get_bucket_tags",
3942
criterion,
4043
|| async {
4144
let ctx = Ctx2::new().await;
42-
let _resp: SetBucketTagsResponse = ctx
43-
.client
45+
ctx.client
4446
.set_bucket_tags(&ctx.bucket)
4547
.tags(create_tags_example())
4648
.send()
4749
.await
4850
.unwrap();
4951
ctx
5052
},
51-
|ctx| GetBucketTags::new(&ctx.bucket).client(&ctx.client),
53+
|ctx| GetBucketTags::new(ctx.client.clone(), ctx.bucket.clone()),
5254
)
5355
}
5456
pub(crate) fn bench_delete_bucket_tags(criterion: &mut Criterion) {
57+
if skip_express_mode("bench_delete_bucket_tags") {
58+
return;
59+
}
5560
benchmark_s3_api(
5661
"delete_bucket_tags",
5762
criterion,
5863
|| async { Ctx2::new().await },
59-
|ctx| DeleteBucketTags::new(&ctx.bucket).client(&ctx.client),
64+
|ctx| DeleteBucketTags::new(ctx.client.clone(), ctx.bucket.clone()),
6065
)
6166
}

benches/s3/bench_bucket_versioning.rs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,29 +13,33 @@
1313
// See the License for the specific language governing permissions and
1414
// limitations under the License.
1515

16-
use crate::common_benches::{Ctx2, benchmark_s3_api};
16+
use crate::common_benches::{Ctx2, benchmark_s3_api, skip_express_mode};
1717

1818
use criterion::Criterion;
1919
use minio::s3::builders::{GetBucketVersioning, SetBucketVersioning, VersioningStatus};
2020

2121
pub(crate) fn bench_get_bucket_versioning(criterion: &mut Criterion) {
22+
if skip_express_mode("bench_get_bucket_versioning") {
23+
return;
24+
}
2225
benchmark_s3_api(
2326
"get_bucket_versioning",
2427
criterion,
2528
|| async { Ctx2::new().await },
26-
|ctx| GetBucketVersioning::new(&ctx.bucket).client(&ctx.client),
29+
|ctx| GetBucketVersioning::new(ctx.client.clone(), ctx.bucket.clone()),
2730
)
2831
}
2932
pub(crate) fn bench_set_bucket_versioning(criterion: &mut Criterion) {
33+
if skip_express_mode("bench_set_bucket_versioning") {
34+
return;
35+
}
3036
benchmark_s3_api(
3137
"set_bucket_versioning",
3238
criterion,
3339
|| async { Ctx2::new().await },
3440
|ctx| {
35-
let status = VersioningStatus::Enabled;
36-
SetBucketVersioning::new(&ctx.bucket)
37-
.client(&ctx.client)
38-
.versioning_status(status)
41+
SetBucketVersioning::new(ctx.client.clone(), ctx.bucket.clone())
42+
.versioning_status(VersioningStatus::Enabled)
3943
},
4044
)
4145
}

0 commit comments

Comments
 (0)