summaryrefslogtreecommitdiffstats
path: root/controller-server/src/main/java/com
diff options
context:
space:
mode:
authorOla Aunrønning <ola.aunroe@gmail.com>2018-10-08 10:22:53 +0200
committerOla Aunrønning <ola.aunroe@gmail.com>2018-10-08 16:14:33 +0200
commite4adda540be339c150e12012e069c8dc44bbdb9c (patch)
tree0e6d29f48636406432eef9ca73c1ce7ce07bd0c2 /controller-server/src/main/java/com
parent1080f50c95b182df3ad8f88d0a3fdf56d8cd6e38 (diff)
Added slime functionality to Contact,tests, and system check for Maintainer
Diffstat (limited to 'controller-server/src/main/java/com')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ContactInformationMaintainer.java4
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/Maintainer.java13
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/contactinfo/ContactInfoHandler.java33
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/tenant/Contact.java38
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;