diff --git a/ledger/src/main/java/com/scalar/dl/ledger/config/LedgerConfig.java b/ledger/src/main/java/com/scalar/dl/ledger/config/LedgerConfig.java index a139f300..9c6eede0 100644 --- a/ledger/src/main/java/com/scalar/dl/ledger/config/LedgerConfig.java +++ b/ledger/src/main/java/com/scalar/dl/ledger/config/LedgerConfig.java @@ -519,6 +519,14 @@ private void validateTransactionManager() { LedgerError.CONFIG_GROUP_COMMIT_MUST_BE_DISABLED.buildMessage( ConsensusCommitConfig.COORDINATOR_GROUP_COMMIT_ENABLED)); } + if (consensusCommitConfig.isCoordinatorWriteOmissionOnReadOnlyEnabled()) { + LOGGER.warn( + "Disabling the unsupported option '{}' because Coordinator writes are always necessary for ScalarDL", + ConsensusCommitConfig.COORDINATOR_WRITE_OMISSION_ON_READ_ONLY_ENABLED); + props.setProperty( + ConsensusCommitConfig.COORDINATOR_WRITE_OMISSION_ON_READ_ONLY_ENABLED, + Boolean.toString(false)); + } } } diff --git a/ledger/src/test/java/com/scalar/dl/ledger/config/LedgerConfigTest.java b/ledger/src/test/java/com/scalar/dl/ledger/config/LedgerConfigTest.java index f10df9c1..86a93bff 100644 --- a/ledger/src/test/java/com/scalar/dl/ledger/config/LedgerConfigTest.java +++ b/ledger/src/test/java/com/scalar/dl/ledger/config/LedgerConfigTest.java @@ -581,4 +581,38 @@ public void constructor_HmacEnabledButCipherKeyNotGiven_ShouldThrowIllegalArgume // Assert assertThat(thrown).isExactlyInstanceOf(IllegalArgumentException.class); } + + @Test + public void + constructor_ConsensusCommitWithCoordinatorWriteOmissionDisabledSpecified_ShouldConstructProperly() { + // Arrange + props.setProperty(DatabaseConfig.TRANSACTION_MANAGER, "consensus-commit"); + props.setProperty( + ConsensusCommitConfig.COORDINATOR_WRITE_OMISSION_ON_READ_ONLY_ENABLED, "false"); + + // Act + LedgerConfig config = new LedgerConfig(props); + ConsensusCommitConfig consensusCommitConfig = + new ConsensusCommitConfig(config.getDatabaseConfig()); + + // Assert + assertThat(consensusCommitConfig.isCoordinatorWriteOmissionOnReadOnlyEnabled()).isFalse(); + } + + @Test + public void + constructor_ConsensusCommitWithCoordinatorWriteOmissionEnabledSpecified_ShouldConstructProperlyWithDisablingIt() { + // Arrange + props.setProperty(DatabaseConfig.TRANSACTION_MANAGER, "consensus-commit"); + props.setProperty( + ConsensusCommitConfig.COORDINATOR_WRITE_OMISSION_ON_READ_ONLY_ENABLED, "true"); + + // Act + LedgerConfig config = new LedgerConfig(props); + ConsensusCommitConfig consensusCommitConfig = + new ConsensusCommitConfig(config.getDatabaseConfig()); + + // Assert + assertThat(consensusCommitConfig.isCoordinatorWriteOmissionOnReadOnlyEnabled()).isFalse(); + } }