mirror of
https://github.com/scylladb/scylladb.git
synced 2026-05-12 19:02:12 +00:00
materialized views: move hints to top-level directory
While we keep ordinary hints in a directory parallel to the data directory,
we decided to keep the materialized view hints in a subdirectory of the data
directory, named "view_pending_updates". But during boot, we expect all
subdirectories of data/ to be keyspace names, and when we notice this one,
we print a warning:
WARN: database - Skipping undefined keyspace: view_pending_updates
This spurious warning annoyed users. But moreover, we could have bigger
problems if the user actually tries to create a keyspace with that name.
So in this patch, we move the view hints to a separate top-level directory,
which defaults to /var/lib/scylla/view_hints, but as usual can be configured.
Signed-off-by: Nadav Har'El <nyh@scylladb.com>
Message-Id: <20190107142257.16342-1-nyh@scylladb.com>
(cherry picked from commit da090a5458)
This commit is contained in:
@@ -242,6 +242,9 @@ batch_size_fail_threshold_in_kb: 50
|
||||
|
||||
# The directory where hints files are stored if hinted handoff is enabled.
|
||||
# hints_directory: /var/lib/scylla/hints
|
||||
|
||||
# The directory where hints files are stored for materialized-view updates
|
||||
# view_hints_directory: /var/lib/scylla/view_hints
|
||||
|
||||
# See http://wiki.apache.org/cassandra/HintedHandoff
|
||||
# May either be "true" or "false" to enable globally, or contain a list
|
||||
|
||||
@@ -155,6 +155,9 @@ public:
|
||||
val(hints_directory, sstring, "/var/lib/scylla/hints", Used, \
|
||||
"The directory where hints files are stored if hinted handoff is enabled." \
|
||||
) \
|
||||
val(view_hints_directory, sstring, "/var/lib/scylla/view_hints", Used, \
|
||||
"The directory where materialized-view updates are stored while a view replica is unreachable." \
|
||||
) \
|
||||
val(saved_caches_directory, sstring, "/var/lib/scylla/saved_caches", Unused, \
|
||||
"The directory location where table key and row caches are stored." \
|
||||
) \
|
||||
|
||||
2
dist/common/scripts/scylla_util.py
vendored
2
dist/common/scripts/scylla_util.py
vendored
@@ -401,6 +401,8 @@ def get_scylla_dirs():
|
||||
raise Exception("{}: at least one directory has to be set in 'data_file_directory'".format(scylla_yaml_name))
|
||||
if 'commitlog_directory' not in y or not y['commitlog_directory']:
|
||||
raise Exception("{}: 'commitlog_directory' has to be set".format(scylla_yaml_name))
|
||||
if 'view_hints_directory' not in y or not y['view_hints_directory']:
|
||||
raise Exception("{}: 'view_hints_directory' has to be set".format(scylla_yaml_name))
|
||||
|
||||
dirs = []
|
||||
dirs.extend(y['data_file_directories'])
|
||||
|
||||
1
dist/debian/debian/scylla-server.dirs
vendored
1
dist/debian/debian/scylla-server.dirs
vendored
@@ -4,5 +4,6 @@ var/lib/scylla
|
||||
var/lib/scylla/data
|
||||
var/lib/scylla/commitlog
|
||||
var/lib/scylla/hints
|
||||
var/lib/scylla/view_hints
|
||||
var/lib/scylla/coredump
|
||||
var/lib/scylla-housekeeping
|
||||
|
||||
1
dist/redhat/scylla.spec.mustache
vendored
1
dist/redhat/scylla.spec.mustache
vendored
@@ -208,6 +208,7 @@ rm -rf $RPM_BUILD_ROOT
|
||||
%attr(0755,scylla,scylla) %dir %{_sharedstatedir}/scylla/data
|
||||
%attr(0755,scylla,scylla) %dir %{_sharedstatedir}/scylla/commitlog
|
||||
%attr(0755,scylla,scylla) %dir %{_sharedstatedir}/scylla/hints
|
||||
%attr(0755,scylla,scylla) %dir %{_sharedstatedir}/scylla/view_hints
|
||||
%attr(0755,scylla,scylla) %dir %{_sharedstatedir}/scylla/coredump
|
||||
%attr(0755,scylla,scylla) %dir %{_sharedstatedir}/scylla-housekeeping
|
||||
%ghost /etc/systemd/system/scylla-server.service.d/
|
||||
|
||||
@@ -66,7 +66,7 @@ You can use Docker volumes to improve performance of Scylla.
|
||||
Create a Scylla data directory ``/var/lib/scylla`` on the host, which is used by Scylla container to store all data:
|
||||
|
||||
```console
|
||||
$ sudo mkdir -p /var/lib/scylla/data /var/lib/scylla/commitlog /var/lib/scylla/hints
|
||||
$ sudo mkdir -p /var/lib/scylla/data /var/lib/scylla/commitlog /var/lib/scylla/hints /var/lib/scylla/view_hints
|
||||
```
|
||||
|
||||
Launch Scylla using Docker's ``--volume`` command line option to mount the created host directory as a data volume in the container and disable Scylla's developer mode to run I/O tuning before starting up the Scylla node.
|
||||
|
||||
@@ -115,6 +115,7 @@ install -m755 -d "$root"/var/lib/scylla/
|
||||
install -m755 -d "$root"/var/lib/scylla/data
|
||||
install -m755 -d "$root"/var/lib/scylla/commitlog
|
||||
install -m755 -d "$root"/var/lib/scylla/hints
|
||||
install -m755 -d "$root"/var/lib/scylla/view_hints
|
||||
install -m755 -d "$root"/var/lib/scylla/coredump
|
||||
install -m755 -d "$root"/var/lib/scylla-housekeeping
|
||||
install -m755 -d "$rprefix"/lib/scylla/swagger-ui
|
||||
|
||||
4
main.cc
4
main.cc
@@ -550,7 +550,7 @@ int main(int ac, char** av) {
|
||||
directories.insert(std::move(shard_dir));
|
||||
}
|
||||
}
|
||||
boost::filesystem::path view_pending_updates_base_dir = boost::filesystem::path(db.local().get_config().data_file_directories()[0]) / "view_pending_updates";
|
||||
boost::filesystem::path view_pending_updates_base_dir = boost::filesystem::path(db.local().get_config().view_hints_directory());
|
||||
sstring view_pending_updates_base_dir_str = view_pending_updates_base_dir.native();
|
||||
dirs.touch_and_lock(view_pending_updates_base_dir_str).get();
|
||||
directories.insert(view_pending_updates_base_dir_str);
|
||||
@@ -732,7 +732,7 @@ int main(int ac, char** av) {
|
||||
if (hinted_handoff_enabled) {
|
||||
db::hints::manager::rebalance(cfg->hints_directory()).get();
|
||||
}
|
||||
db::hints::manager::rebalance(cfg->data_file_directories()[0] + "/view_pending_updates").get();
|
||||
db::hints::manager::rebalance(cfg->view_hints_directory()).get();
|
||||
|
||||
proxy.invoke_on_all([] (service::storage_proxy& local_proxy) {
|
||||
local_proxy.start_hints_manager(gms::get_local_gossiper().shared_from_this(), service::get_local_storage_service().shared_from_this());
|
||||
|
||||
@@ -772,7 +772,7 @@ storage_proxy::storage_proxy(distributed<database>& db, storage_proxy::config cf
|
||||
: _db(db)
|
||||
, _next_response_id(std::chrono::system_clock::now().time_since_epoch()/1ms)
|
||||
, _hints_resource_manager(cfg.available_memory / 10)
|
||||
, _hints_for_views_manager(_db.local().get_config().data_file_directories()[0] + "/view_pending_updates", {}, _db.local().get_config().max_hint_window_in_ms(), _hints_resource_manager, _db)
|
||||
, _hints_for_views_manager(_db.local().get_config().view_hints_directory(), {}, _db.local().get_config().max_hint_window_in_ms(), _hints_resource_manager, _db)
|
||||
, _background_write_throttle_threahsold(cfg.available_memory / 10)
|
||||
, _mutate_stage{"storage_proxy_mutate", &storage_proxy::do_mutate}
|
||||
, _max_view_update_backlog(max_view_update_backlog) {
|
||||
|
||||
@@ -319,6 +319,7 @@ public:
|
||||
}
|
||||
cfg->commitlog_directory() = data_dir.path + "/commitlog.dir";
|
||||
cfg->hints_directory() = data_dir.path + "/hints.dir";
|
||||
cfg->view_hints_directory() = data_dir.path + "/view_hints.dir";
|
||||
cfg->num_tokens() = 256;
|
||||
cfg->ring_delay_ms() = 500;
|
||||
cfg->experimental() = true;
|
||||
@@ -326,10 +327,10 @@ public:
|
||||
boost::filesystem::create_directories((data_dir.path + "/system").c_str());
|
||||
boost::filesystem::create_directories(cfg->commitlog_directory().c_str());
|
||||
boost::filesystem::create_directories(cfg->hints_directory().c_str());
|
||||
boost::filesystem::create_directories((data_dir.path + "/view_pending_updates").c_str());
|
||||
boost::filesystem::create_directories(cfg->view_hints_directory().c_str());
|
||||
for (unsigned i = 0; i < smp::count; ++i) {
|
||||
boost::filesystem::create_directories((cfg->hints_directory() + "/" + std::to_string(i)).c_str());
|
||||
boost::filesystem::create_directories((data_dir.path + "/view_pending_updates/" + std::to_string(i)).c_str());
|
||||
boost::filesystem::create_directories((cfg->view_hints_directory() + "/" + std::to_string(i)).c_str());
|
||||
}
|
||||
|
||||
const gms::inet_address listen("127.0.0.1");
|
||||
|
||||
Reference in New Issue
Block a user