Skip to content
Merged
Changes from all commits
Commits
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
79 changes: 52 additions & 27 deletions src/storage/src/storage/write_object.rs
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,7 @@ use crate::storage::checksum::details::{Checksum, Md5};
/// ```
pub struct WriteObject<T> {
inner: std::sync::Arc<StorageInner>,
spec: crate::model::WriteObjectSpec,
params: Option<crate::model::CommonObjectRequestParams>,
request: crate::model_ext::WriteObjectRequest,
payload: Payload<T>,
options: super::request_options::RequestOptions,
}
Expand Down Expand Up @@ -106,7 +105,7 @@ impl<T> WriteObject<T> {
where
V: Into<i64>,
{
self.spec.if_generation_match = Some(v.into());
self.request.spec.if_generation_match = Some(v.into());
self
}

Expand All @@ -133,7 +132,7 @@ impl<T> WriteObject<T> {
where
V: Into<i64>,
{
self.spec.if_generation_not_match = Some(v.into());
self.request.spec.if_generation_not_match = Some(v.into());
self
}

Expand Down Expand Up @@ -161,7 +160,7 @@ impl<T> WriteObject<T> {
where
V: Into<i64>,
{
self.spec.if_metageneration_match = Some(v.into());
self.request.spec.if_metageneration_match = Some(v.into());
self
}

Expand Down Expand Up @@ -190,7 +189,7 @@ impl<T> WriteObject<T> {
where
V: Into<i64>,
{
self.spec.if_metageneration_not_match = Some(v.into());
self.request.spec.if_metageneration_not_match = Some(v.into());
self
}

Expand Down Expand Up @@ -554,7 +553,7 @@ impl<T> WriteObject<T> {
where
V: Into<String>,
{
self.spec.predefined_acl = v.into();
self.request.spec.predefined_acl = v.into();
self
}

Expand All @@ -576,7 +575,7 @@ impl<T> WriteObject<T> {
/// # Ok(()) }
/// ```
pub fn set_key(mut self, v: KeyAes256) -> Self {
self.params = Some(v.into());
self.request.params = Some(v.into());
self
}

Expand Down Expand Up @@ -772,7 +771,8 @@ impl<T> WriteObject<T> {
}

fn mut_resource(&mut self) -> &mut crate::model::Object {
self.spec
self.request
.spec
.resource
.as_mut()
.expect("resource field initialized in `new()`")
Expand All @@ -782,8 +782,8 @@ impl<T> WriteObject<T> {
PerformUpload::new(
self.payload,
self.inner,
self.spec,
self.params,
self.request.spec,
self.request.params,
Comment on lines +785 to +786
Copy link
Collaborator

Choose a reason for hiding this comment

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

Seems like PerformUpload should keep these aggregated then?

Copy link
Member Author

Choose a reason for hiding this comment

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

It could. I did not plan to change it though.

self.options,
)
}
Expand Down Expand Up @@ -919,8 +919,10 @@ impl<T> WriteObject<T> {
.set_name(object);
WriteObject {
inner,
spec: crate::model::WriteObjectSpec::new().set_resource(resource),
params: None,
request: crate::model_ext::WriteObjectRequest {
spec: crate::model::WriteObjectSpec::new().set_resource(resource),
params: None,
},
payload: payload.into(),
options,
}
Expand Down Expand Up @@ -1029,8 +1031,7 @@ impl<T> std::fmt::Debug for WriteObject<T> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("WriteObject")
.field("inner", &self.inner)
.field("spec", &self.spec)
.field("params", &self.params)
.field("request", &self.request)
// skip payload, as it is not `Debug`
.field("options", &self.options)
.finish()
Expand Down Expand Up @@ -1131,7 +1132,7 @@ mod tests {
fn upload_object_unbuffered_metadata() -> Result {
use crate::model::ObjectAccessControl;
let inner = test_inner_client(test_builder());
let mut request = WriteObject::new(inner, "projects/_/buckets/bucket", "object", "")
let mut builder = WriteObject::new(inner, "projects/_/buckets/bucket", "object", "")
.set_if_generation_match(10)
.set_if_generation_not_match(20)
.set_if_metageneration_match(30)
Expand Down Expand Up @@ -1159,10 +1160,10 @@ mod tests {
.with_known_crc32c(crc32c::crc32c(b""))
.with_known_md5_hash(md5::compute(b"").0);

let resource = request.spec.resource.take().unwrap();
let request = request;
let resource = builder.request.spec.resource.take().unwrap();
let builder = builder;
assert_eq!(
&request.spec,
&builder.request.spec,
&WriteObjectSpec::new()
.set_if_generation_match(10)
.set_if_generation_not_match(20)
Expand Down Expand Up @@ -1250,7 +1251,10 @@ mod tests {
crc32c: Some(Crc32c::default()),
md5_hash: None,
});
assert_eq!(upload.spec.resource.and_then(|r| r.checksums), Some(want));
assert_eq!(
upload.request.spec.resource.and_then(|r| r.checksums),
Some(want)
);
let collected = collect(upload.payload).await?;
assert_eq!(collected, QUICK.as_bytes());
Ok(())
Expand All @@ -1268,7 +1272,10 @@ mod tests {
crc32c: Some(Crc32c::default()),
md5_hash: Some(Md5::default()),
});
assert_eq!(upload.spec.resource.and_then(|r| r.checksums), Some(want));
assert_eq!(
upload.request.spec.resource.and_then(|r| r.checksums),
Some(want)
);
Ok(())
}

Expand All @@ -1291,7 +1298,10 @@ mod tests {
// Note that the checksums do not match the data. This is intentional,
// we are trying to verify that whatever is provided in with_crc32c()
// and with_md5() is respected.
assert_eq!(upload.spec.resource.and_then(|r| r.checksums), Some(ck));
assert_eq!(
upload.request.spec.resource.and_then(|r| r.checksums),
Some(ck)
);

Ok(())
}
Expand Down Expand Up @@ -1320,7 +1330,10 @@ mod tests {
md5_hash: Some(Md5::default()),
})
.set_crc32c(ck.crc32c.unwrap());
assert_eq!(upload.spec.resource.and_then(|r| r.checksums), Some(want));
assert_eq!(
upload.request.spec.resource.and_then(|r| r.checksums),
Some(want)
);

Ok(())
}
Expand All @@ -1345,7 +1358,10 @@ mod tests {
// we are trying to verify that whatever is provided in with_known*()
// is respected.
let want = ck.clone();
assert_eq!(upload.spec.resource.and_then(|r| r.checksums), Some(want));
assert_eq!(
upload.request.spec.resource.and_then(|r| r.checksums),
Some(want)
);

Ok(())
}
Expand Down Expand Up @@ -1374,7 +1390,10 @@ mod tests {
md5_hash: None,
})
.set_md5_hash(ck.md5_hash.clone());
assert_eq!(upload.spec.resource.and_then(|r| r.checksums), Some(want));
assert_eq!(
upload.request.spec.resource.and_then(|r| r.checksums),
Some(want)
);

Ok(())
}
Expand All @@ -1400,7 +1419,10 @@ mod tests {
// we are trying to verify that whatever is provided in with_known*()
// is respected.
let want = ck.clone();
assert_eq!(upload.spec.resource.and_then(|r| r.checksums), Some(want));
assert_eq!(
upload.request.spec.resource.and_then(|r| r.checksums),
Some(want)
);

Ok(())
}
Expand All @@ -1425,7 +1447,10 @@ mod tests {
// we are trying to verify that whatever is provided in with_known*()
// is respected.
let want = ck.clone();
assert_eq!(upload.spec.resource.and_then(|r| r.checksums), Some(want));
assert_eq!(
upload.request.spec.resource.and_then(|r| r.checksums),
Some(want)
);

Ok(())
}
Expand Down
Loading