diff options
author | Thomas Draebing <thomas.draebing@sap.com> | 2023-01-13 09:54:13 +0100 |
---|---|---|
committer | Luca Milanesio <luca.milanesio@gmail.com> | 2023-10-26 21:12:14 +0000 |
commit | fe46468962fbe866a556283f56b468a1f80bef00 (patch) | |
tree | 58cc70437395ea8d5ad1d3a2471dd40d543c75cd | |
parent | 1519e8d6d1ded4fdd1c328ba72ced90bc5b84e39 (diff) |
Allow tracing memory allocation for indexing a change
Release-Notes: skip
Change-Id: Ie7c6571c64e9294fb701158d2f3d739674238185
(cherry picked from commit d99b511aae46e12cc2eefc686aa1ab560cb7e750)
-rw-r--r-- | java/com/google/gerrit/server/index/change/ChangeIndexer.java | 56 |
1 files changed, 36 insertions, 20 deletions
diff --git a/java/com/google/gerrit/server/index/change/ChangeIndexer.java b/java/com/google/gerrit/server/index/change/ChangeIndexer.java index 17401ec3a7..bf83a1b32a 100644 --- a/java/com/google/gerrit/server/index/change/ChangeIndexer.java +++ b/java/com/google/gerrit/server/index/change/ChangeIndexer.java @@ -27,6 +27,8 @@ import com.google.gerrit.entities.Project; import com.google.gerrit.exceptions.StorageException; import com.google.gerrit.extensions.events.ChangeIndexedListener; import com.google.gerrit.index.Index; +import com.google.gerrit.metrics.proc.ThreadMXBeanFactory; +import com.google.gerrit.metrics.proc.ThreadMXBeanInterface; import com.google.gerrit.server.config.GerritServerConfig; import com.google.gerrit.server.index.IndexExecutor; import com.google.gerrit.server.index.StalenessCheckResult; @@ -63,6 +65,7 @@ import org.eclipse.jgit.lib.Config; */ public class ChangeIndexer { private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + private static final ThreadMXBeanInterface threadMxBean = ThreadMXBeanFactory.create(); public interface Factory { ChangeIndexer create(ListeningExecutorService executor, ChangeIndex index); @@ -219,27 +222,40 @@ public class ChangeIndexer { } private void indexImpl(ChangeData cd) { - logger.atFine().log("Reindex change %d in index.", cd.getId().get()); - for (Index<?, ChangeData> i : getWriteIndexes()) { - try (TraceTimer traceTimer = - TraceContext.newTimer( - "Reindexing change in index", - Metadata.builder() - .changeId(cd.getId().get()) - .patchSetId(cd.currentPatchSet().number()) - .indexVersion(i.getSchema().getVersion()) - .build())) { - if (isFirstInsertForEntry.equals(IsFirstInsertForEntry.YES)) { - i.insert(cd); - } else { - i.replace(cd); + long memoryAtStart = 0; + if (logger.atFine().isEnabled()) { + memoryAtStart = threadMxBean.getCurrentThreadAllocatedBytes(); + logger.atFine().log("Reindex change %d in index.", cd.getId().get()); + } + try { + for (Index<?, ChangeData> i : getWriteIndexes()) { + try (TraceTimer traceTimer = + TraceContext.newTimer( + "Reindexing change in index", + Metadata.builder() + .changeId(cd.getId().get()) + .patchSetId(cd.currentPatchSet().number()) + .indexVersion(i.getSchema().getVersion()) + .build())) { + if (isFirstInsertForEntry.equals(IsFirstInsertForEntry.YES)) { + i.insert(cd); + } else { + i.replace(cd); + } + } catch (RuntimeException e) { + throw new StorageException( + String.format( + "Failed to reindex change %d in index version %d (current patch set = %d)", + cd.getId().get(), i.getSchema().getVersion(), cd.currentPatchSet().number()), + e); } - } catch (RuntimeException e) { - throw new StorageException( - String.format( - "Failed to reindex change %d in index version %d (current patch set = %d)", - cd.getId().get(), i.getSchema().getVersion(), cd.currentPatchSet().number()), - e); + } + } finally { + if (logger.atFine().isEnabled()) { + long memAllocated = threadMxBean.getCurrentThreadAllocatedBytes() - memoryAtStart; + logger.atFine().log( + "Reindexing of change %d allocated %d bytes of memory.", + cd.getId().get(), memAllocated); } } fireChangeIndexedEvent(cd.project().get(), cd.getId().get()); |