You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2022/05/26 08:25:38 UTC
[shardingsphere] branch master updated: fix can not update xa recovery id (#17968)
This is an automated email from the ASF dual-hosted git repository.
zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new ee674b01c45 fix can not update xa recovery id (#17968)
ee674b01c45 is described below
commit ee674b01c45cb05256f0c1300f7a0d8c30a302c4
Author: Haoran Meng <me...@gmail.com>
AuthorDate: Thu May 26 16:25:32 2022 +0800
fix can not update xa recovery id (#17968)
---
.../apache/shardingsphere/infra/instance/InstanceContext.java | 10 ++++++++--
.../metadata/persist/service/ComputeNodePersistService.java | 1 +
.../persist/service/ComputeNodePersistServiceTest.java | 1 +
.../cluster/coordinator/ClusterContextManagerCoordinator.java | 3 +--
4 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/instance/InstanceContext.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/instance/InstanceContext.java
index 737e436ed34..3334a29eba5 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/instance/InstanceContext.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/instance/InstanceContext.java
@@ -104,12 +104,18 @@ public final class InstanceContext {
/**
* Update instance XA recovery id.
*
+ * @param instanceId instance id
* @param xaRecoveryId XA recovery id
+ * @return true if current instance updated, else false
*/
- public void updateXaRecoveryId(final String xaRecoveryId) {
- if (!Objects.equals(xaRecoveryId, instance.getXaRecoveryId())) {
+ public boolean updateXaRecoveryId(final String instanceId, final String xaRecoveryId) {
+ if (instanceId.equals(instance.getCurrentInstanceId()) && !Objects.equals(xaRecoveryId, instance.getXaRecoveryId())) {
instance.setXaRecoveryId(xaRecoveryId);
+ computeNodeInstances.stream().filter(each -> each.getInstanceDefinition().getInstanceId().getId().equals(instanceId)).forEach(each -> each.setXaRecoveryId(xaRecoveryId));
+ return true;
}
+ computeNodeInstances.stream().filter(each -> each.getInstanceDefinition().getInstanceId().getId().equals(instanceId)).forEach(each -> each.setXaRecoveryId(xaRecoveryId));
+ return false;
}
/**
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/ComputeNodePersistService.java b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/ComputeNodePersistService.java
index 1892b6f8601..b89839ebbbc 100644
--- a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/ComputeNodePersistService.java
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/ComputeNodePersistService.java
@@ -87,6 +87,7 @@ public final class ComputeNodePersistService {
* @param xaRecoveryId xa recovery id
*/
public void persistInstanceXaRecoveryId(final String instanceId, final String xaRecoveryId) {
+ loadXaRecoveryId(instanceId).ifPresent(each -> repository.delete(ComputeNode.getInstanceXaRecoveryIdNodePath(each, instanceId)));
repository.persist(ComputeNode.getInstanceXaRecoveryIdNodePath(xaRecoveryId, instanceId), "");
}
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/service/ComputeNodePersistServiceTest.java b/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/service/ComputeNodePersistServiceTest.java
index a2ddff8c327..eea8cff4d05 100644
--- a/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/service/ComputeNodePersistServiceTest.java
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/service/ComputeNodePersistServiceTest.java
@@ -67,6 +67,7 @@ public final class ComputeNodePersistServiceTest {
InstanceDefinition instanceDefinition = new InstanceDefinition(InstanceType.PROXY, 3307);
final String instanceId = instanceDefinition.getInstanceId().getId();
new ComputeNodePersistService(repository).persistInstanceXaRecoveryId(instanceId, instanceId);
+ verify(repository).getChildrenKeys(ComputeNode.getXaRecoveryIdNodePath());
verify(repository).persist(ComputeNode.getInstanceXaRecoveryIdNodePath(instanceId, instanceId), "");
}
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinator.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinator.java
index 1bca7017642..36b29700913 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinator.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinator.java
@@ -248,8 +248,7 @@ public final class ClusterContextManagerCoordinator {
*/
@Subscribe
public synchronized void renew(final XaRecoveryIdEvent event) {
- if (contextManager.getInstanceContext().getInstance().getInstanceDefinition().getInstanceId().getId().equals(event.getInstanceId())) {
- contextManager.getInstanceContext().updateXaRecoveryId(event.getXaRecoveryId());
+ if (contextManager.getInstanceContext().updateXaRecoveryId(event.getInstanceId(), event.getXaRecoveryId())) {
contextManager.renewAllTransactionContext();
}
}