Commit Graph

17627 Commits

Author SHA1 Message Date
Avi Kivity
8ecb528d5a Update seastar submodule
* seastar 67fd967...af6b797 (1):
  > iotune: Initialize io_rates member variables

Fixes #4064
2019-01-08 12:02:42 +02:00
Avi Kivity
d8adbeda11 tests: mutation_source_test: generate valid utf-8 data
test_fast_forwarding_across_partitions_to_empty_range uses an uninitialized
string to populate an sstable, but this can be invalid utf-8 so that sstable
cannot be sstabledumped.

Make it valid by using make_random_string().

Fixes #4040.
Message-Id: <20190107193240.14409-1-avi@scylladb.com>
2019-01-08 12:02:42 +02:00
Asias He
1de24c8495 repair: Use mf.visit() in fragment_hasher
When new fragment type is added, it will fail to compile instead of
producing runtime errors.

Message-Id: <cf10200e4185c779aad15da3a776a5b79f5323af.1546930796.git.asias@scylladb.com>
2019-01-08 12:02:42 +02:00
Rafael Ávila de Espíndola
67039e942b Remove the only use of with_alignment from scylla
In c++17 there are standard ways of requesting aligned memory, so
seastar doesn't need to provide one.

This patch is in preparation for removing with_alignment from seastar.

Tests: unit (debug)

Signed-off-by: Rafael Ávila de Espíndola <espindola@scylladb.com>
Message-Id: <20190107191019.22295-1-espindola@scylladb.com>
2019-01-07 21:34:47 +02:00
Rafael Ávila de Espíndola
0d4529a5f1 Change timeout to fix tests in a debug build
The current timeout is way too small for debug builds. Currently
jenkins runs avoid the problem by increasing the timeout by 100x. This
patch increases it by 10x, with seems to be sufficient to run the
tests in most desktop machines.

Message-Id: <20190107191413.22531-1-espindola@scylladb.com>
2019-01-07 21:34:06 +02:00
Avi Kivity
34251f5ea1 tools: toolchain: update image for all-user sudo 2019-01-07 21:22:42 +02:00
Takuya ASADA
3514b185fd tools: toolchain: allow sudo for all users
Non-privileged user may not belongs to "wheel" group, for example Debian
variants uses "sudo" group instead of "wheel".
To make sudo able to work on all environment we should allow sudo for
"ALL" instead of "wheel".

Signed-off-by: Takuya ASADA <syuu@scylladb.com>
Message-Id: <20190107173410.23140-1-syuu@scylladb.com>
2019-01-07 20:47:22 +02:00
Benny Halevy
40410465d7 sstables: mc: expired_liveness_ttl should be max int32_t rather than max uint32_t
Corresponding to Cassandra's EXPIRED_LIVENESS_TTL = Integer.MAX_VALUE;

Fixes #4060

Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
Message-Id: <20190107172457.20430-1-bhalevy@scylladb.com>
2019-01-07 18:41:37 +01:00
Avi Kivity
20b6d00e56 tools: toolchain: support dbuild from subdirectory or parent directory of scylla.git
When building something other than Scylla (like scylla-tools-java or scylla-jmx)
it is convenient to run it from some other directory. To do that, allow running
dbuild from any directory (so we locate tools/toolchain/image relative to the
dbuild script rather than use a fixed path) and mount the current directory
since it's likely the user will want to access files there.
Message-Id: <20190107165824.25164-1-avi@scylladb.com>
2019-01-07 18:35:51 +01:00
Nadav Har'El
f6e0ce02fa docs/isolation.md: new document
Start a new document with an overview of isolation in Scylla, i.e.,
scheduling groups, I/O priority classes, controllers, etc.

As all documents in docs/, this is a document for developers (not users!)
who need to understand how isolation between different pieces of Scylla
(e.g., queries, compaction, repair, etc.) works, which scheduling groups
and I/O classes we have and why, etc.

The document is still very partial and includes a lot of TODOs on
places where the explanation needs to be expanded. In particular it
needs an accurate explanation (and not just a name) of what kind of
work is done under each of the groups and classes, and an explanation
of how we set up RPC to use which scheduling groups for the code it
executes.

Signed-off-by: Nadav Har'El <nyh@scylladb.com>
Message-Id: <20190103183232.21348-1-nyh@scylladb.com>
2019-01-07 17:48:35 +02:00
Nadav Har'El
da090a5458 materialized views: move hints to top-level directory
While we keep ordinary hints in a directory parallel to the data directory,
we decided to keep the materialized view hints in a subdirectory of the data
directory, named "view_pending_updates". But during boot, we expect all
subdirectories of data/ to be keyspace names, and when we notice this one,
we print a warning:

   WARN: database - Skipping undefined keyspace: view_pending_updates

This spurious warning annoyed users. But moreover, we could have bigger
problems if the user actually tries to create a keyspace with that name.

So in this patch, we move the view hints to a separate top-level directory,
which defaults to /var/lib/scylla/view_hints, but as usual can be configured.

Signed-off-by: Nadav Har'El <nyh@scylladb.com>
Message-Id: <20190107142257.16342-1-nyh@scylladb.com>
2019-01-07 16:43:43 +02:00
Takuya ASADA
eddecdd0b5 dist/redhat: drop unused dependencies
wget and yum-builddep are not used anymore, don't install them.

Signed-off-by: Takuya ASADA <syuu@scylladb.com>
Message-Id: <20190107091148.1590-7-syuu@scylladb.com>
2019-01-07 12:56:18 +00:00
Takuya ASADA
40dc62fa98 dist/debian: don't use sudo to rm debian dir
sudo does not allowed in dbuild with non-root privilege, and also it
should be owned by current user, stop using sudo.

Signed-off-by: Takuya ASADA <syuu@scylladb.com>
Message-Id: <20190107091148.1590-5-syuu@scylladb.com>
2019-01-07 12:56:18 +00:00
Takuya ASADA
237de20ff9 dist/debian: correct dbuild path
/usr/sbin/debuild is typo, should be /usr/bin.

Signed-off-by: Takuya ASADA <syuu@scylladb.com>
Message-Id: <20190107091148.1590-4-syuu@scylladb.com>
2019-01-07 12:56:17 +00:00
Pekka Enberg
2520c8caac Merge 'Improve frozen toolchain for continuous integration' from Avi
"Add features that are useful for continuous integration pipelines (and
also ordinary developers):

 - sudo support, with and without a tty, as our packaging scripts require it
 - install ccache package to allow reducing incremental build times
 - dependencies needed to build scylla-jmx and scylla-tools-java"

* tag 'toolchain-ci/v1' of https://github.com/avikivity/scylla:
  tools: toolchain: update image for ant, maven, ccache, sudo
  tools: toolchain: dbuild: pass-through supplementary groups
  tools: toolchain: defeat PAM
  tools: toolchain: improve sudo support
  tools: toolchain: break long line in dbuild
  tools: toolchain: prepare sudoers file
  tools: toolchain: install ccache
  install-dependencies.sh: add maven and ant
2019-01-07 12:56:17 +00:00
Pekka Enberg
9b27a3035c Merge 'Reduce inclusions of "database.hh"' from Avi
"This patchset reduces inclusions of database.hh, particularly in header
files. It reduces the number of objects depending on database.hh from 166
to 116.

Tests: unit(release), playing a little with tracing"

* tag 'database.hh/v1' of https://github.com/avikivity/scylla:
  streaming: stream_session: remove include of db/view/view_update_from_staging_generator.hh
  sstables: writer.hh: add some forward declarations
  table_helper: remove database.hh include
  table_helper: de-inline insert() and setup_keyspace()
  table_helper: de-template setup_keyspace()
  table_helper: simplify template body of table_helper::insert()
  schema_tables: remove #include of database.hh
  cql_type_parser: remove dependency on user_types_metadata
  thrift: add missing include of sleep.hh
  cql3: ks_prop_defs: remove #include "database.hh"
2019-01-07 12:56:17 +00:00
Benny Halevy
b017d87a43 tests: mc: add back missing sstable_3_x_test Statistics.db files
To be able to verify the golden version with sstabledump.
These files were generated by running sstable_3_x_test and keeping its
generated output files.

Refs #4043

Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
Message-Id: <20190103112511.23488-2-bhalevy@scylladb.com>
2019-01-07 12:56:16 +00:00
Benny Halevy
517ad58823 tests: mc: delete empty line from write_static_row/mc-1-big-TOC.txt
Refs #4043

Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
Message-Id: <20190103112511.23488-1-bhalevy@scylladb.com>
2019-01-07 12:56:16 +00:00
Nadav Har'El
b14616b879 docs/logging.md: improvements
Various small improvements to docs/logging.md:
1. Describe the options to log to stdout or syslog and their defaults.
2. Mention the possibility of using nodetool instead of REST API.
3. Additional small tweaks to formatting.

Signed-off-by: Nadav Har'El <nyh@scylladb.com>
Message-Id: <20190106111851.26700-1-nyh@scylladb.com>
2019-01-06 13:20:53 +02:00
Nadav Har'El
232e97ad06 docs/logging.md: new document
Add a new document about logging in Scylla, and how to change the log levels
when running Scylla and during the run.

It needs more developer-oriented information (e.g., how to create new logger
subsystems in the code) but I think it's a good start.

Some of the text is based on Glauber's writeup for the Scylla website on
changing log levels at runtime.

Signed-off-by: Nadav Har'El <nyh@scylladb.com>
Message-Id: <20190106103606.26032-1-nyh@scylladb.com>
2019-01-06 12:40:14 +02:00
Benny Halevy
2daf81e80f dist: redhat/debian specs: add dependency on 'file' package
Needed by seastar-addr2line

Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
Message-Id: <20190101203434.14858-1-bhalevy@scylladb.com>
2019-01-06 12:13:08 +02:00
Avi Kivity
f02c64cadf streaming: stream_session: remove include of db/view/view_update_from_staging_generator.hh
This header, which is easily replaced with a forward declaration,
introduces a dependency on database.hh everywhere. Remove it and scatter
includes of database.hh in source files that really need it.
2019-01-05 17:33:25 +02:00
Avi Kivity
ca93b88cfb sstables: writer.hh: add some forward declarations
This makes the header less dependent on previously-included headers.
2019-01-05 17:04:16 +02:00
Avi Kivity
53a21c7787 table_helper: remove database.hh include 2019-01-05 16:39:26 +02:00
Avi Kivity
7534412071 table_helper: de-inline insert() and setup_keyspace()
After previous patches de-templated these functions, we can de-inline them.
This helps reduce compile time and prepares to reduce header dependencies.
2019-01-05 16:28:46 +02:00
Avi Kivity
cfedf4ab0f table_helper: de-template setup_keyspace()
This setup function has no reason to be a template and is easily
converted. We can then later de-inline it to reduce dependencies.
2019-01-05 16:23:10 +02:00
Avi Kivity
659147cd79 table_helper: simplify template body of table_helper::insert()
Move most of the body into a non-template overload to reduce dependencies
in the header (and template bloat). The function is not on any fast path,
and noncopyable_function will likely not even allocate anything.
2019-01-05 16:22:08 +02:00
Avi Kivity
c3ef99f84f schema_tables: remove #include of database.hh
Distribute in source files (and one header - table_helper.hh) that need it.
2019-01-05 15:43:07 +02:00
Avi Kivity
f43f82d1d2 cql_type_parser: remove dependency on user_types_metadata
A default parameter of type T (or lw_shared_ptr<T>) requires that T be
defined. Remove the depndency by redefining the default parameter
as an overload, for T = user_types_metadata.
2019-01-05 15:40:58 +02:00
Avi Kivity
4ba1d4d1dc thrift: add missing include of sleep.hh
Currently obtained indirectly through database.hh.
2019-01-05 15:39:30 +02:00
Avi Kivity
d24962e16c cql3: ks_prop_defs: remove #include "database.hh"
Replace with forward declaration to reduce rebuilds.
2019-01-05 14:26:03 +02:00
Jesse Haber-Kucharsky
17a5f7acab build: Link against libatomic
Since Scylla uses functions from the `atomic` header in its own source
code, we need to explicitly link against the stub library that is
provided for hardware architectures that do not have native support for
atomic operations.

Fixes #4053

Signed-off-by: Jesse Haber-Kucharsky <jhaberku@scylladb.com>
Message-Id: <7d62e762130494d73565ce8c031f53aaf866d3aa.1546645041.git.jhaberku@scylladb.com>
2019-01-05 13:38:57 +02:00
Avi Kivity
36e4e9fb54 Update seastar submodule
* seastar 6c8c229...67fd967 (1):
  > perftune.py: tune only active NVMe HW queues on i3 AWS instances
2019-01-04 13:17:29 +02:00
Avi Kivity
b0980ba7c6 compaction_controller: increase minimum shares to 50 (~5%) for small-data workloads
The workload in #3844 has these characteristics:
 - very small data set size (a few gigabytes per shard)
 - large working set size (all the data, enough for high cache miss rate)
 - high overwrite rate (so a compaction results in 12X data reduction)

As a result, the compaction backlog controller assigns very few shares to
compaction (low data set size -> low backlog), so compaction proceeds very slowly.
Meanwhile, we have tons of cache misses, and each cache miss needs to read from a
large number of sstables (since compaction isn't progressing). The end result is
a high read amplification, and in this test, timeouts.

While we could declare that the scenario is very artificial, there are other
real-world scenarios that could trigger it. Consider a 100% write load
(population phase) followed by 100% read. Towards the end of the last compaction,
the backlog will drop more and more until compaction slows to a crawl, and until
it completes, all the data (for that compaction) will have to be read from its
input sstables, resulting in read amplification.

We should probably have read amplification affect the backlog, but for now the
simpler solution is to increase the minimum shares to 50 so that compaction
always makes forward progress. This will result in higher-than-needed compaction
bandwidth in some low write rate scenarios so we will see fluctuations in request
rate (what the controller was designed to avoid), but these fluctioations will be
limited to 5%.

Since the base class backlog_controller has a fixed (0, 0) point, remove it
and add it to derived classes (setting it to (0, 50) for compaction).

Fixes #3844 (or at least improves it).
Message-Id: <20181231162710.29410-1-avi@scylladb.com>
2019-01-04 10:58:43 +01:00
Duarte Nunes
b851cb1a9a distributed_loader: Forbid uploading MV sstables
Instead suggest that the views be re-created.

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
Message-Id: <20190103142933.35354-1-duarte@scylladb.com>
2019-01-03 16:31:20 +02:00
Avi Kivity
7d3562a403 tools: toolchain: update image for ant, maven, ccache, sudo 2019-01-03 16:16:47 +02:00
Avi Kivity
344468e20d tools: toolchain: dbuild: pass-through supplementary groups
Useful for ccache.
2019-01-03 16:16:47 +02:00
Avi Kivity
11889f5ea9 tools: toolchain: defeat PAM
Prevent PAM from enforcing security and preventing sudo from working. This is
done by replacing the default configuration (designed for workstations) to
one that uses pam_permit for everything.
2019-01-03 16:16:47 +02:00
Avi Kivity
9c258923d8 tools: toolchain: improve sudo support
Bind-mount /etc/passwd and /etc/group so sudo doesn't complain, and
support sudo without password or tty.
2019-01-03 16:16:47 +02:00
Avi Kivity
05f78df7b9 tools: toolchain: break long line in dbuild 2019-01-03 16:16:47 +02:00
Avi Kivity
f79a300081 tools: toolchain: prepare sudoers file
Don't require a tty or passwords, since they won't be available in
continuous integration environments.
2019-01-03 16:16:47 +02:00
Avi Kivity
25040824cf tools: toolchain: install ccache
Not strictly necessary, but often useful to reduce rebuild times. The user
will need to bind-mount a populated cache.
2019-01-03 16:16:47 +02:00
Avi Kivity
527e3a58ff install-dependencies.sh: add maven and ant
Add tools needed to build scylla-jmx and scylla-tools-java. While
not requirements of this repository, it's nicer if a single setup
can be used to build and run everything.

We also install pystache as it's used by packaging scripts.
2019-01-03 16:16:45 +02:00
Duarte Nunes
3235c13125 utils/fragmented_temporary_buffer: Correctly implement remove_suffix()
The current implementation breaks the invariant that

_size_bytes = reduce(_fragments, &temporary_buffer::size)

In particular, this breaks algorithms that check the individual
segment size.

Correctly implement remove_suffix() by destroying superfluous
temporary_buffer's and by trimming the last one, if needed.

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
Message-Id: <20190103133523.34937-1-duarte@scylladb.com>
2019-01-03 13:37:01 +00:00
Botond Dénes
021feef513 querier_cache: simplify memory eviction use-after-free fix, add tests
Simplify the fix for memory based eviction, introduced by 918d255 so
there is no need to massage the counters.

Also add a check to `test_memory_based_cache_eviction` which checks for
the bug fixed. While at it also add a check to
`test_time_based_cache_eviction` for the fix to time based eviction
(e5a0ea3).

Tests: tests/querier_cache:debug
Signed-off-by: Botond Dénes <bdenes@scylladb.com>
Message-Id: <c89e2788a88c2a701a2c39f377328e77ac01e3ef.1546515465.git.bdenes@scylladb.com>
2019-01-03 13:44:08 +02:00
Tomasz Grabiec
1613a623e1 Merge "Fix crash on corrupt sstable" from Rafael
* https://github.com/espindola/scylla espindola/invalid_boundary4:
  sstables: Refactor predicates on bound_kind_m
  Fix crash on corrupt sstable
2019-01-03 12:02:09 +01:00
Duarte Nunes
42d9ca8266 Merge 'Add staging SSTables support to row level repair' from Piotr
"
This series adds staging SSTables support to row level repair.
It was introduced for streaming sessions before, but since row level
repair doesn't leverage sessions at all, it's added separately.

Tests:
unit (release)
dtest (repair_additional_test.py:RepairAdditionalTest,
       excluding repair_abort_test, which fails for me locally on master)
"

* 'add_staging_sstables_generation_to_row_level_repair_2' of https://github.com/psarna/scylla:
  repair: add staging sstables support to row level repair
  main,repair: add params to row level repair init
  streaming,view: move view update checks to separate file
2019-01-03 09:40:13 +00:00
Piotr Sarna
a73d9ccf31 service: mark existing views as built before bootstrap
When a node is bootstrapping, it will receive data from other nodes
via streaming, including materialized views. Regardless whether these
views are built on other nodes or not, building them on newly
bootstrapped nodes has no effect - updates were either already streamed
completely (if view building have finished) or will be propagated
via view building, if the process is still ongoing.
So, marking all views as 'built' for the bootstrapped node prevents it
from spawning superfluous view building processes.

Fixes #4001
Message-Id: <fd53692c38d944122d1b1013fdb0aedf517fa409.1546498861.git.sarna@scylladb.com>
2019-01-03 09:39:33 +00:00
Botond Dénes
e5a0ea390a querier_cache: unregister queriers evicted due to expired TTL
Currently queriers evicted due to their TTL expiring are not
unregistered from the `reader_concurrency_semaphore`. This can cause a
use-after-free when the semaphore tries to evict the same querier at
some later point in time, as the querier entry it has a pointer to is
now invalid.

Fix by unregistering the querier from the semaphore before destroying
the entry.

Refs: #4018
Refs: #4031

Signed-off-by: Botond Dénes <bdenes@scylladb.com>
Message-Id: <4adfd09f5af8a12d73c29d59407a789324cd3d01.1546504034.git.bdenes@scylladb.com>
2019-01-03 10:29:26 +02:00
Piotr Sarna
bc74ac6f09 repair: add staging sstables support to row level repair
In some cases, sstables created during row level repair
should be enqueued as staging in order to generate
view updates from them.

Fixes #4034
2019-01-03 08:36:45 +01:00