This is an automated email from the ASF dual-hosted git repository.

jianglongtao 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 9df845f1084 Clean the useless versions after metadata version switched 
(#33792)
9df845f1084 is described below

commit 9df845f108412a16624f94d3a353b6f5db2f9f82
Author: Haoran Meng <[email protected]>
AuthorDate: Mon Nov 25 13:52:22 2024 +0800

    Clean the useless versions after metadata version switched (#33792)
---
 .../infra/metadata/version/MetaDataVersion.java            | 14 ++++++++++++--
 .../infra/metadata/version/MetaDataVersionTest.java        |  7 ++++++-
 .../service/version/MetaDataVersionPersistService.java     |  6 ++++--
 .../service/version/MetaDataVersionPersistServiceTest.java |  1 +
 4 files changed, 23 insertions(+), 5 deletions(-)

diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/version/MetaDataVersion.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/version/MetaDataVersion.java
index f3e09eebc0b..a74ec55b3ee 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/version/MetaDataVersion.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/version/MetaDataVersion.java
@@ -55,9 +55,19 @@ public final class MetaDataVersion {
     /**
      * Get versions node path.
      *
+     * @param version version
      * @return path of versions node
      */
-    public String getVersionsNodePath() {
-        return String.join("/", key, VERSIONS, currentActiveVersion);
+    public String getVersionsNodePath(final String version) {
+        return String.join("/", key, VERSIONS, version);
+    }
+    
+    /**
+     * Get versions path.
+     *
+     * @return path of versions
+     */
+    public String getVersionsPath() {
+        return String.join("/", key, VERSIONS);
     }
 }
diff --git 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/version/MetaDataVersionTest.java
 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/version/MetaDataVersionTest.java
index 0de055d4cb1..1bdd7410130 100644
--- 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/version/MetaDataVersionTest.java
+++ 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/version/MetaDataVersionTest.java
@@ -31,6 +31,11 @@ class MetaDataVersionTest {
     
     @Test
     void assertGetVersionsNodePath() {
-        assertThat(new MetaDataVersion("foo", "0", "1").getVersionsNodePath(), 
is("foo/versions/0"));
+        assertThat(new MetaDataVersion("foo", "0", 
"1").getVersionsNodePath("0"), is("foo/versions/0"));
+    }
+    
+    @Test
+    void assertGetVersionsPath() {
+        assertThat(new MetaDataVersion("foo", "0", "1").getVersionsPath(), 
is("foo/versions"));
     }
 }
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/version/MetaDataVersionPersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/version/MetaDataVersionPersistService.java
index ff056e9467f..7e7820493e4 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/version/MetaDataVersionPersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/version/MetaDataVersionPersistService.java
@@ -42,7 +42,9 @@ public final class MetaDataVersionPersistService implements 
MetaDataVersionBased
                 continue;
             }
             repository.persist(each.getActiveVersionNodePath(), 
each.getNextActiveVersion());
-            repository.delete(each.getVersionsNodePath());
+            getVersions(each.getVersionsPath()).stream()
+                    .filter(version -> 
!version.equals(each.getNextActiveVersion()))
+                    .forEach(version -> 
repository.delete(each.getVersionsNodePath(version)));
         }
     }
     
@@ -59,7 +61,7 @@ public final class MetaDataVersionPersistService implements 
MetaDataVersionBased
     @Override
     public List<String> getVersions(final String path) {
         List<String> result = repository.getChildrenKeys(path);
-        if (result.size() > 1) {
+        if (result.size() > 2) {
             log.warn("There are multiple versions of :{}, please check the 
configuration.", path);
             result.sort((v1, v2) -> Integer.compare(Integer.parseInt(v2), 
Integer.parseInt(v1)));
         }
diff --git 
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/version/MetaDataVersionPersistServiceTest.java
 
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/version/MetaDataVersionPersistServiceTest.java
index d2c3e0b43c7..6eb49329c85 100644
--- 
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/version/MetaDataVersionPersistServiceTest.java
+++ 
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/version/MetaDataVersionPersistServiceTest.java
@@ -47,6 +47,7 @@ class MetaDataVersionPersistServiceTest {
     
     @Test
     void assertSwitchActiveVersion() {
+        
when(repository.getChildrenKeys("foo_db/versions")).thenReturn(Arrays.asList("1",
 "0"));
         persistService.switchActiveVersion(Arrays.asList(new 
MetaDataVersion("foo_db", "0", "1"), new MetaDataVersion("bar_db", "2", "2")));
         verify(repository).persist("foo_db/active_version", "1");
         verify(repository).delete("foo_db/versions/0");

Reply via email to