diff options
15 files changed, 54 insertions, 80 deletions
diff --git a/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java b/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java index 5f247afae03..6aa8f8bf1a1 100644 --- a/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java +++ b/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java @@ -593,7 +593,7 @@ public class FilesApplicationPackage implements ApplicationPackage { @Override public void writeMetaData() throws IOException { File metaFile = new File(appDir, META_FILE_NAME); - IOUtils.writeFile(metaFile, metaData.asJsonString(), false); + IOUtils.writeFile(metaFile, metaData.asJsonBytes()); } @Override diff --git a/config-model-api/abi-spec.json b/config-model-api/abi-spec.json index d536eaf8bfc..313ef0f5fb9 100644 --- a/config-model-api/abi-spec.json +++ b/config-model-api/abi-spec.json @@ -83,7 +83,8 @@ "public java.lang.String toString()", "public static com.yahoo.config.application.api.ApplicationMetaData fromJsonString(java.lang.String)", "public com.yahoo.slime.Slime getSlime()", - "public java.lang.String asJsonString()" + "public java.lang.String asJsonString()", + "public byte[] asJsonBytes()" ], "fields": [] }, diff --git a/config-model-api/src/main/java/com/yahoo/config/application/api/ApplicationMetaData.java b/config-model-api/src/main/java/com/yahoo/config/application/api/ApplicationMetaData.java index 480d12b6700..baca1184072 100644 --- a/config-model-api/src/main/java/com/yahoo/config/application/api/ApplicationMetaData.java +++ b/config-model-api/src/main/java/com/yahoo/config/application/api/ApplicationMetaData.java @@ -4,14 +4,11 @@ package com.yahoo.config.application.api; import com.yahoo.config.provision.ApplicationId; import com.yahoo.slime.Cursor; import com.yahoo.slime.Inspector; -import com.yahoo.slime.JsonDecoder; -import com.yahoo.slime.JsonFormat; import com.yahoo.slime.Slime; +import com.yahoo.slime.SlimeUtils; import com.yahoo.text.Utf8; -import java.io.ByteArrayOutputStream; import java.io.IOException; -import java.nio.charset.StandardCharsets; /** * Metadata about an application package. @@ -97,8 +94,7 @@ public class ApplicationMetaData { public static ApplicationMetaData fromJsonString(String jsonString) { try { - Slime data = new Slime(); - new JsonDecoder().decode(data, Utf8.toBytes(jsonString)); + Slime data = SlimeUtils.jsonToSlime(jsonString); Inspector root = data.get(); Inspector deploy = root.field("deploy"); Inspector app = root.field("application"); @@ -139,11 +135,12 @@ public class ApplicationMetaData { } public String asJsonString() { - Slime slime = getSlime(); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); + return Utf8.toString(asJsonBytes()); + } + + public byte[] asJsonBytes() { try { - new JsonFormat(false).encode(baos, slime); - return baos.toString(StandardCharsets.UTF_8); + return SlimeUtils.toJsonBytes(getSlime()); } catch (IOException e) { throw new RuntimeException("Unable to encode metadata", e); } diff --git a/config/src/main/java/com/yahoo/vespa/config/ConfigVerification.java b/config/src/main/java/com/yahoo/vespa/config/ConfigVerification.java index 4da27e8c346..cea40da52b9 100644 --- a/config/src/main/java/com/yahoo/vespa/config/ConfigVerification.java +++ b/config/src/main/java/com/yahoo/vespa/config/ConfigVerification.java @@ -3,10 +3,8 @@ package com.yahoo.vespa.config; import ai.vespa.util.http.VespaHttpClientBuilder; import com.yahoo.slime.ArrayTraverser; -import com.yahoo.slime.Inspector; -import com.yahoo.slime.JsonDecoder; import com.yahoo.slime.Slime; -import com.yahoo.text.Utf8; +import com.yahoo.slime.SlimeUtils; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.BasicResponseHandler; import org.apache.http.impl.client.CloseableHttpClient; @@ -49,14 +47,9 @@ public class ConfigVerification { Map<String, Stack<String>> recurseMappings = new LinkedHashMap<>(); for (Map.Entry<String, String> entry : outputs.entrySet()) { - Slime slime = new JsonDecoder().decode(new Slime(), Utf8.toBytes(entry.getValue())); + Slime slime = SlimeUtils.jsonToSlime(entry.getValue()); final List<String> list = new ArrayList<>(); - slime.get().field("configs").traverse(new ArrayTraverser() { - @Override - public void entry(int idx, Inspector inspector) { - list.add(inspector.asString()); - } - }); + slime.get().field("configs").traverse((ArrayTraverser) (idx, inspector) -> list.add(inspector.asString())); Stack<String> stack = new Stack<>(); Collections.sort(list); stack.addAll(list); diff --git a/config/src/main/java/com/yahoo/vespa/config/protocol/SlimeRequestData.java b/config/src/main/java/com/yahoo/vespa/config/protocol/SlimeRequestData.java index a9b46f25751..447bc63eeb6 100644 --- a/config/src/main/java/com/yahoo/vespa/config/protocol/SlimeRequestData.java +++ b/config/src/main/java/com/yahoo/vespa/config/protocol/SlimeRequestData.java @@ -4,9 +4,8 @@ package com.yahoo.vespa.config.protocol; import com.yahoo.jrt.Request; import com.yahoo.slime.Cursor; import com.yahoo.slime.Inspector; -import com.yahoo.slime.JsonDecoder; import com.yahoo.slime.Slime; -import com.yahoo.text.Utf8; +import com.yahoo.slime.SlimeUtils; import com.yahoo.vespa.config.ConfigKey; import java.util.Optional; @@ -47,7 +46,7 @@ class SlimeRequestData { private Slime getData() { if (data == null) { - data = new JsonDecoder().decode(new Slime(), Utf8.toBytes(request.parameters().get(0).asString())); + data = SlimeUtils.jsonToSlime(request.parameters().get(0).asString()); } return data; } diff --git a/config/src/main/java/com/yahoo/vespa/config/protocol/SlimeResponseData.java b/config/src/main/java/com/yahoo/vespa/config/protocol/SlimeResponseData.java index 40414c24c96..ba1e7a8c72e 100644 --- a/config/src/main/java/com/yahoo/vespa/config/protocol/SlimeResponseData.java +++ b/config/src/main/java/com/yahoo/vespa/config/protocol/SlimeResponseData.java @@ -3,9 +3,8 @@ package com.yahoo.vespa.config.protocol; import com.yahoo.jrt.Request; import com.yahoo.slime.Inspector; -import com.yahoo.slime.JsonDecoder; import com.yahoo.slime.Slime; -import com.yahoo.text.Utf8; +import com.yahoo.slime.SlimeUtils; /** * Contains response data for a slime response and methods for decoding the response data that @@ -37,7 +36,7 @@ class SlimeResponseData { private Slime getData() { if (request.returnValues().size() > 0) { if (data == null) { - data = new JsonDecoder().decode(new Slime(), Utf8.toBytes(request.returnValues().get(0).asString())); + data = SlimeUtils.jsonToSlime(request.returnValues().get(0).asString()); } return data; } else { diff --git a/config/src/test/java/com/yahoo/vespa/config/protocol/JRTConfigRequestV3Test.java b/config/src/test/java/com/yahoo/vespa/config/protocol/JRTConfigRequestV3Test.java index 4d1ba2f8793..d4f8b771880 100644 --- a/config/src/test/java/com/yahoo/vespa/config/protocol/JRTConfigRequestV3Test.java +++ b/config/src/test/java/com/yahoo/vespa/config/protocol/JRTConfigRequestV3Test.java @@ -6,16 +6,19 @@ import com.yahoo.config.subscription.ConfigSourceSet; import com.yahoo.config.subscription.ConfigSubscriber; import com.yahoo.config.subscription.impl.GenericConfigSubscriber; import com.yahoo.config.subscription.impl.JRTConfigRequester; +import com.yahoo.config.subscription.impl.JRTConfigSubscription; import com.yahoo.config.subscription.impl.MockConnection; import com.yahoo.foo.SimpletypesConfig; -import com.yahoo.config.subscription.impl.JRTConfigSubscription; import com.yahoo.jrt.Request; import com.yahoo.slime.Inspector; -import com.yahoo.slime.JsonDecoder; import com.yahoo.slime.Slime; +import com.yahoo.slime.SlimeUtils; import com.yahoo.test.ManualClock; -import com.yahoo.text.Utf8; -import com.yahoo.vespa.config.*; +import com.yahoo.vespa.config.ConfigKey; +import com.yahoo.vespa.config.ConfigPayload; +import com.yahoo.vespa.config.ErrorCode; +import com.yahoo.vespa.config.RawConfig; +import com.yahoo.vespa.config.TimingValues; import com.yahoo.vespa.config.util.ConfigUtils; import org.junit.Before; import org.junit.Test; @@ -36,15 +39,15 @@ import static org.junit.Assert.assertTrue; public class JRTConfigRequestV3Test { private final Optional<VespaVersion> vespaVersion = Optional.of(VespaVersion.fromString("5.38.24")); - private String defName = "mydef"; - private String defNamespace = "my.name.space"; - private String hostname = "myhost"; - private String configId = "config/id"; - private String defMd5 = "595f44fec1e92a71d3e9e77456ba80d1"; - private long currentGeneration = 3; - private long timeout = 5000; + private final String defName = "mydef"; + private final String defNamespace = "my.name.space"; + private final String hostname = "myhost"; + private final String configId = "config/id"; + private final String defMd5 = "595f44fec1e92a71d3e9e77456ba80d1"; + private final long currentGeneration = 3; + private final long timeout = 5000; private Trace trace ; - private String configMd5 = ConfigUtils.getMd5(createPayload().getData()); + private final String configMd5 = ConfigUtils.getMd5(createPayload().getData()); private JRTClientConfigRequest clientReq; private JRTServerConfigRequest serverReq; @@ -118,8 +121,7 @@ public class JRTConfigRequestV3Test { public void error_response_adds_common_elements() { serverReq.addErrorResponse(ErrorCode.APPLICATION_NOT_LOADED, ErrorCode.getName(ErrorCode.APPLICATION_NOT_LOADED)); assertThat(serverReq.getRequest().returnValues().size(), is(1)); - Slime data = new JsonDecoder().decode(new Slime(), Utf8.toBytes(serverReq.getRequest().returnValues().get(0).asString())); - Inspector response = data.get(); + Inspector response = SlimeUtils.jsonToSlime(serverReq.getRequest().returnValues().get(0).asString()).get(); assertThat(response.field(SlimeResponseData.RESPONSE_DEF_NAME).asString(), is(defName)); assertThat(response.field(SlimeResponseData.RESPONSE_DEF_NAMESPACE).asString(), is(defNamespace)); assertThat(response.field(SlimeResponseData.RESPONSE_DEF_MD5).asString(), is(defMd5)); diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java index bf2fdbf03ef..d8ef10b150f 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java @@ -378,8 +378,8 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye return transaction; } - private String createMetaData(Tenant tenant) { - return new TenantMetaData(tenant.getSessionRepository().clock().instant()).asJsonString(); + private byte[] createMetaData(Tenant tenant) { + return new TenantMetaData(tenant.getSessionRepository().clock().instant()).asJsonBytes(); } TenantMetaData getTenantMetaData(Tenant tenant) { @@ -388,10 +388,9 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye } private Transaction writeTenantMetaData(Tenant tenant) { - String jsonString = createMetaData(tenant); return new CuratorTransaction(tenantRepository.getCurator()) .add(CuratorOperations.setData(TenantRepository.getTenantPath(tenant.getName()).getAbsolute(), - Utf8.toBytes(jsonString))); + createMetaData(tenant))); } static void checkIfActiveHasChanged(LocalSession session, Session currentActiveSession, boolean ignoreStaleSessionFailure) { diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ZooKeeperClient.java b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ZooKeeperClient.java index c634d82010e..858a2c84e02 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ZooKeeperClient.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ZooKeeperClient.java @@ -275,7 +275,7 @@ public class ZooKeeperClient { * @param metaData The application metadata. */ private void write(ApplicationMetaData metaData) { - configCurator.putData(getZooKeeperAppPath(ConfigCurator.META_ZK_PATH).getAbsolute(), metaData.asJsonString()); + configCurator.putData(getZooKeeperAppPath(ConfigCurator.META_ZK_PATH).getAbsolute(), metaData.asJsonBytes()); } void cleanupZooKeeper() { diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantMetaData.java b/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantMetaData.java index 47a3dcc8ee0..24862b82fb0 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantMetaData.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantMetaData.java @@ -3,14 +3,10 @@ package com.yahoo.vespa.config.server.tenant; import com.yahoo.slime.Cursor; import com.yahoo.slime.Inspector; -import com.yahoo.slime.JsonDecoder; -import com.yahoo.slime.JsonFormat; import com.yahoo.slime.Slime; -import com.yahoo.text.Utf8; +import com.yahoo.slime.SlimeUtils; -import java.io.ByteArrayOutputStream; import java.io.IOException; -import java.nio.charset.StandardCharsets; import java.time.Instant; /** @@ -31,12 +27,9 @@ public class TenantMetaData { return lastDeployTimestamp; } - public String asJsonString() { - Slime slime = getSlime(); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); + public byte[] asJsonBytes() { try { - new JsonFormat(false).encode(baos, slime); - return baos.toString(StandardCharsets.UTF_8); + return SlimeUtils.toJsonBytes(getSlime()); } catch (IOException e) { throw new RuntimeException("Unable to encode metadata", e); } @@ -44,8 +37,7 @@ public class TenantMetaData { public static TenantMetaData fromJsonString(String jsonString) { try { - Slime data = new Slime(); - new JsonDecoder().decode(data, Utf8.toBytes(jsonString)); + Slime data = SlimeUtils.jsonToSlime(jsonString); Inspector root = data.get(); Inspector lastDeployTimestamp = root.field("lastDeployTimestamp"); diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/HttpHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/HttpHandlerTest.java index d614031c443..ab161feb519 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/HttpHandlerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/HttpHandlerTest.java @@ -4,8 +4,8 @@ package com.yahoo.vespa.config.server.http; import com.yahoo.container.jdisc.HttpRequest; import com.yahoo.container.jdisc.HttpResponse; import com.yahoo.jdisc.Response; -import com.yahoo.slime.JsonDecoder; import com.yahoo.slime.Slime; +import com.yahoo.slime.SlimeUtils; import org.junit.Test; import java.io.ByteArrayOutputStream; @@ -21,6 +21,7 @@ import static org.junit.Assert.assertThat; * @author Ulf Lilleengen */ public class HttpHandlerTest { + @Test public void testResponse() throws IOException { final String message = "failed"; @@ -29,8 +30,7 @@ public class HttpHandlerTest { assertThat(response.getStatus(), is(Response.Status.BAD_REQUEST)); ByteArrayOutputStream baos = new ByteArrayOutputStream(); response.render(baos); - Slime data = new Slime(); - new JsonDecoder().decode(data, baos.toByteArray()); + Slime data = SlimeUtils.jsonToSlime(baos.toByteArray()); assertThat(data.get().field("error-code").asString(), is(HttpErrorResponse.errorCodes.INVALID_APPLICATION_PACKAGE.name())); assertThat(data.get().field("message").asString(), is(message)); } diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandlerTest.java index b78d8d3e525..2f591ece8c4 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandlerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandlerTest.java @@ -12,8 +12,8 @@ import com.yahoo.config.provision.OutOfCapacityException; import com.yahoo.config.provision.TenantName; import com.yahoo.container.jdisc.HttpResponse; import com.yahoo.jdisc.http.HttpRequest; -import com.yahoo.slime.JsonDecoder; import com.yahoo.slime.Slime; +import com.yahoo.slime.SlimeUtils; import com.yahoo.vespa.config.server.ApplicationRepository; import com.yahoo.vespa.config.server.TestComponentRegistry; import com.yahoo.vespa.config.server.TimeoutBudget; @@ -285,9 +285,7 @@ public class SessionPrepareHandlerTest extends SessionHandlerTest { private Slime getData(HttpResponse response) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); response.render(baos); - Slime data = new Slime(); - new JsonDecoder().decode(data, baos.toByteArray()); - return data; + return SlimeUtils.jsonToSlime(baos.toByteArray()); } private static void assertResponseContains(HttpResponse response, String string) throws IOException { diff --git a/hosted-api/src/main/java/ai/vespa/hosted/api/ControllerHttpClient.java b/hosted-api/src/main/java/ai/vespa/hosted/api/ControllerHttpClient.java index ee30f6fd471..42d1b802094 100644 --- a/hosted-api/src/main/java/ai/vespa/hosted/api/ControllerHttpClient.java +++ b/hosted-api/src/main/java/ai/vespa/hosted/api/ControllerHttpClient.java @@ -12,14 +12,13 @@ import com.yahoo.security.X509CertificateUtils; import com.yahoo.slime.ArrayTraverser; import com.yahoo.slime.Cursor; import com.yahoo.slime.Inspector; -import com.yahoo.slime.JsonDecoder; -import com.yahoo.slime.JsonFormat; import com.yahoo.slime.ObjectTraverser; import com.yahoo.slime.Slime; +import com.yahoo.slime.SlimeUtils; +import com.yahoo.text.Utf8; import javax.net.ssl.SSLContext; import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UncheckedIOException; @@ -381,14 +380,12 @@ public abstract class ControllerHttpClient { } private static Slime toSlime(byte[] data) { - return new JsonDecoder().decode(new Slime(), data); + return SlimeUtils.jsonToSlime(data); } private static String toJson(Slime slime) { try { - ByteArrayOutputStream buffer = new ByteArrayOutputStream(); - new JsonFormat(true).encode(buffer, slime); - return buffer.toString(UTF_8); + return Utf8.toString(SlimeUtils.toJsonBytes(slime)); } catch (IOException e) { throw new UncheckedIOException(e); diff --git a/hosted-api/src/main/java/ai/vespa/hosted/api/TestConfig.java b/hosted-api/src/main/java/ai/vespa/hosted/api/TestConfig.java index 870afaa4f99..3b8b2ffcb28 100644 --- a/hosted-api/src/main/java/ai/vespa/hosted/api/TestConfig.java +++ b/hosted-api/src/main/java/ai/vespa/hosted/api/TestConfig.java @@ -6,9 +6,8 @@ import com.yahoo.config.provision.SystemName; import com.yahoo.config.provision.zone.ZoneId; import com.yahoo.slime.ArrayTraverser; import com.yahoo.slime.Inspector; -import com.yahoo.slime.JsonDecoder; import com.yahoo.slime.ObjectTraverser; -import com.yahoo.slime.Slime; +import com.yahoo.slime.SlimeUtils; import java.net.URI; import java.util.ArrayList; @@ -56,7 +55,7 @@ public class TestConfig { * is returned, using {@link #fromEndpointsOnly}. Otherwise, all config attributes are parsed. */ public static TestConfig fromJson(byte[] jsonBytes) { - Inspector config = new JsonDecoder().decode(new Slime(), jsonBytes).get(); + Inspector config = SlimeUtils.jsonToSlime(jsonBytes).get(); if (config.field("localEndpoints").valid()) return TestConfig.fromEndpointsOnly(toClusterMap(config.field("localEndpoints"))); diff --git a/vespajlib/src/main/java/com/yahoo/osgi/maven/ProjectBundleClassPaths.java b/vespajlib/src/main/java/com/yahoo/osgi/maven/ProjectBundleClassPaths.java index a22bf21ba92..5d64548e4b9 100644 --- a/vespajlib/src/main/java/com/yahoo/osgi/maven/ProjectBundleClassPaths.java +++ b/vespajlib/src/main/java/com/yahoo/osgi/maven/ProjectBundleClassPaths.java @@ -3,9 +3,9 @@ package com.yahoo.osgi.maven; import com.yahoo.slime.Cursor; import com.yahoo.slime.Inspector; -import com.yahoo.slime.JsonDecoder; import com.yahoo.slime.JsonFormat; import com.yahoo.slime.Slime; +import com.yahoo.slime.SlimeUtils; import java.io.BufferedOutputStream; import java.io.IOException; @@ -60,9 +60,7 @@ public class ProjectBundleClassPaths { } static ProjectBundleClassPaths load(byte[] bytes) { - Slime slime = new Slime(); - new JsonDecoder().decode(slime, bytes); - Inspector inspector = slime.get(); + Inspector inspector = SlimeUtils.jsonToSlime(bytes).get(); BundleClasspathMapping mainBundle = BundleClasspathMapping.load(inspector.field("mainBundle")); Inspector dependenciesInspector = inspector.field("providedDependencies"); List<BundleClasspathMapping> providedDependencies = new ArrayList<>(); |