aboutsummaryrefslogtreecommitdiffstats
path: root/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java
blob: fa4fee417fd89bf36e57acbf9b5d607dcd5f6691 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// Copyright 2017 Yahoo Holdings. 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.application.api.ApplicationPackage;
import com.yahoo.config.application.api.DeployLogger;
import com.yahoo.config.application.api.FileRegistry;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.AthenzDomain;
import com.yahoo.config.provision.DockerImage;
import com.yahoo.config.provision.HostName;
import com.yahoo.config.provision.Zone;

import java.io.File;
import java.net.URI;
import java.time.Duration;
import java.util.List;
import java.util.Optional;
import java.util.Set;

/**
 * Model context containing state provided to model factories.
 *
 * @author Ulf Lilleengen
 */
public interface ModelContext {

    ApplicationPackage applicationPackage();
    Optional<Model> previousModel();
    Optional<ApplicationPackage> permanentApplicationPackage();
    Optional<HostProvisioner> hostProvisioner();
    Provisioned provisioned();
    DeployLogger deployLogger();
    ConfigDefinitionRepo configDefinitionRepo();
    FileRegistry getFileRegistry();
    Properties properties();
    default Optional<File> appDir() { return Optional.empty();}

    /** The Docker image repo we want to use for images for this deployment (optional, will use default if empty) */
    default Optional<DockerImage> wantedDockerImageRepo() { return Optional.empty(); }

    /** The Vespa version this model is built for */
    Version modelVespaVersion();

    /** The Vespa version we want nodes to become */
    Version wantedNodeVespaVersion();

    /** Warning: As elsewhere in this package, do not make backwards incompatible changes that will break old config models! */
    interface Properties {
        boolean multitenant();
        ApplicationId applicationId();
        List<ConfigServerSpec> configServerSpecs();
        HostName loadBalancerName();
        URI ztsUrl();
        String athenzDnsSuffix();
        boolean hostedVespa();
        Zone zone();
        Set<ContainerEndpoint> endpoints();
        boolean isBootstrap();
        boolean isFirstTimeDeployment();

        // TODO: Only needed for LbServicesProducerTest
        default boolean useDedicatedNodeForLogserver() { return true; }

        default Optional<EndpointCertificateSecrets> endpointCertificateSecrets() { return Optional.empty(); }

        // TODO Revisit in May or June 2020
        double defaultTermwiseLimit();

        default int defaultNumResponseThreads() { return 2; }

        // TODO(bjorncs) Temporary feature flag
        default double threadPoolSizeFactor() { return 2.0; }

        // TODO(bjorncs) Temporary feature flag
        default double queueSizeFactor() { return 40.0; };

        /// Default setting for the gc-options attribute if not specified explicit by application
        String jvmGCOptions();

        // Select sequencer type use while feeding.
        String feedSequencerType();
        String responseSequencerType();
        boolean skipCommunicationManagerThread();
        boolean skipMbusRequestThread();
        boolean skipMbusReplyThread();
        boolean tlsUseFSync();
        String tlsCompressionType();
        double visibilityDelay();

        boolean useContentNodeBtreeDb();

        boolean useThreePhaseUpdates();

        // TODO Remove on 7.XXX when this is default on.
        boolean useDirectStorageApiRpc();

        // TODO Remove on 7.XXX when this is default on.
        boolean useFastValueTensorImplementation();

        // TODO(bjorncs) Temporary feature flag
        default String proxyProtocol() { return "https+proxy-protocol"; }

        default Optional<AthenzDomain> athenzDomain() { return Optional.empty(); }

        // TODO(mpolden): Remove after May 2020
        default boolean useDedicatedNodesWhenUnspecified() { return true; }

        Optional<ApplicationRoles> applicationRoles();

        // TODO(bjorncs): Temporary feature flag, revisit August 2020
        default Duration jdiscHealthCheckProxyClientTimeout() { return Duration.ofMillis(100); }

        // TODO(bjorncs): Temporary feature flag
        default double feedCoreThreadPoolSizeFactor() { return 4.0; }

        default Quota quota() {
            return Quota.unlimited();
        }

        // TODO(bjorncs): Temporary feature flag
        default boolean useNewRestapiHandler() { return false; }

        // TODO(mortent): Temporary feature flag
        default boolean useAccessControlTlsHandshakeClientAuth() { return false; }

        // TODO(bjorncs): Temporary feature flag
        default double jettyThreadpoolSizeFactor() { return 0.0; }

    }

}