Commit Graph

31963 Commits

Author SHA1 Message Date
Raphael S. Carvalho
45a4f8d1fa compaction_manager: move task ctor into source
That's to be able to get table_state from table in subsequent patch,
as table only has a forward declaration to it in compaction_manager.hh
to avoid including database.hh.
Once everything is moved to table_state, then ctor can be moved
back into header.

Signed-off-by: Raphael S. Carvalho <raphaelsc@scylladb.com>
2022-07-16 21:35:06 -03:00
Raphael S. Carvalho
4bfcead2ba compaction_manager: stop using infinite loop in run_offstrategy_compaction()
we can have a better flow than infinite loop -> break for exit
condition.

Signed-off-by: Raphael S. Carvalho <raphaelsc@scylladb.com>

Closes #11045
2022-07-16 16:39:58 +03:00
Botond Dénes
b3227ee9b4 CODEOWNERS: add @psarna and @nyh as owners for docs/alternator
Closes #11048
2022-07-16 11:39:04 +03:00
Aleksandra Martyniuk
7871989551 api: list of the user keyspaces contains only user keyspaces
storage_service/keyspaces?type=user along with user keyspaces returned
the keyspaces that were internal but non-system.

The list of the keyspaces for the user option
(storage_service/keyspaces?type=user) contains neither system nor
internal but only user keyspaces.

Fixes: #11042

Closes #11049
2022-07-15 20:42:30 +02:00
Avi Kivity
1cb64de8d8 Merge 'Codeowners update' from Botond Dénes
Remove some stale entries, add new entries for docs/.

Closes #11046

* github.com:scylladb/scylla:
  CODEOWNERS: add owners for docs/
  CODEOWNERS: remove @haaawk
2022-07-14 15:51:08 +03:00
Botond Dénes
a7a36c5189 CODEOWNERS: add owners for docs/
User documentation was recently migrated to scylla.git, and this is
maintained by non scylla-core people. Add entries for docs/ so they are
notified when somebody submits changes to docs/.
2022-07-14 15:43:04 +03:00
Botond Dénes
2af12bbaaa CODEOWNERS: remove @haaawk
He is no longer with the company.
2022-07-14 15:41:26 +03:00
Anna Stuchlik
68750b7612 doc: migrate the update about dropping tables from the scylla-docs repo
Closes #11032
2022-07-14 14:08:54 +03:00
Anna Stuchlik
95725c04d1 doc: remove the info about Katacoda and the link to the nonexistent lab
Closes #11031
2022-07-14 14:05:59 +03:00
Avi Kivity
e69e485396 Merge 'Preparatory work for compaction manager switch to table state' from Raphael "Raph" Carvalho
These are cleanups needed for upcoming series that will make manager switch to table abstraction.

Closes #11037

* github.com:scylladb/scylla:
  compaction_manager: remove unused variable in rewrite_sstable()
  table: remove ref from on_compaction_completion() signature
  table: use compaction_completion_desc to describe changes for off-strategy
  compaction_manager: rename table_state's get_sstable_set to main_sstable_set
2022-07-14 13:08:38 +03:00
Petr Gusev
86299ad194 raft: server: fix comment for set_configuration
follow-up to https://github.com/scylladb/scylla/pull/10905 as discussed in the comments.

Closes #11035
2022-07-14 11:37:35 +02:00
Tomasz Grabiec
cfd785a02b utils: memory_data_sink: Override mandatory buffer_size()
The default implementation aborts. The class has bit rot because it was unused.
2022-07-14 11:56:20 +03:00
David Garcia
0ee5b50bac doc: create migration redirections
Update redirects

Closes #11022
2022-07-14 11:53:41 +03:00
Benny Halevy
dc93564247 storage_proxy: abstract_read_resolver: swallow gate_closed exception
Like other errors triggered on shutdown,
this one is triggered by #8995.

Signed-off-by: Benny Halevy <bhalevy@scylladb.com>

Closes #11029
2022-07-14 09:26:34 +03:00
Avi Kivity
98aa3ec99b Update seastar submodule
* seastar 7d8d846b26...6d4a0cb7a3 (18):
  > io: Adjust IO latency goal on fair-queue level
Fixes #10927
  > coroutine: exception: deprecate return_exception(exception_ptr)
  > Merge "Make fair-queue class manipulations noexcept" from Pavel E
  > lowres_timers: Put timeout to infinity if no timers armed
  > util/conversion: support IEC prefix like "Ki"
  > util/conversion: use string_view instead of string
  > thread: fix backtrace termination for s390x on clang
  > *: add fmt::ostream_formatter<> so {fmt} can use operator<<
  > net: Remove operator<< for ipv4_addr
  > rpc-impl: Log "caught exception" when catching exception
  > rpc: Don't format non-trivial types with format specifier
  > sharded: use std::invoke() to call mapper function
  > Merge 'Avoid false-positive warnings in Gcc 12.1.1' from Nadav Har'El
  > tls_test: Remove dns bottle neck + improve read loop in google connect test
  > Revert "sstring: restore compatibility with std::string"
  > sstring: restore compatibility with std::string
  > tls_test: Make google https connect routine loop buffer reads
  > coroutine: add buffer support to async generator

Closes #11033
2022-07-13 18:34:15 +03:00
Raphael S. Carvalho
f6ab220c2a compaction_manager: remove unused variable in rewrite_sstable()
Signed-off-by: Raphael S. Carvalho <raphaelsc@scylladb.com>
2022-07-13 11:26:57 -03:00
Raphael S. Carvalho
d3d9b13d9d table: remove ref from on_compaction_completion() signature
Now update_sstable_lists_on_off_strategy_completion() and
on_compaction_completion() can be called from the same unified
interface.

Signed-off-by: Raphael S. Carvalho <raphaelsc@scylladb.com>
2022-07-13 11:25:51 -03:00
Raphael S. Carvalho
ca58054485 table: use compaction_completion_desc to describe changes for off-strategy
To make it possible to add a single interface in table_state for
updating sstable list on behalf of both off-strategy and in-strategy
compactions, update_sstable_lists_on_off_strategy_completion() will
work with compaction_completion_desc too for describing sstable set
changes.

Signed-off-by: Raphael S. Carvalho <raphaelsc@scylladb.com>
2022-07-13 11:16:19 -03:00
Raphael S. Carvalho
f52ad722f3 compaction_manager: rename table_state's get_sstable_set to main_sstable_set
With compaction_manager switching to table_state, we'll need to
introduce a method in table_state to return maintenance set.
So better to have a descriptive name for main set.

Signed-off-by: Raphael S. Carvalho <raphaelsc@scylladb.com>
2022-07-13 11:12:33 -03:00
Raphael S. Carvalho
7d97e15c43 bytes_ostream: Avoid waste by rounding up allocation size to power-of-two
- bytes_ostream has a default initial chunk size of 512.
- let's say we call bytes_ostream::write() to write 500 bytes.
- as next_alloc_size() takes into account space to hold chunk metadata
(24 bytes) + chunk data, then 512 bytes is not enough, so it returns
500 + 24 instead to be allocated.
- when allocating next chunk, next_alloc_size() will use the size of
existing chunk, which is 500 bytes (without metadata) and multiply it
to 2 (growth factor), so 1000 bytes is allocated for it.

So allocations can be non power-of-two, resulting in memory waste.

When seastar is allocating from small pools, the waste is not terrible
(although accumulated small wastes can be problematic), but once
allocations pass the large threshold (16k), then alignment is 4k
(page size) and the waste is not negligible.

Signed-off-by: Raphael S. Carvalho <raphaelsc@scylladb.com>

Closes #11027
2022-07-13 16:51:13 +03:00
Konstantin Osipov
a645bb3622 test.py: recursively search for pytests
cql-pytest contains subdirectories with tests
ported from Cassandra. It's desirable to preserve
the same layout and file names for these tests as in
the original source tree. To do that, add support for recursive
search of tests to PythonTestSuite. The log files for
the tests which are found recursively are created in subdirs
of the test tmpdir.

While implementing the feature, switch to using pathlib,
since a) it supports rglob (recursive glob) and b) it
was requested in one of the earlier reviews.

Closes #11018
2022-07-13 14:59:29 +03:00
Nadav Har'El
eaf3579c15 test/alternator: several more simple tests for UpdateItem
This patch adds several more tests for Alternator's UpdateItem operation.
These tests verify a few simple cases that, surprisingly, never had test
coverage. The new tests pass (on both DynamoDB and Alternator) so did not
expose any bug.

Signed-off-by: Nadav Har'El <nyh@scylladb.com>

Closes #11025
2022-07-12 21:48:33 +02:00
Avi Kivity
e1e4a73793 Merge 'Always register fully expired sstables for compaction' from Benny Halevy
If the compaction_descriptor returned by `time_window_compaction_strategy::get_sstables_for_compaction`
is marked with `has_only_fully_expired::yes` it should always be compacted
since `time_window_compaction_strategy::get_sstables_for_compaction` is not idempotent.

It sets `_last_expired_check` and if compaction is postponed and retried before
`expired_sstable_check_frequency` has passed, it will not look for those fully-expired
sstables again. Plus, compacting them is the cheapest possible as it does not require
reading anything, just deleting the input sstables, so there's no reason not postpone it.

Also, extend `max_ongoing_compaction_test` to test serialization of compaction jobs with the same weight.

Fixes #10989

Closes #10990

* github.com:scylladb/scylla:
  compaction_manager: always register descriptor with fully expired sstables for compaction
  test: max_ongoing_compaction_test: test serialization of regular compaction with same weight
  test: max_ongoing_compaction_test: reindent refactored code
  test: max_ongoing_compaction_test: define compact_all_tables lambda
  test: max_ongoing_compaction_test: refactor make_table_with_single_fully_expired_sstable
  test: max_ongoing_compaction_test: reduce number of tables
2022-07-12 18:40:01 +03:00
Nadav Har'El
761ca88aa8 Merge 'Add test cases for granting and revoking data permissions' from Piotr Sarna
This series adds the infrastructure needed for testing user permissions, like the ability to create temporary roles and CQL sessions which log in as different users, and a few initial test cases for granting and revoking permissions.

Closes #10998

* github.com:scylladb/scylla:
  cql-pytest: add a case for granting/revoking data permissions
  cql-pytest: add new_user and new_session utils
  cql-pytest: speed up permissions refresh period for tests
2022-07-12 18:31:33 +03:00
Avi Kivity
ea4a907090 Merge 'mutation_compactor: remove emit only live rows parameter' from Botond Dénes
Said parameter is a convenience so downstream consumers of the
mutation compactors don't have to check the `bool is_live` already
passed to them. This convenience however causes a template parameter and
additional logic for the compactor. As the most prominent of these
consumers (the query result builder) will soon have to switch to
`emit_only_live_rows::no` for other reasons anyway (it will want to count
tombstones), we take the opportunity to switch everybody to ::no. This
can be done with very little additional complexity to these consumers --
basically an additional if or two. With everybody using the `::no` variant
of the compactor, we can remove this template parameter and the logic
associated with it altogether.

Closes #10931

* github.com:scylladb/scylla:
  multishard_mutation_query: remove now pointless compact_for_result_state typedef
  mutation_compactor: remove only-live related logic
  mutation_compactor: remove emit_only_live_rows template parameter
  mutation_compactor: remove unused compact_mutation_state::parameters
  querier: remove {data,mutation}_querier aliases
  querier: remove now pointless emit_only_live_rows template parameter
  tree: use emit_only_live_rows::no
  querier: querier_cache: de-override insert() methods
2022-07-12 17:30:46 +03:00
Takuya ASADA
23973f9591 Support installing pip provided command symlinks to /usr/bin
This is part of support installing executables from PIP package,
now we support installing executable from PIP package but it will
install under /opt/scylladb/python3/bin.
To call these commands without speciying full path, we also need to install
symlink to /usr/bin.
To do this, we need new list which specifies command name for symlink.

Closes #10748
2022-07-12 17:26:05 +03:00
David Garcia
0c2a18af2d doc: enable faster builds
Closes #11023
2022-07-12 16:33:38 +03:00
Nadav Har'El
15ed0a441e Merge 'scylla-gdb.py: assortment of task filtering improvements, scylla fiber going backwards' from Botond Dénes
This series includes an assortment of loosely related improvements developed for a recent investigation. The changes include:
* Fix broken `std_deque` wrapper.
* Make `scylla smp-queues` fast.
* Teach `scylla smp-queues` to filter for both sender CPU (`--from`) and receiver CPU (`--to`) or both.
* Teach `scylla smp-queues` to make histogram over content of the queues -- i.e. the type of tasks in the smp queues.
* Teach `scylla smp-queues` to filter for tasks belonging to a certain scheduling group.
* Teach `scylla task_histogram` to include only tasks in the histogram.
* Teach `scylla task_histogram` to filter for tasks belonging to a certain scheduling group.
* Teach `scylla-fiber` to walk in both directions.

And some refactoring.

Fixes: https://github.com/scylladb/scylla/issues/7059

Closes #11019

* github.com:scylladb/scylla:
  docs/dev/debugging.md: update continuation chain traversal guide
  scylla-gdb.py: scylla fiber: walk continuation chain in both directions
  scylla-gdb.py: scylla fiber: allow passing analyzed pointers to _probe_pointer()
  scylla-gdb.py: scylla fiber: hoist preparatory code out of _walk()
  scylla-gdb.py: scylla task_histogram: add --scheduling-groups option
  scylla-gdb.py: scylla task_histogram: add --filter-tasks option
  scylla-gdb.py: scylla task_histogram: use histogram class
  scylla-gdb.py: scylla-fiber: extract symbol matching logic
  scylla-gdb.py: histogram: add limit feature
  scylla-gdb.py: histogram: handle formatting errors
  scylla-gdb.py: intrusive_slist: avoid infinite recursion in __len__()
  scylla-gdb.py: scylla smp-queues: add --scheduling-group option
  scylla-gdb.py: scylla smp-queues: add --content switch
  scylla-gdb.py: smp-queue: add filtering capability
  scylla-gdb.py: make scylla smp-queues fast
  scylla-gdb.py: fix disagreement between std_deque len() and iter()
2022-07-12 15:38:23 +03:00
Piotr Sarna
fcd8dfa694 cql-pytest: add a case for granting/revoking data permissions
The test cas checks if permissions set for a non-superuser user
are enforced.
2022-07-12 13:44:21 +02:00
Benny Halevy
6332816ccf compaction_manager: always register descriptor with fully expired sstables for compaction
If the compaction_descriptor returned by time_window_compaction_strategy::get_sstables_for_compaction
is marked with has_only_fully_expired::yes it should always be compacted
since time_window_compaction_strategy::get_sstables_for_compaction is not idempotent.

It sets _last_expired_check and if compaction is postponed and retried before
expired_sstable_check_frequency has passed, it will not look for those fully-expired
sstables again. Plus, compacting them is the cheapest possible as it does not require
reading anything, just deleting the input sstables, so there's no reason not postpone it.

Fixes #10989

Signed-off-by: Raphael S. Carvalho <raphaelsc@scylladb.com>
Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2022-07-12 12:04:04 +03:00
Benny Halevy
cfc7a5065a test: max_ongoing_compaction_test: test serialization of regular compaction with same weight
Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2022-07-12 12:04:03 +03:00
Benny Halevy
65a5e0a7bb test: max_ongoing_compaction_test: reindent refactored code
Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2022-07-12 12:03:32 +03:00
Benny Halevy
5212e81475 test: max_ongoing_compaction_test: define compact_all_tables lambda
To test both expired and non-expired sstables scenarios
we need to pass this helper function the expected number
of sstables before compaction and after compaction.

When compaction a set of fully-expired sstables,
we expect none to remain, while when the set of sstables
is not fully expired, we'll expect 1 output sstable
after compaction.

Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2022-07-12 12:00:27 +03:00
Benny Halevy
fe4a59372e test: max_ongoing_compaction_test: refactor make_table_with_single_fully_expired_sstable
So we can use the lower-level build blocks to
test compaction serialization of both fully-expired
and non-fully-expired sstables scenarios in the following patches.

Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2022-07-12 11:56:41 +03:00
Benny Halevy
d18fc6a7ed test: max_ongoing_compaction_test: reduce number of tables
There is no need to test 100 tables.
10 tables are enough so make the test complete faster.

Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2022-07-12 11:53:01 +03:00
Konstantin Osipov
4a2d645a0f scylla-gdb: fix "scylla netw" command
The command wasn't tested fully,
and when tested, started failing scylla-gdb test.

Before Raft, the list of connections to print in a single-node setup
was always empty, so a mistake in the gdb script command 'scylla netw'
didn't lead to a test failure.

With raft, there is always an RPC connection to self after initial
bootstrap, and the test begins to print connections (and fail, because
there is a bug in the printing code).

Fix that bug.

Closes #11012
2022-07-12 10:10:40 +03:00
Botond Dénes
ac9935b645 multishard_mutation_query: remove now pointless compact_for_result_state typedef
No need to switch on the now defunct emit_only_live_rows.
2022-07-12 08:44:33 +03:00
Botond Dénes
17509e9664 mutation_compactor: remove only-live related logic
We removed the template parameter in the previous patch, now we can
remove the logic related to it.
2022-07-12 08:44:32 +03:00
Botond Dénes
4d2ce5c304 mutation_compactor: remove emit_only_live_rows template parameter
Now that we use emit_only_live_rows::no everywhere we can remove this
template parameters. Only the template parameter is removed, the
internal logic around it is left in place (will be removed in a next
patch), by hard-wiring `only_live()`.
2022-07-12 08:43:49 +03:00
Botond Dénes
9ee8ef5930 mutation_compactor: remove unused compact_mutation_state::parameters 2022-07-12 08:41:51 +03:00
Botond Dénes
f912f5f373 querier: remove {data,mutation}_querier aliases
They now both mean the same thing: querier.
2022-07-12 08:41:51 +03:00
Botond Dénes
c77fe427c5 querier: remove now pointless emit_only_live_rows template parameter 2022-07-12 08:41:51 +03:00
Botond Dénes
bedc82e52c tree: use emit_only_live_rows::no
emit_only_live_rows is a convenience so downstream consumers of the
mutation compactors don't have to check the `bool is_live` already
passed to them. This convenience however causes a template parameter and
additional logic for the compactor. As the most prominent of these
consumers (the query result builder) will soon have to switch to
emit_only_live_rows::no for other reasons anyway (it will want to count
tombstones), we take the opportunity to switch everybody to ::no. This
can be done with very little additional complexity to these consumer --
basically an additional if or two.
This prepares the ground for removing this template parameter and the
associate logic from the compactor.
2022-07-12 08:41:51 +03:00
Botond Dénes
742dc10185 querier: querier_cache: de-override insert() methods
Soon, the currently two distinct types of queriers will be merged, as
the template parameter differentiating them will be gone. This will make
using type based overload for insert() impossible, as 2 out of the 3
types will be the same. Use different names instead.
2022-07-12 08:41:48 +03:00
Botond Dénes
5c56125187 docs/dev/debugging.md: update continuation chain traversal guide
`scylla fiber` is the way to traverse in both directions now.
2022-07-12 07:27:45 +03:00
Botond Dénes
89595f5b12 scylla-gdb.py: scylla fiber: walk continuation chain in both directions
Parameterize _walk() with a method that does the actual walking. This is
a trivial change as it was already delegating all the walking logic to
_do_walk(). The latter is renamed to _walk_forward() and we add a new
method called _walk_backward() which implements walking the continuation
chain backwards (towards tasks waited on by the queried task).
The starting task is now printed at index #0, tasks waited on by the
starting task have negative indexes, tasks waiting on the starting task
have positive indexes (like before).
With this scylla fiber can be used to dump an entire fiber (barring any
difficulties detecting following more special tasks like threads).
2022-07-12 07:08:54 +03:00
Botond Dénes
1d5547ae22 scylla-gdb.py: scylla fiber: allow passing analyzed pointers to _probe_pointer()
A future caller will have pre-analyzed pointers to pass to said method,
in which case we want to avoid re-running the expensive process.
2022-07-12 06:21:03 +03:00
Botond Dénes
b41493d165 scylla-gdb.py: scylla fiber: hoist preparatory code out of _walk()
We soon want to teach _walk() to walk in both directions. In preparation
to that, we extract all generic preparatory code that is related to the
starting task and combining arguments. This now resides in invoke(),
_walk() should only be concerned with traversing the continuation chain.
2022-07-12 06:14:44 +03:00
Nadav Har'El
f5ff687b64 Merge 'cql3: Reorganize expr::to_restriction' from Jan Ciołek
This PR introduces improvements to `expr::to_restriction` and prepares the validation part for restriction classes removal.

`expr::to_restriction` is currently used to take a restriction from the WHERE clause, prepare it, perform some validation checks and finally convert it to an instance of the restriction class.

Soon we will get rid of the restriction class.

In preparation for that `expr::to_restriction` is split into two independent parts:
* The part that prepares and validates a binary_operator
* The part that converts a binary_operator to restriction

Thanks to this split getting rid of restriction class will be painless, we will just stop using the second part.

`to_restriction.cc` is replaced by `restrictions.hh/cc`. In the future we can put all the restriction expressions code there to avoid clutter in `expression.hh/cc`.

This change made it much easier to fix #10631, so I did that as well.

Fixes: #10631

Closes #10979

* github.com:scylladb/scylla:
  cql-pytest: Test that IS NOT only accepts NULL
  cql-pytest: Enable testInvalidCollectionNonEQRelation
  cql3: Move single element IN restrictions handling
  cql3: Check for disallowed operators early
  cql3: Simplify adding restrictions
  cql3: Reorganize to_restriction code
  cql3: Fix IS NOT NULL check in to_restriction
  cql3: Swap order of arguments in error message
2022-07-12 00:26:34 +03:00
Avi Kivity
53e0dc7530 bytes_ostream: base on managed_bytes
bytes_ostream is an incremental builder for a discontiguous byte container.
managed_bytes is a non-incremental (size must be known up front) byte
container, that is also compatible with LSA. So far, conversion between
them involves copying. This is unfortunate, since query_result is generated
as a bytes_ostream, but is later converted to managed_bytes (today, this
is done in cql3::expr::get_non_pk_values() and
compound_view_wrapper::explode(). If the two types could be made compatible,
we could use managed_bytes_view instead of creating new objects and avoid
a copy. It's also nicer to have one less vocabulary type.

This patch makes bytes_ostream use managed_bytes' internal representation
(blob_storage instead of bytes_ostream::chunk) and provides a conversion
to managed_bytes. All bytes_ostream users are left in place, but the goal
is to make bytes_ostream a write-only type with the only observer a conversion
to managed_bytes.

It turns out to be relatively simple. The internal representations were
already similar. I made blob_storage::ref_type self-initializing to
reduce churn (good practice anyway) and added a private constructor
to managed_bytes for the conversion.

Note that bytes_ostream can only be used to construct a non-LSA managed_bytes,
but LSA uses of managed_bytes are very strictly controlled (the entry
points to memtable and cache) so that's not a problem.

A unit test is added.

Closes #10986
2022-07-12 00:23:29 +03:00