diff --git a/src/client/dfs/mnt.c b/src/client/dfs/mnt.c index bcae212cf7f..ec0b5f8a282 100644 --- a/src/client/dfs/mnt.c +++ b/src/client/dfs/mnt.c @@ -12,6 +12,7 @@ #include #include #include +#include #include "dfs_internal.h" @@ -936,11 +937,31 @@ dfs_cont_put(dfs_t *dfs, daos_handle_t coh) int dfs_query(dfs_t *dfs, dfs_attr_t *attr) { + int rc; + if (dfs == NULL || !dfs->mounted || attr == NULL) return EINVAL; memcpy(attr, &dfs->attr, sizeof(dfs_attr_t)); + if (!dfs->attr.da_dir_oclass_id) { + rc = daos_obj_get_oclass(dfs->coh, DAOS_OT_MULTI_HASHED, 0, 0, + &attr->da_dir_oclass_id); + if (rc) { + D_ERROR("daos_obj_get_oclass() failed " DF_RC "\n", DP_RC(rc)); + return daos_der2errno(rc); + } + } + + if (!dfs->attr.da_file_oclass_id) { + rc = daos_obj_get_oclass(dfs->coh, DAOS_OT_ARRAY_BYTE, 0, 0, + &attr->da_file_oclass_id); + if (rc) { + D_ERROR("daos_obj_get_oclass() failed " DF_RC "\n", DP_RC(rc)); + return daos_der2errno(rc); + } + } + return 0; } diff --git a/src/tests/suite/dfs_unit_test.c b/src/tests/suite/dfs_unit_test.c index 6a537ffa048..41931fc1d1d 100644 --- a/src/tests/suite/dfs_unit_test.c +++ b/src/tests/suite/dfs_unit_test.c @@ -43,6 +43,8 @@ dfs_test_mount(void **state) daos_handle_t poh_tmp, coh_tmp; dfs_t *dfs; int rc; + dfs_attr_t attr = {0}; + daos_oclass_id_t exp_doc, exp_foc; if (arg->myrank != 0) return; @@ -84,6 +86,17 @@ dfs_test_mount(void **state) assert_rc_equal(rc, 0); rc = dfs_mount(arg->pool.poh, coh, O_RDWR, &dfs); assert_int_equal(rc, 0); + + /** check if dir/file oclass is what is expected*/ + rc = dfs_query(dfs, &attr); + assert_rc_equal(rc, 0); + rc = daos_obj_get_oclass(coh, DAOS_OT_MULTI_HASHED, 0, 0, &exp_doc); + assert_rc_equal(rc, 0); + assert_int_equal(attr.da_dir_oclass_id, exp_doc); + rc = daos_obj_get_oclass(coh, DAOS_OT_ARRAY_BYTE, 0, 0, &exp_foc); + assert_rc_equal(rc, 0); + assert_int_equal(attr.da_file_oclass_id, exp_foc); + rc = dfs_umount(dfs); assert_int_equal(rc, 0); rc = daos_cont_close(coh, NULL); diff --git a/utils/node_local_test.py b/utils/node_local_test.py index 18337560726..86499df76b6 100755 --- a/utils/node_local_test.py +++ b/utils/node_local_test.py @@ -2219,6 +2219,18 @@ def test_cont_list(self): @needs_dfuse_with_opt(caching_variants=[False]) def test_oclass(self): """Test container object class options""" + + container = create_cont(self.conf, self.pool, ctype="POSIX", label='oclass_test') + rc = run_daos_cmd(self.conf, + ['container', 'query', + self.pool.id(), container.id()], + show_stdout=True, use_json=True) + print(rc) + assert rc.returncode == 0 + assert rc.json['response'].get('dir_object_class') not in (None, 'UNKNOWN') + assert rc.json['response'].get('file_object_class') not in (None, 'UNKNOWN') + container.destroy() + container = create_cont(self.conf, self.pool, ctype="POSIX", label='oclass_test', oclass='S1', dir_oclass='S2', file_oclass='S4') rc = run_daos_cmd(self.conf,