private static EsQueueDto createQueueDtoForRule(int ruleId) { String docId = String.valueOf(ruleId); return EsQueueDto.create("rules/rule", docId, null, docId); }
private static EsQueueDto newQueueDto(String docId, String docIdType, @Nullable String routing) { return EsQueueDto.create(INDEX_TYPE_ACTIVE_RULE.format(), docId, docIdType, routing); } }
private static EsQueueDto createQueueDto(String docId, String docIdType, String projectUuid) { return EsQueueDto.create(INDEX_TYPE_ISSUE.format(), docId, docIdType, projectUuid); }
private static EsQueueDto createQueueDtoForRuleExtension(int ruleId, OrganizationDto organization) { String docId = RuleExtensionDoc.idOf(ruleId, RuleExtensionScope.organization(organization)); return EsQueueDto.create("rules/ruleExtension", docId, null, String.valueOf(ruleId)); }
private Collection<EsQueueDto> insertIntoEsQueue(DbSession dbSession, Collection<String> projectUuids) { List<EsQueueDto> items = indexTypes.stream() .flatMap(indexType -> projectUuids.stream().map(projectUuid -> EsQueueDto.create(indexType.format(), projectUuid, null, projectUuid))) .collect(toArrayList()); dbClient.esQueueDao().insert(dbSession, items); return items; }
public void commitAndIndex(DbSession dbSession, Collection<UserDto> users) { List<String> uuids = users.stream().map(UserDto::getUuid).collect(toList()); List<EsQueueDto> items = uuids.stream() .map(uuid -> EsQueueDto.create(INDEX_TYPE_USER.format(), uuid)) .collect(MoreCollectors.toArrayList()); dbClient.esQueueDao().insert(dbSession, items); dbSession.commit(); postCommit(dbSession, users.stream().map(UserDto::getLogin).collect(toList()), items); }
@Override public Collection<EsQueueDto> prepareForRecovery(DbSession dbSession, Collection<String> projectUuids, Cause cause) { switch (cause) { case MEASURE_CHANGE: case PROJECT_TAGS_UPDATE: case PERMISSION_CHANGE: // measures, tags and permissions are not part of type components/component return emptyList(); case PROJECT_CREATION: case PROJECT_DELETION: case PROJECT_KEY_UPDATE: List<EsQueueDto> items = projectUuids.stream() .map(branchUuid -> EsQueueDto.create(INDEX_TYPE_COMPONENT.format(), branchUuid, null, branchUuid)) .collect(MoreCollectors.toArrayList(projectUuids.size())); return dbClient.esQueueDao().insert(dbSession, items); default: // defensive case throw new IllegalStateException("Unsupported cause: " + cause); } }
@Override public Collection<EsQueueDto> prepareForRecovery(DbSession dbSession, Collection<String> projectUuids, ProjectIndexer.Cause cause) { switch (cause) { case PERMISSION_CHANGE: // nothing to do, permissions are not used in type projectmeasures/projectmeasure return Collections.emptyList(); case MEASURE_CHANGE: case PROJECT_KEY_UPDATE: // project must be re-indexed because key is used in this index case PROJECT_CREATION: // provisioned projects are supported by WS api/components/search_projects case PROJECT_TAGS_UPDATE: case PROJECT_DELETION: List<EsQueueDto> items = projectUuids.stream() .map(projectUuid -> EsQueueDto.create(INDEX_TYPE_PROJECT_MEASURES.format(), projectUuid, null, projectUuid)) .collect(MoreCollectors.toArrayList(projectUuids.size())); return dbClient.esQueueDao().insert(dbSession, items); default: // defensive case throw new IllegalStateException("Unsupported cause: " + cause); } }
public IndexingResult commitAndIndex(DbSession dbSession, Collection<String> projectUuids) { List<EsQueueDto> items = projectUuids.stream() .map(projectUuid -> EsQueueDto.create(INDEX_TYPE_PROJECT_MEASURES.format(), projectUuid, null, projectUuid)) .collect(MoreCollectors.toArrayList(projectUuids.size())); dbClient.esQueueDao().insert(dbSession, items); dbSession.commit(); return index(dbSession, items); }
public void delete(DbSession dbSession, Collection<String> viewUuids) { List<EsQueueDto> items = viewUuids.stream() .map(l -> EsQueueDto.create(INDEX_TYPE_VIEW.format(), l)) .collect(MoreCollectors.toArrayList()); dbClient.esQueueDao().insert(dbSession, items); dbSession.commit(); index(dbSession, items); }
@Test public void insert_data() { int nbOfInsert = 10 + new Random().nextInt(20); List<EsQueueDto> esQueueDtos = new ArrayList<>(); IntStream.rangeClosed(1, nbOfInsert).forEach( i -> esQueueDtos.add(EsQueueDto.create("foo", UuidFactoryFast.getInstance().create())) ); underTest.insert(dbSession, esQueueDtos); assertThat(dbTester.countSql(dbSession, "select count(*) from es_queue")).isEqualTo(nbOfInsert); }
@Test public void commitAndIndexByProjectUuids_calls_indexer_with_only_its_supported_items() { EsQueueDto item1a = EsQueueDto.create("fake/fake1", "P1"); EsQueueDto item1b = EsQueueDto.create("fake/fake1", "P1"); EsQueueDto item2 = EsQueueDto.create("fake/fake2", "P1"); FakeIndexer indexer1 = new FakeIndexer(asList(item1a, item1b)); FakeIndexer indexer2 = new FakeIndexer(singletonList(item2)); DbSession dbSession = mock(DbSession.class); ProjectIndexersImpl underTest = new ProjectIndexersImpl(indexer1, indexer2); underTest.commitAndIndexByProjectUuids(dbSession, singletonList("P1"), ProjectIndexer.Cause.PROJECT_CREATION); assertThat(indexer1.calledItems).containsExactlyInAnyOrder(item1a, item1b); assertThat(indexer2.calledItems).containsExactlyInAnyOrder(item2); }
@Test public void delete_unknown_EsQueueDto_does_not_throw_exception() { int nbOfInsert = 10 + new Random().nextInt(20); List<EsQueueDto> esQueueDtos = new ArrayList<>(); IntStream.rangeClosed(1, nbOfInsert).forEach( i -> esQueueDtos.add(EsQueueDto.create("foo", UuidFactoryFast.getInstance().create())) ); underTest.insert(dbSession, esQueueDtos); underTest.delete(dbSession, EsQueueDto.create("foo", UuidFactoryFast.getInstance().create())); assertThat(dbTester.countSql(dbSession, "select count(*) from es_queue")).isEqualTo(nbOfInsert); }
@Test public void delete_EsQueueDto_does_not_throw_exception() { int nbOfInsert = 10 + new Random().nextInt(20); List<EsQueueDto> esQueueDtos = new ArrayList<>(); IntStream.rangeClosed(1, nbOfInsert).forEach( i -> esQueueDtos.add(EsQueueDto.create("foo", UuidFactoryFast.getInstance().create())) ); underTest.insert(dbSession, esQueueDtos); assertThat(dbTester.countSql(dbSession, "select count(*) from es_queue")).isEqualTo(nbOfInsert); underTest.delete(dbSession, esQueueDtos); assertThat(dbTester.countSql(dbSession, "select count(*) from es_queue")).isEqualTo(0); }
private EsQueueDto insertInQueue(IndexType indexType, String id) { EsQueueDto item = EsQueueDto.create(indexType.format(), id); db.getDbClient().esQueueDao().insert(db.getSession(), singletonList(item)); return item; }
private EsQueueDto insertInQueue(IndexType indexType, String id) { EsQueueDto item = EsQueueDto.create(indexType.format(), id); db.getDbClient().esQueueDao().insert(db.getSession(), singletonList(item)); return item; }
@Test public void index_fails_and_deletes_doc_if_docIdType_is_unsupported() { EsQueueDto item = EsQueueDto.create(INDEX_TYPE_ACTIVE_RULE.format(), "the_id", "unsupported", "the_routing"); db.getDbClient().esQueueDao().insert(db.getSession(), item); underTest.index(db.getSession(), asList(item)); assertThatEsQueueTableIsEmpty(); assertThat(es.countDocuments(INDEX_TYPE_ACTIVE_RULE)).isEqualTo(0); }
private EsQueueDto insertItem(IndexType indexType, String docUuid) { EsQueueDto item = EsQueueDto.create(indexType.format(), docUuid); db.getDbClient().esQueueDao().insert(db.getSession(), item); db.commit(); return item; }
@Test public void recovery_does_not_fail_if_unsupported_docIdType() { EsQueueDto item = EsQueueDto.create(INDEX_TYPE_ISSUE.format(), "I1", "unknown", "P1"); db.getDbClient().esQueueDao().insert(db.getSession(), item); db.commit(); recover(); assertThat(logTester.logs(LoggerLevel.ERROR)) .filteredOn(l -> l.contains("Unsupported es_queue.doc_id_type for issues. Manual fix is required: ")) .hasSize(1); assertThatEsQueueTableHasSize(1); }
@Test public void commitAndIndex_keeps_elements_to_recover_in_ES_QUEUE_on_errors() { ActiveRuleDto ar = db.qualityProfiles().activateRule(profile1, rule1); es.lockWrites(INDEX_TYPE_ACTIVE_RULE); commitAndIndex(rule1, ar); EsQueueDto expectedItem = EsQueueDto.create(INDEX_TYPE_ACTIVE_RULE.format(), "" + ar.getId(), "activeRuleId", valueOf(ar.getRuleId())); assertThatEsQueueContainsExactly(expectedItem); es.unlockWrites(INDEX_TYPE_ACTIVE_RULE); }