Commit Graph

16718 Commits

Author SHA1 Message Date
Calle Wilund
3cb50c861d messaging_service: Make rpc streaming sink respect tls connection
Fixes #3787

Message service streaming sink was created using direct call to
rpc::client::make_sink. This in turn needs a new socker, which it
creates completely ignoring what underlying transport is active for the
client in question.

Fix by retaining the tls credential pointer in the client wrapper, and
using this in a sink method to determine whether to create a new tls
socker, or just go ahead with a plain one.

Message-Id: <20181010003249.30526-1-calle@scylladb.com>
2018-10-10 12:55:28 +03:00
Avi Kivity
1891779e64 Merge "db/hints: Use frozen_mutation in hinted handoff" from Duarte
"
This series changes hinted handoff to work with `frozen_mutation`s
instead of naked `mutation`s. Instead of unfreezing a mutation from
the commitlog entry and then freezing it again for sending, now we'll
just keep the read, frozen mutation.

Tests: unit(release)
"

* 'hh-manager-cleanup/v1' of https://github.com/duarten/scylla:
  db/hints/manager: Use frozen_mutation instead of mutation
  db/hints/manager: Use database::find_schema()
  db/commitlog/commitlog_entry: Allow moving the contained mutation
  service/storage_proxy: send_to_endpoint overload accepting frozen_mutation
  service/storage_proxy: Build a shared_mutation from a frozen_mutation
  service/storage_proxy: Lift frozen_mutation_and_schema
  service/storage_proxy: Allow non-const ranges in mutate_prepare()
2018-10-09 17:48:18 +03:00
Piotr Sarna
a93d27960c tests: add secondary index paging unit test case
A simple case for SI paging is added to secondary_index_test suite.
This commit should be followed by more complex testing
and serves as an example on how to extract paging state and use it
across CQL queries.
Message-Id: <b22bdb5da1ef8df399849a66ac6a1f377e6a650a.1539090350.git.sarna@scylladb.com>
2018-10-09 15:05:20 +01:00
Avi Kivity
cfab7a2be6 Update seastar submodule
* seastar ed44af8...4669469 (2):
  > prometheus: Fix histogram text representation
  > reactor: count I/O errors

Fixes #3827.
2018-10-09 16:36:47 +03:00
Gleb Natapov
319ece8180 storage_proxy: do not pass write_stats down to send_to_live_endpoints
write_stats is referenced from write handler which is available in
send_to_live_endpoints already. No need to pass it down.

Message-Id: <20181009133017.GA14449@scylladb.com>
2018-10-09 16:33:53 +03:00
Botond Dénes
d467b518bc multishard_mutation_query(): don't attempt to stop broken readers
Currently, when stopping a reader fails, it simply won't be attempted to
be saved, and it will be left in the `_readers` array as-is. This can
lead to an assertion failure as the reader state will contain futures
that were already waited upon, and that the cleanup code will attempt to
wait on again. To prevent this, when stopping a reader fails, reset it
to nonexistent state, so that the cleanup code doesn't attempt to do
anything with it.

Refs: #3830

Signed-off-by: Botond Dénes <bdenes@scylladb.com>
Message-Id: <a1afc1d3d74f196b772e6c218999c57c15ca05be.1539088164.git.bdenes@scylladb.com>
2018-10-09 15:59:50 +03:00
Gleb Natapov
207b57a892 storage_proxy: count number of timed out write attempts after CL is reached
It is useful to have this counter to investigate the reason for read
repairs. Non zero value means that writes were lost after CL is reached
and RR is expected.

Message-Id: <20181009120900.GF22665@scylladb.com>
2018-10-09 15:17:07 +03:00
Piotr Sarna
b3685342a6 service/pager: avoid dereferencing null partition key
The pager::state() function returns a valid paging object even
if the pager itself is exhausted. It may also not contain the partition
key, so using it unconditionally was a bug - now, in case there is no
partition key present, paging state will contain an empty partition key.

Fixes #3829

Message-Id: <28401eb21ab8f12645c0a33d9e92ada9de83e96b.1539074813.git.sarna@scylladb.com>
2018-10-09 12:13:52 +03:00
Botond Dénes
4bb0bbb9e2 database: add make_multishard_streaming_reader()
Creates a streaming reader that reads from all shards. Shard readers are
created with `table::make_streaming_reader()`.
This is needed for the new row-level repair.

Signed-off-by: Botond Dénes <bdenes@scylladb.com>
Message-Id: <4b74c710bed2ef98adf07555a4c841e5b690dd8c.1538470782.git.bdenes@scylladb.com>
2018-10-09 11:07:47 +03:00
Botond Dénes
3eeb6fbd23 table::make_streaming_reader(): add single-range overload
This will be used by the `make_multishard_streaming_reader()` in the
next patch. This method will create a multishard combining reader which
needs its shard readers to take a single range, not a vector of ranges
like the existing overload.

Signed-off-by: Botond Dénes <bdenes@scylladb.com>
Message-Id: <cc6f2c9a8cf2c42696ff756ed6cb7949b95fe986.1538470782.git.bdenes@scylladb.com>
2018-10-09 11:07:46 +03:00
Botond Dénes
a56871fab7 tests/multishard_mutation_query_test: test rage-tombstones spanning multiple pages
Extend the existing range-tombstone test, such that range tombstones
span multiple pages worth of rows.

Signed-off-by: Botond Dénes <bdenes@scylladb.com>
Message-Id: <583aa826ea12118289b08d483b55b5573d27e1ee.1539002810.git.bdenes@scylladb.com>
2018-10-09 10:18:28 +03:00
Vladimir Krivopalov
e9aba6a9c3 sstables: Add missing 'mc' format into format strings map in sstable::filename().
Fixes #3832.

Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
Message-Id: <269421fb2ac8ab389231cbe9ed501da7e7ff936a.1539048008.git.vladimir@scylladb.com>
2018-10-09 10:07:08 +03:00
Asias He
8edf3defdf range_streamer: Futurize add_ranges
It might take long time for get_all_ranges_with_sources_for and
get_all_ranges_with_strict_sources_for to calculate which cause reactor
stall. To fix, run them in a thread and yield. Those functions are used in
the slow path, it is ok to yield more than needed.

Fixes #3639

Message-Id: <63aa7794906ac020c9d9b2984e1351a8298a249b.1536135617.git.asias@scylladb.com>
2018-10-09 09:46:50 +03:00
Nadav Har'El
b8668dc0f8 materialized views: refuse to filter by non-key column
A materialized views can provide a filter so as to pick up only a subset
of the rows from the base table. Usually, the filter operates on columns
from the base table's primary key. If we use a filter on regular (non-key)
columns, things get hairy, and as issue #3430 showed, wrong: merely updating
this column in the base table may require us to delete, or resurrect, the
view row. But normally we need to do the above when the "new view key column"
was updated, when there is one. We use shadowable tombstones with one
timestamp to do this, so it cannot take into account the two timestamp from
those two columns (the filtered column and the new key column).

So in the current code, filtering by a non-key column does not work correctly.
In this patch we provide two test cases (one involving TTLs, and one involves
only normal updates), which demonstrate vividly that it does *not* work
correctly. With normal updates, trying to resurect a view row that has
previously disappeared, fails. With TTLs, things are even worse, and the view
row fails to disappear when the filtered column is TTLed.

In Cassandra, the same thing doesn't work correctly as well (see
CASSANDRA-13798 and CASSANDRA-13832) so they decided to refuse creating
a materialized view filtering a non-key column. In this patch we also
do this - fail the creation of such an unsupported view. For this reason,
the two tests mentioned above are commented out in a "#if", with, instead,
a trivial test verifying a failure to create such a view.

Note that as explained above, when the filtered column and new view key
column are *different* we have a problem. But when they are the *same* - namely
we filter by a non-key base column which actually *is* a key in the view -
we are actually fine. This patch includes additional test cases verifying
that this case is really fine and provides correct results. Accordingly,
this case is *not* forbidden in the view creation code.

Fixes #3430.

Signed-off-by: Nadav Har'El <nyh@scylladb.com>
Message-Id: <20181008185633.24616-1-nyh@scylladb.com>
2018-10-08 20:37:11 +01:00
Avi Kivity
0fa60660b8 Merge "Fix mutation fragments clobbering on fast_forward" from Vladimir
"
This patchset fixes a bug in SSTables 3.x reading when fast-forwarding
is enabled. It is possible that a mutation fragment, row or RT marker,
is read and then stored because it falls outside the current
fast-forwarding range.

If the reader is further fast-forwarded but the
row still falls outside of it, the reader would still continue reading
and get the next fragment, if any, that would clobber the currently
stored one. With this fix, the reader does not attempt to read on
after storing the current fragment.

Tests: unit {release}
"

* 'projects/sstables-30/row-skipped-on-double-ff/v2' of https://github.com/argenet/scylla:
  tests: Add test for reading rows after multiple fast-forwarding with SSTables 3.x.
  sstables: mp_row_consumer_m to notify reader on end of stream when storing a mutation fragment.
  sstables: In mp_row_consumer_m::push_mutation_fragments(), return the called helper's value.
2018-10-08 20:18:42 +03:00
Vladimir Krivopalov
07d61683b6 tests: Add test for reading rows after multiple fast-forwarding with SSTables 3.x.
Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
2018-10-08 09:09:33 -07:00
Botond Dénes
d0eb443913 result_memory_accounter: drop state_for_another_shard()
This is not used since range-scans were refactored (e49a14e30) as part
of making them stateful.

Signed-off-by: Botond Dénes <bdenes@scylladb.com>
Message-Id: <589f30163e29299e840750457919214a26f0da93.1539005336.git.bdenes@scylladb.com>
2018-10-08 14:29:48 +01:00
Duarte Nunes
48ebe6552c Merge 'Fix issues with endpoint state replication to other shards' from Tomasz
Fixes #3798
Fixes #3694

Tests:

  unit(release), dtest([new] cql_tests.py:TruncateTester.truncate_after_restart_test)

* tag 'fix-gossip-shard-replication-v1' of github.com:tgrabiec/scylla:
  gms/gossiper: Replicate enpoint states in add_saved_endpoint()
  gms/gossiper: Make reset_endpoint_state_map() have effect on all shards
  gms/gossiper: Replicate STATUS change from mark_as_shutdown() to other shards
  gms/gossiper: Always override states from older generations
2018-10-08 14:19:19 +01:00
Avi Kivity
4b16867bd7 cql: relax writetime/ttl selections of collections
writetime() or ttl() selections of non-frozen collections can work, as they
are single cells. Relax the check to allow them, and only forbid non-frozen
collections.

Fixes #3825.

Tests: cql_query_test (release).
Message-Id: <20181008123920.27575-1-avi@scylladb.com>
2018-10-08 14:07:01 +01:00
Duarte Nunes
56e36ee14b flat_mutation_reader: Use std::move(range) in move_buffer_content_to()
Instead of open coding it.

Tests: unit(release)

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
Message-Id: <20181008104328.13164-1-duarte@scylladb.com>
2018-10-08 13:57:13 +03:00
Avi Kivity
474bb4e44f cql: functions: implement min/max/count for bytes type
Uncomment existing declare() calls and implement tests. Because the
data_value(bytes) constructor is explicit, we add explicit conversion to
data_value in impl_min_function_for<> and impl_max_function_for<>.

Fixes #3824.
Message-Id: <20181008084127.11062-1-avi@scylladb.com>
2018-10-08 10:48:30 +01:00
Takuya ASADA
d89114d1fc dist/debian: install GPG key for cross-building
We found on some Debian environment Ubuntu .deb build fails with
gpg error because lack of Ubuntu GPG key, so we need to install it before
start pbuilder.
Same as on Ubuntu, it needs to install Debian GPG key.

Fixes #3823

Signed-off-by: Takuya ASADA <syuu@scylladb.com>
Message-Id: <20181008072246.13305-1-syuu@scylladb.com>
2018-10-08 10:43:25 +03:00
Botond Dénes
b01050e28c HACKING.md: add link to the scylla-dev mailing list
Signed-off-by: Botond Dénes <bdenes@scylladb.com>
Message-Id: <9a5d967f791d7a0db584864f68f93bbc68f52372.1538977773.git.bdenes@scylladb.com>
2018-10-08 10:06:50 +03:00
Duarte Nunes
74d809f8be db/hints/manager: Use frozen_mutation instead of mutation
Instead of unfreezing a mutation from the commitlog and then freezing
it again to send, just keep the read frozen mutation.

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2018-10-07 19:57:30 +01:00
Duarte Nunes
6eec9748fc db/hints/manager: Use database::find_schema()
Instead of using find_column_family() and repeatedly asking for
column_family::schema(), use database::find_schema() instead.

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2018-10-07 19:57:30 +01:00
Duarte Nunes
5b3d08defc db/commitlog/commitlog_entry: Allow moving the contained mutation
Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2018-10-07 19:57:30 +01:00
Duarte Nunes
3b6d2286e9 service/storage_proxy: send_to_endpoint overload accepting frozen_mutation
Add an overload to send_to_endpoint() which accepts a frozen_mutation.
The motivation is to allow better accounting of pending view updates,
but this change also allows some callers to avoid unfreezing already
frozen mutations.

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2018-10-07 19:37:39 +01:00
Duarte Nunes
c7639f53e0 service/storage_proxy: Build a shared_mutation from a frozen_mutation
Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2018-10-07 19:27:29 +01:00
Duarte Nunes
9e14412528 service/storage_proxy: Lift frozen_mutation_and_schema
Lift frozen_mutation_and_schema to frozen_mutation.hh, since other
subsystems using frozen_mutations will likely want to pass it around
together with the schema.

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2018-10-07 19:27:29 +01:00
Duarte Nunes
2c739f36cc service/storage_proxy: Allow non-const ranges in mutate_prepare()
Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2018-10-07 19:27:29 +01:00
Avi Kivity
1cc81d1492 Update seastar submodule
* seastar 71e914e...ed44af8 (4):
  > Merge "Add semaphore_units<>::split() function" from Duarte
  > scheduling: introduce destroy_scheduling_group()
  > tls: include "api.hh" for listen_options
  > rpc: connection-level resource isolation
2018-10-07 20:45:49 +03:00
Duarte Nunes
4162bff37a Merge 'cql3: allow adding or dropping multiple columns in ALTER TABLE statement' from Benny
"
This patchset implements ALTER TABLE ADD/DROP for multiple columns.

Fixes: #2907
Fixes: #3691

Tests: schema_change_test
"

* 'projects/cql3/alter-table-multi/v3' of https://github.com/bhalevy/scylla:
  cql3: schema_change_test: add test_multiple_columns_add_and_drop
  cql3: allow adding or dropping multiple columns in ALTER TABLE statement
  cql3: alter_table_statement: extract add/alter/drop per-column code into functions
  cql3: testing for MVs for alter_table_statement::type::drop is not per column
  cql3: schema_change_test: add test_static_column_is_dropped
2018-10-07 17:30:09 +01:00
Benny Halevy
0f350f5d59 cql3: schema_change_test: add test_multiple_columns_add_and_drop
Add a unit test for adding or dropping multiple columns.
See https://github.com/scylladb/scylla/issues/2907

Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2018-10-07 19:14:29 +03:00
Benny Halevy
23fecc7e5e cql3: allow adding or dropping multiple columns in ALTER TABLE statement
Fixes #2907
Fixes #3691

See Cassandra reference: https://apache.googlesource.com/cassandra/+/cassandra-3.6/src/antlr/Parser.g
/**
 * ALTER COLUMN FAMILY <CF> ALTER <column> TYPE <newtype>;
 * ALTER COLUMN FAMILY <CF> ADD <column> <newtype>; | ALTER COLUMN FAMILY <CF> ADD (<column> <newtype>,<column1> <newtype1>..... <column n> <newtype n>)
 * ALTER COLUMN FAMILY <CF> DROP <column>; | ALTER COLUMN FAMILY <CF> DROP ( <column>,<column1>.....<column n>)
 * ALTER COLUMN FAMILY <CF> WITH <property> = <value>;
 * ALTER COLUMN FAMILY <CF> RENAME <column> TO <column>;
 */
alterTableStatement returns [shared_ptr<alter_table_statement> expr]
    @init {
        alter_table_statement::type type;
        auto props = make_shared<cql3::statements::cf_prop_defs>();
        std::vector<alter_table_statement::column_change> column_changes;
        std::vector<std::pair<shared_ptr<cql3::column_identifier::raw>, shared_ptr<cql3::column_identifier::raw>>> renames;
    }
    : K_ALTER K_COLUMNFAMILY cf=columnFamilyName
          ( K_ALTER id=cident K_TYPE v=comparatorType { type = alter_table_statement::type::alter; column_changes.emplace_back(id, v); }
          | K_ADD                                     { type = alter_table_statement::type::add; }
            (         id1=cident  v1=comparatorType  b1=cfisStatic { column_changes.emplace_back(id1, v1, b1); }
            | '('     id1=cident  v1=comparatorType  b1=cfisStatic { column_changes.emplace_back(id1, v1, b1); }
                 (',' idn=cident  vn=comparatorType  bn=cfisStatic { column_changes.emplace_back(idn, vn, bn); } )* ')'
            )

          | K_DROP  id=cident                         { type = alter_table_statement::type::drop; column_changes.emplace_back(id); }
          | K_WITH  properties[props]                 { type = alter_table_statement::type::opts; }
          | K_RENAME                                  { type = alter_table_statement::type::rename; }
               id1=cident K_TO toId1=cident { renames.emplace_back(id1, toId1); }
               ( K_AND idn=cident K_TO toIdn=cident { renames.emplace_back(idn, toIdn); } )*
          )
    {
        $expr = ::make_shared<alter_table_statement>(std::move(cf), type, std::move(column_changes), std::move(props), std::move(renames));
    }
    ;

Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2018-10-07 19:14:26 +03:00
Benny Halevy
3fa6d3d3a8 cql3: alter_table_statement: extract add/alter/drop per-column code into functions
In preparation to supporting ALTER TABLE with multiple columns (#3691)

Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2018-10-07 18:57:06 +03:00
Alexys Jacob
eebbae066a dist/common/scripts/scylla_setup: fix gentoo linux installed package detection
return code is expected to be 0 when installed package was found

Signed-off-by: Alexys Jacob <ultrabug@gentoo.org>
Message-Id: <20181002123433.4702-1-ultrabug@gentoo.org>
2018-10-07 16:46:02 +03:00
Alexys Jacob
850d046551 dist/common/scripts/scylla_ntp_setup: fix gentoo linux systemd service name
fix typo as ntpd package systemd service is named ntpd, not sntpd

Signed-off-by: Alexys Jacob <ultrabug@gentoo.org>
Message-Id: <20181002123802.5576-1-ultrabug@gentoo.org>
2018-10-07 16:46:01 +03:00
Alexys Jacob
54151d2039 dist/common/scripts/scylla_cpuscaling_setup: fix file open mode for writing
gentoo linux part tries to open the configuration file without the
write flag, leading to an exception

Signed-off-by: Alexys Jacob <ultrabug@gentoo.org>
Message-Id: <20181002123957.6010-1-ultrabug@gentoo.org>
2018-10-07 16:46:00 +03:00
Avi Kivity
700994a4f2 Merge "Add GDB commands for examining gossiper and RPC state" from Tomasz
* 'gdb-gms-netw' of github.com:tgrabiec/scylla:
  gdb: Introduce 'scylla netw' command
  gdb: Introduce 'scylla gms' command
  gdb: Add sharded service wrapper
  gdb: Add unique_ptr wrapper
  gdb: Add list_unordered_set()
  gdb: Make std_vector wrapper indexable
  gdb: Add wrapper for std_map
2018-10-07 16:42:52 +03:00
Vlad Zolotarov
7cbe5f2983 service: priority_manager.hh: add #pragma once
Signed-off-by: Vlad Zolotarov <vladz@scylladb.com>
Message-Id: <20181005040552.2183-3-vladz@scylladb.com>
2018-10-07 16:04:26 +03:00
Duarte Nunes
30d6ed8f92 service/storage_proxy: Consider target liveness in sent_to_endpoint()
So we don't attempt to send mutations to unreachable endpoints and
instead store a hint for them, we now check the endpoint status and
populate dead_endpoints accordingly in
storage_proxy::send_to_endpoint().

Fixes #3820

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
Message-Id: <20181007100640.2182-1-duarte@scylladb.com>
2018-10-07 16:04:26 +03:00
Benny Halevy
581b9006d4 cql3: testing for MVs for alter_table_statement::type::drop is not per column
No column can be dropped from a table with materialized views
so the respective exception can ignore and omit the dropped column name.

In preparation for refactoring the respective code, moving the per-column
code to member functions.

Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2018-10-07 15:16:32 +03:00
Benny Halevy
8d298064b1 cql3: schema_change_test: add test_static_column_is_dropped
Test dropping of static column defined in CREATE TABLE, and
adding and dropping of a static column using ALTER TABLE.

Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2018-10-07 14:34:28 +03:00
Duarte Nunes
a69d468101 service/storage_proxy: Fix formatting of send_to_endpoint()
Signed-off-by: Duarte Nunes <duarte@scylladb.com>
Message-Id: <20181006204756.32232-1-duarte@scylladb.com>
2018-10-07 11:05:32 +03:00
Vladimir Krivopalov
9db124c6e5 sstables: mp_row_consumer_m to notify reader on end of stream when storing a mutation fragment.
Without it, the reader will attempt to read further and may clobber the
stored fragment with the next one read, if any.

Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
2018-10-05 19:09:09 -07:00
Vladimir Krivopalov
8e004684e9 sstables: In mp_row_consumer_m::push_mutation_fragments(), return the called helper's value.
Instead of blindly proceeding, use whatever the call to maybe_push_*()
has returned.

Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
2018-10-05 19:05:03 -07:00
Duarte Nunes
b839f551cf cql3/statements/select_statement: Don't double count unpaged queries
Unpaged queries are those for which the client didn't enable paging,
and we already account for them in
indexed_table_select_statement::do_execute().

Remove the second increment in read_posting_list().

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
Message-Id: <20181003121811.11750-1-duarte@scylladb.com>
2018-10-05 17:36:39 +02:00
Nadav Har'El
e4ef7fc40a materialized views: enable two tests in view_schema_test
We had two commented out tests based on Cassandra's MV unit tests, for
the case that the view's filter (the "SELECT" clause used to define the
view) filtered by a non-primary-key column. These tests used to fail
because of problems we had in the filtering code, but they now succeed,
so we can enable them. This patch also adds some comments about what
the tests do, and adds a few more cases to one of the tests.

Refs #3430.

However, note that the success of these tests does not really prove that
the non-PK-column filtering feature works fully correctly and that issue
forbidding it, as explained in
https://issues.apache.org/jira/browse/CASSANDRA-13798. We can probably
fix this feature with our "virtual cells" mechanism, but will need to add
a test to confirm the possible problem and its (probably needed fix).
We do not add such a test in this patch.

In the meantime, issue #3430 should remain open: we still *allow* users
to create MV with such a filter, and, as the tests in this patch show,
this "mostly" works correctly. We just need to prove and/or fix what happens
with the complex row liveness issues a la issue #3362.

Signed-off-by: Nadav Har'El <nyh@scylladb.com>
Message-Id: <20181004213637.32330-1-nyh@scylladb.com>
2018-10-04 22:43:38 +01:00
Tomasz Grabiec
3c7de9fee9 gms/gossiper: Replicate enpoint states in add_saved_endpoint() 2018-10-04 12:54:00 +02:00
Tomasz Grabiec
ddf3a61bcf gms/gossiper: Make reset_endpoint_state_map() have effect on all shards 2018-10-04 12:53:56 +02:00