Most of our tests use overly simplistic schemas (`simple_schema`) or very specialized ones that focus on exercising a specific area of the tested code. This is fine in most places as not all code is schema dependent, however practice has showed that there can be nasty bugs hiding in dark corners that only appear with a schema that has a specific combination of types. This series introduces `tests::random_schema` a utility class for generating random schemas and random data for them. An important goal is to make using random schemas in tests as simple and convenient as possible, therefore fostering the appearance of tests using random schemas. Random schema was developed to help testing code I'm currently working on, which segregates data by time-windows. As I wasn't confident in my ability to think of every possible combination of types that can break my code I came up with random-schema to help me finding these corner cases. So far I consider it a success, it already found bugs in my code that I'm not sure I would have found if I had relied on specific schemas. It also found bugs in unrelated areas of the code which proves my point in the first paragraph. * https://github.com/denesb/scylla.git random_schema/v5: tests/data_model: approximate to the modeled data structures data_value: add ascii constructor tests/random-utils.hh: add stepped_int_distribution tests/random-utils.hh: get_int() add overloads that accept external rand engine tests/random-utils.hh: add get_real() tests: introduce random_schema
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>