diff options
author | Ola Aunrønning <ola.aunroe@gmail.com> | 2018-10-08 10:22:53 +0200 |
---|---|---|
committer | Ola Aunrønning <ola.aunroe@gmail.com> | 2018-10-08 16:14:33 +0200 |
commit | e4adda540be339c150e12012e069c8dc44bbdb9c (patch) | |
tree | 0e6d29f48636406432eef9ca73c1ce7ce07bd0c2 /controller-server/src/main/java/com | |
parent | 1080f50c95b182df3ad8f88d0a3fdf56d8cd6e38 (diff) |
Added slime functionality to Contact,tests, and system check for Maintainer
Diffstat (limited to 'controller-server/src/main/java/com')
4 files changed, 57 insertions, 31 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ContactInformationMaintainer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ContactInformationMaintainer.java index 5a825bf7b85..650d3d6a812 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ContactInformationMaintainer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ContactInformationMaintainer.java @@ -1,6 +1,7 @@ // Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.maintenance; +import com.yahoo.config.provision.SystemName; import com.yahoo.log.LogLevel; import com.yahoo.vespa.hosted.controller.Controller; import com.yahoo.vespa.hosted.controller.api.integration.organization.Organization; @@ -11,6 +12,7 @@ import com.yahoo.vespa.hosted.controller.tenant.Tenant; import com.yahoo.yolean.Exceptions; import java.time.Duration; +import java.util.Arrays; import java.util.List; import java.util.Objects; import java.util.Optional; @@ -29,7 +31,7 @@ public class ContactInformationMaintainer extends Maintainer { private final Organization organization; public ContactInformationMaintainer(Controller controller, Duration interval, JobControl jobControl, Organization organization) { - super(controller, interval, jobControl); + super(Arrays.asList(SystemName.main, SystemName.cd), controller, interval, jobControl); this.organization = Objects.requireNonNull(organization, "organization must be non-null"); } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/Maintainer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/Maintainer.java index d76f557fce1..54e9dddd649 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/Maintainer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/Maintainer.java @@ -2,10 +2,13 @@ package com.yahoo.vespa.hosted.controller.maintenance; import com.yahoo.component.AbstractComponent; +import com.yahoo.config.provision.SystemName; import com.yahoo.vespa.curator.Lock; import com.yahoo.vespa.hosted.controller.Controller; import java.time.Duration; +import java.util.ArrayList; +import java.util.List; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -27,16 +30,23 @@ public abstract class Maintainer extends AbstractComponent implements Runnable { private final JobControl jobControl; private final ScheduledExecutorService service; private final String name; + private List<SystemName> systemNames; public Maintainer(Controller controller, Duration interval, JobControl jobControl) { this(controller, interval, jobControl, null); } + public Maintainer(List<SystemName> systemNames, Controller controller, Duration interval, JobControl jobControl) { + this(controller, interval, jobControl, null); + this.systemNames = systemNames; + } + public Maintainer(Controller controller, Duration interval, JobControl jobControl, String name) { this.controller = controller; this.maintenanceInterval = interval; this.jobControl = jobControl; this.name = name; + this.systemNames = new ArrayList<>(); service = new ScheduledThreadPoolExecutor(1); service.scheduleAtFixedRate(this, interval.toMillis(), interval.toMillis(), TimeUnit.MILLISECONDS); @@ -48,7 +58,8 @@ public abstract class Maintainer extends AbstractComponent implements Runnable { @Override public void run() { try { - if (jobControl.isActive(name())) { + boolean correctSystem = systemNames.isEmpty() || systemNames.contains(controller.system()); + if (jobControl.isActive(name()) && correctSystem) { try (Lock lock = jobControl.curator().lockMaintenanceJob(name())) { maintain(); } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/contactinfo/ContactInfoHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/contactinfo/ContactInfoHandler.java index 93734d2e00c..5ea926afff6 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/contactinfo/ContactInfoHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/contactinfo/ContactInfoHandler.java @@ -72,14 +72,13 @@ public class ContactInfoHandler extends LoggingRequestHandler { private HttpResponse get(HttpRequest request) { Path path = new Path(request.getUri().getPath()); - if (!path.matches("/contactinfo/v1/tenant/{tenant}")) return getContactInfo(path.get("tenant"), request); + if (path.matches("/contactinfo/v1/tenant/{tenant}")) return getContactInfo(path.get("tenant"), request); return ErrorResponse.notFoundError("Nothing at " + path); } private HttpResponse post(HttpRequest request) { Path path = new Path(request.getUri().getPath()); - if (path.matches("/contactinfo/v1/tenant/{tenant}")) - return postContactInfo(path.get("tenant"), request); + if (path.matches("/contactinfo/v1/tenant/{tenant}")) return postContactInfo(path.get("tenant"), request); return ErrorResponse.notFoundError("Nothing at " + path); } @@ -96,18 +95,7 @@ public class ContactInfoHandler extends LoggingRequestHandler { contact = tenant.get().contact(); } if (contact.isPresent()) { - Slime response = new Slime(); - Cursor cursor = response.setObject(); - cursor.setString("issueTrackerUrl", contact.get().issueTrackerUrl().toString()); - cursor.setString("propertyUrl", contact.get().propertyUrl().toString()); - Cursor persons = cursor.setArray("persons"); - for (List<String> personList : contact.get().persons()) { - Cursor sublist = persons.addArray(); - for(String person : personList) { - sublist.addString(person); - } - } - return new SlimeJsonResponse(response); + return new SlimeJsonResponse(contact.get().toSlime()); } return ErrorResponse.notFoundError("Could not find contact info for " + tenantName); } @@ -147,20 +135,7 @@ public class ContactInfoHandler extends LoggingRequestHandler { private Contact getContactFromRequest(HttpRequest request) throws IOException, URISyntaxException { Slime slime = SlimeUtils.jsonToSlime(IOUtils.readBytes(request.getData(), 1000 * 1000)); - Inspector inspector = slime.get(); - URI propertyUrl = new URI(inspector.field("propertyUrl").asString()); - URI url = new URI(inspector.field("url").asString()); - URI issueTrackerUrl = new URI(inspector.field("issueTrackerUrl").asString()); - Inspector personInspector = inspector.field("persons"); - List<List<String>> personList = new ArrayList<>(); - personInspector.traverse((ArrayTraverser) (index, entry) -> { - List<String> subList = new ArrayList<>(); - entry.traverse((ArrayTraverser) (idx, subEntry) -> { - subList.add(subEntry.asString()); - }); - personList.add(subList); - }); - return new Contact(url, propertyUrl, issueTrackerUrl, personList); + return Contact.fromSlime(slime); } private Optional<Contact> findContactFromOpsDb(AthenzTenant tenant) { diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/tenant/Contact.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/tenant/Contact.java index e13b0f982da..cd77a42c7c0 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/tenant/Contact.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/tenant/Contact.java @@ -2,8 +2,13 @@ package com.yahoo.vespa.hosted.controller.tenant; import com.google.common.collect.ImmutableList; +import com.yahoo.slime.ArrayTraverser; +import com.yahoo.slime.Cursor; +import com.yahoo.slime.Inspector; +import com.yahoo.slime.Slime; import java.net.URI; +import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -46,6 +51,39 @@ public class Contact { return persons; } + public Slime toSlime() { + Slime slime = new Slime(); + Cursor cursor = slime.setObject(); + cursor.setString("url", url.toString()); + cursor.setString("issueTrackerUrl", issueTrackerUrl.toString()); + cursor.setString("propertyUrl", propertyUrl.toString()); + Cursor personsCursor = cursor.setArray("persons"); + for (List<String> personList : persons) { + Cursor sublist = personsCursor.addArray(); + for(String person : personList) { + sublist.addString(person); + } + } + return slime; + } + + public static Contact fromSlime(Slime slime) { + Inspector inspector = slime.get(); + URI propertyUrl = URI.create(inspector.field("propertyUrl").asString()); + URI url = URI.create(inspector.field("url").asString()); + URI issueTrackerUrl = URI.create(inspector.field("issueTrackerUrl").asString()); + Inspector personInspector = inspector.field("persons"); + List<List<String>> personList = new ArrayList<>(); + personInspector.traverse((ArrayTraverser) (index, entry) -> { + List<String> subList = new ArrayList<>(); + entry.traverse((ArrayTraverser) (idx, subEntry) -> { + subList.add(subEntry.asString()); + }); + personList.add(subList); + }); + return new Contact(url, propertyUrl, issueTrackerUrl, personList); + } + @Override public boolean equals(Object o) { if (this == o) return true; |