Until this patch, in update expressions like "SET a = :val", we only allowed the right-hand-side of the assignment to be a reference to a value stored in the request - like ":val" in the above example. But DynamoDB also allows the value to be an attribute path (e.g., "a.b[3].c", and can also be a function of a bunch of other values. This patch adds supports for parsing all these value types. This patch only adds the correct parsing of these additional types of values, but they are still not supported: reading existing attributes (i.e., read-modify-write operations) is still not supported, and none of the two functions which UpdateExpression needs to support are supported yet. Nevertheless, the parsing is now correct, and the the "unknown_function" test starts to pass. Note that DynamoDB allows the right-hand side of an assignment to be not only a single value, but also value+value and value-value. This possibility is not yet supported by the parser and will be added later. Signed-off-by: Nadav Har'El <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>