aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeSkewTest.java
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@verizonmedia.com>2019-10-17 16:36:48 +0200
committerJon Bratseth <bratseth@verizonmedia.com>2019-10-17 16:36:48 +0200
commit82d9136a2166d7262c8b2eaba0d09a10f4750422 (patch)
tree04639ce412ba7c3c79f6290c00c4a9be203e00fd /node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeSkewTest.java
parent15c2736314ff5c94a695124ab271f1e046060029 (diff)
Schedule node balancing acts
Diffstat (limited to 'node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeSkewTest.java')
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeSkewTest.java45
1 files changed, 45 insertions, 0 deletions
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeSkewTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeSkewTest.java
new file mode 100644
index 00000000000..85ff4fe4264
--- /dev/null
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeSkewTest.java
@@ -0,0 +1,45 @@
+// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.provision;
+
+import com.yahoo.config.provision.NodeResources;
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+
+/**
+ * @author bratseth
+ */
+public class NodeSkewTest {
+
+ private static final double d = 0.0001;
+
+ @Test
+ public void testNodeSkewComputation() {
+ // No skew
+ assertEquals(0, Node.skew(r(6, 4, 2), r(6, 4, 2)), d);
+ assertEquals(0, Node.skew(r(6, 4, 2), r(0, 0, 0)), d);
+ assertEquals(0, Node.skew(r(6, 4, 2), r(3, 2, 1)), d);
+
+ // Extremely skewed
+ assertEquals(0.2222, Node.skew(r(6, 4, 2), r(0, 4, 0)), d);
+ // A little less
+ assertEquals(0.1666, Node.skew(r(6, 4, 2), r(3, 4, 0)), d);
+ // A little less
+ assertEquals(0.0555, Node.skew(r(6, 4, 2), r(3, 4, 1)), d);
+ // The same, since being at half and full is equally skewed here
+ assertEquals(0.0555, Node.skew(r(6, 4, 2), r(3, 4, 2)), d);
+ // Almost not skewed
+ assertEquals(0.0062, Node.skew(r(6, 4, 2), r(5, 4, 2)), d);
+
+ // Skew is scale free
+ assertEquals(0.0201, Node.skew(r( 6, 4, 2), r(1, 1, 1)), d);
+ // - all dimensions twice as large
+ assertEquals(0.0201, Node.skew(r(12, 8, 4), r(2, 2, 2)), d);
+ // - just one dimension twice as large
+ assertEquals(0.0201, Node.skew(r(12, 4, 2), r(2, 1, 1)), d);
+ }
+
+ private NodeResources r(double vcpu, double memGb, double diskGb) {
+ return new NodeResources(vcpu, memGb, diskGb, 1);
+ }
+
+}