Commit Graph

13705 Commits

Author SHA1 Message Date
Jesse Haber-Kucharsky
b024d40d51 auth: Add list_roles_statement 2017-11-27 12:14:24 -05:00
Jesse Haber-Kucharsky
460f3c7065 auth: Add dormant role manager to service
The role manager still does not interact with the rest of the system,
but the role manager is now sharded on all cores and metadata is
created.

The following metadata tables are created:

- `system_auth.roles`
- `system_auth.role_members`

The default superuser, "cassandra", is also created, but has no function.
2017-11-27 12:14:24 -05:00
Jesse Haber-Kucharsky
27420fa189 auth/service.cc: Remove redundant declarations 2017-11-27 12:14:24 -05:00
Jesse Haber-Kucharsky
7e78e1ebdc cql3: Add role_name and parser rules
The `userOrRoleName` parser rule is important for future CQL
role-related statements.

`cql3::role_name` is a small utility for role-related CQL statements
that enforce an important property of role names: that they are always
lower-case unless quoted appropriately.
2017-11-27 12:14:24 -05:00
Jesse Haber-Kucharsky
b266b4b687 auth: Add role manager
The role manager is responsible for creating, removing, querying for,
granting, and revoking roles.

The role manager does not yet run in production, and is not connected to
the rest of the system.

Included in this patch is the definition of the abstract role management
interface, and also the implementation of the standard role manager.

The standard role manager is tested fully in the `role_manager_test`.
2017-11-27 12:14:20 -05:00
Jesse Haber-Kucharsky
8b23d32bb1 auth: Unconditionally create the system_auth keyspace
The `system_auth` keyspace is used to store tables for authentication
and authorization metadata.

Previously, this keyspace would only be created if either of the
non-default authenticator or authorizer were activated in configuration.

The upcoming role-management system is enabled unconditionally and also
uses the `system_auth` keyspace for its metadata.
2017-11-27 10:01:52 -05:00
Jesse Haber-Kucharsky
832072d1d9 unimplemented.hh: Use [[noreturn]] instead of GCC attribute 2017-11-27 10:01:52 -05:00
Jesse Haber-Kucharsky
b58914feb8 New unimplemented feature: roles 2017-11-27 10:01:52 -05:00
Duarte Nunes
922f095f22 tests: Initialize storage service for some tests
These tests now require having the storage service initialize, which
is needed to decide whether correct non-compound range tombstones
should be emitted or not.

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
Message-Id: <20171126152921.5199-1-duarte@scylladb.com>
2017-11-26 17:41:06 +02:00
Duarte Nunes
15fbb8e1ca cql3/delete_statement: Allow non-range deletions on non-compound schemas
This patch fixes a regression introduced in
1c872e2ddc.

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
Message-Id: <20171126102333.3736-1-duarte@scylladb.com>
2017-11-26 12:29:09 +02:00
Takuya ASADA
7380a6088b dist/debian: link libgcc dynamically
As we discussed on the thread (https://github.com/scylladb/scylla/issues/2941),
since we override symbols on libgcc, we need to link libgcc dynamically for
Ubuntu/Debian too (CentOS already do it).

Signed-off-by: Takuya ASADA <syuu@scylladb.com>
Message-Id: <1511542866-21486-2-git-send-email-syuu@scylladb.com>
2017-11-25 20:09:51 +02:00
Takuya ASADA
df6546d151 dist/debian: switch to our PPA verions of gcc-72
Now we have gcc-7.2 on our PPA for Ubuntu 16.04/14.04, let's switch to it.

Signed-off-by: Takuya ASADA <syuu@scylladb.com>
Message-Id: <1511542866-21486-1-git-send-email-syuu@scylladb.com>
2017-11-25 20:09:51 +02:00
Avi Kivity
757d0243a0 Merge seastar upstream
* seastar 7f87529...3b09bad (7):
  > Extend Travis CI to cover Clang 5.0 builds.
  > fair_queue: disallow zeroed shares.
  > Multiple fixes to io_tester to make it compile with GCC 5:
  > transformers: Create tuple explicitely for older compiler support
  > core/sstring: Add construction from `string_view`
  > io_tester: enhanced fair queue tester
  > fstream: do not ignore dma_write return value
2017-11-25 19:50:42 +02:00
Duarte Nunes
4a6ffa3f5c tests/sstable_mutation_test: Change make_reader to make_flat_reader
A merge conflict between 596ebaed1f and
bd1efbc25c caused the test to fail to
build.

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-11-25 15:23:36 +00:00
Tomasz Grabiec
596ebaed1f Merge "Convert sstable writers to flat mutation readers" from Paweł
The following patches convert sstable writers to use flat mutation
readers instead of the legacy mutation_reader interface.
Writers were already using flat consumer interface and used
consume_flattened_in_thread(), so most of the work was limited to
providing an appropriate equivalent for flat mutation readers.

* https://github.com/pdziepak/scylla.git flat_mutation_reader-sstable-write/v1:
  flat_mutation_reader: move consumer_adapter out of consume()
  flat_mutation_reader: introduce consume_in_thread()
  tests/flat_mutation_reader: test consume_in_thread()
  sstables: switch write_components() to flat_mutation_reader
  streamed_mutation: drop streamed_mutation_returning()
  sstables: convert compaction to flat_mutation_reader
  mutation_reader: drop consume_flattened_in_thread()
2017-11-24 16:05:21 +01:00
Tomasz Grabiec
bd1efbc25c Merge "Fixes to sstable files for non-compound schemas" from Duarte
This series mainly fixes issues with the serialization of promoted
index entries for non-compound schemas and with the serialization of
range tombstones, also for non-compound schemas.

We lift the correct cell name writing code into its own function,
and direct all users to it. We also ensure backward compatibility with
incorrectly generated promoted indexes and range tombstones.

Fixes #2995
Fixes #2986
Fixes #2979
Fixes #2992
Fixes #2993

* git@github.com:duarten/scylla.git  promoted-index-serialization/v3:
  sstables/sstables: Unify column name writers
  sstables/sstables: Don't write index entry for a missing row maker
  sstables/sstables: Reuse write_range_tombstone() for row tombstones
  sstables/sstables: Lift index writing for row tombstones
  sstables/sstables: Leverage index code upon range tombstone consume
  sstables/sstables: Move out tombstone check in write_range_tombstone()
  sstables/sstables: A schema with static columns is always compound
  sstables/sstables: Lift column name writing logic
  sstables/sstables: Use schema-aware write_column_name() for
    collections
  sstables/sstables: Use schema-aware write_column_name() for row marker
  sstables/sstables: Use schema-aware write_column_name() for static row
  sstables/sstables: Writing promoted index entry leverages
    column_name_writer
  sstables/sstables: Add supported feature list to sstables
  sstables/sstables: Don't use incorrectly serialized promoted index
  cql3/single_column_primary_key_restrictions: Implement is_inclusive()
  cql3/delete_statement: Constrain range deletions for non-compound
    schemas
  tests/cql_query_test: Verify range deletion constraints
  sstables/sstables: Correctly deserialize range tombstones
  service/storage_service: Add feature for correct non-compound RTs
  tests/sstable_*: Start the storage service for some cases
  sstables/sstable_writer: Prepare to control range tombstone
    serialization
  sstables/sstables: Correctly serialize range tombstones
  tests/sstable_assertions: Fix monotonicity check for promoted indexes
  tests/sstable_assertions: Assert a promoted index is empty
  tests/sstable_mutation_test: Verify promoted index serializes
    correctly
  tests/sstable_mutation_test: Verify promoted index repeats tombstones
  tests/sstable_mutation_test: Ensure range tombstone serializes
    correctly
  tests/sstable_datafile_test: Add test for incorrect promoted index
  tests/sstable_datafile_test: Verify reading of incorrect range
    tombstones
  sstables/sstable: Rename schema-oblivious write_column_name() function
  sstables/sstables: No promoted index without clustering keys
  tests/sstable_mutation_test: Verify promoted index is not generated
  sstables/sstables: Optimize column name writing and indexing
  compound_compat: Don't assume compoundness
2017-11-24 16:03:49 +01:00
Tomasz Grabiec
35e404b1a2 tests: sstable: Make tombstone_purge_test more reliable
TTL of 1 second may cause the cell to expire right after we write it,
if the second component of current time changes right after it. Use
larger ttl to avoid spurious faliures due to this.
Message-Id: <1511463392-1451-1-git-send-email-tgrabiec@scylladb.com>
2017-11-24 10:52:26 +00:00
Vladimir Krivopalov
fb7d46fc2e Allow COUNT(*) and COUNT(1) to be queried with other aggregations or columns
Fixes #2218

Signed-off-by: Vladimir Krivopalov <vladimir@scylladb.com>
Message-Id: <c387d34969d5bcfb8b2bf42806e6e05a9b8a067c.1511487356.git.vladimir@scylladb.com>
2017-11-24 10:01:21 +00:00
Duarte Nunes
576ea421dc compound_compat: Don't assume compoundness
This patch changes some factory functions so that they don't assume
the schema is compound.

This enables some code simplification in
sstables::write_column_name().

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-11-23 19:14:15 +00:00
Duarte Nunes
8597e1c3f9 sstables/sstables: Optimize column name writing and indexing
Instead of serializing the column name twice, serialize it once into a
buffer which gets used for index bookkeeping and to write to disk.

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-11-23 19:14:08 +00:00
Paweł Dziepak
6a1fe70a72 mutation_reader: drop consume_flattened_in_thread() 2017-11-23 18:14:31 +00:00
Paweł Dziepak
b64dd21751 sstables: convert compaction to flat_mutation_reader 2017-11-23 18:14:31 +00:00
Paweł Dziepak
9b39d3b023 streamed_mutation: drop streamed_mutation_returning() 2017-11-23 18:14:31 +00:00
Paweł Dziepak
11b32276e6 sstables: switch write_components() to flat_mutation_reader 2017-11-23 18:14:31 +00:00
Paweł Dziepak
2660a43290 tests/flat_mutation_reader: test consume_in_thread() 2017-11-23 18:14:31 +00:00
Paweł Dziepak
cea5778fee flat_mutation_reader: introduce consume_in_thread()
flat_mutation_reader provides a replacement for the old
consume_flattened*() interface and therefore an 'in-thread' variant is
also necessary. It expects to be executed in a seastar::thread context
and guarantees that the consumer member functions will be invoked inside
that thread as well (which is why it cannot be easily replaced by
non-thread version).

Addition to that, just like the old consume_flattened_in_thread() its
replacement allows specifying a filter functions that causes selected
partitions to be skipped entirely and never reach the consumer.
2017-11-23 18:14:31 +00:00
Duarte Nunes
5aa5780701 tests/sstable_mutation_test: Verify promoted index is not generated
Verify we don't generated a promoted index if the schema lacks
clustering keys.

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-11-23 16:45:54 +00:00
Duarte Nunes
10dea07ab7 sstables/sstables: No promoted index without clustering keys
We don't need to generate promoted index if the schema lacks
clustering keys.

Fixes #2995

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-11-23 16:45:54 +00:00
Duarte Nunes
66df2e41fc sstables/sstable: Rename schema-oblivious write_column_name() function
This function is now called write_compound_non_dense_column_name() so
callers are aware of the cases where it call be called.

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-11-23 16:45:54 +00:00
Duarte Nunes
338f038e7a tests/sstable_datafile_test: Verify reading of incorrect range tombstones
Add a test to verify that we can still read incorrectly written range
tombstones for non-compound schemas, for previous Scylla versions.

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-11-23 16:45:54 +00:00
Duarte Nunes
766ca8dff4 tests/sstable_datafile_test: Add test for incorrect promoted index
Ensure we don't load incorrectly generated promoted indexes.

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-11-23 16:45:54 +00:00
Duarte Nunes
f9a76084e9 tests/sstable_mutation_test: Ensure range tombstone serializes correctly
This patch ensures range tombstones are correctly serialized for dense
non-compound schemas.

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-11-23 16:45:54 +00:00
Duarte Nunes
e612f71ed6 tests/sstable_mutation_test: Verify promoted index repeats tombstones
Both for compact and non-compact storage schemas.

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-11-23 16:45:54 +00:00
Duarte Nunes
d8af9ffe5a tests/sstable_mutation_test: Verify promoted index serializes correctly
For different types of schemas.

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-11-23 16:45:54 +00:00
Duarte Nunes
32cb8b6dc0 tests/sstable_assertions: Assert a promoted index is empty
Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-11-23 16:45:54 +00:00
Duarte Nunes
ffaa3341c3 tests/sstable_assertions: Fix monotonicity check for promoted indexes
Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-11-23 16:45:54 +00:00
Duarte Nunes
24b867adda sstables/sstables: Correctly serialize range tombstones
This patch ensures we correctly serialize range tombstones for dense
non-compound schemas, which until now assumed the bounds were compound
composite. We also fix the reading function, which assumed the same
thing. This affected Apache Cassandra compatibility.

Fixes #2986

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-11-23 16:45:54 +00:00
Duarte Nunes
3368411e03 sstables/sstable_writer: Prepare to control range tombstone serialization
This patch adds support to sstable_writer to be able to control
correct range tombstone serialization.

When range tombstone serialization will be fixed in subsequent
patches, it will only be enabled when the whole cluster supports the
feature to allow for rollbacks.

The feature needs to be enabled for an sstable as a whole, to prevent
problems with it being enabled during an sstable write.

Thus, the sstable writer will pass on this information to the sstable
methods that carry out the actual file writing.

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-11-23 16:45:54 +00:00
Duarte Nunes
19cd65a681 tests/sstable_*: Start the storage service for some cases
We will need to check the cluster's enabled features when writing
range tombstones.

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-11-23 16:45:53 +00:00
Duarte Nunes
ae3a58d7ec service/storage_service: Add feature for correct non-compound RTs
This patch adds a cluster feature to enable correct serialization of
non-compound range tombstones. We thus support rollbacks during an
upgrade, as we will only change range tombstone serialization when the
cluster is fully upgraded and all nodes are capable of reading the new
format.

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-11-23 16:45:53 +00:00
Duarte Nunes
eeacef3089 sstables/sstables: Correctly deserialize range tombstones
This patch changes the range tombstone read path to deal with
correctly written non-compound range tombstones, while also
maintaining backward compatibility and reading old Scylla-generated
range tombstones.

The fix for the write path will activate an sstable feature which will
connect with this patch.

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-11-23 16:45:53 +00:00
Duarte Nunes
e51fc2096b tests/cql_query_test: Verify range deletion constraints
Test that unsupported range deletions against non-compound schemas are
rejected.

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-11-23 16:45:53 +00:00
Duarte Nunes
1c872e2ddc cql3/delete_statement: Constrain range deletions for non-compound schemas
We cannot represent ranged deletions with non-inclusive bounds on our
current storage format for schemas that are non-compound, since the
clustering key won't include the EOC byte.

Refs #2986

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-11-23 16:45:53 +00:00
Duarte Nunes
eea4e349ea cql3/single_column_primary_key_restrictions: Implement is_inclusive()
Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-11-23 16:45:53 +00:00
Duarte Nunes
f217dcc0ce sstables/sstables: Don't use incorrectly serialized promoted index
Promoted indexes generated before this patch by Scylla are considered
incorrect if they belong to a non-compound schema, due to #2993.

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-11-23 16:45:53 +00:00
Duarte Nunes
8cdd8e2431 sstables/sstables: Add supported feature list to sstables
This patch adds additional metadata to the scylla sstable component.
Namely, it adds a list of features that the current sstable supports.
The upcoming usages of the feature list are meant for backward
compatibility, but the implementation makes no such assumptions.

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-11-23 16:45:53 +00:00
Duarte Nunes
e81a3d487d sstables/sstables: Writing promoted index entry leverages column_name_writer
This patch refactors writing a promoted index entry to leverage the
column_name_writer. It not only reduces code duplication, but also
solves two important bugs:

1) Column names for schema types other than compound non-dense were
   not correctly serialized, as the wrong overload of
   write_column_name() was being called, which assumed the specified
   composite to be compound.

2) Before, for some schema types we were passing an empty
   clustering_key to maybe_flush_pi_block(), which caused it to bypass
   appending open range tombstones to the data file, causing wrong
   query results to be returned.

Fixes #2979
Fixes #2992
Fixes #2993

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-11-23 16:45:53 +00:00
Duarte Nunes
51eed140d2 sstables/sstables: Use schema-aware write_column_name() for static row
Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-11-23 16:45:53 +00:00
Duarte Nunes
b7624afca6 sstables/sstables: Use schema-aware write_column_name() for row marker
Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-11-23 16:45:53 +00:00
Duarte Nunes
42f125c1ef sstables/sstables: Use schema-aware write_column_name() for collections
Eventually all current callers of write_column_name() will move to the
schema-aware one.

Signed-off-by: Duarte Nunes <duarte@scylladb.com>
2017-11-23 16:45:53 +00:00