summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorMartin Polden <martin.polden@gmail.com>2017-03-01 14:24:07 +0100
committerMartin Polden <martin.polden@gmail.com>2017-03-06 11:19:18 +0100
commitfc3b6392a82aa80358e5cf032ce06fc4c3cd78cd (patch)
treeec23b94b9412bf5980dd14cf980b3c57c53e09fe /node-repository
parent4ce3ef0768252f6f7c7edf86061baee36b04e51b (diff)
Fix serialization TODOs
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java4
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java19
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClientTest.java7
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/SerializationTest.java92
4 files changed, 29 insertions, 93 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java
index 759bb89de94..44b5160c61d 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java
@@ -55,8 +55,8 @@ public class CuratorDatabaseClient {
private final Zone zone;
- public CuratorDatabaseClient(NodeFlavors flavors, Curator curator, Clock clock, Zone zone, NameResolver nameResolver) {
- this.nodeSerializer = new NodeSerializer(flavors, nameResolver);
+ public CuratorDatabaseClient(NodeFlavors flavors, Curator curator, Clock clock, Zone zone) {
+ this.nodeSerializer = new NodeSerializer(flavors);
this.zone = zone;
jsonMapper.registerModule(new JodaModule());
this.curatorDatabase = new CuratorDatabase(curator, root, /* useCache: */ false);
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java
index a9a98b6f1c6..23b770137e6 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java
@@ -42,8 +42,6 @@ public class NodeSerializer {
/** The configured node flavors */
private final NodeFlavors flavors;
- private final NameResolver nameResolver;
-
// Node fields
private static final String hostnameKey = "hostname";
private static final String ipAddressesKey = "ipAddresses";
@@ -81,9 +79,8 @@ public class NodeSerializer {
// ---------------- Serialization ----------------------------------------------------
- public NodeSerializer(NodeFlavors flavors, NameResolver nameResolver) {
+ public NodeSerializer(NodeFlavors flavors) {
this.flavors = flavors;
- this.nameResolver = nameResolver;
}
public byte[] toJson(Node node) {
@@ -152,7 +149,7 @@ public class NodeSerializer {
private Node nodeFromSlime(Node.State state, Inspector object) {
return new Node(object.field(openStackIdKey).asString(),
- ipAddressesFromResolverOrSlime(object),
+ ipAddressesFromSlime(object),
object.field(hostnameKey).asString(),
parentHostnameFromSlime(object),
flavorFromSlime(object),
@@ -230,14 +227,10 @@ public class NodeSerializer {
return Optional.empty();
}
- // TODO: Remove this and use the ipAddresses field directly after 6.55 has been deployed everywhere
- private Set<String> ipAddressesFromResolverOrSlime(Inspector object) {
- if (object.field(ipAddressesKey).valid()) {
- ImmutableSet.Builder<String> ipAddresses = ImmutableSet.builder();
- object.field(ipAddressesKey).traverse((ArrayTraverser) (i, item) -> ipAddresses.add(item.asString()));
- return ipAddresses.build();
- }
- return nameResolver.getAllByNameOrThrow(object.field("hostname").asString());
+ private Set<String> ipAddressesFromSlime(Inspector object) {
+ ImmutableSet.Builder<String> ipAddresses = ImmutableSet.builder();
+ object.field(ipAddressesKey).traverse((ArrayTraverser) (i, item) -> ipAddresses.add(item.asString()));
+ return ipAddresses.build();
}
private Optional<Status.HardwareFailureType> hardwareFailureFromSlime(Inspector object) {
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClientTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClientTest.java
index e5d67e5d789..52f84b41a71 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClientTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClientTest.java
@@ -11,7 +11,6 @@ import com.yahoo.vespa.curator.Curator;
import com.yahoo.vespa.curator.mock.MockCurator;
import com.yahoo.vespa.hosted.provision.Node;
import com.yahoo.vespa.hosted.provision.testutils.FlavorConfigBuilder;
-import com.yahoo.vespa.hosted.provision.testutils.MockNameResolver;
import org.junit.Test;
import java.time.Clock;
@@ -26,12 +25,12 @@ public class CuratorDatabaseClientTest {
private final Curator curator = new MockCurator();
private final CuratorDatabaseClient zkClient = new CuratorDatabaseClient(
- FlavorConfigBuilder.createDummies("default"), curator, Clock.systemUTC(), Zone.defaultZone(),
- new MockNameResolver().mockAnyLookup());
+ FlavorConfigBuilder.createDummies("default"), curator, Clock.systemUTC(), Zone.defaultZone()
+ );
@Test
public void can_read_stored_host_information() throws Exception {
- String zkline = "{\"hostname\":\"oxy-oxygen-0a4ae4f1.corp.bf1.yahoo.com\",\"openStackId\":\"7951bb9d-3989-4a60-a21c-13690637c8ea\",\"flavor\":\"default\",\"created\":1421054425159, \"type\":\"host\"}";
+ String zkline = "{\"hostname\":\"oxy-oxygen-0a4ae4f1.corp.bf1.yahoo.com\",\"ipAddresses\":[\"127.0.0.1\"],\"openStackId\":\"7951bb9d-3989-4a60-a21c-13690637c8ea\",\"flavor\":\"default\",\"created\":1421054425159, \"type\":\"host\"}";
curator.framework().create().creatingParentsIfNeeded().forPath("/provision/v1/ready/oxy-oxygen-0a4ae4f1.corp.bf1.yahoo.com", zkline.getBytes());
List<Node> allocatedNodes = zkClient.getNodes(Node.State.ready);
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/SerializationTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/SerializationTest.java
index 47fe408553a..a34e70fee7a 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/SerializationTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/SerializationTest.java
@@ -7,6 +7,7 @@ import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.ApplicationName;
import com.yahoo.config.provision.ClusterMembership;
import com.yahoo.config.provision.InstanceName;
+import com.yahoo.config.provision.NodeFlavors;
import com.yahoo.config.provision.NodeType;
import com.yahoo.config.provision.TenantName;
import com.yahoo.test.ManualClock;
@@ -16,11 +17,8 @@ import com.yahoo.vespa.hosted.provision.Node.State;
import com.yahoo.vespa.hosted.provision.node.Allocation;
import com.yahoo.vespa.hosted.provision.node.Generation;
import com.yahoo.vespa.hosted.provision.node.History;
-import com.yahoo.config.provision.NodeFlavors;
import com.yahoo.vespa.hosted.provision.node.Status;
import com.yahoo.vespa.hosted.provision.testutils.FlavorConfigBuilder;
-import com.yahoo.vespa.hosted.provision.testutils.MockNameResolver;
-import org.junit.Before;
import org.junit.Test;
import java.nio.charset.StandardCharsets;
@@ -33,7 +31,6 @@ import static java.util.Collections.singleton;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
/**
* @author bratseth
@@ -42,15 +39,9 @@ import static org.junit.Assert.fail;
public class SerializationTest {
private final NodeFlavors nodeFlavors = FlavorConfigBuilder.createDummies("default", "large", "ugccloud-container");
- private final MockNameResolver nameResolver = new MockNameResolver();
- private final NodeSerializer nodeSerializer = new NodeSerializer(nodeFlavors, nameResolver);
+ private final NodeSerializer nodeSerializer = new NodeSerializer(nodeFlavors);
private final ManualClock clock = new ManualClock();
- @Before
- public void before() {
- nameResolver.reset();
- }
-
@Test
public void testProvisionedNodeSerialization() {
Node node = createNode();
@@ -116,7 +107,6 @@ public class SerializationTest {
@Test
public void testRebootAndRestartAndTypeNoCurrentValuesSerialization() {
- nameResolver.addRecord("myHostname", "127.0.0.1");
String nodeData =
"{\n" +
" \"type\" : \"tenant\",\n" +
@@ -139,7 +129,8 @@ public class SerializationTest {
" \"removable\" : true\n" +
" },\n" +
" \"openStackId\" : \"myId\",\n" +
- " \"hostname\" : \"myHostname\"\n" +
+ " \"hostname\" : \"myHostname\",\n" +
+ " \"ipAddresses\" : [\"127.0.0.1\"]\n" +
"}";
Node node = nodeSerializer.fromJson(Node.State.provisioned, Utf8.toBytes(nodeData));
@@ -153,38 +144,6 @@ public class SerializationTest {
assertEquals(NodeType.tenant, node.type());
}
- // TODO: Remove when 6.31 is deployed everywhere
- @Test
- public void testLegacyFlavor() {
- nameResolver.addRecord("myHostname", "127.0.0.1");
- String nodeData =
- "{\n" +
- " \"type\" : \"tenant\",\n" +
- " \"rebootGeneration\" : 0,\n" +
- " \"flavor\" : \"large\"\n," +
- " \"history\" : [\n" +
- " {\n" +
- " \"type\" : \"reserved\",\n" +
- " \"at\" : 1444391402611\n" +
- " }\n" +
- " ],\n" +
- " \"instance\" : {\n" +
- " \"applicationId\" : \"myApplication\",\n" +
- " \"tenantId\" : \"myTenant\",\n" +
- " \"instanceId\" : \"myInstance\",\n" +
- " \"serviceId\" : \"content/myId/0\",\n" +
- " \"restartGeneration\" : 0,\n" +
- " \"removable\" : false\n" +
- " },\n" +
- " \"openStackId\" : \"myId\",\n" +
- " \"hostname\" : \"myHostname\",\n" +
- " \"hardwareFailure\" : \"memory_mcelog\"\n" +
- "}";
-
- Node node = nodeSerializer.fromJson(Node.State.provisioned, Utf8.toBytes(nodeData));
- assertEquals("large", node.flavor().canonicalName());
- }
-
@Test
public void testRetiredNodeSerialization() {
Node node = createNode();
@@ -213,8 +172,20 @@ public class SerializationTest {
@Test
public void testAssimilatedDeserialization() {
- nameResolver.addRecord("assimilate2.vespahosted.yahoo.tld", "127.0.0.1");
- Node node = nodeSerializer.fromJson(Node.State.active, "{\"type\":\"tenant\",\"hostname\":\"assimilate2.vespahosted.yahoo.tld\",\"openStackId\":\"\",\"flavor\":\"ugccloud-container\",\"instance\":{\"tenantId\":\"by_mortent\",\"applicationId\":\"ugc-assimilate\",\"instanceId\":\"default\",\"serviceId\":\"container/ugccloud-container/0/0\",\"restartGeneration\":0}}\n".getBytes());
+ Node node = nodeSerializer.fromJson(Node.State.active, ("{\n" +
+ " \"type\": \"tenant\",\n" +
+ " \"hostname\": \"assimilate2.vespahosted.yahoo.tld\",\n" +
+ " \"ipAddresses\": [\"127.0.0.1\"],\n" +
+ " \"openStackId\": \"\",\n" +
+ " \"flavor\": \"ugccloud-container\",\n" +
+ " \"instance\": {\n" +
+ " \"tenantId\": \"by_mortent\",\n" +
+ " \"applicationId\": \"ugc-assimilate\",\n" +
+ " \"instanceId\": \"default\",\n" +
+ " \"serviceId\": \"container/ugccloud-container/0/0\",\n" +
+ " \"restartGeneration\": 0\n" +
+ " }\n" +
+ "}\n").getBytes());
assertEquals(0, node.history().events().size());
assertTrue(node.allocation().isPresent());
assertEquals("ugccloud-container", node.allocation().get().membership().cluster().id().value());
@@ -267,35 +238,8 @@ public class SerializationTest {
assertEquals(parentHostname, deserializedNode.parentHostname().get());
}
-
- @Test
- public void resolves_hostname_when_deserializing() throws Exception {
- nameResolver.addRecord("node1.yahoo.tld", "127.0.0.1");
- byte[] nodeWithoutIp = createNodeJson("node1.yahoo.tld");
- Node deserializedNode = nodeSerializer.fromJson(State.provisioned, nodeWithoutIp);
- assertEquals(singleton("127.0.0.1"), deserializedNode.ipAddresses());
- }
-
- @Test
- public void throws_when_hostname_cannot_be_resolved() throws Exception {
- byte[] nodeWithoutIp = createNodeJson("node2.yahoo.tld");
- try {
- nodeSerializer.fromJson(State.provisioned, nodeWithoutIp);
- fail("Expected exception to be thrown");
- } catch (RuntimeException ignored) {}
- }
-
- @Test
- public void resolver_is_not_invoked_when_ip_address_is_present() throws Exception {
- nameResolver.failIfInvoked();
- byte[] nodeWithIp = createNodeJson("node3.yahoo.tld", "127.0.0.3");
- Node deserializedNode = nodeSerializer.fromJson(State.provisioned, nodeWithIp);
- assertEquals(singleton("127.0.0.3"), deserializedNode.ipAddresses());
- }
-
@Test
public void serializes_multiple_ip_addresses() throws Exception {
- nameResolver.failIfInvoked();
byte[] nodeWithMultipleIps = createNodeJson("node4.yahoo.tld", "127.0.0.4", "::4");
Node deserializedNode = nodeSerializer.fromJson(State.provisioned, nodeWithMultipleIps);
assertEquals(ImmutableSet.of("127.0.0.4", "::4"), deserializedNode.ipAddresses());