In this patch we implement the Expected parameter for the UpdateItem, PutItem and DeleteItem operations. This parameter allows a conditional update - i.e., do an update only if the existing value of the item matches some condition. This is the older form of conditional updates, but is still used by many applications, including Amazon's Tic-Tac-Toe demo. As usual, we do not yet provide isolation guarantees for read-modify-write operations - the item is simply read before the modification, and there is no protection against concurrent operation. This will of course need to be addressed in the future. The Expected parameter has a relatively large number of variations, and most of them are supported by this code, except that currenly only two comparison operators are supported (EQ and BEGINS_WITH) out of the 13 listed in the documentation. The rest will be implemented later. This patch also includes comprehensive tests for the Expected feature. These tests are almost exhaustive, except for one missing part (labled FIXME) - among the 13 comparison operations, the tests only check the EQ and BEGINS_WITH operators. We'll later need to add checks to the rest of them as well. As usual, all the tests pass on Amazon DynamoDB, and after this patch all of them succeed on Alternator too. Signed-off-by: Nadav Har'El <nyh@scylladb.com> Message-Id: <20190905125558.29133-1-nyh@scylladb.com>
Scylla
Quick-start
To get the build going quickly, Scylla offers a frozen toolchain which would build and run Scylla using a pre-configured Docker image. Using the frozen toolchain will also isolate all of the installed dependencies in a Docker container. Assuming you have met the toolchain prerequisites, which is running Docker in user mode, building and running is as easy as:
$ ./tools/toolchain/dbuild ./configure.py
$ ./tools/toolchain/dbuild ninja build/release/scylla
$ ./tools/toolchain/dbuild ./build/release/scylla --developer-mode 1
Please see HACKING.md for detailed information on building and developing Scylla.
Note: GCC >= 8.1.1 is required to compile Scylla.
Running Scylla
- Run Scylla
./build/release/scylla
- run Scylla with one CPU and ./tmp as data directory
./build/release/scylla --datadir tmp --commitlog-directory tmp --smp 1
- For more run options:
./build/release/scylla --help
Building Fedora RPM
As a pre-requisite, you need to install Mock on your machine:
# Install mock:
sudo yum install mock
# Add user to the "mock" group:
usermod -a -G mock $USER && newgrp mock
Then, to build an RPM, run:
./dist/redhat/build_rpm.sh
The built RPM is stored in /var/lib/mock/<configuration>/result directory.
For example, on Fedora 21 mock reports the following:
INFO: Done(scylla-server-0.00-1.fc21.src.rpm) Config(default) 20 minutes 7 seconds
INFO: Results and/or logs in: /var/lib/mock/fedora-21-x86_64/result
Building Fedora-based Docker image
Build a Docker image with:
cd dist/docker
docker build -t <image-name> .
Run the image with:
docker run -p $(hostname -i):9042:9042 -i -t <image name>