summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--client/js/app/src/app/pages/querybuilder/TransformVespaTrace.jsx43
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2.java9
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2Test.java2
-rw-r--r--flags/src/main/java/com/yahoo/vespa/flags/Flags.java4
-rw-r--r--hosted-tenant-base/pom.xml6
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java5
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java6
-rw-r--r--tenant-cd-api/pom.xml15
-rw-r--r--vespa-osgi-testrunner/pom.xml40
-rw-r--r--vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/JunitRunner.java42
10 files changed, 121 insertions, 51 deletions
diff --git a/client/js/app/src/app/pages/querybuilder/TransformVespaTrace.jsx b/client/js/app/src/app/pages/querybuilder/TransformVespaTrace.jsx
index 5e09a5dec0f..5838d0b3f0f 100644
--- a/client/js/app/src/app/pages/querybuilder/TransformVespaTrace.jsx
+++ b/client/js/app/src/app/pages/querybuilder/TransformVespaTrace.jsx
@@ -18,7 +18,7 @@ export default function transform(trace) {
let temp = trace['trace']['children'];
let spans = findChildren(temp);
traceStartTimestamp = findTraceStartTime(spans);
- let topSpanFirstHalf = createNewSpan(traceStartTimestamp)[0];
+ let topSpanFirstHalf = createNewSpan(traceStartTimestamp);
data.push(topSpanFirstHalf);
const retrieved = findLogsAndChildren(spans, topSpanFirstHalf);
@@ -39,6 +39,9 @@ function traverseChildren(span, logs, children, indexes, parent) {
(span['children'][span['children'].length - 1]['timestamp'] -
span['children'][0]['timestamp']) *
1000;
+ if (isNaN(duration) || duration === 0) {
+ duration = 1;
+ }
parent['duration'] = duration;
logSpan = createNewSpan(
traceStartTimestamp + spanTimestamp,
@@ -99,16 +102,19 @@ function findLogsAndChildren(spans, topSpanFirstHalf) {
traceID: traceID,
spanID: topSpanFirstHalf['spanID'],
},
- ])[0];
+ ]);
data.push(span);
span['startTime'] = traceStartTimestamp + spans[i]['timestamp'] * 1000;
let duration;
- if (i === spans.length - 1) {
+ if (i >= spans.length - 1) {
duration = 1;
} else {
duration = (spans[i + 1]['timestamp'] - spans[i]['timestamp']) * 1000;
duration = duration === 0 ? 1 : duration;
}
+ if (isNaN(duration)) {
+ duration = 1;
+ }
span['duration'] = duration;
}
}
@@ -127,17 +133,22 @@ function traverseLogs(logs, indexes) {
if (logDuration === 0) {
logDuration = 1;
}
- let temp = createNewSpan(logStartTimestamp, logDuration, 'p0', 'test', [
- { refType: 'CHILD_OF', traceID: traceID, spanID: previous['spanID'] },
- ]);
- let childSpan = temp[0];
- let childSpanID = temp[1];
+ let childSpan = createNewSpan(
+ logStartTimestamp,
+ logDuration,
+ 'p0',
+ 'test',
+ [{ refType: 'CHILD_OF', traceID: traceID, spanID: previous['spanID'] }]
+ );
data.push(childSpan);
for (let k = 0; k < log.length - 1; k++) {
- if (log[k].hasOwnProperty('message')) {
+ if (
+ log[k].hasOwnProperty('message') &&
+ log[k].hasOwnProperty('timestamp')
+ ) {
let logPointStart = traceStartTimestamp + log[k]['timestamp'] * 1000;
let logPointDuration;
- if (k > log.length - 1) {
+ if (k >= log.length - 1) {
logPointDuration = 1;
} else {
logPointDuration =
@@ -149,8 +160,14 @@ function traverseLogs(logs, indexes) {
logPointDuration,
'p0',
log[k]['message'],
- [{ refType: 'CHILD_OF', traceID: traceID, spanID: childSpanID }]
- )[0];
+ [
+ {
+ refType: 'CHILD_OF',
+ traceID: traceID,
+ spanID: childSpan['spanID'],
+ },
+ ]
+ );
data.push(logSpan);
}
}
@@ -324,5 +341,5 @@ function createNewSpan(
logs: [],
processID: processID,
};
- return [newSpan, spanID];
+ return newSpan;
}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2.java
index 44a8b636ae0..4532e0c2c18 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2.java
@@ -14,6 +14,7 @@ import com.yahoo.slime.Cursor;
import com.yahoo.slime.Inspector;
import com.yahoo.slime.Slime;
import com.yahoo.slime.Type;
+import com.yahoo.vespa.hosted.controller.Application;
import com.yahoo.vespa.hosted.controller.ApplicationController;
import com.yahoo.vespa.hosted.controller.Controller;
import com.yahoo.vespa.hosted.controller.TenantController;
@@ -23,8 +24,10 @@ import com.yahoo.vespa.hosted.controller.api.integration.billing.CollectionMetho
import com.yahoo.vespa.hosted.controller.api.integration.billing.Plan;
import com.yahoo.vespa.hosted.controller.api.integration.billing.PlanId;
import com.yahoo.vespa.hosted.controller.api.integration.billing.PlanRegistry;
+import com.yahoo.vespa.hosted.controller.api.integration.billing.Quota;
import com.yahoo.vespa.hosted.controller.api.role.Role;
import com.yahoo.vespa.hosted.controller.api.role.SecurityContext;
+import com.yahoo.vespa.hosted.controller.application.QuotaUsage;
import com.yahoo.vespa.hosted.controller.tenant.CloudTenant;
import com.yahoo.vespa.hosted.controller.tenant.Tenant;
@@ -200,11 +203,13 @@ public class BillingApiHandlerV2 extends RestApiRequestHandler<BillingApiHandler
var response = new Slime();
var tenantsResponse = response.setObject().setArray("tenants");
+
tenants.asList().stream().sorted(Comparator.comparing(Tenant::name)).forEach(tenant -> {
var usage = Optional.ofNullable(usagePerTenant.get(tenant.name()));
var tenantResponse = tenantsResponse.addObject();
tenantResponse.setString("tenant", tenant.name().value());
toSlime(tenantResponse.setObject("plan"), planFor(tenant.name()));
+ toSlime(tenantResponse.setObject("quota"), billing.getQuota(tenant.name()));
tenantResponse.setString("collection", billing.getCollectionMethod(tenant.name()).name());
tenantResponse.setString("lastBill", usage.map(Bill::getStartDate).map(DateTimeFormatter.ISO_DATE::format).orElse(null));
tenantResponse.setString("unbilled", usage.map(Bill::sum).map(BigDecimal::toPlainString).orElse("0.00"));
@@ -357,6 +362,10 @@ public class BillingApiHandlerV2 extends RestApiRequestHandler<BillingApiHandler
cursor.setString("name", plan.displayName());
}
+ private void toSlime(Cursor cursor, Quota quota) {
+ cursor.setDouble("budget", quota.budget().map(BigDecimal::doubleValue).orElse(-1.0));
+ }
+
private Plan planFor(TenantName tenant) {
var planId = billing.getPlan(tenant);
return planRegistry.plan(planId)
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2Test.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2Test.java
index 7c3f0e51b92..c62a9f1399f 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2Test.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2Test.java
@@ -124,7 +124,7 @@ public class BillingApiHandlerV2Test extends ControllerContainerCloudTest {
var accountantRequest = request("/billing/v2/accountant").roles(Role.hostedAccountant());
tester.assertResponse(accountantRequest, """
- {"tenants":[{"tenant":"tenant1","plan":{"id":"trial","name":"Free Trial - for testing purposes"},"collection":"AUTO","lastBill":null,"unbilled":"0.00"}]}""");
+ {"tenants":[{"tenant":"tenant1","plan":{"id":"trial","name":"Free Trial - for testing purposes"},"quota":{"budget":-1.0},"collection":"AUTO","lastBill":null,"unbilled":"0.00"}]}""");
}
@Test
diff --git a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
index 74dc52f79ec..0c828b5a9b5 100644
--- a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
+++ b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
@@ -46,8 +46,8 @@ public class Flags {
private static volatile TreeMap<FlagId, FlagDefinition> flags = new TreeMap<>();
public static final UnboundBooleanFlag MAIN_CHAIN_GRAPH = defineFeatureFlag(
- "main-chain-graph", false,
- List.of("hakonhall"), "2022-07-06", "2022-09-05",
+ "main-chain-graph", true,
+ List.of("hakonhall"), "2022-07-06", "2022-10-05",
"Whether to run all tasks in the main task chain up to the one failing to converge (false), or " +
"run all tasks in the main task chain whose dependencies have converged (true). And when suspending, " +
"whether to run the tasks in sequence (false) or in reverse sequence (true).",
diff --git a/hosted-tenant-base/pom.xml b/hosted-tenant-base/pom.xml
index 58ad178794b..4b09064548f 100644
--- a/hosted-tenant-base/pom.xml
+++ b/hosted-tenant-base/pom.xml
@@ -99,6 +99,12 @@
</dependency>
<dependency>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter-api</artifactId>
+ <version>${vespa.junit.version}</version>
+ </dependency>
+
+ <dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>${vespa.junit.version}</version>
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java
index 62557b275c8..67c1c7359f7 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java
@@ -198,11 +198,6 @@ public class MetricsReporter extends NodeRepositoryMaintainer {
metric.set("wantToDeprovision", node.status().wantToDeprovision() ? 1 : 0, context);
metric.set("failReport", NodeFailer.reasonsToFailHost(node).isEmpty() ? 0 : 1, context);
- if (node.type().isHost()) {
- metric.set("wantToEncrypt", node.reports().getReport("wantToEncrypt").isPresent() ? 1 : 0, context);
- metric.set("diskEncrypted", node.reports().getReport("diskEncrypted").isPresent() ? 1 : 0, context);
- }
-
HostName hostname = new HostName(node.hostname());
serviceModel.getApplication(hostname)
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java
index 98d3ffa92f8..03a6a11d4bd 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java
@@ -43,7 +43,6 @@ import java.util.TreeMap;
import java.util.stream.Collectors;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
@@ -162,11 +161,6 @@ public class MetricsReporterTest {
TestMetric metric = new TestMetric();
MetricsReporter metricsReporter = metricsReporter(metric, tester);
metricsReporter.maintain();
-
- // Only verify metrics that are set for hosts
- TreeMap<String, Number> metrics = new TreeMap<>(metric.values);
- assertTrue(metrics.containsKey("wantToEncrypt"));
- assertTrue(metrics.containsKey("diskEncrypted"));
}
private void verifyAndRemoveIntegerMetricSum(TestMetric metric, String key, int expected) {
diff --git a/tenant-cd-api/pom.xml b/tenant-cd-api/pom.xml
index f8411cc74d1..f6c0b662c97 100644
--- a/tenant-cd-api/pom.xml
+++ b/tenant-cd-api/pom.xml
@@ -59,6 +59,21 @@
<scope>compile</scope>
</dependency>
<dependency>
+ <groupId>org.opentest4j</groupId>
+ <artifactId>opentest4j</artifactId>
+ <version>1.2.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apiguardian</groupId>
+ <artifactId>apiguardian-api</artifactId>
+ <version>1.1.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.junit.platform</groupId>
+ <artifactId>junit-platform-commons</artifactId>
+ <version>1.8.1</version>
+ </dependency>
+ <dependency>
<groupId>com.yahoo.vespa</groupId>
<artifactId>vespa-feed-client-api</artifactId>
<version>${project.version}</version>
diff --git a/vespa-osgi-testrunner/pom.xml b/vespa-osgi-testrunner/pom.xml
index 0032fe33de0..d89fbe1cf89 100644
--- a/vespa-osgi-testrunner/pom.xml
+++ b/vespa-osgi-testrunner/pom.xml
@@ -27,6 +27,12 @@
<version>${project.version}</version>
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>tenant-cd-api</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
<dependency>
<groupId>com.yahoo.vespa</groupId>
@@ -37,23 +43,47 @@
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
- <version>5.8.2</version>
+ <version>5.8.1</version>
<exclusions>
<exclusion>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
</exclusion>
+ <exclusion>
+ <groupId>org.junit.platform</groupId>
+ <artifactId>junit-platform-commons</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.opentest4j</groupId>
+ <artifactId>opentest4j</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apiguardian</groupId>
+ <artifactId>apiguardian-api</artifactId>
+ </exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
- <version>1.8.2</version>
+ <version>1.8.1</version>
<exclusions>
<exclusion>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
</exclusion>
+ <exclusion>
+ <groupId>org.junit.platform</groupId>
+ <artifactId>junit-platform-commons</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.opentest4j</groupId>
+ <artifactId>opentest4j</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apiguardian</groupId>
+ <artifactId>apiguardian-api</artifactId>
+ </exclusion>
</exclusions>
</dependency>
<dependency>
@@ -65,12 +95,6 @@
<dependency>
<groupId>com.yahoo.vespa</groupId>
- <artifactId>tenant-cd-api</artifactId>
- <version>${project.version}</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>com.yahoo.vespa</groupId>
<artifactId>config-provisioning</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
diff --git a/vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/JunitRunner.java b/vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/JunitRunner.java
index 54f0941208d..8575d22c384 100644
--- a/vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/JunitRunner.java
+++ b/vespa-osgi-testrunner/src/main/java/com/yahoo/vespa/testrunner/JunitRunner.java
@@ -104,22 +104,32 @@ public class JunitRunner extends AbstractComponent implements TestRunner {
private TestReport launchJunit(Suite suite, byte[] testConfig) {
List<Class<?>> testClasses = classLoader.apply(suite);
if (testClasses == null)
- return null;
-
- testRuntimeProvider.initialize(testConfig);
- TestReportGeneratingListener testReportListener = new TestReportGeneratingListener(suite,
- record -> logRecords.put(record.getSequenceNumber(), record),
- stdoutTee,
- stderrTee,
- clock);
- LauncherDiscoveryRequest discoveryRequest = LauncherDiscoveryRequestBuilder.request()
- .selectors(testClasses.stream()
- .map(DiscoverySelectors::selectClass)
- .collect(toList()))
- .build();
- testExecutor.accept(discoveryRequest, new TestExecutionListener[] { testReportListener });
-
- return testReportListener.report();
+ return null;
+
+ ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+ try {
+ testRuntimeProvider.initialize(testConfig);
+ TestReportGeneratingListener testReportListener = new TestReportGeneratingListener(suite,
+ record -> logRecords.put(record.getSequenceNumber(), record),
+ stdoutTee,
+ stderrTee,
+ clock);
+
+ if ( ! testClasses.isEmpty())
+ Thread.currentThread().setContextClassLoader(testClasses.get(0).getClassLoader());
+
+ LauncherDiscoveryRequest discoveryRequest = LauncherDiscoveryRequestBuilder.request()
+ .selectors(testClasses.stream()
+ .map(DiscoverySelectors::selectClass)
+ .collect(toList()))
+ .build();
+ testExecutor.accept(discoveryRequest, new TestExecutionListener[] { testReportListener });
+
+ return testReportListener.report();
+ }
+ finally {
+ Thread.currentThread().setContextClassLoader(contextClassLoader);
+ }
}
@Override