diff options
author | Håkon Hallingstad <hakon@oath.com> | 2019-01-09 12:08:53 +0100 |
---|---|---|
committer | Håkon Hallingstad <hakon@oath.com> | 2019-01-09 12:08:53 +0100 |
commit | 68cbb82330cb610ff3e3462a7ec704f78e49a31c (patch) | |
tree | 6c3a996789700f24037a2c6a4d4d37f7f643ea60 /configserver | |
parent | 8bec9bc0719af7ee27cda0f0d6d6b3627d155180 (diff) |
Flag repository cfg client and flag directory
- Makes new FlagRepository config server client to retrieve all flag data.
- Makes WireFlagDataList to be used for creating the HTTP response in the
config server, and parse the HTTP response in host admin.
- Fixes problem with URL generation for controller: when port is not present
in the request, remove ":-1" port specification in the url.
- Makes a new FlagDirectory class, responsible for reading flags from
/opt/vespa/var/vespa/flags (in FlagData JSON format), and reversely,
sync that directory to exactly match a set of FlagData.
- No longer have 'State state()' as a default method in interface.
Diffstat (limited to 'configserver')
3 files changed, 25 insertions, 14 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/flags/FlagDataListResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/flags/FlagDataListResponse.java index ae72660ce9f..b33fc7c2b04 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/flags/FlagDataListResponse.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/flags/FlagDataListResponse.java @@ -9,6 +9,7 @@ import com.yahoo.jdisc.Response; import com.yahoo.vespa.config.server.http.HttpConfigResponse; import com.yahoo.vespa.flags.FlagId; import com.yahoo.vespa.flags.json.FlagData; +import com.yahoo.vespa.flags.json.wire.WireFlagDataList; import java.io.OutputStream; import java.util.Map; @@ -23,31 +24,32 @@ public class FlagDataListResponse extends HttpResponse { private static ObjectMapper mapper = new ObjectMapper(); private final String flagsV1Uri; - private final Map<FlagId, FlagData> flags; + private final TreeMap<FlagId, FlagData> flags; private final boolean recursive; public FlagDataListResponse(String flagsV1Uri, Map<FlagId, FlagData> flags, boolean recursive) { super(Response.Status.OK); this.flagsV1Uri = flagsV1Uri; - this.flags = flags; + this.flags = new TreeMap<>(flags); this.recursive = recursive; } @Override public void render(OutputStream outputStream) { - ObjectNode rootNode = mapper.createObjectNode(); - ArrayNode flagsArray = rootNode.putArray("flags"); - // Order flags by ID - new TreeMap<>(this.flags).forEach((flagId, flagData) -> { - if (recursive) { - flagsArray.add(flagData.toJsonNode()); - } else { + if (recursive) { + WireFlagDataList list = new WireFlagDataList(); + flags.values().forEach(flagData -> list.flags.add(flagData.toWire())); + list.serializeToOutputStream(outputStream); + } else { + ObjectNode rootNode = mapper.createObjectNode(); + ArrayNode flagsArray = rootNode.putArray("flags"); + flags.forEach((flagId, flagData) -> { ObjectNode object = flagsArray.addObject(); object.put("id", flagId.toString()); object.put("url", flagsV1Uri + "/data/" + flagId.toString()); - } - }); - uncheck(() -> mapper.writeValue(outputStream, rootNode)); + }); + uncheck(() -> mapper.writeValue(outputStream, rootNode)); + } } @Override diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/flags/FlagsHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/flags/FlagsHandler.java index e5efc74fb75..1b1595eb897 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/flags/FlagsHandler.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/flags/FlagsHandler.java @@ -64,7 +64,8 @@ public class FlagsHandler extends HttpHandler { private String flagsV1Uri(HttpRequest request) { URI uri = request.getUri(); - return uri.getScheme() + "://" + uri.getHost() + ":" + uri.getPort() + "/flags/v1"; + String port = uri.getPort() < 0 ? "" : ":" + uri.getPort(); + return uri.getScheme() + "://" + uri.getHost() + port + "/flags/v1"; } private HttpResponse getFlagDataList(HttpRequest request) { diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/flags/FlagsHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/flags/FlagsHandlerTest.java index 71caed77dbe..11958454a70 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/flags/FlagsHandlerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/flags/FlagsHandlerTest.java @@ -89,6 +89,10 @@ public class FlagsHandlerTest { verifySuccessfulRequest(Method.GET, "/data/", "", "{\"flags\":[{\"id\":\"id1\",\"url\":\"https://foo.com:4443/flags/v1/data/id1\"}]}"); + // Verify absent port => absent in response + assertThat(handleWithPort(Method.GET, -1, "/data", "", 200), + is("{\"flags\":[{\"id\":\"id1\",\"url\":\"https://foo.com/flags/v1/data/id1\"}]}")); + // PUT id2 verifySuccessfulRequest(Method.PUT, "/data/" + FLAG2.id(), "{\n" + @@ -175,7 +179,11 @@ public class FlagsHandlerTest { } private String handle(Method method, String pathSuffix, String requestBody, int expectedStatus) { - String uri = FLAGS_V1_URL + pathSuffix; + return handleWithPort(method, 4443, pathSuffix, requestBody, expectedStatus); + } + + private String handleWithPort(Method method, int port, String pathSuffix, String requestBody, int expectedStatus) { + String uri = "https://foo.com" + (port < 0 ? "" : ":" + port) + "/flags/v1" + pathSuffix; HttpRequest request = HttpRequest.createTestRequest(uri, method, makeInputStream(requestBody)); HttpResponse response = handler.handle(request); assertEquals(expectedStatus, response.getStatus()); |