From af0ed429fe6f72c207097d320373e8a0d7f883ce Mon Sep 17 00:00:00 2001 From: Benjamin Graf Date: Thu, 23 May 2024 16:17:43 +0200 Subject: [PATCH] Compute XA recovery nodes from node identifier by default --- .../core/properties/NarayanaProperties.java | 2 +- .../NarayanaPropertiesInitializer.java | 3 ++ .../NarayanaPropertiesInitializerTests.java | 28 +++++++++++-------- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/narayana-spring-boot-core/src/main/java/dev/snowdrop/boot/narayana/core/properties/NarayanaProperties.java b/narayana-spring-boot-core/src/main/java/dev/snowdrop/boot/narayana/core/properties/NarayanaProperties.java index 42959330..40f8f72c 100644 --- a/narayana-spring-boot-core/src/main/java/dev/snowdrop/boot/narayana/core/properties/NarayanaProperties.java +++ b/narayana-spring-boot-core/src/main/java/dev/snowdrop/boot/narayana/core/properties/NarayanaProperties.java @@ -128,7 +128,7 @@ public class NarayanaProperties { /** * XA recovery nodes. */ - private List xaRecoveryNodes = List.of("1"); + private List xaRecoveryNodes = List.of(); public String getLogDir() { return this.logDir; diff --git a/narayana-spring-boot-core/src/main/java/dev/snowdrop/boot/narayana/core/properties/NarayanaPropertiesInitializer.java b/narayana-spring-boot-core/src/main/java/dev/snowdrop/boot/narayana/core/properties/NarayanaPropertiesInitializer.java index 5d17cc1c..9b535812 100644 --- a/narayana-spring-boot-core/src/main/java/dev/snowdrop/boot/narayana/core/properties/NarayanaPropertiesInitializer.java +++ b/narayana-spring-boot-core/src/main/java/dev/snowdrop/boot/narayana/core/properties/NarayanaPropertiesInitializer.java @@ -67,6 +67,9 @@ private void setNodeIdentifier(String nodeIdentifier) { } private void setXARecoveryNodes(List xaRecoveryNodes) { + if (xaRecoveryNodes.isEmpty()) { + xaRecoveryNodes = List.of(getPopulator(CoreEnvironmentBean.class).getNodeIdentifier()); + } getPopulator(JTAEnvironmentBean.class).setXaRecoveryNodes(xaRecoveryNodes); } diff --git a/narayana-spring-boot-core/src/test/java/dev/snowdrop/boot/narayana/core/properties/NarayanaPropertiesInitializerTests.java b/narayana-spring-boot-core/src/test/java/dev/snowdrop/boot/narayana/core/properties/NarayanaPropertiesInitializerTests.java index f793f3d8..c32fb8ea 100644 --- a/narayana-spring-boot-core/src/test/java/dev/snowdrop/boot/narayana/core/properties/NarayanaPropertiesInitializerTests.java +++ b/narayana-spring-boot-core/src/test/java/dev/snowdrop/boot/narayana/core/properties/NarayanaPropertiesInitializerTests.java @@ -17,7 +17,6 @@ package dev.snowdrop.boot.narayana.core.properties; import java.lang.reflect.Field; -import java.util.Arrays; import java.util.List; import java.util.Map; @@ -56,6 +55,8 @@ void shouldSetDefaultProperties() { assertThat(BeanPopulator.getDefaultInstance(CoreEnvironmentBean.class) .getNodeIdentifier()).isEqualTo("1"); + assertThat(BeanPopulator.getDefaultInstance(JTAEnvironmentBean.class) + .getXaRecoveryNodes()).containsOnly("1"); assertThat(BeanPopulator.getDefaultInstance(ObjectStoreEnvironmentBean.class) .getObjectStoreDir()).contains("ObjectStore"); assertThat(BeanPopulator @@ -75,7 +76,7 @@ void shouldSetDefaultProperties() { assertThat(BeanPopulator.getDefaultInstance(RecoveryEnvironmentBean.class) .getExpiryScanInterval()).isEqualTo(12); - List xaResourceOrphanFilters = Arrays.asList( + List xaResourceOrphanFilters = List.of( "com.arjuna.ats.internal.jta.recovery.arjunacore.JTATransactionLogXAResourceOrphanFilter", "com.arjuna.ats.internal.jta.recovery.arjunacore.JTANodeNameXAResourceOrphanFilter", "com.arjuna.ats.internal.jta.recovery.arjunacore.JTAActionStatusServiceXAResourceOrphanFilter"); @@ -95,7 +96,7 @@ void shouldSetDefaultProperties() { .getCommitMarkableResourceJNDINames()) .isEmpty(); - List recoveryModules = Arrays.asList( + List recoveryModules = List.of( "com.arjuna.ats.internal.jta.recovery.arjunacore.CommitMarkableResourceRecordRecoveryModule", "com.arjuna.ats.internal.arjuna.recovery.AtomicActionRecoveryModule", "com.arjuna.ats.internal.txoj.recovery.TORecoveryModule", @@ -103,7 +104,7 @@ void shouldSetDefaultProperties() { assertThat(BeanPopulator.getDefaultInstance(RecoveryEnvironmentBean.class) .getRecoveryModuleClassNames()).isEqualTo(recoveryModules); - List expiryScanners = Arrays.asList( + List expiryScanners = List.of( "com.arjuna.ats.internal.arjuna.recovery.ExpiredTransactionStatusManagerScanner"); assertThat(BeanPopulator.getDefaultInstance(RecoveryEnvironmentBean.class) .getExpiryScannerClassNames()).isEqualTo(expiryScanners); @@ -115,22 +116,25 @@ void shouldSetDefaultProperties() { @Test void shouldSetModifiedProperties() { NarayanaProperties narayanaProperties = new NarayanaProperties(); - narayanaProperties.setTransactionManagerId("test-id"); + narayanaProperties.setTransactionManagerId("test-id-1"); + narayanaProperties.setXaRecoveryNodes(List.of("test-id-1", "test-id-2")); narayanaProperties.setLogDir("test-dir"); narayanaProperties.setDefaultTimeout(1); narayanaProperties.setPeriodicRecoveryPeriod(2); narayanaProperties.setRecoveryBackoffPeriod(3); narayanaProperties.setOnePhaseCommit(false); - narayanaProperties.setXaResourceOrphanFilters(Arrays.asList("test-filter-1", "test-filter-2")); - narayanaProperties.setRecoveryModules(Arrays.asList("test-module-1", "test-module-2")); - narayanaProperties.setExpiryScanners(Arrays.asList("test-scanner-1", "test-scanner-2")); + narayanaProperties.setXaResourceOrphanFilters(List.of("test-filter-1", "test-filter-2")); + narayanaProperties.setRecoveryModules(List.of("test-module-1", "test-module-2")); + narayanaProperties.setExpiryScanners(List.of("test-scanner-1", "test-scanner-2")); NarayanaPropertiesInitializer narayanaPropertiesInitializer = new NarayanaPropertiesInitializer(narayanaProperties); narayanaPropertiesInitializer.afterPropertiesSet(); assertThat(BeanPopulator.getDefaultInstance(CoreEnvironmentBean.class) - .getNodeIdentifier()).isEqualTo("test-id"); + .getNodeIdentifier()).isEqualTo("test-id-1"); + assertThat(BeanPopulator.getDefaultInstance(JTAEnvironmentBean.class) + .getXaRecoveryNodes()).containsExactly("test-id-1", "test-id-2"); assertThat(BeanPopulator.getDefaultInstance(ObjectStoreEnvironmentBean.class) .getObjectStoreDir()).isEqualTo("test-dir"); assertThat(BeanPopulator @@ -149,12 +153,12 @@ void shouldSetModifiedProperties() { .getRecoveryBackoffPeriod()).isEqualTo(3); assertThat(BeanPopulator.getDefaultInstance(JTAEnvironmentBean.class) .getXaResourceOrphanFilterClassNames()) - .isEqualTo(Arrays.asList("test-filter-1", "test-filter-2")); + .isEqualTo(List.of("test-filter-1", "test-filter-2")); assertThat(BeanPopulator.getDefaultInstance(RecoveryEnvironmentBean.class) .getRecoveryModuleClassNames()) - .isEqualTo(Arrays.asList("test-module-1", "test-module-2")); + .isEqualTo(List.of("test-module-1", "test-module-2")); assertThat(BeanPopulator.getDefaultInstance(RecoveryEnvironmentBean.class) .getExpiryScannerClassNames()) - .isEqualTo(Arrays.asList("test-scanner-1", "test-scanner-2")); + .isEqualTo(List.of("test-scanner-1", "test-scanner-2")); } }