blob: 32a0a066fffc1048421d4c9a3238a475a1dd31c3 (
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
|
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.clustercontroller.core.restapiv2.requests;
import com.yahoo.vespa.clustercontroller.core.RemoteClusterControllerTask;
import com.yahoo.vespa.clustercontroller.core.RemoteClusterControllerTaskScheduler;
import com.yahoo.vespa.clustercontroller.core.restapiv2.*;
import com.yahoo.vespa.clustercontroller.utils.staterestapi.errors.StateRestApiException;
import com.yahoo.vespa.clustercontroller.utils.staterestapi.response.UnitResponse;
import java.util.Map;
public class ClusterListRequest extends Request<UnitResponse> {
private final int recursive;
private final ClusterControllerStateRestAPI.FleetControllerResolver resolver;
public ClusterListRequest(int recursive,
ClusterControllerStateRestAPI.FleetControllerResolver resolver)
{
super(MasterState.NEED_NOT_BE_MASTER);
this.recursive = recursive;
this.resolver = resolver;
}
@Override
public UnitResponse calculateResult(RemoteClusterControllerTask.Context context) throws StateRestApiException, OtherMasterIndexException {
return calculateResult();
}
/**
* The cluster list request is outside of the fleet controllers, and can thus not use a
* context (thus it is null all the time). Thus it must recurse into fleetcontrollers if
* needed. Adding function without context to make this obvious and hinder bad usage.
*/
private UnitResponse calculateResult() throws StateRestApiException, OtherMasterIndexException {
Response.ClusterListResponse response = new Response.ClusterListResponse();
for (Map.Entry<String, RemoteClusterControllerTaskScheduler> e : resolver.getFleetControllers().entrySet()) {
Id.Cluster clusterId = new Id.Cluster(e.getKey());
if (recursive > 0) {
ClusterStateRequest csr = new ClusterStateRequest(clusterId, recursive - 1);
e.getValue().schedule(csr);
csr.waitForCompletion();
response.addEntry("cluster", clusterId.getClusterId(), csr.getResult());
} else {
response.addLink("cluster", clusterId.getClusterId(), clusterId.toString());
}
}
return response;
}
}
|