klion26 commented on code in PR #7935:
URL: https://github.com/apache/arrow-rs/pull/7935#discussion_r2217808710


##########
parquet-variant/src/builder.rs:
##########
@@ -1317,7 +1414,15 @@ impl<'a> ObjectBuilder<'a> {
 /// This is to ensure that the object is always finalized before its parent 
builder
 /// is finalized.
 impl Drop for ObjectBuilder<'_> {
-    fn drop(&mut self) {}
+    fn drop(&mut self) {
+        // truncate the buffer if the `finish` method has not been called.
+        if !self.has_been_finished {
+            self.parent_state
+                .buffer()
+                .inner_mut()
+                .truncate(self.object_start_offset);
+        }

Review Comment:
   Seems that in previous pr #7865, some logics want to cover that the metadata 
hasn't been rolled back in tests like 
`test_list_builder_to_object_builder_inner_no_finish`, do we need to roll back 
the `MetadataBuilder` here? 
   
   ```
           // The parent list should only contain the original values
           list_builder.finish();
           let (metadata, value) = builder.finish();
           let metadata = VariantMetadata::try_new(&metadata).unwrap();
           assert_eq!(metadata.len(), 1);
           assert_eq!(&metadata[0], "name"); // not rolled back
   ```
   
   I updated this into a separate commit, we can keep it or revert it easily.
   
   IIUC, the `Metadata` can be rolled back because the object has not been 
written successfully, but not sure if there are any cases I did not follow here.



-- 
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: github-unsubscr...@arrow.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to