Hi all, > work done by AWS on this that resulted in the fine-grained commits proposal. > The idea there was to send the changes that the client is making to the > content-metadata tree to the service.
Agree that this is the way to go and I propose to start with this and then see if and what else is needed. Robert On Thu, Jul 10, 2025 at 5:24 AM Eric Maynard <eric.w.mayn...@gmail.com> wrote: > > Hey Ryan, that's exactly the intent. If the Iceberg REST protocol itself > can provide a way for clients to express which commits (or which aspects of > commits) can be reconciled with which other commits then I think that would > be ideal. Beyond reconciliation, I think fine-grained commits are just a > good idea. I'm keen to explore this approach further on the Iceberg side. > > As for Polaris itself, my intent was to explore a simple way that clients > could label two commits as "mutually reconcilable", and to consent to the > risk associated with blind deconfliction. This would move us away from the > current state ("blind rejection", I suppose) and might help incrementalize > the move towards richer deconfliction logic. But if Iceberg itself can > alternatively help us get there with fine-grained commits just as easily, > my vote would be to pursue that instead. > > --EM > > > > On Wed, Jul 9, 2025 at 2:07 PM Ryan Blue <rdb...@gmail.com> wrote: > > > I think there's a better way to achieve the results that this proposal is > > aiming for. If I understand correctly, this is trying to create a way for > > Polaris to be able to apply changes from one commit on top of another > > without sending a commit conflict back to the client. Parallel appends are > > the primary example of this being safe, but not something that the service > > can handle. > > > > I would recommend taking a look at the work done by AWS on this that > > resulted in the fine-grained commits proposal. The idea there was to send > > the changes that the client is making to the content-metadata tree to the > > service. That would also pass finer-grained validations/assertions that > > enable the service to know when changes can be safely applied, even when > > another writer has committed first. I think that's a better strategy and > > would love to see it in the Iceberg REST protocol. > > > > Taking that approach, this would allow clients to have a way to tell the > > service _what_ conflicts, not just tell the service what won't and let the > > service blindly apply changes. That reduces risk (no need to apply changes > > blindly) while also making this more valuable because it doesn't require > > user involvement across jobs and would be useful to all REST service > > implementations. > > > > Ryan > > > > On Tue, Jul 8, 2025 at 5:10 PM Dmitri Bourlatchkov <di...@apache.org> > > wrote: > > > > > The general feature of allowing clients to declare that they take > > > responsibility for overwriting each other's change is fine from my POV. > > As > > > previous messages point out there are use cases for it. > > > > > > However, the term "deconfliction" does not sound perfect to me in this > > > case. From my POV deconfliction means some deliberate action on the > > > metadata taken by the Polaris Server in order to resolve / reconcile > > > conflicting changes submitted by clients. > > > > > > Do you think we could treat these use cases as different features for the > > > sake of clarity? I can see some users being potentially confused by this > > > (as I was). > > > > > > For example, to implement preemptive conflict resolution (one party wins) > > > we probably need to define means for clients / engines to declare > > relative > > > priorities and elect to participate in this feature (the proposed > > headers). > > > However, append/append resolution may not necessarily fall under the same > > > election flag. That is, clients allowing (future) append/append > > resolution > > > may not want to allow preemptive resolution. WDYT? > > > > > > I'm +1 to evolving Polartis to be able to properly support real conflict > > > resolution (starting with append/append conflicts). > > > > > > Cheers, > > > Dmitri. > > > > > > On Tue, Jul 8, 2025 at 12:58 PM Eric Maynard <eric.w.mayn...@gmail.com> > > > wrote: > > > > > > > Hi all, > > > > > > > > What Russel wrote in (2) is correct -- this will essentially be a > > > > best-effort deconfliction, but my hope is that we can expand the > > > supported > > > > cases over time. It may be helpful to make a distinction between > > commits > > > > which are "eligible for deconfliction" from commits that "the server > > > knows > > > > how to successfully deconflict". The proposal pertains to the former, > > but > > > > I'm hoping the draft implementation I publish soon will help clarify > > the > > > > latter. My plan is to focus on append-only commits first. > > > > > > > > Dmitri, as with all commits the server will write the final > > metadata.json > > > > content. As for how it does so, it will vary a bit based on the nature > > of > > > > the conflicting commits, but the general idea is that the commits have > > > > consented to deconfliction by the server. So in Robert's example both > > > > snapshots should be preserved, but the commits have given the server > > > > license to decide which of those should be the *latest* snapshot after > > > > deconfliction. > > > > > > > > --EM > > > > > > > > On Tue, Jul 8, 2025 at 9:13 AM Russell Spitzer < > > > russell.spit...@gmail.com> > > > > wrote: > > > > > > > > > For me there are two big use cases for this: > > > > > > > > > > 1. Simple overwrite. > > > > > I may have several jobs, for example one that does TTL , the command > > it > > > > > runs is idempotent and always deletes all rows / files before a > > certain > > > > > point. The other is a merge/update command. In this situation I don't > > > > even > > > > > need to reconcile, I always want the merge to succeed because it is > > > more > > > > > expensive while my delete is very cheap and not that important. (A > > > > > subsequent TTL delete run will remove the records so as long as I > > don't > > > > > have constant conflicts everything is fine.) > > > > > > > > > > For example I may have a very complicated and long GDPR job that > > > > modifies a > > > > > lot of data and then a TTL job that removes rows before a certain > > point > > > > in > > > > > time (as well as appends and other things going on). The TTL Job can > > > > always > > > > > be sacrificed for the GDPR job. > > > > > > > > > > 2. Actual Deconfliction > > > > > In this case I just want to do a cheap very of the deconfliction that > > > > would > > > > > eventually happen on the client side, i.e. without any filters. In > > case > > > > of > > > > > conflict I open up my previous manifest list and the one in the new > > > > > TableUpdate and create a new Update that contains a combined manifest > > > > list > > > > > with the added entries from the conflicting manifest list in my > > > current. > > > > > This is more complicated to perform but we can do it relatively > > easily > > > > for > > > > > jobs that just modify the manifest list itself. For more complicated > > > > > situations (a manifest which is being removed has already been > > removed) > > > > we > > > > > would have to actually dig into manifests or just fail. I would > > > probably > > > > > start by only tackling the case in which the manifest level > > > modifications > > > > > can be isolated and allowing the user to pass along the tag basically > > > > > stating that the changes cannot conflict. > > > > > > > > > > Being able to start doing this kind of work on the Catalog side is > > > going > > > > to > > > > > be important once we ever get Fine Grained Commits into the Iceberg > > > Rest > > > > > spec so experimenting with the ideas now I think is important. > > > > > > > > > > On Tue, Jul 8, 2025 at 9:21 AM Dmitri Bourlatchkov <di...@apache.org > > > > > > > > wrote: > > > > > > > > > > > Hi Eric, > > > > > > > > > > > > Just to clarify: Are you proposing Polaris Server to reconcile > > > metadata > > > > > > changes from two conflicting commit requests or are you proposing > > the > > > > > > clients to do that? > > > > > > > > > > > > In other words, who will make the final metadata JSON? Clients (and > > > the > > > > > > server merely commits it) or the Polaris Server itself (modifying > > > what > > > > > the > > > > > > clients submitted)? > > > > > > > > > > > > Sorry, I'm a bit lost on that point based on the current doc text. > > > > > > > > > > > > Thanks, > > > > > > Dmitri. > > > > > > > > > > > > On Mon, Jul 7, 2025 at 6:33 PM Eric Maynard < > > > eric.w.mayn...@gmail.com> > > > > > > wrote: > > > > > > > > > > > > > Hi all, > > > > > > > > > > > > > > Wanted to share this short design doc > > > > > > > < > > > > > > > > > > > > > > > > > > > > > > > > > > > https://docs.google.com/document/d/1tkqBOYtkcA7fbDmhIAE6_6Jmus5WwP6vS6jA_JHp4Ms > > > > > > > > > > > > > > > for > > > > > > > a simple method of allowing conflicting commits to both be > > > committed. > > > > > If > > > > > > > implemented, this would allow e.g. two writers doing append-only > > > > > > operations > > > > > > > to a table in Polaris to always succeed. > > > > > > > > > > > > > > If you're interested, please take a look. In the meantime, I'll > > be > > > > > > > preparing a small draft PR to serve as a reference > > implementation. > > > > > > > > > > > > > > --EM > > > > > > > > > > > > > > > > > > > > > > > > > > >