forked from opensearch-project/OpenSearch
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Request level coordinator slow logs (opensearch-project#10650)
Signed-off-by: David Zane <[email protected]>
- Loading branch information
Showing
31 changed files
with
997 additions
and
76 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
124 changes: 124 additions & 0 deletions
124
server/src/main/java/org/opensearch/action/search/SearchRequestContext.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,124 @@ | ||
/* | ||
* SPDX-License-Identifier: Apache-2.0 | ||
* | ||
* The OpenSearch Contributors require contributions made to | ||
* this file be licensed under the Apache-2.0 license or a | ||
* compatible open source license. | ||
*/ | ||
|
||
package org.opensearch.action.search; | ||
|
||
import org.apache.logging.log4j.LogManager; | ||
import org.apache.lucene.search.TotalHits; | ||
|
||
import java.util.EnumMap; | ||
import java.util.HashMap; | ||
import java.util.List; | ||
import java.util.Locale; | ||
import java.util.Map; | ||
|
||
/** | ||
* This class holds request-level context for search queries at the coordinator node | ||
* | ||
* @opensearch.internal | ||
*/ | ||
public class SearchRequestContext { | ||
private final SearchRequestOperationsListener searchRequestOperationsListener; | ||
private long absoluteStartNanos; | ||
private final Map<String, Long> phaseTookMap; | ||
private TotalHits totalHits; | ||
private final EnumMap<ShardStatsFieldNames, Integer> shardStats; | ||
|
||
/** | ||
* This constructor is for testing only | ||
*/ | ||
public SearchRequestContext() { | ||
this(new SearchRequestOperationsListener.CompositeListener(List.of(), LogManager.getLogger())); | ||
} | ||
|
||
public SearchRequestContext(SearchRequestOperationsListener searchRequestOperationsListener) { | ||
this.searchRequestOperationsListener = searchRequestOperationsListener; | ||
this.absoluteStartNanos = System.nanoTime(); | ||
this.phaseTookMap = new HashMap<>(); | ||
this.shardStats = new EnumMap<>(ShardStatsFieldNames.class); | ||
} | ||
|
||
SearchRequestOperationsListener getSearchRequestOperationsListener() { | ||
return searchRequestOperationsListener; | ||
} | ||
|
||
void updatePhaseTookMap(String phaseName, Long tookTime) { | ||
this.phaseTookMap.put(phaseName, tookTime); | ||
} | ||
|
||
Map<String, Long> phaseTookMap() { | ||
return phaseTookMap; | ||
} | ||
|
||
/** | ||
* Override absoluteStartNanos set in constructor. | ||
* For testing only | ||
*/ | ||
void setAbsoluteStartNanos(long absoluteStartNanos) { | ||
this.absoluteStartNanos = absoluteStartNanos; | ||
} | ||
|
||
/** | ||
* Request start time in nanos | ||
*/ | ||
long getAbsoluteStartNanos() { | ||
return absoluteStartNanos; | ||
} | ||
|
||
void setTotalHits(TotalHits totalHits) { | ||
this.totalHits = totalHits; | ||
} | ||
|
||
TotalHits totalHits() { | ||
return totalHits; | ||
} | ||
|
||
void setShardStats(int total, int successful, int skipped, int failed) { | ||
this.shardStats.put(ShardStatsFieldNames.SEARCH_REQUEST_SLOWLOG_SHARD_TOTAL, total); | ||
this.shardStats.put(ShardStatsFieldNames.SEARCH_REQUEST_SLOWLOG_SHARD_SUCCESSFUL, successful); | ||
this.shardStats.put(ShardStatsFieldNames.SEARCH_REQUEST_SLOWLOG_SHARD_SKIPPED, skipped); | ||
this.shardStats.put(ShardStatsFieldNames.SEARCH_REQUEST_SLOWLOG_SHARD_FAILED, failed); | ||
} | ||
|
||
String formattedShardStats() { | ||
if (shardStats.isEmpty()) { | ||
return ""; | ||
} else { | ||
return String.format( | ||
Locale.ROOT, | ||
"{%s:%s, %s:%s, %s:%s, %s:%s}", | ||
ShardStatsFieldNames.SEARCH_REQUEST_SLOWLOG_SHARD_TOTAL.toString(), | ||
shardStats.get(ShardStatsFieldNames.SEARCH_REQUEST_SLOWLOG_SHARD_TOTAL), | ||
ShardStatsFieldNames.SEARCH_REQUEST_SLOWLOG_SHARD_SUCCESSFUL.toString(), | ||
shardStats.get(ShardStatsFieldNames.SEARCH_REQUEST_SLOWLOG_SHARD_SUCCESSFUL), | ||
ShardStatsFieldNames.SEARCH_REQUEST_SLOWLOG_SHARD_SKIPPED.toString(), | ||
shardStats.get(ShardStatsFieldNames.SEARCH_REQUEST_SLOWLOG_SHARD_SKIPPED), | ||
ShardStatsFieldNames.SEARCH_REQUEST_SLOWLOG_SHARD_FAILED.toString(), | ||
shardStats.get(ShardStatsFieldNames.SEARCH_REQUEST_SLOWLOG_SHARD_FAILED) | ||
); | ||
} | ||
} | ||
} | ||
|
||
enum ShardStatsFieldNames { | ||
SEARCH_REQUEST_SLOWLOG_SHARD_TOTAL("total"), | ||
SEARCH_REQUEST_SLOWLOG_SHARD_SUCCESSFUL("successful"), | ||
SEARCH_REQUEST_SLOWLOG_SHARD_SKIPPED("skipped"), | ||
SEARCH_REQUEST_SLOWLOG_SHARD_FAILED("failed"); | ||
|
||
private final String name; | ||
|
||
ShardStatsFieldNames(String name) { | ||
this.name = name; | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
return this.name; | ||
} | ||
} |
Oops, something went wrong.