In CQL, before a user can create a table, they must create a keyspace to contain this table and, among other things, specify this keyspace's RF. But in the DynamoDB API, there is no "create keyspace" operation - the user just creates a table, and there is no way, and no opportunity, to specify the requested RF. Presumably, Amazon always uses the same RF for all tables, most likely 3, although this is not officially documented anywhere. The existing code creates the keyspace during Scylla boot, with RF=1. This RF=1 always works, and is a good choice for a one-node test run, but was a really bad choice for a real cluster with multiple nodes, so this patch fixes this choice: With this patch, the keyspace creation is delayed - it doesn't happen when the first node of the cluster boots, but only when the user creates the first table. Presumably, at that time, the cluster is already up, so at that point we can make the obvious choice automatically: a one-node cluster will get RF=1, a >=3 node cluster will get RF=3. The choice of RF is logged - and the choice of RF=1 is considered a warning. Note that with this patch, keyspace creation is still automatic as it was before. The user may manually create the keyspace via CQL, to override this automatic choice. In the future we may also add additional keyspace configuration options via configuration flags or new REST requests, and the keyspace management code will also likely change as we start to support clusters with multiple regions and global tables. But for now, I think the automatic method is easiest for users who want to test-drive Alternator without reading lengthy instructions on how to set up the keyspace. Signed-off-by: Nadav Har'El <nyh@scylladb.com> Message-Id: <20190820180610.5341-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>