All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.yahoo.config.model.api.Model Maven / Gradle / Ivy

There is a newer version: 8.441.21
Show newest version
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.model.api;

import com.yahoo.component.Version;
import com.yahoo.config.ConfigInstance;
import com.yahoo.config.FileReference;
import com.yahoo.config.provision.AllocatedHosts;
import com.yahoo.vespa.config.ConfigKey;
import com.yahoo.vespa.config.buildergen.ConfigDefinition;

import java.time.Instant;
import java.util.Map;
import java.util.Set;
import java.util.Collection;

/**
 * A {@link Model} represents the interface towards the model of an entire tenant, and defines methods
 * for querying this model.
 *
 * @author Ulf Lilleengen
 */
public interface Model {

    /**
     * Resolves config for a given key and config definition
     *
     * @param configKey the key to resolve
     * @param configDefinition the config definition to use for the schema
     */
    ConfigInstance.Builder getConfigInstance(ConfigKey configKey, ConfigDefinition configDefinition);

    /** Produces a set of the valid config keys for this model. */
    Set> allConfigsProduced();

    /** Returns information about all hosts used in this model. */
    Collection getHosts();

    /** Returns all the config ids available for this model. */
    Set allConfigIds();

    /** The set of files that should be distributed to the hosts in this model. */
    Set fileReferences();

    /**
     * Gets the allocated hosts for this model.
     * 
     * @return {@link AllocatedHosts} instance, if available
     */
    AllocatedHosts allocatedHosts();

    /**
     * Returns whether this application allows serving config request for a different version.
     * This is a validation override which is useful when we skip loading old config models
     * due to some problem, or when we need to try a newer version of the platform on some node.
     */
    default boolean allowModelVersionMismatch(Instant now) { return false; }

    /**
     * Returns whether old config models should be loaded (default) or not.
     * Skipping old config models is a validation override which is useful when the old model
     * version is known to contain some incompatibility with the application package
     * and it is believed that the latest model version will deliver usable config for old versions
     * requesting config.
     * 

* If a model returns true to this it should also return true to {@link #allowModelVersionMismatch} * or clients requesting config for those old models will not get config at all. */ default boolean skipOldConfigModels(Instant now) { return false; } /** Returns the version of this model. */ default Version version() { return Version.emptyVersion; } /** Returns the wanted node version of this model. */ default Version wantedNodeVersion() { return Version.emptyVersion; } /** Returns the provisioned hosts of this. */ default Provisioned provisioned() { return new Provisioned(); } /** Returns the set of document types in each content cluster. */ default Map> documentTypesByCluster() { return Map.of(); } /** Returns the set of document types in each cluster, that have an index for one of more fields. */ default Map> indexedDocumentTypesByCluster() { return Map.of(); } /** Returns the set of container clusters */ default Set applicationClusterInfo() { return Set.of(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy