Skip to content

Commit

Permalink
Merge branch 'google_26' into wangdi/google_26_ofi
Browse files Browse the repository at this point in the history
  • Loading branch information
wangdi1 committed Jan 22, 2025
2 parents 02a4cd4 + 8ddde42 commit e26fbad
Show file tree
Hide file tree
Showing 35 changed files with 762 additions and 127 deletions.
3 changes: 2 additions & 1 deletion Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
/* groovylint-disable DuplicateMapLiteral, DuplicateNumberLiteral */
/* groovylint-disable DuplicateStringLiteral, NestedBlockDepth, VariableName */
/* Copyright 2019-2024 Intel Corporation
/* Copyright 2025 Google LLC
* Copyright 2025 Hewlett Packard Enterprise Development LP
* All rights reserved.
*
Expand Down Expand Up @@ -861,7 +862,7 @@ pipeline {
}
steps {
job_step_update(
unitTest(timeout_time: 60,
unitTest(timeout_time: 180,
unstash_opt: true,
ignore_failure: true,
inst_repos: prRepos(),
Expand Down
1 change: 0 additions & 1 deletion site_scons/prereq_tools/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
import datetime
import errno
import json

# pylint: disable=too-many-lines
import os
import shutil
Expand Down
2 changes: 1 addition & 1 deletion src/client/dfs/SConscript
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ def scons():
libraries = ['daos_common', 'daos', 'uuid', 'gurt']

dfs_src = ['common.c', 'cont.c', 'dir.c', 'file.c', 'io.c', 'lookup.c', 'mnt.c', 'obj.c',
'pipeline.c', 'readdir.c', 'rename.c', 'xattr.c', 'dfs_sys.c']
'pipeline.c', 'readdir.c', 'rename.c', 'xattr.c', 'dfs_sys.c', 'metrics.c']
dfs = denv.d_library('dfs', dfs_src, LIBS=libraries)
denv.Install('$PREFIX/lib64/', dfs)

Expand Down
8 changes: 6 additions & 2 deletions src/client/dfs/common.c
Original file line number Diff line number Diff line change
Expand Up @@ -625,6 +625,8 @@ entry_stat(dfs_t *dfs, daos_handle_t th, daos_handle_t oh, const char *name, siz
stbuf->st_atim.tv_sec = stbuf->st_mtim.tv_sec;
stbuf->st_atim.tv_nsec = stbuf->st_mtim.tv_nsec;
}

DFS_OP_STAT_INCR(dfs, DOS_STAT);
return 0;
}

Expand Down Expand Up @@ -710,13 +712,14 @@ open_dir(dfs_t *dfs, dfs_obj_t *parent, int flags, daos_oclass_id_t cid, struct
D_ASSERT(rc == 0);
dir->d.chunk_size = entry->chunk_size;
dir->d.oclass = entry->oclass;
DFS_OP_STAT_INCR(dfs, DOS_MKDIR);
return 0;
}
}

/* Check if parent has the dirname entry */
rc = fetch_entry(dfs->layout_v, parent_oh, DAOS_TX_NONE, dir->name, len, false, &exists,
entry, 0, NULL, NULL, NULL);
rc = fetch_entry(dfs->layout_v, parent_oh, dfs->th, dir->name, len, false, &exists, entry,
0, NULL, NULL, NULL);
if (rc) {
D_DEBUG(DB_TRACE, "fetch_entry %s failed %d.\n", dir->name, rc);
return rc;
Expand All @@ -742,6 +745,7 @@ open_dir(dfs_t *dfs, dfs_obj_t *parent, int flags, daos_oclass_id_t cid, struct
oid_cp(&dir->oid, entry->oid);
dir->d.chunk_size = entry->chunk_size;
dir->d.oclass = entry->oclass;
DFS_OP_STAT_INCR(dfs, DOS_OPENDIR);
return 0;
}

Expand Down
4 changes: 2 additions & 2 deletions src/client/dfs/cont.c
Original file line number Diff line number Diff line change
Expand Up @@ -1240,14 +1240,14 @@ dfs_get_size_by_oid(dfs_t *dfs, daos_obj_id_t oid, daos_size_t chunk_size, daos_
return EINVAL;

rc =
daos_array_open_with_attr(dfs->coh, oid, DAOS_TX_NONE, DAOS_OO_RO, 1,
daos_array_open_with_attr(dfs->coh, oid, dfs->th, DAOS_OO_RO, 1,
chunk_size ? chunk_size : dfs->attr.da_chunk_size, &oh, NULL);
if (rc != 0) {
D_ERROR("daos_array_open() failed: " DF_RC "\n", DP_RC(rc));
return daos_der2errno(rc);
}

rc = daos_array_get_size(oh, DAOS_TX_NONE, size, NULL);
rc = daos_array_get_size(oh, dfs->th, size, NULL);
if (rc) {
daos_array_close(oh, NULL);
D_ERROR("daos_array_get_size() failed: " DF_RC "\n", DP_RC(rc));
Expand Down
10 changes: 10 additions & 0 deletions src/client/dfs/dfs_internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
#include <daos.h>
#include <daos_fs.h>

#include "metrics.h"

/** D-key name of SB metadata */
#define SB_DKEY "DFS_SB_METADATA"

Expand Down Expand Up @@ -105,6 +107,8 @@ typedef uint16_t dfs_layout_ver_t;

/** object struct that is instantiated for a DFS open object */
struct dfs_obj {
/** DFS mount point of object */
dfs_t *dfs;
/** DAOS object ID */
daos_obj_id_t oid;
/** DAOS object open handle */
Expand Down Expand Up @@ -161,6 +165,10 @@ struct dfs {
uint32_t coh_refcount;
/** The last oid.hi in the sequence */
uint32_t last_hi;
/** Transaction handle epoch. DAOS_EPOCH_MAX for DAOS_TX_NONE */
daos_epoch_t th_epoch;
/** Transaction handle */
daos_handle_t th;
/** Object ID reserved for this DFS (see oid_gen below) */
daos_obj_id_t oid;
/** superblock object OID */
Expand All @@ -184,6 +192,8 @@ struct dfs {
struct dfs_mnt_hdls *cont_hdl;
/** the root dir stat buf */
struct stat root_stbuf;
/** DFS top-level metrics */
struct dfs_metrics *metrics;
};

struct dfs_entry {
Expand Down
4 changes: 3 additions & 1 deletion src/client/dfs/dir.c
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ dfs_mkdir(dfs_t *dfs, dfs_obj_t *parent, const char *name, mode_t mode, daos_ocl
if (rc != 0)
return daos_der2errno(rc);

DFS_OP_STAT_INCR(dfs, DOS_MKDIR);
return rc;
}

Expand Down Expand Up @@ -220,6 +221,7 @@ dfs_remove(dfs_t *dfs, dfs_obj_t *parent, const char *name, bool force, daos_obj
if (oid)
oid_cp(oid, entry.oid);

DFS_OP_STAT_INCR(dfs, DOS_UNLINK);
out:
rc = check_tx(th, rc);
if (rc == ERESTART)
Expand Down Expand Up @@ -326,6 +328,6 @@ dfs_dir_anchor_set(dfs_obj_t *obj, const char name[], daos_anchor_t *anchor)
return rc;

d_iov_set(&dkey, (void *)name, len);
rc = daos_obj_key2anchor(obj->oh, DAOS_TX_NONE, &dkey, NULL, anchor, NULL);
rc = daos_obj_key2anchor(obj->oh, obj->dfs->th, &dkey, NULL, anchor, NULL);
return daos_der2errno(rc);
}
2 changes: 1 addition & 1 deletion src/client/dfs/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,6 @@ dfs_get_size(dfs_t *dfs, dfs_obj_t *obj, daos_size_t *size)
if (obj == NULL || !S_ISREG(obj->mode))
return EINVAL;

rc = daos_array_get_size(obj->oh, DAOS_TX_NONE, size, NULL);
rc = daos_array_get_size(obj->oh, dfs->th, size, NULL);
return daos_der2errno(rc);
}
50 changes: 45 additions & 5 deletions src/client/dfs/io.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,20 @@

#include "dfs_internal.h"

static void
dfs_update_file_metrics(dfs_t *dfs, daos_size_t read_bytes, daos_size_t write_bytes)
{
if (dfs == NULL || dfs->metrics == NULL)
return;

if (read_bytes > 0)
d_tm_inc_gauge(dfs->metrics->dm_read_bytes, read_bytes);
if (write_bytes > 0)
d_tm_inc_gauge(dfs->metrics->dm_write_bytes, write_bytes);
}

struct dfs_read_params {
dfs_t *dfs;
daos_size_t *read_size;
daos_array_iod_t arr_iod;
daos_range_t rg;
Expand All @@ -35,6 +48,8 @@ read_cb(tse_task_t *task, void *data)
D_GOTO(out, rc);
}

DFS_OP_STAT_INCR(params->dfs, DOS_READ);
dfs_update_file_metrics(params->dfs, params->arr_iod.arr_nr_read, 0);
*params->read_size = params->arr_iod.arr_nr_read;
out:
D_FREE(params);
Expand All @@ -61,6 +76,7 @@ dfs_read_int(dfs_t *dfs, dfs_obj_t *obj, daos_off_t off, dfs_iod_t *iod, d_sg_li
if (params == NULL)
D_GOTO(err_task, rc = -DER_NOMEM);

params->dfs = dfs;
params->read_size = read_size;

/** set array location */
Expand All @@ -76,7 +92,7 @@ dfs_read_int(dfs_t *dfs, dfs_obj_t *obj, daos_off_t off, dfs_iod_t *iod, d_sg_li

args = dc_task_get_args(task);
args->oh = obj->oh;
args->th = DAOS_TX_NONE;
args->th = dfs->th;
args->sgl = sgl;
args->iod = &params->arr_iod;

Expand All @@ -90,6 +106,7 @@ dfs_read_int(dfs_t *dfs, dfs_obj_t *obj, daos_off_t off, dfs_iod_t *iod, d_sg_li
* completion cb that frees params in this case, so we can just ignore the rc here.
*/
dc_task_schedule(task, true);

return 0;

err_params:
Expand Down Expand Up @@ -125,6 +142,7 @@ dfs_read(dfs_t *dfs, dfs_obj_t *obj, d_sg_list_t *sgl, daos_off_t off, daos_size
daos_event_launch(ev);
daos_event_complete(ev, 0);
}
DFS_OP_STAT_INCR(dfs, DOS_READ);
return 0;
}

Expand All @@ -140,13 +158,15 @@ dfs_read(dfs_t *dfs, dfs_obj_t *obj, d_sg_list_t *sgl, daos_off_t off, daos_size
rg.rg_idx = off;
iod.arr_rgs = &rg;

rc = daos_array_read(obj->oh, DAOS_TX_NONE, &iod, sgl, NULL);
rc = daos_array_read(obj->oh, dfs->th, &iod, sgl, NULL);
if (rc) {
D_ERROR("daos_array_read() failed, " DF_RC "\n", DP_RC(rc));
return daos_der2errno(rc);
}

DFS_OP_STAT_INCR(dfs, DOS_READ);
*read_size = iod.arr_nr_read;
dfs_update_file_metrics(dfs, iod.arr_nr_read, 0);
return 0;
}

Expand All @@ -173,6 +193,7 @@ dfs_readx(dfs_t *dfs, dfs_obj_t *obj, dfs_iod_t *iod, d_sg_list_t *sgl, daos_siz
daos_event_launch(ev);
daos_event_complete(ev, 0);
}
DFS_OP_STAT_INCR(dfs, DOS_READ);
return 0;
}

Expand All @@ -183,13 +204,15 @@ dfs_readx(dfs_t *dfs, dfs_obj_t *obj, dfs_iod_t *iod, d_sg_list_t *sgl, daos_siz
arr_iod.arr_nr = iod->iod_nr;
arr_iod.arr_rgs = iod->iod_rgs;

rc = daos_array_read(obj->oh, DAOS_TX_NONE, &arr_iod, sgl, ev);
rc = daos_array_read(obj->oh, dfs->th, &arr_iod, sgl, ev);
if (rc) {
D_ERROR("daos_array_read() failed (%d)\n", rc);
return daos_der2errno(rc);
}

DFS_OP_STAT_INCR(dfs, DOS_READ);
*read_size = arr_iod.arr_nr_read;
dfs_update_file_metrics(dfs, arr_iod.arr_nr_read, 0);
return 0;
}

Expand Down Expand Up @@ -223,6 +246,7 @@ dfs_write(dfs_t *dfs, dfs_obj_t *obj, d_sg_list_t *sgl, daos_off_t off, daos_eve
daos_event_launch(ev);
daos_event_complete(ev, 0);
}
DFS_OP_STAT_INCR(dfs, DOS_WRITE);
return 0;
}

Expand All @@ -238,8 +262,12 @@ dfs_write(dfs_t *dfs, dfs_obj_t *obj, d_sg_list_t *sgl, daos_off_t off, daos_eve
daos_event_errno_rc(ev);

rc = daos_array_write(obj->oh, DAOS_TX_NONE, &iod, sgl, ev);
if (rc)
if (rc == 0) {
DFS_OP_STAT_INCR(dfs, DOS_WRITE);
dfs_update_file_metrics(dfs, 0, buf_size);
} else {
D_ERROR("daos_array_write() failed, " DF_RC "\n", DP_RC(rc));
}

return daos_der2errno(rc);
}
Expand All @@ -248,6 +276,8 @@ int
dfs_writex(dfs_t *dfs, dfs_obj_t *obj, dfs_iod_t *iod, d_sg_list_t *sgl, daos_event_t *ev)
{
daos_array_iod_t arr_iod;
daos_size_t buf_size;
int i;
int rc;

if (dfs == NULL || !dfs->mounted)
Expand All @@ -266,6 +296,7 @@ dfs_writex(dfs_t *dfs, dfs_obj_t *obj, dfs_iod_t *iod, d_sg_list_t *sgl, daos_ev
daos_event_launch(ev);
daos_event_complete(ev, 0);
}
DFS_OP_STAT_INCR(dfs, DOS_WRITE);
return 0;
}

Expand All @@ -276,9 +307,18 @@ dfs_writex(dfs_t *dfs, dfs_obj_t *obj, dfs_iod_t *iod, d_sg_list_t *sgl, daos_ev
if (ev)
daos_event_errno_rc(ev);

buf_size = 0;
if (dfs->metrics != NULL && sgl != NULL)
for (i = 0; i < sgl->sg_nr; i++)
buf_size += sgl->sg_iovs[i].iov_len;

rc = daos_array_write(obj->oh, DAOS_TX_NONE, &arr_iod, sgl, ev);
if (rc)
if (rc == 0) {
DFS_OP_STAT_INCR(dfs, DOS_WRITE);
dfs_update_file_metrics(dfs, 0, buf_size);
} else {
D_ERROR("daos_array_write() failed (%d)\n", rc);
}

return daos_der2errno(rc);
}
Loading

0 comments on commit e26fbad

Please sign in to comment.