This is an automated email from the ASF dual-hosted git repository.
terrymanu 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 cf0af758685 Refine IndexReviser index name recovery contract (#38887)
cf0af758685 is described below
commit cf0af7586852de48cc4534b6b142dea3623678a2
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Jun 23 00:55:42 2026 +0800
Refine IndexReviser index name recovery contract (#38887)
* Update AGENTS.md
* Refactor IndexReviser
* Refactor IndexReviser
---
.../metadata/reviser/index/EncryptIndexReviser.java | 2 +-
.../reviser/index/EncryptIndexReviserTest.java | 4 ++--
.../metadata/reviser/index/ShardingIndexReviser.java | 18 +++++-------------
.../reviser/index/ShardingIndexReviserTest.java | 4 ++--
.../schema/builder/GenericSchemaBuilderMaterial.java | 13 ++-----------
.../database/schema/reviser/index/IndexReviser.java | 19 +++----------------
.../schema/SchemaMetaDataReviseEngineTest.java | 2 +-
.../metadata/factory/MetaDataContextsFactoryTest.java | 6 +++---
.../CreateTablePushDownMetaDataRefresherTest.java | 16 ++++------------
.../StandaloneMetaDataManagerPersistService.java | 4 ++--
10 files changed, 25 insertions(+), 63 deletions(-)
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/reviser/index/EncryptIndexReviser.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/reviser/index/EncryptIndexReviser.java
index 5e042121f7e..d628f35e02c 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/reviser/index/EncryptIndexReviser.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/reviser/index/EncryptIndexReviser.java
@@ -38,7 +38,7 @@ public final class EncryptIndexReviser implements
IndexReviser<EncryptRule> {
@Override
public Optional<IndexMetaData> revise(final String tableName, final
IndexMetaData originalMetaData, final Collection<TableMetaData>
originalTableMetaDataList,
- final EncryptRule rule) {
+ final Collection<TableMetaData>
indexNameRecoveryCandidateTableMetaDataList, final EncryptRule rule) {
if (originalMetaData.getColumns().isEmpty()) {
return Optional.empty();
}
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/metadata/reviser/index/EncryptIndexReviserTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/metadata/reviser/index/EncryptIndexReviserTest.java
index 8101a8edfbd..4da039d16d1 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/metadata/reviser/index/EncryptIndexReviserTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/metadata/reviser/index/EncryptIndexReviserTest.java
@@ -39,13 +39,13 @@ class EncryptIndexReviserTest {
@Test
void assertReviseWithEmptyColumn() {
assertFalse(new EncryptIndexReviser(mock(EncryptTable.class))
- .revise("foo_tbl", new IndexMetaData("foo_idx"),
Collections.emptyList(), mock(EncryptRule.class)).isPresent());
+ .revise("foo_tbl", new IndexMetaData("foo_idx"),
Collections.emptyList(), Collections.emptyList(),
mock(EncryptRule.class)).isPresent());
}
@Test
void assertReviseWithColumns() {
Optional<IndexMetaData> actual = new
EncryptIndexReviser(mockEncryptTable())
- .revise("foo_tbl", new IndexMetaData("foo_idx",
Arrays.asList("cipher_col", "assisted_col", "other_col")),
Collections.emptyList(), mock(EncryptRule.class));
+ .revise("foo_tbl", new IndexMetaData("foo_idx",
Arrays.asList("cipher_col", "assisted_col", "other_col")),
Collections.emptyList(), Collections.emptyList(), mock(EncryptRule.class));
assertTrue(actual.isPresent());
assertThat(actual.get().getName(), is("foo_idx"));
assertThat(actual.get().getColumns(), is(new
LinkedHashSet<>(Arrays.asList("col_1", "col_2", "other_col"))));
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/reviser/index/ShardingIndexReviser.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/reviser/index/ShardingIndexReviser.java
index fad32a7b728..e946cc37552 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/reviser/index/ShardingIndexReviser.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/reviser/index/ShardingIndexReviser.java
@@ -42,20 +42,12 @@ public final class ShardingIndexReviser implements
IndexReviser<ShardingRule> {
@Override
public Optional<IndexMetaData> revise(final String tableName, final
IndexMetaData originalMetaData, final Collection<TableMetaData>
originalTableMetaDataList,
- final ShardingRule rule) {
- return revise(tableName, originalMetaData, originalTableMetaDataList,
Collections.emptyList(), rule);
- }
-
- @Override
- public Optional<IndexMetaData> revise(final String tableName, final
IndexMetaData originalMetaData, final Collection<TableMetaData>
originalTableMetaDataList,
- final Collection<TableMetaData>
schemaMetaDataRevisionCandidateTableMetaDataList, final ShardingRule rule) {
+ final Collection<TableMetaData>
indexNameRecoveryCandidateTableMetaDataList, final ShardingRule rule) {
if (shardingTable.getActualDataNodes().isEmpty()) {
return Optional.empty();
}
- String actualTableName = tableName;
- String logicIndexName = IndexMetaDataUtils.findGeneratedLogicIndexName(
- originalMetaData.getName(), actualTableName,
- findCandidateLogicIndexNames(originalMetaData,
originalTableMetaDataList,
schemaMetaDataRevisionCandidateTableMetaDataList)).orElse(originalMetaData.getName());
+ String logicIndexName =
IndexMetaDataUtils.findGeneratedLogicIndexName(originalMetaData.getName(),
tableName,
+ findCandidateLogicIndexNames(originalMetaData,
originalTableMetaDataList,
indexNameRecoveryCandidateTableMetaDataList)).orElse(originalMetaData.getName());
IndexMetaData result = new IndexMetaData(
logicIndexName, originalMetaData.getColumns());
result.setUnique(originalMetaData.isUnique());
@@ -63,7 +55,7 @@ public final class ShardingIndexReviser implements
IndexReviser<ShardingRule> {
}
private Collection<String> findCandidateLogicIndexNames(final
IndexMetaData originalMetaData, final Collection<TableMetaData>
originalTableMetaDataList,
- final
Collection<TableMetaData> schemaMetaDataRevisionCandidateTableMetaDataList) {
+ final
Collection<TableMetaData> indexNameRecoveryCandidateTableMetaDataList) {
Collection<String> result = new LinkedHashSet<>();
result.add(getGeneratedAnonymousIndexName(originalMetaData));
for (TableMetaData eachTable : originalTableMetaDataList) {
@@ -71,7 +63,7 @@ public final class ShardingIndexReviser implements
IndexReviser<ShardingRule> {
result.addAll(findCandidateLogicIndexNames(eachTable));
}
}
- for (TableMetaData each :
schemaMetaDataRevisionCandidateTableMetaDataList) {
+ for (TableMetaData each : indexNameRecoveryCandidateTableMetaDataList)
{
if (isLogicTable(each.getName())) {
result.addAll(findCandidateLogicIndexNamesFromRevisionCandidate(each));
}
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/metadata/reviser/index/ShardingIndexReviserTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/metadata/reviser/index/ShardingIndexReviserTest.java
index de6d13666e0..c4855749aae 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/metadata/reviser/index/ShardingIndexReviserTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/metadata/reviser/index/ShardingIndexReviserTest.java
@@ -46,7 +46,7 @@ class ShardingIndexReviserTest {
@Test
void assertReviseWithEmptyActualDataNode() {
- assertThat(new
ShardingIndexReviser(mock(ShardingTable.class)).revise("foo_tbl", new
IndexMetaData("foo_idx"), Collections.emptyList(), mock(ShardingRule.class)),
+ assertThat(new
ShardingIndexReviser(mock(ShardingTable.class)).revise("foo_tbl", new
IndexMetaData("foo_idx"), Collections.emptyList(), Collections.emptyList(),
mock(ShardingRule.class)),
is(Optional.empty()));
}
@@ -148,7 +148,7 @@ class ShardingIndexReviserTest {
private Optional<IndexMetaData> revise(final String tableName, final
IndexMetaData originalMetaData, final TableMetaData...
originalTableMetaDataList) {
return new ShardingIndexReviser(mockShardingTable()).revise(tableName,
originalMetaData,
- 0 == originalTableMetaDataList.length ?
Collections.singleton(tableMetaData(tableName, originalMetaData)) :
Arrays.asList(originalTableMetaDataList),
+ 0 == originalTableMetaDataList.length ?
Collections.singleton(tableMetaData(tableName, originalMetaData)) :
Arrays.asList(originalTableMetaDataList), Collections.emptyList(),
mock(ShardingRule.class));
}
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilderMaterial.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilderMaterial.java
index 19deec6a6fd..b9ee6ca48ad 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilderMaterial.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilderMaterial.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.infra.metadata.database.schema.builder;
import lombok.Getter;
+import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
@@ -31,6 +32,7 @@ import java.util.Map;
/**
* ShardingSphere schema builder material.
*/
+@RequiredArgsConstructor
@Getter
public final class GenericSchemaBuilderMaterial {
@@ -50,15 +52,4 @@ public final class GenericSchemaBuilderMaterial {
final String defaultSchemaName, final
DatabaseIdentifierContext identifierContext) {
this(storageUnits, rules, props, defaultSchemaName, identifierContext,
Collections.emptyList());
}
-
- public GenericSchemaBuilderMaterial(final Map<String, StorageUnit>
storageUnits, final Collection<ShardingSphereRule> rules, final
ConfigurationProperties props,
- final String defaultSchemaName, final
DatabaseIdentifierContext identifierContext,
- final Collection<ShardingSphereSchema>
schemaMetaDataRevisionCandidateSchemas) {
- this.storageUnits = storageUnits;
- this.rules = rules;
- this.props = props;
- this.defaultSchemaName = defaultSchemaName;
- this.identifierContext = identifierContext;
- this.schemaMetaDataRevisionCandidateSchemas =
schemaMetaDataRevisionCandidateSchemas;
- }
}
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/reviser/index/IndexReviser.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/reviser/index/IndexReviser.java
index 035a63aa4f5..2a2ff1d0b0d 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/reviser/index/IndexReviser.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/reviser/index/IndexReviser.java
@@ -37,23 +37,10 @@ public interface IndexReviser<T extends ShardingSphereRule>
{
* @param tableName table name
* @param originalMetaData original index meta data
* @param originalTableMetaDataList original table meta data list
- * @param schemaMetaDataRevisionCandidateTableMetaDataList schema meta
data revision candidate table meta data list
+ * @param indexNameRecoveryCandidateTableMetaDataList index name recovery
candidate table meta data list
* @param rule rule
* @return revised index meta data
*/
- default Optional<IndexMetaData> revise(final String tableName, final
IndexMetaData originalMetaData, final Collection<TableMetaData>
originalTableMetaDataList,
- final Collection<TableMetaData>
schemaMetaDataRevisionCandidateTableMetaDataList, final T rule) {
- return revise(tableName, originalMetaData, originalTableMetaDataList,
rule);
- }
-
- /**
- * Revise index meta data.
- *
- * @param tableName table name
- * @param originalMetaData original index meta data
- * @param originalTableMetaDataList original table meta data list
- * @param rule rule
- * @return revised index meta data
- */
- Optional<IndexMetaData> revise(String tableName, IndexMetaData
originalMetaData, Collection<TableMetaData> originalTableMetaDataList, T rule);
+ Optional<IndexMetaData> revise(String tableName, IndexMetaData
originalMetaData,
+ Collection<TableMetaData>
originalTableMetaDataList, Collection<TableMetaData>
indexNameRecoveryCandidateTableMetaDataList, T rule);
}
diff --git
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/reviser/schema/SchemaMetaDataReviseEngineTest.java
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/reviser/schema/SchemaMetaDataReviseEngineTest.java
index b6f23a3b4ba..ec6c637aa8c 100644
---
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/reviser/schema/SchemaMetaDataReviseEngineTest.java
+++
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/reviser/schema/SchemaMetaDataReviseEngineTest.java
@@ -90,7 +90,7 @@ class SchemaMetaDataReviseEngineTest {
}
}
- @SuppressWarnings({"unchecked", "rawtypes"})
+ @SuppressWarnings("unchecked")
@Test
void
assertRevisePassesSameSchemaRevisionCandidateTableMetaDataToIndexReviser() {
TableMetaData actualTableMetaData = new TableMetaData("actual_tbl",
Collections.emptyList(),
diff --git
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/factory/MetaDataContextsFactoryTest.java
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/factory/MetaDataContextsFactoryTest.java
index d53d9f49e5e..34ebc381f6a 100644
---
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/factory/MetaDataContextsFactoryTest.java
+++
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/factory/MetaDataContextsFactoryTest.java
@@ -151,7 +151,7 @@ class MetaDataContextsFactoryTest {
}
@Test
- void assertCreateBySwitchResourceFiltersStaleResources() throws
SQLException {
+ void assertCreateBySwitchResourceFiltersStaleResources() {
StorageNode staleNode = new StorageNode("stale_ds");
StorageNode activeNode = new StorageNode("active_ds");
Map<StorageNode, DataSource> currentStorageNodes = new
LinkedHashMap<>(2, 1F);
@@ -180,7 +180,7 @@ class MetaDataContextsFactoryTest {
}
@Test
- void assertCreateBySwitchResourceKeepsExistingNodesWhenNoNewDataSources()
throws SQLException {
+ void assertCreateBySwitchResourceKeepsExistingNodesWhenNoNewDataSources() {
ResourceMetaData resourceMetaData =
createResourceMetaDataWithSingleUnit();
ShardingSphereDatabase database =
new ShardingSphereDatabase("foo_db", databaseType,
resourceMetaData, new RuleMetaData(Collections.emptyList()),
Collections.emptyList(), new ConfigurationProperties(new Properties()));
@@ -195,7 +195,7 @@ class MetaDataContextsFactoryTest {
}
@Test
- void assertCreateByAlterRuleKeepsPersistedSchemasWhenEnabled() throws
SQLException {
+ void assertCreateByAlterRuleKeepsPersistedSchemasWhenEnabled() {
ShardingSphereDatabase database = new ShardingSphereDatabase(
"foo_db", databaseType,
createResourceMetaDataWithSingleUnit(), new
RuleMetaData(Collections.emptyList()), Collections.emptyList(), new
ConfigurationProperties(new Properties()));
ShardingSphereMetaData metaData = new ShardingSphereMetaData(
diff --git
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/table/CreateTablePushDownMetaDataRefresherTest.java
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/table/CreateTablePushDownMetaDataRefresherTest.java
index 19588f005ad..87d53ece219 100644
---
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/table/CreateTablePushDownMetaDataRefresherTest.java
+++
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/table/CreateTablePushDownMetaDataRefresherTest.java
@@ -57,7 +57,6 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
@@ -97,7 +96,7 @@ class CreateTablePushDownMetaDataRefresherTest {
assertThat(persistService.getCreatedTable().getName(), is("Foo_Tbl"));
}
- @SuppressWarnings({"unchecked", "rawtypes"})
+ @SuppressWarnings("rawtypes")
@Test
void
assertRefreshCreatedShardingTableRestoresTruncatedNamedIndexFromCreateTableStatementCandidate()
throws SQLException {
String logicTableName = "tbl";
@@ -297,16 +296,9 @@ class CreateTablePushDownMetaDataRefresherTest {
@Override
public Optional<IndexMetaData> revise(final String tableName, final
IndexMetaData originalMetaData, final Collection<TableMetaData>
originalTableMetaDataList,
- final CreateTableCandidateRule
rule) {
- return revise(tableName, originalMetaData,
originalTableMetaDataList, Collections.emptyList(), rule);
- }
-
- @Override
- public Optional<IndexMetaData> revise(final String tableName, final
IndexMetaData originalMetaData, final Collection<TableMetaData>
originalTableMetaDataList,
- final Collection<TableMetaData>
schemaMetaDataRevisionCandidateTableMetaDataList, final
CreateTableCandidateRule rule) {
- Collection<String> candidateIndexNames =
schemaMetaDataRevisionCandidateTableMetaDataList.stream()
- .filter(each ->
rule.logicTableName.equalsIgnoreCase(each.getName())).flatMap(each ->
each.getIndexes().stream()).map(IndexMetaData::getName)
- .collect(Collectors.toCollection(LinkedHashSet::new));
+ final Collection<TableMetaData>
indexNameRecoveryCandidateTableMetaDataList, final CreateTableCandidateRule
rule) {
+ Collection<String> candidateIndexNames =
indexNameRecoveryCandidateTableMetaDataList.stream()
+ .filter(each ->
rule.logicTableName.equalsIgnoreCase(each.getName())).flatMap(each ->
each.getIndexes().stream()).map(IndexMetaData::getName).collect(Collectors.toSet());
IndexMetaData result = new
IndexMetaData(IndexMetaDataUtils.findGeneratedLogicIndexName(
originalMetaData.getName(), tableName,
candidateIndexNames).orElse(originalMetaData.getName()),
originalMetaData.getColumns());
result.setUnique(originalMetaData.isUnique());
diff --git
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
index f8ba591c4da..428cccb0462 100644
---
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
+++
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
@@ -337,8 +337,8 @@ public final class StandaloneMetaDataManagerPersistService
implements MetaDataMa
metaDataContexts.getMetaData().getProps(), new
DatabaseTypeRegistry(database.getProtocolType()).getDefaultSchemaName(databaseName),
database.getIdentifierContext(),
database.getAllSchemas());
Collection<ShardingSphereSchema> schemas = new
LinkedList<>(GenericSchemaBuilder.build(database.getProtocolType(),
material).values());
- return new ShardingSphereDatabase(database.getName(),
database.getProtocolType(), database.getResourceMetaData(),
database.getRuleMetaData(), schemas,
- metaDataContexts.getMetaData().getProps());
+ return new ShardingSphereDatabase(database.getName(),
+ database.getProtocolType(), database.getResourceMetaData(),
database.getRuleMetaData(), schemas, metaDataContexts.getMetaData().getProps());
}
private MetaDataContexts createMetaDataContextsWithRebuiltDatabase(final
String databaseName, final MetaDataContexts metaDataContexts) {