anoopj commented on code in PR #2922:
URL: https://github.com/apache/iceberg-rust/pull/2922#discussion_r3686841217
##########
crates/iceberg/src/spec/manifest_list/manifest_file.rs:
##########
@@ -195,8 +195,61 @@ impl ManifestFile {
entry.inherit_data(self);
}
+ self.assign_first_row_ids(&mut entries)?;
+
Ok(Manifest::new(metadata, entries))
}
+
+ /// Assigns `first_row_id` to data-file entries that do not already have
one,
+ /// starting from the manifest-level `first_row_id` and advancing by each
+ /// entry's record count. See the row-lineage inheritance rules in
+ ///
<https://github.com/apache/iceberg/blob/main/format/spec.md#first-row-id-inheritance>.
+ fn assign_first_row_ids(&self, entries: &mut [ManifestEntry]) ->
Result<()> {
+ let Some(manifest_first_row_id) = self.first_row_id else {
Review Comment:
Good catch. Added the null-clearing path: on a data manifest with no
manifest-level \`first_row_id\`, each entry's \`first_row_id\` is set to
\`None\`. This is Java's committed \`idAssigner\` branch. Note the
\`!isCommitted\` branch (preserve for uncommitted merges) has no equivalent
here \`load_manifest\` is only ever a committed read path in iceberg-rust; the
uncommitted case is write-side (\`MergingSnapshotProducer\`), which we don't go
through. Covered by
\`test_assign_first_row_ids_clears_without_manifest_first_row_id\`.
--
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]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]