+import json
+
from teuthology.orchestra.run import CommandFailedError
from unittest import case
if overwrites:
self.fs.mon_manager.raw_cluster_cmd('osd', 'pool', 'set', n+"-data", 'allow_ec_overwrites', 'true')
+ def _check_pool_application_metadata_key_value(self, pool, app, key, value):
+ output = self.fs.mon_manager.raw_cluster_cmd(
+ 'osd', 'pool', 'application', 'get', pool, app, key)
+ self.assertEqual(str(output.strip()), value)
+
def test_add_data_pool_root(self):
"""
That a new data pool can be added and used for the root directory.
p = self.fs.add_data_pool("foo")
self.fs.set_dir_layout(self.mount_a, ".", FileLayout(pool=p))
+ def test_add_data_pool_application_metadata(self):
+ """
+ That the application metadata set on a newly added data pool is as expected.
+ """
+ pool_name = "foo"
+ mon_cmd = self.fs.mon_manager.raw_cluster_cmd
+ mon_cmd('osd', 'pool', 'create', pool_name, str(self.fs.pgs_per_fs_pool))
+ # Check whether https://tracker.ceph.com/issues/43061 is fixed
+ mon_cmd('osd', 'pool', 'application', 'enable', pool_name, 'cephfs')
+ self.fs.add_data_pool(pool_name, create=False)
+ self._check_pool_application_metadata_key_value(
+ pool_name, 'cephfs', 'data', self.fs.name)
+
def test_add_data_pool_subdir(self):
"""
That a new data pool can be added and used for a sub-directory.
void OSDMonitor::do_application_enable(int64_t pool_id,
const std::string &app_name,
const std::string &app_key,
- const std::string &app_value)
+ const std::string &app_value,
+ bool force)
{
ceph_assert(paxos->is_plugged() && is_writeable());
if (app_key.empty()) {
p.application_metadata.insert({app_name, {}});
} else {
- p.application_metadata.insert({app_name, {{app_key, app_value}}});
+ if (force) {
+ p.application_metadata[app_name][app_key] = app_value;
+ } else {
+ p.application_metadata.insert({app_name, {{app_key, app_value}}});
+ }
}
p.last_change = pending_inc.epoch;
pending_inc.new_pools[pool_id] = p;
void do_application_enable(int64_t pool_id, const std::string &app_name,
const std::string &app_key="",
- const std::string &app_value="");
+ const std::string &app_value="",
+ bool force=false);
void do_set_pool_opt(int64_t pool_id, pool_opts_t::key_t opt,
pool_opts_t::value_t);