409 interpreted for an update as "already exists"... That sounds very wrong...

On Fri, Aug 1, 2025 at 1:06 AM Dmitri Bourlatchkov <di...@apache.org> wrote:
>
> Hi Robert,
>
> > Isn't it okay to yield a HTTP/409 in this particular case
> (namespace properties) and let the user figure out the right values?
>
> Unfortunately, I do not think it would be ok. AFAIK, current Iceberg java
> code interprets 409 in this case as "namespace already exists" [1].
>
> I'm personally ok without retries on Namespace update collisions, however,
> I'd prefer to respond with 429 (Too Many Requests) in that case (as I
> mentioned earlier).
>
> [1]
> https://github.com/apache/iceberg/blob/b1c8bc589e0caae3d0a1649e354c44d0fb23759c/core/src/main/java/org/apache/iceberg/rest/ErrorHandlers.java#L184-L185
>
> Cheers,
> Dmitri.
>
> On Thu, Jul 31, 2025 at 11:03 AM Robert Stupp <sn...@snazy.de> wrote:
>
> > Having retries would be great.
> >
> > However, for namespace property updates, the situation is undefined,
> > because there are no "prerequisites" that have to be satisfied.
> > Say, you have two concurrent requests:
> > - One requests sets a=b
> > - Another request removes a
> > - Yet another request sets a=c
> > Technically it's perfectly valid to eventually have a=c, a=b or no a
> > in the namespace properties.
> >
> > I think concurrent property updates on namespaces are rather a rare
> > situation - but difficult to implement right. Is there a "right way",
> > considering there is no defined behavior?
> > Isn't it okay to yield a HTTP/409 in this particular case (namespace
> > properties) and let the user figure out the right values?
> >
> > Another aspect is how retries are implemented and configured, what are
> > reasonable default retry config options (number of retries, retry
> > interval, overall timeout, jitter, fair/unfair, etc). Spoiler: there's
> > already an implementation [1] heavily inspired by Nessie.
> > I'm all in to have a well defined and working retry mechanism for all
> > applicable requests, but it should be one mechanism. There is already
> > one specialized retry mechanism in
> > o.a.p.service.catalog.iceberg.IcebergCatalog, and a different
> > specialized one in
> > o.a.o.persistence.relational.jdbc.DatasourceOperations.
> >
> > API-level operations (think: something like a table update) "drive"
> > the total request timeout and all individual dependent operations
> > should ideally respect that. That's rather a mid/long term vision
> > though.
> >
> > [1]
> > https://github.com/snazy/polaris/tree/persistence-nosql/persistence/nosql/persistence/impl/src/main/java/org/apache/polaris/persistence/nosql/impl/commits/retry
> > + the parent package.
> >
> > On Tue, Jul 22, 2025 at 7:44 PM Dmitri Bourlatchkov <di...@apache.org>
> > wrote:
> > >
> > > Heads up: PR [1989] is proceeding without retries and with 409 response
> > codes.
> > >
> > > Please review if you have an opinion.
> > >
> > > [1989] https://github.com/apache/polaris/pull/1989
> > >
> > > Thanks,
> > > Dmitri.
> > >
> > > On 2025/07/16 15:15:19 "Rizzo Cascio, Fabio" wrote:
> > > > Hi all,
> > > >
> > > >
> > > >
> > > > While working on Issue #1390<
> > https://github.com/apache/polaris/issues/1390>, what initially seemed
> > like a quick fix has turned into a more complex problem. Following
> > Dimas-b's suggestion, I'm opening this up for a wider discussion.
> > > >
> > > > You can see the comments on my PR #1989<
> > https://github.com/apache/polaris/pull/1989>.
> > > >
> > > > I have a couple of questions:
> > > >
> > > >   1.  If multiple property updates are coming in concurrently and they
> > don't update the same key, should we merge the properties (entity coming in
> > the request and the entity refreshed) and make the update?
> > > >   2.  If multiple updates are coming in concurrently and they are
> > trying to update the same property key value, should we throw an exception?
> > What error code should we return?
> > > >
> > > > I look forward to your thoughts.
> > > >
> > > >
> > > >
> > > > Thanks,
> > > >
> > > >
> > > >
> > > > Fabio
> > > >
> > > > This message is confidential and subject to terms at:
> > https://www.jpmorgan.com/emaildisclaimer including on confidential,
> > privileged or legal entity information, malicious content and monitoring of
> > electronic messages. If you are not the intended recipient, please delete
> > this message and notify the sender immediately. Any unauthorized use is
> > strictly prohibited.
> > > >
> >

Reply via email to