Commit Graph

37 Commits

Author SHA1 Message Date
Pavel Emelyanov
55d4fa49f7 distributed_loader: Populate keyspaces in default class
The streaming class throughput can be limitd with the respective option.
Doing boot-time reshard/reshape doesn't need to obey it, as the node is
not yet up but instead should get there as soon as possible.

Signed-off-by: Pavel Emelyanov <xemul@scylladb.com>
2022-07-19 12:21:13 +03:00
Pavel Emelyanov
a56e2c83f3 sstables: Keep priority class on sstable_directory
Current code accepts priotity class as an argument to various functions
that need it and all its callers use streaming class. Next patches will
needs to sometimes use default class, but it will require heavy patching
of the distributed loader. Things get simpler if the priority class is
kept on sstable_directory on start.

This change also simplifies the ongoing effort on unification of sched
and IO classes.

Signed-off-by: Pavel Emelyanov <xemul@scylladb.com>
2022-07-19 12:14:41 +03:00
Tomasz Grabiec
c5ad05c819 db: Allow splitting initiatlization of system tables
We will need some system tables to be initialized earlier in the boot
so that system.scylla_local can be read before schema tables are
initialized.
2022-07-06 22:08:56 +02:00
Botond Dénes
6c818f8625 Merge 'sstables: generation_type tidy-up' from Michael Livshin
- Use `sstables::generation_type` in more places
- Enforce conceptual separation of `sstables::generation_type` and `int64_t`
- Fix `extremum_tracker` so that `sstables::generation_type` can be non-default-constructible

Fixes #10796.

Closes #10844

* github.com:scylladb/scylla:
  sstables: make generation_type an actual separate type
  sstables: use generation_type more soundly
  extremum_tracker: do not require default-constructible value types
2022-06-28 08:50:12 +03:00
Benny Halevy
81fa1ce9a1 Revert 'Compact staging sstables'
This patch reverts the following patches merged in
78750c2e1a "Merge 'Compact staging sstables' from Benny Halevy"

> 597e415c38 "table: clone staging sstables into table dir"
> ce5bd505dc "view_update_generator: discover_staging_sstables: reindent"
> 59874b2837 "table: add get_staging_sstables"
> 7536dd7f00 "distributed_loader: populate table directory first"

The feature causes regressions seen with e.g.
https://jenkins.scylladb.com/view/master/job/scylla-master/job/dtest-daily-release/41/testReport/materialized_views_test/TestMaterializedViews/Run_Dtest_Parallel_Cloud_Machines___FullDtest___full_split011___test_base_replica_repair/
```
AssertionError: Expected [[0, 0, 'a', 3.0]] from SELECT * FROM t_by_v WHERE v = 0, but got []
```

Where views aren't updated properly.
Apparently since `table::stream_view_replica_updates`
doesn't exclude the staging sstables anymore and
since they are cloned to the base table as new sstables
it seems to the view builder that no view updates are
required since there's no changes comparing to the base table.

Reopens #9559

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

Closes #10890
2022-06-27 12:18:48 +03:00
Benny Halevy
7536dd7f00 distributed_loader: populate table directory first
So we can clone staging sstables into it later
when populating the table from the staging_dir

Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2022-06-23 16:55:27 +03:00
Pavel Emelyanov' via ScyllaDB development
b0b29edcd7 distributed-loader: Remove ensure_system_table_directories
It looks like the exactly same code is called few steps above via

distributed_loader::init_system_keyspace
 `- distributed_loader::populate_keyspace

While at it -- move the supervisor::notify("loading system sstables")
handing around in the more suitable location.

tests: https://jenkins.scylladb.com/job/releng/job/Scylla-CI/981/

Signed-off-by: Pavel Emelyanov <xemul@scylladb.com>
Message-Id: <20220621165313.31284-1-xemul@scylladb.com>
2022-06-22 13:59:00 +03:00
Michael Livshin
ab13127761 sstables: use generation_type more soundly
`generation_type` is (supposed to be) conceptually different from
`int64_t` (even if physically they are the same), but at present
Scylla code still largely treats them interchangeably.

In addition to using `generation_type` in more places, we
provide (no-op) `generation_value()` and `generation_from_value()`
operations to make the smoke-and-mirrors more believable.

The churn is considerable, but all mechanical.  To avoid even
more (way, way more) churn, unit test code is left untreated for
now, except where it uses the affected core APIs directly.

Signed-off-by: Michael Livshin <michael.livshin@scylladb.com>
2022-06-20 19:37:31 +03:00
Benny Halevy
b3e2204fe6 replica: distributed_loader: reindent populate_keyspace
Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2022-05-20 17:16:41 +03:00
Benny Halevy
a3c1dc8cee replica: distributed_loader: coroutinize populate_keyspace
Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2022-05-20 17:15:06 +03:00
Benny Halevy
5b038affae replica: distributed_loader: reindent handle_sstables_pending_delete
Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2022-05-20 17:07:53 +03:00
Benny Halevy
b8260c9983 replica: distributed_loader: coroutinize handle_sstables_pending_delete
Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2022-05-20 17:07:53 +03:00
Benny Halevy
48122d3006 replica: distributed_loader: reindent cleanup_column_family_temp_sst_dirs
Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2022-05-20 17:07:53 +03:00
Benny Halevy
8ba10dba2d replica: distributed_loader: coroutinize cleanup_column_family_temp_sst_dirs
Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2022-05-20 17:07:53 +03:00
Benny Halevy
5f4d20267d replica: distributed_loader: reindent make_sstables_available
Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2022-05-20 17:07:53 +03:00
Benny Halevy
b3ebbf35e2 replica: distributed_loader: coroutinize make_sstables_available
Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2022-05-20 17:07:53 +03:00
Benny Halevy
b13f44ca61 replica: distributed_loader: reindent reshape
Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2022-05-20 17:07:53 +03:00
Benny Halevy
a1e663f225 replica: distributed_loader: coroutinize reshape
Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2022-05-20 17:07:53 +03:00
Benny Halevy
cf0d0a18a0 replica: distributed_loader: coroutinize reshard
Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2022-05-20 17:07:53 +03:00
Benny Halevy
e1ba285d52 replica: distributed_loader: reindent run_resharding_jobs
Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2022-05-20 17:07:53 +03:00
Benny Halevy
29e51ed0cd replica: distributed_loader: coroutinize run_resharding_jobs
Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2022-05-20 17:07:53 +03:00
Benny Halevy
b65d55cbbf replica: distributed_loader: reindent distribute_reshard_jobs
Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2022-05-20 17:07:53 +03:00
Benny Halevy
3baa4d4946 replica: distributed_loader: coroutinize distribute_reshard_jobs
Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2022-05-20 17:07:53 +03:00
Benny Halevy
ba1eb7ab9c replica: distributed_loader: reindent collect_all_shared_sstables
Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2022-05-20 17:07:53 +03:00
Benny Halevy
84d528cd84 replica: distributed_loader: coroutinize collect_all_shared_sstables
Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2022-05-20 17:07:53 +03:00
Benny Halevy
8080e98309 replica: distributed_loader: reindent process_sstable_dir
Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2022-05-20 17:07:51 +03:00
Benny Halevy
33179c8647 replica: distributed_loader: coroutinize process_sstable_dir
Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2022-05-20 17:07:00 +03:00
Piotr Sarna
209c2f5d99 sstables: define generation_type for sstables
No functional changes intended - this series is quite verbose,
but after it's in, it should be considerably easier to change
the type of SSTable generations to something else - e.g. a string
or timeUUID.

Closes #10533
2022-05-11 14:46:30 +02:00
Pavel Emelyanov
9066224cf4 table: Don't export compaction manager reference
There's a public call on replica::table to get back the compaction
manager reference. It's not needed, actually. The users of the call are
distributed loader which already has database at hand, and a test that
creates itw own instance of compaction manager for its testing tables
and thus also has it available.

tests: unit(dev)

Signed-off-by: Pavel Emelyanov <xemul@scylladb.com>
Message-Id: <20220406171351.3050-1-xemul@scylladb.com>
2022-04-07 09:27:45 +03:00
Botond Dénes
c450508954 Merge "Introduce sharded<system_keyspace> instance" from Pavel Emelyanov
"
Making the system-keyspace into a standard sharded instance will
help to fix several dependency knots.

First, the global qctx and local-cache both will be moved onto the
sys-ks, all their users will be patched to depend on system-keyspace.
Now it's not quite so, but we're moving towards this state.

Second, snitch instance now sits in the middle of another dependency
loop. To untie one the preferred ip and dc/rack info should be
moved onto system keyspace altogether (now it's scattered over several
places). The sys-ks thus needs to be a sharded service with some
state.

This set makes system-keyspace sharded instance, equipps it with all
the dependencies it needs and passes it as dependency into storage
service, migration manager and API. This helps eliminating a good
portion of global qctx/cache usage and prepares the ground for snitch
rework.

tests: unit(dev)
       v1: unit(debug), dtest.simple_boot_shutdown(dev)
"

* 'br-sharded-system-keyspace-instance-2' of https://github.com/xemul/scylla: (25 commits)
  system_keyspace: Make load_host_ids non-static
  system_keyspace: Make load_tokens non-static
  system_keyspace: Make remove_endpoint and update_tokens non-static
  system_keyspace: Coroutinize update_tokens
  system_keyspace: Coroutinize remove_endpoint
  system_keyspace: Make update_cached_values non-static
  system_keyspace: Coroutinuze update_peer_info
  system_keyspace: Make update_schema_version non-static
  schema_tables: Add sharded<system_keyspace> argument to update_schema_version_and_announce
  replica: Push sharded<system_keyspace> down to parse_system_tables
  api: Carry sharded<system_keyspace> reference along
  storage_service: Keep sharded<system_keyspace> reference
  migration_manager: Keep sharded<system_keyspace> reference
  system_keyspace: Remove temporary qp variable
  system_keyspace: Make get_preferred_ips non-static
  system_keyspace: Make cache_truncation_record non-static
  system_keyspace: Make check_health non-static
  system_keyspace: Make build_bootstrap_info non-static
  system_keyspace: Make build_dc_rack_info non-static
  system_keyspace: Make setup_version non-static
  ...
2022-03-17 08:16:29 +02:00
Benny Halevy
a1d0f089c8 replica: distributed_database: populate_column_family: trigger offstrategy compaction only for the base directory
In https://github.com/scylladb/scylla/issues/10218
we see off-strategy compaction happening on a table
during the initial phases of
`distributed_loader::populate_column_family`.

It is caused by triggering offtrategy compaction
too early, when sstables are populated from the staging
directory in a144d30162.

We need to trigger offstrategy compaction only of the base
table directory, never the staging or quarantine dirs.

Fixes #10218

Test: unit(dev)
DTest: materialized_views_test.py::TestInterruptBuildProcess

Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
Message-Id: <20220316152812.3344634-1-bhalevy@scylladb.com>
2022-03-16 18:57:00 +02:00
Pavel Emelyanov
009c449cc3 replica: Push sharded<system_keyspace> down to parse_system_tables
The method needs to call merge_schema() that will need system keyspace
instance at hand. The parse_s._t. method is boot-time one, pushing the
main-local instance through it is fine

Signed-off-by: Pavel Emelyanov <xemul@scylladb.com>
2022-03-16 14:24:40 +03:00
Benny Halevy
ebbbf1e687 lister: move to utils
There's nothing specific to scylla in the lister
classes, they could (and maybe should) be part of
the seastar library.

Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
2022-02-28 12:36:03 +02:00
Raphael S. Carvalho
d208d33636 Fix quadratic behavior and compaction inefficiency when adding new files
With trigger_compaction() being called after each new sstable is added
to the set, we'll get quadratic behavior because strategies like
tiered will sort all the candidates before iterating on them, so
complexity is ~ ((N - 1) * N * logN).
Additionally, compaction may be inefficient as we're not waiting for
the sstable set to settle, so table may end up missing files that
would allow for more efficient jobs.
The latter isn't a big problem because we have reshape running in an
earlier phase, so data layout should satisfy the strategy almost.
Boot is not affected by these problems because it temporarily
disables auto compaction, so trigger_compaction() is a no-op for it.
So refresh remains as the only one affected.

Fixes #10046.

Signed-off-by: Raphael S. Carvalho <raphaelsc@scylladb.com>
Message-Id: <20220208151154.72606-1-raphaelsc@scylladb.com>
2022-02-09 09:27:07 +02:00
Avi Kivity
fcb8d040e8 treewide: use Software Package Data Exchange (SPDX) license identifiers
Instead of lengthy blurbs, switch to single-line, machine-readable
standardized (https://spdx.dev) license identifiers. The Linux kernel
switched long ago, so there is strong precedent.

Three cases are handled: AGPL-only, Apache-only, and dual licensed.
For the latter case, I chose (AGPL-3.0-or-later and Apache-2.0),
reasoning that our changes are extensive enough to apply our license.

The changes we applied mechanically with a script, except to
licenses/README.md.

Closes #9937
2022-01-18 12:15:18 +01:00
Raphael S. Carvalho
a144d30162 distributed_loader: postpone reshape of repair-originated sstables
SSTables created by repair will potentially not conform to the compaction strategy
layout goal. If node shuts down before off-strategy has a chance to
reshape those files, node will be forced to reshape them on restart. That
causes unexpected downtime. Turns out we can skip reshape of those files
on boot, and allow them to be reshaped after node becomes online, as if
the node never went down. Those files will go through same procedure as
files created by repair-based ops. They will be placed in maintenance set,
and be reshaped iteratively until ready for integration into the main set.

Fixes #9895.

Signed-off-by: Raphael S. Carvalho <raphaelsc@scylladb.com>
2022-01-12 13:14:31 -03:00
Avi Kivity
4392c20bd3 replica: move distributed_loader into replica module
distributed_loader is replica-side thing, so it belongs in the
replica module ("distributed" refers to its ability to load
sstables in their correct shards). So move it to the replica
module.
2022-01-10 15:25:28 +02:00