Garage v0.9 #473
3 changed files with 20 additions and 5 deletions
|
@ -33,12 +33,13 @@ pub async fn handle_create_multipart_upload(
|
|||
key: &str,
|
||||
) -> Result<Response<Body>, Error> {
|
||||
let upload_id = gen_uuid();
|
||||
let timestamp = now_msec();
|
||||
let headers = get_headers(req.headers())?;
|
||||
|
||||
// Create object in object table
|
||||
let object_version = ObjectVersion {
|
||||
uuid: upload_id,
|
||||
timestamp: now_msec(),
|
||||
timestamp,
|
||||
state: ObjectVersionState::Uploading {
|
||||
multipart: true,
|
||||
headers,
|
||||
|
@ -50,7 +51,7 @@ pub async fn handle_create_multipart_upload(
|
|||
// Create multipart upload in mpu table
|
||||
// This multipart upload will hold references to uploaded parts
|
||||
// (which are entries in the Version table)
|
||||
let mpu = MultipartUpload::new(upload_id, bucket_id, key.into(), false);
|
||||
let mpu = MultipartUpload::new(upload_id, timestamp, bucket_id, key.into(), false);
|
||||
garage.mpu_table.insert(&mpu).await?;
|
||||
|
||||
// Send success response
|
||||
|
|
|
@ -27,6 +27,8 @@ mod v09 {
|
|||
/// Partition key = Upload id = UUID of the object version
|
||||
pub upload_id: Uuid,
|
||||
|
||||
/// The timestamp at which the multipart upload was created
|
||||
pub timestamp: u64,
|
||||
/// Is this multipart upload deleted
|
||||
/// The MultipartUpload is marked as deleted as soon as the
|
||||
/// multipart upload is either completed or aborted
|
||||
|
@ -85,9 +87,16 @@ impl PartialOrd for MpuPartKey {
|
|||
}
|
||||
|
||||
impl MultipartUpload {
|
||||
pub fn new(upload_id: Uuid, bucket_id: Uuid, key: String, deleted: bool) -> Self {
|
||||
pub fn new(
|
||||
upload_id: Uuid,
|
||||
timestamp: u64,
|
||||
bucket_id: Uuid,
|
||||
key: String,
|
||||
deleted: bool,
|
||||
) -> Self {
|
||||
Self {
|
||||
upload_id,
|
||||
timestamp,
|
||||
deleted: crdt::Bool::new(deleted),
|
||||
parts: crdt::Map::new(),
|
||||
bucket_id,
|
||||
|
|
|
@ -444,8 +444,13 @@ impl TableSchema for ObjectTable {
|
|||
),
|
||||
};
|
||||
if delete_mpu {
|
||||
let deleted_mpu =
|
||||
MultipartUpload::new(v.uuid, old_v.bucket_id, old_v.key.clone(), true);
|
||||
let deleted_mpu = MultipartUpload::new(
|
||||
v.uuid,
|
||||
v.timestamp,
|
||||
old_v.bucket_id,
|
||||
old_v.key.clone(),
|
||||
true,
|
||||
);
|
||||
let res = self.mpu_table.queue_insert(tx, &deleted_mpu);
|
||||
if let Err(e) = db::unabort(res)? {
|
||||
error!(
|
||||
|
|
Loading…
Reference in a new issue