This is an automated email from the ASF dual-hosted git repository.
github-actions[bot] pushed a commit to branch gh-pages
in repository https://gitbox.apache.org/repos/asf/iceberg-go.git
The following commit(s) were added to refs/heads/gh-pages by this push:
new 3252ee459 deploy: c37ed1a8401c325fbc3291a04360a2686dd939d8
3252ee459 is described below
commit 3252ee4594856ba7ed46e436d317d6b7550f5317
Author: zeroshade <[email protected]>
AuthorDate: Mon Nov 2 20:31:27 2026 +0000
deploy: c37ed1a8401c325fbc3291a04360a2686dd939d8
---
concurrent-writes.html | 6 ++++++
print.html | 9 +++++++++
releases.html | 3 +++
searchindex.js | 2 +-
searchindex.json | 2 +-
5 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/concurrent-writes.html b/concurrent-writes.html
index 389677b2c..ba91b2d3f 100644
--- a/concurrent-writes.html
+++ b/concurrent-writes.html
@@ -266,8 +266,14 @@ case errors.Is(err, table.ErrCommitDiverged),
errors.Is(err, table.ErrTransactio
// unrecoverable: rebuild the operation from the latest table
case errors.Is(err, table.ErrCommitFailed):
// retriable: refresh and try again (the retry loop does this for you)
+case errors.Is(err, table.ErrCommitRejected):
+ // the catalog wrote nothing: fix the cause, then call Commit again
}
</code></pre>
+<p>A commit can also fail with <code>table.ErrCommitRejected</code>, which
means the catalog
+rejected it before writing anything, for example an update the catalog can't
+apply or a REST 400, 401, 403 or 404. The commit is not retried, and the
+transaction can still be committed.</p>
<h2 id="isolation-levels"><a class="header" href="#isolation-levels">Isolation
levels</a></h2>
<p>Delete and update operations are validated under an isolation level, set per
operation through table properties:</p>
diff --git a/print.html b/print.html
index 8d73ef6c9..188c4b1d5 100644
--- a/print.html
+++ b/print.html
@@ -2018,8 +2018,14 @@ case errors.Is(err, table.ErrCommitDiverged),
errors.Is(err, table.ErrTransactio
// unrecoverable: rebuild the operation from the latest table
case errors.Is(err, table.ErrCommitFailed):
// retriable: refresh and try again (the retry loop does this for you)
+case errors.Is(err, table.ErrCommitRejected):
+ // the catalog wrote nothing: fix the cause, then call Commit again
}
</code></pre>
+<p>A commit can also fail with <code>table.ErrCommitRejected</code>, which
means the catalog
+rejected it before writing anything, for example an update the catalog can't
+apply or a REST 400, 401, 403 or 404. The commit is not retried, and the
+transaction can still be committed.</p>
<h2 id="isolation-levels"><a class="header" href="#isolation-levels">Isolation
levels</a></h2>
<p>Delete and update operations are validated under an isolation level, set per
operation through table properties:</p>
@@ -2778,6 +2784,9 @@ make integration-external-rest
<li>
<p><strong>In and NotIn follow SQL semantics for NULL.</strong> A multi-valued
<code>NotIn</code>, <code>NOT(In(...))</code> and <code>NOT(NotIn(...))</code>
no longer match rows where the column is NULL, consistent with
<code>NotEqual</code>. A predicate under NOT on a column missing from an older
data file no longer matches every row of that file; those rows match as a
stored NULL would. Java's <code>Evaluator</code> still matches NULL for
<code>notEq</code> and <code>notIn</code>, see [...]
</li>
+<li>
+<p><strong>Commit rejections now match
<code>table.ErrCommitRejected</code>.</strong> SQL, Glue, Hive and Hadoop
failures while preparing metadata, plus REST commit responses 400, 401, 403 and
404, leave transactions committable (after a REST 404, the next
<code>Commit</code> fails when it reloads the table). Existing
<code>errors.Is</code> matches keep working, but SQL, Glue, Hive and Hadoop
rejection messages now start with <code>commit rejected: </code>, so code that
matches error tex [...]
+</li>
</ul>
<h2 id="verifying-and-producing-releases"><a class="header"
href="#verifying-and-producing-releases">Verifying and producing
releases</a></h2>
<p>If you are validating an RC or cutting a new release, see:</p>
diff --git a/releases.html b/releases.html
index 2e4d63b4f..55d6b4707 100644
--- a/releases.html
+++ b/releases.html
@@ -381,6 +381,9 @@
<li>
<p><strong>In and NotIn follow SQL semantics for NULL.</strong> A multi-valued
<code>NotIn</code>, <code>NOT(In(...))</code> and <code>NOT(NotIn(...))</code>
no longer match rows where the column is NULL, consistent with
<code>NotEqual</code>. A predicate under NOT on a column missing from an older
data file no longer matches every row of that file; those rows match as a
stored NULL would. Java's <code>Evaluator</code> still matches NULL for
<code>notEq</code> and <code>notIn</code>, see [...]
</li>
+<li>
+<p><strong>Commit rejections now match
<code>table.ErrCommitRejected</code>.</strong> SQL, Glue, Hive and Hadoop
failures while preparing metadata, plus REST commit responses 400, 401, 403 and
404, leave transactions committable (after a REST 404, the next
<code>Commit</code> fails when it reloads the table). Existing
<code>errors.Is</code> matches keep working, but SQL, Glue, Hive and Hadoop
rejection messages now start with <code>commit rejected: </code>, so code that
matches error tex [...]
+</li>
</ul>
<h2 id="verifying-and-producing-releases"><a class="header"
href="#verifying-and-producing-releases">Verifying and producing
releases</a></h2>
<p>If you are validating an RC or cutting a new release, see:</p>
diff --git a/searchindex.js b/searchindex.js
index 49f6710a4..f9dd4e3fa 100644
--- a/searchindex.js
+++ b/searchindex.js
@@ -1 +1 @@
-Object.assign(window.search,
{"doc_urls":["introduction.html#iceberg-go","introduction.html#where-to-start","introduction.html#what-works-today","introduction.html#beyond-go","introduction.html#help-and-contribution","install.html#install","install.html#requirements","install.html#installation","getting-started.html#getting-started","getting-started.html#1-install","getting-started.html#2-open-a-local-catalog","getting-started.html#3-create-a-namespace-and-a-table","getting-started.html#
[...]
\ No newline at end of file
+Object.assign(window.search,
{"doc_urls":["introduction.html#iceberg-go","introduction.html#where-to-start","introduction.html#what-works-today","introduction.html#beyond-go","introduction.html#help-and-contribution","install.html#install","install.html#requirements","install.html#installation","getting-started.html#getting-started","getting-started.html#1-install","getting-started.html#2-open-a-local-catalog","getting-started.html#3-create-a-namespace-and-a-table","getting-started.html#
[...]
\ No newline at end of file
diff --git a/searchindex.json b/searchindex.json
index 12120894b..955995e57 100644
--- a/searchindex.json
+++ b/searchindex.json
@@ -1 +1 @@
-{"doc_urls":["introduction.html#iceberg-go","introduction.html#where-to-start","introduction.html#what-works-today","introduction.html#beyond-go","introduction.html#help-and-contribution","install.html#install","install.html#requirements","install.html#installation","getting-started.html#getting-started","getting-started.html#1-install","getting-started.html#2-open-a-local-catalog","getting-started.html#3-create-a-namespace-and-a-table","getting-started.html#4-write-some-arrow-data","get
[...]
\ No newline at end of file
+{"doc_urls":["introduction.html#iceberg-go","introduction.html#where-to-start","introduction.html#what-works-today","introduction.html#beyond-go","introduction.html#help-and-contribution","install.html#install","install.html#requirements","install.html#installation","getting-started.html#getting-started","getting-started.html#1-install","getting-started.html#2-open-a-local-catalog","getting-started.html#3-create-a-namespace-and-a-table","getting-started.html#4-write-some-arrow-data","get
[...]
\ No newline at end of file