Github user srdo commented on a diff in the pull request:
https://github.com/apache/storm/pull/2754#discussion_r209069385
--- Diff:
storm-webapp/src/main/java/org/apache/storm/daemon/logviewer/handler/LogviewerLogSearchHandler.java
---
@@ -388,63 +414,83 @@ private Integer tryParseIntParam(String paramName,
String value) throws InvalidR
}
}
+ /**
+ * Find the first N matches of target string in files.
+ * @param logs all candidate log files to search
+ * @param numMatches number of matches expected
+ * @param fileOffset
Unclear metrics
+ * @param startByteOffset number of byte to be ignored in each log file
+ * @param targetStr searched string
+ * @return all matched results
+ */
@VisibleForTesting
- Matched findNMatches(List<File> logs, int numMatches, int fileOffset,
int offset, String search) {
+ Matched findNMatches(List<File> logs, int numMatches, int fileOffset,
int startByteOffset, String targetStr) {
logs = drop(logs, fileOffset);
+ LOG.debug("{} files to scan", logs.size());
List<Map<String, Object>> matches = new ArrayList<>();
int matchCount = 0;
+ int scannedFiles = 0;
+ //TODO: Unnecessarily convoluted loop that should be optimized
while (true) {
if (logs.isEmpty()) {
break;
}
File firstLog = logs.get(0);
- Map<String, Object> theseMatches;
+ Map<String, Object> matchInLog;
try {
LOG.debug("Looking through {}", firstLog);
- theseMatches = substringSearch(firstLog, search,
numMatches - matchCount, offset);
+ matchInLog = substringSearch(firstLog, targetStr,
numMatches - matchCount, startByteOffset);
+ scannedFiles++;
} catch (InvalidRequestException e) {
LOG.error("Can't search past end of file.", e);
- theseMatches = new HashMap<>();
+ matchInLog = new HashMap<>();
}
String fileName =
WorkerLogs.getTopologyPortWorkerLog(firstLog);
+ //This section simply put the formatted log filename and
corresponding port in the matching.
final List<Map<String, Object>> newMatches = new
ArrayList<>(matches);
- Map<String, Object> currentFileMatch = new
HashMap<>(theseMatches);
+ Map<String, Object> currentFileMatch = new
HashMap<>(matchInLog);
currentFileMatch.put("fileName", fileName);
Path firstLogAbsPath;
try {
firstLogAbsPath = firstLog.getCanonicalFile().toPath();
} catch (IOException e) {
throw new RuntimeException(e);
}
+ //Why do we need to start from scratch to retrieve just the
port here?
--- End diff --
Please remove. Also what do you mean start from scratch?
---