问题描述
如何检查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分钟,在同一位置上方打开环境。