Commit Graph

35261 Commits

Author SHA1 Message Date
Petr Gusev
beeffb899f nonforwardable reader: refactor, extract reset_partition
No observable behaviour changes, just refactor
the code.
2023-02-28 23:00:02 +04:00
Petr Gusev
023ed0ad00 nonforwardable reader: add more tests
Add more test cases for completeness.
2023-02-28 23:00:02 +04:00
Petr Gusev
88cd1c3700 nonforwardable reader: no partition_end after fast_forward_to()
This patch fixes the problem with method fast_forward_to
which is similar to the one with next_partition, no
partition_end should be injected for the partition if
fast_forward_to was called inside it.
2023-02-28 23:00:02 +04:00
Petr Gusev
8ff96e1bce nonforwardable reader: no partition_end after next_partition()
Before the patch, nonforwardable reader injected
partition_end unconditionally. This caused problems
in case next_partition() was called, the downstream
reader might have already injected its own
partition_end marker, and the one from nonforwardable
reader was a duplicate.

Fixes: #12249
2023-02-28 23:00:02 +04:00
Petr Gusev
9c5c380b0b nonforwardable reader: no partition_end for empty reader
The patch introduces the _partition_is_open flag,
inject partition_end only if there was some data
in the input reader.

A simple unit test has been added for
the nonforwardable reader which checks this
new behaviour.
2023-02-28 22:59:56 +04:00
Petr Gusev
a46df5af63 row_cache: pass partition_start though nonforwardable reader
Now the nonforwardable reader unconditionally produces
a partition_end, even if the input reader was empty.
This is strange in itself, but it also hinders to
properly fix its next_partition() method, which is
our ultimate goal. So we are going to change this
and produce partition_end only if there were some
data in the stream. However, this makes a problem:
now we pop partition_start from the underlying reader
in autoupdating_underlying_reader::move_to_next_partition
and manually push it back to downstream readers
bypassing nonforwardable reader. This means if we
change the logic in nonforwardable reader as described
we will end up with partition_start without partition_end
in the downstream readers.

This patch rectifies this by making sure that
nonforwardable will see the initial partition_start.
We inject this partition_start just before the
nonforwardable reader, into delegating_reader.
This also makes the result type of
range_populating_reader::operator() a bit simpler,
we don't need to pass partition_start anymore.
2023-02-27 18:46:31 +04:00
David Garcia
20bff2bd10 docs: Update ScyllaDB Enterprise link
Closes #12985
2023-02-27 08:39:50 +02:00
Anna Stuchlik
95ce2e8980 doc: fix the option name LWT_OPTIMIZATION_META_BIT_MASK
Fixes #12940.

Closes #12982

[avi: move fixes tag out of subject]
2023-02-26 19:51:20 +02:00
Avi Kivity
c863186dc5 Merge 'Fixes for docs/dev/building.md' from Kamil Braun
Closes #12071

* github.com:scylladb/scylladb:
  docs/dev: building.md: mention node-exporter packages
  docs/dev: building.md: replace `dev` with `<mode>` in list of debs
2023-02-26 19:27:33 +02:00
Kefu Chai
410035f03d abstract_replication_strategy: remove unnecessary virtual specifier
`effective_replication_map` is not a base class of any other class. so
there is no need to mark any of its member function as `virtual`. this
change should address following waring from Clang:

```
/home/kefu/dev/scylladb/seastar/include/seastar/core/shared_ptr.hh:205:9: error: delete called on non-final 'locator::effective_replication_map' that has virtual functions but non-virtual destructor [-Werror,-Wdelete-non-abstract-non-virtual-dtor]
        delete value_ptr;
        ^
/home/kefu/dev/scylladb/seastar/include/seastar/core/shared_ptr.hh:202:9: note: in instantiation of member function 'seastar::internal::lw_shared_ptr_accessors_esft<locator::effective_replication_map>::dispose' requested here
        dispose(static_cast<T*>(counter));
        ^
/home/kefu/dev/scylladb/seastar/include/seastar/core/shared_ptr.hh:317:27: note: in instantiation of member function 'seastar::internal::lw_shared_ptr_accessors_esft<locator::effective_replication_map>::dispose' requested here
            accessors<T>::dispose(_p);
                          ^
/home/kefu/dev/scylladb/locator/abstract_replication_strategy.hh:263:12: note: in instantiation of member function 'seastar::lw_shared_ptr<locator::effective_replication_map>::~lw_shared_ptr' requested here
    return make_lw_shared<effective_replication_map>(std::move(rs), std::move(tmptr), std::move(replication_map), replication_factor);
           ^
```

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

Closes #12992
2023-02-26 19:16:28 +02:00
Kefu Chai
79d2eb1607 cql3: functions: validate arguments for 'token()' also
since "token()" computes the token for a given partition key,
if we pass the key of the wrong type, it should reject.

in this change,

* we validate the keys before returning the "token()" function.
* drop the "xfail" decorator from two of the tests. they pass
  now after this fix.
* change the tests which previously passed the wrong number of
  arguments containing null to "token()" and expect it to return
  null, so they verify that "token()" should reject these
  arguments with the expected error message.

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

Closes #12991
2023-02-26 19:01:58 +02:00
Gleb Natapov
1ce7ad1ee6 lwt: do not destroy capture in upgrade_if_needed lambda since the lambda is used more then once
If on the first call the capture is destroyed the second call may crash.

Fixes: #12958

Message-Id: <Y/sks73Sb35F+PsC@scylladb.com>
2023-02-26 16:13:16 +02:00
Kefu Chai
f3e6c9168c sstables: generation_type: define fmt::formatter for generation_type
turns out what we need is a fmt::formatter<sstables::generation_type>
not operator<<(ostream&, sstables::generation_type), as its only use
case is the formatter used by seastar::format().

to specialize fmt::formatter<sstables::generation_type>

* allows us to be one step closer to drop `FMT_DEPRECATED_OSTREAM`
* allows us to customize the way how generation_type is printed by
  customizing the format specifier.

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

Closes #12983
2023-02-26 15:38:10 +02:00
Avi Kivity
8a0a784131 Merge 'utils: UUID: use default generated comparison operators' from Kefu Chai
- utils: UUID: define operator<=> for UUID
- utils: UUID: define operator==() only

Closes #12981

* github.com:scylladb/scylladb:
  utils: UUID: define operator==() only
  utils: UUID: define operator<=> for UUID
2023-02-26 15:31:46 +02:00
Piotr Smaroń
c1760af26c cql3: adding missing privileged on cache size eviction metric
Fixes #10463

Closes #12865
2023-02-26 14:33:46 +02:00
Kefu Chai
1c71151eda utils: UUID: define operator==() only
as, in C++20, compiler is able to generate the operator==() for us,
and the default generated one is identical to what we have now.

also, in C++20, operator!=() is generated by compiler if operator==()
is defined, so we can dispense with the former.

Signed-off-by: Kefu Chai <kefu.chai@scylladb.com>
2023-02-25 09:36:11 +08:00
Kefu Chai
300e0b1d1c utils: UUID: define operator<=> for UUID
instead of the family of comparison operators, just define <=>. as
in C++20, compiler will define all six comparison operators for us.

in this change, the operator<=> is defined, so we can more compacted
code.

Signed-off-by: Kefu Chai <kefu.chai@scylladb.com>
2023-02-25 09:36:11 +08:00
Asias He
ba919aa88a storage_service: Send heartbeat earlier for node ops
Node ops has the following procedure:

1   for node in sync_nodes
      send prepare cmd to node

2   for node in sync_nodes
      send heartbeat cmd to node

If any of the prepare cmd in step 1 takes longer than the heartbeat
watchdog timeout, the heartbeat in step 2 will be too late to update the
watchdog, as a result the watchdog will abort the operation.

To prevent slow prepare cmd kills the node operations, we can start the
heartbeat earlier in the procedure.

Fixes #11011
Fixes #12969

Closes #12980
2023-02-24 22:31:40 +01:00
Botond Dénes
61e67b865a Merge 'service:forward_service: use long type instead of counter in function mocking' from Michał Jadwiszczak
Aggregation query on counter column is failing because forward_service is looking for function with counter as an argument and such function doesn't exist. Instead the long type should be used.

Fixes: #12939

Closes #12963

* github.com:scylladb/scylladb:
  test:boost: counter column parallelized aggregation test
  service:forward_service: use long type when column is counter
2023-02-24 15:25:10 +02:00
Raphael S. Carvalho
d73ffe7220 sstables: Temporarily disable loading of first and last position metadata
It's known that reading large cells in reverse cause large allocations.
Source: https://github.com/scylladb/scylladb/issues/11642

The loading is preliminary work for splitting large partitions into
fragments composing a run and then be able to later read such a run
in an efficiency way using the position metadata.

The splitting is not turned on yet, anywhere. Therefore, we can
temporarily disable the loading, as a way to avoid regressions in
stable versions. Large allocations can cause stalls due to foreground
memory eviction kicking in.
The default values for position metadata say that first and last
position include all clustering rows, but they aren't used anywhere
other than by sstable_run to determine if a run is disjoint at
clustering level, but given that no splitting is done yet, it
does not really matter.

Unit tests relying on position metadata were adjusted to enable
the loading, such that they can still pass.

Fixes #11642.

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

Closes #12979
2023-02-24 12:14:18 +02:00
Michał Jadwiszczak
4c6675bf1a test:boost: counter column parallelized aggregation test 2023-02-24 10:24:23 +01:00
Michał Jadwiszczak
68d2e1fff8 service:forward_service: use long type when column is counter
Previously aggregations on counter columns were failing because
function mocking was looking for function with counter arguemnt,
which doesn't exist.
2023-02-24 10:24:16 +01:00
Botond Dénes
be232ff024 Merge 'Shard of shard repair task impl' from Aleksandra Martyniuk
Shard id is logged twice in repair (once explicitly, once added by logger).
Redundant occurrence is deleted.

shard_repair_task_impl::id (which contains global repair shard)
is renamed to avoid further confusion.

Fixes: #12955

Closes #12959

* github.com:scylladb/scylladb:
  repair: rename shard_repair_task_impl::id
  repair: delete redundant shard id from logs
2023-02-24 08:43:54 +02:00
Botond Dénes
80f653d65e Merge 'Major keyspace compaction task' from Aleksandra Martyniuk
Task manager task implementation that covers the major keyspace
compaction which can be start through /storage_service/keyspace_compaction/
api.

Closes #12661

* github.com:scylladb/scylladb:
  test: add test for major keyspace compaction tasks
  compaction: create task manager's task for major keyspace compaction
  compaction: copy run_on_existing_tables to task_manager_module.cc
  compaction: add major_compaction_task_impl
  compacition: add pure virtual compaction_task_impl
  compaction: add compaction module getter to compaction manager
2023-02-24 07:08:06 +02:00
Guy Shtub
c47b7c4cb2 Replacing user-group with community forum, added link to U. lesson on Spring Boot Fixed author/email details
Closes #12748
2023-02-23 19:05:26 +02:00
Aleksandra Martyniuk
e9f01c7cce test: add test for major keyspace compaction tasks 2023-02-23 15:48:25 +01:00
Aleksandra Martyniuk
159e603ac4 compaction: create task manager's task for major keyspace compaction
Implementation of task_manager's task covering major keyspace compaction
that can be started through storage_service api.
2023-02-23 15:48:05 +01:00
Aleksandra Martyniuk
6b1d7f5979 compaction: copy run_on_existing_tables to task_manager_module.cc
Copy run_on_existing_tables from api/storage_service.cc to
compaction/task_manager_module.cc
2023-02-23 15:31:59 +01:00
Anna Stuchlik
4dd1659d0b doc: fixes https://github.com/scylladb/scylladb/issues/12964, removes the information that the CDC options are experimental
Closes #12973
2023-02-23 15:06:53 +02:00
Kefu Chai
412953fdd5 compress, transport: do not detect LZ4_compress_default()
`LZ4_compress_default()` was introduced in liblz4 v1.7.3, despite
that the release note (https://github.com/lz4/lz4/releases/tag/v1.7.3)
of v1.7.3 didn't mention this. if we check the commit which added
this API, we can find all releases including it: see
```
$ git tag --contains 1b17bf2ab8cf66dd2b740eca376e2d46f7ad7041
lz4-r130
r129
r130
r131
rc129v0
v1.7.3
v1.7.4
v1.7.4.2
v1.7.5
v1.8.0
v1.8.1
v1.8.1.2
v1.8.2
v1.8.3
v1.9.0
v1.9.1
v1.9.2
v1.9.3
v1.9.4
```

and v1.7.3 was released in Nov 17, 2016. some popular distros
releases also package new enough liblz4:

- fedora 35 ships lz4-devel 1.9.3,
- CentOS 7 ships lz4-devel 1.8.3
- debian 10 ships liblz4-dev 1.8.3
- ubuntu 18.04 ships liblz4-dev r131

so, in this change, we drop the support of liblz4 < 1.7.3 for better
code readability.

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

Closes #12971
2023-02-23 14:39:20 +02:00
Pavel Emelyanov
0959739216 sstables: Remove always-false sstable_writer_config::leave_unsealed
It was used in sstables streaming code up until e5be3352 (database,
streaming, messaging: drop streaming memtables) or nearby, then the
whole feature was reworked.

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

Closes #12967
2023-02-23 12:50:06 +01:00
Botond Dénes
624d176b3b Merge 'Refine usage of sstable_test_env::reusable_sst() method' from Pavel Emelyanov
Some test cases can be made a bit more compact by using the sugar provided by the aforementioned sugar

Closes #12965

* github.com:scylladb/scylladb:
  test: Make use of reusable_sst default format
  tests: Use reusable_sst() where applicable
2023-02-23 12:50:06 +01:00
Botond Dénes
a5979c0662 Merge 'treewide: remove invalid defaulted move ctor' from Kefu Chai
- test/boost/chunked_vector_test: remove defaulted exception_safe_class's move ctor
- tools/scylla-sstable: remove defaulted move ctor
- sstables/mx/partition_reversing_data_source: remove defaulted move ctor
- cql3/statements/truncate_statement: remove defaulted move ctor

Closes #12914

* github.com:scylladb/scylladb:
  test/boost/chunked_vector_test: remove defaulted exception_safe_class's move ctor
  tools/scylla-sstable: remove defaulted move ctor
  sstables/mx/partition_reversing_data_source: remove defaulted move ctor
  cql3/statements/truncate_statement: remove defaulted move ctor
2023-02-23 12:50:05 +01:00
Avi Kivity
665429d85b cql3: remove assignment_testable::test_all
Was replaced with cql3::expr::test_assignment_all().

Closes #12951
2023-02-23 12:50:05 +01:00
Botond Dénes
0c756af137 Merge 'build: cmake: sync with configure.py (6/n)' from Kefu Chai
- build: cmake: correct linker flags
- build: cmake: enable boost tests only if BUILD_TESTING
- build: cmake: reuse test-lib library
- build: cmake: extract redis out

Closes #12961

* github.com:scylladb/scylladb:
  build: cmake: extract interface out
  build: cmake: extract redis out
  build: cmake: reuse test-lib library
  build: cmake: enable boost tests only if BUILD_TESTING
  build: cmake: correct linker flags
2023-02-23 12:50:05 +01:00
Aleksandra Martyniuk
d889a599e8 repair: rename shard_repair_task_impl::id
shard_repair_task_impl::id stores global repair id. To avoid confusion
with the task id, the field is renamed to global_repair_id.
2023-02-23 11:29:00 +01:00
Aleksandra Martyniuk
f7c88edec5 repair: delete redundant shard id from logs
In repair shard id is logged twice. Delete repeated occurence.
2023-02-23 11:25:18 +01:00
Pavel Emelyanov
5b311bb724 test: Make use of reusable_sst default format
The sstable_test_env::reusable_sst() has default value for the format
argument. Patch the test cases that don't use one while at it.

Signed-off-by: Pavel Emelyanov <xemul@scylladb.com>
2023-02-22 17:04:10 +03:00
Pavel Emelyanov
7aabffff19 tests: Use reusable_sst() where applicable
The reusable_sst() is intented to be used to load the pre-existing
sstable from the test/resources directory and .load() them. Some test
cases, however, still do it "by hand".

Signed-off-by: Pavel Emelyanov <xemul@scylladb.com>
2023-02-22 17:03:15 +03:00
Kefu Chai
5b3fd57c25 build: cmake: extract interface out
Signed-off-by: Kefu Chai <kefu.chai@scylladb.com>
2023-02-22 18:35:11 +08:00
Kefu Chai
64879fb6f7 build: cmake: extract redis out
and move `redis/protocol_parser.rl` related rules into `redis`, as
it is a file used for the implementation of redis.

Signed-off-by: Kefu Chai <kefu.chai@scylladb.com>
2023-02-22 18:35:11 +08:00
Kefu Chai
43d9055b89 build: cmake: reuse test-lib library
it already includes the necessary bits used by test-perf, so let's
just link the latter to the former.

Signed-off-by: Kefu Chai <kefu.chai@scylladb.com>
2023-02-22 18:35:11 +08:00
Kefu Chai
d07b649791 build: cmake: enable boost tests only if BUILD_TESTING
BUILD_TESTING is an option exposed by CTest module, so let's
include CTest module, and check if BUILD_TESTING is enabled
before include boost based tests.

Signed-off-by: Kefu Chai <kefu.chai@scylladb.com>
2023-02-22 18:35:11 +08:00
Kefu Chai
59698cc495 build: cmake: correct linker flags
s/sha/sha1/. turns out 867b58c62c
failed to include the latest change.

Signed-off-by: Kefu Chai <kefu.chai@scylladb.com>
2023-02-22 18:35:11 +08:00
Aleksandra Martyniuk
b908369e85 compaction: add major_compaction_task_impl
All major compaction tasks will share some methods like
type or abort. The common part of the tasks should be
inherited from major_compaction_task_impl.
2023-02-22 09:52:04 +01:00
Aleksandra Martyniuk
be101078a0 compacition: add pure virtual compaction_task_impl
Add compaction_task_impl that is a pure virtual class from which
all compaction tasks implementations will inherit.
2023-02-22 09:51:57 +01:00
Pavel Emelyanov
f51762c72a headers: Refine view_update_generator.hh and around
The initial intent was to reduce the fanout of shared_sstable.hh through
v.u.g.hh -> cql_test_env.hh chain, but it also resulted in some shots
around v.u.g.hh -> database.hh inclusion.

By and large:
- v.u.g.hh doesn't need database.hh
- cql_test_env.hh doesn't need v.u.g.hh (and thus -- the
  shared_sstable.hh) but needs database.hh instead
- few other .cc files need v.u.g.hh directly as they pulled it via
  cql_test_env.hh before
- add forward declarations in few other places

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

Closes #12952
2023-02-22 09:32:30 +02:00
Botond Dénes
e183dc4345 Merge 'Wrap sstable directory scan state in components_lister' from Pavel Emelyanov
The sstable_directory now combines two activities:
* scans the list of files in /var/lib/data and generates sstable-s object from it
* maintains the found sstable-s throughout necessary processing (populate/reshard/reshape)

The former part is in fact storage-specific. If sstables are on a filesystem, then it should be scanned with listdir, there can be dangling files, like temp-TOC, pending deletion log and comonents not belonging to any TOCs. If sstables are on some other storage, then this part should work some other way.

Said that, the sstable_directory is to be split into two pieces -- lister and "processing state". The latter would (may?) require renaming the sstable_directory into something more relevant, but that's huge and intrusive change. For now, just collect the lister stuff in one place.

Closes #12843

* github.com:scylladb/scylladb:
  sstable_directory: Keep lister internals private
  sstable_directory: Move most of .commit_directory_changes() on lister
  sstable_directory: Remove temporary aliases
  sstable_directory: Move most of .process_sstable_dir() on lister
  sstable_directory: Move .handle_component() to components_lister
  sstable_directory: Keep files_for_removal on scan_state
  sstable_directory: Keep components_lister aboard
  sstable_directory: Keep scan_state on components_lister
2023-02-22 08:10:04 +02:00
Calle Wilund
64102780fe commitlog: Use static (reused) regex for (left over) descriptor parse
Refs #11710

Allows reusing regex for segment matching (for opening left-over segments after crash).
Should remove any stalls caused by commitlog replay preparation.

v2: Add unit test for descriptor parsing

Closes #12112
2023-02-21 18:34:04 +02:00
Botond Dénes
ef548e654d types: unserialize_value for multiprecision_int,bool: don't read uninitialized memory
Check the first fragment before dereferencing it, the fragment might be
empty, in which case move to the next one.
Found by running range scan tests with random schema and random data.

Fixes: #12821
Fixes: #12823
Fixes: #12708

Closes #12824
2023-02-21 17:39:18 +02:00