From 64be825f5a5702eaf2c52d857fec81e83e27fea0 Mon Sep 17 00:00:00 2001 From: Alexander Kazakov Date: Thu, 17 Oct 2019 10:27:18 +0300 Subject: [PATCH 1/2] Slow log must use separate underlying logger for each index (#47234) SlowLog instances should not share the same underlying logger, as it would cause different indexes override each other levels. When creating underlying logger, unique per index identifier should be used. Name + IndexSettings.UUID Closes #42432 --- .../elasticsearch/index/IndexingSlowLog.java | 7 ++----- .../elasticsearch/index/SearchSlowLog.java | 10 ++++----- .../index/IndexingSlowLogTests.java | 20 ++++++++++++++++++ .../index/SearchSlowLogTests.java | 21 +++++++++++++++++++ 4 files changed, 47 insertions(+), 11 deletions(-) diff --git a/server/src/main/java/org/elasticsearch/index/IndexingSlowLog.java b/server/src/main/java/org/elasticsearch/index/IndexingSlowLog.java index faeb9d3bc26e8..a3b87395a2bc5 100644 --- a/server/src/main/java/org/elasticsearch/index/IndexingSlowLog.java +++ b/server/src/main/java/org/elasticsearch/index/IndexingSlowLog.java @@ -56,8 +56,6 @@ public final class IndexingSlowLog implements IndexingOperationListener { */ private int maxSourceCharsToLog; - private SlowLogLevel level; - private final Logger indexLogger; private static final String INDEX_INDEXING_SLOWLOG_PREFIX = "index.indexing.slowlog"; @@ -94,7 +92,7 @@ public final class IndexingSlowLog implements IndexingOperationListener { }, Property.Dynamic, Property.IndexScope); IndexingSlowLog(IndexSettings indexSettings) { - this.indexLogger = LogManager.getLogger(INDEX_INDEXING_SLOWLOG_PREFIX + ".index"); + this.indexLogger = LogManager.getLogger(INDEX_INDEXING_SLOWLOG_PREFIX + ".index." + indexSettings.getUUID()); this.index = indexSettings.getIndex(); indexSettings.getScopedSettings().addSettingsUpdateConsumer(INDEX_INDEXING_SLOWLOG_REFORMAT_SETTING, this::setReformat); @@ -123,7 +121,6 @@ private void setMaxSourceCharsToLog(int maxSourceCharsToLog) { } private void setLevel(SlowLogLevel level) { - this.level = level; Loggers.setLevel(this.indexLogger, level.name()); } @@ -261,7 +258,7 @@ int getMaxSourceCharsToLog() { } SlowLogLevel getLevel() { - return level; + return SlowLogLevel.parse(indexLogger.getLevel().name()); } } diff --git a/server/src/main/java/org/elasticsearch/index/SearchSlowLog.java b/server/src/main/java/org/elasticsearch/index/SearchSlowLog.java index b4d8419d07116..2fc4955efd002 100644 --- a/server/src/main/java/org/elasticsearch/index/SearchSlowLog.java +++ b/server/src/main/java/org/elasticsearch/index/SearchSlowLog.java @@ -50,8 +50,6 @@ public final class SearchSlowLog implements SearchOperationListener { private long fetchDebugThreshold; private long fetchTraceThreshold; - private SlowLogLevel level; - private final Logger queryLogger; private final Logger fetchLogger; @@ -88,8 +86,8 @@ public final class SearchSlowLog implements SearchOperationListener { public SearchSlowLog(IndexSettings indexSettings) { - this.queryLogger = LogManager.getLogger(INDEX_SEARCH_SLOWLOG_PREFIX + ".query"); - this.fetchLogger = LogManager.getLogger(INDEX_SEARCH_SLOWLOG_PREFIX + ".fetch"); + this.queryLogger = LogManager.getLogger(INDEX_SEARCH_SLOWLOG_PREFIX + ".query." + indexSettings.getUUID()); + this.fetchLogger = LogManager.getLogger(INDEX_SEARCH_SLOWLOG_PREFIX + ".fetch." + indexSettings.getUUID()); indexSettings.getScopedSettings().addSettingsUpdateConsumer(INDEX_SEARCH_SLOWLOG_THRESHOLD_QUERY_WARN_SETTING, this::setQueryWarnThreshold); @@ -122,7 +120,6 @@ public SearchSlowLog(IndexSettings indexSettings) { } private void setLevel(SlowLogLevel level) { - this.level = level; Loggers.setLevel(queryLogger, level.name()); Loggers.setLevel(fetchLogger, level.name()); } @@ -297,6 +294,7 @@ long getFetchTraceThreshold() { } SlowLogLevel getLevel() { - return level; + assert queryLogger.getLevel().equals(fetchLogger.getLevel()); + return SlowLogLevel.parse(queryLogger.getLevel().name()); } } diff --git a/server/src/test/java/org/elasticsearch/index/IndexingSlowLogTests.java b/server/src/test/java/org/elasticsearch/index/IndexingSlowLogTests.java index 49747993ec1fa..719bc88b65579 100644 --- a/server/src/test/java/org/elasticsearch/index/IndexingSlowLogTests.java +++ b/server/src/test/java/org/elasticsearch/index/IndexingSlowLogTests.java @@ -23,6 +23,7 @@ import org.apache.lucene.document.NumericDocValuesField; import org.elasticsearch.Version; import org.elasticsearch.cluster.metadata.IndexMetaData; +import org.elasticsearch.common.UUIDs; import org.elasticsearch.common.bytes.BytesArray; import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.settings.Settings; @@ -199,6 +200,25 @@ public void testLevelSetting() { assertThat(cause, hasToString(containsString("No enum constant org.elasticsearch.index.SlowLogLevel.NOT A LEVEL"))); } assertEquals(SlowLogLevel.TRACE, log.getLevel()); + + metaData = newIndexMeta("index", Settings.builder() + .put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT) + .put(IndexMetaData.SETTING_INDEX_UUID, UUIDs.randomBase64UUID()) + .put(IndexingSlowLog.INDEX_INDEXING_SLOWLOG_LEVEL_SETTING.getKey(), SlowLogLevel.DEBUG) + .build()); + settings = new IndexSettings(metaData, Settings.EMPTY); + IndexingSlowLog debugLog = new IndexingSlowLog(settings); + + metaData = newIndexMeta("index", Settings.builder() + .put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT) + .put(IndexMetaData.SETTING_INDEX_UUID, UUIDs.randomBase64UUID()) + .put(IndexingSlowLog.INDEX_INDEXING_SLOWLOG_LEVEL_SETTING.getKey(), SlowLogLevel.INFO) + .build()); + settings = new IndexSettings(metaData, Settings.EMPTY); + IndexingSlowLog infoLog = new IndexingSlowLog(settings); + + assertEquals(SlowLogLevel.DEBUG, debugLog.getLevel()); + assertEquals(SlowLogLevel.INFO, infoLog.getLevel()); } public void testSetLevels() { diff --git a/server/src/test/java/org/elasticsearch/index/SearchSlowLogTests.java b/server/src/test/java/org/elasticsearch/index/SearchSlowLogTests.java index 4da6ef9a7abf2..a5dd5b177042a 100644 --- a/server/src/test/java/org/elasticsearch/index/SearchSlowLogTests.java +++ b/server/src/test/java/org/elasticsearch/index/SearchSlowLogTests.java @@ -22,6 +22,8 @@ import org.elasticsearch.Version; import org.elasticsearch.action.search.SearchTask; import org.elasticsearch.cluster.metadata.IndexMetaData; +import org.elasticsearch.common.UUIDs; +import org.elasticsearch.common.logging.ESLogMessage; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.common.util.BigArrays; @@ -190,6 +192,25 @@ public void testLevelSetting() { assertThat(cause, hasToString(containsString("No enum constant org.elasticsearch.index.SlowLogLevel.NOT A LEVEL"))); } assertEquals(SlowLogLevel.TRACE, log.getLevel()); + + metaData = newIndexMeta("index", Settings.builder() + .put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT) + .put(IndexMetaData.SETTING_INDEX_UUID, UUIDs.randomBase64UUID()) + .put(SearchSlowLog.INDEX_SEARCH_SLOWLOG_LEVEL.getKey(), SlowLogLevel.DEBUG) + .build()); + settings = new IndexSettings(metaData, Settings.EMPTY); + SearchSlowLog debugLog = new SearchSlowLog(settings); + + metaData = newIndexMeta("index", Settings.builder() + .put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT) + .put(IndexMetaData.SETTING_INDEX_UUID, UUIDs.randomBase64UUID()) + .put(SearchSlowLog.INDEX_SEARCH_SLOWLOG_LEVEL.getKey(), SlowLogLevel.INFO) + .build()); + settings = new IndexSettings(metaData, Settings.EMPTY); + SearchSlowLog infoLog = new SearchSlowLog(settings); + + assertEquals(SlowLogLevel.DEBUG, debugLog.getLevel()); + assertEquals(SlowLogLevel.INFO, infoLog.getLevel()); } public void testSetQueryLevels() { From 93b97d49460c5cd68d65d0f992d3ec565716acb9 Mon Sep 17 00:00:00 2001 From: Przemyslaw Gomulka Date: Thu, 17 Oct 2019 14:39:38 +0200 Subject: [PATCH 2/2] unused import --- .../test/java/org/elasticsearch/index/SearchSlowLogTests.java | 1 - 1 file changed, 1 deletion(-) diff --git a/server/src/test/java/org/elasticsearch/index/SearchSlowLogTests.java b/server/src/test/java/org/elasticsearch/index/SearchSlowLogTests.java index a5dd5b177042a..88e636fe8e9e7 100644 --- a/server/src/test/java/org/elasticsearch/index/SearchSlowLogTests.java +++ b/server/src/test/java/org/elasticsearch/index/SearchSlowLogTests.java @@ -23,7 +23,6 @@ import org.elasticsearch.action.search.SearchTask; import org.elasticsearch.cluster.metadata.IndexMetaData; import org.elasticsearch.common.UUIDs; -import org.elasticsearch.common.logging.ESLogMessage; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.common.util.BigArrays;