mirror of
https://github.com/scylladb/scylladb.git
synced 2026-04-23 18:10:39 +00:00
1a4c8db71a16889727909123d36c03bec6ccac3f
scanning_reader has a bug in its range support when it iterates over a memtable which is still open, and thus might still be modified between calls to the read function. This caused, among other things, issue #368 - where repair was reading a memtable which was still open and being written to (by a stream from a a remote node). The problem is that scanning_reader has an optimization so it can avoid comparing the current partition with the range's end on every iteration: It finds, once, a pointer to the element past the end of the range (the so-called "upper bound"), and saves this pointer in _end. Then at every iteration, we can just compare pointers. But If partitions are added to the memtable, the _end we saved is no longer relevant: It still points to a valid partition, but this partition which was once the first partition *after* the range, may now be precedeed by many new partitions, which may be now returned despite being after the range's end. The fix is to re-calculate "_end" if partitions were added to the memtable. Moreover, we also need to re-calculate "_i" in this case - the current code calculates in one iteration a pointer, _i, to the element to be returned in the *next* iteration. If additional partitions were added in the meantime, we may need to return them. Because it's impossible to delete partitions from a memtable (just to add new ones or modify existing ones), we can trivially figure out if new partitions were added, using _memtable->partition_count(). Because boost::intrusive::set defaults to constant_time_size(true), using this count is efficient. Fixes #368. Signed-off-by: Nadav Har'El <nyh@cloudius-systems.com>
#Urchin
##Building Urchin
In addition to required packages by Seastar, the following packages are required by Urchin.
Submodules
Urchin uses submodules, so make sure you pull the submodules first by doing:
git submodule init
git submodule update --recursive
Building urchin on Fedora
Installing required packages:
sudo yum install yaml-cpp-devel lz4-devel zlib-devel snappy-devel jsoncpp-devel thrift-devel antlr3-tool antlr3-C++-devel libasan libubsan
Building urchin on Ubuntu 14.04
Installing required packages:
sudo apt-get install libyaml-cpp-dev liblz4-dev zlib1g-dev libsnappy-dev libjsoncpp-dev
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
Description
Languages
C++
72.7%
Python
26.1%
CMake
0.3%
GAP
0.3%
Shell
0.3%