You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@iceberg.apache.org by GitBox <gi...@apache.org> on 2022/09/19 09:53:23 UTC

[GitHub] [iceberg] nastra opened a new pull request, #5792: API,Core: Add scan planning metrics for scanned/skipped delete manifests

nastra opened a new pull request, #5792:
URL: https://github.com/apache/iceberg/pull/5792

   This currently depends on https://github.com/apache/iceberg/pull/5788


-- 
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: issues-unsubscribe@iceberg.apache.org

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


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@iceberg.apache.org
For additional commands, e-mail: issues-help@iceberg.apache.org


[GitHub] [iceberg] nastra commented on a diff in pull request #5792: API,Core: Add scan planning metrics for scanned/skipped delete manifests

Posted by GitBox <gi...@apache.org>.
nastra commented on code in PR #5792:
URL: https://github.com/apache/iceberg/pull/5792#discussion_r976073076


##########
core/src/test/java/org/apache/iceberg/TestScanPlanningAndReporting.java:
##########
@@ -123,11 +129,86 @@ public void scanningWithDeletes() throws IOException {
     assertThat(scanReport.scanMetrics().resultDataFiles().value()).isEqualTo(3);
     assertThat(scanReport.scanMetrics().resultDeleteFiles().value()).isEqualTo(2);
     assertThat(scanReport.scanMetrics().scannedDataManifests().value()).isEqualTo(1);
+    assertThat(scanReport.scanMetrics().scannedDeleteManifests().value()).isEqualTo(1);
     assertThat(scanReport.scanMetrics().skippedDataManifests().value()).isEqualTo(0);
+    assertThat(scanReport.scanMetrics().skippedDeleteManifests().value()).isEqualTo(0);
     assertThat(scanReport.scanMetrics().totalDataManifests().value()).isEqualTo(1);
     assertThat(scanReport.scanMetrics().totalDeleteManifests().value()).isEqualTo(1);
     assertThat(scanReport.scanMetrics().totalFileSizeInBytes().value()).isEqualTo(30L);
     assertThat(scanReport.scanMetrics().totalDeleteFileSizeInBytes().value()).isEqualTo(20L);
+    assertThat(scanReport.scanMetrics().skippedDataFiles().value()).isEqualTo(0);
+    assertThat(scanReport.scanMetrics().skippedDeleteFiles().value()).isEqualTo(0);
+  }
+
+  @Test
+  public void scanningWithSkippedDataFiles() throws IOException {
+    String tableName = "scan-planning-with-skipped-data-files";
+    Table table =
+        TestTables.create(
+            tableDir, tableName, SCHEMA, SPEC, SortOrder.unsorted(), formatVersion, reporter);
+    table.newAppend().appendFile(FILE_A).appendFile(FILE_D).commit();
+    table.newAppend().appendFile(FILE_B).appendFile(FILE_C).commit();
+    TableScan tableScan = table.newScan();
+
+    try (CloseableIterable<FileScanTask> fileScanTasks =
+        tableScan.filter(Expressions.equal("data", "1")).planFiles()) {
+      fileScanTasks.forEach(task -> {});
+    }
+
+    ScanReport scanReport = reporter.lastReport();
+    assertThat(scanReport).isNotNull();
+    assertThat(scanReport.tableName()).isEqualTo(tableName);
+    assertThat(scanReport.snapshotId()).isEqualTo(2L);
+    assertThat(scanReport.scanMetrics().skippedDataFiles().value()).isEqualTo(1);
+    assertThat(scanReport.scanMetrics().skippedDeleteFiles().value()).isEqualTo(0);
+    assertThat(scanReport.scanMetrics().totalPlanningDuration().totalDuration())
+        .isGreaterThan(Duration.ZERO);
+    assertThat(scanReport.scanMetrics().resultDataFiles().value()).isEqualTo(1);
+    assertThat(scanReport.scanMetrics().resultDeleteFiles().value()).isEqualTo(0);
+    assertThat(scanReport.scanMetrics().scannedDataManifests().value()).isEqualTo(1);
+    assertThat(scanReport.scanMetrics().scannedDeleteManifests().value()).isEqualTo(0);
+    assertThat(scanReport.scanMetrics().skippedDataManifests().value()).isEqualTo(1);
+    assertThat(scanReport.scanMetrics().skippedDeleteManifests().value()).isEqualTo(0);
+    assertThat(scanReport.scanMetrics().totalDataManifests().value()).isEqualTo(2);
+    assertThat(scanReport.scanMetrics().totalDeleteManifests().value()).isEqualTo(0);
+    assertThat(scanReport.scanMetrics().totalFileSizeInBytes().value()).isEqualTo(10L);
+    assertThat(scanReport.scanMetrics().totalDeleteFileSizeInBytes().value()).isEqualTo(0L);
+  }
+
+  @Test
+  public void scanningWithSkippedDeleteFiles() throws IOException {
+    String tableName = "scan-planning-with-skipped-delete-files";
+    Table table =
+        TestTables.create(
+            tableDir, tableName, SCHEMA, SPEC, SortOrder.unsorted(), formatVersion, reporter);
+    table.newAppend().appendFile(FILE_A).appendFile(FILE_D).commit();
+    table.newRowDelta().addDeletes(FILE_A_DELETES).addDeletes(FILE_D2_DELETES).commit();
+    table.newRowDelta().addDeletes(FILE_B_DELETES).addDeletes(FILE_C2_DELETES).commit();
+    TableScan tableScan = table.newScan();
+
+    try (CloseableIterable<FileScanTask> fileScanTasks =
+        tableScan.filter(Expressions.equal("data", "1")).planFiles()) {
+      fileScanTasks.forEach(task -> {});
+    }
+
+    ScanReport scanReport = reporter.lastReport();
+    assertThat(scanReport).isNotNull();
+    assertThat(scanReport.tableName()).isEqualTo(tableName);
+    assertThat(scanReport.snapshotId()).isEqualTo(3L);
+    assertThat(scanReport.scanMetrics().totalPlanningDuration().totalDuration())
+        .isGreaterThan(Duration.ZERO);
+    assertThat(scanReport.scanMetrics().resultDataFiles().value()).isEqualTo(1);
+    assertThat(scanReport.scanMetrics().resultDeleteFiles().value()).isEqualTo(1);
+    assertThat(scanReport.scanMetrics().skippedDataFiles().value()).isEqualTo(1);
+    assertThat(scanReport.scanMetrics().skippedDeleteFiles().value()).isEqualTo(1);
+    assertThat(scanReport.scanMetrics().scannedDataManifests().value()).isEqualTo(1);
+    assertThat(scanReport.scanMetrics().scannedDeleteManifests().value()).isEqualTo(1);
+    assertThat(scanReport.scanMetrics().skippedDataManifests().value()).isEqualTo(0);
+    assertThat(scanReport.scanMetrics().skippedDeleteManifests().value()).isEqualTo(1);
+    assertThat(scanReport.scanMetrics().totalDataManifests().value()).isEqualTo(1);
+    assertThat(scanReport.scanMetrics().totalDeleteManifests().value()).isEqualTo(2);
+    assertThat(scanReport.scanMetrics().totalFileSizeInBytes().value()).isEqualTo(10L);
+    assertThat(scanReport.scanMetrics().totalDeleteFileSizeInBytes().value()).isEqualTo(10L);

Review Comment:
   makes sense, updated



-- 
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: issues-unsubscribe@iceberg.apache.org

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


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@iceberg.apache.org
For additional commands, e-mail: issues-help@iceberg.apache.org


[GitHub] [iceberg] rdblue merged pull request #5792: API,Core: Add scan planning metrics for scanned/skipped delete manifests

Posted by GitBox <gi...@apache.org>.
rdblue merged PR #5792:
URL: https://github.com/apache/iceberg/pull/5792


-- 
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: issues-unsubscribe@iceberg.apache.org

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


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@iceberg.apache.org
For additional commands, e-mail: issues-help@iceberg.apache.org


[GitHub] [iceberg] gaborkaszab commented on pull request #5792: API,Core: Add scan planning metrics for scanned/skipped delete manifests

Posted by GitBox <gi...@apache.org>.
gaborkaszab commented on PR #5792:
URL: https://github.com/apache/iceberg/pull/5792#issuecomment-1253662716

   LGTM. Looks way better with these Immutable metrics classes.


-- 
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: issues-unsubscribe@iceberg.apache.org

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


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@iceberg.apache.org
For additional commands, e-mail: issues-help@iceberg.apache.org


[GitHub] [iceberg] nastra commented on a diff in pull request #5792: API,Core: Add scan planning metrics for scanned/skipped delete manifests

Posted by GitBox <gi...@apache.org>.
nastra commented on code in PR #5792:
URL: https://github.com/apache/iceberg/pull/5792#discussion_r975544991


##########
core/src/test/java/org/apache/iceberg/metrics/TestScanMetricsResultParser.java:
##########
@@ -61,15 +64,39 @@ public void missingFields() {
                 "{\"total-planning-duration\":{\"count\":3,\"time-unit\":\"hours\",\"total-duration\":10}}"))
         .isEqualTo(
             new ScanMetricsResult(
-                totalPlanningDuration, null, null, null, null, null, null, null, null));
+                totalPlanningDuration,
+                null,
+                null,
+                null,
+                null,
+                null,
+                null,
+                null,
+                null,
+                null,
+                null,
+                null,

Review Comment:
   I completely agree with your observation, since it just adds visual noise. In fact https://github.com/apache/iceberg/pull/5780 will provide exactly that functionality out of the box. I'm planning to get https://github.com/apache/iceberg/pull/5780 first in and then I'll be rebasing this PR.



-- 
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: issues-unsubscribe@iceberg.apache.org

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


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@iceberg.apache.org
For additional commands, e-mail: issues-help@iceberg.apache.org


[GitHub] [iceberg] amogh-jahagirdar commented on a diff in pull request #5792: API,Core: Add scan planning metrics for scanned/skipped delete manifests

Posted by GitBox <gi...@apache.org>.
amogh-jahagirdar commented on code in PR #5792:
URL: https://github.com/apache/iceberg/pull/5792#discussion_r974423954


##########
core/src/test/java/org/apache/iceberg/TestScanPlanningAndReporting.java:
##########
@@ -123,11 +129,86 @@ public void scanningWithDeletes() throws IOException {
     assertThat(scanReport.scanMetrics().resultDataFiles().value()).isEqualTo(3);
     assertThat(scanReport.scanMetrics().resultDeleteFiles().value()).isEqualTo(2);
     assertThat(scanReport.scanMetrics().scannedDataManifests().value()).isEqualTo(1);
+    assertThat(scanReport.scanMetrics().scannedDeleteManifests().value()).isEqualTo(1);
     assertThat(scanReport.scanMetrics().skippedDataManifests().value()).isEqualTo(0);
+    assertThat(scanReport.scanMetrics().skippedDeleteManifests().value()).isEqualTo(0);
     assertThat(scanReport.scanMetrics().totalDataManifests().value()).isEqualTo(1);
     assertThat(scanReport.scanMetrics().totalDeleteManifests().value()).isEqualTo(1);
     assertThat(scanReport.scanMetrics().totalFileSizeInBytes().value()).isEqualTo(30L);
     assertThat(scanReport.scanMetrics().totalDeleteFileSizeInBytes().value()).isEqualTo(20L);
+    assertThat(scanReport.scanMetrics().skippedDataFiles().value()).isEqualTo(0);
+    assertThat(scanReport.scanMetrics().skippedDeleteFiles().value()).isEqualTo(0);
+  }
+
+  @Test
+  public void scanningWithSkippedDataFiles() throws IOException {
+    String tableName = "scan-planning-with-skipped-data-files";
+    Table table =
+        TestTables.create(
+            tableDir, tableName, SCHEMA, SPEC, SortOrder.unsorted(), formatVersion, reporter);
+    table.newAppend().appendFile(FILE_A).appendFile(FILE_D).commit();
+    table.newAppend().appendFile(FILE_B).appendFile(FILE_C).commit();
+    TableScan tableScan = table.newScan();
+
+    try (CloseableIterable<FileScanTask> fileScanTasks =
+        tableScan.filter(Expressions.equal("data", "1")).planFiles()) {
+      fileScanTasks.forEach(task -> {});
+    }
+
+    ScanReport scanReport = reporter.lastReport();
+    assertThat(scanReport).isNotNull();
+    assertThat(scanReport.tableName()).isEqualTo(tableName);
+    assertThat(scanReport.snapshotId()).isEqualTo(2L);
+    assertThat(scanReport.scanMetrics().skippedDataFiles().value()).isEqualTo(1);
+    assertThat(scanReport.scanMetrics().skippedDeleteFiles().value()).isEqualTo(0);
+    assertThat(scanReport.scanMetrics().totalPlanningDuration().totalDuration())
+        .isGreaterThan(Duration.ZERO);
+    assertThat(scanReport.scanMetrics().resultDataFiles().value()).isEqualTo(1);
+    assertThat(scanReport.scanMetrics().resultDeleteFiles().value()).isEqualTo(0);
+    assertThat(scanReport.scanMetrics().scannedDataManifests().value()).isEqualTo(1);
+    assertThat(scanReport.scanMetrics().scannedDeleteManifests().value()).isEqualTo(0);
+    assertThat(scanReport.scanMetrics().skippedDataManifests().value()).isEqualTo(1);
+    assertThat(scanReport.scanMetrics().skippedDeleteManifests().value()).isEqualTo(0);
+    assertThat(scanReport.scanMetrics().totalDataManifests().value()).isEqualTo(2);
+    assertThat(scanReport.scanMetrics().totalDeleteManifests().value()).isEqualTo(0);
+    assertThat(scanReport.scanMetrics().totalFileSizeInBytes().value()).isEqualTo(10L);
+    assertThat(scanReport.scanMetrics().totalDeleteFileSizeInBytes().value()).isEqualTo(0L);
+  }
+
+  @Test
+  public void scanningWithSkippedDeleteFiles() throws IOException {
+    String tableName = "scan-planning-with-skipped-delete-files";
+    Table table =
+        TestTables.create(
+            tableDir, tableName, SCHEMA, SPEC, SortOrder.unsorted(), formatVersion, reporter);
+    table.newAppend().appendFile(FILE_A).appendFile(FILE_D).commit();
+    table.newRowDelta().addDeletes(FILE_A_DELETES).addDeletes(FILE_D2_DELETES).commit();
+    table.newRowDelta().addDeletes(FILE_B_DELETES).addDeletes(FILE_C2_DELETES).commit();
+    TableScan tableScan = table.newScan();
+
+    try (CloseableIterable<FileScanTask> fileScanTasks =
+        tableScan.filter(Expressions.equal("data", "1")).planFiles()) {
+      fileScanTasks.forEach(task -> {});
+    }
+
+    ScanReport scanReport = reporter.lastReport();
+    assertThat(scanReport).isNotNull();
+    assertThat(scanReport.tableName()).isEqualTo(tableName);
+    assertThat(scanReport.snapshotId()).isEqualTo(3L);
+    assertThat(scanReport.scanMetrics().totalPlanningDuration().totalDuration())
+        .isGreaterThan(Duration.ZERO);
+    assertThat(scanReport.scanMetrics().resultDataFiles().value()).isEqualTo(1);
+    assertThat(scanReport.scanMetrics().resultDeleteFiles().value()).isEqualTo(1);
+    assertThat(scanReport.scanMetrics().skippedDataFiles().value()).isEqualTo(1);
+    assertThat(scanReport.scanMetrics().skippedDeleteFiles().value()).isEqualTo(1);
+    assertThat(scanReport.scanMetrics().scannedDataManifests().value()).isEqualTo(1);
+    assertThat(scanReport.scanMetrics().scannedDeleteManifests().value()).isEqualTo(1);
+    assertThat(scanReport.scanMetrics().skippedDataManifests().value()).isEqualTo(0);
+    assertThat(scanReport.scanMetrics().skippedDeleteManifests().value()).isEqualTo(1);
+    assertThat(scanReport.scanMetrics().totalDataManifests().value()).isEqualTo(1);
+    assertThat(scanReport.scanMetrics().totalDeleteManifests().value()).isEqualTo(2);
+    assertThat(scanReport.scanMetrics().totalFileSizeInBytes().value()).isEqualTo(10L);
+    assertThat(scanReport.scanMetrics().totalDeleteFileSizeInBytes().value()).isEqualTo(10L);

Review Comment:
   Nit: IMO feels more readable if scanReport.scanMetrics() is a separate variable.



-- 
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: issues-unsubscribe@iceberg.apache.org

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


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@iceberg.apache.org
For additional commands, e-mail: issues-help@iceberg.apache.org


[GitHub] [iceberg] gaborkaszab commented on a diff in pull request #5792: API,Core: Add scan planning metrics for scanned/skipped delete manifests

Posted by GitBox <gi...@apache.org>.
gaborkaszab commented on code in PR #5792:
URL: https://github.com/apache/iceberg/pull/5792#discussion_r975513880


##########
core/src/test/java/org/apache/iceberg/metrics/TestScanMetricsResultParser.java:
##########
@@ -61,15 +64,39 @@ public void missingFields() {
                 "{\"total-planning-duration\":{\"count\":3,\"time-unit\":\"hours\",\"total-duration\":10}}"))
         .isEqualTo(
             new ScanMetricsResult(
-                totalPlanningDuration, null, null, null, null, null, null, null, null));
+                totalPlanningDuration,
+                null,
+                null,
+                null,
+                null,
+                null,
+                null,
+                null,
+                null,
+                null,
+                null,
+                null,

Review Comment:
   It's just loosely related but as the number of metrics grow this constructor gets longer and longer. Would it make sense to have a ScanMetricsResultBuilder that has a with...() function to set its fields?
   
   If it makes sense I can give it a try to implement that in a separate PR.



-- 
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: issues-unsubscribe@iceberg.apache.org

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


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@iceberg.apache.org
For additional commands, e-mail: issues-help@iceberg.apache.org


[GitHub] [iceberg] rdblue commented on a diff in pull request #5792: API,Core: Add scan planning metrics for scanned/skipped delete manifests

Posted by GitBox <gi...@apache.org>.
rdblue commented on code in PR #5792:
URL: https://github.com/apache/iceberg/pull/5792#discussion_r984024379


##########
api/src/main/java/org/apache/iceberg/metrics/ScanReport.java:
##########
@@ -226,6 +236,16 @@ public Counter skippedDeleteFiles() {
       return metricsContext().counter(SKIPPED_DELETE_FILES, MetricsContext.Unit.COUNT);
     }
 
+    @Value.Derived
+    public Counter scannedDeleteManifests() {
+      return metricsContext().counter(SCANNED_DELETE_MANIFESTS, MetricsContext.Unit.COUNT);

Review Comment:
   Maybe we should make `COUNT` the default



-- 
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: issues-unsubscribe@iceberg.apache.org

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


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@iceberg.apache.org
For additional commands, e-mail: issues-help@iceberg.apache.org


[GitHub] [iceberg] rdblue commented on pull request #5792: API,Core: Add scan planning metrics for scanned/skipped delete manifests

Posted by GitBox <gi...@apache.org>.
rdblue commented on PR #5792:
URL: https://github.com/apache/iceberg/pull/5792#issuecomment-1262826147

   Thanks, @nastra! Looks great.


-- 
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: issues-unsubscribe@iceberg.apache.org

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


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@iceberg.apache.org
For additional commands, e-mail: issues-help@iceberg.apache.org


[GitHub] [iceberg] nastra commented on a diff in pull request #5792: API,Core: Add scan planning metrics for scanned/skipped delete manifests

Posted by GitBox <gi...@apache.org>.
nastra commented on code in PR #5792:
URL: https://github.com/apache/iceberg/pull/5792#discussion_r976073854


##########
core/src/test/java/org/apache/iceberg/metrics/TestScanMetricsResultParser.java:
##########
@@ -61,15 +64,39 @@ public void missingFields() {
                 "{\"total-planning-duration\":{\"count\":3,\"time-unit\":\"hours\",\"total-duration\":10}}"))
         .isEqualTo(
             new ScanMetricsResult(
-                totalPlanningDuration, null, null, null, null, null, null, null, null));
+                totalPlanningDuration,
+                null,
+                null,
+                null,
+                null,
+                null,
+                null,
+                null,
+                null,
+                null,
+                null,
+                null,

Review Comment:
   should be fixed now



-- 
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: issues-unsubscribe@iceberg.apache.org

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


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@iceberg.apache.org
For additional commands, e-mail: issues-help@iceberg.apache.org


[GitHub] [iceberg] gaborkaszab commented on a diff in pull request #5792: API,Core: Add scan planning metrics for scanned/skipped delete manifests

Posted by GitBox <gi...@apache.org>.
gaborkaszab commented on code in PR #5792:
URL: https://github.com/apache/iceberg/pull/5792#discussion_r975513880


##########
core/src/test/java/org/apache/iceberg/metrics/TestScanMetricsResultParser.java:
##########
@@ -61,15 +64,39 @@ public void missingFields() {
                 "{\"total-planning-duration\":{\"count\":3,\"time-unit\":\"hours\",\"total-duration\":10}}"))
         .isEqualTo(
             new ScanMetricsResult(
-                totalPlanningDuration, null, null, null, null, null, null, null, null));
+                totalPlanningDuration,
+                null,
+                null,
+                null,
+                null,
+                null,
+                null,
+                null,
+                null,
+                null,
+                null,
+                null,

Review Comment:
   It's just loosely related but as the number of metrics grow this constructor gets longer and longer. Would it make sense to have a ScanMetricsResultBuilder that has a with...() function to set its fields?
   Or even a Builder isn't needed just to give the ScanMetricsResult a constructor without parameters and then set it's fields on demand.
   
   If it makes sense I can implement that in a separate PR.



-- 
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: issues-unsubscribe@iceberg.apache.org

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


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@iceberg.apache.org
For additional commands, e-mail: issues-help@iceberg.apache.org