Skip to content

Commit a67ab15

Browse files
committed
Bug 1746377: Fetch indices instead of search to seed index patterns
1 parent e8ddd51 commit a67ab15

File tree

5 files changed

+33
-14
lines changed

5 files changed

+33
-14
lines changed

src/it/java/io/fabric8/elasticsearch/ElasticsearchIntegrationTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,13 @@ protected void assertThatResponseIsForbidden() {
523523
assertEquals(String.format("Exp. %s to be forbidden for %s", username, uri), 403, response.code());
524524
}
525525

526+
protected void assertThatResponseIsNotFound() {
527+
String username = (String) testContext.get(USERNAME);
528+
Response response = (Response) testContext.get(RESPONSE);
529+
String uri = (String) testContext.get(URI);
530+
assertEquals(String.format("Exp. %s to be not found for %s", username, uri), 404, response.code());
531+
}
532+
526533
protected void assertThatResponseIsUnauthorized() {
527534
String username = (String) testContext.get(USERNAME);
528535
Response response = (Response) testContext.get(RESPONSE);

src/it/java/io/fabric8/elasticsearch/KibanaIndexModeIntegrationBase.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,10 @@ protected void assertThatMessageEquals(String message) throws Exception {
4141

4242
@Before
4343
public void setup() throws Exception {
44-
givenDocumentIsIndexed("project.multi-tenancy-1.uuid.1970.01.01", "test", "0", "multi-tenancy-1-doc0");
44+
//https://bugzilla.redhat.com/show_bug.cgi?id=1746377
45+
for (int i = 0; i < 1100; ++ i) {
46+
givenDocumentIsIndexed("project.multi-tenancy-1.uuid.1970.01.01", "test", String.valueOf(i), "multi-tenancy-1-doc0");
47+
}
4548
givenDocumentIsIndexed("project.multi-tenancy-2.uuid.1970.01.01", "test", "0", "multi-tenancy-2-doc0");
4649
givenDocumentIsIndexed("project.multi-tenancy-3.uuid.1970.01.01", "test", "0", "multi-tenancy-3-doc0");
4750
}

src/it/java/io/fabric8/elasticsearch/KibanaIndexModeSharedOpsIntegrationTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,17 @@ public void testNonAdminUserRetrievingDocuments() throws Exception {
4545
//verify access to unique kibana index
4646
whenGettingDocument(String.format("%s/config/%s", kibanaIndex, OLD_KIBANA_VERSION));
4747
assertThatResponseIsSuccessful();
48+
49+
50+
//verify seeded index patterns
51+
for (String project : projects) {
52+
whenGettingDocument(String.format("%s/index-pattern/%s", kibanaIndex, formatProjectIndexPattern(project, "uuid")));
53+
assertThatResponseIsSuccessful();
54+
}
55+
56+
//verify access to index pattern for project we dont administer
57+
whenGettingDocument(String.format("%s/index-pattern/%s", kibanaIndex, formatProjectIndexPattern("multi-tenancy-3", "uuid")));
58+
assertThatResponseIsNotFound();
4859

4960
//verify search to individual projects
5061
for (String project : projects) {

src/main/java/io/fabric8/elasticsearch/plugin/PluginClient.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
import org.elasticsearch.common.util.concurrent.ThreadContext;
5858
import org.elasticsearch.common.util.concurrent.ThreadContext.StoredContext;
5959
import org.elasticsearch.common.xcontent.XContentType;
60+
import org.elasticsearch.search.sort.SortOrder;
6061

6162
import com.floragunn.searchguard.support.ConfigConstants;
6263

@@ -163,6 +164,7 @@ public SearchResponse call() throws Exception {
163164
.setTypes(types)
164165
.setSize(size)
165166
.setFetchSource(fetchSource)
167+
.addSort("_index", SortOrder.ASC)
166168
.get();
167169
}
168170

src/main/java/io/fabric8/elasticsearch/plugin/kibana/KibanaSeed.java

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,13 @@
2222
import java.util.List;
2323
import java.util.Set;
2424

25-
import org.apache.commons.lang.ArrayUtils;
2625
import org.apache.commons.lang.StringUtils;
2726
import org.apache.logging.log4j.Logger;
27+
import org.elasticsearch.action.admin.indices.get.GetIndexResponse;
2828
import org.elasticsearch.action.get.GetResponse;
29-
import org.elasticsearch.action.search.SearchResponse;
3029
import org.elasticsearch.common.collect.Tuple;
3130
import org.elasticsearch.common.logging.Loggers;
3231
import org.elasticsearch.common.settings.Settings;
33-
import org.elasticsearch.search.SearchHit;
3432

3533
import io.fabric8.elasticsearch.plugin.ConfigurationSettings;
3634
import io.fabric8.elasticsearch.plugin.OpenshiftRequestContextFactory.OpenshiftRequestContext;
@@ -192,16 +190,14 @@ private List<Project> filterProjectsWithIndices(Set<Project> projects) {
192190
}
193191
LOGGER.trace("Evaluating {} indexPattern for existing index.", patterns.size());
194192
Set<Project> result = new HashSet<>(projects.size());
195-
SearchResponse response = pluginClient.search(patterns.toArray(new String[]{}), ArrayUtils.EMPTY_STRING_ARRAY, 1000, false);
196-
if (response.getHits() == null ) {
197-
LOGGER.warn("Searching for indexPatterns returned a response with a null hits (e.g. response.getHits())");
198-
return Collections.emptyList();
199-
}
200-
for (SearchHit hit : response.getHits().getHits()){
201-
LOGGER.trace("Evaluating index {}", hit.getIndex());
202-
Project project = kibanaUtils.getProjectFromIndex(hit.getIndex());
203-
LOGGER.trace("Found index for project {}", project);
204-
result.add(project);
193+
GetIndexResponse response = pluginClient.getIndex(patterns.toArray(new String[]{}));
194+
for (String index : response.getIndices()) {
195+
LOGGER.trace("Evaluating index {}", index);
196+
Project project = kibanaUtils.getProjectFromIndex(index);
197+
if(projects.contains(project)) {
198+
LOGGER.trace("Found index for project {}", project);
199+
result.add(project);
200+
}
205201
}
206202
return new ArrayList<>(result);
207203
}

0 commit comments

Comments
 (0)