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:
Nadav Har'El
2019-01-07 16:22:57 +02:00
committed by Avi Kivity
parent 772c4b5fdc
commit 515399ce17
10 changed files with 18 additions and 6 deletions

View File

@@ -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

View File

@@ -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." \
) \

View File

@@ -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'])

View File

@@ -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

View File

@@ -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/

View File

@@ -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.

View File

@@ -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

View File

@@ -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());

View File

@@ -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) {

View File

@@ -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");