summaryrefslogtreecommitdiff
path: root/core/src/main/java/org/elasticsearch/common/settings/ClusterSettings.java
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/main/java/org/elasticsearch/common/settings/ClusterSettings.java')
-rw-r--r--core/src/main/java/org/elasticsearch/common/settings/ClusterSettings.java267
1 files changed, 239 insertions, 28 deletions
diff --git a/core/src/main/java/org/elasticsearch/common/settings/ClusterSettings.java b/core/src/main/java/org/elasticsearch/common/settings/ClusterSettings.java
index 1e764dce42..ea16c6aabd 100644
--- a/core/src/main/java/org/elasticsearch/common/settings/ClusterSettings.java
+++ b/core/src/main/java/org/elasticsearch/common/settings/ClusterSettings.java
@@ -19,7 +19,14 @@
package org.elasticsearch.common.settings;
import org.elasticsearch.action.admin.indices.close.TransportCloseIndexAction;
+import org.elasticsearch.action.support.AutoCreateIndex;
import org.elasticsearch.action.support.DestructiveOperations;
+import org.elasticsearch.action.support.master.TransportMasterNodeReadAction;
+import org.elasticsearch.cache.recycler.PageCacheRecycler;
+import org.elasticsearch.client.Client;
+import org.elasticsearch.client.transport.TransportClientNodesService;
+import org.elasticsearch.cluster.ClusterModule;
+import org.elasticsearch.cluster.ClusterName;
import org.elasticsearch.cluster.InternalClusterInfoService;
import org.elasticsearch.cluster.action.index.MappingUpdatedAction;
import org.elasticsearch.cluster.metadata.MetaData;
@@ -35,69 +42,116 @@ import org.elasticsearch.cluster.routing.allocation.decider.SnapshotInProgressAl
import org.elasticsearch.cluster.routing.allocation.decider.ThrottlingAllocationDecider;
import org.elasticsearch.cluster.service.InternalClusterService;
import org.elasticsearch.common.logging.ESLoggerFactory;
+import org.elasticsearch.common.network.NetworkModule;
+import org.elasticsearch.common.network.NetworkService;
+import org.elasticsearch.common.util.concurrent.EsExecutors;
+import org.elasticsearch.common.util.concurrent.ThreadContext;
+import org.elasticsearch.discovery.DiscoveryModule;
+import org.elasticsearch.discovery.DiscoveryService;
import org.elasticsearch.discovery.DiscoverySettings;
import org.elasticsearch.discovery.zen.ZenDiscovery;
import org.elasticsearch.discovery.zen.elect.ElectMasterService;
+import org.elasticsearch.discovery.zen.fd.FaultDetection;
+import org.elasticsearch.discovery.zen.ping.unicast.UnicastZenPing;
+import org.elasticsearch.env.Environment;
+import org.elasticsearch.env.NodeEnvironment;
+import org.elasticsearch.gateway.GatewayService;
import org.elasticsearch.gateway.PrimaryShardAllocator;
+import org.elasticsearch.http.HttpTransportSettings;
+import org.elasticsearch.http.netty.NettyHttpServerTransport;
import org.elasticsearch.index.IndexSettings;
import org.elasticsearch.index.store.IndexStoreConfig;
+import org.elasticsearch.indices.analysis.HunspellService;
import org.elasticsearch.indices.breaker.HierarchyCircuitBreakerService;
+import org.elasticsearch.indices.cache.query.IndicesQueryCache;
+import org.elasticsearch.indices.cache.request.IndicesRequestCache;
+import org.elasticsearch.indices.fielddata.cache.IndicesFieldDataCache;
import org.elasticsearch.indices.recovery.RecoverySettings;
+import org.elasticsearch.indices.store.IndicesStore;
import org.elasticsearch.indices.ttl.IndicesTTLService;
+import org.elasticsearch.monitor.fs.FsService;
+import org.elasticsearch.monitor.jvm.JvmGcMonitorService;
+import org.elasticsearch.monitor.jvm.JvmService;
+import org.elasticsearch.monitor.os.OsService;
+import org.elasticsearch.monitor.process.ProcessService;
+import org.elasticsearch.node.Node;
+import org.elasticsearch.node.internal.InternalSettingsPreparer;
+import org.elasticsearch.repositories.fs.FsRepository;
+import org.elasticsearch.repositories.uri.URLRepository;
+import org.elasticsearch.rest.BaseRestHandler;
+import org.elasticsearch.script.ScriptService;
import org.elasticsearch.search.SearchService;
import org.elasticsearch.threadpool.ThreadPool;
import org.elasticsearch.transport.Transport;
import org.elasticsearch.transport.TransportService;
+import org.elasticsearch.transport.TransportSettings;
+import org.elasticsearch.transport.netty.NettyTransport;
+import org.elasticsearch.tribe.TribeService;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
-import java.util.Map;
import java.util.Set;
+import java.util.function.Predicate;
/**
* Encapsulates all valid cluster level settings.
*/
public final class ClusterSettings extends AbstractScopedSettings {
+ public ClusterSettings(Settings nodeSettings, Set<Setting<?>> settingsSet) {
+ super(nodeSettings, settingsSet, Setting.Scope.CLUSTER);
+ addSettingsUpdater(new LoggingSettingUpdater(nodeSettings));
+ }
+
+ private static final class LoggingSettingUpdater implements SettingUpdater<Settings> {
+ final Predicate<String> loggerPredicate = ESLoggerFactory.LOG_LEVEL_SETTING::match;
+ private final Settings settings;
+
+ LoggingSettingUpdater(Settings settings) {
+ this.settings = settings;
+ }
- public ClusterSettings(Settings settings, Set<Setting<?>> settingsSet) {
- super(settings, settingsSet, Setting.Scope.CLUSTER);
+ @Override
+ public boolean hasChanged(Settings current, Settings previous) {
+ return current.filter(loggerPredicate).getAsMap().equals(previous.filter(loggerPredicate).getAsMap()) == false;
}
@Override
- public synchronized Settings applySettings(Settings newSettings) {
- Settings settings = super.applySettings(newSettings);
- try {
- for (Map.Entry<String, String> entry : settings.getAsMap().entrySet()) {
- if (entry.getKey().startsWith("logger.")) {
- String component = entry.getKey().substring("logger.".length());
- if ("_root".equals(component)) {
- ESLoggerFactory.getRootLogger().setLevel(entry.getValue());
+ public Settings getValue(Settings current, Settings previous) {
+ Settings.Builder builder = Settings.builder();
+ builder.put(current.filter(loggerPredicate).getAsMap());
+ for (String key : previous.getAsMap().keySet()) {
+ if (loggerPredicate.test(key) && builder.internalMap().containsKey(key) == false) {
+ if (ESLoggerFactory.LOG_LEVEL_SETTING.getConcreteSetting(key).exists(settings) == false) {
+ builder.putNull(key);
} else {
- ESLoggerFactory.getLogger(component).setLevel(entry.getValue());
+ builder.put(key, ESLoggerFactory.LOG_LEVEL_SETTING.getConcreteSetting(key).get(settings).name());
}
}
}
- } catch (Exception e) {
- logger.warn("failed to refresh settings for [{}]", e, "logger");
+ return builder.build();
}
- return settings;
- }
@Override
- public boolean hasDynamicSetting(String key) {
- return isLoggerSetting(key) || super.hasDynamicSetting(key);
+ public void apply(Settings value, Settings current, Settings previous) {
+ for (String key : value.getAsMap().keySet()) {
+ assert loggerPredicate.test(key);
+ String component = key.substring("logger.".length());
+ if ("_root".equals(component)) {
+ final String rootLevel = value.get(key);
+ ESLoggerFactory.getRootLogger().setLevel(rootLevel == null ? ESLoggerFactory.LOG_DEFAULT_LEVEL_SETTING.get(settings).name() : rootLevel);
+ } else {
+ ESLoggerFactory.getLogger(component).setLevel(value.get(key));
+ }
}
-
- /**
- * Returns <code>true</code> if the settings is a logger setting.
- */
- public boolean isLoggerSetting(String key) {
- return key.startsWith("logger.");
}
+ };
-
- public static Set<Setting<?>> BUILT_IN_CLUSTER_SETTINGS = Collections.unmodifiableSet(new HashSet<>(Arrays.asList(AwarenessAllocationDecider.CLUSTER_ROUTING_ALLOCATION_AWARENESS_ATTRIBUTE_SETTING,
+ public static Set<Setting<?>> BUILT_IN_CLUSTER_SETTINGS = Collections.unmodifiableSet(new HashSet<>(
+ Arrays.asList(AwarenessAllocationDecider.CLUSTER_ROUTING_ALLOCATION_AWARENESS_ATTRIBUTE_SETTING,
+ TransportClientNodesService.CLIENT_TRANSPORT_NODES_SAMPLER_INTERVAL, // TODO these transport client settings are kind of odd here and should only be valid if we are a transport client
+ TransportClientNodesService.CLIENT_TRANSPORT_PING_TIMEOUT,
+ TransportClientNodesService.CLIENT_TRANSPORT_IGNORE_CLUSTER_NAME,
AwarenessAllocationDecider.CLUSTER_ROUTING_ALLOCATION_AWARENESS_FORCE_GROUP_SETTING,
BalancedShardsAllocator.INDEX_BALANCE_FACTOR_SETTING,
BalancedShardsAllocator.SHARD_BALANCE_FACTOR_SETTING,
@@ -110,8 +164,13 @@ public final class ClusterSettings extends AbstractScopedSettings {
FilterAllocationDecider.CLUSTER_ROUTING_INCLUDE_GROUP_SETTING,
FilterAllocationDecider.CLUSTER_ROUTING_EXCLUDE_GROUP_SETTING,
FilterAllocationDecider.CLUSTER_ROUTING_REQUIRE_GROUP_SETTING,
+ FsRepository.REPOSITORIES_CHUNK_SIZE_SETTING,
+ FsRepository.REPOSITORIES_COMPRESS_SETTING,
+ FsRepository.REPOSITORIES_LOCATION_SETTING,
IndexStoreConfig.INDICES_STORE_THROTTLE_TYPE_SETTING,
IndexStoreConfig.INDICES_STORE_THROTTLE_MAX_BYTES_PER_SEC_SETTING,
+ IndicesQueryCache.INDICES_CACHE_QUERY_SIZE_SETTING,
+ IndicesQueryCache.INDICES_CACHE_QUERY_COUNT_SETTING,
IndicesTTLService.INDICES_TTL_INTERVAL_SETTING,
MappingUpdatedAction.INDICES_MAPPING_DYNAMIC_TIMEOUT_SETTING,
MetaData.SETTING_READ_ONLY_SETTING,
@@ -139,6 +198,33 @@ public final class ClusterSettings extends AbstractScopedSettings {
DiscoverySettings.PUBLISH_DIFF_ENABLE_SETTING,
DiscoverySettings.COMMIT_TIMEOUT_SETTING,
DiscoverySettings.NO_MASTER_BLOCK_SETTING,
+ GatewayService.EXPECTED_DATA_NODES_SETTING,
+ GatewayService.EXPECTED_MASTER_NODES_SETTING,
+ GatewayService.EXPECTED_NODES_SETTING,
+ GatewayService.RECOVER_AFTER_DATA_NODES_SETTING,
+ GatewayService.RECOVER_AFTER_MASTER_NODES_SETTING,
+ GatewayService.RECOVER_AFTER_NODES_SETTING,
+ GatewayService.RECOVER_AFTER_TIME_SETTING,
+ NetworkModule.HTTP_ENABLED,
+ HttpTransportSettings.SETTING_CORS_ALLOW_CREDENTIALS,
+ HttpTransportSettings.SETTING_CORS_ENABLED,
+ HttpTransportSettings.SETTING_CORS_MAX_AGE,
+ HttpTransportSettings.SETTING_HTTP_DETAILED_ERRORS_ENABLED,
+ HttpTransportSettings.SETTING_PIPELINING,
+ HttpTransportSettings.SETTING_CORS_ALLOW_ORIGIN,
+ HttpTransportSettings.SETTING_HTTP_PORT,
+ HttpTransportSettings.SETTING_HTTP_PUBLISH_PORT,
+ HttpTransportSettings.SETTING_PIPELINING_MAX_EVENTS,
+ HttpTransportSettings.SETTING_HTTP_COMPRESSION,
+ HttpTransportSettings.SETTING_HTTP_COMPRESSION_LEVEL,
+ HttpTransportSettings.SETTING_CORS_ALLOW_METHODS,
+ HttpTransportSettings.SETTING_CORS_ALLOW_HEADERS,
+ HttpTransportSettings.SETTING_HTTP_DETAILED_ERRORS_ENABLED,
+ HttpTransportSettings.SETTING_HTTP_MAX_CONTENT_LENGTH,
+ HttpTransportSettings.SETTING_HTTP_MAX_CHUNK_SIZE,
+ HttpTransportSettings.SETTING_HTTP_MAX_HEADER_SIZE,
+ HttpTransportSettings.SETTING_HTTP_MAX_INITIAL_LINE_LENGTH,
+ HttpTransportSettings.SETTING_HTTP_RESET_COOKIES,
HierarchyCircuitBreakerService.TOTAL_CIRCUIT_BREAKER_LIMIT_SETTING,
HierarchyCircuitBreakerService.FIELDDATA_CIRCUIT_BREAKER_LIMIT_SETTING,
HierarchyCircuitBreakerService.FIELDDATA_CIRCUIT_BREAKER_OVERHEAD_SETTING,
@@ -154,9 +240,134 @@ public final class ClusterSettings extends AbstractScopedSettings {
InternalClusterService.CLUSTER_SERVICE_RECONNECT_INTERVAL_SETTING,
HierarchyCircuitBreakerService.FIELDDATA_CIRCUIT_BREAKER_TYPE_SETTING,
HierarchyCircuitBreakerService.REQUEST_CIRCUIT_BREAKER_TYPE_SETTING,
- Transport.TRANSPORT_PROFILES_SETTING,
Transport.TRANSPORT_TCP_COMPRESS,
+ TransportSettings.TRANSPORT_PROFILES_SETTING,
+ TransportSettings.HOST,
+ TransportSettings.PUBLISH_HOST,
+ TransportSettings.BIND_HOST,
+ TransportSettings.PUBLISH_PORT,
+ TransportSettings.PORT,
+ NettyTransport.WORKER_COUNT,
+ NettyTransport.CONNECTIONS_PER_NODE_RECOVERY,
+ NettyTransport.CONNECTIONS_PER_NODE_BULK,
+ NettyTransport.CONNECTIONS_PER_NODE_REG,
+ NettyTransport.CONNECTIONS_PER_NODE_STATE,
+ NettyTransport.CONNECTIONS_PER_NODE_PING,
+ NettyTransport.PING_SCHEDULE,
+ NettyTransport.TCP_BLOCKING_CLIENT,
+ NettyTransport.TCP_CONNECT_TIMEOUT,
+ NettyTransport.NETTY_MAX_CUMULATION_BUFFER_CAPACITY,
+ NettyTransport.NETTY_MAX_COMPOSITE_BUFFER_COMPONENTS,
+ NettyTransport.NETTY_RECEIVE_PREDICTOR_SIZE,
+ NettyTransport.NETTY_RECEIVE_PREDICTOR_MIN,
+ NettyTransport.NETTY_RECEIVE_PREDICTOR_MAX,
+ NetworkService.NETWORK_SERVER,
+ NettyTransport.NETTY_BOSS_COUNT,
+ NettyTransport.TCP_NO_DELAY,
+ NettyTransport.TCP_KEEP_ALIVE,
+ NettyTransport.TCP_REUSE_ADDRESS,
+ NettyTransport.TCP_SEND_BUFFER_SIZE,
+ NettyTransport.TCP_RECEIVE_BUFFER_SIZE,
+ NettyTransport.TCP_BLOCKING_SERVER,
+ NetworkService.GLOBAL_NETWORK_HOST_SETTING,
+ NetworkService.GLOBAL_NETWORK_BINDHOST_SETTING,
+ NetworkService.GLOBAL_NETWORK_PUBLISHHOST_SETTING,
+ NetworkService.TcpSettings.TCP_NO_DELAY,
+ NetworkService.TcpSettings.TCP_KEEP_ALIVE,
+ NetworkService.TcpSettings.TCP_REUSE_ADDRESS,
+ NetworkService.TcpSettings.TCP_SEND_BUFFER_SIZE,
+ NetworkService.TcpSettings.TCP_RECEIVE_BUFFER_SIZE,
+ NetworkService.TcpSettings.TCP_BLOCKING,
+ NetworkService.TcpSettings.TCP_BLOCKING_SERVER,
+ NetworkService.TcpSettings.TCP_BLOCKING_CLIENT,
+ NetworkService.TcpSettings.TCP_CONNECT_TIMEOUT,
IndexSettings.QUERY_STRING_ANALYZE_WILDCARD,
IndexSettings.QUERY_STRING_ALLOW_LEADING_WILDCARD,
- PrimaryShardAllocator.NODE_INITIAL_SHARDS_SETTING)));
+ PrimaryShardAllocator.NODE_INITIAL_SHARDS_SETTING,
+ ScriptService.SCRIPT_CACHE_SIZE_SETTING,
+ IndicesFieldDataCache.INDICES_FIELDDATA_CLEAN_INTERVAL_SETTING,
+ IndicesFieldDataCache.INDICES_FIELDDATA_CACHE_SIZE_KEY,
+ IndicesRequestCache.INDICES_CACHE_QUERY_SIZE,
+ IndicesRequestCache.INDICES_CACHE_QUERY_EXPIRE,
+ IndicesRequestCache.INDICES_CACHE_REQUEST_CLEAN_INTERVAL,
+ HunspellService.HUNSPELL_LAZY_LOAD,
+ HunspellService.HUNSPELL_IGNORE_CASE,
+ HunspellService.HUNSPELL_DICTIONARY_OPTIONS,
+ IndicesStore.INDICES_STORE_DELETE_SHARD_TIMEOUT,
+ Environment.PATH_CONF_SETTING,
+ Environment.PATH_DATA_SETTING,
+ Environment.PATH_HOME_SETTING,
+ Environment.PATH_LOGS_SETTING,
+ Environment.PATH_PLUGINS_SETTING,
+ Environment.PATH_REPO_SETTING,
+ Environment.PATH_SCRIPTS_SETTING,
+ Environment.PATH_SHARED_DATA_SETTING,
+ Environment.PIDFILE_SETTING,
+ DiscoveryService.DISCOVERY_SEED_SETTING,
+ DiscoveryService.INITIAL_STATE_TIMEOUT_SETTING,
+ DiscoveryModule.DISCOVERY_TYPE_SETTING,
+ DiscoveryModule.ZEN_MASTER_SERVICE_TYPE_SETTING,
+ FaultDetection.PING_RETRIES_SETTING,
+ FaultDetection.PING_TIMEOUT_SETTING,
+ FaultDetection.REGISTER_CONNECTION_LISTENER_SETTING,
+ FaultDetection.PING_INTERVAL_SETTING,
+ FaultDetection.CONNECT_ON_NETWORK_DISCONNECT_SETTING,
+ ZenDiscovery.PING_TIMEOUT_SETTING,
+ ZenDiscovery.JOIN_TIMEOUT_SETTING,
+ ZenDiscovery.JOIN_RETRY_ATTEMPTS_SETTING,
+ ZenDiscovery.JOIN_RETRY_DELAY_SETTING,
+ ZenDiscovery.MAX_PINGS_FROM_ANOTHER_MASTER_SETTING,
+ ZenDiscovery.SEND_LEAVE_REQUEST_SETTING,
+ ZenDiscovery.MASTER_ELECTION_FILTER_CLIENT_SETTING,
+ ZenDiscovery.MASTER_ELECTION_WAIT_FOR_JOINS_TIMEOUT_SETTING,
+ ZenDiscovery.MASTER_ELECTION_FILTER_DATA_SETTING,
+ UnicastZenPing.DISCOVERY_ZEN_PING_UNICAST_HOSTS_SETTING,
+ UnicastZenPing.DISCOVERY_ZEN_PING_UNICAST_CONCURRENT_CONNECTS_SETTING,
+ SearchService.DEFAULT_KEEPALIVE_SETTING,
+ SearchService.KEEPALIVE_INTERVAL_SETTING,
+ Node.WRITE_PORTS_FIELD_SETTING,
+ Node.NODE_CLIENT_SETTING,
+ Node.NODE_DATA_SETTING,
+ Node.NODE_MASTER_SETTING,
+ Node.NODE_LOCAL_SETTING,
+ Node.NODE_MODE_SETTING,
+ Node.NODE_INGEST_SETTING,
+ URLRepository.ALLOWED_URLS_SETTING,
+ URLRepository.REPOSITORIES_LIST_DIRECTORIES_SETTING,
+ URLRepository.REPOSITORIES_URL_SETTING,
+ URLRepository.SUPPORTED_PROTOCOLS_SETTING,
+ TransportMasterNodeReadAction.FORCE_LOCAL_SETTING,
+ AutoCreateIndex.AUTO_CREATE_INDEX_SETTING,
+ BaseRestHandler.MULTI_ALLOW_EXPLICIT_INDEX,
+ ClusterName.CLUSTER_NAME_SETTING,
+ Client.CLIENT_TYPE_SETTING_S,
+ InternalSettingsPreparer.IGNORE_SYSTEM_PROPERTIES_SETTING,
+ ClusterModule.SHARDS_ALLOCATOR_TYPE_SETTING,
+ EsExecutors.PROCESSORS_SETTING,
+ ThreadContext.DEFAULT_HEADERS_SETTING,
+ ESLoggerFactory.LOG_DEFAULT_LEVEL_SETTING,
+ ESLoggerFactory.LOG_LEVEL_SETTING,
+ TribeService.BLOCKS_METADATA_SETTING,
+ TribeService.BLOCKS_WRITE_SETTING,
+ TribeService.BLOCKS_WRITE_INDICES_SETTING,
+ TribeService.BLOCKS_READ_INDICES_SETTING,
+ TribeService.BLOCKS_METADATA_INDICES_SETTING,
+ TribeService.ON_CONFLICT_SETTING,
+ NodeEnvironment.MAX_LOCAL_STORAGE_NODES_SETTING,
+ NodeEnvironment.ENABLE_LUCENE_SEGMENT_INFOS_TRACE_SETTING,
+ NodeEnvironment.ADD_NODE_ID_TO_CUSTOM_PATH,
+ OsService.REFRESH_INTERVAL_SETTING,
+ ProcessService.REFRESH_INTERVAL_SETTING,
+ JvmService.REFRESH_INTERVAL_SETTING,
+ FsService.REFRESH_INTERVAL_SETTING,
+ JvmGcMonitorService.ENABLED_SETTING,
+ JvmGcMonitorService.REFRESH_INTERVAL_SETTING,
+ JvmGcMonitorService.GC_SETTING,
+ PageCacheRecycler.LIMIT_HEAP_SETTING,
+ PageCacheRecycler.WEIGHT_BYTES_SETTING,
+ PageCacheRecycler.WEIGHT_INT_SETTING,
+ PageCacheRecycler.WEIGHT_LONG_SETTING,
+ PageCacheRecycler.WEIGHT_OBJECTS_SETTING,
+ PageCacheRecycler.TYPE_SETTING
+ )));
}