99import com .yahoo .collections .Pair ;
1010import com .yahoo .component .Version ;
1111import com .yahoo .component .annotation .Inject ;
12+ import com .yahoo .component .provider .ComponentRegistry ;
1213import com .yahoo .config .FileReference ;
1314import com .yahoo .config .application .api .ApplicationFile ;
1415import com .yahoo .config .application .api .ApplicationMetaData ;
7778import com .yahoo .vespa .config .server .http .v2 .PrepareResult ;
7879import com .yahoo .vespa .config .server .http .v2 .response .DeploymentMetricsResponse ;
7980import com .yahoo .vespa .config .server .http .v2 .response .SearchNodeMetricsResponse ;
81+ import com .yahoo .vespa .config .server .metrics .ClusterDeploymentMetricsRetriever ;
82+ import com .yahoo .config .provision .NodeSuspensionProvider ;
8083import com .yahoo .vespa .config .server .metrics .DeploymentMetricsRetriever ;
8184import com .yahoo .vespa .config .server .metrics .SearchNodeMetricsRetriever ;
8285import com .yahoo .vespa .config .server .provision .HostProvisionerProvider ;
@@ -165,6 +168,7 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye
165168 private final ClusterReindexingStatusClient clusterReindexingStatusClient ;
166169 private final ActiveTokenFingerprints activeTokenFingerprints ;
167170 private final FlagSource flagSource ;
171+ private final DeploymentMetricsRetriever deploymentMetricsRetriever ;
168172
169173 @ Inject
170174 public ApplicationRepository (TenantRepository tenantRepository ,
@@ -177,11 +181,12 @@ public ApplicationRepository(TenantRepository tenantRepository,
177181 TesterClient testerClient ,
178182 HealthCheckerProvider healthCheckers ,
179183 Metric metric ,
180- FlagSource flagSource ) {
184+ FlagSource flagSource ,
185+ ComponentRegistry <NodeSuspensionProvider > nodeSuspensionProviders ) {
181186 this (tenantRepository ,
182187 hostProvisionerProvider .getHostProvisioner (),
183188 infraDeployerProvider .getInfraDeployer (),
184- configConvergenceChecker ,
189+ configConvergenceChecker ,
185190 configStateChecker ,
186191 httpProxy ,
187192 EndpointsChecker .of (healthCheckers .getHealthChecker ()),
@@ -193,7 +198,16 @@ public ApplicationRepository(TenantRepository tenantRepository,
193198 new SecretStoreValidator (),
194199 new DefaultClusterReindexingStatusClient (),
195200 new ActiveTokenFingerprintsClient (),
196- flagSource );
201+ flagSource ,
202+ new DeploymentMetricsRetriever (new ClusterDeploymentMetricsRetriever (),
203+ nodeSuspensionProvider (nodeSuspensionProviders )));
204+ }
205+
206+ private static NodeSuspensionProvider nodeSuspensionProvider (ComponentRegistry <NodeSuspensionProvider > registry ) {
207+ var providers = registry .allComponents ();
208+ if (providers .size () > 1 )
209+ throw new IllegalArgumentException ("Multiple NodeSuspensionProvider components registered: " + providers );
210+ return providers .isEmpty () ? NodeSuspensionProvider .EMPTY : providers .get (0 );
197211 }
198212
199213 private ApplicationRepository (TenantRepository tenantRepository ,
@@ -211,7 +225,8 @@ private ApplicationRepository(TenantRepository tenantRepository,
211225 SecretStoreValidator secretStoreValidator ,
212226 ClusterReindexingStatusClient clusterReindexingStatusClient ,
213227 ActiveTokenFingerprints activeTokenFingerprints ,
214- FlagSource flagSource ) {
228+ FlagSource flagSource ,
229+ DeploymentMetricsRetriever deploymentMetricsRetriever ) {
215230 this .tenantRepository = Objects .requireNonNull (tenantRepository );
216231 this .hostProvisioner = Objects .requireNonNull (hostProvisioner );
217232 this .infraDeployer = Objects .requireNonNull (infraDeployer );
@@ -228,6 +243,7 @@ private ApplicationRepository(TenantRepository tenantRepository,
228243 this .clusterReindexingStatusClient = Objects .requireNonNull (clusterReindexingStatusClient );
229244 this .activeTokenFingerprints = Objects .requireNonNull (activeTokenFingerprints );
230245 this .flagSource = flagSource ;
246+ this .deploymentMetricsRetriever = Objects .requireNonNull (deploymentMetricsRetriever );
231247 }
232248
233249 // Should be used by tests only (first constructor in this class makes sure we use injectable components where possible)
@@ -327,7 +343,8 @@ public ApplicationRepository build() {
327343 secretStoreValidator ,
328344 ClusterReindexingStatusClient .DUMMY_INSTANCE ,
329345 __ -> activeTokens ,
330- flagSource );
346+ flagSource ,
347+ new DeploymentMetricsRetriever ());
331348 }
332349
333350 }
@@ -983,7 +1000,6 @@ public SearchNodeMetricsResponse getSearchNodeMetrics(ApplicationId applicationI
9831000
9841001 public DeploymentMetricsResponse getDeploymentMetrics (ApplicationId applicationId ) {
9851002 Application application = getApplication (applicationId );
986- DeploymentMetricsRetriever deploymentMetricsRetriever = new DeploymentMetricsRetriever ();
9871003 return deploymentMetricsRetriever .getMetrics (application );
9881004 }
9891005
0 commit comments