Commit Graph

13779 Commits

Author SHA1 Message Date
Botond Dénes
e7535f5e88 Add flat_mutation_reader overload of make_combined_reader 2017-12-04 07:57:43 +02:00
Botond Dénes
8731c1bc66 Flatten the implementation of combined_mutation_reader
In fact flatten mutation_reader_merger and adjust combined_mutation_reader
accordingly.
2017-12-04 07:57:43 +02:00
Botond Dénes
217740c608 Add mutation_fragment_merger
This is the mutation fragment level equivalent of mutation_merger.
It merges fragments produced by different sources. Mutation
fragments are not as self-contained as streamed mutations, they have
external context, e.g. the partition they belong to. To support this
mutation_fragment_merger operates on a producer instead of a vector of
fragments. Producer can have internal state and can do side-actions as
fragments are consumed.
2017-12-04 07:57:43 +02:00
Botond Dénes
f6d11a3cfc mutation_fragment::apply(): handle partition start and end too 2017-12-04 07:57:43 +02:00
Botond Dénes
e47791810b Add non-const overload of partition_start::partition_tombstone()
And make the const version return a const reference so that code
mutating the returned value won't compile if the partition_start object
is const.
2017-12-04 07:57:43 +02:00
Botond Dénes
3f8110b5b6 Make combined_mutation_reader a flat_mutation_reader
For now only the interface is converted, behind the scenes the previous
implementation remains, it's output is simply converted by
flat_mutation_reader_from_mutation_reader. The implementation will be
converted in the following patches.
2017-12-04 07:57:43 +02:00
Botond Dénes
c011747c30 Move the mutation merging logic to combined_mutation_reader
This is the second step in splitting the combined readers's logic into
two parts as outlined in the previous patch.
2017-12-04 07:57:43 +02:00
Botond Dénes
3681e17555 Remove the unnecessary indirection of mutation_reader_merger::next() 2017-12-04 07:57:43 +02:00
Botond Dénes
c5e57e0961 Move the implementation of combined_mutation_reader into mutation_reader_merger
This simple code-movement and patch lays the groundwork for splitting
the logic in combined_mutation_reader into two blocks:
* one that takes care of moving the readers in lockstep and emits their
    output as a non-decreasing stream of streamed_mutations and
* one that takes care of merging the above stream into
    strictly-increasing stream of streamed_mutations.

This in turn is preparation-work to the transformation of
combined_mutation_reader into a flat_mutation_reader::impl.
2017-12-04 07:57:43 +02:00
Botond Dénes
85b5ded670 Remove unused mutation_and_reader::less_compare and operator< 2017-12-04 07:57:43 +02:00
Avi Kivity
f3d5674108 Merge "auth: Retry delayed task in case of error" from Duarte
"A delayed task can fail to execute, for example if the consistency
level the task required can't be achieves, so we should ensure it is
retried.

Fixes #3038"

* 'auth-retry/v2' of https://github.com/duarten/scylla:
  auth/standard_role_manager: Extend exception handling
  auth/common: Add exception handling and retry to task scheduling
  auth/standard_role_manager: Lift async block to caller
2017-12-03 12:08:03 +02:00
Vladimir Krivopalov
41eb278899 Only allow DISTINCT SELECT queries with partition key restrictions.
Fixes #2049

Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
Message-Id: <75e69626d797e63fb1e93a9120f135d4959fad1c.1512162540.git.vladimir@scylladb.com>
2017-12-03 11:59:11 +02:00
Duarte Nunes
7434d21023 auth/standard_role_manager: Extend exception handling
Also handle exceptions thrown by has_existing_roles(), and print a
similar message to Apache Cassandra in case of error.

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-12-02 22:40:13 +00:00
Duarte Nunes
01e2c7b614 auth/common: Add exception handling and retry to task scheduling
This follows the implementation in Apache Cassandra. The auth tasks
executed by delay_until_system_ready() usually perform a query with
QUORUM consistency level, which can fail if some nodes are
unavailable. So, we provide both exception handling and a retry
mechanism.

Fixes #3038

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-12-02 22:40:06 +00:00
Duarte Nunes
82206f966d auth/standard_role_manager: Lift async block to caller
has_existing_roles() creates a seastar thread, but that can be
lifted to the caller for prettier code.

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-12-02 20:15:09 +00:00
Takuya ASADA
8c403ea4e0 dist/debian: disable entire pybuild actions
Even after 25bc18b commited, we still see the build error similar to #3036 on
some environment, but not on dh_auto_install, it on dh_auto_test (see #3039).

So we need to disable entire pybuild actions, not just dh_auto_install.

Fixes #3039

Signed-off-by: Takuya ASADA <syuu@scylladb.com>
Message-Id: <1512185097-23828-1-git-send-email-syuu@scylladb.com>
2017-12-02 19:36:43 +02:00
Vladimir Krivopalov
7f7bf8f23a test.py: Fix a typo in role_manager_test name.
Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
Message-Id: <e80ef188c024f178c1c94fe3739b77a2c2448bd4.1512162655.git.vladimir@scylladb.com>
2017-12-01 21:25:08 +00:00
Takuya ASADA
25bc18b8ff dist/debian: skip running dh_auto_install on pybuild
We are getting package build error on dh_auto_install which is invoked by
pybuild.
But since we handle all installation on debian/scylla-server.install, we can
simply skip running dh_auto_install.

Fixes #3036

Signed-off-by: Takuya ASADA <syuu@scylladb.com>
Message-Id: <1512065117-15708-1-git-send-email-syuu@scylladb.com>
2017-12-01 16:06:25 +02:00
Duarte Nunes
9694bee0d4 Merge 'Improvements to mutation printout' from Tomasz
"This series makes it easier to comprehend assertion failures which
involve printing mutation contents."

* 'tgrabiec/mutation-printout' of github.com:scylladb/seastar-dev:
  tests: Introduce mutation_diff script
  mutation: Make printout more concise
  mutation_partition: Don't print absent elements
  mutation_partition: Make row_marker printout similar to other partition elements
  database: Move operator<<() overloads to appropriate source files
  mutation_partition: Use multi-line printout
  position_in_partition: Improve printout
2017-12-01 11:02:02 +00:00
Tomasz Grabiec
c3276451af tests: Introduce mutation_diff script
Converts assertion failure messages which spit out mutation contents
into a human-readable diff.
2017-12-01 10:52:37 +01:00
Tomasz Grabiec
66990867b8 mutation: Make printout more concise
Before:

{ks.cf key {key: pk{000c706b30303030303030303030}, token:-2018791535786252460} data {mutation_partition:

After:

{ks.cf {key: pk{000c706b30303030303030303030}, token:-2018791535786252460} {mutation_partition:
2017-12-01 10:52:37 +01:00
Tomasz Grabiec
05a6c67804 mutation_partition: Don't print absent elements
Makes printout shorter and thus easier to parse.
2017-12-01 10:52:37 +01:00
Tomasz Grabiec
d8b54a57aa mutation_partition: Make row_marker printout similar to other partition elements 2017-12-01 10:52:37 +01:00
Tomasz Grabiec
fd7ab5fe99 database: Move operator<<() overloads to appropriate source files 2017-12-01 10:52:37 +01:00
Tomasz Grabiec
7bde3090b4 mutation_partition: Use multi-line printout
Convert to a multi line output, which is easier to read for a human.

After:

{ks.cf key {key: pk{000c706b30303030303030303030}, token:-2018791535786252460} data {mutation_partition: {tombstone: none},
 range_tombstones: {},
 static: cont=1 {row: },
 clustered: {
    {rows_entry: cont=true dummy=false {position: clustered,ckp{000c636b30303030303030303030},0} {deletable_row: {row: }}},
    {rows_entry: cont=true dummy=true {position: clustered,ckp{000c636b30303030303030303031},0} {deletable_row: {row: }}}}}}
2017-12-01 10:52:37 +01:00
Tomasz Grabiec
36caf0f9db position_in_partition: Improve printout
Before:

 {position: type clustered, bound_weight -1, key ckp{000c636b30303030303030303033}}

After:

 {position: clustered,ckp{000c636b30303030303030303033},-1}

Benefits:

  - most significant parts appear first.
    bound_weight, which is least significant, was in the middle before.

  - shorter, so a bit easier to parse assertion failures.
2017-12-01 10:52:37 +01:00
Jesse Haber-Kucharsky
cc19545f20 auth/standard_role_manager: Fix initialization
Checking for existing roles requires that the system is "settled" first.
This is consistent with the existing code for user-management, but not
with the initial introduction of the role manager.

Fixes #3028.

Signed-off-by: Jesse Haber-Kucharsky <jhaberku@scylladb.com>
Message-Id: <57157a0df92dba6bf9a95960b9c8261a45acb1ad.1512093477.git.jhaberku@scylladb.com>
2017-12-01 10:20:16 +01:00
Duarte Nunes
1b4ca6aadf auth/standard_role_manager: Add exception handling for background task
Signed-off-by: Duarte Nunes <duarte@scylladb.com>
Message-Id: <20171130233851.32827-1-duarte@scylladb.com>
2017-12-01 10:20:16 +01:00
Duarte Nunes
ab6f0de6e7 auth/service: Stop role manager instead of starting
Fixes #3028

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
Message-Id: <20171130232032.31924-1-duarte@scylladb.com>
2017-12-01 10:20:16 +01:00
Avi Kivity
f56c8415d8 Merge seastar upstream
* seastar b2a3ea3...dc44656 (1):
  > Update dpdk submodule
2017-11-30 10:37:23 +02:00
Avi Kivity
ca4abb1bbf Merge seastar upstream
* seastar 3b09bad...b2a3ea3 (5):
  > dependency: use new gcc c++ boost
  > test.py: remove unused black_hole
  > util: Add throw_with_backtrace helper to add backtraces to exceptions.
  > tests: add vruntime to scheduling_group_demo
  > Fix Clang build for recently added io_tester app.
2017-11-30 10:31:48 +02:00
Vladimir Krivopalov
6d76ac8043 Lift checks on list and map values to allow values of length > 64K.
Fixes #3007

Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
Message-Id: <7b232a655b5531d4bfa2be3d9611f8b1ba0349b0.1512021011.git.vladimir@scylladb.com>
2017-11-30 10:31:19 +02:00
Amos Kong
bfc055fedc install different dependence for fedora and centos
The packages are installed from nstall-dependencies.sh don't satisfy
requests in configuration on CentOS. This patch switched to use
newer packages from scylla-3rdparty repo.

Signed-off-by: Amos Kong <amos@scylladb.com>
Message-Id: <9bca7b08704f68c604560e5ec7ce0c0358d328da.1511965492.git.amos@scylladb.com>
2017-11-29 17:05:47 +02:00
Duarte Nunes
cda3ddd146 compound_compact: Change universal reference to const reference
The universal reference was introduced so we could bind an rvalue to
the argument, but it would have sufficed to make the argument a const
reference. This is also more consistent with the function's other
overload.

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
Message-Id: <20171129132758.19654-1-duarte@scylladb.com>
2017-11-29 14:41:35 +01:00
Tomasz Grabiec
e9cce59b85 Merge "compact_storage serialization fixes" from Duarte
Fix two issues with serializing non-compound range tombstones as
compound: convert a non-compound clustering element to compound and
actually advertise the issue to other nodes.

* git@github.com:duarten/scylla.git  rt-compact-fixes/v1:
  compound_compact: Allow rvalues in size()
  sstables/sstables: Convert non-compound clustering element to compound
  tests/sstable_mutation_test: Verify we can write/read non-correct RTs
  service/storage_service: Export non-compound RT feature
2017-11-29 14:17:50 +01:00
Duarte Nunes
2f513514cc service/storage_service: Export non-compound RT feature
Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-11-29 14:17:50 +01:00
Duarte Nunes
13fc26214e tests/sstable_mutation_test: Verify we can write/read non-correct RTs
Add test to verify we can write and read non-compound tombstones and
compound ones for backward compatibility.

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-11-29 14:17:50 +01:00
Duarte Nunes
013659506b sstables/sstables: Convert non-compound clustering element to compound
576ea421dc introduced a regression
as it didn't change the assumption that all clustering elements where
compound when writing a range tombstone, compound or non-compound, as
compound. Thus, we serialized a non-compound element while we should
have serialized a compound one.

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-11-29 14:17:50 +01:00
Duarte Nunes
ec8ce3388e compound_compact: Allow rvalues in size()
Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-11-29 14:17:49 +01:00
Paweł Dziepak
586b61d57d size_estimates: convert reader to flat mutation readers
Message-Id: <20171129105909.27084-1-pdziepak@scylladb.com>
2017-11-29 12:14:05 +00:00
Amos Kong
c2bdb3bdbc test.py: remove unused black_hole
Signed-off-by: Amos Kong <amos@scylladb.com>
Message-Id: <2e79a58906e8f3ba512586fe4ea4a662fa1a3d35.1511944232.git.amos@scylladb.com>
2017-11-29 11:07:24 +02:00
Amos Kong
fd71405465 auth/transitional: use defined package name prefix
Signed-off-by: Amos Kong <amos@scylladb.com>
Message-Id: <f3337b00a9209a9af4918a25145d661488387fa8.1511945338.git.amos@scylladb.com>
2017-11-29 09:59:33 +01:00
Amos Kong
46541d400e test.py: fix test runner description
Signed-off-by: Amos Kong <amos@scylladb.com>
Message-Id: <9b6febecc18376e774611322119a6300dc7363e2.1511945338.git.amos@scylladb.com>
2017-11-29 09:59:22 +01:00
Amos Kong
edfaeb40d9 storage_service: fix trace msg in get_ring_delay()
The trace log in get_ring_delay() is wrong.

Signed-off-by: Amos Kong <amos@scylladb.com>
Message-Id: <2556583ec160d0417ed669fe3322a16ffda37ce7.1511945338.git.amos@scylladb.com>
2017-11-29 09:59:12 +01:00
Amos Kong
d5caaee0cc main: move messaging service notify to right position
Commit eb13f65949 adjusted the start time
of messaging service, but the notify message wasn't moved together.

Signed-off-by: Amos Kong <amos@scylladb.com>
Cc: Pekka Enberg <penberg@scylladb.com>
Message-Id: <1073f285189686619bb4870ef1be20f0f24e8532.1511945338.git.amos@scylladb.com>
2017-11-29 09:59:01 +01:00
Amos Kong
4be66f8498 main: remove repeat register of storage service API
We repeatedly register storage service API twice. The first one is
before starting storage service, let's remove it.

Signed-off-by: Amos Kong <amos@scylladb.com>
Message-Id: <8bb09c2acfed57bf74a81d189fa08ba34a594294.1511945338.git.amos@scylladb.com>
2017-11-29 09:58:50 +01:00
Raphael S. Carvalho
f699cf17ae sstables: fix data_consume_context's move operator and ctor
after 7f8b62bc0b, its move operator and ctor broke. That potentially
leads to error because data_consume_context dtor moves sstable ref
to continuation when waiting for in-flight reads from input stream.
Otherwise, sstable can be destroyed meanwhile and file descriptor
would be invalid, leading to EBADF.

Fixes #3020.

Signed-off-by: Raphael S. Carvalho <raphaelsc@scylladb.com>
Message-Id: <20171129014917.11841-1-raphaelsc@scylladb.com>
2017-11-29 09:53:47 +01:00
Avi Kivity
4cfcd8055e Merge "Drop reversible apply() from mutation_partition" from Tomasz
"This simplifies implementation of mutation_partition merging by relaxing
exception guarantees it needs to provide. This allows reverters to be dropped.

Direct motivation for this is to make it easier to implement new semantics
for merging of clustering range continuity.

Implementation details:

We only need strong exception guarantees when applying to the memtable, which is
using MVCC. Instead of calling apply() with strong exception guarantees on the latest
version, we will move the incoming mutation to a new partition_version and then
use monotonic apply() to merge them. If that merging fails, we attach the version with
the remainder, which cannot fail. This way apply() always succeeds if the allocation
of partition_version object succeeds.

Results of `perf_simple_query_g -c1 -m1G --write` (high overwrite rate):

Before:

 101011.13 tps
 102498.07 tps
 103174.68 tps
 102879.55 tps
 103524.48 tps
 102794.56 tps
 103565.11 tps
 103018.51 tps
 103494.37 tps
 102375.81 tps
 103361.65 tps

After:

 101785.37 tps
 101366.19 tps
 103532.26 tps
 100834.83 tps
 100552.11 tps
 100891.31 tps
 101752.06 tps
 101532.00 tps
 100612.06 tps
 102750.62 tps
 100889.16 tps

Fixes #2012."

* tag 'tgrabiec/drop-reversible-apply-v1' of github.com:scylladb/seastar-dev:
  mutation_partition: Drop apply_reversibly()
  mutation_partition: Relax exception guarantees of apply()
  mutation_partition: Introduce apply_weak()
  tests: mvcc: Add test for atomicity of partition_entry::apply()
  tests: Move failure_injecting_allocation_strategy to a header
  tests: mutation_partition: Test exception guarantees of apply_monotonically()
  mvcc: Use apply_monotonically() where sufficient
  mvcc: partition_version: Use apply_monotonically() to provide atomicity
  mvcc: Extract partition_entry::add_version()
  mutation_partition: Introduce apply_monotonically()
  mutation_partition: Introduce row::consume_with()
2017-11-28 16:35:06 +02:00
Tomasz Grabiec
70e14f78a7 mutation_partition: Drop apply_reversibly() 2017-11-28 13:03:06 +01:00
Tomasz Grabiec
091e10fc70 mutation_partition: Relax exception guarantees of apply()
The uses which needed strong or weak exception guarantees were
switched to a solution involving apply_monotonically(). All remaining
uses don't need any exception guarantees.
2017-11-28 13:03:06 +01:00