summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Draebing <thomas.draebing@sap.com>2023-01-13 09:54:13 +0100
committerLuca Milanesio <luca.milanesio@gmail.com>2023-10-26 21:12:14 +0000
commitfe46468962fbe866a556283f56b468a1f80bef00 (patch)
tree58cc70437395ea8d5ad1d3a2471dd40d543c75cd
parent1519e8d6d1ded4fdd1c328ba72ced90bc5b84e39 (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.java56
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());