Hi,
I’m trying to do an atomic read-modify-write where a cell is read and then
rewritten with an updated value (updated in a complicated way, more than just
incrementing), but only if there’s been no writes since it was read, otherwise
try again from the read.
My plan is to use something like
table.checkAndMutate(row, family).qualifier(qualifier).timeRange(new
TimeRange(ts + 1)).ifNotExists().put(put)
to insert if the cell row/family/qualifier doesn't exist in the range `[ts + 1,
infinity)`, which I think means no writes after time `ts`. However, that
TimeRange constructor is @Deprecated and @Private, and the only remaining ways
to publicly construct a TimeRange is `TimeRange.allTime()` ([0, infinity)) and
`TimeRange.at(long ts)` ([ts, ts + 1)), neither of which are right.
Is there a way to create this time range, or another way to achieve this RMW
operation?
An alternative is to do a value comparison with `.ifEquals(...)` but my values
could be quite large (kilobytes), so I was thinking this range comparison would
be better.
---
Huon Wilson
CSIRO | Data61
https://www.data61.csiro.au