From 067aefd6a2e189ec35b943b7e8d04176d194af35 Mon Sep 17 00:00:00 2001 From: Jun Nemoto <35618893+jnmt@users.noreply.github.com> Date: Mon, 4 Aug 2025 13:12:48 +0900 Subject: [PATCH] Disable the coordinator write omission in ScalarDB (#203) --- .../scalar/dl/ledger/config/LedgerConfig.java | 8 +++++ .../dl/ledger/config/LedgerConfigTest.java | 34 +++++++++++++++++++ 2 files changed, 42 insertions(+) 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(); + } }