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");