Commit Graph

16541 Commits

Author SHA1 Message Date
Vladimir Krivopalov
cd80d6ff65 database: Honour enable_sstables_mc_format configuration option.
Only enable SSTables 'mc' format if the entire cluster supports it and
it is enabled in the configuration file.

Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
2018-09-25 17:23:40 -07:00
Vladimir Krivopalov
c98937e04c sstables: Support SSTables 'mc' format as a feature.
Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
2018-09-25 17:23:40 -07:00
Vladimir Krivopalov
650b245657 db: Add configuration option for enabling SSTables 'mc' format.
This flag will only be used for testing purposes until Scylla 3.o
release and will be removed once SSTables 'mc' testing is completed.

Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
2018-09-25 17:23:40 -07:00
Vladimir Krivopalov
0edd3c57a9 tests: Add test for reading a complex column with zero subcolumns (SST3).
The files are generated by Scylla as a compaction_history table.

Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
2018-09-25 17:23:40 -07:00
Vladimir Krivopalov
24590fe88c sstables: Fix parsing of complex columns with zero subcolumns.
Before this fix, a complex column with zero subcolumns would be
incorrecty parsed as it would re-read the deletion time twice.

Now, this case is handled properly.

Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
2018-09-25 17:23:40 -07:00
Vladimir Krivopalov
be3613bdb6 sstables: Explicitly cast api::timestamp_type to uint64_t when delta-encoding.
This avoids noisy warnings like "signed value overflow" when ASAN is
turned on.

Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
2018-09-25 17:23:40 -07:00
Vladimir Krivopalov
0048f4814e sstables: Use parser_type instead of abstract_type::parse_type in column_translation.
abstract_type::parse_type() only deals with simple types and fails to
parse wrapped types such as
org.apache.cassandra.db.marshal.FrozenType(org.apache.cassandra.db.marshal.ListType(org.apache.cassandra.db.marshal.UTF8Type))

Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
2018-09-25 17:23:40 -07:00
Vladimir Krivopalov
0f298113c7 bytes: Add helper for turning bytes_view into sstring_view.
Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
2018-09-25 17:23:40 -07:00
Vladimir Krivopalov
9166badebe sstables: Only forward the call to fast_forwarding_to in mp_row_consumer_m if filter exists.
It may happen that we hit the end of partition and then get
fast_forward_to() called in which case we attempt to call it from an
already destroyed object. We need to check the _mf_filter value before
doing so.

Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
2018-09-25 17:23:40 -07:00
Vladimir Krivopalov
fc901eb700 sstables: Fix string formatting for exception messages in m_format_read_helpers.
Before this fix, the code was a potential undefined behaviour and crash
because it would add a large value to a const char* and try to create a
std::string out of it.

Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
2018-09-25 17:23:40 -07:00
Vladimir Krivopalov
84341821b1 sstables: Don't validate timestamps against the max value on parsing.
Internally, timestamps are represented as signed integers (int64_t) but
stored as unsigned ones. So it is quite possible to store data with
timestamp that is represented as a number larger than the max value of
int64_t type.
One such example is api::min_timestamp() that is used when generating
system schema tables ("keyspaces"). When cast to uint64_t, it turns into
a large value.

Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
2018-09-25 17:23:40 -07:00
Vladimir Krivopalov
bdca27ae41 sstables: Always store only min bases in serialization_header.
There previously was an inconsistency in treating min values stored in a
serialization_header. They are written to or read from a Statistics.db
as deltas against fixed bases, but when we parse timeouts from the data
file, we need the full bases, not just deltas.

This inconsistency causes wrong timestamp values if we write an sstable
and then read from it using one and the same sstable object because we
turn min values into bases on write and then don't adjust them back
because we already have them in memory.

Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
2018-09-25 17:23:40 -07:00
Vladimir Krivopalov
057c26f894 sstables: Support 'mc' version parsing from filename.
Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
2018-09-25 17:23:40 -07:00
Piotr Jastrzebski
d8e6d1ed98 SST3: Make sure we call consume_partition_end
even when we slice and fast forward to.

Signed-off-by: Piotr Jastrzebski <piotr@scylladb.com>
2018-09-25 17:23:40 -07:00
Avi Kivity
8276ada1c4 tests: sstable_3_x_test: await sstable background tasks
When an sstable is deleted, this work is done as a background task
since it cannot be done from the destructor.  If we don't wait for
that background task, it is detected as a leak by ASAN.

Fix by waiting for background tasks in every test.

A more complete fix would involve having a factory class create
sstables and assume the responsibility for background tasks, and
something similar to with_cql_test_env(), but that is deferred until later.

Tests: sstable_3_x_test (debug).
Message-Id: <20180923111745.8313-1-avi@scylladb.com>
2018-09-24 10:43:58 +02:00
Takuya ASADA
21a12aa458 dist/redhat: specify correct repo file path on scylla-housekeeping services
Currently, both scylla-housekeeping-daily/-restart services mistakenly
specify repo file path as "@@REPOFILES@@", witch is copied from .in
template, need to be replace with actual path.

Fixes #3776

Signed-off-by: Takuya ASADA <syuu@scylladb.com>
Message-Id: <20180921031605.9330-1-syuu@scylladb.com>
2018-09-23 11:38:26 +03:00
Glauber Costa
f828fe0d59 setup: add the lazytime XFS version
Starting with kernel 4.17 XFS will support the lazytime mount option.
That will be beneficial for Scylla as updating times synchronously is
one of our current sources of stalls.

Fortunately, older kernels are able to parse the option and just ignore
it. We verified that to be the case in a 4.15 kernel on ubuntu.
Therefore, just add the option unconditionally.

Signed-off-by: Glauber Costa <glauber@scylladb.com>
Message-Id: <20180920170017.13215-1-glauber@scylladb.com>
2018-09-20 20:12:44 +03:00
Gleb Natapov
0bf9a78c78 sstables: wrap file into checked file after applying extensions
File extensions can also produce errors that checked file wants to
intercept and act upon. The patch changes the order in which files are
wrapped to make checked file the outermost wrapped to be able to handle
exception generated by all inner wrappers.

Message-Id: <20180920124430.GD2326@scylladb.com>
2018-09-20 15:57:38 +03:00
Botond Dénes
eb357a385d flat_mutation_reader: make timeout opt-out rather than opt-in
Currently timeout is opt-in, that is, all methods that even have it
default it to `db::no_timeout`. This means that ensuring timeout is used
where it should be is completely up to the author and the reviewrs of
the code. As humans are notoriously prone to mistakes this has resulted
in a very inconsistent usage of timeout, many clients of
`flat_mutation_reader` passing the timeout only to some members and only
on certain call sites. This is small wonder considering that some core
operations like `operator()()` only recently received a timeout
parameter and others like `peek()` didn't even have one until this
patch. Both of these methods call `fill_buffer()` which potentially
talks to the lower layers and is supposed to propagate the timeout.
All this makes the `flat_mutation_reader`'s timeout effectively useless.

To make order in this chaos make the timeout parameter a mandatory one
on all `flat_mutation_reader` methods that need it. This ensures that
humans now get a reminder from the compiler when they forget to pass the
timeout. Clients can still opt-out from passing a timeout by passing
`db::no_timeout` (the previous default value) but this will be now
explicit and developers should think before typing it.

There were suprisingly few core call sites to fix up. Where a timeout
was available nearby I propagated it to be able to pass it to the
reader, where I couldn't I passed `db::no_timeout`. Authors of the
latter kind of code (view, streaming and repair are some of the notable
examples) should maybe consider propagating down a timeout if needed.
In the test code (the wast majority of the changes) I just used
`db::no_timeout` everywhere.

Tests: unit(release, debug)

Signed-off-by: Botond Dénes <bdenes@scylladb.com>

Message-Id: <1edc10802d5eb23de8af28c9f48b8d3be0f1a468.1536744563.git.bdenes@scylladb.com>
2018-09-20 11:31:24 +02:00
Asias He
de05df216f streaming: Use rpc::source on the shard where it is created
rpc::source can only work on the shard where it is created, thus we can
not apply the load distribution optimization. Disable it and let the
multishard_writer to forward the data to the correct shard.

Fixes #3731.

Message-Id: <0d1b4d3e7adcfdc4e392b83aeb2544b95f3f46dd.1537430162.git.asias@scylladb.com>
2018-09-20 12:29:24 +03:00
Avi Kivity
8b2bf73c6f Merge "Fix compaction metadata read/write for SSTables 3.x" from Vladimir
"
In SSTables 3.x, the 'ancestors' field of compaction metadata is no
longer stored in the Statistics.db file

The newly added test has previously failed due to this inconsistency.

Tests: unit {release}
"

* 'projects/sstables-30/empty_clustering_key/v1' of https://github.com/argenet/scylla:
  tests: Add test for reading table with empty clustering key from SSTables 3.x.
  tests: Update Statistics.db files for SSTables 3.x write tests.
  sstables: Do not parse ancestors from compaction metadata for SSTables 3.x
2018-09-20 09:53:46 +03:00
Vladimir Krivopalov
bf351c4a4f tests: Add test for reading table with empty clustering key from SSTables 3.x.
Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
2018-09-19 20:57:23 -07:00
Vladimir Krivopalov
3bbb013ecd tests: Update Statistics.db files for SSTables 3.x write tests.
Those files have been generated with 'ancestors' field in compaction
metadata and so were invalid.

Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
2018-09-19 20:57:23 -07:00
Vladimir Krivopalov
48fa088ec6 sstables: Do not parse ancestors from compaction metadata for SSTables 3.x
Ancestors array has been removed starting from 'ma' format
(CASSANDRA-7066).

Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
2018-09-19 17:11:43 -07:00
Vlad Zolotarov
043ced243e fix_system_distributed_tables.sh: adjust newly added 'request_size' and 'response_size' columns
Adjust the script to the new schema of system_traces.sessions. Two
new columns have been added:
   - request_size:  int
   - response_size: int

Signed-off-by: Vlad Zolotarov <vladz@scylladb.com>
Message-Id: <20180919005504.12498-1-vladz@scylladb.com>
2018-09-19 15:46:11 +01:00
Alexys Jacob
24b90ef527 configure.py: coding style fixes
configure.py:23:10: E401 multiple imports on one line
configure.py:39:61: W291 trailing whitespace
configure.py:47:1: E302 expected 2 blank lines, found 1
configure.py:53:16: W291 trailing whitespace
configure.py:55:1: E302 expected 2 blank lines, found 1
configure.py:62:1: E302 expected 2 blank lines, found 1
configure.py:63:53: E251 unexpected spaces around keyword / parameter equals
configure.py:63:55: E251 unexpected spaces around keyword / parameter equals
configure.py:63:68: E251 unexpected spaces around keyword / parameter equals
configure.py:63:70: E251 unexpected spaces around keyword / parameter equals
configure.py:63:92: E251 unexpected spaces around keyword / parameter equals
configure.py:63:94: E251 unexpected spaces around keyword / parameter equals
configure.py:64:33: E251 unexpected spaces around keyword / parameter equals
configure.py:64:35: E251 unexpected spaces around keyword / parameter equals
configure.py:65:54: E251 unexpected spaces around keyword / parameter equals
configure.py:65:56: E251 unexpected spaces around keyword / parameter equals
configure.py:65:69: E251 unexpected spaces around keyword / parameter equals
configure.py:65:71: E251 unexpected spaces around keyword / parameter equals
configure.py:65:94: E251 unexpected spaces around keyword / parameter equals
configure.py:65:96: E251 unexpected spaces around keyword / parameter equals
configure.py:66:33: E251 unexpected spaces around keyword / parameter equals
configure.py:66:35: E251 unexpected spaces around keyword / parameter equals
configure.py:68:1: E302 expected 2 blank lines, found 1
configure.py:72:18: E712 comparison to True should be 'if cond is True:' or 'if cond:'
configure.py:80:1: E302 expected 2 blank lines, found 1
configure.py:83:1: E302 expected 2 blank lines, found 1
configure.py:87:1: E302 expected 2 blank lines, found 1
configure.py:87:33: E251 unexpected spaces around keyword / parameter equals
configure.py:87:35: E251 unexpected spaces around keyword / parameter equals
configure.py:87:45: E251 unexpected spaces around keyword / parameter equals
configure.py:87:47: E251 unexpected spaces around keyword / parameter equals
configure.py:88:56: E251 unexpected spaces around keyword / parameter equals
configure.py:88:58: E251 unexpected spaces around keyword / parameter equals
configure.py:90:1: E302 expected 2 blank lines, found 1
configure.py:94:1: E302 expected 2 blank lines, found 1
configure.py:94:42: E251 unexpected spaces around keyword / parameter equals
configure.py:94:44: E251 unexpected spaces around keyword / parameter equals
configure.py:94:54: E251 unexpected spaces around keyword / parameter equals
configure.py:94:56: E251 unexpected spaces around keyword / parameter equals
configure.py:104:42: E251 unexpected spaces around keyword / parameter equals
configure.py:104:44: E251 unexpected spaces around keyword / parameter equals
configure.py:105:42: E251 unexpected spaces around keyword / parameter equals
configure.py:105:44: E251 unexpected spaces around keyword / parameter equals
configure.py:110:1: E302 expected 2 blank lines, found 1
configure.py:114:29: E251 unexpected spaces around keyword / parameter equals
configure.py:114:31: E251 unexpected spaces around keyword / parameter equals
configure.py:114:61: E251 unexpected spaces around keyword / parameter equals
configure.py:114:63: E251 unexpected spaces around keyword / parameter equals
configure.py:116:1: E302 expected 2 blank lines, found 1
configure.py:123:26: E251 unexpected spaces around keyword / parameter equals
configure.py:123:28: E251 unexpected spaces around keyword / parameter equals
configure.py:123:49: E251 unexpected spaces around keyword / parameter equals
configure.py:123:51: E251 unexpected spaces around keyword / parameter equals
configure.py:123:84: E251 unexpected spaces around keyword / parameter equals
configure.py:123:86: E251 unexpected spaces around keyword / parameter equals
configure.py:129:1: E302 expected 2 blank lines, found 1
configure.py:135:1: E302 expected 2 blank lines, found 1
configure.py:137:35: E251 unexpected spaces around keyword / parameter equals
configure.py:137:37: E251 unexpected spaces around keyword / parameter equals
configure.py:137:53: E251 unexpected spaces around keyword / parameter equals
configure.py:137:55: E251 unexpected spaces around keyword / parameter equals
configure.py:137:83: E251 unexpected spaces around keyword / parameter equals
configure.py:137:85: E251 unexpected spaces around keyword / parameter equals
configure.py:143:1: E302 expected 2 blank lines, found 1
configure.py:148:1: E302 expected 2 blank lines, found 1
configure.py:152:5: E301 expected 1 blank line, found 0
configure.py:159:5: E301 expected 1 blank line, found 0
configure.py:161:5: E301 expected 1 blank line, found 0
configure.py:163:5: E301 expected 1 blank line, found 0
configure.py:165:5: E301 expected 1 blank line, found 0
configure.py:168:1: E302 expected 2 blank lines, found 1
configure.py:169:5: F841 local variable 'mach' is assigned to but never used
configure.py:175:1: E302 expected 2 blank lines, found 1
configure.py:178:5: E301 expected 1 blank line, found 0
configure.py:183:5: E301 expected 1 blank line, found 0
configure.py:185:5: E301 expected 1 blank line, found 0
configure.py:187:5: E301 expected 1 blank line, found 0
configure.py:189:5: E301 expected 1 blank line, found 0
configure.py:192:1: E305 expected 2 blank lines after class or function definition, found 1
configure.py:329:5: E123 closing bracket does not match indentation of opening bracket's line
configure.py:335:5: E123 closing bracket does not match indentation of opening bracket's line
configure.py:340:41: E251 unexpected spaces around keyword / parameter equals
configure.py:340:43: E251 unexpected spaces around keyword / parameter equals
configure.py:340:60: E251 unexpected spaces around keyword / parameter equals
configure.py:340:62: E251 unexpected spaces around keyword / parameter equals
configure.py:340:85: E251 unexpected spaces around keyword / parameter equals
configure.py:340:87: E251 unexpected spaces around keyword / parameter equals
configure.py:341:30: E251 unexpected spaces around keyword / parameter equals
configure.py:341:32: E251 unexpected spaces around keyword / parameter equals
configure.py:342:29: E251 unexpected spaces around keyword / parameter equals
configure.py:342:31: E251 unexpected spaces around keyword / parameter equals
configure.py:343:38: E251 unexpected spaces around keyword / parameter equals
configure.py:343:40: E251 unexpected spaces around keyword / parameter equals
configure.py:343:54: E251 unexpected spaces around keyword / parameter equals
configure.py:343:56: E251 unexpected spaces around keyword / parameter equals
configure.py:344:29: E251 unexpected spaces around keyword / parameter equals
configure.py:344:31: E251 unexpected spaces around keyword / parameter equals
configure.py:345:37: E251 unexpected spaces around keyword / parameter equals
configure.py:345:39: E251 unexpected spaces around keyword / parameter equals
configure.py:345:52: E251 unexpected spaces around keyword / parameter equals
configure.py:345:54: E251 unexpected spaces around keyword / parameter equals
configure.py:346:29: E251 unexpected spaces around keyword / parameter equals
configure.py:346:31: E251 unexpected spaces around keyword / parameter equals
configure.py:349:43: E251 unexpected spaces around keyword / parameter equals
configure.py:349:45: E251 unexpected spaces around keyword / parameter equals
configure.py:349:59: E251 unexpected spaces around keyword / parameter equals
configure.py:349:61: E251 unexpected spaces around keyword / parameter equals
configure.py:349:84: E251 unexpected spaces around keyword / parameter equals
configure.py:349:86: E251 unexpected spaces around keyword / parameter equals
configure.py:350:29: E251 unexpected spaces around keyword / parameter equals
configure.py:350:31: E251 unexpected spaces around keyword / parameter equals
configure.py:351:44: E251 unexpected spaces around keyword / parameter equals
configure.py:351:46: E251 unexpected spaces around keyword / parameter equals
configure.py:351:60: E251 unexpected spaces around keyword / parameter equals
configure.py:351:62: E251 unexpected spaces around keyword / parameter equals
configure.py:351:86: E251 unexpected spaces around keyword / parameter equals
configure.py:351:88: E251 unexpected spaces around keyword / parameter equals
configure.py:352:29: E251 unexpected spaces around keyword / parameter equals
configure.py:352:31: E251 unexpected spaces around keyword / parameter equals
configure.py:353:43: E251 unexpected spaces around keyword / parameter equals
configure.py:353:45: E251 unexpected spaces around keyword / parameter equals
configure.py:353:59: E251 unexpected spaces around keyword / parameter equals
configure.py:353:61: E251 unexpected spaces around keyword / parameter equals
configure.py:353:79: E251 unexpected spaces around keyword / parameter equals
configure.py:353:81: E251 unexpected spaces around keyword / parameter equals
configure.py:354:29: E251 unexpected spaces around keyword / parameter equals
configure.py:354:31: E251 unexpected spaces around keyword / parameter equals
configure.py:355:45: E251 unexpected spaces around keyword / parameter equals
configure.py:355:47: E251 unexpected spaces around keyword / parameter equals
configure.py:355:61: E251 unexpected spaces around keyword / parameter equals
configure.py:355:63: E251 unexpected spaces around keyword / parameter equals
configure.py:355:78: E251 unexpected spaces around keyword / parameter equals
configure.py:355:80: E251 unexpected spaces around keyword / parameter equals
configure.py:356:29: E251 unexpected spaces around keyword / parameter equals
configure.py:356:31: E251 unexpected spaces around keyword / parameter equals
configure.py:359:45: E251 unexpected spaces around keyword / parameter equals
configure.py:359:47: E251 unexpected spaces around keyword / parameter equals
configure.py:359:61: E251 unexpected spaces around keyword / parameter equals
configure.py:359:63: E251 unexpected spaces around keyword / parameter equals
configure.py:359:83: E251 unexpected spaces around keyword / parameter equals
configure.py:359:85: E251 unexpected spaces around keyword / parameter equals
configure.py:360:29: E251 unexpected spaces around keyword / parameter equals
configure.py:360:31: E251 unexpected spaces around keyword / parameter equals
configure.py:361:48: E251 unexpected spaces around keyword / parameter equals
configure.py:361:50: E251 unexpected spaces around keyword / parameter equals
configure.py:361:69: E251 unexpected spaces around keyword / parameter equals
configure.py:361:71: E251 unexpected spaces around keyword / parameter equals
configure.py:361:87: E251 unexpected spaces around keyword / parameter equals
configure.py:361:89: E251 unexpected spaces around keyword / parameter equals
configure.py:362:29: E251 unexpected spaces around keyword / parameter equals
configure.py:362:31: E251 unexpected spaces around keyword / parameter equals
configure.py:363:48: E251 unexpected spaces around keyword / parameter equals
configure.py:363:50: E251 unexpected spaces around keyword / parameter equals
configure.py:363:64: E251 unexpected spaces around keyword / parameter equals
configure.py:363:66: E251 unexpected spaces around keyword / parameter equals
configure.py:363:89: E251 unexpected spaces around keyword / parameter equals
configure.py:363:91: E251 unexpected spaces around keyword / parameter equals
configure.py:364:29: E251 unexpected spaces around keyword / parameter equals
configure.py:364:31: E251 unexpected spaces around keyword / parameter equals
configure.py:365:46: E251 unexpected spaces around keyword / parameter equals
configure.py:365:48: E251 unexpected spaces around keyword / parameter equals
configure.py:365:62: E251 unexpected spaces around keyword / parameter equals
configure.py:365:64: E251 unexpected spaces around keyword / parameter equals
configure.py:365:82: E251 unexpected spaces around keyword / parameter equals
configure.py:365:84: E251 unexpected spaces around keyword / parameter equals
configure.py:365:97: E251 unexpected spaces around keyword / parameter equals
configure.py:365:99: E251 unexpected spaces around keyword / parameter equals
configure.py:366:29: E251 unexpected spaces around keyword / parameter equals
configure.py:366:31: E251 unexpected spaces around keyword / parameter equals
configure.py:367:48: E251 unexpected spaces around keyword / parameter equals
configure.py:367:50: E251 unexpected spaces around keyword / parameter equals
configure.py:367:70: E251 unexpected spaces around keyword / parameter equals
configure.py:367:72: E251 unexpected spaces around keyword / parameter equals
configure.py:368:1: E101 indentation contains mixed spaces and tabs
configure.py:368:1: W191 indentation contains tabs
configure.py:368:4: E128 continuation line under-indented for visual indent
configure.py:368:8: E251 unexpected spaces around keyword / parameter equals
configure.py:368:10: E251 unexpected spaces around keyword / parameter equals
configure.py:369:48: E251 unexpected spaces around keyword / parameter equals
configure.py:369:50: E251 unexpected spaces around keyword / parameter equals
configure.py:369:73: E251 unexpected spaces around keyword / parameter equals
configure.py:369:75: E251 unexpected spaces around keyword / parameter equals
configure.py:370:1: E101 indentation contains mixed spaces and tabs
configure.py:370:13: E128 continuation line under-indented for visual indent
configure.py:370:17: E251 unexpected spaces around keyword / parameter equals
configure.py:370:19: E251 unexpected spaces around keyword / parameter equals
configure.py:371:47: E251 unexpected spaces around keyword / parameter equals
configure.py:371:49: E251 unexpected spaces around keyword / parameter equals
configure.py:371:71: E251 unexpected spaces around keyword / parameter equals
configure.py:371:73: E251 unexpected spaces around keyword / parameter equals
configure.py:372:13: E128 continuation line under-indented for visual indent
configure.py:372:17: E251 unexpected spaces around keyword / parameter equals
configure.py:372:19: E251 unexpected spaces around keyword / parameter equals
configure.py:373:50: E251 unexpected spaces around keyword / parameter equals
configure.py:373:52: E251 unexpected spaces around keyword / parameter equals
configure.py:373:76: E251 unexpected spaces around keyword / parameter equals
configure.py:373:78: E251 unexpected spaces around keyword / parameter equals
configure.py:374:13: E128 continuation line under-indented for visual indent
configure.py:374:17: E251 unexpected spaces around keyword / parameter equals
configure.py:374:19: E251 unexpected spaces around keyword / parameter equals
configure.py:375:52: E251 unexpected spaces around keyword / parameter equals
configure.py:375:54: E251 unexpected spaces around keyword / parameter equals
configure.py:375:68: E251 unexpected spaces around keyword / parameter equals
configure.py:375:70: E251 unexpected spaces around keyword / parameter equals
configure.py:375:94: E251 unexpected spaces around keyword / parameter equals
configure.py:375:96: E251 unexpected spaces around keyword / parameter equals
configure.py:375:109: E251 unexpected spaces around keyword / parameter equals
configure.py:375:111: E251 unexpected spaces around keyword / parameter equals
configure.py:376:29: E251 unexpected spaces around keyword / parameter equals
configure.py:376:31: E251 unexpected spaces around keyword / parameter equals
configure.py:377:43: E251 unexpected spaces around keyword / parameter equals
configure.py:377:45: E251 unexpected spaces around keyword / parameter equals
configure.py:377:59: E251 unexpected spaces around keyword / parameter equals
configure.py:377:61: E251 unexpected spaces around keyword / parameter equals
configure.py:377:79: E251 unexpected spaces around keyword / parameter equals
configure.py:377:81: E251 unexpected spaces around keyword / parameter equals
configure.py:378:29: E251 unexpected spaces around keyword / parameter equals
configure.py:378:31: E251 unexpected spaces around keyword / parameter equals
configure.py:379:30: E251 unexpected spaces around keyword / parameter equals
configure.py:379:32: E251 unexpected spaces around keyword / parameter equals
configure.py:379:46: E251 unexpected spaces around keyword / parameter equals
configure.py:379:48: E251 unexpected spaces around keyword / parameter equals
configure.py:379:62: E251 unexpected spaces around keyword / parameter equals
configure.py:379:64: E251 unexpected spaces around keyword / parameter equals
configure.py:380:30: E251 unexpected spaces around keyword / parameter equals
configure.py:380:32: E251 unexpected spaces around keyword / parameter equals
configure.py:380:44: E251 unexpected spaces around keyword / parameter equals
configure.py:380:46: E251 unexpected spaces around keyword / parameter equals
configure.py:380:58: E251 unexpected spaces around keyword / parameter equals
configure.py:380:60: E251 unexpected spaces around keyword / parameter equals
configure.py:395:36: E251 unexpected spaces around keyword / parameter equals
configure.py:395:38: E251 unexpected spaces around keyword / parameter equals
configure.py:395:76: E251 unexpected spaces around keyword / parameter equals
configure.py:395:78: E251 unexpected spaces around keyword / parameter equals
configure.py:398:18: E127 continuation line over-indented for visual indent
configure.py:424:32: W291 trailing whitespace
configure.py:649:18: E124 closing bracket does not match visual indentation
configure.py:650:17: E127 continuation line over-indented for visual indent
configure.py:650:17: W503 line break before binary operator
configure.py:651:17: W503 line break before binary operator
configure.py:652:17: E124 closing bracket does not match visual indentation
configure.py:784:8: E713 test for membership should be 'not in'
configure.py:790:45: W291 trailing whitespace
configure.py:819:32: E261 at least two spaces before inline comment
configure.py:832:5: E123 closing bracket does not match indentation of opening bracket's line
configure.py:836:35: E251 unexpected spaces around keyword / parameter equals
configure.py:836:37: E251 unexpected spaces around keyword / parameter equals
configure.py:836:49: E251 unexpected spaces around keyword / parameter equals
configure.py:836:51: E251 unexpected spaces around keyword / parameter equals
configure.py:845:45: E251 unexpected spaces around keyword / parameter equals
configure.py:845:47: E251 unexpected spaces around keyword / parameter equals
configure.py:845:59: E251 unexpected spaces around keyword / parameter equals
configure.py:845:61: E251 unexpected spaces around keyword / parameter equals
configure.py:848:43: E251 unexpected spaces around keyword / parameter equals
configure.py:848:45: E251 unexpected spaces around keyword / parameter equals
configure.py:869:1: E302 expected 2 blank lines, found 1
configure.py:879:1: E305 expected 2 blank lines after class or function definition, found 1
configure.py:965:118: E225 missing whitespace around operator
configure.py:967:18: E124 closing bracket does not match visual indentation
configure.py:969:27: F821 undefined name 'python'
configure.py:969:73: E251 unexpected spaces around keyword / parameter equals
configure.py:969:75: E251 unexpected spaces around keyword / parameter equals
configure.py:976:7: E201 whitespace after '{'
configure.py:976:12: E203 whitespace before ':'
configure.py:976:73: E202 whitespace before '}'
configure.py:981:58: E251 unexpected spaces around keyword / parameter equals
configure.py:981:60: E251 unexpected spaces around keyword / parameter equals
configure.py:987:10: E222 multiple spaces after operator
configure.py:1001:17: E124 closing bracket does not match visual indentation
configure.py:1026:29: E251 unexpected spaces around keyword / parameter equals
configure.py:1026:31: E251 unexpected spaces around keyword / parameter equals
configure.py:1100:82: W291 trailing whitespace
configure.py:1110:29: E251 unexpected spaces around keyword / parameter equals
configure.py:1110:31: E251 unexpected spaces around keyword / parameter equals
configure.py:1110:49: E251 unexpected spaces around keyword / parameter equals
configure.py:1110:51: E251 unexpected spaces around keyword / parameter equals
configure.py:1111:64: E251 unexpected spaces around keyword / parameter equals
configure.py:1111:66: E251 unexpected spaces around keyword / parameter equals
configure.py:1112:13: E128 continuation line under-indented for visual indent
configure.py:1112:22: E251 unexpected spaces around keyword / parameter equals
configure.py:1112:24: E251 unexpected spaces around keyword / parameter equals
configure.py:1140:106: W291 trailing whitespace
configure.py:1149:86: E127 continuation line over-indented for visual indent
configure.py:1191:116: E251 unexpected spaces around keyword / parameter equals
configure.py:1191:118: E251 unexpected spaces around keyword / parameter equals
configure.py:1191:139: E251 unexpected spaces around keyword / parameter equals
configure.py:1191:141: E251 unexpected spaces around keyword / parameter equals
configure.py:1197:83: E231 missing whitespace after ','
configure.py:1200:76: E231 missing whitespace after ','
configure.py:1215:99: W291 trailing whitespace
configure.py:1242:31: E251 unexpected spaces around keyword / parameter equals
configure.py:1242:33: E251 unexpected spaces around keyword / parameter equals

Signed-off-by: Alexys Jacob <ultrabug@gentoo.org>
Message-Id: <20180917155438.12410-1-ultrabug@gentoo.org>
2018-09-18 13:49:23 +03:00
Avi Kivity
e5e59ea9cf Merge "More SSTables 3.x write tests enriched with read after write." from Vladimir
"
Some of the write tests were missing the read after write validation
which has now been added for better coverage.

Tests: unit {release}
"

* 'projects/sstables-30/more-enriched-tests/v1' of https://github.com/argenet/scylla:
  tests: Enrich test_write_adjacent_range_tombstones_with_rows with read after write
  tests: Enrich test_write_many_range_tombstones with read after write
  tests: Enrich test_write_mixed_rows_and_range_tombstones with read after write
  tests: Enrich test_write_non_adjacent_range_tombstones with read after write
  tests: Enrich test_write_adjacent_range_tombstones with read after write
  tests: Enrich test_write_simple_range_tombstone with read after write.
  tests: Enrich test_write_deleted_column with read after write.
2018-09-18 13:45:52 +03:00
Avi Kivity
9d90ba470b Merge "Fix deleted counters handling in SSTables 3.x" from Vladimir
"
This patchset fixes the bug in SSTables 3.x parser that did not properly
handle deleted counter cells.

A write test is enriched to validate read after write so that this case
is covered.

Tests: unit {release}
"

* 'projects/sstables-30/fix-deleted-counters-read/v1' of https://github.com/argenet/scylla:
  tests: Read after write in test_write_counter_table.
  sstables: Fix deleted counter cells processing in SSTables 3.x parser.
2018-09-18 12:20:54 +03:00
Vladimir Krivopalov
8c08ccbd3b tests: Enrich test_write_adjacent_range_tombstones_with_rows with read after write
Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
2018-09-17 11:06:24 -07:00
Vladimir Krivopalov
f0966a935e tests: Enrich test_write_many_range_tombstones with read after write
Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
2018-09-17 11:06:10 -07:00
Vladimir Krivopalov
262874a90c tests: Enrich test_write_mixed_rows_and_range_tombstones with read after write
Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
2018-09-17 11:05:56 -07:00
Vladimir Krivopalov
6fbf4d3589 tests: Enrich test_write_non_adjacent_range_tombstones with read after write
Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
2018-09-17 11:05:42 -07:00
Vladimir Krivopalov
4bf9c87a1a tests: Enrich test_write_adjacent_range_tombstones with read after write
Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
2018-09-17 11:05:26 -07:00
Vladimir Krivopalov
5b087daf91 tests: Enrich test_write_simple_range_tombstone with read after write.
Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
2018-09-17 11:04:57 -07:00
Vladimir Krivopalov
e63d960b8e tests: Enrich test_write_deleted_column with read after write.
Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
2018-09-17 11:04:25 -07:00
Eliran Sinvani
83628f5881 cql3: maintain correctness of multicolumn restriction on mixed order columns
When a query with multicolumn inequality is issued on clustering columns
having mixed order (ASC and DESC together), if the ranges are not
broken to none overlapping lexicographically monotonic ones, the node
return incorrect rows. This is due to the search nature
(prefix comparison). The solution is to break the range imposed
by the restriction into several single column restrictions OR-ed
together that will be logically equivalent and preserve the
monotonicity assumption. This commit also fixes incorrect results
returned by a multicolumn query on an all descending columns.

A unit test have been added to account for both issues fixed.

Fixes #2050
Tests: Unit test, manual tests of the use case in the issue.

Signed-off-by: Eliran Sinvani <eliransin@scylladb.com>
Message-Id: <3b96620a3bd8b0614359a3b0757f324d45189dbb.1536478193.git.eliransin@scylladb.com>
2018-09-17 20:35:55 +03:00
Vladimir Krivopalov
e796fa2b02 tests: Read after write in test_write_counter_table.
This covers the case of deleted counter cells.

Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
2018-09-17 10:11:48 -07:00
Vladimir Krivopalov
79ccce147c sstables: Fix deleted counter cells processing in SSTables 3.x parser.
Deleted counter cells should be processed the same way as regular
deleted cells.

Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
2018-09-17 10:10:57 -07:00
Alexys Jacob
cd74dfebfb scripts: coding style fixes
scripts/create-relocatable-package.py:24:1: F401 'shutil' imported but unused
scripts/create-relocatable-package.py:24:1: F401 'tempfile' imported but unused
scripts/create-relocatable-package.py:24:16: E401 multiple imports on one line
scripts/create-relocatable-package.py:26:1: E302 expected 2 blank lines, found 1
scripts/create-relocatable-package.py:47:1: E305 expected 2 blank lines after class or function definition, found 1
scripts/create-relocatable-package.py:93:6: E225 missing whitespace around operator

Signed-off-by: Alexys Jacob <ultrabug@gentoo.org>
Message-Id: <20180917152520.5032-1-ultrabug@gentoo.org>
2018-09-17 18:40:23 +03:00
Alexys Jacob
c80d7b97cc scyllatop: more coding style fixes
tools/scyllatop/metric.py:2:1: F401 're' imported but unused
tools/scyllatop/metric.py:53:20: E221 multiple spaces before operator
tools/scyllatop/metric.py:69:20: E221 multiple spaces before operator

Signed-off-by: Alexys Jacob <ultrabug@gentoo.org>
Message-Id: <20180917153308.7240-1-ultrabug@gentoo.org>
2018-09-17 18:39:53 +03:00
Raphael S. Carvalho
5bc028f78b database: fix 2x increase in disk usage during cleanup compaction
Don't hold reference to sstables cleaned up, so that file descriptors
for their index and data files will be closed and consequently disk
space released.

Fixes #3735.

Signed-off-by: Raphael S. Carvalho <raphaelsc@scylladb.com>
Message-Id: <20180914194047.26288-1-raphaelsc@scylladb.com>
2018-09-17 17:26:46 +03:00
Alexys Jacob
46d101c1f2 scyllatop: coding style fixes
tools/scyllatop/prometheus.py:3:1: F401 'sys' imported but unused
tools/scyllatop/prometheus.py:7:1: E302 expected 2 blank lines, found 1
tools/scyllatop/prometheus.py:12:5: E301 expected 1 blank line, found 0
tools/scyllatop/prometheus.py:17:1: W293 blank line contains whitespace
tools/scyllatop/prometheus.py:22:82: E225 missing whitespace around operator

Signed-off-by: Alexys Jacob <ultrabug@gentoo.org>
Message-Id: <20180914110847.1862-1-ultrabug@gentoo.org>
2018-09-17 15:45:43 +03:00
Botond Dénes
a84c26799d tests/mutation_reader_test: fix flaky restricted reader timeout test
The test in question is `restricted_reader_timeout`.

Use `eventually_true()` instead of `sleep()` to wait on the timeout
expiring, making the test more robust on overloaded machines.

Also fix graceful failing, another longstanding issue with this test.
The readers created for the test need different destruction logic
depending whether the test failed or succeeded. Previously this was
dealt with by using the logic that worked in case of success and using
asserts to abort when the test failed, thus avoiding developers
investigating the invalid memory accesses happening due to the wrong
destruction logic.
The solution is to use BOOST_CHECK() macro in the check that validates
whether timeout works as expected. This allows for execution to continue
even if the test failed, and thus allows for running the proper cleanup
code even when the test failed.

Fixes: #3719
Signed-off-by: Botond Dénes <bdenes@scylladb.com>
Message-Id: <911921dffc924f1b0a3e86408757467e9be2b65b.1537169933.git.bdenes@scylladb.com>
2018-09-17 09:40:45 +01:00
Nadav Har'El
0006e21c4d tests/view_complex_test: add missing timestamp
test_partial_delete_selected_column() does a long string of various
updates and deletes, each specifies a different timestamp. In one
of these updates, the timestamp was forgotten. This means that the
server picks the current time, a large number.

As the test is currently written, it doesn't matter which timestamp
was chosen, the test would still succeed (if timestamp >= 15, and it
must be since the timestamp is the time from the epoch).
But the intention was probably to use timestamp = 15, so let's make
this intention clear.

Signed-off-by: Nadav Har'El <nyh@scylladb.com>
Message-Id: <20180905095552.11883-2-nyh@scylladb.com>
2018-09-17 00:38:55 +01:00
Nadav Har'El
2ae4ed151e tests/view_complex_test - add test passpoints
We recently saw a failure in test_partial_delete_selected_column() but
this is a very long test doing many operations and comparisons of their
results, and without BOOST_TEST_PASSPOINT() we can't know which of them
really failed.

So let's sprinkle BOOST_TEST_PASSPOINT() calls between the different parts
of test_partial_delete_selected_column(). If this test ever fails again,
we'll know where.

Signed-off-by: Nadav Har'El <nyh@scylladb.com>
Message-Id: <20180905095552.11883-1-nyh@scylladb.com>
2018-09-17 00:38:55 +01:00
Jesse Haber-Kucharsky
9d27045c76 auth: Shorten random_device instance life-span
On Fedora 28, creating an instance of `std::random_device` opens a file
descriptor for `/dev/urandom` (observed via `strace`).

By declaring static thread-local instances of `std::random_device`,
these descriptors will be open (barring optimization by the compiler)
for the entire duration of the Scylla process's life.

However, the `std::random_device` instance is only necessary for
initializing the `RandomNumberEngine` for generating salts. With this
change, the file-descriptor is closed immediately after the engine is
initialized.

I considered generalizing this pattern of initialization into a
function, but with only two uses (and simple ones) I think this would
only obscure things.

Signed-off-by: Jesse Haber-Kucharsky <jhaberku@scylladb.com>
Tests: unit (release)
Message-Id: <f1b985d99f66e5e64d714fd0f087e235b71557d2.1536697368.git.jhaberku@scylladb.com>
2018-09-12 12:14:21 +01:00
Botond Dénes
dfad223ea2 multishard_mutation_reader: shard_reader: don't do concurrent read-aheads
multishard_mutation_reader starts read-aheads on the
shards-to-be-read-soon. When doing this it didn't check whether the
respective shards had an ongoing read-ahead already. This lead to a
single shard executing multiple concurrent read-aheads. This is damaging
for multiple reasons:
    * Can lead to concurrent access of the remote reader's data members.
    * The `shard_reader` was designed around a single read-ahead and
    thus will synchronise foreground reads with only the last one.

The practical implications of this seen so far was that queries reading
a large number of rows (large enough to reliably trigger the
bug) would stop the read early, due the `combined_mutation_reader`'s
internal accounting being messed up by concurrent access.

Also add a unit test. Instead of coming up with a very specific, and
very contrived unit test, use the test-case that detected this bug in
the first place: count(*) on a table with lots of rows (>1000). This
unit-test should serve well for detecting any similar bugs in the
future.

Signed-off-by: Botond Dénes <bdenes@scylladb.com>
Message-Id: <ff1c49be64e2fb443f9aa8c5c8d235e682442248.1536746388.git.bdenes@scylladb.com>
2018-09-12 11:43:18 +01:00
Botond Dénes
6a07b8ae83 multishard_mutation_reader: update shard_reader's comment
The `adandoned` member was renamed to `stopped`. Update the comment
accordingly.

Signed-off-by: Botond Dénes <bdenes@scylladb.com>
Message-Id: <1d655785f28fe1e5fa041f2f49852f0ad88be53e.1536743950.git.bdenes@scylladb.com>
2018-09-12 11:32:08 +02:00
Botond Dénes
d9a2ffad84 mutation_partition: don't move tracing_state early
Currently the `trace_state` is moved into the `querier` object's
constructor when one has to be created. Since the trace_state is used
below this lines this had the effect that on the first page of the
query, when a querier object has to be created, tracing would not work
inside the `querier_cache` which received a move-from `trace_state` (a
nullptr effectively).
Change the move to a copy so the other half of the function doesn't use
a moved-from `trace_state`.

Signed-off-by: Botond Dénes <bdenes@scylladb.com>
Message-Id: <4987419781aa287141aa9dc8ce99c5068b564c84.1536739052.git.bdenes@scylladb.com>
2018-09-12 11:32:08 +02:00
Botond Dénes
49704755b0 combined_mutation_reader: propagate timeout in fill_buffer()
All user reads go through the combined reader. Not propagating the
timeout down from there means that the storage layer's timeout
functionality is effectively disabled. Spotted while reading the code.

Signed-off-by: Botond Dénes <bdenes@scylladb.com>
Message-Id: <7fc10eca1c231dd04ac433913d9e6a51b6b17139.1536657041.git.bdenes@scylladb.com>
2018-09-11 15:44:28 +02:00