summaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2020-02-06 22:13:19 +0100
committerHarald Musum <musum@verizonmedia.com>2020-02-06 22:13:19 +0100
commit3683b82a6e1d96243560415720ac6ffe5bc8380c (patch)
tree8abf1c18a8cef762c4e687d4dc52d5ccb3e7a13a /config
parentff260db549d4c7cf4df1d782d6b82ce76bbabd61 (diff)
Remove unnecessary classes
We now have just one implementation of config requests, so remove unnecessary abstract classes
Diffstat (limited to 'config')
-rw-r--r--config/src/main/java/com/yahoo/vespa/config/protocol/JRTClientConfigRequestV3.java186
-rw-r--r--config/src/main/java/com/yahoo/vespa/config/protocol/JRTServerConfigRequestV3.java184
-rw-r--r--config/src/main/java/com/yahoo/vespa/config/protocol/SlimeClientConfigRequest.java221
-rw-r--r--config/src/main/java/com/yahoo/vespa/config/protocol/SlimeServerConfigRequest.java206
4 files changed, 362 insertions, 435 deletions
diff --git a/config/src/main/java/com/yahoo/vespa/config/protocol/JRTClientConfigRequestV3.java b/config/src/main/java/com/yahoo/vespa/config/protocol/JRTClientConfigRequestV3.java
index 1c842a4d1b0..d1ef9b02d75 100644
--- a/config/src/main/java/com/yahoo/vespa/config/protocol/JRTClientConfigRequestV3.java
+++ b/config/src/main/java/com/yahoo/vespa/config/protocol/JRTClientConfigRequestV3.java
@@ -5,13 +5,20 @@ import com.yahoo.config.ConfigInstance;
import com.yahoo.config.subscription.impl.ConfigSubscription;
import com.yahoo.config.subscription.impl.JRTConfigSubscription;
import com.yahoo.jrt.Request;
+import com.yahoo.jrt.StringValue;
+import com.yahoo.slime.JsonFormat;
+import com.yahoo.slime.Slime;
+import com.yahoo.text.Utf8;
import com.yahoo.text.Utf8Array;
import com.yahoo.vespa.config.ConfigKey;
import com.yahoo.vespa.config.JRTMethods;
import com.yahoo.vespa.config.RawConfig;
import com.yahoo.vespa.config.util.ConfigUtils;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
import java.util.Optional;
+import java.util.logging.Logger;
/**
* Represents version 3 config request for config clients. Provides methods for inspecting request and response
@@ -21,7 +28,12 @@ import java.util.Optional;
*
* @author Ulf Lilleengen
*/
-public class JRTClientConfigRequestV3 extends SlimeClientConfigRequest {
+public class JRTClientConfigRequestV3 implements JRTClientConfigRequest {
+
+ protected static final Logger log = Logger.getLogger(JRTClientConfigRequestV3.class.getName());
+ protected final SlimeRequestData requestData;
+ protected final Request request;
+ private final SlimeResponseData responseData;
protected JRTClientConfigRequestV3(ConfigKey<?> key,
String hostname,
@@ -32,15 +44,38 @@ public class JRTClientConfigRequestV3 extends SlimeClientConfigRequest {
Trace trace,
CompressionType compressionType,
Optional<VespaVersion> vespaVersion) {
- super(key, hostname, defSchema, configMd5, generation, timeout, trace, compressionType, vespaVersion);
+ Slime data = SlimeRequestData.encodeRequest(key,
+ hostname,
+ defSchema,
+ configMd5,
+ generation,
+ timeout,
+ trace,
+ getProtocolVersion(),
+ compressionType,
+ vespaVersion);
+ Request jrtReq = new Request(getJRTMethodName());
+ jrtReq.parameters().add(new StringValue(encodeAsUtf8String(data, true)));
+
+ this.requestData = new SlimeRequestData(jrtReq, data);
+ this.responseData = new SlimeResponseData(jrtReq);
+ this.request = jrtReq;
+ }
+
+ protected static String encodeAsUtf8String(Slime data, boolean compact) {
+ ByteArrayOutputStream baos = new NoCopyByteArrayOutputStream();
+ try {
+ new JsonFormat(compact).encode(baos, data);
+ } catch (IOException e) {
+ throw new RuntimeException("Unable to encode config request", e);
+ }
+ return Utf8.toString(baos.toByteArray());
}
- @Override
protected String getJRTMethodName() {
return JRTMethods.configV3getConfigMethodName;
}
- @Override
protected boolean checkReturnTypes(Request request) {
return JRTMethods.checkV3ReturnTypes(request);
}
@@ -133,4 +168,147 @@ public class JRTClientConfigRequestV3 extends SlimeClientConfigRequest {
return requestData.getVespaVersion();
}
+ public ConfigKey<?> getConfigKey() {
+ return requestData.getConfigKey();
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("request='").append(getConfigKey())
+ .append(",").append(getClientHostName())
+ .append(",").append(getRequestConfigMd5())
+ .append(",").append(getRequestGeneration())
+ .append(",").append(getTimeout())
+ .append(",").append(getVespaVersion().map(VespaVersion::toString).orElse(""))
+ .append("'\n");
+ sb.append("response='").append(getNewConfigMd5())
+ .append(",").append(getNewGeneration())
+ .append(",").append(responseIsInternalRedeploy())
+ .append("'\n");
+ return sb.toString();
+ }
+
+ @Override
+ public String getClientHostName() {
+ return requestData.getClientHostName();
+ }
+
+ @Override
+ public Request getRequest() {
+ return request;
+ }
+
+ @Override
+ public int errorCode() {
+ return request.errorCode();
+ }
+
+ @Override
+ public String errorMessage() {
+ return request.errorMessage();
+ }
+
+ @Override
+ public String getShortDescription() {
+ return toString();
+ }
+
+ @Override
+ public boolean hasUpdatedGeneration() {
+ long prevGen = getRequestGeneration();
+ long newGen = getNewGeneration();
+ return ConfigUtils.isGenerationNewer(newGen, prevGen);
+ }
+
+ @Override
+ public long getTimeout() {
+ return requestData.getTimeout();
+ }
+
+ protected String newConfMd5() {
+ String newMd5 = getNewConfigMd5();
+ if ("".equals(newMd5)) return getRequestConfigMd5();
+ return newMd5;
+ }
+
+ protected long newGen() {
+ long newGen = getNewGeneration();
+ if (newGen == 0) return getRequestGeneration();
+ return newGen;
+ }
+
+ @Override
+ public DefContent getDefContent() {
+ return requestData.getSchema();
+ }
+
+ @Override
+ public boolean isError() {
+ return request.isError();
+ }
+
+ @Override
+ public boolean containsPayload() {
+ return false;
+ }
+
+ @Override
+ public boolean hasUpdatedConfig() {
+ String respMd5 = getNewConfigMd5();
+ return !respMd5.equals("") && !getRequestConfigMd5().equals(respMd5);
+ }
+
+ @Override
+ public Trace getResponseTrace() {
+ return responseData.getResponseTrace();
+ }
+
+ @Override
+ public String getRequestConfigMd5() {
+ return requestData.getRequestConfigMd5();
+ }
+
+ @Override
+ public boolean validateResponse() {
+ if (request.isError()) {
+ return false;
+ } else if (request.returnValues().size() == 0) {
+ return false;
+ } else if (!checkReturnTypes(request)) {
+ log.warning("Invalid return types for config response: " + errorMessage());
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public boolean validateParameters() {
+ int errorCode = RequestValidation.validateRequest(this);
+ return (errorCode == 0);
+ }
+
+ @Override
+ public String getNewConfigMd5() {
+ return responseData.getResponseConfigMd5();
+ }
+
+ @Override
+ public long getNewGeneration() {
+ return responseData.getResponseConfigGeneration();
+ }
+
+ @Override
+ public boolean responseIsInternalRedeploy() {
+ return responseData.getResponseInternalRedeployment();
+ }
+
+ @Override
+ public long getRequestGeneration() {
+ return requestData.getRequestGeneration();
+ }
+
+ protected SlimeResponseData getResponseData() {
+ return responseData;
+ }
}
diff --git a/config/src/main/java/com/yahoo/vespa/config/protocol/JRTServerConfigRequestV3.java b/config/src/main/java/com/yahoo/vespa/config/protocol/JRTServerConfigRequestV3.java
index f70ebf39a28..83befda7a59 100644
--- a/config/src/main/java/com/yahoo/vespa/config/protocol/JRTServerConfigRequestV3.java
+++ b/config/src/main/java/com/yahoo/vespa/config/protocol/JRTServerConfigRequestV3.java
@@ -1,17 +1,25 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.config.protocol;
+import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
import com.yahoo.jrt.DataValue;
import com.yahoo.jrt.Request;
+import com.yahoo.jrt.StringValue;
+import com.yahoo.jrt.Value;
import com.yahoo.log.LogLevel;
+import com.yahoo.text.Utf8Array;
+import com.yahoo.vespa.config.ConfigKey;
+import com.yahoo.vespa.config.ErrorCode;
import com.yahoo.vespa.config.util.ConfigUtils;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.util.Optional;
+import java.util.logging.Logger;
/**
- * The V3 config protocol implemented on the server side. The V3 protocol uses 2 fields JRT
+ * The V3 config protocol implemented on the server side. The V3 protocol uses 2 fields:
*
* * A metadata field containing json data describing config generation, md5 and compression info
* * A data field containing compressed or uncompressed json config payload. This field can be empty if the payload
@@ -22,14 +30,41 @@ import java.io.IOException;
*
* @author Ulf Lilleengen
*/
-// TODO: Merge with parent
-public class JRTServerConfigRequestV3 extends SlimeServerConfigRequest {
+public class JRTServerConfigRequestV3 implements JRTServerConfigRequest {
+ protected static final Logger log = Logger.getLogger(JRTServerConfigRequestV3.class.getName());
+ private static final JsonFactory jsonFactory = new JsonFactory();
+ protected final Request request;
+ private final SlimeRequestData requestData;
/** Response field */
private boolean internalRedeploy = false;
+ // Response values
+ private boolean isDelayed = false;
+ private Trace requestTrace = null;
protected JRTServerConfigRequestV3(Request request) {
- super(request);
+ this.requestData = new SlimeRequestData(request);
+ this.request = request;
+ }
+
+ protected static JsonGenerator createJsonGenerator(ByteArrayOutputStream byteArrayOutputStream) throws IOException {
+ return jsonFactory.createGenerator(byteArrayOutputStream);
+ }
+
+ protected static Value createResponseValue(ByteArrayOutputStream byteArrayOutputStream) {
+ return new StringValue(new Utf8Array(byteArrayOutputStream.toByteArray()));
+ }
+
+ protected static void setResponseField(JsonGenerator jsonGenerator, String fieldName, String value) throws IOException {
+ jsonGenerator.writeStringField(fieldName, value);
+ }
+
+ protected static void setResponseField(JsonGenerator jsonGenerator, String fieldName, long value) throws IOException {
+ jsonGenerator.writeNumberField(fieldName, value);
+ }
+
+ protected static void setResponseField(JsonGenerator jsonGenerator, String fieldName, boolean value) throws IOException {
+ jsonGenerator.writeBooleanField(fieldName, value);
}
@Override
@@ -85,4 +120,145 @@ public class JRTServerConfigRequestV3 extends SlimeServerConfigRequest {
return new JRTServerConfigRequestV3(req);
}
+ @Override
+ public ConfigKey<?> getConfigKey() {
+ return requestData.getConfigKey();
+ }
+
+ @Override
+ public DefContent getDefContent() {
+ return getSchema();
+ }
+
+ @Override
+ public boolean noCache() {
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("request='").append(getConfigKey())
+ .append(",").append(getClientHostName())
+ .append(",").append(getRequestConfigMd5())
+ .append(",").append(getRequestGeneration())
+ .append(",").append(getTimeout()).append("'\n");
+ return sb.toString();
+ }
+
+ @Override
+ public Payload payloadFromResponse(ConfigResponse response) {
+ return Payload.from(response.getPayload(), response.getCompressionInfo());
+ }
+
+ private DefContent getSchema() {
+ return requestData.getSchema();
+ }
+
+ @Override
+ public String getClientHostName() {
+ return requestData.getClientHostName();
+ }
+
+ public Trace getRequestTrace() {
+ if (requestTrace == null) {
+ requestTrace = requestData.getRequestTrace();
+ }
+ return requestTrace;
+ }
+
+ @Override
+ public Request getRequest() {
+ return request;
+ }
+
+ @Override
+ public boolean validateParameters() {
+ int errorCode = RequestValidation.validateRequest(this);
+ if (errorCode != 0) {
+ addErrorResponse(errorCode);
+ }
+ return (errorCode == 0);
+ }
+
+ @Override
+ public String getRequestConfigMd5() {
+ return requestData.getRequestConfigMd5();
+ }
+
+ private void addErrorResponse(int errorCode) {
+ addErrorResponse(errorCode, ErrorCode.getName(errorCode));
+ }
+
+ @Override
+ public void setDelayedResponse(boolean delayedResponse) {
+ this.isDelayed = delayedResponse;
+ }
+
+ @Override
+ public void addErrorResponse(int errorCode, String name) {
+ ByteArrayOutputStream byteArrayOutputStream = new NoCopyByteArrayOutputStream();
+ try {
+ JsonGenerator jsonWriter = jsonFactory.createGenerator(byteArrayOutputStream);
+ jsonWriter.writeStartObject();
+ addCommonReturnValues(jsonWriter);
+ jsonWriter.writeEndObject();
+ jsonWriter.close();
+ } catch (IOException e) {
+ throw new IllegalArgumentException("Could not add error response for " + this);
+ }
+ request.setError(errorCode, name);
+ request.returnValues().add(createResponseValue(byteArrayOutputStream));
+ }
+
+ protected void addCommonReturnValues(JsonGenerator jsonGenerator) throws IOException {
+ ConfigKey<?> key = requestData.getConfigKey();
+ setResponseField(jsonGenerator, SlimeResponseData.RESPONSE_VERSION, getProtocolVersion());
+ setResponseField(jsonGenerator, SlimeResponseData.RESPONSE_DEF_NAME, key.getName());
+ setResponseField(jsonGenerator, SlimeResponseData.RESPONSE_DEF_NAMESPACE, key.getNamespace());
+ setResponseField(jsonGenerator, SlimeResponseData.RESPONSE_DEF_MD5, key.getMd5());
+ setResponseField(jsonGenerator, SlimeResponseData.RESPONSE_CONFIGID, key.getConfigId());
+ setResponseField(jsonGenerator, SlimeResponseData.RESPONSE_CLIENT_HOSTNAME, requestData.getClientHostName());
+ jsonGenerator.writeFieldName(SlimeResponseData.RESPONSE_TRACE);
+ jsonGenerator.writeRawValue(getRequestTrace().toString(true));
+ }
+
+ @Override
+ public long getRequestGeneration() {
+ return requestData.getRequestGeneration();
+ }
+
+ @Override
+ public boolean isDelayedResponse() {
+ return isDelayed;
+ }
+
+ @Override
+ public int errorCode() {
+ return request.errorCode();
+ }
+
+ @Override
+ public String errorMessage() {
+ return request.errorMessage();
+ }
+
+ @Override
+ public String getShortDescription() {
+ return toString();
+ }
+
+ protected CompressionType getCompressionType() {
+ return requestData.getCompressionType();
+ }
+
+ @Override
+ public long getTimeout() {
+ return requestData.getTimeout();
+ }
+
+ @Override
+ public Optional<VespaVersion> getVespaVersion() {
+ return requestData.getVespaVersion();
+ }
}
diff --git a/config/src/main/java/com/yahoo/vespa/config/protocol/SlimeClientConfigRequest.java b/config/src/main/java/com/yahoo/vespa/config/protocol/SlimeClientConfigRequest.java
deleted file mode 100644
index 49fdde7c9a2..00000000000
--- a/config/src/main/java/com/yahoo/vespa/config/protocol/SlimeClientConfigRequest.java
+++ /dev/null
@@ -1,221 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.config.protocol;
-
-import com.yahoo.jrt.Request;
-import com.yahoo.jrt.StringValue;
-import com.yahoo.slime.JsonFormat;
-import com.yahoo.slime.Slime;
-import com.yahoo.text.Utf8;
-import com.yahoo.vespa.config.ConfigKey;
-import com.yahoo.vespa.config.util.ConfigUtils;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.Optional;
-import java.util.logging.Logger;
-
-/**
- * Base class for new generation of config requests based on {@link Slime}. Allows for some customization of
- * payload encoding and decoding, as well as adding extra request/response fields.
- *
- * @author Ulf Lilleengen
- */
-public abstract class SlimeClientConfigRequest implements JRTClientConfigRequest {
-
- protected static final Logger log = Logger.getLogger(SlimeClientConfigRequest.class.getName());
-
- protected final SlimeRequestData requestData;
- private final SlimeResponseData responseData;
-
- protected final Request request;
-
- protected SlimeClientConfigRequest(ConfigKey<?> key,
- String hostname,
- DefContent defSchema,
- String configMd5,
- long generation,
- long timeout,
- Trace trace,
- CompressionType compressionType,
- Optional<VespaVersion> vespaVersion) {
- Slime data = SlimeRequestData.encodeRequest(key,
- hostname,
- defSchema,
- configMd5,
- generation,
- timeout,
- trace,
- getProtocolVersion(),
- compressionType,
- vespaVersion);
- Request jrtReq = new Request(getJRTMethodName());
- jrtReq.parameters().add(new StringValue(encodeAsUtf8String(data, true)));
-
- this.requestData = new SlimeRequestData(jrtReq, data);
- this.responseData = new SlimeResponseData(jrtReq);
- this.request = jrtReq;
- }
-
- protected abstract String getJRTMethodName();
-
- protected static String encodeAsUtf8String(Slime data, boolean compact) {
- ByteArrayOutputStream baos = new NoCopyByteArrayOutputStream();
- try {
- new JsonFormat(compact).encode(baos, data);
- } catch (IOException e) {
- throw new RuntimeException("Unable to encode config request", e);
- }
- return Utf8.toString(baos.toByteArray());
- }
-
- public ConfigKey<?> getConfigKey() {
- return requestData.getConfigKey();
- }
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append("request='").append(getConfigKey())
- .append(",").append(getClientHostName())
- .append(",").append(getRequestConfigMd5())
- .append(",").append(getRequestGeneration())
- .append(",").append(getTimeout())
- .append(",").append(getVespaVersion().map(VespaVersion::toString).orElse(""))
- .append("'\n");
- sb.append("response='").append(getNewConfigMd5())
- .append(",").append(getNewGeneration())
- .append(",").append(responseIsInternalRedeploy())
- .append("'\n");
- return sb.toString();
- }
-
- @Override
- public String getClientHostName() {
- return requestData.getClientHostName();
- }
-
- @Override
- public Request getRequest() {
- return request;
- }
-
- @Override
- public int errorCode() {
- return request.errorCode();
- }
-
- @Override
- public String errorMessage() {
- return request.errorMessage();
- }
-
- @Override
- public String getShortDescription() {
- return toString();
- }
-
- @Override
- public boolean hasUpdatedGeneration() {
- long prevGen = getRequestGeneration();
- long newGen = getNewGeneration();
- return ConfigUtils.isGenerationNewer(newGen, prevGen);
- }
-
- @Override
- public long getTimeout() {
- return requestData.getTimeout();
- }
-
- protected String newConfMd5() {
- String newMd5 = getNewConfigMd5();
- if ("".equals(newMd5)) return getRequestConfigMd5();
- return newMd5;
- }
-
- protected long newGen() {
- long newGen = getNewGeneration();
- if (newGen == 0) return getRequestGeneration();
- return newGen;
- }
-
- @Override
- public DefContent getDefContent() {
- return requestData.getSchema();
- }
-
- @Override
- public boolean isError() {
- return request.isError();
- }
-
- @Override
- public boolean containsPayload() {
- return false;
- }
-
- @Override
- public boolean hasUpdatedConfig() {
- String respMd5 = getNewConfigMd5();
- return !respMd5.equals("") && !getRequestConfigMd5().equals(respMd5);
- }
-
- @Override
- public Trace getResponseTrace() {
- return responseData.getResponseTrace();
- }
-
- @Override
- public String getRequestConfigMd5() {
- return requestData.getRequestConfigMd5();
- }
-
- @Override
- public boolean validateResponse() {
- if (request.isError()) {
- return false;
- } else if (request.returnValues().size() == 0) {
- return false;
- } else if (!checkReturnTypes(request)) {
- log.warning("Invalid return types for config response: " + errorMessage());
- return false;
- }
- return true;
- }
-
- @Override
- public boolean validateParameters() {
- int errorCode = RequestValidation.validateRequest(this);
- return (errorCode == 0);
- }
-
- protected abstract boolean checkReturnTypes(Request request);
-
- @Override
- public String getNewConfigMd5() {
- return responseData.getResponseConfigMd5();
- }
-
- @Override
- public long getNewGeneration() {
- return responseData.getResponseConfigGeneration();
- }
-
- @Override
- public boolean responseIsInternalRedeploy() {
- return responseData.getResponseInternalRedeployment();
- }
-
- @Override
- public long getRequestGeneration() {
- return requestData.getRequestGeneration();
- }
-
- protected SlimeResponseData getResponseData() {
- return responseData;
- }
-
- public Optional<VespaVersion> getVespaVersion() {
- return requestData.getVespaVersion();
- }
-
-}
diff --git a/config/src/main/java/com/yahoo/vespa/config/protocol/SlimeServerConfigRequest.java b/config/src/main/java/com/yahoo/vespa/config/protocol/SlimeServerConfigRequest.java
deleted file mode 100644
index 19dc4a4d51a..00000000000
--- a/config/src/main/java/com/yahoo/vespa/config/protocol/SlimeServerConfigRequest.java
+++ /dev/null
@@ -1,206 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.config.protocol;
-
-import com.fasterxml.jackson.core.JsonFactory;
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.yahoo.jrt.Request;
-import com.yahoo.jrt.StringValue;
-import com.yahoo.jrt.Value;
-import com.yahoo.slime.Slime;
-import com.yahoo.text.Utf8Array;
-import com.yahoo.vespa.config.ConfigKey;
-import com.yahoo.vespa.config.ErrorCode;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.Optional;
-import java.util.logging.Logger;
-
-/**
- * Base class for new generation of config requests based on {@link Slime}. Allows for some customization of
- * payload encoding and decoding, as well as adding extra request/response fields. Used by both V2 and V3
- * config protocol.
- *
- * @author Ulf Lilleengen
- */
-abstract class SlimeServerConfigRequest implements JRTServerConfigRequest {
-
- protected static final Logger log = Logger.getLogger(SlimeServerConfigRequest.class.getName());
-
- private static final JsonFactory jsonFactory = new JsonFactory();
-
- private final SlimeRequestData requestData;
-
- // Response values
- private boolean isDelayed = false;
- private Trace requestTrace = null;
- protected final Request request;
-
- protected SlimeServerConfigRequest(Request request) {
- this.requestData = new SlimeRequestData(request);
- this.request = request;
- }
-
- protected static JsonGenerator createJsonGenerator(ByteArrayOutputStream byteArrayOutputStream) throws IOException {
- return jsonFactory.createGenerator(byteArrayOutputStream);
- }
-
- @Override
- public ConfigKey<?> getConfigKey() {
- return requestData.getConfigKey();
- }
-
- @Override
- public DefContent getDefContent() {
- return getSchema();
- }
-
- @Override
- public boolean noCache() {
- return false;
- }
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append("request='").append(getConfigKey())
- .append(",").append(getClientHostName())
- .append(",").append(getRequestConfigMd5())
- .append(",").append(getRequestGeneration())
- .append(",").append(getTimeout()).append("'\n");
- return sb.toString();
- }
-
- @Override
- public Payload payloadFromResponse(ConfigResponse response) {
- return Payload.from(response.getPayload(), response.getCompressionInfo());
- }
-
- private DefContent getSchema() {
- return requestData.getSchema();
- }
-
- @Override
- public String getClientHostName() {
- return requestData.getClientHostName();
- }
-
- public Trace getRequestTrace() {
- if (requestTrace == null) {
- requestTrace = requestData.getRequestTrace();
- }
- return requestTrace;
- }
-
- @Override
- public Request getRequest() {
- return request;
- }
-
- @Override
- public boolean validateParameters() {
- int errorCode = RequestValidation.validateRequest(this);
- if (errorCode != 0) {
- addErrorResponse(errorCode);
- }
- return (errorCode == 0);
- }
-
- @Override
- public String getRequestConfigMd5() {
- return requestData.getRequestConfigMd5();
- }
-
- private void addErrorResponse(int errorCode) {
- addErrorResponse(errorCode, ErrorCode.getName(errorCode));
- }
-
- @Override
- public void setDelayedResponse(boolean delayedResponse) {
- this.isDelayed = delayedResponse;
- }
-
- @Override
- public void addErrorResponse(int errorCode, String name) {
- ByteArrayOutputStream byteArrayOutputStream = new NoCopyByteArrayOutputStream();
- try {
- JsonGenerator jsonWriter = jsonFactory.createGenerator(byteArrayOutputStream);
- jsonWriter.writeStartObject();
- addCommonReturnValues(jsonWriter);
- jsonWriter.writeEndObject();
- jsonWriter.close();
- } catch (IOException e) {
- throw new IllegalArgumentException("Could not add error response for " + this);
- }
- request.setError(errorCode, name);
- request.returnValues().add(createResponseValue(byteArrayOutputStream));
- }
-
- protected static Value createResponseValue(ByteArrayOutputStream byteArrayOutputStream) {
- return new StringValue(new Utf8Array(byteArrayOutputStream.toByteArray()));
- }
-
- protected void addCommonReturnValues(JsonGenerator jsonGenerator) throws IOException {
- ConfigKey<?> key = requestData.getConfigKey();
- setResponseField(jsonGenerator, SlimeResponseData.RESPONSE_VERSION, getProtocolVersion());
- setResponseField(jsonGenerator, SlimeResponseData.RESPONSE_DEF_NAME, key.getName());
- setResponseField(jsonGenerator, SlimeResponseData.RESPONSE_DEF_NAMESPACE, key.getNamespace());
- setResponseField(jsonGenerator, SlimeResponseData.RESPONSE_DEF_MD5, key.getMd5());
- setResponseField(jsonGenerator, SlimeResponseData.RESPONSE_CONFIGID, key.getConfigId());
- setResponseField(jsonGenerator, SlimeResponseData.RESPONSE_CLIENT_HOSTNAME, requestData.getClientHostName());
- jsonGenerator.writeFieldName(SlimeResponseData.RESPONSE_TRACE);
- jsonGenerator.writeRawValue(getRequestTrace().toString(true));
- }
-
- protected static void setResponseField(JsonGenerator jsonGenerator, String fieldName, String value) throws IOException {
- jsonGenerator.writeStringField(fieldName, value);
- }
-
- protected static void setResponseField(JsonGenerator jsonGenerator, String fieldName, long value) throws IOException {
- jsonGenerator.writeNumberField(fieldName, value);
- }
-
- protected static void setResponseField(JsonGenerator jsonGenerator, String fieldName, boolean value) throws IOException {
- jsonGenerator.writeBooleanField(fieldName, value);
- }
-
- @Override
- public long getRequestGeneration() {
- return requestData.getRequestGeneration();
- }
-
- @Override
- public boolean isDelayedResponse() {
- return isDelayed;
- }
-
- @Override
- public int errorCode() {
- return request.errorCode();
- }
-
- @Override
- public String errorMessage() {
- return request.errorMessage();
- }
-
- @Override
- public String getShortDescription() {
- return toString();
- }
-
- protected CompressionType getCompressionType() {
- return requestData.getCompressionType();
- }
-
- @Override
- public long getTimeout() {
- return requestData.getTimeout();
- }
-
- @Override
- public Optional<VespaVersion> getVespaVersion() {
- return requestData.getVespaVersion();
- }
-
-}