检查Xodus环境中的活动事务?

问题描述

如何检查Xodus环境中是否存在活动交易?

所以,如果您有这个:

Environment environment = environmentCache.get(databasePath);

您如何知道在这种环境下是否有活跃的交易?

解决方法

要在负载下安全关闭环境,请使用以下代码:

// on init stage:
env.getEnvironmentConfig().setEnvCloseForcedly(true);

// method that closes environment:
env.executeTransactionSafeTask(() -> {
    env.executeInExclusiveTransaction(t -> {
        env.close();
    });
});

将代码提取为test。这种关闭环境的方法不是立即执行的,它会等到当前启动的事务完成后再在独占事务中关闭环境,以确保不能并行启动其他写入事务。仍然可以存在并行的只读事务,但是显然可以忽略它们。

将代码公开为远程方法,以远程控制Environment。调用该方法后,远程端可以立即尝试以相当长的锁定超时(EnvironmentConfig.setLogLockTimeout(..)),例如1分钟,在同一位置上方打开环境。