[ https://issues.apache.org/jira/browse/IGNITE-14269?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Kirill Gusakov reassigned IGNITE-14269: --------------------------------------- Assignee: Kirill Gusakov (was: Andrey N. Gura) > Design conditional multi update functionality for meta storage client > --------------------------------------------------------------------- > > Key: IGNITE-14269 > URL: https://issues.apache.org/jira/browse/IGNITE-14269 > Project: Ignite > Issue Type: New Feature > Reporter: Andrey N. Gura > Assignee: Kirill Gusakov > Priority: Major > Labels: iep-61, ignite-3 > > Define entities required for implementation of conditional multi updates (aka > "transactions") for meta storage. > Requirements: > - Design should provide possibility to define conditional updates in > if-then-else manner with nested branches. > - Update always starts with condition. > - Any nested branch must start with condition. > - Update can't precede to condition. > - Every branch can yield exactly one custom result (limited by number of > simple types) and any number of entries. Corresponding expression always must > be at the end of branch. > - Condition for entry revision allows the following comparisons: equal, > !equal, less, greater. > - Condition for entry value allows the following operations (byte-wise): > equal, !equal. > - Update allows the following operations: put, remove, no-op. > - Condition can not use previously defined condition instance again because > it will lead to graph cycle and infinite update execution. > Assumptions: > - It seems that conditions and updates entities can be conveniently linked > using chaining. > Simple example (pseudocode): > {code} > CompletableFuture<Result, List<Entry>> = invoke(valCond(EQUAL, > perstEnabled, true)._then( > valCond(EQUAL, walEnabled, true)._then( > update(walEnabled, true)). > _else( > update(walEnabled, false)) > )._else(NoopUpdate)) > {code} -- This message was sent by Atlassian Jira (v8.20.1#820001)