diff options
author | Jon Bratseth <bratseth@oath.com> | 2020-12-08 13:41:28 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-08 13:41:28 +0100 |
commit | d1e33a9420805f5d416ca55ed79497fd28f20216 (patch) | |
tree | f0535c9ae6ccbf13bf0ad3ce15322a964f261b90 /config/src/main | |
parent | 10464c859ccca2596e2b841612f8ea958330e4dc (diff) | |
parent | 1fce95eefd21a4a0686dbf8557cb540894029a1f (diff) |
Merge pull request #15739 from vespa-engine/revert-15734-bratseth/simplify-config-take-2
Revert "Bratseth/simplify config take 2"
Diffstat (limited to 'config/src/main')
15 files changed, 121 insertions, 29 deletions
diff --git a/config/src/main/java/com/yahoo/config/subscription/ConfigSubscriber.java b/config/src/main/java/com/yahoo/config/subscription/ConfigSubscriber.java index de44d0b86c4..ad131f8e0dd 100644 --- a/config/src/main/java/com/yahoo/config/subscription/ConfigSubscriber.java +++ b/config/src/main/java/com/yahoo/config/subscription/ConfigSubscriber.java @@ -43,6 +43,9 @@ public class ConfigSubscriber implements AutoCloseable { /** The last complete config generation received by this */ private long generation = -1; + /** Whether the last generation received was due to a system-internal redeploy, not an application package change */ + private boolean internalRedeploy = false; + /** * Whether the last generation should only be applied on restart, not immediately. * Once this is set it will not be unset, as no future generation should be applied @@ -244,13 +247,11 @@ public class ConfigSubscriber implements AutoCloseable { * the config should be applied at this time, false otherwise */ private boolean acquireSnapshot(long timeoutInMillis, boolean requireChange) { - boolean initialConfiguration; boolean applyOnRestartOnly; synchronized (monitor) { if (state == State.CLOSED) return false; state = State.FROZEN; applyOnRestartOnly = applyOnRestart; - initialConfiguration = generation == -1; } long started = System.currentTimeMillis(); long timeLeftMillis = timeoutInMillis; @@ -261,6 +262,7 @@ public class ConfigSubscriber implements AutoCloseable { h.setChanged(false); // Reset this flag, if it was set, the user should have acted on it the last time this method returned true. } boolean reconfigDue; + boolean internalRedeployOnly = true; do { boolean allGenerationsChanged = true; boolean allGenerationsTheSame = true; @@ -276,14 +278,15 @@ public class ConfigSubscriber implements AutoCloseable { if (currentGen == null) currentGen = config.getGeneration(); allGenerationsTheSame &= currentGen.equals(config.getGeneration()); allGenerationsChanged &= config.isGenerationChanged(); - anyConfigChanged |= config.isConfigChanged(); - applyOnRestartOnly |= config.applyOnRestart(); + anyConfigChanged |= config.isConfigChanged(); + internalRedeployOnly &= config.isInternalRedeploy(); + applyOnRestartOnly |= requireChange && config.applyOnRestart(); // only if this is reconfig timeLeftMillis = timeoutInMillis + started - System.currentTimeMillis(); } - reconfigDue = ( initialConfiguration || (anyConfigChanged && !applyOnRestartOnly)) + reconfigDue = ((anyConfigChanged && !applyOnRestartOnly) || !requireChange) && allGenerationsChanged && allGenerationsTheSame; - if (applyOnRestartOnly && ! initialConfiguration) { // disable any reconfig until restart + if (requireChange && applyOnRestartOnly) { // if this is a reconfig, disable future reconfigs until restart synchronized (monitor) { applyOnRestart = applyOnRestartOnly; } @@ -298,6 +301,7 @@ public class ConfigSubscriber implements AutoCloseable { // Also if appropriate update the changed flag on the handler, which clients use. markSubsChangedSeen(currentGen); synchronized (monitor) { + internalRedeploy = internalRedeployOnly; generation = currentGen; } } @@ -487,6 +491,12 @@ public class ConfigSubscriber implements AutoCloseable { } /** + * Whether the current config generation received by this was due to a system-internal redeploy, + * not an application package change + */ + public boolean isInternalRedeploy() { synchronized (monitor) { return internalRedeploy; } } + + /** * Convenience interface for clients who only subscribe to one config. Implement this, and pass it to {@link ConfigSubscriber#subscribe(SingleSubscriber, Class, String)}. * * @author vegardh diff --git a/config/src/main/java/com/yahoo/config/subscription/impl/ConfigSubscription.java b/config/src/main/java/com/yahoo/config/subscription/impl/ConfigSubscription.java index b58817305e9..15f6395c417 100644 --- a/config/src/main/java/com/yahoo/config/subscription/impl/ConfigSubscription.java +++ b/config/src/main/java/com/yahoo/config/subscription/impl/ConfigSubscription.java @@ -25,7 +25,7 @@ import com.yahoo.vespa.config.protocol.DefContent; */ public abstract class ConfigSubscription<T extends ConfigInstance> { - protected static final Logger log = Logger.getLogger(ConfigSubscription.class.getName()); + protected static Logger log = Logger.getLogger(ConfigSubscription.class.getName()); protected final ConfigSubscriber subscriber; private final AtomicReference<ConfigState<T>> config = new AtomicReference<>(); protected final ConfigKey<T> key; @@ -39,26 +39,29 @@ public abstract class ConfigSubscription<T extends ConfigInstance> { private final boolean generationChanged; private final T config; private final Long generation; + private final boolean internalRedeploy; private final boolean applyOnRestart; private ConfigState(boolean generationChanged, Long generation, + boolean internalRedeploy, boolean applyOnRestart, boolean configChanged, T config) { this.generationChanged = generationChanged; this.generation = generation; + this.internalRedeploy = internalRedeploy; this.applyOnRestart = applyOnRestart; this.configChanged = configChanged; this.config = config; } private ConfigState(Long generation, T config) { - this(false, generation, false, false, config); + this(false, generation, false, false, false, config); } private ConfigState() { - this(false, 0L, false, false, null); + this(false, 0L, false, false, false, null); } private ConfigState<T> createUnchanged() { return new ConfigState<>(generation, config); } @@ -66,6 +69,12 @@ public abstract class ConfigSubscription<T extends ConfigInstance> { public boolean isGenerationChanged() { return generationChanged; } public Long getGeneration() { return generation; } + /** + * Returns whether this config generation was caused by a system-internal redeploy, + * not an application package change + */ + public boolean isInternalRedeploy() { return internalRedeploy; } + public boolean applyOnRestart() { return applyOnRestart; } public T getConfig() { return config; } @@ -181,29 +190,34 @@ public abstract class ConfigSubscription<T extends ConfigInstance> { return !prev.getGeneration().equals(requiredGen) || prev.isConfigChanged(); } - void setConfig(Long generation, boolean applyOnRestart, T config) { - this.config.set(new ConfigState<>(true, generation, applyOnRestart, true, config)); + void setConfig(Long generation, boolean internalRedeploy, boolean applyOnRestart, T config) { + this.config.set(new ConfigState<>(true, generation, internalRedeploy, applyOnRestart, true, config)); } /** Used by {@link FileConfigSubscription} and {@link ConfigSetSubscription} */ protected void setConfigIncGen(T config) { ConfigState<T> prev = this.config.get(); - this.config.set(new ConfigState<>(true, prev.getGeneration() + 1, prev.applyOnRestart(), true, config)); + this.config.set(new ConfigState<>(true, prev.getGeneration() + 1, prev.isInternalRedeploy(), prev.applyOnRestart(), true, config)); } protected void setConfigIfChanged(T config) { ConfigState<T> prev = this.config.get(); - this.config.set(new ConfigState<>(true, prev.getGeneration(), prev.applyOnRestart(), !config.equals(prev.getConfig()), config)); + this.config.set(new ConfigState<>(true, prev.getGeneration(), prev.isInternalRedeploy(), prev.applyOnRestart(), !config.equals(prev.getConfig()), config)); } void setGeneration(Long generation) { ConfigState<T> prev = config.get(); - this.config.set(new ConfigState<>(true, generation, prev.applyOnRestart(), prev.isConfigChanged(), prev.getConfig())); + this.config.set(new ConfigState<>(true, generation, prev.isInternalRedeploy(), prev.applyOnRestart(), prev.isConfigChanged(), prev.getConfig())); + } + + void setInternalRedeploy(boolean internalRedeploy) { + ConfigState<T> prev = config.get(); + this.config.set(new ConfigState<>(prev.isGenerationChanged(), prev.getGeneration(), internalRedeploy, prev.applyOnRestart(), prev.isConfigChanged(), prev.getConfig())); } void setApplyOnRestart(boolean applyOnRestart) { ConfigState<T> prev = config.get(); - this.config.set(new ConfigState<>(prev.isGenerationChanged(), prev.getGeneration(), applyOnRestart, prev.isConfigChanged(), prev.getConfig())); + this.config.set(new ConfigState<>(prev.isGenerationChanged(), prev.getGeneration(), prev.isInternalRedeploy(), applyOnRestart, prev.isConfigChanged(), prev.getConfig())); } /** diff --git a/config/src/main/java/com/yahoo/config/subscription/impl/GenericJRTConfigSubscription.java b/config/src/main/java/com/yahoo/config/subscription/impl/GenericJRTConfigSubscription.java index b052c79f429..ba8fc8a5e19 100644 --- a/config/src/main/java/com/yahoo/config/subscription/impl/GenericJRTConfigSubscription.java +++ b/config/src/main/java/com/yahoo/config/subscription/impl/GenericJRTConfigSubscription.java @@ -32,7 +32,7 @@ public class GenericJRTConfigSubscription extends JRTConfigSubscription<RawConfi @Override protected void setNewConfig(JRTClientConfigRequest jrtReq) { - setConfig(jrtReq.getNewGeneration(), jrtReq.responseIsApplyOnRestart(), RawConfig.createFromResponseParameters(jrtReq) ); + setConfig(jrtReq.getNewGeneration(), jrtReq.responseIsInternalRedeploy(), jrtReq.responseIsApplyOnRestart(), RawConfig.createFromResponseParameters(jrtReq) ); log.log(FINE, () -> "in setNewConfig, config=" + this.getConfigState().getConfig()); } @@ -50,6 +50,17 @@ public class GenericJRTConfigSubscription extends JRTConfigSubscription<RawConfi // Override to propagate internal redeploy into the config value in addition to the config state @Override + void setInternalRedeploy(boolean internalRedeploy) { + super.setInternalRedeploy(internalRedeploy); + ConfigState<RawConfig> configState = getConfigState(); + + if (configState.getConfig() != null) { + configState.getConfig().setInternalRedeploy(internalRedeploy); + } + } + + // Override to propagate internal redeploy into the config value in addition to the config state + @Override void setApplyOnRestart(boolean applyOnRestart) { super.setApplyOnRestart(applyOnRestart); ConfigState<RawConfig> configState = getConfigState(); diff --git a/config/src/main/java/com/yahoo/config/subscription/impl/JRTConfigSubscription.java b/config/src/main/java/com/yahoo/config/subscription/impl/JRTConfigSubscription.java index b48e5905239..e9d5d317995 100644 --- a/config/src/main/java/com/yahoo/config/subscription/impl/JRTConfigSubscription.java +++ b/config/src/main/java/com/yahoo/config/subscription/impl/JRTConfigSubscription.java @@ -93,6 +93,7 @@ public class JRTConfigSubscription<T extends ConfigInstance> extends ConfigSubsc } log.log(FINE, () -> "Polled queue and found config " + jrtReq); if (jrtReq.hasUpdatedGeneration()) { + setInternalRedeploy(jrtReq.responseIsInternalRedeploy()); setApplyOnRestart(jrtReq.responseIsApplyOnRestart()); if (jrtReq.hasUpdatedConfig()) { setNewConfig(jrtReq); @@ -111,7 +112,7 @@ public class JRTConfigSubscription<T extends ConfigInstance> extends ConfigSubsc } catch (IllegalArgumentException e) { badConfigE = e; } - setConfig(jrtReq.getNewGeneration(), jrtReq.responseIsApplyOnRestart(), configInstance); + setConfig(jrtReq.getNewGeneration(), jrtReq.responseIsInternalRedeploy(), jrtReq.responseIsApplyOnRestart(), configInstance); if (badConfigE != null) { throw new IllegalArgumentException("Bad config from jrt", badConfigE); } diff --git a/config/src/main/java/com/yahoo/config/subscription/impl/JarConfigSubscription.java b/config/src/main/java/com/yahoo/config/subscription/impl/JarConfigSubscription.java index 05da9a72837..9fc5d9d3300 100644 --- a/config/src/main/java/com/yahoo/config/subscription/impl/JarConfigSubscription.java +++ b/config/src/main/java/com/yahoo/config/subscription/impl/JarConfigSubscription.java @@ -63,7 +63,7 @@ public class JarConfigSubscription<T extends ConfigInstance> extends ConfigSubsc } catch (IOException e) { throw new ConfigurationRuntimeException(e); } - setConfig(0L, false, config); + setConfig(0L, false, false, config); try { jarFile.close(); } catch (IOException e) { diff --git a/config/src/main/java/com/yahoo/config/subscription/impl/MockConnection.java b/config/src/main/java/com/yahoo/config/subscription/impl/MockConnection.java index 58eed7f9e78..3a284489109 100644 --- a/config/src/main/java/com/yahoo/config/subscription/impl/MockConnection.java +++ b/config/src/main/java/com/yahoo/config/subscription/impl/MockConnection.java @@ -115,7 +115,7 @@ public class MockConnection implements ConnectionPool, com.yahoo.vespa.config.Co JRTServerConfigRequestV3 jrtReq = JRTServerConfigRequestV3.createFromRequest(request); Payload payload = Payload.from(ConfigPayload.empty()); long generation = 1; - jrtReq.addOkResponse(payload, generation, false, ConfigUtils.getMd5(payload.getData())); + jrtReq.addOkResponse(payload, generation, false, false, ConfigUtils.getMd5(payload.getData())); } } diff --git a/config/src/main/java/com/yahoo/config/subscription/impl/RawConfigSubscription.java b/config/src/main/java/com/yahoo/config/subscription/impl/RawConfigSubscription.java index 68ff6bb0135..1ff0a058a93 100644 --- a/config/src/main/java/com/yahoo/config/subscription/impl/RawConfigSubscription.java +++ b/config/src/main/java/com/yahoo/config/subscription/impl/RawConfigSubscription.java @@ -35,7 +35,7 @@ public class RawConfigSubscription<T extends ConfigInstance> extends ConfigSubsc if (payload == null) { payload = inputPayload; ConfigPayload configPayload = new CfgConfigPayloadBuilder().deserialize(Arrays.asList(payload.split("\n"))); - setConfig(0L, false, configPayload.toInstance(configClass, key.getConfigId())); + setConfig(0L, false, false, configPayload.toInstance(configClass, key.getConfigId())); return true; } try { diff --git a/config/src/main/java/com/yahoo/vespa/config/RawConfig.java b/config/src/main/java/com/yahoo/vespa/config/RawConfig.java index 1c28d4c5e05..cf0f1243acf 100755 --- a/config/src/main/java/com/yahoo/vespa/config/RawConfig.java +++ b/config/src/main/java/com/yahoo/vespa/config/RawConfig.java @@ -31,6 +31,7 @@ public class RawConfig extends ConfigInstance { private final String configMd5; private final Optional<VespaVersion> vespaVersion; private long generation; + private boolean internalRedeploy; private boolean applyOnRestart; /** @@ -40,30 +41,31 @@ public class RawConfig extends ConfigInstance { * @param defMd5 The md5 sum of the .def-file. */ public RawConfig(ConfigKey<?> key, String defMd5) { - this(key, defMd5, null, "", 0L, false, 0, Collections.emptyList(), Optional.empty()); + this(key, defMd5, null, "", 0L, false, false, 0, Collections.emptyList(), Optional.empty()); } public RawConfig(ConfigKey<?> key, String defMd5, Payload payload, String configMd5, long generation, - boolean applyOnRestart, List<String> defContent, + boolean internalRedeploy, boolean applyOnRestart, List<String> defContent, Optional<VespaVersion> vespaVersion) { - this(key, defMd5, payload, configMd5, generation, applyOnRestart, 0, defContent, vespaVersion); + this(key, defMd5, payload, configMd5, generation, internalRedeploy, applyOnRestart, 0, defContent, vespaVersion); } /** Copy constructor */ public RawConfig(RawConfig rawConfig) { this(rawConfig.key, rawConfig.defMd5, rawConfig.payload, rawConfig.configMd5, - rawConfig.generation, rawConfig.applyOnRestart, + rawConfig.generation, rawConfig.internalRedeploy, rawConfig.applyOnRestart, rawConfig.errorCode, rawConfig.defContent, rawConfig.getVespaVersion()); } public RawConfig(ConfigKey<?> key, String defMd5, Payload payload, String configMd5, long generation, - boolean applyOnRestart, int errorCode, List<String> defContent, + boolean internalRedeploy, boolean applyOnRestart, int errorCode, List<String> defContent, Optional<VespaVersion> vespaVersion) { this.key = key; this.defMd5 = ConfigUtils.getDefMd5FromRequest(defMd5, defContent); this.payload = payload; this.configMd5 = configMd5; this.generation = generation; + this.internalRedeploy = internalRedeploy; this.applyOnRestart = applyOnRestart; this.errorCode = errorCode; this.defContent = defContent; @@ -81,6 +83,7 @@ public class RawConfig extends ConfigInstance { req.getNewPayload(), req.getNewConfigMd5(), req.getNewGeneration(), + req.responseIsInternalRedeploy(), req.responseIsApplyOnRestart(), 0, req.getDefContent().asList(), @@ -98,6 +101,7 @@ public class RawConfig extends ConfigInstance { Payload.from(new Utf8String(""), CompressionInfo.uncompressed()), req.getRequestConfigMd5(), req.getRequestGeneration(), + req.isInternalRedeploy(), req.applyOnRestart(), 0, req.getDefContent().asList(), @@ -121,8 +125,16 @@ public class RawConfig extends ConfigInstance { public void setGeneration(long generation) { this.generation = generation; } + public void setInternalRedeploy(boolean internalRedeploy) { this.internalRedeploy = internalRedeploy; } + public void setApplyOnRestart(boolean applyOnRestart) { this.applyOnRestart = applyOnRestart; } + /** + * Returns whether this config generation was created by a system internal redeploy, not an + * application package change. + */ + public boolean isInternalRedeploy() { return internalRedeploy; } + public boolean applyOnRestart() { return applyOnRestart; } public Payload getPayload() { return payload; } diff --git a/config/src/main/java/com/yahoo/vespa/config/protocol/ConfigResponse.java b/config/src/main/java/com/yahoo/vespa/config/protocol/ConfigResponse.java index 31e280e708c..27f4816849d 100644 --- a/config/src/main/java/com/yahoo/vespa/config/protocol/ConfigResponse.java +++ b/config/src/main/java/com/yahoo/vespa/config/protocol/ConfigResponse.java @@ -20,6 +20,8 @@ public interface ConfigResponse { long getGeneration(); + boolean isInternalRedeploy(); + boolean applyOnRestart(); String getConfigMd5(); diff --git a/config/src/main/java/com/yahoo/vespa/config/protocol/JRTClientConfigRequest.java b/config/src/main/java/com/yahoo/vespa/config/protocol/JRTClientConfigRequest.java index 8535cc23225..8f85e2353a5 100644 --- a/config/src/main/java/com/yahoo/vespa/config/protocol/JRTClientConfigRequest.java +++ b/config/src/main/java/com/yahoo/vespa/config/protocol/JRTClientConfigRequest.java @@ -53,6 +53,9 @@ public interface JRTClientConfigRequest extends JRTConfigRequest { */ long getNewGeneration(); + /** Returns whether this config change is due to an internal change not an application package change */ + boolean responseIsInternalRedeploy(); + /** Returns true if this config should only be applied at the last restart, false if it should be applied immediately */ boolean responseIsApplyOnRestart(); 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 87e63399fc3..e04a2179602 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 @@ -180,6 +180,7 @@ public class JRTClientConfigRequestV3 implements JRTClientConfigRequest { .append("'\n"); sb.append("response='").append(getNewConfigMd5()) .append(",").append(getNewGeneration()) + .append(",").append(responseIsInternalRedeploy()) .append(",").append(responseIsApplyOnRestart()) .append("'\n"); return sb.toString(); @@ -290,6 +291,11 @@ public class JRTClientConfigRequestV3 implements JRTClientConfigRequest { } @Override + public boolean responseIsInternalRedeploy() { + return responseData.getResponseInternalRedeployment(); + } + + @Override public boolean responseIsApplyOnRestart() { return responseData.getResponseApplyOnRestart(); } diff --git a/config/src/main/java/com/yahoo/vespa/config/protocol/JRTServerConfigRequest.java b/config/src/main/java/com/yahoo/vespa/config/protocol/JRTServerConfigRequest.java index c085be5924c..dbc6a7bb98d 100644 --- a/config/src/main/java/com/yahoo/vespa/config/protocol/JRTServerConfigRequest.java +++ b/config/src/main/java/com/yahoo/vespa/config/protocol/JRTServerConfigRequest.java @@ -32,11 +32,14 @@ public interface JRTServerConfigRequest extends JRTConfigRequest, GetConfigReque * * @param payload The config payload that the client should receive. * @param generation The config generation of the given payload. + * @param internalRedeployment whether this payload was generated from an internal redeployment not an + * application package change * @param applyOnRestart true if this config should only be applied on the next restart, * false if it should be applied right away * @param configMd5 The md5sum of the given payload. */ - void addOkResponse(Payload payload, long generation, boolean applyOnRestart, String configMd5); + void addOkResponse(Payload payload, long generation, boolean internalRedeployment, boolean applyOnRestart, + String configMd5); /** * Get the current config md5 of the client config. @@ -59,6 +62,12 @@ public interface JRTServerConfigRequest extends JRTConfigRequest, GetConfigReque */ boolean isDelayedResponse(); + /** + * Returns whether the response config was created by a system internal redeploy, not an application + * package change + */ + boolean isInternalRedeploy(); + boolean applyOnRestart(); /** 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 53a2f4019f9..0bc7c44fe9d 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 @@ -36,6 +36,7 @@ public class JRTServerConfigRequestV3 implements JRTServerConfigRequest { protected final Request request; private final SlimeRequestData requestData; /** Response field */ + private boolean internalRedeploy = false; private boolean applyOnRestart = false; // Response values private boolean isDelayed = false; @@ -67,7 +68,9 @@ public class JRTServerConfigRequestV3 implements JRTServerConfigRequest { } @Override - public void addOkResponse(Payload payload, long generation, boolean applyOnRestart, String configMd5) { + public void addOkResponse(Payload payload, long generation, boolean internalRedeploy, boolean applyOnRestart, + String configMd5) { + this.internalRedeploy = internalRedeploy; this.applyOnRestart = applyOnRestart; boolean changedConfig = !configMd5.equals(getRequestConfigMd5()); boolean changedConfigAndNewGeneration = changedConfig && ConfigUtils.isGenerationNewer(generation, getRequestGeneration()); @@ -79,6 +82,7 @@ public class JRTServerConfigRequestV3 implements JRTServerConfigRequest { addCommonReturnValues(jsonGenerator); setResponseField(jsonGenerator, SlimeResponseData.RESPONSE_CONFIG_MD5, configMd5); setResponseField(jsonGenerator, SlimeResponseData.RESPONSE_CONFIG_GENERATION, generation); + setResponseField(jsonGenerator, SlimeResponseData.RESPONSE_INTERNAL_REDEPLOY, internalRedeploy); setResponseField(jsonGenerator, SlimeResponseData.RESPONSE_APPLY_ON_RESTART, applyOnRestart); jsonGenerator.writeObjectFieldStart(SlimeResponseData.RESPONSE_COMPRESSION_INFO); if (responsePayload == null) { @@ -111,6 +115,9 @@ public class JRTServerConfigRequestV3 implements JRTServerConfigRequest { } @Override + public boolean isInternalRedeploy() { return internalRedeploy; } + + @Override public boolean applyOnRestart() { return applyOnRestart; } public static JRTServerConfigRequestV3 createFromRequest(Request req) { diff --git a/config/src/main/java/com/yahoo/vespa/config/protocol/SlimeConfigResponse.java b/config/src/main/java/com/yahoo/vespa/config/protocol/SlimeConfigResponse.java index 1fec7e17d06..8bdd336fd5c 100644 --- a/config/src/main/java/com/yahoo/vespa/config/protocol/SlimeConfigResponse.java +++ b/config/src/main/java/com/yahoo/vespa/config/protocol/SlimeConfigResponse.java @@ -17,24 +17,28 @@ public class SlimeConfigResponse implements ConfigResponse { private final Utf8Array payload; private final CompressionInfo compressionInfo; private final long generation; + private final boolean internalRedeploy; private final boolean applyOnRestart; private final String configMd5; public static SlimeConfigResponse fromConfigPayload(ConfigPayload payload, long generation, - boolean applyOnRestart, String configMd5) { + boolean internalRedeploy, boolean applyOnRestart, + String configMd5) { Utf8Array data = payload.toUtf8Array(true); - return new SlimeConfigResponse(data, generation, applyOnRestart, + return new SlimeConfigResponse(data, generation, internalRedeploy, applyOnRestart, configMd5, CompressionInfo.create(CompressionType.UNCOMPRESSED, data.getByteLength())); } public SlimeConfigResponse(Utf8Array payload, long generation, + boolean internalRedeploy, boolean applyOnRestart, String configMd5, CompressionInfo compressionInfo) { this.payload = payload; this.generation = generation; + this.internalRedeploy = internalRedeploy; this.applyOnRestart = applyOnRestart; this.configMd5 = configMd5; this.compressionInfo = compressionInfo; @@ -50,6 +54,13 @@ public class SlimeConfigResponse implements ConfigResponse { return generation; } + /** + * Returns whether this application instance was produced by an internal redeployment, + * not an application package change + */ + @Override + public boolean isInternalRedeploy() { return internalRedeploy; } + @Override public boolean applyOnRestart() { return applyOnRestart; } 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 cc98587456c..1c9afa550d4 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 @@ -23,6 +23,7 @@ class SlimeResponseData { static final String RESPONSE_TRACE = "trace"; static final String RESPONSE_CONFIG_MD5 = "configMD5"; static final String RESPONSE_CONFIG_GENERATION = "generation"; + static final String RESPONSE_INTERNAL_REDEPLOY = "internalRedeploy"; static final String RESPONSE_APPLY_ON_RESTART = "applyOnRestart"; static final String RESPONSE_COMPRESSION_INFO = "compressionInfo"; @@ -67,6 +68,11 @@ class SlimeResponseData { return CompressionInfo.fromSlime(getResponseField(RESPONSE_COMPRESSION_INFO)); } + boolean getResponseInternalRedeployment() { + Inspector inspector = getResponseField(RESPONSE_INTERNAL_REDEPLOY); + return inspector.valid() && inspector.asBool(); + } + boolean getResponseApplyOnRestart() { Inspector inspector = getResponseField(RESPONSE_APPLY_ON_RESTART); return inspector.valid() && inspector.asBool(); |