/* * Copyright (C) 2018-present ScyllaDB */ /* * SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0 */ #pragma once #include #include #include #include #include #include "seastarx.hh" #include "compaction/compaction_descriptor.hh" #include "db/system_keyspace.hh" #include "sstables/sstable_directory.hh" namespace seastar { class abort_source; } namespace replica { class database; class table; using column_family = table; } namespace db { class config; class system_keyspace; namespace view { enum class sstable_destination_decision; class view_builder; class view_building_worker; } } namespace sstables { class entry_descriptor; class foreign_sstable_open_info; } namespace service { class storage_proxy; } namespace locator { class effective_replication_map_factory; } class distributed_loader_for_tests; namespace replica { class table_populator; class global_table_ptr; class distributed_loader { friend class ::distributed_loader_for_tests; friend class table_populator; static future<> reshape(sharded& dir, sharded& db, compaction::reshape_mode mode, sstring ks_name, sstring table_name, compaction::compaction_sstable_creator_fn creator, std::function filter); static future<> reshard(sharded& dir, sharded& db, sstring ks_name, sstring table_name, compaction::compaction_sstable_creator_fn creator, compaction::owned_ranges_ptr owned_ranges_ptr = nullptr); static future<> process_sstable_dir(sharded& dir, sstables::sstable_directory::process_flags flags); static future<> lock_table(global_table_ptr&, sharded& dir); static future make_sstables_available(sstables::sstable_directory& dir, sharded& db, sharded& vb, sharded& vbw, db::view::sstable_destination_decision needs_view_update, sstring ks, sstring cf); static future<> populate_keyspace(sharded& db, sharded& sys_ks, keyspace& ks, sstring ks_name); static future>>> get_sstables_from(sharded& db, sstring ks, sstring cf, sstables::sstable_open_config cfg, noncopyable_function(global_table_ptr&, sharded&)> start_dir); public: static future<> init_system_keyspace(sharded&, sharded&, sharded&); static future<> init_non_system_keyspaces(sharded& db, sharded& proxy, sharded& sys_ks); // Scan sstables under upload directory. Return a vector with smp::count entries. // Each entry with index of idx should be accessed on shard idx only. // Each entry contains a vector of sstables for this shard. // The table UUID is returned too. static future>>> get_sstables_from_upload_dir(sharded& db, sstring ks, sstring cf, sstables::sstable_open_config cfg); static future>>> get_sstables_from_object_store(sharded& db, sstring ks, sstring cf, std::vector sstables, sstring endpoint, sstring type, sstring bucket, sstring prefix, sstables::sstable_open_config cfg, std::function = {}); static future<> process_upload_dir(sharded& db, sharded& vb, sharded& vbw, sstring ks_name, sstring cf_name, bool skip_cleanup, bool skip_reshape); }; }