Avi Kivity 177159da75 Merge "delete_atomically recovery" from Benny
"
The delete_atomically function is required to delete a set of sstables
atomically. I.e. Either delete all or none of them.  Deleting only
some sstables in the set might result in data resurrection in case
sstable A holding tombstone that cover mutation in sstable B, is deleted,
while sstable B remains.

This patchset introduces a log file holding a list of SSTable TOC files
to delete for recovering a partial delete_atomically operation.

A new subdirectory is create in the sstables dir called `pending_delete`
holding in-flight logs.

The logs are created with a temporary name (using a .tmp suffix)
and renamed to the final .log name once ready.  This indicates
the commit point for the operation.

When populating the column family, all files in the pending_delete
sub-directory are examined.  Temporary log files are just removed,
and committed log files are read, replayed, and deleted.

Fixes #4082

Tests: unit (dev), database_test (debug)
"

* 'projects/delete_atomically_recovery/v5' of https://github.com/bhalevy/scylla:
  tests: database_test: add test_distributed_loader_with_pending_delete
  distributed_loader: replay and cleanup pending_delete log files
  distributed_loader: populated_column_family: separate temp sst dirs cleanup phase
  docs: add sstables-directory-structure.md
  sstables: commit sstables to delete_atomically into a pending_delete log file
  sstables: delete_atomically: delete sstables in a thread
  sstables: component_basename: reuse with sstring component
  sstables: introduce component_basename
  database: maybe_delete_large_partitions_entry: do not access sstable and do not mask exceptions
  sstables: add delete_sstable_and_maybe_large_data_entries
  sstables: call remove_by_toc_name in dtor if marked_for_deletion
2019-02-22 15:37:17 +02:00
2019-02-20 08:03:46 -08:00
2018-11-21 00:01:44 +02:00
2019-01-30 11:17:38 +02:00
2018-08-01 16:50:58 +01:00
2018-12-03 11:18:02 +02:00
2018-11-26 18:59:41 +01:00
2019-02-20 08:03:46 -08:00
2019-02-16 22:27:34 +02:00
2019-01-28 15:03:14 -08:00
2018-11-27 13:01:02 +02:00
2018-06-19 16:26:51 +03:00
2018-11-21 00:01:44 +02:00
2018-11-21 00:01:44 +02:00
2018-11-21 00:01:44 +02:00
2018-11-21 00:01:44 +02:00
2019-02-20 08:03:46 -08:00
2019-02-20 08:03:46 -08:00
2018-11-21 00:01:44 +02:00
2019-01-22 15:34:32 +02:00
2019-02-20 08:03:46 -08:00
2019-02-20 08:03:46 -08:00
2018-11-01 13:16:17 +00:00
2018-11-21 00:01:44 +02:00
2019-02-11 09:25:25 +01:00
2018-11-28 23:54:03 +01:00
2018-11-21 00:01:44 +02:00
2018-11-21 00:01:44 +02:00
2018-11-21 00:01:44 +02:00
2018-11-21 00:01:44 +02:00
2018-12-12 16:49:01 +08:00

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

Guidelines for contributing

Description
No description provided
Readme 517 MiB
Languages
C++ 72.1%
Python 26.7%
CMake 0.3%
GAP 0.3%
Shell 0.3%