2828import org .elasticsearch .search .internal .ShardSearchRequest ;
2929import org .elasticsearch .tasks .CancellableTask ;
3030import org .elasticsearch .tasks .Task ;
31+ import org .elasticsearch .tasks .TaskId ;
3132import org .elasticsearch .test .ESSingleNodeTestCase ;
3233import org .elasticsearch .test .TestSearchContext ;
3334import org .hamcrest .Matchers ;
@@ -51,28 +52,34 @@ public class SearchSlowLogTests extends ESSingleNodeTestCase {
5152 static MockAppender appender ;
5253 static Logger queryLog = LogManager .getLogger (SearchSlowLog .INDEX_SEARCH_SLOWLOG_PREFIX + ".query" );
5354 static Logger fetchLog = LogManager .getLogger (SearchSlowLog .INDEX_SEARCH_SLOWLOG_PREFIX + ".fetch" );
55+ static Logger dfsLog = LogManager .getLogger (SearchSlowLog .INDEX_SEARCH_SLOWLOG_PREFIX + ".dfs" );
5456 static Level origQueryLogLevel = queryLog .getLevel ();
5557 static Level origFetchLogLevel = fetchLog .getLevel ();
58+ static Level origDfsLogLevel = dfsLog .getLevel ();
5659
5760 @ BeforeClass
5861 public static void init () throws IllegalAccessException {
5962 appender = new MockAppender ("trace_appender" );
6063 appender .start ();
6164 Loggers .addAppender (queryLog , appender );
6265 Loggers .addAppender (fetchLog , appender );
66+ Loggers .addAppender (dfsLog , appender );
6367
6468 Loggers .setLevel (queryLog , Level .TRACE );
6569 Loggers .setLevel (fetchLog , Level .TRACE );
70+ Loggers .setLevel (dfsLog , Level .TRACE );
6671 }
6772
6873 @ AfterClass
6974 public static void cleanup () {
7075 Loggers .removeAppender (queryLog , appender );
7176 Loggers .removeAppender (fetchLog , appender );
77+ Loggers .removeAppender (dfsLog , appender );
7278 appender .stop ();
7379
7480 Loggers .setLevel (queryLog , origQueryLogLevel );
7581 Loggers .setLevel (fetchLog , origFetchLogLevel );
82+ Loggers .setLevel (dfsLog , origDfsLogLevel );
7683 }
7784
7885 @ Override
@@ -117,6 +124,11 @@ public void testLevelPrecedence() {
117124 assertThat (appender .getLastEventAndReset ().getLevel (), equalTo (Level .INFO ));
118125 log .onFetchPhase (ctx , 41L );
119126 assertThat (appender .getLastEventAndReset ().getLevel (), equalTo (Level .WARN ));
127+
128+ log .onDfsPhase (ctx , 40L );
129+ assertThat (appender .getLastEventAndReset ().getLevel (), equalTo (Level .INFO ));
130+ log .onDfsPhase (ctx , 41L );
131+ assertThat (appender .getLastEventAndReset ().getLevel (), equalTo (Level .WARN ));
120132 }
121133
122134 {
@@ -129,6 +141,12 @@ public void testLevelPrecedence() {
129141 assertThat (appender .getLastEventAndReset ().getLevel (), equalTo (Level .DEBUG ));
130142 log .onFetchPhase (ctx , 31L );
131143 assertThat (appender .getLastEventAndReset ().getLevel (), equalTo (Level .INFO ));
144+
145+ log .onDfsPhase (ctx , 30L );
146+ assertThat (appender .getLastEventAndReset ().getLevel (), equalTo (Level .DEBUG ));
147+ log .onDfsPhase (ctx , 31L );
148+ assertThat (appender .getLastEventAndReset ().getLevel (), equalTo (Level .INFO ));
149+
132150 }
133151
134152 {
@@ -141,6 +159,11 @@ public void testLevelPrecedence() {
141159 assertThat (appender .getLastEventAndReset ().getLevel (), equalTo (Level .TRACE ));
142160 log .onFetchPhase (ctx , 21L );
143161 assertThat (appender .getLastEventAndReset ().getLevel (), equalTo (Level .DEBUG ));
162+
163+ log .onDfsPhase (ctx , 20L );
164+ assertThat (appender .getLastEventAndReset ().getLevel (), equalTo (Level .TRACE ));
165+ log .onDfsPhase (ctx , 21L );
166+ assertThat (appender .getLastEventAndReset ().getLevel (), equalTo (Level .DEBUG ));
144167 }
145168
146169 {
@@ -153,6 +176,11 @@ public void testLevelPrecedence() {
153176 assertNull (appender .getLastEventAndReset ());
154177 log .onFetchPhase (ctx , 11L );
155178 assertThat (appender .getLastEventAndReset ().getLevel (), equalTo (Level .TRACE ));
179+
180+ log .onDfsPhase (ctx , 10L );
181+ assertNull (appender .getLastEventAndReset ());
182+ log .onDfsPhase (ctx , 11L );
183+ assertThat (appender .getLastEventAndReset ().getLevel (), equalTo (Level .TRACE ));
156184 }
157185 }
158186 }
@@ -169,7 +197,12 @@ private Settings.Builder settings(String uuid) {
169197 .put (SearchSlowLog .INDEX_SEARCH_SLOWLOG_THRESHOLD_QUERY_TRACE_SETTING .getKey (), "10nanos" )
170198 .put (SearchSlowLog .INDEX_SEARCH_SLOWLOG_THRESHOLD_QUERY_DEBUG_SETTING .getKey (), "20nanos" )
171199 .put (SearchSlowLog .INDEX_SEARCH_SLOWLOG_THRESHOLD_QUERY_INFO_SETTING .getKey (), "30nanos" )
172- .put (SearchSlowLog .INDEX_SEARCH_SLOWLOG_THRESHOLD_QUERY_WARN_SETTING .getKey (), "40nanos" );
200+ .put (SearchSlowLog .INDEX_SEARCH_SLOWLOG_THRESHOLD_QUERY_WARN_SETTING .getKey (), "40nanos" )
201+
202+ .put (SearchSlowLog .INDEX_SEARCH_SLOWLOG_THRESHOLD_DFS_TRACE_SETTING .getKey (), "10nanos" )
203+ .put (SearchSlowLog .INDEX_SEARCH_SLOWLOG_THRESHOLD_DFS_DEBUG_SETTING .getKey (), "20nanos" )
204+ .put (SearchSlowLog .INDEX_SEARCH_SLOWLOG_THRESHOLD_DFS_INFO_SETTING .getKey (), "30nanos" )
205+ .put (SearchSlowLog .INDEX_SEARCH_SLOWLOG_THRESHOLD_DFS_WARN_SETTING .getKey (), "40nanos" );
173206 }
174207
175208 public void testTwoLoggersDifferentLevel () {
@@ -524,6 +557,113 @@ public void testSetFetchLevels() {
524557 }
525558 }
526559
560+ public void testSetDfsLevels () {
561+ IndexMetadata metadata = newIndexMeta (
562+ "index" ,
563+ Settings .builder ()
564+ .put (SearchSlowLog .INDEX_SEARCH_SLOWLOG_THRESHOLD_DFS_TRACE_SETTING .getKey (), "100ms" )
565+ .put (SearchSlowLog .INDEX_SEARCH_SLOWLOG_THRESHOLD_DFS_DEBUG_SETTING .getKey (), "200ms" )
566+ .put (SearchSlowLog .INDEX_SEARCH_SLOWLOG_THRESHOLD_DFS_INFO_SETTING .getKey (), "300ms" )
567+ .put (SearchSlowLog .INDEX_SEARCH_SLOWLOG_THRESHOLD_DFS_WARN_SETTING .getKey (), "400ms" )
568+ .build ()
569+ );
570+
571+ IndexSettings settings = new IndexSettings (metadata , Settings .EMPTY );
572+ SearchSlowLog log = new SearchSlowLog (settings , mock (SlowLogFields .class ));
573+ assertEquals (TimeValue .timeValueMillis (100 ).nanos (), log .getDfsTraceThreshold ());
574+ assertEquals (TimeValue .timeValueMillis (200 ).nanos (), log .getDfsDebugThreshold ());
575+ assertEquals (TimeValue .timeValueMillis (300 ).nanos (), log .getDfsInfoThreshold ());
576+ assertEquals (TimeValue .timeValueMillis (400 ).nanos (), log .getDfsWarnThreshold ());
577+
578+ settings .updateIndexMetadata (
579+ newIndexMeta (
580+ "index" ,
581+ Settings .builder ()
582+ .put (SearchSlowLog .INDEX_SEARCH_SLOWLOG_THRESHOLD_DFS_TRACE_SETTING .getKey (), "120ms" )
583+ .put (SearchSlowLog .INDEX_SEARCH_SLOWLOG_THRESHOLD_DFS_DEBUG_SETTING .getKey (), "220ms" )
584+ .put (SearchSlowLog .INDEX_SEARCH_SLOWLOG_THRESHOLD_DFS_INFO_SETTING .getKey (), "320ms" )
585+ .put (SearchSlowLog .INDEX_SEARCH_SLOWLOG_THRESHOLD_DFS_WARN_SETTING .getKey (), "420ms" )
586+ .build ()
587+ )
588+ );
589+
590+ assertEquals (TimeValue .timeValueMillis (120 ).nanos (), log .getDfsTraceThreshold ());
591+ assertEquals (TimeValue .timeValueMillis (220 ).nanos (), log .getDfsDebugThreshold ());
592+ assertEquals (TimeValue .timeValueMillis (320 ).nanos (), log .getDfsInfoThreshold ());
593+ assertEquals (TimeValue .timeValueMillis (420 ).nanos (), log .getDfsWarnThreshold ());
594+
595+ metadata = newIndexMeta ("index" , Settings .builder ().put (IndexMetadata .SETTING_VERSION_CREATED , IndexVersion .current ()).build ());
596+ settings .updateIndexMetadata (metadata );
597+ log = new SearchSlowLog (settings , mock (SlowLogFields .class ));
598+ assertEquals (TimeValue .timeValueMillis (-1 ).nanos (), log .getDfsTraceThreshold ());
599+ assertEquals (TimeValue .timeValueMillis (-1 ).nanos (), log .getDfsDebugThreshold ());
600+ assertEquals (TimeValue .timeValueMillis (-1 ).nanos (), log .getDfsInfoThreshold ());
601+ assertEquals (TimeValue .timeValueMillis (-1 ).nanos (), log .getDfsWarnThreshold ());
602+
603+ settings = new IndexSettings (metadata , Settings .EMPTY );
604+ log = new SearchSlowLog (settings , mock (SlowLogFields .class ));
605+
606+ assertEquals (TimeValue .timeValueMillis (-1 ).nanos (), log .getDfsTraceThreshold ());
607+ assertEquals (TimeValue .timeValueMillis (-1 ).nanos (), log .getDfsDebugThreshold ());
608+ assertEquals (TimeValue .timeValueMillis (-1 ).nanos (), log .getDfsInfoThreshold ());
609+ assertEquals (TimeValue .timeValueMillis (-1 ).nanos (), log .getDfsWarnThreshold ());
610+
611+ try {
612+ settings .updateIndexMetadata (
613+ newIndexMeta (
614+ "index" ,
615+ Settings .builder ()
616+ .put (SearchSlowLog .INDEX_SEARCH_SLOWLOG_THRESHOLD_DFS_TRACE_SETTING .getKey (), "NOT A TIME VALUE" )
617+ .build ()
618+ )
619+ );
620+ fail ();
621+ } catch (IllegalArgumentException ex ) {
622+ assertTimeValueException (ex , "index.search.slowlog.threshold.dfs.trace" );
623+ }
624+
625+ try {
626+ settings .updateIndexMetadata (
627+ newIndexMeta (
628+ "index" ,
629+ Settings .builder ()
630+ .put (SearchSlowLog .INDEX_SEARCH_SLOWLOG_THRESHOLD_DFS_DEBUG_SETTING .getKey (), "NOT A TIME VALUE" )
631+ .build ()
632+ )
633+ );
634+ fail ();
635+ } catch (IllegalArgumentException ex ) {
636+ assertTimeValueException (ex , "index.search.slowlog.threshold.dfs.debug" );
637+ }
638+
639+ try {
640+ settings .updateIndexMetadata (
641+ newIndexMeta (
642+ "index" ,
643+ Settings .builder ()
644+ .put (SearchSlowLog .INDEX_SEARCH_SLOWLOG_THRESHOLD_DFS_INFO_SETTING .getKey (), "NOT A TIME VALUE" )
645+ .build ()
646+ )
647+ );
648+ } catch (IllegalArgumentException ex ) {
649+ assertTimeValueException (ex , "index.search.slowlog.threshold.dfs.info" );
650+ }
651+
652+ try {
653+ settings .updateIndexMetadata (
654+ newIndexMeta (
655+ "index" ,
656+ Settings .builder ()
657+ .put (SearchSlowLog .INDEX_SEARCH_SLOWLOG_THRESHOLD_DFS_WARN_SETTING .getKey (), "NOT A TIME VALUE" )
658+ .build ()
659+ )
660+ );
661+ fail ();
662+ } catch (IllegalArgumentException ex ) {
663+ assertTimeValueException (ex , "index.search.slowlog.threshold.dfs.warn" );
664+ }
665+ }
666+
527667 private void assertTimeValueException (final IllegalArgumentException e , final String key ) {
528668 final String expected = "illegal value can't update [" + key + "] from [-1] to [NOT A TIME VALUE]" ;
529669 assertThat (e , hasToString (containsString (expected )));
0 commit comments