dentiny opened a new issue, #682:
URL: https://github.com/apache/arrow-rs-object-store/issues/682

   **Describe the bug**
   Hi team, IIRC, if we upload parts out of order, the parts received will be 
dropped.
   
https://github.com/apache/arrow-rs-object-store/blob/0fda34c5e0c00a7665649bd676c2d3d885ad3e20/src/memory.rs#L436-L438
   
   **To Reproduce**
   ```rust
   /// Test that MultipartStore::put_part works correctly when parts are
       /// uploaded out of order, which is explicitly permitted by the API 
contract.
       /// See [`MultipartStore::put_part`] docs: "Parts may be uploaded 
concurrently
       /// and in any order."
       #[tokio::test]
       async fn multipart_out_of_order_put_part() {
           use crate::multipart::MultipartStore;
   
           let store = InMemory::new();
           let path = Path::from("test_out_of_order");
   
           let upload_id = store.create_multipart(&path).await.unwrap();
   
           // Upload part 2 first (before parts 0 and 1)
           let part2_data = PutPayload::from(Bytes::from("part2"));
           let part2 = store
               .put_part(&path, &upload_id, 2, part2_data)
               .await
               .unwrap();
   
           // Then upload part 0
           let part0_data = PutPayload::from(Bytes::from("part0"));
           let part0 = store
               .put_part(&path, &upload_id, 0, part0_data)
               .await
               .unwrap();
   
           // Then upload part 1
           let part1_data = PutPayload::from(Bytes::from("part1"));
           let part1 = store
               .put_part(&path, &upload_id, 1, part1_data)
               .await
               .unwrap();
   
           // Complete the upload
           let result = store
               .complete_multipart(&path, &upload_id, vec![part0, part1, part2])
               .await
               .unwrap();
           assert!(result.e_tag.is_some(), "Expected e_tag in PutResult");
   
           // Verify the data was assembled correctly
           let data = store.get(&path).await.unwrap().bytes().await.unwrap();
           assert_eq!(data.as_ref(), b"part0part1part2");
       }
   ```
   
   **Expected behavior**
   Uploaded parts shouldn't be lost
   
   **Additional context**
   N/A


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to