Commit Graph

44793 Commits

Author SHA1 Message Date
Ferenc Szili
cdf775d3cc test: test tombstone GC disabled on pending replica
This tests if tombstone GC is disabled on pending replicas
2024-10-02 16:37:57 +02:00
Ferenc Szili
ba6707506d tablet_storage_group_manager: update tombstone_gc_enabled in compaction group
In order to avoid cases during tablet migrations where we garbage
collect tombstones before the data it shadows arrives, we will
disable tombstone GC on pending replicas.

To achieve this we added a tombston_gc_enabled flag to compaction_group.
This flag is updated from updte_effective_repliction_map method of the
tablet_storage_group_manager class.
2024-10-02 16:31:33 +02:00
Ferenc Szili
e472844a78 database::table: add tombstone_gc_enabled(locator::tablet_id)
This change adds the flag tombstone_gc_enabled to compaction_group.
The value of this flag will be set in
tablet_storage_group_manager::update_effective_replication_map().
2024-10-02 16:24:45 +02:00
Kefu Chai
9b5eab0dde test/lib: include <fmt/std.h> for formatting std::optional
before this change, when compiling with fmtlib v11.0.2 and clang
v19.1.0, the compiler fails like:

```
/usr/bin/clang++ -DBOOST_REGEX_DYN_LINK -DBOOST_REGEX_NO_LIB -DBOOST_UNIT_TEST_FRAMEWORK_DYN_LINK -DBOOST_UNIT_TEST_FRAMEWORK_NO_LIB -DDEBUG -DDEBUG_LSA_SANITIZER -DFMT_SHARED -DSANITIZE -DSCYLLA_BUILD_MODE=debug -DSCYLLA_ENABLE_ERROR_INJECTION -DSEASTAR_API_LEVEL=7 -DSEASTAR_DEBUG -DSEASTAR_DEBUG_PROMISE -DSEASTAR_DEBUG_SHARED_PTR -DSEASTAR_DEFAULT_ALLOCATOR -DSEASTAR_LOGGER_COMPILE_TIME_FMT -DSEASTAR_LOGGER_TYPE_STDOUT -DSEASTAR_SCHEDULING_GROUPS_COUNT=16 -DSEASTAR_SHUFFLE_TASK_QUEUE -DSEASTAR_SSTRING -DSEASTAR_TYPE_ERASE_MORE -DXXH_PRIVATE_API -DCMAKE_INTDIR=\"Debug\" -I/home/kefu/dev/scylladb -I/home/kefu/dev/scylladb/build/gen -I/home/kefu/dev/scylladb/seastar/include -I/home/kefu/dev/scylladb/build/seastar/gen/include -I/home/kefu/dev/scylladb/build/seastar/gen/src -I/home/kefu/dev/scylladb/build -isystem /home/kefu/dev/scylladb/abseil -isystem /home/kefu/dev/scylladb/build/rust -g -Og -g -gz -std=gnu++23 -fvisibility=hidden -Wall -Werror -Wextra -Wno-error=deprecated-declarations -Wimplicit-fallthrough -Wno-c++11-narrowing -Wno-deprecated-copy -Wno-mismatched-tags -Wno-missing-field-initializers -Wno-overloaded-virtual -Wno-unsupported-friend -Wno-enum-constexpr-conversion -Wno-unused-parameter -ffile-prefix-map=/home/kefu/dev/scylladb/build=. -march=x86-64-v3 -mpclmul -Xclang -fexperimental-assignment-tracking=disabled -Werror=unused-result -fstack-clash-protection -fsanitize=address -fsanitize=undefined -MD -MT test/lib/CMakeFiles/test-lib.dir/Debug/cql_assertions.cc.o -MF test/lib/CMakeFiles/test-lib.dir/Debug/cql_assertions.cc.o.d -o test/lib/CMakeFiles/test-lib.dir/Debug/cql_assertions.cc.o -c /home/kefu/dev/scylladb/test/lib/cql_assertions.cc
In file included from /home/kefu/dev/scylladb/test/lib/cql_assertions.cc:12:
In file included from /usr/include/fmt/ranges.h:20:
In file included from /usr/include/fmt/format.h:41:
/usr/include/fmt/base.h:2673:45: error: implicit instantiation of undefined template 'fmt::detail::type_is_unformattable_for<std::vector<std::optional<seastar::basic_sstring<signed char, unsigned int, 31, false>>>, char>'
 2673 |     type_is_unformattable_for<T, char_type> _;
      |                                             ^
/usr/include/fmt/base.h:2735:23: note: in instantiation of function template specialization 'fmt::detail::parse_format_specs<std::vector<std::optional<seastar::basic_sstring<signed char, unsigned int, 31, false>>>, fmt::detail::compile_parse_context<char>>' requested here
 2735 |         parse_funcs_{&parse_format_specs<Args, parse_context_type>...} {}
      |                       ^
/usr/include/fmt/base.h:2884:47: note: in instantiation of member function 'fmt::detail::format_string_checker<char, int, std::vector<std::optional<seastar::basic_sstring<signed char, unsigned int, 31, false>>>, std::vector<std::optional<managed_bytes>>>::format_string_checker' requested here
 2884 |       detail::parse_format_string<true>(str_, checker(s));
      |                                               ^
/home/kefu/dev/scylladb/test/lib/cql_assertions.cc:132:34: note: in instantiation of function template specialization 'fmt::basic_format_string<char, int &, std::vector<std::optional<seastar::basic_sstring<signed char, unsigned int, 31, false>>> &, const std::vector<std::optional<managed_bytes>> &>::basic_format_string<char[35], 0>' requested here
  132 |             fail(seastar::format("row {} differs, expected {} got {}", row_nr, row, actual));
      |                                  ^
/usr/include/fmt/base.h:1616:8: note: template is declared here
 1616 | struct type_is_unformattable_for;
      |        ^
/home/kefu/dev/scylladb/test/lib/cql_assertions.cc:132:34: error: call to consteval function 'fmt::basic_format_string<char, int &, std::vector<std::optional<seastar::basic_sstring<signed char, unsigned int, 31, false>>> &, const std::vector<std::optional<managed_bytes>> &>::basic_format_string<char[35], 0>' is not a constant expression
  132 |             fail(seastar::format("row {} differs, expected {} got {}", row_nr, row, actual));
      |                                  ^
```

because the formatter for `std::optional<>` is defined in fmt/std.h.

so, in this change, we include the used header.

Signed-off-by: Kefu Chai <kefu.chai@scylladb.com>

Closes scylladb/scylladb#20922
2024-10-01 22:32:16 +03:00
Pavel Emelyanov
7f71371de1 distributed_loader: Get token metadata from e.r.m., not database
Though database can be used to get relevant token metadata, it's better
not to use one service (database) as a proxy to get another one (token
metadata). In case of tokens, there's effective replication map at hand,
which is a more correct source of such topology information.

Signed-off-by: Pavel Emelyanov <xemul@scylladb.com>

Closes scylladb/scylladb#20894
2024-10-01 14:59:35 +03:00
Anna Stuchlik
7eb1dc2ae5 doc: document the option to run ScyllaDB in Docker on macOS
This commit adds a description of a workaround to create a multi-node ScyllaDB cluster
with Docker on macOS.

Refs https://github.com/scylladb/scylladb/issues/16806
See https://forum.scylladb.com/t/running-3-node-scylladb-in-docker/1057/4

Closes scylladb/scylladb#20857
2024-10-01 14:58:58 +03:00
Botond Dénes
6535283881 .github/CODEOWNERS: add code owners for tools/*
Closes scylladb/scylladb#20702
2024-10-01 14:52:26 +03:00
Yaron Kaikov
ab964bcd5a [script/pull_github_pr.sh] Check Gating status before merging
Maintainers use scripts/pull_github_pr.sh from scylladb.git when merging PRs and before pushing to the next. We want to prevent merges from piling up on top of unstable builds. This change will check Gating's current status and notify the maintainers

Related to scylladb/scylla-pkg#3644

Closes scylladb/scylladb#20742
2024-10-01 14:46:29 +03:00
Anna Stuchlik
a97db03448 doc: add metric updates from 6.1 to 6.2
This commit specifies metrics that are new in version 6.2 compared to 6.1,
as specified in https://github.com/scylladb/scylladb/issues/20176.

Fixes https://github.com/scylladb/scylladb/issues/20176

Closes scylladb/scylladb#20896
2024-10-01 14:41:37 +03:00
muthu90tech
1204d54c5c transport: Dont bypass seastar API when making syscalls
The transport/controller.cc bypasses seastar API when making a few syscalls,
this PR will use the right seastar API to make the syscall and libc calls
this PR relies on few new APIs introduced in
seastar commit : cd7f3b8e8850cd80a4f6899cedc726e576c51abe

Closes scylladb/scylladb#17443

Closes scylladb/scylladb#19565
2024-10-01 14:29:24 +03:00
Benny Halevy
5a0f3889e0 treewide: use std::ranges sort functions rather than boost
Using the standard library is preffered over boost.

In cql3/expr/expression.cc to_sorted_vector got more of a
face-list and was modernized to use also std::unique
and while at it, to move its input range in the uniquely sorted
result vector.

Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2024-10-01 14:19:05 +03:00
Avi Kivity
e99426df60 treewide: de-static namespace scope functions in headers
'static inline' is always wrong in headers - if the same header is
included multiple times, and the function happens not to be inlined,
then multiple copies of it will be generated.

Fix by mechanically changing '^static inline' to 'inline'.
2024-10-01 14:02:50 +03:00
Avi Kivity
e9425e15b2 treewide: remove dependency on boost asio address_v4
It's not used. There's a comment mentioning it prevents some type
conflict, but apparently that was fixed some time ago.

Closes scylladb/scylladb#20883
2024-10-01 14:00:50 +03:00
Pavel Emelyanov
24598848a9 Merge 'virtual_tables: snapshots: include all snapshots' from Benny Halevy
Use database::get_snapshot_details to get the details
of all snapshots on disk, in particular those of
deleted tables.

Add test_snapshots_dropped_table to test listing
of snapshots of a deleted table.
And harden the existing test cases to use a unique
snapshot tag and to delete it when the test ends.

Fixes #18313

* No backport required at this time since this is rather minor UX issue that weren't hit in the field AFAIK

Closes scylladb/scylladb#20869

* github.com:scylladb/scylladb:
  cql-pytest: test_virtual_tables: add test_snapshots_multiple_keyspaces
  virtual_tables: snapshots: include all snapshots
2024-10-01 13:56:13 +03:00
Gleb Natapov' via ScyllaDB development
22368b13f2 api: introduce raft stepdown REST API
Also provide test.py util function to trigger it. Can be useful for
testing.
2024-10-01 12:18:49 +02:00
Avi Kivity
f5628be597 Update tools/java submodule
* tools/java 5b0e274f12...b2d025fd6b (1):
  > build.xml: update scylla-tools license
2024-10-01 12:48:45 +03:00
Pavel Emelyanov
1dfe780457 cql: Check that CREATEing tablets/vnodes is consistent with the CLI
There are two bits that control whenter replication strategy for a
keyspace will use tablets or not -- the configuration option and CQL
parameter. This patch tunes its parsing to implement the logic shown
below:

    if (strategy.supports_tablets) {
         if (cql.with_tablets) {
             if (cfg.enable_tablets) {
                 return create_keyspace_with_tablets();
             } else {
                 throw "tablets are not enabled";
             }
         } else if (cql.with_tablets = off) {
              return create_keyspace_without_tablets();
         } else { // cql.with_tablets is not specified
              if (cfg.enable_tablets) {
                  return create_keyspace_with_tablets();
              } else {
                  return create_keyspace_without_tablets();
              }
         }
     } else { // strategy doesn't support tablets
         if (cql.with_tablets == on) {
             throw "invalid cql parameter";
         } else if (cql.with_tablets == off) {
             return create_keyspace_without_tablets();
         } else { // cql.with_tablets is not specified
             return create_keyspace_without_tablets();
         }
     }

closes: #20088

In order to enable tablets "by default" for NetworkTopologyStrategy
there's explicit check near ks_prop_defs::get_initial_tablets(), that's
not very nice. It needs more care to fix it, e.g. provide feature
service reference to abstract_replication_strategy constructor. But
since ks_prop_defs code already highjacks options specifically for that
strategy type (see prepare_options() helper), it's OK for now.

There's also #20768 misbehavior that's preserved in this patch, but
should be fixed eventually as well.

Signed-off-by: Pavel Emelyanov <xemul@scylladb.com>

Closes scylladb/scylladb#20779
2024-10-01 10:54:29 +02:00
Botond Dénes
e780a3f168 Merge 'fix regressions of building tests with cmake' from Laszlo Ersek
Fix two recent regressions of the cmake build -- found this time in the test suite.

We (presumably) don't build stable releases (and their tests) with CMake, so backporting these fixes appears unnecessary, even if the regressions have been ported to stable branches.

@xemul @dawmd @tchaikov @tgrabiec @scylladb/scylla-maint

Closes scylladb/scylladb#20854

* github.com:scylladb/scylladb:
  test/boost/bptree_test: fix the CMake build
  test/boost/auth_test: fix the CMake build
2024-10-01 11:14:19 +03:00
Kefu Chai
d484121cc8 github: add a trigger to retrigger clang-tidy with comment
before this change, clang-tidy is triggered by a pull request. but
there are chances that user wants to retrigger it. for jenkins
jobs, user can rebuild a job manually. but for workflow, only the
developers with write permission can retrigger a workflow. this
is not convenient to regular contributors.

so, in this change, another trigger is added, so that user can
trigger the clang-tidy workflow with "/clang-tidy" command.
the syntax is inspired by IRC commands.

Signed-off-by: Kefu Chai <kefu.chai@scylladb.com>

Closes scylladb/scylladb#20841
2024-10-01 11:10:54 +03:00
Avi Kivity
fb8743b2d6 Merge 'sstables: Fix use-after-free on page cache buffer when parsing promoted index entries across pages' from Tomasz Grabiec
This fixes a use-after-free bug when parsing clustering key across
pages.

Also includes a fix for allocating section retry, which is potentially not safe (not in practice yet).

Details of the first problem:

Clustering key index lookup is based on the index file page cache. We
do a binary search within the index, which involves parsing index
blocks touched by the algorithm. Index file pages are 4 KB chunks
which are stored in LSA.

To parse the first key of the block, we reuse clustering_parser, which
is also used when parsing the data file. The parser is stateful and
accepts consecutive chunks as temporary_buffers. The parser is
supposed to keep its state across chunks.

In 93482439, the promoted index cursor was optimized to avoid
fully page copy when parsing index blocks. Instead, parser is
given a temporary_buffer which is a view on the page.

A bit earlier, in b1b5bda, the parser was changed to keep shared
fragments of the buffer passed to the parser in its internal state (across pages)
rather than copy the fragments into a new buffer. This is problematic
when buffers come from page cache because LSA buffers may be moved
around or evicted. So the temporary_buffer which is a view on the LSA
buffer is valid only around the duration of a single consume() call to
the parser.

If the blob which is parsed (e.g. variable-length clustering key
component) spans pages, the fragments stored in the parser may be
invalidated before the component is fully parsed. As a result, the
parsed clustering key may have incorrect component values. This never
causes parsing errors because the "length" field is always parsed from
the current buffer, which is valid, and component parsing will end at
the right place in the next (valid) buffer.

The problematic path for clustering_key parsing is the one which calls
primitive_consumer::read_bytes(), which is called for example for text
components. Fixed-size components are not parsed like this, they store
the intermediate state by copying data.

This may cause incorrect clustering keys to be parsed when doing
binary search in the index, diverting the search to an incorrect
block.

Details of the solution:

We adapt page_view to a temporary_buffer-like API. For this, a new concept
is introduced called ContiguousSharedBuffer. We also change parsers so that
they can be templated on the type of the buffer they work with (page_view vs
temporary_buffer). This way we don't introduce indirection to existing algorithms.

We use page_view instead of temporary_buffer in the promoted
index parser which works with page cache buffers. page_view can be safely
shared via share() and stored across allocating sections. It keeps hold to the
LSA buffer even across allocating sections by the means of cached_file::page_ptr.

Fixes #20766

Closes scylladb/scylladb#20837

* github.com:scylladb/scylladb:
  sstables: bsearch_clustered_cursor: Add trace-level logging
  sstables: bsearch_clustered_cursor: Move definitions out of line
  test, sstables: Verify parsing stability when allocating section is retried
  test, sstables: Verify parsing stability when buffers cross page boundary
  sstables: bsearch_clustered_cursor: Switch parsers to work with page_view
  cached_file: Adapt page_view to ContiguousSharedBuffer
  cached_file: Change meaning of page_view::_size to be relative to _offset rather than page start
  sstables, utils: Allow parsers to work with different buffer types
  sstables: promoted_index_block_parser: Make reset() always bring parser to initial state
  sstables: bsearch_clustered_cursor: Switch read_block_offset() to use the read() method
  sstables: bsearch_clustered_cursor: Fix parsing when allocating section is retried
2024-10-01 00:02:55 +03:00
Calle Wilund
b5d167699c commitlog: Fix buffer_list_bytes not updated correctly
Fixes #20862

With the change in 60af2f3cb2 the bookkeep
for buffer memory was changed subtly, the problem here that we would
shrink buffer size before we after flush use said buffer's size to
decrement the buffer_list_bytes value, previously inc:ed by the full,
allocated size. I.e. we would slowly grow this value instead of adjusting
properly to actual used bytes.

Test included.

Closes scylladb/scylladb#20886
2024-09-30 18:04:00 +03:00
Raphael S. Carvalho
cf58674029 replica: Fix schema change during migration cleanup
During migration cleanup, there's a small window in which the storage
group was stopped but not yet removed from the list. So concurrent
operations traversing the list could work with stopped groups.

During a test which emitted schema changes during migrations,
a failure happened when updating the compaction strategy of a table,
but since the group was stopped, the compaction manager was unable
to find the state for that group.

In order to fix it, we'll skip stopped groups when traversing the
list since they're unused at this stage of migration and going away
soon.

Fixes #20699.

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

Closes scylladb/scylladb#20798
2024-09-30 17:30:38 +03:00
David Garcia
b94fbbf30c docs: update command
Removes the update command from the setup command.

This is required because versions now are not strictly pinned in the poetry.lock file since Sphinx ScyllaDB Theme 1.8.

Closes scylladb/scylladb#20876
2024-09-30 17:06:07 +03:00
Andrei Chekun
cdd0c0b7fc test.py: Do not attach logs for passed tests
To reduce the amount of space needed for reports, this PR will modify logs
attachment in allure, so it will attach logs only for the tests that have
status other than PASSED. To simplify the solution, with the current way it's
not possible to switch off these logs completely.

Closes scylladb/scylladb#20786
2024-09-30 14:55:55 +02:00
Kefu Chai
1c8100d3f1 test/unit: remove unused #include
following headers are no longer used by this compilation unit:

- "utils/managed_ref.hh"
- "test/perf/perf.hh"

this was identified by clang-include-cleaner. As the code is audited,
we can safely remove the #include directive.

Signed-off-by: Kefu Chai <kefu.chai@scylladb.com>

Closes scylladb/scylladb#20850
2024-09-30 14:46:39 +03:00
Kefu Chai
c3be4a36af test.py: pass "count" to re.sub() with kwarg
since Python 3.13, passing count to `re.sub()` as positional argument
has been deprecated. and when runnint `test.py` with Python 3.13, we
have following warning:

```
/home/kefu/dev/scylladb/./test.py:1477: DeprecationWarning: 'count' is passed as positional argument
  args.tests = set(re.sub(r'.* List configured unit tests\n(.*)\n', r'\1', out, 1, re.DOTALL).split("\n"))
```

see also https://github.com/python/cpython/issues/56166

in order to silence this distracting warning, let's pass
`count` using kwarg.

Signed-off-by: Kefu Chai <kefu.chai@scylladb.com>

Closes scylladb/scylladb#20859
2024-09-30 13:57:02 +03:00
Kefu Chai
947d9d5a97 scylla_coredump_setup: fix typos in comment
these typos were identified by the codespell workflow.

and fixed a syntax error along the way.

Signed-off-by: Kefu Chai <kefu.chai@scylladb.com>

Closes scylladb/scylladb#20877
2024-09-30 13:29:34 +03:00
Aleksandra Martyniuk
efc7ad8547 node_ops: fix task_manager_module::get_nodes()
Currently, node ops virtual task gathers its children from all nodes contained
in a sum of service::topology::normal_nodes and service::topology::transition_nodes.
The maps may contain nodes that are down but weren't removed yet. So, if a user
requests the status of a node ops virtual task, the task's attempt to retrieve
its children list may fail with seastar::rpc::closed_error.

Filter out the tasks that are down in node_ops::task_manager_module::get_nodes.

Fixes: #20843.

Closes scylladb/scylladb#20856
2024-09-30 12:32:23 +03:00
Pavel Emelyanov
423b5a3ba7 Merge 'directories: cleanups to silence clang-tidy false alarms' from Kefu Chai
clang-tidy warns:

```
Warning: /__w/scylladb/scylladb/utils/directories.cc:132:52: warning: 'path' used after it was moved [bugprone-use-after-move]
  132 |         bool can_access = co_await file_accessible(path.string(), access_flags::read | access_flags::write | access_flags::execute);
      |                                                    ^
/__w/scylladb/scylladb/utils/directories.cc:121:28: note: move occurred here
  121 |         verification_error(std::move(path), "File not owned by current euid: {}. Owner is: {}", geteuid(), sd.uid);
      |                            ^
```

because we pass `std::move(path)` to `verification_error()`, and "then" use this variable again in this same function.
this is a false alarm, but we could make it very clear to convince this tool that it's safe to do so.

---

it's a cleanup, hence no need to backport.

Closes scylladb/scylladb#20875

* github.com:scylladb/scylladb:
  directories: mark verification_error() with [[noreturn]]
  directories: pass const ref of path to verification_error()
2024-09-30 12:02:39 +03:00
Kamil Braun
322efb54c2 Merge 'raft_group0_client: place on a #include diet' from Avi Kivity
Reduce compile time and unnecessary compilations by reducing #include load.

Minor refactoring, no backport.

Closes scylladb/scylladb#20864

* github.com:scylladb/scylladb:
  raft_group0_client: uninclude "raft_group0_registry.hh"
  raft_group_registry: extract raft_timeout
  raft_group0_client: uninclude "mutation/mutation.hh"
  raft_group0_client: uninclude "db/system_keyspace.hh"
  db: system_keyspace: extract auth_version_t into its own header
2024-09-30 10:43:44 +02:00
Kefu Chai
faec71e666 directories: mark verification_error() with [[noreturn]]
this helps the compiler or static analyzers do make the right decision.
for instance, clang-tidy thinks a parameter like `std::move(path)`
could be reused after being moved away. with this attribute, this tool
should be able to tell that this never happens.

Signed-off-by: Kefu Chai <kefu.chai@scylladb.com>
2024-09-30 12:07:15 +08:00
Kefu Chai
0ef72475fc directories: pass const ref of path to verification_error()
before this change, we pass a `path` to `verification_error()` by
moving away from the original `path`. this works fine in the sense
that it is correct and does not incur potential performance issues.

but clang-tidy considers it a used-after-move, because it cannot tell
`verification_error()` does not return at all, and believes that `path`
could be accessed again after being moved away. so it warns like:

```
Warning: /__w/scylladb/scylladb/utils/directories.cc:132:52: warning: 'path' used after it was moved [bugprone-use-after-move]
  132 |         bool can_access = co_await file_accessible(path.string(), access_flags::read | access_flags::write | access_flags::execute);
      |                                                    ^
/__w/scylladb/scylladb/utils/directories.cc:121:28: note: move occurred here
  121 |         verification_error(std::move(path), "File not owned by current euid: {}. Owner is: {}", geteuid(), sd.uid);
      |                            ^
```

in this change, instead of passing `fs::path` to `verification_error()`,
we pass a `const fs::path&` to this function. because
`verification_error()` is not coroutine, neither does it not pass `path` to
another continuation to be scheduled. so it's perfectly fine to pass
`path` to it.

this change address the false alarms from clang-tidy.

Signed-off-by: Kefu Chai <kefu.chai@scylladb.com>
2024-09-30 12:07:15 +08:00
Nadav Har'El
64c0540d02 cql-pytest: test a few small materialized views syntax issue
While documenting materialized view in a new document (Refs #16569)
I encountered a few questions and this patch contains tests that
clarify their answer - and can later guarantee that the answer doesn't
unintentionally change in the future. The questions that these tests
answer are:

1. It is not allowed to filter a view on a static column (a comment
   on the test explains why).

2. We already tested that it's not allowed to SELECT a static column into
   a view. Here we add the check that "SELECT *" is also not allowed if
   a static column exists in the base table.

3. We check that CREATE MATERIALIZED VIEW ... WITH COMMENT='..' works.

4. We check that CREATE MATERIALIZED VIEW ... WITH COMPACT STORAGE is
   forbidden.

5. We check that CREATE MATERIALIZED VIEW ... WITH garbage=.. fails
   with a clean InvalidRequest.

All these tests pass on both Scylla and Cassandra.

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

Closes scylladb/scylladb#20873
2024-09-29 21:34:24 +03:00
Nadav Har'El
b008dabee5 test/cql-pytest: fix support for Cassandra 3
One of the design goals of the test/cql-pytest frameworks was to be able
to run these tests against Cassandra. Preferably, we should be able to
run most of the tests against any popular version of Cassandra, including
Cassandra 3. This is admittingly a very old version, but was still maintained
until just a year ago, it's the version that Scylla is most compatible with,
and we can still be curious about how it worked.

Until recently cql-pytest indeed worked on Cassandra 3, but it broke on some
change related to tablet detection that cause our most basic fixture -
"text_keyspace" - to use the Cassandra 4 feature of "auto expand".
This is trivial to fix - we should just use the this_dc fixture that we already
had exactly for this purpose.

Fixes #20781

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

Closes scylladb/scylladb#20782
2024-09-29 19:36:33 +03:00
Benny Halevy
946f21bbd3 cql-pytest: test_virtual_tables: add test_snapshots_multiple_keyspaces
Test snapshots listing in system.snapshots
using multiple keyspaces and multiple snpashots.

Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2024-09-29 14:36:18 +03:00
Benny Halevy
906de3444b virtual_tables: snapshots: include all snapshots
Use database::get_snapshot_details to get the details
of all snapshots on disk, in particular those of
deleted tables.

Add test_snapshots_dropped_table to test listing
of snapshots of a deleted table.
And harden the existing test cases to use a unique
snapshot tag and to delete it when the test ends.

Fixes scylladb/scylladb#18313

Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2024-09-29 14:16:11 +03:00
Botond Dénes
a4c41755de Update seastar submodule
* ./seastar 69f88e2f...3c9c2696 (14):
  > core/reactor: don't check AIO block count when they are not needed
  > build: do not print the default value of --c++-standard in help output
  > json_formatter: Add tests for formatter::write
  > Add APIs to get group details and to change ownership of file.
  > scripts/perftune.py: improve a dry-run printout
  > build: drop the workaround for a GCC bug
  > cmake: Depend on libbsd if DPDK depends on it
  > http: clarify the ownership in the router's doxygen comment
  > build: check for P2582R1 support
  > python: introduce a python formatting CI check
  > addr2line: reformat with black
  > scripts: add pyproject.toml
  > json_formatter: Make formatter::write work for std::pair
  > README.md: use the github homepage of Ceph for Crimson

Closes scylladb/scylladb#20836
2024-09-29 13:47:40 +03:00
Avi Kivity
5a470b2bfb Merge 'scylla_raid_setup: configure SELinux file context' from Takuya ASADA
On RHEL9, systemd-coredump fails to coredump on /var/lib/scylla/coredump because the service only have write acess with systemd_coredump_var_lib_t. To make it writable, we need to add file context rule for /var/lib/scylla/coredump, and run restorecon on /var/lib/scylla.

Fixes #19325

Closes scylladb/scylladb#20528

* github.com:scylladb/scylladb:
  scylla_raid_setup: configure SELinux file context
  scylla_coredump_setup: fix SELinux configuration for RHEL9
2024-09-29 12:53:00 +03:00
Avi Kivity
884297ae2e raft_group0_client: uninclude "raft_group0_registry.hh"
Reduce unnecessary recompilations.
2024-09-28 17:25:11 +03:00
Avi Kivity
67cdd0d389 raft_group_registry: extract raft_timeout
It is a vocabulary term that shouldn't need the registry to be visible.
Extract it to a new header.
2024-09-28 17:25:03 +03:00
Avi Kivity
93afc77307 raft_group0_client: uninclude "mutation/mutation.hh"
Lighten the dependency load. Some constructors and destructors
are uninlined to avoid the header depending on the mutation class.
2024-09-28 16:31:53 +03:00
Avi Kivity
5d68efe0bd raft_group0_client: uninclude "db/system_keyspace.hh"
It doesn't need it apart from a forward declaration.

Files that lost necessary includes are adjusted, and some users
of auth_version_t are redirected to the definition outside system_keyspace.
2024-09-28 16:31:53 +03:00
Avi Kivity
df3ee94467 db: system_keyspace: extract auth_version_t into its own header
Users of auth_version_t shouldn't need to include the heavyweight
system_keyspace.hh.
2024-09-28 16:31:50 +03:00
Pavel Emelyanov
c17d353718 Revert "[script/pull_github_pr.sh] Check Gating status before merging"
This reverts commit fac682df7e.

Again, this patch broke maintainer workflows, it needs even more care.
2024-09-27 19:12:18 +03:00
Benny Halevy
23d6b996b8 test/pylib: scylla_cluster: set endpoint_snitch in scylla conf
When `property_file` is provided, we generate a
`cassandra-rackdc.properties` file, but to actually use it,
`endpoint_snitch` must be set to `GossipingPropertyFileSnitch`.

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

Closes scylladb/scylladb#20730
2024-09-27 16:46:54 +03:00
David Garcia
4900e4b1ac docs: update theme 1.8.1
chore: update README

Closes scylladb/scylladb#20832
2024-09-27 14:35:39 +02:00
Laszlo Ersek
153279dbfa test/boost/bptree_test: fix the CMake build
Commit 4cf4b7d4ef ("test: Move B+tree compactiont test from unit to
boost", 2024-09-24) introduced the first SEASTAR_THREAD_TEST_CASE to
"test/boost/bptree_test.cc" (alongside the prior BOOST_AUTO_TEST_CASEs),
but missed changing the KIND of the test from BOOST to SEASTAR. Therefore
we get a linker failure:

> : && /usr/bin/clang++ -O2 -Xlinker --build-id=sha1 --ld-path=ld.lld
> -dynamic-linker=/.../lib64/ld-linux-x86-64.so.2
> test/boost/CMakeFiles/bptree_test.dir/Dev/bptree_test.cc.o -o
> test/boost/Dev/bptree_test -L$srcdir/idl/absl::headers
> -Wl,-rpath,$srcdir/idl/absl::headers test/lib/Dev/libtest-lib.a
> seastar/Dev/libseastar.a /usr/lib64/libxxhash.so
> /usr/lib64/libboost_unit_test_framework.so.1.83.0  utils/Dev/libutils.a
> -Xlinker --push-state -Xlinker --whole-archive auth/Dev/libscylla_auth.a
> -Xlinker --pop-state  /usr/lib64/libcrypt.so cdc/Dev/libcdc.a
> compaction/Dev/libcompaction.a mutation_writer/Dev/libmutation_writer.a
> -Xlinker --push-state -Xlinker --whole-archive  dht/Dev/libscylla_dht.a
> -Xlinker --pop-state types/Dev/libtypes.a  index/Dev/libindex.a -Xlinker
> --push-state -Xlinker --whole-archive locator/Dev/libscylla_locator.a
> -Xlinker --pop-state message/Dev/libmessage.a  gms/Dev/libgms.a
> sstables/Dev/libsstables.a readers/Dev/libreaders.a
> schema/Dev/libschema.a  -Xlinker --push-state -Xlinker --whole-archive
> tracing/Dev/libscylla_tracing.a  -Xlinker --pop-state
> Dev/libscylla-main.a  -Xlinker --push-state -Xlinker --whole-archive
> Dev/libscylla-zstd.a  -Xlinker --pop-state /usr/lib64/libzstd.so
> abseil/absl/strings/Dev/libabsl_cord.a
> abseil/absl/strings/Dev/libabsl_cordz_info.a
> abseil/absl/strings/Dev/libabsl_cord_internal.a
> abseil/absl/strings/Dev/libabsl_cordz_functions.a
> abseil/absl/strings/Dev/libabsl_cordz_handle.a
> abseil/absl/crc/Dev/libabsl_crc_cord_state.a
> abseil/absl/crc/Dev/libabsl_crc32c.a
> abseil/absl/crc/Dev/libabsl_crc_internal.a
> abseil/absl/crc/Dev/libabsl_crc_cpu_detect.a
> abseil/absl/strings/Dev/libabsl_str_format_internal.a /usr/lib64/libz.so
> service/Dev/libservice.a  node_ops/Dev/libnode_ops.a
> service/Dev/libservice.a  node_ops/Dev/libnode_ops.a  -lsystemd
> raft/Dev/libraft.a  repair/Dev/librepair.a  streaming/Dev/libstreaming.a
> replica/Dev/libreplica.a  db/Dev/libdb.a  mutation/Dev/libmutation.a
> data_dictionary/Dev/libdata_dictionary.a  cql3/Dev/libcql3.a
> transport/Dev/libtransport.a  cql3/Dev/libcql3.a
> transport/Dev/libtransport.a  lang/Dev/liblang.a
> /usr/lib64/liblua-5.4.so  -lm  /usr/lib64/libsnappy.so.1.1.10
> abseil/absl/container/Dev/libabsl_raw_hash_set.a
> abseil/absl/hash/Dev/libabsl_hash.a  abseil/absl/hash/Dev/libabsl_city.a
> abseil/absl/types/Dev/libabsl_bad_variant_access.a
> abseil/absl/hash/Dev/libabsl_low_level_hash.a
> abseil/absl/types/Dev/libabsl_bad_optional_access.a
> abseil/absl/container/Dev/libabsl_hashtablez_sampler.a
> abseil/absl/profiling/Dev/libabsl_exponential_biased.a
> abseil/absl/synchronization/Dev/libabsl_synchronization.a
> abseil/absl/debugging/Dev/libabsl_stacktrace.a
> abseil/absl/synchronization/Dev/libabsl_graphcycles_internal.a
> abseil/absl/synchronization/Dev/libabsl_kernel_timeout_internal.a
> abseil/absl/debugging/Dev/libabsl_symbolize.a
> abseil/absl/debugging/Dev/libabsl_debugging_internal.a
> abseil/absl/base/Dev/libabsl_malloc_internal.a
> abseil/absl/debugging/Dev/libabsl_demangle_internal.a
> abseil/absl/time/Dev/libabsl_time.a
> abseil/absl/strings/Dev/libabsl_strings.a
> abseil/absl/strings/Dev/libabsl_strings_internal.a
> abseil/absl/strings/Dev/libabsl_string_view.a
> abseil/absl/base/Dev/libabsl_throw_delegate.a
> abseil/absl/numeric/Dev/libabsl_int128.a
> abseil/absl/base/Dev/libabsl_base.a
> abseil/absl/base/Dev/libabsl_raw_logging_internal.a
> abseil/absl/base/Dev/libabsl_log_severity.a
> abseil/absl/base/Dev/libabsl_spinlock_wait.a  -lrt
> abseil/absl/time/Dev/libabsl_civil_time.a
> abseil/absl/time/Dev/libabsl_time_zone.a rust/Dev/libwasmtime_bindings.a
> rust/librust_combined.a utils/Dev/libutils.a  seastar/Dev/libseastar.a
> /usr/lib64/libboost_program_options.so  /usr/lib64/libboost_thread.so
> /usr/lib64/libboost_chrono.so  /usr/lib64/libboost_atomic.so
> /usr/lib64/libcares.so  /usr/lib64/libfmt.so.10.2.1 /usr/lib64/liblz4.so
> /usr/lib64/libgnutls.so  -latomic /usr/lib64/libsctp.so
> /usr/lib64/libprotobuf.so /usr/lib64/libyaml-cpp.so
> /usr/lib64/libhwloc.so  /usr/lib64/libnuma.so /usr/lib64/libxxhash.so
> /usr/lib64/libcryptopp.so /usr/lib64/libdeflate.so
> /usr/lib64/libboost_regex.so.1.83.0 /usr/lib64/libicui18n.so
> /usr/lib64/libicuuc.so  -ldl && :
> ld.lld: error: undefined symbol: main
> >>> referenced by
> /usr/bin/../lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crt1.o:(_start)
>
> ld.lld: error: undefined symbol:
> seastar::testing::seastar_test::seastar_test(char const*, char const*,
> int, boost::unit_test::decorator::collector_t&)
> ooo referenced by bptree_test.cc
> >>>
> test/boost/CMakeFiles/bptree_test.dir/Dev/bptree_test.cc.o:(_GLOBAL__sub_I_bptree_test.cc)
> clang++: error: linker command failed with exit code 1 (use -v to see invocation)

Fix the KIND now.

Signed-off-by: Laszlo Ersek <laszlo.ersek@scylladb.com>
2024-09-27 12:21:17 +02:00
Laszlo Ersek
5fa87cb1c6 test/boost/auth_test: fix the CMake build
Commit 78ab1ee8b7 ("test: Add tests for `CREATE ROLE WITH SALTED HASH`",
2024-09-20) made test/boost/auth_test dependent on cql3, but didn't encode
the dependency in "CMakeLists.txt":

> FAILED:
> test/boost/CMakeFiles/auth_test.dir/RelWithDebInfo/auth_test.cc.o
> /usr/bin/clang++ -DBOOST_ALL_DYN_LINK -DFMT_SHARED
> -DSCYLLA_BUILD_MODE=release -DSEASTAR_API_LEVEL=7
> -DSEASTAR_LOGGER_COMPILE_TIME_FMT -DSEASTAR_LOGGER_TYPE_STDOUT
> -DSEASTAR_SCHEDULING_GROUPS_COUNT=16 -DSEASTAR_SSTRING
> -DSEASTAR_TESTING_MAIN -DXXH_PRIVATE_API
> -DCMAKE_INTDIR=\"RelWithDebInfo\" -I$srcdir -I$srcdir/build/gen
> -I$srcdir/seastar/include -I$srcdir/build/seastar/gen/include
> -I$srcdir/build/seastar/gen/src -isystem $srcdir/abseil -isystem
> $srcdir/build/rust -ffunction-sections -fdata-sections -O3 -g -gz
> -std=gnu++23 -fvisibility=hidden -Wall -Werror -Wextra
> -Wno-error=deprecated-declarations -Wimplicit-fallthrough
> -Wno-c++11-narrowing -Wno-deprecated-copy -Wno-mismatched-tags
> -Wno-missing-field-initializers -Wno-overloaded-virtual
> -Wno-unsupported-friend -Wno-enum-constexpr-conversion
> -Wno-unused-parameter -ffile-prefix-map=$srcdir/build=. -march=westmere
> -Xclang -fexperimental-assignment-tracking=disabled -mllvm
> -inline-threshold=2500 -fno-slp-vectorize -Werror=unused-result -MD -MT
> test/boost/CMakeFiles/auth_test.dir/RelWithDebInfo/auth_test.cc.o -MF
> test/boost/CMakeFiles/auth_test.dir/RelWithDebInfo/auth_test.cc.o.d -o
> test/boost/CMakeFiles/auth_test.dir/RelWithDebInfo/auth_test.cc.o -c
> $srcdir/test/boost/auth_test.cc
> $srcdir/test/boost/auth_test.cc:22:10: fatal error: 'cql3/CqlParser.hpp'
> file not found
>    22 | #include "cql3/CqlParser.hpp"
>       |          ^~~~~~~~~~~~~~~~~~~~
> 1 error generated.

State the dependency now.

Signed-off-by: Laszlo Ersek <laszlo.ersek@scylladb.com>
2024-09-27 11:38:03 +02:00
Tomasz Grabiec
b5ae7da9d2 sstables: bsearch_clustered_cursor: Add trace-level logging 2024-09-27 01:25:15 +02:00
Tomasz Grabiec
8e54ecd38e sstables: bsearch_clustered_cursor: Move definitions out of line
In order to later use the formatter for the inner class
promoted_index_block, which is defined out of line after
cached_promoted_index class definition.
2024-09-27 01:25:15 +02:00