eba310163d2aef691b13bc3f76a6d5d18d432557
The shard readers under a multishard reader are paused after every operation executed on them. When paused they can be evicted at any time. When this happens, they will be re-created lazily on the next operation, with a start position such that they continue reading from where the evicted reader left off. This start position is determined from the last fragment seen by the previous reader. When this position is clustering position, the reader will be recreated such that it reads the clustering range (from the half-read partition): (last-ckey, +inf). This can cause problems if the last fragment seen by the evicted reader was a range-tombstone. Range tombstones can share the same clustering position with other range tombstones and potentially one clustering row. This means that when the reader is recreated, it will start from the next clustering position, ignoring any unread fragments that share the same position as the last seen range tombstone. To fix, ensure that on each fill-buffer call, the buffer contains all fragments for the last position. To this end, when the last fragment in the buffer is a range tombstone (with pos x), we continue reading until we see a fragment with a position y that is greater. This way it is ensured that we have seen all fragments for pos x and it is safe to resume the read, starting from after position x.
…
…
…
…
…
…
Scylla
Quick-start
$ git submodule update --init --recursive
$ sudo ./install-dependencies.sh
$ ./configure.py --mode=release
$ ninja-build -j4 # Assuming 4 system threads.
$ ./build/release/scylla
$ # Rejoice!
Please see HACKING.md for detailed information on building and developing Scylla.
Note: GCC >= 8.1.1 is require to compile Scylla.
Note: See frozen toolchain for a way to build and run on an older distribution.
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>
Contributing to Scylla
Description
Languages
C++
72.7%
Python
26.1%
CMake
0.3%
GAP
0.3%
Shell
0.3%