/** * Add the tag family index to the search database. See {@link TagFamilyEntry#composeIndexName(String)} for details. * * @param projectUuid * @return Fluent API */ default SearchQueueBatch createTagFamilyIndex(String projectUuid) { return createIndex(TagFamily.composeIndexName(projectUuid), TagFamily.class); }
@Override public Set<String> filterUnknownIndices(Set<String> indices) { return db.tx(() -> { Set<String> activeIndices = new HashSet<>(); for (Project project : boot.meshRoot().getProjectRoot().findAll()) { activeIndices.add(TagFamily.composeIndexName(project.getUuid())); } return indices.stream() .filter(i -> i.startsWith(getType())) .filter(i -> !activeIndices.contains(i)) .collect(Collectors.toSet()); }); }
@Override protected String composeIndexNameFromEntry(UpdateDocumentEntry entry) { return TagFamily.composeIndexName(entry.getContext().getProjectUuid()); }
@Override public Set<String> getSelectedIndices(InternalActionContext ac) { return db.tx(() -> { Project project = ac.getProject(); if (project != null) { return Collections.singleton(TagFamily.composeIndexName(project.getUuid())); } else { return getIndices().keySet(); } }); }
@Override public Map<String, IndexInfo> getIndices() { return db.tx(() -> { ProjectRoot root = boot.meshRoot().getProjectRoot(); Map<String, IndexInfo> indexInfo = new HashMap<>(); for (Project project : root.findAll()) { String indexName = TagFamily.composeIndexName(project.getUuid()); IndexInfo info = new IndexInfo(indexName, null, getMappingProvider().getMapping(), "tagFamily"); indexInfo.put(indexName, info); } return indexInfo; }); }
/** * Assert that the tag family was stored in the index. * * @param tagfamily * @return Fluent API */ public DummySearchProviderAssert stored(TagFamily tagfamily) { assertThat(actual).hasStore(TagFamily.composeIndexName(tagfamily.getProject().getUuid()), TagFamily.composeDocumentId(tagfamily.getUuid())); return this; }
@Override public Completable syncIndices() { return Completable.defer(() -> { return db.tx(() -> { ProjectRoot root = boot.meshRoot().getProjectRoot(); SyncMetric metric = new SyncMetric(getType()); Set<Completable> actions = new HashSet<>(); for (Project project : root.findAll()) { String uuid = project.getUuid(); String indexName = TagFamily.composeIndexName(uuid); actions.add(diffAndSync(indexName, uuid, metric)); } return Completable.merge(actions); }); }); }