Skip to content

Commit

Permalink
#24816 adding fix on the creation of site search indice
Browse files Browse the repository at this point in the history
  • Loading branch information
AndreyDotcms committed Sep 18, 2023
1 parent aaa87a8 commit 6b757f6
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
import com.dotmarketing.sitesearch.business.SiteSearchAPI;
import java.io.IOException;
import java.util.Date;
import java.util.Set;

import org.junit.BeforeClass;
import org.junit.Test;

Expand All @@ -36,6 +38,29 @@ public static void prepare() throws Exception {
contentletIndexAPI = APILocator.getContentletIndexAPI();
}

@Test
public void testCreate_100_SiteSearchIndex() throws IOException, DotDataException {
String timeStamp;
String indexName;
String aliasName;
String lastCreatedIndex = "";

Set<String> data = indexAPI.listIndices();
// assertEquals(0, data.size());
int indicesAmount = 120;
for (int i = 0; i < indicesAmount; i++) {
timeStamp = String.valueOf(new Date().getTime());
indexName = ES_SITE_SEARCH_NAME + "_" +i+ "_" + timeStamp;
aliasName = "indexAlias" + "_" + i + "_" + timeStamp;

siteSearchAPI.createSiteSearchIndex(indexName, aliasName, 1);

lastCreatedIndex = indexName;
}

assertTrue(indexAPI.listIndices().contains(lastCreatedIndex));
}

@Test
public void testCreateSiteSearchIndexAndMakeItDefault() throws IOException, DotDataException {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -857,31 +857,61 @@ public Map<String,String> getIndexAlias(List<String> indexNames) {
return getIndexAlias(indexNames.toArray(new String[indexNames.size()]));
}

public Map<String,String> getIndexAlias(String[] indexNames) {
public Map<String,String> getIndexAlias(String[] indexNames) {

String[] indexNamesWithPrefix = new String[indexNames.length];
for (int i = 0; i < indexNames.length; i++){
indexNamesWithPrefix[i] = getNameWithClusterIDPrefix(indexNames[i]);
}
String[] indexNamesWithPrefix = new String[indexNames.length];
for (int i = 0; i < indexNames.length; i++){
indexNamesWithPrefix[i] = getNameWithClusterIDPrefix(indexNames[i]);
}

GetAliasesRequest request = new GetAliasesRequest();
request.indices(indexNamesWithPrefix);
//stores the offset to iterate
int currentOffset = 0;
int limit = Math.min(50, indexNamesWithPrefix.length);

GetAliasesResponse response = Sneaky.sneak(()->
RestHighLevelClientProvider.getInstance().getClient()
.indices().getAlias(request, RequestOptions.DEFAULT));
//stores arrays of 50 elements or less
ArrayList<String[]> partitionLists = new ArrayList<String[]>();

Map<String,String> alias=new HashMap<>();
//stores 50 elements or less
String[] partition = new String[limit];

response.getAliases().forEach((indexName, value) -> {
if(UtilMethods.isSet(value)) {
final String aliasName = value.iterator().next().alias();
alias.put(removeClusterIdFromName(indexName), removeClusterIdFromName(aliasName));
//fill the partition list
while (currentOffset < indexNamesWithPrefix.length) {
//loop to fill the partition
//todo: validar que la cantidad de iteraciones sea correcta
for (int i = 0; i < limit; i++) {
partition[i] = indexNamesWithPrefix[currentOffset];
currentOffset++;
}
});
partitionLists.add(partition);

//update the limit to the next iteration
limit = Math.min(50, indexNamesWithPrefix.length - currentOffset);
}

Map<String,String> alias=new HashMap<>();

//iterates the partition list
for (String[] portionElement : partitionLists ) {

GetAliasesRequest request = new GetAliasesRequest();

//set the limited values of the stack
request.indices(portionElement);

GetAliasesResponse response = Sneaky.sneak(()->
RestHighLevelClientProvider.getInstance().getClient()
.indices().getAlias(request, RequestOptions.DEFAULT));

response.getAliases().forEach((indexName, value) -> {
if(UtilMethods.isSet(value)) {
final String aliasName = value.iterator().next().alias();
alias.put(removeClusterIdFromName(indexName), removeClusterIdFromName(aliasName));
}
});
}

return alias;
}
}

public String getIndexAlias(String indexName) {
return getIndexAlias(new String[]{indexName}).get(indexName);
Expand Down

0 comments on commit 6b757f6

Please sign in to comment.