>From Preetham Poluparthi <[email protected]>:
Preetham Poluparthi has uploaded this change for review. (
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20587?usp=email )
Change subject: [ASTERIXDB-3632]: Fix missing array indexes in current index
detection
......................................................................
[ASTERIXDB-3632]: Fix missing array indexes in current index detection
- user model changes: no
- storage format changes: no
- interface changes: no
Ext-ref: MB-69429
Details:
Previously, in the index advisor, array indexes were not being added to the
list of current indexes even when they already existed, causing them to always
appear under recommended_indexes. This change updates the detection logic so
existing array indexes are correctly recognized and excluded from
recommendations.
Change-Id: I785d6394ef5d328d1edf36fb07e28cd9e143b3b9
---
M
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/indexadvisor/AdviseIndexRule.java
M
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/indexadvisor/FakeIndexProvider.java
M
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Index.java
3 files changed, 17 insertions(+), 8 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/87/20587/1
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/indexadvisor/AdviseIndexRule.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/indexadvisor/AdviseIndexRule.java
index 967d25d..95edee8 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/indexadvisor/AdviseIndexRule.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/indexadvisor/AdviseIndexRule.java
@@ -142,13 +142,13 @@
&& actualIndex.getIndexDetails() instanceof
Index.ValueIndexDetails valueIndexDetails) {
indexAdvisor.addPresentAdviseString(getCreateIndexClause(actualIndex.getIndexName(),
valueIndexDetails.getKeyFieldNames(),
databaseName, dataverse, datasetName));
- return;
}
+ else {
indexAdvisor.addRecommendedAdviseString(getCreateIndexClause(
getIndexName(((Index.ValueIndexDetails)
fakeIndex.getIndexDetails()).getKeyFieldNames()),
((Index.ValueIndexDetails)
fakeIndex.getIndexDetails()).getKeyFieldNames(), databaseName,
- dataverse, datasetName));
+ dataverse, datasetName));}
} else if (fakeIndex.getIndexDetails() instanceof
Index.ArrayIndexDetails fakeArrayIndexDetails) {
Index actualIndex = lookupArrayIndex(databaseName, dataverse,
datasetName,
@@ -157,11 +157,12 @@
&& actualIndex.getIndexDetails() instanceof
Index.ArrayIndexDetails arrayIndexDetails) {
indexAdvisor.addPresentAdviseString(getCreateArrayIndexClause(actualIndex.getIndexName(),
arrayIndexDetails, databaseName, dataverse,
datasetName));
- }
+ }else {
- indexAdvisor.addRecommendedAdviseString(
-
getCreateArrayIndexClause(getArrayIndexName(fakeArrayIndexDetails.getElementList()),
- fakeArrayIndexDetails, databaseName,
dataverse, datasetName));
+ indexAdvisor.addRecommendedAdviseString(
+
getCreateArrayIndexClause(getArrayIndexName(fakeArrayIndexDetails.getElementList()),
+ fakeArrayIndexDetails, databaseName,
dataverse, datasetName));
+ }
}
}
@@ -224,7 +225,7 @@
builder.append(" ");
}
- if (projectList.isEmpty() || (projectList.size() == 1 &&
projectList.getFirst().isEmpty())) {
+ if (projectList.isEmpty() || (projectList.size() == 1 &&
projectList.getFirst() == null)) {
builder.append(": ");
builder.append(typeList.getFirst());
} else {
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/indexadvisor/FakeIndexProvider.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/indexadvisor/FakeIndexProvider.java
index cda2c02..fc72069 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/indexadvisor/FakeIndexProvider.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/indexadvisor/FakeIndexProvider.java
@@ -100,7 +100,7 @@
}
} else {
List<List<String>> projectListWrapper = new ArrayList<>();
- projectListWrapper.add(projectList);
+ projectListWrapper.add(projectList.isEmpty() ? null :
projectList);
List<IAType> typeList = new ArrayList<>();
typeList.add(iaType);
diff --git
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Index.java
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Index.java
index 4709c13..bb564de 100644
---
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Index.java
+++
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Index.java
@@ -576,6 +576,14 @@
public int getSourceIndicator() {
return sourceIndicator;
}
+
+ @Override
+ public boolean equals(Object obj) {
+ return obj instanceof ArrayIndexElement &&
Objects.equals(unnestList, ((ArrayIndexElement) obj).unnestList)
+ && Objects.equals(projectList, ((ArrayIndexElement)
obj).projectList)
+ && Objects.equals(typeList, ((ArrayIndexElement)
obj).typeList)
+ && sourceIndicator == ((ArrayIndexElement)
obj).sourceIndicator;
+ }
}
public static class SampleIndexDetails extends AbstractIndexDetails {
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20587?usp=email
To unsubscribe, or for help writing mail filters, visit
https://asterix-gerrit.ics.uci.edu/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Change-Id: I785d6394ef5d328d1edf36fb07e28cd9e143b3b9
Gerrit-Change-Number: 20587
Gerrit-PatchSet: 1
Gerrit-Owner: Preetham Poluparthi <[email protected]>