void downgradeTransaction(@NotNull final TransactionBase txn) { (txn.isReadonly() ? roTxnDispatcher : txnDispatcher).downgradeTransaction(txn); }
void acquireTransaction(@NotNull final TransactionBase txn) { checkIfTransactionCreatedAgainstThis(txn); (txn.isReadonly() ? roTxnDispatcher : txnDispatcher).acquireTransaction(txn, this); }
void releaseTransaction(@NotNull final TransactionBase txn) { checkIfTransactionCreatedAgainstThis(txn); (txn.isReadonly() ? roTxnDispatcher : txnDispatcher).releaseTransaction(txn); }
@Override public void beforeSettingChanged(@NotNull String key, @NotNull Object value, @NotNull Map<String, Object> context) { if (key.equals(EnvironmentConfig.ENV_IS_READONLY)) { if (log.getConfig().getReaderWriterProvider().isReadonly()) { throw new InvalidSettingException("Can't modify read-only state in run time since DataReaderWriterProvider is read-only"); } if (Boolean.TRUE.equals(value)) { suspendGC(); final TransactionBase txn = beginTransaction(); try { if (!txn.isReadonly()) { gc.getUtilizationProfile().forceSave(txn); txn.setCommitHook(new Runnable() { @Override public void run() { EnvironmentConfig.suppressConfigChangeListenersForThread(); ec.setEnvIsReadonly(true); EnvironmentConfig.resumeConfigChangeListenersForThread(); } }); ((ReadWriteTransaction) txn).forceFlush(); } } finally { txn.abort(); } } } }
if (txn.isReadonly() && ec.getEnvReadonlyEmptyStores()) { return createTemporaryEmptyStore(name);