@Override public IndexingResult index(DbSession dbSession, Collection<EsQueueDto> items) { called.addAll(items); int success = successfulReturns.next(); IndexingResult result = new IndexingResult(); items.stream().limit(success).forEach(i -> { db.getDbClient().esQueueDao().delete(dbSession, i); result.incrementSuccess(); indexed.add(i); }); rangeClosed(1, items.size()).forEach(i -> result.incrementRequests()); dbSession.commit(); return result; }
@Test public void test_success() { underTest.incrementRequests(); underTest.incrementRequests(); underTest.incrementSuccess(); underTest.incrementSuccess(); assertThat(underTest.getFailures()).isEqualTo(0); assertThat(underTest.getSuccess()).isEqualTo(2); assertThat(underTest.getTotal()).isEqualTo(2); assertThat(underTest.getSuccessRatio()).isEqualTo(1.0, DOUBLE_OFFSET); assertThat(underTest.isSuccess()).isTrue(); }
@Test public void test_partial_failure() { underTest.incrementRequests(); underTest.incrementRequests(); underTest.incrementRequests(); underTest.incrementRequests(); underTest.incrementSuccess(); assertThat(underTest.getFailures()).isEqualTo(3); assertThat(underTest.getSuccess()).isEqualTo(1); assertThat(underTest.getTotal()).isEqualTo(4); assertThat(underTest.getSuccessRatio()).isEqualTo(0.25, DOUBLE_OFFSET); assertThat(underTest.isSuccess()).isFalse(); }
@Override public void afterBulk(long executionId, BulkRequest request, BulkResponse response) { stopProfiler(request); List<DocId> successDocIds = new ArrayList<>(); for (BulkItemResponse item : response.getItems()) { if (item.isFailed()) { LOGGER.error("index [{}], type [{}], id [{}], message [{}]", item.getIndex(), item.getType(), item.getId(), item.getFailureMessage()); } else { result.incrementSuccess(); successDocIds.add(new DocId(item.getIndex(), item.getType(), item.getId())); } } indexingListener.onSuccess(successDocIds); }
@Override public IndexingResult index(DbSession dbSession, Collection<EsQueueDto> items) { called.add(items); IndexingResult result = new IndexingResult(); items.forEach(i -> result.incrementSuccess().incrementRequests()); db.getDbClient().esQueueDao().delete(dbSession, items); dbSession.commit(); return result; } }
@Test public void onFinish_must_not_throw_any_exception_if_no_failure() { IndexingResult indexingResult = new IndexingResult(); indexingResult.incrementRequests(); indexingResult.incrementSuccess(); IndexingListener.FAIL_ON_ERROR.onFinish(indexingResult); } }
@Override public IndexingResult index(DbSession dbSession, Collection<EsQueueDto> items) { IndexingResult result = new IndexingResult(); items.forEach(item -> { result.incrementRequests(); if (!item.getUuid().equals(failing.getUuid())) { result.incrementSuccess(); db.getDbClient().esQueueDao().delete(dbSession, item); dbSession.commit(); } }); return result; }
@Test public void ES_QUEUE_rows_are_deleted_when_all_docs_are_successfully_indexed() { EsQueueDto item1 = insertInQueue(INDEX_TYPE_ISSUE, "P1"); EsQueueDto item2 = insertInQueue(INDEX_TYPE_ISSUE, "P2"); EsQueueDto outOfScopeItem = insertInQueue(ComponentIndexDefinition.INDEX_TYPE_COMPONENT, "P1"); db.commit(); // does not contain outOfScopeItem IndexingListener underTest = newListener(asList(item1, item2)); DocId issue1 = newDocId(INDEX_TYPE_ISSUE, "I1"); DocId issue2 = newDocId(INDEX_TYPE_ISSUE, "I2"); underTest.onSuccess(asList(issue1, issue2)); assertThatEsTableContainsOnly(item1, item2, outOfScopeItem); // onFinish deletes all items IndexingResult result = new IndexingResult(); result.incrementSuccess().incrementRequests(); result.incrementSuccess().incrementRequests(); underTest.onFinish(result); assertThatEsTableContainsOnly(outOfScopeItem); }
@Test public void ES_QUEUE_rows_are_not_deleted_on_partial_error() { EsQueueDto item1 = insertInQueue(INDEX_TYPE_ISSUE, "P1"); EsQueueDto item2 = insertInQueue(INDEX_TYPE_ISSUE, "P2"); EsQueueDto outOfScopeItem = insertInQueue(ComponentIndexDefinition.INDEX_TYPE_COMPONENT, "P1"); db.commit(); // does not contain outOfScopeItem IndexingListener underTest = newListener(asList(item1, item2)); DocId issue1 = newDocId(INDEX_TYPE_ISSUE, "I1"); DocId issue2 = newDocId(INDEX_TYPE_ISSUE, "I2"); underTest.onSuccess(asList(issue1, issue2)); assertThatEsTableContainsOnly(item1, item2, outOfScopeItem); // one failure among the 2 indexing requests of issues IndexingResult result = new IndexingResult(); result.incrementSuccess().incrementRequests(); result.incrementRequests(); underTest.onFinish(result); assertThatEsTableContainsOnly(item1, item2, outOfScopeItem); }
@Override public void afterBulk(long executionId, BulkRequest request, BulkResponse response) { stopProfiler(request); List<DocId> successDocIds = new ArrayList<>(); for (BulkItemResponse item : response.getItems()) { if (item.isFailed()) { LOGGER.error("index [{}], type [{}], id [{}], message [{}]", item.getIndex(), item.getType(), item.getId(), item.getFailureMessage()); } else { result.incrementSuccess(); successDocIds.add(new DocId(item.getIndex(), item.getType(), item.getId())); } } indexingListener.onSuccess(successDocIds); }