From 9c72bc5a718af49a105a855526284200d7f63e06 Mon Sep 17 00:00:00 2001 From: Vladimir Kotal Date: Mon, 15 Jul 2024 12:34:29 +0200 Subject: [PATCH 1/6] do not log stack trace for CacheException reporting disabled cache annotation fixes #4596 --- .../indexer/history/CacheException.java | 23 ++++++++++++++++++- .../opengrok/indexer/history/HistoryGuru.java | 2 +- .../opengrok/indexer/index/IndexDatabase.java | 2 +- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/opengrok-indexer/src/main/java/org/opengrok/indexer/history/CacheException.java b/opengrok-indexer/src/main/java/org/opengrok/indexer/history/CacheException.java index d8936389c8c..217b1adb5fd 100644 --- a/opengrok-indexer/src/main/java/org/opengrok/indexer/history/CacheException.java +++ b/opengrok-indexer/src/main/java/org/opengrok/indexer/history/CacheException.java @@ -18,7 +18,7 @@ */ /* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved. */ package org.opengrok.indexer.history; @@ -32,6 +32,7 @@ public class CacheException extends Exception { private static final long serialVersionUID = 1L; private final Level level; + private final boolean logTrace; /** * Construct a {@code CacheException} with the specified message. @@ -50,6 +51,20 @@ public CacheException(String msg) { public CacheException(String msg, Level level) { super(msg); this.level = level; + this.logTrace = true; + } + + /** + * Construct a {@code CacheException} with the specified message and log level + * and whether to log stack trace. + * @param msg message + * @param level suggested log level + * @param logTrace whether to log stack trace + */ + public CacheException(String msg, Level level, boolean logTrace) { + super(msg); + this.level = level; + this.logTrace = logTrace; } /** @@ -60,6 +75,7 @@ public CacheException(String msg, Level level) { public CacheException(Throwable cause) { super(cause); this.level = Level.WARNING; + this.logTrace = true; } /** @@ -71,6 +87,7 @@ public CacheException(Throwable cause) { public CacheException(String msg, Throwable cause) { super(msg, cause); this.level = Level.WARNING; + this.logTrace = true; } /** @@ -79,4 +96,8 @@ public CacheException(String msg, Throwable cause) { public Level getLevel() { return level; } + + public boolean isLogTrace() { + return this.logTrace; + } } \ No newline at end of file diff --git a/opengrok-indexer/src/main/java/org/opengrok/indexer/history/HistoryGuru.java b/opengrok-indexer/src/main/java/org/opengrok/indexer/history/HistoryGuru.java index 5b9c31e77b9..683b180c856 100644 --- a/opengrok-indexer/src/main/java/org/opengrok/indexer/history/HistoryGuru.java +++ b/opengrok-indexer/src/main/java/org/opengrok/indexer/history/HistoryGuru.java @@ -1180,7 +1180,7 @@ public void createAnnotationCache(File file, String latestRev) throws CacheExcep if (!repository.isWorking() || !repository.isAnnotationCacheEnabled()) { throw new CacheException( String.format("repository %s does not allow to create annotation cache for '%s'", - repository, file), Level.FINER); + repository, file), Level.FINER, false); } LOGGER.finest(() -> String.format("creating annotation cache for '%s'", launderLog(file.toString()))); diff --git a/opengrok-indexer/src/main/java/org/opengrok/indexer/index/IndexDatabase.java b/opengrok-indexer/src/main/java/org/opengrok/indexer/index/IndexDatabase.java index 300ecf71540..fe98060eb6c 100644 --- a/opengrok-indexer/src/main/java/org/opengrok/indexer/index/IndexDatabase.java +++ b/opengrok-indexer/src/main/java/org/opengrok/indexer/index/IndexDatabase.java @@ -1306,7 +1306,7 @@ private static void createAnnotationCache(File file, Document doc) { // call above) directly. HistoryGuru.getInstance().createAnnotationCache(file, lastRev); } catch (CacheException e) { - LOGGER.log(e.getLevel(), "failed to create annotation", e); + LOGGER.log(e.getLevel(), "failed to create annotation", e.isLogTrace() ? e : e.getMessage()); } } } From 3565df90aa20b75c7b36ec8af479e17700b1bf6c Mon Sep 17 00:00:00 2001 From: Vladimir Kotal Date: Mon, 15 Jul 2024 12:38:08 +0200 Subject: [PATCH 2/6] use this() where possible --- .../java/org/opengrok/indexer/history/CacheException.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/opengrok-indexer/src/main/java/org/opengrok/indexer/history/CacheException.java b/opengrok-indexer/src/main/java/org/opengrok/indexer/history/CacheException.java index 217b1adb5fd..54eb564cf85 100644 --- a/opengrok-indexer/src/main/java/org/opengrok/indexer/history/CacheException.java +++ b/opengrok-indexer/src/main/java/org/opengrok/indexer/history/CacheException.java @@ -49,9 +49,7 @@ public CacheException(String msg) { * @param level suggested log level */ public CacheException(String msg, Level level) { - super(msg); - this.level = level; - this.logTrace = true; + this(msg, level, true); } /** From f4700a7b101a9facb1bfab923adc3d71bf63e675 Mon Sep 17 00:00:00 2001 From: Vladimir Kotal Date: Mon, 15 Jul 2024 13:18:43 +0200 Subject: [PATCH 3/6] add quotes around path names --- .../src/main/java/org/opengrok/indexer/analysis/Ctags.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/opengrok-indexer/src/main/java/org/opengrok/indexer/analysis/Ctags.java b/opengrok-indexer/src/main/java/org/opengrok/indexer/analysis/Ctags.java index af942d22a93..5f8e277822c 100644 --- a/opengrok-indexer/src/main/java/org/opengrok/indexer/analysis/Ctags.java +++ b/opengrok-indexer/src/main/java/org/opengrok/indexer/analysis/Ctags.java @@ -643,10 +643,10 @@ private static SourceSplitter trySplitSource(String filename) { StreamSource src = StreamSource.fromFile(new File(filename)); splitter.reset(src); } catch (NullPointerException | IOException ex) { - LOGGER.log(Level.WARNING, "Failed to re-read {0}", filename); + LOGGER.log(Level.WARNING, "Failed to re-read ''{0}''", filename); return null; } - LOGGER.log(Level.FINEST, "Re-read {0}", filename); + LOGGER.log(Level.FINEST, "Re-read ''{0}''", filename); return splitter; } } From 295798cd91a7d46a4d9598d98894db1e26ed088d Mon Sep 17 00:00:00 2001 From: Vladimir Kotal Date: Mon, 15 Jul 2024 15:06:53 +0200 Subject: [PATCH 4/6] use format to print the stack-less message otherwise it would print nothing --- .../java/org/opengrok/indexer/index/IndexDatabase.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/opengrok-indexer/src/main/java/org/opengrok/indexer/index/IndexDatabase.java b/opengrok-indexer/src/main/java/org/opengrok/indexer/index/IndexDatabase.java index fe98060eb6c..fb4b78e4e6d 100644 --- a/opengrok-indexer/src/main/java/org/opengrok/indexer/index/IndexDatabase.java +++ b/opengrok-indexer/src/main/java/org/opengrok/indexer/index/IndexDatabase.java @@ -1306,7 +1306,12 @@ private static void createAnnotationCache(File file, Document doc) { // call above) directly. HistoryGuru.getInstance().createAnnotationCache(file, lastRev); } catch (CacheException e) { - LOGGER.log(e.getLevel(), "failed to create annotation", e.isLogTrace() ? e : e.getMessage()); + final String logPrefix = "failed to create annotation"; + if (e.isLogTrace()) { + LOGGER.log(e.getLevel(), logPrefix, e); + } else { + LOGGER.log(e.getLevel(), String.format("%s: %s", logPrefix, e.getMessage())); + } } } } From 7477deb7336d536420a81e78d65d1f37ded6c890 Mon Sep 17 00:00:00 2001 From: Vladimir Kotal Date: Mon, 15 Jul 2024 15:55:48 +0200 Subject: [PATCH 5/6] log the latest cached revision --- .../java/org/opengrok/indexer/history/FileHistoryCache.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/opengrok-indexer/src/main/java/org/opengrok/indexer/history/FileHistoryCache.java b/opengrok-indexer/src/main/java/org/opengrok/indexer/history/FileHistoryCache.java index 0f36b1a3cec..87d79ab526b 100644 --- a/opengrok-indexer/src/main/java/org/opengrok/indexer/history/FileHistoryCache.java +++ b/opengrok-indexer/src/main/java/org/opengrok/indexer/history/FileHistoryCache.java @@ -18,7 +18,7 @@ */ /* - * Copyright (c) 2008, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, Oracle and/or its affiliates. All rights reserved. * Portions Copyright (c) 2018, 2020, Chris Fraire . */ package org.opengrok.indexer.history; @@ -715,6 +715,7 @@ private void storeLatestCachedRevision(Repository repository, String rev) { Path newPath = Path.of(getRepositoryCachedRevPath(repository)); try (Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(newPath.toFile())))) { writer.write(rev); + LOGGER.finest(() -> String.format("stored latest cached revision %s for repository %s", rev, repository)); } catch (IOException ex) { LOGGER.log(Level.WARNING, String.format("Cannot write latest cached revision to file for repository %s", repository), ex); From 4101fc09adcf52999962f41230cb4397d95c1288 Mon Sep 17 00:00:00 2001 From: Vladimir Kotal Date: Mon, 15 Jul 2024 15:57:06 +0200 Subject: [PATCH 6/6] remove commented out code --- .../java/org/opengrok/indexer/history/FileHistoryCache.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/opengrok-indexer/src/main/java/org/opengrok/indexer/history/FileHistoryCache.java b/opengrok-indexer/src/main/java/org/opengrok/indexer/history/FileHistoryCache.java index 87d79ab526b..14c75967647 100644 --- a/opengrok-indexer/src/main/java/org/opengrok/indexer/history/FileHistoryCache.java +++ b/opengrok-indexer/src/main/java/org/opengrok/indexer/history/FileHistoryCache.java @@ -239,7 +239,6 @@ public static void writeTagsTo(File outputFile, History history) throws IOExcept smileFactory.configure(SmileGenerator.Feature.CHECK_SHARED_STRING_VALUES, false); ObjectMapper mapper = new SmileMapper(smileFactory); - // ObjectMapper mapper = new JsonMapper(); ObjectWriter objectWriter = mapper.writer().forType(HashMap.class); try (OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(outputFile))) { @@ -255,7 +254,6 @@ private static ObjectWriter getObjectWriter() { smileFactory.configure(SmileGenerator.Feature.CHECK_SHARED_STRING_VALUES, false); ObjectMapper mapper = new SmileMapper(smileFactory); - // ObjectMapper mapper = new JsonMapper(); return mapper.writer().forType(HistoryEntry.class); }