aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArne H Juul <arnej27959@users.noreply.github.com>2021-11-16 14:29:00 +0100
committerGitHub <noreply@github.com>2021-11-16 14:29:00 +0100
commit625434397bb349ba02469afaa6e9af017f6c2d00 (patch)
tree1562eb1ae20ba5d95a370a3a6b37d2b4864d1b2b
parent4b155495f7d05176364ccfb86b12f2a7ac1f37cf (diff)
parentfeeaa3eda037278bb4f483e2000606cd12afc582 (diff)
Merge pull request #20018 from vespa-engine/arnej/add-feature-flag-to-ignore-stack-sizes
ignore requested stack sizes
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java1
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/ConfigSentinel.java3
-rw-r--r--configd/src/apps/sentinel/manager.cpp5
-rw-r--r--configdefinitions/src/vespa/sentinel.def3
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java3
-rw-r--r--fastos/src/vespa/fastos/unix_thread.cpp7
-rw-r--r--flags/src/main/java/com/yahoo/vespa/flags/Flags.java7
7 files changed, 28 insertions, 1 deletions
diff --git a/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java b/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java
index c5781c2805d..2232297d296 100644
--- a/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java
+++ b/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java
@@ -105,6 +105,7 @@ public interface ModelContext {
@ModelFeatureFlag(owners = {"vekterli", "geirst"}) default boolean distributorEnhancedMaintenanceScheduling() { return false; }
@ModelFeatureFlag(owners = {"arnej"}) default boolean forwardIssuesAsErrors() { return true; }
@ModelFeatureFlag(owners = {"geirst", "vekterli"}) default boolean asyncApplyBucketDiff() { return false; }
+ @ModelFeatureFlag(owners = {"arnej"}) default boolean ignoreThreadStackSizes() { return false; }
}
/** Warning: As elsewhere in this package, do not make backwards incompatible changes that will break old config models! */
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/ConfigSentinel.java b/config-model/src/main/java/com/yahoo/vespa/model/ConfigSentinel.java
index c86cda0bbd1..217f6cff778 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/ConfigSentinel.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/ConfigSentinel.java
@@ -19,6 +19,7 @@ public class ConfigSentinel extends AbstractService implements SentinelConfig.Pr
private final ApplicationId applicationId;
private final Zone zone;
+ private final boolean ignoreRequestedStackSizes;
/**
* Constructs a new ConfigSentinel for the given host.
@@ -31,6 +32,7 @@ public class ConfigSentinel extends AbstractService implements SentinelConfig.Pr
super(host, "sentinel");
this.applicationId = applicationId;
this.zone = zone;
+ this.ignoreRequestedStackSizes = featureFlags.ignoreThreadStackSizes();
portsMeta.on(0).tag("rpc").tag("admin");
portsMeta.on(1).tag("telnet").tag("interactive").tag("http").tag("state");
setProp("clustertype", "hosts");
@@ -73,6 +75,7 @@ public class ConfigSentinel extends AbstractService implements SentinelConfig.Pr
@Override
public void getConfig(SentinelConfig.Builder builder) {
builder.application(getApplicationConfig());
+ builder.ignoreRequestedStackSizes(ignoreRequestedStackSizes);
for (Service s : getHostResource().getServices()) {
if (s.getStartupCommand() != null) {
builder.service(getServiceConfig(s));
diff --git a/configd/src/apps/sentinel/manager.cpp b/configd/src/apps/sentinel/manager.cpp
index 631f63febd5..ffa9c9281fa 100644
--- a/configd/src/apps/sentinel/manager.cpp
+++ b/configd/src/apps/sentinel/manager.cpp
@@ -79,6 +79,11 @@ Manager::doConfigure()
LOG_ASSERT(_env.configOwner().hasConfig());
const SentinelConfig& config(_env.configOwner().getConfig());
+ if (config.ignoreRequestedStackSizes) {
+ setenv("VESPA_IGNORE_REQUESTED_STACK_SIZES", "true", 1);
+ } else {
+ unsetenv("VESPA_IGNORE_REQUESTED_STACK_SIZES");
+ }
_env.rpcPort(config.port.rpc);
_env.statePort(config.port.telnet);
diff --git a/configdefinitions/src/vespa/sentinel.def b/configdefinitions/src/vespa/sentinel.def
index cccf931938a..7bd4a000055 100644
--- a/configdefinitions/src/vespa/sentinel.def
+++ b/configdefinitions/src/vespa/sentinel.def
@@ -28,6 +28,9 @@ connectivity.minOkPercent int default=50
## Absolute number of nodes with confirmed network connectivity problems, maximum
connectivity.maxBadCount int default=1
+## Ask low-level thread creation to honor requested stack size
+ignoreRequestedStackSizes bool default=false restart
+
## The command to run. This will be run by sh -c, and the following
## environment variables are defined: $ROOT, $VESPA_SERVICE_NAME,
## $VESPA_CONFIG_ID
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java
index 0b55c4bb53e..90c13364ac0 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java
@@ -198,6 +198,7 @@ public class ModelContextImpl implements ModelContext {
private final int maxUnCommittedMemory;
private final boolean forwardIssuesAsErrors;
private final boolean asyncApplyBucketDiff;
+ private final boolean ignoreThreadStackSizes;
public FeatureFlags(FlagSource source, ApplicationId appId) {
this.defaultTermwiseLimit = flagValue(source, appId, Flags.DEFAULT_TERM_WISE_LIMIT);
@@ -234,6 +235,7 @@ public class ModelContextImpl implements ModelContext {
this.maxUnCommittedMemory = flagValue(source, appId, Flags.MAX_UNCOMMITTED_MEMORY);;
this.forwardIssuesAsErrors = flagValue(source, appId, PermanentFlags.FORWARD_ISSUES_AS_ERRORS);
this.asyncApplyBucketDiff = flagValue(source, appId, Flags.ASYNC_APPLY_BUCKET_DIFF);
+ this.ignoreThreadStackSizes = flagValue(source, appId, Flags.IGNORE_THREAD_STACK_SIZES);
}
@Override public double defaultTermwiseLimit() { return defaultTermwiseLimit; }
@@ -272,6 +274,7 @@ public class ModelContextImpl implements ModelContext {
@Override public int maxUnCommittedMemory() { return maxUnCommittedMemory; }
@Override public boolean forwardIssuesAsErrors() { return forwardIssuesAsErrors; }
@Override public boolean asyncApplyBucketDiff() { return asyncApplyBucketDiff; }
+ @Override public boolean ignoreThreadStackSizes() { return ignoreThreadStackSizes; }
private static <V> V flagValue(FlagSource source, ApplicationId appId, UnboundFlag<? extends V, ?, ?> flag) {
return flag.bindTo(source)
diff --git a/fastos/src/vespa/fastos/unix_thread.cpp b/fastos/src/vespa/fastos/unix_thread.cpp
index d7a0ed879c0..a45d90426ef 100644
--- a/fastos/src/vespa/fastos/unix_thread.cpp
+++ b/fastos/src/vespa/fastos/unix_thread.cpp
@@ -71,7 +71,12 @@ bool FastOS_UNIX_Thread::Initialize (int stackSize, int stackGuardSize)
#else
adjusted_stack_size += PTHREAD_STACK_MIN;
#endif
- pthread_attr_setstacksize(&attr, adjusted_stack_size);
+ if (getenv("VESPA_IGNORE_REQUESTED_STACK_SIZES") == nullptr) {
+ //fprintf(stderr, "pthread_create: using adjusted stack size %zd\n", adjusted_stack_size);
+ pthread_attr_setstacksize(&attr, adjusted_stack_size);
+ } else {
+ //fprintf(stderr, "pthread_create: ignoring requested stack size %d\n", stackSize);
+ }
rc = (0 == pthread_create(&_handle, &attr, FastOS_ThreadHook, this));
if (rc)
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 3cbdb9e1c56..74e0ab2c3d9 100644
--- a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
+++ b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
@@ -363,6 +363,13 @@ public class Flags {
HOSTNAME,
NODE_TYPE);
+ public static final UnboundBooleanFlag IGNORE_THREAD_STACK_SIZES = defineFeatureFlag(
+ "ignore-thread-stack-sizes", false,
+ List.of("arnej"), "2021-11-12", "2022-01-31",
+ "Whether C++ thread creation should ignore any requested stack size",
+ "Triggers restart, takes effect immediately",
+ ZONE_ID, APPLICATION_ID);
+
public static final UnboundBooleanFlag USE_FILE_DISTRIBUTION_CONNECTION_POOL = defineFeatureFlag(
"use-file-distribution-connection-pool", false,
List.of("hmusum"), "2021-11-16", "2021-12-16",