diff --git a/conf/scylla.yaml b/conf/scylla.yaml index 790a40e819..05218f00c2 100644 --- a/conf/scylla.yaml +++ b/conf/scylla.yaml @@ -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 diff --git a/db/config.hh b/db/config.hh index abc2cca039..5222430892 100644 --- a/db/config.hh +++ b/db/config.hh @@ -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." \ ) \ diff --git a/dist/common/scripts/scylla_util.py b/dist/common/scripts/scylla_util.py index 69d821c706..8d6764c3dc 100644 --- a/dist/common/scripts/scylla_util.py +++ b/dist/common/scripts/scylla_util.py @@ -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']) diff --git a/dist/debian/debian/scylla-server.dirs b/dist/debian/debian/scylla-server.dirs index 10b35cbfed..942915e90f 100644 --- a/dist/debian/debian/scylla-server.dirs +++ b/dist/debian/debian/scylla-server.dirs @@ -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 diff --git a/dist/redhat/scylla.spec.mustache b/dist/redhat/scylla.spec.mustache index 55e49bd05e..a7e564e4bc 100644 --- a/dist/redhat/scylla.spec.mustache +++ b/dist/redhat/scylla.spec.mustache @@ -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/ diff --git a/docs/docker-hub.md b/docs/docker-hub.md index 73d939634c..0fa34586ec 100644 --- a/docs/docker-hub.md +++ b/docs/docker-hub.md @@ -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. diff --git a/install.sh b/install.sh index a173845d51..a4d9f48f73 100755 --- a/install.sh +++ b/install.sh @@ -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 diff --git a/main.cc b/main.cc index 4925b279b6..1500f7c11e 100644 --- a/main.cc +++ b/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()); diff --git a/service/storage_proxy.cc b/service/storage_proxy.cc index 609a6e2233..8fb24a28dc 100644 --- a/service/storage_proxy.cc +++ b/service/storage_proxy.cc @@ -772,7 +772,7 @@ storage_proxy::storage_proxy(distributed& 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) { diff --git a/tests/cql_test_env.cc b/tests/cql_test_env.cc index 129efc940c..f42432a11d 100644 --- a/tests/cql_test_env.cc +++ b/tests/cql_test_env.cc @@ -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");