mirror of
https://github.com/scylladb/scylladb.git
synced 2026-05-01 13:45:53 +00:00
Before this patch, we only supported the ReturnValues=NONE setting of the PutItem, UpdateItem and DeleteItem operations. This patch also adds full support for the ReturnValues=ALL_OLD option in all three operation. This option directs Alternator to return the full old (i.e., pre-modification) contents of the item. We implement this as a RMW (read-modify-write) operation just as we do other RMW operations - i.e., by default we use LWT, to ensure that we really return the value of the item directly before the modification, the same value that would have been used in a conditional expression if there was one. NOTE: This implementation means one cannot use ReturnValues=ALL_OLD in forbid_rmw write isolation mode. One may theorize that if we only need the read-before-write for ReturnValues and not for a conditional expression, it should have been enough to use a separate read (as we do in unsafe_rmw isolation mode) before the write. But we don't have this "optimization" yet and I'm not sure it's a valid optimization at all - see discussion in a new issue #5851. This patch completes the ReturnValues support for the PutItem and DeleteItem operations. However, the third operation, UpdateItem, supports three more ReturnValues modes: UPDATED_OLD, ALL_NEW and UPDATED_NEW. We do not yet support those in this patch. If a user tries to use one of these three modes, an informative error message will be returned. The three tests for these three unimplemented settings continue to xfail, but the rest of the tests in test_returnvalues.py (except one test of nested attribute paths) now pass so their xfail flag is dropped. Refs #5053 Signed-off-by: Nadav Har'El <nyh@scylladb.com> Message-Id: <20200219135658.7158-1-nyh@scylladb.com>
184 KiB
184 KiB