aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2024-03-15 08:47:17 +0100
committerGitHub <noreply@github.com>2024-03-15 08:47:17 +0100
commitf1469547deb26ffcf7235d3228af73e437def820 (patch)
tree5974b4d5f0aaab938ed8d19e88b02cfa21d1b43a /config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java
parent72cc15dd50ba6a53cee65753586271e4859c6b4f (diff)
Revert "Revert "Single searchcluster take 2""
Diffstat (limited to 'config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java142
1 files changed, 33 insertions, 109 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java
index 4d6f454f7e0..469901bb542 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java
@@ -21,7 +21,6 @@ import com.yahoo.vespa.model.search.NodeSpec;
import com.yahoo.vespa.model.search.SchemaDefinitionXMLHandler;
import com.yahoo.vespa.model.search.SearchCluster;
import com.yahoo.vespa.model.search.SearchNode;
-import com.yahoo.vespa.model.search.StreamingSearchCluster;
import com.yahoo.vespa.model.search.TransactionLogServer;
import com.yahoo.vespa.model.search.Tuning;
import org.w3c.dom.Element;
@@ -31,7 +30,6 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.LinkedHashMap;
-import java.util.Optional;
import java.util.Objects;
import java.util.TreeMap;
import java.util.function.Predicate;
@@ -104,12 +102,12 @@ public class ContentSearchCluster extends TreeConfigProducer<AnyConfigProducer>
Boolean syncTransactionLog = clusterElem.childAsBoolean("engine.proton.sync-transactionlog");
var search = new ContentSearchCluster(ancestor, clusterName,
- deployState.getProperties().featureFlags(),
- documentDefinitions,
- globallyDistributedDocuments,
- getFlushOnShutdown(flushOnShutdownElem),
- syncTransactionLog,
- fractionOfMemoryReserved);
+ deployState.getProperties().featureFlags(),
+ documentDefinitions,
+ globallyDistributedDocuments,
+ getFlushOnShutdown(flushOnShutdownElem),
+ syncTransactionLog,
+ fractionOfMemoryReserved);
ModelElement tuning = clusterElem.childByPath("engine.proton.tuning");
if (tuning != null) {
@@ -117,8 +115,7 @@ public class ContentSearchCluster extends TreeConfigProducer<AnyConfigProducer>
}
search.setResourceLimits(resourceLimits);
- buildAllStreamingSearchClusters(deployState, clusterElem, clusterName, search);
- buildIndexedSearchCluster(deployState, clusterElem, clusterName, search);
+ buildSearchCluster(deployState, clusterElem, clusterName, search);
return search;
}
@@ -130,73 +127,18 @@ public class ContentSearchCluster extends TreeConfigProducer<AnyConfigProducer>
return clusterElem.childAsDouble("engine.proton.query-timeout");
}
- private static Schema findResponsibleSchema(DeployState deployState, String docTypeName) {
- var schemas = deployState.getSchemas();
- for (var candidate : schemas) {
- if (candidate.getName().equals(docTypeName)) {
- return candidate;
- }
- }
- return null;
- }
-
- private void buildAllStreamingSearchClusters(DeployState deployState, ModelElement clusterElem, String clusterName, ContentSearchCluster search) {
+ private void buildSearchCluster(DeployState deployState, ModelElement clusterElem,
+ String clusterName, ContentSearchCluster search) {
ModelElement docElem = clusterElem.child("documents");
+ if (docElem == null) return;
- if (docElem == null) {
- return;
+ Double visibilityDelay = clusterElem.childAsDouble("engine.proton.visibility-delay");
+ if (visibilityDelay != null) {
+ search.setVisibilityDelay(visibilityDelay);
}
- for (ModelElement docType : docElem.subElements("document")) {
- String docTypeName = docType.stringAttribute("type");
- String mode = docType.stringAttribute("mode");
- var schema = findResponsibleSchema(deployState, docTypeName);
- if ("streaming".equals(mode) && schema != null && !schema.isDocumentsOnly()) {
- buildStreamingSearchCluster(deployState, clusterElem, clusterName, search, docType);
- }
- }
- }
-
- private void buildStreamingSearchCluster(DeployState deployState, ModelElement clusterElem, String clusterName,
- ContentSearchCluster search, ModelElement docType) {
- String docTypeName = docType.stringAttribute("type");
- StreamingSearchCluster cluster = new StreamingSearchCluster(search,
- clusterName + "." + docTypeName,
- 0,
- docTypeName,
- clusterName);
- search.addSearchCluster(deployState, cluster, getQueryTimeout(clusterElem), List.of(docType));
- }
-
- private void buildIndexedSearchCluster(DeployState deployState, ModelElement clusterElem,
- String clusterName, ContentSearchCluster search) {
- List<ModelElement> indexedDefs = getIndexedSchemas(clusterElem);
- if (!indexedDefs.isEmpty()) {
- IndexedSearchCluster isc = new IndexedSearchCluster(search, clusterName, 0, search, deployState.featureFlags());
-
- Double visibilityDelay = clusterElem.childAsDouble("engine.proton.visibility-delay");
- if (visibilityDelay != null) {
- search.setVisibilityDelay(visibilityDelay);
- }
-
- search.addSearchCluster(deployState, isc, getQueryTimeout(clusterElem), indexedDefs);
- }
- }
-
- private List<ModelElement> getIndexedSchemas(ModelElement clusterElem) {
- List<ModelElement> indexedDefs = new ArrayList<>();
- ModelElement docElem = clusterElem.child("documents");
- if (docElem == null) {
- return indexedDefs;
- }
-
- for (ModelElement docType : docElem.subElements("document")) {
- String mode = docType.stringAttribute("mode");
- if ("index".equals(mode)) {
- indexedDefs.add(docType);
- }
- }
- return indexedDefs;
+ IndexedSearchCluster isc = new IndexedSearchCluster(search, clusterName, 0, search, deployState.featureFlags());
+ search.addSearchCluster(deployState, isc, getQueryTimeout(clusterElem), docElem.subElements("document"));
}
}
@@ -247,9 +189,12 @@ public class ContentSearchCluster extends TreeConfigProducer<AnyConfigProducer>
cluster.setQueryTimeout(queryTimeout);
}
cluster.deriveFromSchemas(deployState);
- addCluster(cluster);
+ if ( ! cluster.schemas().values().stream().allMatch(schemaInfo -> schemaInfo.getIndexMode() == SchemaInfo.IndexMode.STORE_ONLY)) {
+ addCluster(cluster);
+ }
}
+
private void addSchemas(DeployState deployState, List<ModelElement> searchDefs, SearchCluster sc) {
for (ModelElement e : searchDefs) {
SchemaDefinitionXMLHandler schemaDefinitionXMLHandler = new SchemaDefinitionXMLHandler(e);
@@ -257,6 +202,7 @@ public class ContentSearchCluster extends TreeConfigProducer<AnyConfigProducer>
if (schema == null)
throw new IllegalArgumentException("Schema '" + schemaDefinitionXMLHandler.getName() + "' referenced in " +
this + " does not exist");
+ if (schema.isDocumentsOnly()) continue;
sc.add(new SchemaInfo(schema, e.stringAttribute("mode"), deployState.rankProfileRegistry(), null));
}
@@ -282,15 +228,9 @@ public class ContentSearchCluster extends TreeConfigProducer<AnyConfigProducer>
* with indexing, null if it has both or none.
*/
public Boolean isStreaming() {
- boolean hasStreaming = false;
- boolean hasIndexed = false;
- for (var cluster : clusters.values()) {
- if (cluster.hasStreaming())
- hasStreaming = true;
- else
- hasIndexed = true;
- }
- if (hasIndexed == hasStreaming) return null;
+ if (indexedCluster == null) return false;
+ boolean hasStreaming = indexedCluster.hasStreaming();
+ if (indexedCluster.hasIndexed() == hasStreaming) return null;
return hasStreaming;
}
@@ -356,21 +296,6 @@ public class ContentSearchCluster extends TreeConfigProducer<AnyConfigProducer>
this.redundancy = redundancy;
}
- private Optional<StreamingSearchCluster> findStreamingCluster(String docType) {
- return getClusters().values().stream()
- .filter(StreamingSearchCluster.class::isInstance)
- .map(StreamingSearchCluster.class::cast)
- .filter(ssc -> ssc.schemas().get(docType) != null)
- .findFirst();
- }
-
- public List<StreamingSearchCluster> getStreamingClusters() {
- return getClusters().values().stream()
- .filter(StreamingSearchCluster.class::isInstance)
- .map(StreamingSearchCluster.class::cast)
- .toList();
- }
-
public List<NewDocumentType> getDocumentTypesWithStreamingCluster() { return documentTypes(this::hasIndexingModeStreaming); }
public List<NewDocumentType> getDocumentTypesWithIndexedCluster() { return documentTypes(this::hasIndexingModeIndexed); }
public List<NewDocumentType> getDocumentTypesWithStoreOnly() { return documentTypes(this::hasIndexingModeStoreOnly); }
@@ -382,13 +307,13 @@ public class ContentSearchCluster extends TreeConfigProducer<AnyConfigProducer>
}
private boolean hasIndexingModeStreaming(NewDocumentType type) {
- return findStreamingCluster(type.getFullName().getName()).isPresent();
+ if (indexedCluster == null) return false;
+ return indexedCluster.schemas().get(type.getName()).getIndexMode() == SchemaInfo.IndexMode.STREAMING;
}
private boolean hasIndexingModeIndexed(NewDocumentType type) {
- return !hasIndexingModeStreaming(type)
- && hasIndexedCluster()
- && getIndexed().hasDocumentDB(type.getFullName().getName());
+ if (indexedCluster == null) return false;
+ return indexedCluster.schemas().get(type.getName()).getIndexMode() == SchemaInfo.IndexMode.INDEX;
}
private boolean hasIndexingModeStoreOnly(NewDocumentType type) {
@@ -397,7 +322,7 @@ public class ContentSearchCluster extends TreeConfigProducer<AnyConfigProducer>
@Override
public void getConfig(ProtonConfig.Builder builder) {
- boolean hasAnyNonIndexedCluster = false;
+ boolean hasAnyNonIndexedSchema = false;
for (NewDocumentType type : TopologicalDocumentTypeSorter.sort(documentDefinitions.values())) {
ProtonConfig.Documentdb.Builder ddbB = new ProtonConfig.Documentdb.Builder();
String docTypeName = type.getFullName().getName();
@@ -409,13 +334,13 @@ public class ContentSearchCluster extends TreeConfigProducer<AnyConfigProducer>
ddbB.allocation.max_compact_buffers(defaultMaxCompactBuffers);
if (hasIndexingModeStreaming(type)) {
- hasAnyNonIndexedCluster = true;
- findStreamingCluster(docTypeName).get().fillDocumentDBConfig(type.getFullName().getName(), ddbB);
+ hasAnyNonIndexedSchema = true;
+ indexedCluster.fillDocumentDBConfig(type.getFullName().getName(), ddbB);
ddbB.mode(ProtonConfig.Documentdb.Mode.Enum.STREAMING);
} else if (hasIndexingModeIndexed(type)) {
- getIndexed().fillDocumentDBConfig(type.getFullName().getName(), ddbB);
+ indexedCluster.fillDocumentDBConfig(type.getFullName().getName(), ddbB);
} else {
- hasAnyNonIndexedCluster = true;
+ hasAnyNonIndexedSchema = true;
ddbB.mode(ProtonConfig.Documentdb.Mode.Enum.STORE_ONLY);
}
if (globalDocType) {
@@ -424,7 +349,7 @@ public class ContentSearchCluster extends TreeConfigProducer<AnyConfigProducer>
builder.documentdb(ddbB);
}
- if (hasAnyNonIndexedCluster) {
+ if (hasAnyNonIndexedSchema) {
builder.feeding.concurrency(Math.min(1.0, defaultFeedConcurrency*2));
} else {
builder.feeding.concurrency(defaultFeedConcurrency);
@@ -478,7 +403,6 @@ public class ContentSearchCluster extends TreeConfigProducer<AnyConfigProducer>
getIndexed().getConfig(builder);
}
}
- public Map<String, SearchCluster> getClusters() { return clusters; }
public IndexedSearchCluster getIndexed() { return indexedCluster; }
public boolean hasIndexedCluster() { return indexedCluster != null; }
public IndexingDocproc getIndexingDocproc() { return indexingDocproc; }