Implement new numDocs() method which was introduced in Ib054133d2592f40ae96a6b029097db49fc378cd0. Change-Id: If4e5c7a5b390ad10b00a8fcb1c94e6dae78826b7 (cherry picked from commit 0b7d4b89cfaf8c6fca6c5d842dfa48d233d6b6e4)
diff --git a/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java b/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java index 43b7a0b..dfa719c 100644 --- a/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java +++ b/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java
@@ -75,6 +75,7 @@ import org.apache.http.HttpEntity; import org.apache.http.HttpStatus; import org.apache.http.StatusLine; +import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; import org.apache.http.nio.entity.NStringEntity; @@ -86,6 +87,7 @@ private static final FluentLogger logger = FluentLogger.forEnclosingClass(); protected static final String BULK = "_bulk"; + protected static final String COUNT = "_count"; protected static final String MAPPINGS = "mappings"; protected static final String ORDER = "order"; protected static final String DESC_SORT_ORDER = "desc"; @@ -190,6 +192,27 @@ } @Override + public int numDocs() { + String uri = getURI(COUNT); + Response response = performRequest(HttpGet.METHOD_NAME, uri); + int statusCode = response.getStatusLine().getStatusCode(); + if (statusCode != HttpStatus.SC_OK) { + throw new StorageException( + String.format( + "Request to get number of %s index documents failed: %s", + indexName, response.getStatusLine().getReasonPhrase())); + } + String content; + try { + content = getContent(response); + return JsonParser.parseString(content).getAsJsonObject().get("count").getAsInt(); + } catch (IOException e) { + throw new StorageException( + String.format("Request to get number of %s index documents failed", indexName), e); + } + } + + @Override public void delete(K id) { String uri = getURI(BULK); Response response = postRequestWithRefreshParam(uri, getDeleteActions(id));
diff --git a/src/test/java/com/google/gerrit/elasticsearch/ElasticAbstractQueryAccountsTest.java b/src/test/java/com/google/gerrit/elasticsearch/ElasticAbstractQueryAccountsTest.java index ce16b2e..a5f05dd 100644 --- a/src/test/java/com/google/gerrit/elasticsearch/ElasticAbstractQueryAccountsTest.java +++ b/src/test/java/com/google/gerrit/elasticsearch/ElasticAbstractQueryAccountsTest.java
@@ -18,8 +18,10 @@ import static com.google.gerrit.testing.GerritJUnit.assertThrows; import com.google.gerrit.exceptions.StorageException; +import com.google.gerrit.server.index.account.AccountIndexDefinition; import com.google.gerrit.server.query.account.AbstractQueryAccountsTest; import com.google.gerrit.testing.ConfigSuite; +import com.google.inject.Inject; import com.google.inject.Injector; import org.apache.http.impl.nio.client.CloseableHttpAsyncClient; import org.eclipse.jgit.lib.Config; @@ -55,6 +57,8 @@ } } + @Inject private AccountIndexDefinition accountIndexDefinition; + @Override protected void initAfterLifecycleStart() throws Exception { super.initAfterLifecycleStart(); @@ -75,4 +79,10 @@ assertThrows(StorageException.class, () -> gApi.accounts().self().index()); assertThat(thrown).hasMessageThat().contains("Failed to replace account"); } + + @Test + public void testNumDocs() throws Exception { + assertThat(accountIndexDefinition.getIndexCollection().getSearchIndex().numDocs()) + .isGreaterThan(-1); + } }
diff --git a/src/test/java/com/google/gerrit/elasticsearch/ElasticAbstractQueryChangesTest.java b/src/test/java/com/google/gerrit/elasticsearch/ElasticAbstractQueryChangesTest.java index 94bb66a..3182325 100644 --- a/src/test/java/com/google/gerrit/elasticsearch/ElasticAbstractQueryChangesTest.java +++ b/src/test/java/com/google/gerrit/elasticsearch/ElasticAbstractQueryChangesTest.java
@@ -20,9 +20,11 @@ import com.google.gerrit.entities.Change; import com.google.gerrit.entities.Project; import com.google.gerrit.exceptions.StorageException; +import com.google.gerrit.server.index.change.ChangeIndexDefinition; import com.google.gerrit.server.query.change.AbstractQueryChangesTest; import com.google.gerrit.testing.ConfigSuite; import com.google.gerrit.testing.GerritTestName; +import com.google.inject.Inject; import com.google.inject.Injector; import org.apache.http.impl.nio.client.CloseableHttpAsyncClient; import org.eclipse.jgit.junit.TestRepository; @@ -63,6 +65,7 @@ } @Rule public final GerritTestName testName = new GerritTestName(); + @Inject private ChangeIndexDefinition changeIndexDefinition; @After public void closeIndex() throws Exception { @@ -96,4 +99,10 @@ () -> gApi.changes().id(c.getProject().get(), c.getChangeId()).index()); assertThat(thrown).hasMessageThat().contains("Failed to reindex change"); } + + @Test + public void testNumDocs() throws Exception { + assertThat(changeIndexDefinition.getIndexCollection().getSearchIndex().numDocs()) + .isGreaterThan(-1); + } }
diff --git a/src/test/java/com/google/gerrit/elasticsearch/ElasticAbstractQueryGroupsTest.java b/src/test/java/com/google/gerrit/elasticsearch/ElasticAbstractQueryGroupsTest.java index f449bca..4835116 100644 --- a/src/test/java/com/google/gerrit/elasticsearch/ElasticAbstractQueryGroupsTest.java +++ b/src/test/java/com/google/gerrit/elasticsearch/ElasticAbstractQueryGroupsTest.java
@@ -19,8 +19,10 @@ import com.google.gerrit.exceptions.StorageException; import com.google.gerrit.extensions.api.groups.GroupApi; +import com.google.gerrit.server.index.group.GroupIndexDefinition; import com.google.gerrit.server.query.group.AbstractQueryGroupsTest; import com.google.gerrit.testing.ConfigSuite; +import com.google.inject.Inject; import com.google.inject.Injector; import org.apache.http.impl.nio.client.CloseableHttpAsyncClient; import org.eclipse.jgit.lib.Config; @@ -56,6 +58,8 @@ } } + @Inject private GroupIndexDefinition groupIndexDefinition; + @Override protected void initAfterLifecycleStart() throws Exception { super.initAfterLifecycleStart(); @@ -76,4 +80,10 @@ StorageException thrown = assertThrows(StorageException.class, () -> group.index()); assertThat(thrown).hasMessageThat().contains("Failed to replace group"); } + + @Test + public void testNumDocs() throws Exception { + assertThat(groupIndexDefinition.getIndexCollection().getSearchIndex().numDocs()) + .isGreaterThan(-1); + } }
diff --git a/src/test/java/com/google/gerrit/elasticsearch/ElasticAbstractQueryProjectsTest.java b/src/test/java/com/google/gerrit/elasticsearch/ElasticAbstractQueryProjectsTest.java index 5f4847c..71ef093 100644 --- a/src/test/java/com/google/gerrit/elasticsearch/ElasticAbstractQueryProjectsTest.java +++ b/src/test/java/com/google/gerrit/elasticsearch/ElasticAbstractQueryProjectsTest.java
@@ -19,8 +19,10 @@ import com.google.gerrit.exceptions.StorageException; import com.google.gerrit.extensions.api.projects.ProjectApi; +import com.google.gerrit.server.index.project.ProjectIndexDefinition; import com.google.gerrit.server.query.project.AbstractQueryProjectsTest; import com.google.gerrit.testing.ConfigSuite; +import com.google.inject.Inject; import com.google.inject.Injector; import org.apache.http.impl.nio.client.CloseableHttpAsyncClient; import org.eclipse.jgit.lib.Config; @@ -56,6 +58,8 @@ } } + @Inject private ProjectIndexDefinition projectIndexDefinition; + @Override protected void initAfterLifecycleStart() throws Exception { super.initAfterLifecycleStart(); @@ -76,4 +80,10 @@ StorageException thrown = assertThrows(StorageException.class, () -> project.index(false)); assertThat(thrown).hasMessageThat().contains("Failed to replace project"); } + + @Test + public void testNumDocs() throws Exception { + assertThat(projectIndexDefinition.getIndexCollection().getSearchIndex().numDocs()) + .isGreaterThan(-1); + } }