This is an automated email from the ASF dual-hosted git repository.

fokko pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iceberg.git


The following commit(s) were added to refs/heads/main by this push:
     new b7de28e72e OpenAPI: Deprecate `snapshot-id` of `SetStatisticsUpdate` 
(#12010)
b7de28e72e is described below

commit b7de28e72ef8134f90105b869acb5f89b16803f0
Author: Christian <[email protected]>
AuthorDate: Mon Jan 27 13:03:30 2025 +0100

    OpenAPI: Deprecate `snapshot-id` of `SetStatisticsUpdate` (#12010)
    
    * Deprecate snapshot-id of SetStatisticsUpdate
    
    * update rest spec py
    
    * Update api/src/main/java/org/apache/iceberg/UpdateStatistics.java
    
    Co-authored-by: Eduard Tudenhoefner <[email protected]>
    
    * Fix typo, remove revapi change
    
    * Address comments
    
    * spotless
    
    * extend docstring
    
    ---------
    
    Co-authored-by: Eduard Tudenhoefner <[email protected]>
---
 .../main/java/org/apache/iceberg/UpdateStatistics.java  | 13 +++++++++++++
 .../main/java/org/apache/iceberg/MetadataUpdate.java    | 17 +++++++++++++----
 .../java/org/apache/iceberg/MetadataUpdateParser.java   |  3 +--
 .../src/main/java/org/apache/iceberg/SetStatistics.java | 15 ++++++++++++++-
 .../src/main/java/org/apache/iceberg/TableMetadata.java | 15 ++++++++++++++-
 .../org/apache/iceberg/TestMetadataUpdateParser.java    |  1 -
 open-api/rest-catalog-open-api.py                       |  6 +++++-
 open-api/rest-catalog-open-api.yaml                     |  5 ++++-
 8 files changed, 64 insertions(+), 11 deletions(-)

diff --git a/api/src/main/java/org/apache/iceberg/UpdateStatistics.java 
b/api/src/main/java/org/apache/iceberg/UpdateStatistics.java
index 6e367122dc..c595b16708 100644
--- a/api/src/main/java/org/apache/iceberg/UpdateStatistics.java
+++ b/api/src/main/java/org/apache/iceberg/UpdateStatistics.java
@@ -27,9 +27,22 @@ public interface UpdateStatistics extends 
PendingUpdate<List<StatisticsFile>> {
    * the snapshot if any exists.
    *
    * @return this for method chaining
+   * @deprecated since 1.8.0, will be removed 1.9.0 or 2.0.0, use {@link
+   *     #setStatistics(StatisticsFile)}.
    */
+  @Deprecated
   UpdateStatistics setStatistics(long snapshotId, StatisticsFile 
statisticsFile);
 
+  /**
+   * Set the table's statistics file for given snapshot, replacing the 
previous statistics file for
+   * the snapshot if any exists. The snapshot id of the statistics file will 
be used.
+   *
+   * @return this for method chaining
+   */
+  default UpdateStatistics setStatistics(StatisticsFile statisticsFile) {
+    throw new UnsupportedOperationException("Setting statistics is not 
supported");
+  }
+
   /**
    * Remove the table's statistics file for given snapshot.
    *
diff --git a/core/src/main/java/org/apache/iceberg/MetadataUpdate.java 
b/core/src/main/java/org/apache/iceberg/MetadataUpdate.java
index ff008c9d43..b76fcf9f01 100644
--- a/core/src/main/java/org/apache/iceberg/MetadataUpdate.java
+++ b/core/src/main/java/org/apache/iceberg/MetadataUpdate.java
@@ -231,16 +231,25 @@ public interface MetadataUpdate extends Serializable {
   }
 
   class SetStatistics implements MetadataUpdate {
-    private final long snapshotId;
     private final StatisticsFile statisticsFile;
 
+    /**
+     * Set statistics for a snapshot.
+     *
+     * @deprecated since 1.8.0, will be removed in 1.9.0 or 2.0.0, use
+     *     SetStatistics(statisticsFile).
+     */
+    @Deprecated
     public SetStatistics(long snapshotId, StatisticsFile statisticsFile) {
-      this.snapshotId = snapshotId;
+      this.statisticsFile = statisticsFile;
+    }
+
+    public SetStatistics(StatisticsFile statisticsFile) {
       this.statisticsFile = statisticsFile;
     }
 
     public long snapshotId() {
-      return snapshotId;
+      return statisticsFile.snapshotId();
     }
 
     public StatisticsFile statisticsFile() {
@@ -249,7 +258,7 @@ public interface MetadataUpdate extends Serializable {
 
     @Override
     public void applyTo(TableMetadata.Builder metadataBuilder) {
-      metadataBuilder.setStatistics(snapshotId, statisticsFile);
+      metadataBuilder.setStatistics(statisticsFile);
     }
   }
 
diff --git a/core/src/main/java/org/apache/iceberg/MetadataUpdateParser.java 
b/core/src/main/java/org/apache/iceberg/MetadataUpdateParser.java
index 08d4b3398f..6a6a34c92d 100644
--- a/core/src/main/java/org/apache/iceberg/MetadataUpdateParser.java
+++ b/core/src/main/java/org/apache/iceberg/MetadataUpdateParser.java
@@ -512,10 +512,9 @@ public class MetadataUpdateParser {
   }
 
   private static MetadataUpdate readSetStatistics(JsonNode node) {
-    long snapshotId = JsonUtil.getLong(SNAPSHOT_ID, node);
     JsonNode statisticsFileNode = JsonUtil.get(STATISTICS, node);
     StatisticsFile statisticsFile = 
StatisticsFileParser.fromJson(statisticsFileNode);
-    return new MetadataUpdate.SetStatistics(snapshotId, statisticsFile);
+    return new MetadataUpdate.SetStatistics(statisticsFile);
   }
 
   private static MetadataUpdate readRemoveStatistics(JsonNode node) {
diff --git a/core/src/main/java/org/apache/iceberg/SetStatistics.java 
b/core/src/main/java/org/apache/iceberg/SetStatistics.java
index 41c7254d6c..b5ec801e0a 100644
--- a/core/src/main/java/org/apache/iceberg/SetStatistics.java
+++ b/core/src/main/java/org/apache/iceberg/SetStatistics.java
@@ -32,10 +32,23 @@ public class SetStatistics implements UpdateStatistics {
     this.ops = ops;
   }
 
+  /**
+   * Set the statistics file for a snapshot.
+   *
+   * @deprecated since 1.8.0, will be removed in 1.9.0 or 2.0.0, use {@link
+   *     #setStatistics(StatisticsFile)}.
+   */
+  @Deprecated
   @Override
   public UpdateStatistics setStatistics(long snapshotId, StatisticsFile 
statisticsFile) {
     Preconditions.checkArgument(snapshotId == statisticsFile.snapshotId());
-    statisticsToSet.put(snapshotId, Optional.of(statisticsFile));
+    statisticsToSet.put(statisticsFile.snapshotId(), 
Optional.of(statisticsFile));
+    return this;
+  }
+
+  @Override
+  public UpdateStatistics setStatistics(StatisticsFile statisticsFile) {
+    statisticsToSet.put(statisticsFile.snapshotId(), 
Optional.of(statisticsFile));
     return this;
   }
 
diff --git a/core/src/main/java/org/apache/iceberg/TableMetadata.java 
b/core/src/main/java/org/apache/iceberg/TableMetadata.java
index 4ba3bdf8d7..a532ff00ee 100644
--- a/core/src/main/java/org/apache/iceberg/TableMetadata.java
+++ b/core/src/main/java/org/apache/iceberg/TableMetadata.java
@@ -1319,6 +1319,12 @@ public class TableMetadata implements Serializable {
       return this;
     }
 
+    /**
+     * Set a statistics file for a snapshot.
+     *
+     * @deprecated since 1.8.0, will be removed 1.9.0 or 2.0.0, use 
setStatistics(statisticsFile).
+     */
+    @Deprecated
     public Builder setStatistics(long snapshotId, StatisticsFile 
statisticsFile) {
       Preconditions.checkNotNull(statisticsFile, "statisticsFile is null");
       Preconditions.checkArgument(
@@ -1327,7 +1333,14 @@ public class TableMetadata implements Serializable {
           snapshotId,
           statisticsFile.snapshotId());
       statisticsFiles.put(statisticsFile.snapshotId(), 
ImmutableList.of(statisticsFile));
-      changes.add(new MetadataUpdate.SetStatistics(snapshotId, 
statisticsFile));
+      changes.add(new MetadataUpdate.SetStatistics(statisticsFile));
+      return this;
+    }
+
+    public Builder setStatistics(StatisticsFile statisticsFile) {
+      Preconditions.checkNotNull(statisticsFile, "statisticsFile is null");
+      statisticsFiles.put(statisticsFile.snapshotId(), 
ImmutableList.of(statisticsFile));
+      changes.add(new MetadataUpdate.SetStatistics(statisticsFile));
       return this;
     }
 
diff --git 
a/core/src/test/java/org/apache/iceberg/TestMetadataUpdateParser.java 
b/core/src/test/java/org/apache/iceberg/TestMetadataUpdateParser.java
index 6a65bf7628..1ce319a34e 100644
--- a/core/src/test/java/org/apache/iceberg/TestMetadataUpdateParser.java
+++ b/core/src/test/java/org/apache/iceberg/TestMetadataUpdateParser.java
@@ -783,7 +783,6 @@ public class TestMetadataUpdateParser {
     long snapshotId = 1940541653261589030L;
     MetadataUpdate expected =
         new MetadataUpdate.SetStatistics(
-            snapshotId,
             new GenericStatisticsFile(
                 snapshotId,
                 "s3://bucket/warehouse/stats.puffin",
diff --git a/open-api/rest-catalog-open-api.py 
b/open-api/rest-catalog-open-api.py
index f5632ad3ff..bd82d9be09 100644
--- a/open-api/rest-catalog-open-api.py
+++ b/open-api/rest-catalog-open-api.py
@@ -1028,7 +1028,11 @@ class Term(BaseModel):
 
 class SetStatisticsUpdate(BaseUpdate):
     action: str = Field('set-statistics', const=True)
-    snapshot_id: int = Field(..., alias='snapshot-id')
+    snapshot_id: Optional[int] = Field(
+        None,
+        alias='snapshot-id',
+        description='This optional field is **DEPRECATED for REMOVAL** since 
it contains redundant information. Clients should use the 
`statistics.snapshot-id` field instead.',
+    )
     statistics: StatisticsFile
 
 
diff --git a/open-api/rest-catalog-open-api.yaml 
b/open-api/rest-catalog-open-api.yaml
index 6a651d2b06..5994961adb 100644
--- a/open-api/rest-catalog-open-api.yaml
+++ b/open-api/rest-catalog-open-api.yaml
@@ -2886,7 +2886,6 @@ components:
       allOf:
         - $ref: '#/components/schemas/BaseUpdate'
       required:
-        - snapshot-id
         - statistics
       properties:
         action:
@@ -2895,6 +2894,10 @@ components:
         snapshot-id:
           type: integer
           format: int64
+          deprecated: true
+          description:
+            This optional field is **DEPRECATED for REMOVAL** since it 
contains redundant information.
+            Clients should use the `statistics.snapshot-id` field instead.
         statistics:
           $ref: '#/components/schemas/StatisticsFile'
 

Reply via email to