Commit 779f54cc authored by Julius Athenstaedt's avatar Julius Athenstaedt
Browse files

mtime and ctime update on rocksdb merge

parent f8128050
Loading
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -181,6 +181,10 @@ MetadataMergeOperator::FullMergeV2(const MergeOperationInput& merge_in,
        auto operand_id = MergeOperand::get_id(serialized_op);
        auto parameters = MergeOperand::get_params(serialized_op);

        if constexpr(gkfs::config::metadata::use_mtime) {
            md.mtime(std::time(nullptr));
        }

        if(operand_id == OperandID::increase_size) {
            auto op = IncreaseSizeOperand(parameters);
            if(op.append()) {
@@ -199,6 +203,9 @@ MetadataMergeOperator::FullMergeV2(const MergeOperationInput& merge_in,
            assert(op.size() < fsize); // we assume no concurrency here
            fsize = op.size();
        } else if(operand_id == OperandID::create) {
            if constexpr(gkfs::config::metadata::use_ctime) {
                md.ctime(std::time(nullptr));
            }
            continue;
        } else {
            throw ::runtime_error("Unrecognized merge operand ID: " +
+13 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import sh
import sys
import pytest
from harness.logger import logger
from datetime import datetime

nonexisting = "nonexisting"

@@ -52,6 +53,11 @@ def test_statx(gkfs_daemon, gkfs_client):
    file_a = topdir / "file_a"
    subdir_a  = dir_a / "subdir_a"

    # creation timestamp
    # it is only checked if mtime and ctime are greater than
    # the creation timestamp due to inprecesion between test and daemon
    ts = int(datetime.timestamp(datetime.now()))

    # create topdir
    ret = gkfs_client.mkdir(
            topdir,
@@ -91,6 +97,13 @@ def test_statx(gkfs_daemon, gkfs_client):
    assert ret.retval == 0
    assert (ret.statbuf.stx_size == 2)

    # if greater zero, it is activated in config.hpp
    if ret.statbuf.stx_mtime.tv_sec > 0:
        assert (ret.statbuf.stx_mtime.tv_sec > ts)

    if ret.statbuf.stx_ctime.tv_sec > 0:
        assert (ret.statbuf.stx_ctime.tv_sec > ts)


    return