Commit Graph

31836 Commits

Author SHA1 Message Date
Petr Gusev
6cdd5b9ff5 raft, set_configuration fix: don't use dummy entries
Leader which ceases to be a leader as a result of a
execute_modify_config cannot wait for a dummy record to be
committed because io_fiber aborts current waiters as soon as it
detects a lost of leadership.

This commit excludes dummy entries from the configuration change
procedure. A special promise is set on io_fiber when it gets a
non-joint configuration, and set_configuration just waits for
the corresponding future instead of a dummy record.

Fixes: #10010

Closes #10905
2022-07-06 11:26:59 +02:00
Avi Kivity
419fe65259 Revert "Merge 'Block flush until compaction finishes if sstables accumulate' from Mikołaj Sielużycki"
This reverts commit aa8f135f64, reversing
changes made to 9a88bc260c. The patch
causes hangs during flush.

Also reverts parts of 411231da75 that impacted the unit test.

Fixes #10897.
2022-07-06 12:19:02 +03:00
Asias He
a33c370f9a gossip: Speed up wait for gossip settle
In a large cluster, a node would receive frequent and periodic gossip
application state updates like CACHE_HITRATES or VIEW_BACKLOG from peer
nodes. Those states are not critical. They should not be counted for the
_msg_processing counter which is used to decide if gossip is settled.

This patch fixes the long settle on every restart issue reported by
users.

Refs #10337

Closes #10892
2022-07-06 11:26:32 +03:00
Mikołaj Grzebieluch
ea3da23f3b cql3: refactor of native types parsing
Native types were parsed directly to data_type, where varchar and text were
parsed to utf8_type. To get the name of the type there was a call to
the data_type method thus getting the name of the varchar type returns "text".

To fix this, added new nonterminal type_unreserved_keyword, which parse native
types to their names. It replaced native_or_internal_type in unreserved_function_keyword.

unreserved_function_keyword is also used to parse usernames, keyspace names, index names,
column identifieres, service levels and role names, so this bug was repaired also in them.

Fixes: #10642

Closes #10960
2022-07-05 18:09:17 +02:00
Nadav Har'El
a0ffbf3291 test/cql-pytest: fix test that started failing after error message change
Recently a change to Scylla's expression implementation changed the standard
error message copied from Cassandra:

    Cannot execute this query as it might involve data filtering and thus
    may have unpredictable performance. If you want to execute this query
    despite the performance unpredictability, use ALLOW FILTERING

In the special case where the filter is on the partition key, we changed
the message to:

    Only EQ and IN relation are supported on the partition key (unless you
    use the token() function or allow filtering)

We had a cql-pytest test translated from Cassandra's unit test that checked
the old message, and started to fail. Unfortunately nobody noticed because
a bug in test.py caused it to stop running these translated unit tests.

So in this patch, we trivially fix the test to pass again. Instead of
insisting on the old message, we check jsut for the string "allow
filtering", in lowercase or uppercase. After this patch, the tests
passes as expected on both Scylla and Cassandra.

Refs #10918 (this test failing is one of the failures reported there)
Refs #10962 (test.py stopped running this test)

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

Closes #10964
2022-07-05 15:24:20 +03:00
Takuya ASADA
ce87e15ecf scylla_prepare: fix Exception when SET_NIC_AND_DISKS=no and SET_CLOCKSOURCE=yes
We shouldn't call get_tune_mode() when NIC tuning is disabled.

fixes #10412

Closes #10959
2022-07-05 14:52:52 +03:00
Takuya ASADA
7501465b7c scylla_util.py: change debug log directory to /var/tmp/scylla
Current debug log is bit difficult to collect in CI, to find the debug log
we must know which script caused Exception.
Because the filename does not include prefix, and also specified
directory is shared with other programs.

To make things more easily, let's change debug log directory to /var/tmp/scylla.

Closes #10730
2022-07-05 14:49:00 +03:00
Avi Kivity
74b02b9719 Merge 'storage_service: track restore_replica_count' from Benny Halevy
This mini-series adds an _async_gate to storage_service that is closed on stop()
and it performs restore_replica_count under this gate so it can be orderly waited on in stop()

Fixes #10672

Closes #10922

* github.com:scylladb/scylla:
  storage_service: handle_state_removing: restore_replica_count under _async_gate
  storage_service: add async_gate for background work
2022-07-05 13:18:59 +03:00
Michał Chojnowski
152eff249c dbuild: fix --security-opt syntax
A recent change added `--security-opt label:disable` to the docker
options. There are examples of this syntax on the web, but podman
and docker manuals don't mention it and it doesn't work on my machine.

Fix it into `--security-opt label=disable`, as described by the manuals.

Closes #10965
2022-07-05 10:50:31 +03:00
Avi Kivity
33fe28b0c5 Merge 'commitlog allocation/deletion/flush request rate counters + footprint projection' from Calle Wilund
Adds measuring the apparent delta vector of footprint added/removed within
the timer time slice, and potentially include this (if influx is greater
than data removed) in threshold calculation. The idea is to anticipate
crossing usage threshold within a time slice, so request a flush slightly
earlier, hoping this will give all involved more time to do their disk
work.

Obviously, this is very akin to just adjusting the threshold downwards,
but the slight difference is that we take actual transaction rate vs.
segment free rate into account, not just static footprint.

Note: this is a very simplistic version of this anticipation scheme,
we just use the "raw" delta for the timer slice.
A more sophisiticated approach would perhaps do either a lowpass
filtered rate (adjust over longer time), or a regression or whatnot.
But again, the default persiod of 10s is something of an eternity,
so maybe that is superfluous...

Closes #10651

* github.com:scylladb/scylla:
  commitlog: Add (internal) measurement of byte rates add/release/flush-req
  commitlog: Add counters for # bytes released/flush requested
  commitlog: Keep track of last flush high position to avoid double request
  commitlog: Fix counter descriptor language
2022-07-04 16:26:17 +03:00
Botond Dénes
553538392e Merge "Improve shutdown logging" from Pavel Emelyanov
"
On stop there's a rather long log-less gap in the middle of
storage_service::drain_on_shutdown(). This set adds log in
interesting places and while at it tosses the patched code.

refs: #10941
"

* 'br-shutdown-logging' of https://github.com/xemul/scylla:
  batchlog_manager: Add drain and stop logging
  batchlog_manager: Coroutinize drain and stop
  batchlog_manager: Drain it with shared future
  commitlog: Add shutdown message
  database: Move flushing logging
  compaction_manager: Add logging around drain
  compaction_manager: Coroutinize drain
  storage_service: Sanitize stop_transport()
2022-07-04 13:50:16 +03:00
Pavel Emelyanov
5a4e15f65d Add .mailmap
Google group started replacing sender email with the group email
recently. Here's the list of spoiled entries combined from seastar
and scylla repos

Signed-off-by: Pavel Emelyanov <xemul@scylladb.com>
Message-Id: <20220701160252.11967-1-xemul@scylladb.com>
2022-07-04 13:44:28 +03:00
Pavel Emelyanov
98ff779676 batchlog_manager: Add drain and stop logging
Signed-off-by: Pavel Emelyanov <xemul@scylladb.com>
2022-07-04 13:42:46 +03:00
Pavel Emelyanov
e2007cd317 batchlog_manager: Coroutinize drain and stop
This is not identical change, if drain() resolves with exception we end
up skipping the gate closing, but since it's stop why bother

Signed-off-by: Pavel Emelyanov <xemul@scylladb.com>
2022-07-04 13:42:46 +03:00
Pavel Emelyanov
8a03683671 batchlog_manager: Drain it with shared future
The .drain() method can be called from several places, each needs to
wait for its completion. Now this is achieved with the help of a gate,
but there's a simpler way

Signed-off-by: Pavel Emelyanov <xemul@scylladb.com>
2022-07-04 13:42:45 +03:00
Pavel Emelyanov
2e1ec36efd commitlog: Add shutdown message
It happens in database::drain(), we know when it starts after keyspaces
are flushed, now it's good to know when it completes

Signed-off-by: Pavel Emelyanov <xemul@scylladb.com>
2022-07-04 13:42:45 +03:00
Pavel Emelyanov
ea820e13b3 database: Move flushing logging
Now it happens before calling database::drain() but drain is not only
flushing it does lots of other things. More elaborated logging is better

Signed-off-by: Pavel Emelyanov <xemul@scylladb.com>
2022-07-04 13:42:45 +03:00
Avi Kivity
f949612620 Update tools/python3 submodule (install pip executables)
* tools/python3 3471634...e48dcc2 (1):
  > Support installing executables from PIP package
2022-07-04 13:02:51 +03:00
Nadav Har'El
09d0ca7c75 test/cql-pytest: make run-cassandra work on new systems...
with several Java versions

The test/cql-pytest/run-cassandra script runs our cql-pytest tests against
Cassandra. Today, Cassandra can only run correctly on Java 8 or 11
(see https://issues.apache.org/jira/browse/CASSANDRA-16895) but recent
Linux distributions have switched to newer versions of Java - e.g., on
my Fedora 36 installation, the default "java" is Java 17. Which can't
run Cassandra.

So what I do in this patch is to check if "java" has the right version,
and if it doesn't, it looks at several additional locations if it can
find a Java of the right version. By the way, we are sure that Java 8
must be installed because our install-dependencies.sh installs it.

After this patch, test/cql-pytest/run-cassandra resumes working on
Fedora 36.

Fixes #10946

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

Closes #10947
2022-07-04 12:00:46 +02:00
Aleksandra Martyniuk
bf34589fc1 cql3: create tokens out of null values properly
Method reponsible for creating a token of given values is not meant to be
used with empty optionals. Thus, having requested a token of the columns
containing null values resulted with an exception being thrown. This kind
of behaviour was not compatible with the one applied in cassandra.

To fix this, before the computation of a token, it is checked whether
no null value is contained. If any value in the processed vector is null,
null value is returned.

Fixes:  #10594

Closes #10942
2022-07-04 10:42:23 +02:00
Avi Kivity
719724e4df scripts: pull_github_pr.sh: support recovering from a failed cherry-pick
If a single-patch pull request fails cherry-picking, it's still possible
to recover it (if it's a simple conflict). Give the maintainer the option
by opening a subshell and instructing them to either complete the cherry-pick
or abort it.

Closes #10949
2022-07-04 09:26:45 +03:00
Avi Kivity
2eedb9bf7c Update seastar submodule
* seastar 9c016aeebf...7d8d846b26 (16):
  > Merge 'coroutine: exception: retain exception_ptr type' from Benny Halevy
  > core: log in on_internal_error even when throwing
  > sched_group: Report the sched group that exceeded the limit
Fixes #8226.
  > Add .mailmap
  > prometheus: make the help string optional
  > core: lw_shared_ptr: allow defining `lw_shared_ptr<T>` class member without knowing the definition of `T`
  > ci: build and test in debug and dev modes
  > Merge 'Added summaries, remove empty, and aggregation to Prometheus' from Amnon Heiman
  > Merge 'net/tls: vec_push: call on_internal_error if _output_pending already failed' from Benny Halevy
Fixes #10127
  > Merge 'CI: build and test with both gcc and clang ' from Beni Peled
  > Merge "Initialize lowres_clock::_now earlier" from Pavel E
Ref #10743
  > reactor: don't count make_exception_future etc. in cpp_exceptions metric
  > file: Deprecate file lifetime hint calls
  > foreign_ptr: fix doc.
  > cmake: fix mention of FindLibUring.cmake in install target
  > semaphore: derive named_semaphore_aborted exception from semaphore_aborted
Fixes #10666.

Closes #10951
2022-07-04 00:24:47 +03:00
Avi Kivity
973d2a58d0 Merge 'docs: move docs to docs/dev folder' from David Garcia
In order to allow our Scylla OSS customers the ability to select a version for their documentation, we are migrating the Scylla docs content to the Scylla OSS repository. This PR covers the following points of the [Migration Plan](https://docs.google.com/document/d/15yBf39j15hgUVvjeuGR4MCbYeArqZrO1ir-z_1Urc6A/edit#):

1. Creates a subdirectory for dev docs: /docs/dev
2. Moves the existing dev doc content in the scylla repo to /docs/dev, but keep Alternator docs in /docs.
3. Flattens the structure in /docs/dev (remove the subfolders).
4. Adds redirects from `scylla.docs.scylladb.com/<version>/<document>` to `https://github.com/scylladb/scylla/blob/master/docs/dev/<document>.md`
5. Excludes publishing docs for /docs/devs.

1. Enter the docs folder with `cd docs`.
2. Run `make redirects`.
3. Enter the docs folder and run `make preview`. The docs should build without warnings.
4. Open http://127.0.0.1:5500 in your browser. You shoul donly see the alternator docs.
5. Open http://127.0.0.1:5500/stable/design-notes/IDL.html in your browser. It should redirect you to https://github.com/scylladb/scylla/blob/master/docs/dev/IDL.md and raise a 404 error since this PR is not merged yet.
6. Surf the `docs/dev` folder. It should have all the scylla project internal docs without subdirectories.

Closes #10873

* github.com:scylladb/scylla:
  Update docs/conf.py
  Update docs/dev/protocols.md
  Update docs/dev/README.md
  Update docs/dev/README.md
  Update docs/conf.py
  Fix broken links
  Remove source folder
  Add redirections
  Move dev docs to docs/dev
2022-07-03 20:37:11 +03:00
Wojciech Mitros
bfa3c0e734 test: move codes of UDFs compiled to WASM to test/resource
After compiling to WASM, UDFs become much larger than the
source code. When they're included in test_wasm.py, it
becomes difficult to navigate in the file. Moving them
to another place does not make understanding the test
scripts harder, because the source code is still included.

This problem will become even more severe when testing
UDFs using WASI.

Signed-off-by: Wojciech Mitros <wojciech.mitros@scylladb.com>

Closes #10934
2022-07-03 17:37:21 +03:00
Nadav Har'El
5f98b81cb3 dbuild: disable selinux instead of relabeling
By default, Docker uses SELinux to prevent malicious code in the container
from "escaping" and touching files outside the container: The container
is only allowed to touch files with a special SELinux label, which the
outside files simply do not have. However, this means that if you want
to "mount" outside files into the container, Docker needs to add the
special label to them. This is why one needs to use the ":z" option
when mounting an outside file inside docker - it asks docker to "relabel"
the directory to be usable in Docker.

But this relabeling process is slow and potentially harmful if done to
large directories such as your home directory, where you may theoretically
have SELinux labels for other reasons. The relabling is also unnecessary -
we don't really need the SELinux protection in dbuild. Dbuild was meant
to provide a common toolchain - it was never meant to protect the build
host from a malicious build script.

The alternative we use in this patch is "--security-opt label=disable".
This allows the container to access any file in the host filesystem,
but as usual - only if it's explicitly "mounted" into the container.
All ":z" we added in the past can be removed.

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

Closes #10945
2022-07-03 16:20:07 +03:00
Avi Kivity
c290976185 Merge 'cql3: Remove some restrictions classes' from Jan Ciołek
This PR removes some restrictions classes and replaces them with expression.

* `single_column_restriction` has been removed altogether.
* `partition_key_restrictions` field inside `statement_restrictions` has been replaced with `expression`

`clustering_key_restrictions` are not replaced yet, but this PR already has 30 commits so it's probably better to merge this before adding any more changes.
Luckily most of these commits are implementations of small helper functions.

`single_column_restriction` was pretty easy to remove. This class holds the `expression` that describes the restriction and `column_definition` of the restricted column.
It inherits from `restriction` - the base class of all restrictions.

I wasn't able to replace it with plain `expression` just yet, because a lot of times a `shared_ptr<single_column_restriction>` is being cast to `shared_ptr<restriction>`.
Instead I replaced all instances of `single_column_restriction` with `restriction`.
To decide if a `restriction` is a `single_column_restriction` we can use a helper method that works on expressions.
Same with acquiring the restricted `column_definition`.

This change has two advantages:
* One less restriction class -> moving towards 0
* Preparing towards one generic `restriction/expression` type and using functions to distinguish the type of expression that we're dealing with.

`partition_key_restrictions` is a class used to keep restrictions on the partition key inside `statement_restrictions`.
Removing it required two major steps.

First I had to implement taking all the binary operators and making sure that they are valid together.
Before the change this was the `merge_to` method. It ensures that for example there are no token and regular restrictions occurring at the same time.
This has been implemented as `statement_restrictions::add_restriction`.
It detects which case it's dealing with and mimics `merge_to` from the right restrictions class.

Then I implemented all methods of `partition_key_restrictions` but operating on plain `expressions`.
While doing that I was able to gradually shift the responsibility to the brand new functions.

Finally `partition_key_restrictions` wasn't used anywhere at all and I was able to remove it.

Here's the inheritance tree of all restriction classes for context:
![image](https://user-images.githubusercontent.com/36861778/176141470-f96f6189-e650-44c2-9648-2a840b4c89c0.png)

For now this is marked as a draft.
I just put all this together in a readable way and wanted to put it out for you to see.
I will have another look at the code and maybe do some improvements.

Closes #10910

* github.com:scylladb/scylla:
  cql3: Remove _new from  _new_partition_key_restrictions
  cql3: Remove _partition_key_restrictions from statement_restrictions
  cql3: Use expression for index restrictions
  cql3: expr: Add contains_multi_column_restriction
  cql3: Add expr::value_for
  cql3: Use the new restrictions map in another place
  cql3: use the new map in get_single_column_partition_key_restrictions
  cql3: Keep single column restrictions map inside statement restrictions
  cql3: Use expression instead of _partition_key_restrictions in the remaining code
  cql3: Replace partition_key_restrictions->has_supporting_index()
  cql3: Replace statement_restrictions->get_column_defs()
  cql3: Replace partition_key_restrictions->needs_filtering()
  cql3: Replace partition_key_restrictions->size()
  cql3: Replace partition_key_restrictions->is_all_eq()
  cql3: Replace parition_key_restriction->has_unrestricted_components()
  cql3: Replace parition_key_restrictions->empty()
  cql3: Keep restrictions as expressions inside statement_restrictions
  cql3: Handle single value INs inside prepare_binary_operator
  cql3: Add get_columns_in_commons
  cql3: expr: Add is_empty_restriction
  cql3: Replicate column sorting functionality using expressions
  cql3: Remove single_column_restriction class
  cql3: Replace uses of single_column_restriction with restriction
  cql3: expr: Add get_the_only_column
  cql3: expr: Add is_single_column_restriction
  cql3: expr: Add for_each_expression
  cql3: Remove some unsued methods
2022-07-03 16:11:25 +03:00
Jan Ciolek
f37094959d cql3: Remove _new from _new_partition_key_restrictions
_new_partition_key_restrictions was a temporary name
used during the transition from restrictions to expressions.

Now that restrictions aren't used anymore it can be changed
back to _partition_key_restrictions.

Signed-off-by: Jan Ciolek <jan.ciolek@scylladb.com>
2022-07-01 16:29:11 +02:00
Jan Ciolek
854ffd7bd8 cql3: Remove _partition_key_restrictions from statement_restrictions
Now that all functionality of partition_key_restrictions
has been implemented using expressions we can remove
this field from statement_restrictions.

_new_partition_key_restrictions will be used for
everything instead.

Signed-off-by: Jan Ciolek <jan.ciolek@scylladb.com>
2022-07-01 16:29:11 +02:00
Jan Ciolek
76bf75a9d3 cql3: Use expression for index restrictions
Restrictions that might be used by an index
are currently being kept as shared_ptr<restrictions>.

This stand in the way of replacing _parition_key_restrictions
with an expression as an expression can't be cast to
shared_ptr<restriction>.

Change shared_ptr<restriction> to expression everywhere
where necessary in index operations.

Signed-off-by: Jan Ciolek <jan.ciolek@scylladb.com>
2022-07-01 16:29:11 +02:00
Jan Ciolek
83f27fc8c1 cql3: expr: Add contains_multi_column_restriction
Signed-off-by: Jan Ciolek <jan.ciolek@scylladb.com>
2022-07-01 16:29:11 +02:00
Jan Ciolek
fd0798c8a2 cql3: Add expr::value_for
value_for is a method from the restriction class
which finds the value for a given column.

Under the hood it makes use of possible_lhs_values.
It will be needed to implement some functionality
that was implemented using restrictions before.

Signed-off-by: Jan Ciolek <jan.ciolek@scylladb.com>
2022-07-01 16:29:11 +02:00
Jan Ciolek
8c8a03aad1 cql3: Use the new restrictions map in another place
Signed-off-by: Jan Ciolek <jan.ciolek@scylladb.com>
2022-07-01 16:29:11 +02:00
Jan Ciolek
4026042cbc cql3: use the new map in get_single_column_partition_key_restrictions
Signed-off-by: Jan Ciolek <jan.ciolek@scylladb.com>
2022-07-01 16:29:11 +02:00
Jan Ciolek
3916bf1168 cql3: Keep single column restrictions map inside statement restrictions
Some parts of the code make use of a map keeping single column restrictions
for each partition key column. One of this places is inside do_filter,
so it could be a performance problem to create such a map from scratch
each time.

After adding all restrictions from the where clause the new
map is created and can be used for various purposes.

Signed-off-by: Jan Ciolek <jan.ciolek@scylladb.com>
2022-07-01 16:29:10 +02:00
Jan Ciolek
1339ff1c79 cql3: Use expression instead of _partition_key_restrictions in the remaining code
There are still some places that use partition_key_restrictions
instead of _new_partition_key_restrictions in statement_restrictions.
Change them to use the new representation

Signed-off-by: Jan Ciolek <jan.ciolek@scylladb.com>
2022-07-01 16:29:10 +02:00
Jan Ciolek
0bb49e423a cql3: Replace partition_key_restrictions->has_supporting_index()
Signed-off-by: Jan Ciolek <jan.ciolek@scylladb.com>
2022-07-01 16:29:10 +02:00
Jan Ciolek
418ed0b802 cql3: Replace statement_restrictions->get_column_defs()
Signed-off-by: Jan Ciolek <jan.ciolek@scylladb.com>
2022-07-01 16:29:10 +02:00
Jan Ciolek
103f8e3d05 cql3: Replace partition_key_restrictions->needs_filtering()
Signed-off-by: Jan Ciolek <jan.ciolek@scylladb.com>
2022-07-01 16:29:10 +02:00
Jan Ciolek
de99c0a0fa cql3: Replace partition_key_restrictions->size()
Signed-off-by: Jan Ciolek <jan.ciolek@scylladb.com>
2022-07-01 16:29:10 +02:00
Jan Ciolek
16e94aaa91 cql3: Replace partition_key_restrictions->is_all_eq()
Signed-off-by: Jan Ciolek <jan.ciolek@scylladb.com>
2022-07-01 16:29:09 +02:00
Jan Ciolek
4d376eb84f cql3: Replace parition_key_restriction->has_unrestricted_components()
Signed-off-by: Jan Ciolek <jan.ciolek@scylladb.com>
2022-07-01 16:29:09 +02:00
Jan Ciolek
7f620cfa29 cql3: Replace parition_key_restrictions->empty()
To remove partition_key_restrictions all of its
methods have to be implemented using the new expression
representation.

The first to go is empty() as it's easy to implement.

Signed-off-by: Jan Ciolek <jan.ciolek@scylladb.com>
2022-07-01 16:29:09 +02:00
Jan Ciolek
e6e502e6e8 cql3: Keep restrictions as expressions inside statement_restrictions
Currently restrictions on partition, clustering and nonprimary columns
are kept inside special purpose restriction objects.

We want to remove all the restrictions classes so these objects
will be removed as well.
In the future each of these restrictions will be kept in
an expression.

Add new fields to statement_restrictions class which
will keep the right restrictions.

Currently restrictions from where clause are
added one by one using merge_to method of
the restrictions class.

This functionality will be replaced by statement_restrictions::add_restriction.
Functions for adding restrictions perform validation and
add new restrictions to the right field inside the class.

The checks that are done in add_*_restriction methods
correspond to the checks performed by merge_to
in respective restriction classes.

Signed-off-by: Jan Ciolek <jan.ciolek@scylladb.com>
2022-07-01 16:29:09 +02:00
Jan Ciolek
9b6b1f69aa cql3: Handle single value INs inside prepare_binary_operator
Currently expr::to_restriction is the only place where
prepare_binary_operator is called.

In case of a single-value IN restriction like:
mycol IN (1)
this expression is converted to
mycol = 1
by expr::to_restriction.

Once restriction is removed expr::to_restriction
will be removed as well so its functionality has to
be moved somewhere else.

Move handling single value INs inside
prepare_binary_operator.

Signed-off-by: Jan Ciolek <jan.ciolek@scylladb.com>
2022-07-01 16:29:09 +02:00
Jan Ciolek
24b0a61d51 cql3: Add get_columns_in_commons
Add a function that finds common columns
between two expressions.

It's used in error messages in the original
restrictions code so it must be included
in the new code as well for compatibility.

Signed-off-by: Jan Ciolek <jan.ciolek@scylladb.com>
2022-07-01 16:29:09 +02:00
Jan Ciolek
177ba9b9db cql3: expr: Add is_empty_restriction
Add a function to check whether
an expression restricts anything at all.

Signed-off-by: Jan Ciolek <jan.ciolek@scylladb.com>
2022-07-01 16:29:09 +02:00
Jan Ciolek
228b344d9c cql3: Replicate column sorting functionality using expressions
Restrictions code keeps restrictions for each column
in a map sorted by their position in the schema.
Then there are methods that allow to access
the restricted column in the correct order.

To replicate this in upcoming code
we need functions that implement this functionality.

The original comparator can be found in:
cql3/restrictions/single_column_restrictions.hh
For primary key columns this comparator compares their
positions in the schema.
For non-primary columns the position is assumed to
be clustering_key_size(), which seems pretty random.

To avoid passing the schema to the comparator
for nonprimary columns I just assume the
position is u32::max(). This seems to be
as good of a choice as clustering_key_size().
Orignally Cassandra used -1:
bc8a260471/src/java/org/apache/cassandra/config/ColumnDefinition.java (L79-L86)

We never end up comparing columns of different kind using this comparator anyway.

Signed-off-by: Jan Ciolek <jan.ciolek@scylladb.com>
2022-07-01 16:28:41 +02:00
Pavel Emelyanov
af026e423e compaction_manager: Add logging around drain
Now we know when it starts and whe^w if it finishes

Signed-off-by: Pavel Emelyanov <xemul@scylladb.com>
2022-07-01 17:17:53 +03:00
Pavel Emelyanov
a9d6e5cfb6 compaction_manager: Coroutinize drain
It's short enough to fix indentation right at once

Signed-off-by: Pavel Emelyanov <xemul@scylladb.com>
2022-07-01 17:17:53 +03:00
Pavel Emelyanov
b5c4553a66 storage_service: Sanitize stop_transport()
It generates ignored future that can be avoided if using forwarding to
shared_future<>'s promise

Signed-off-by: Pavel Emelyanov <xemul@scylladb.com>
2022-07-01 17:17:53 +03:00