summaryrefslogtreecommitdiffstats
path: root/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotesCache.java
diff options
context:
space:
mode:
Diffstat (limited to 'gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotesCache.java')
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotesCache.java38
1 files changed, 37 insertions, 1 deletions
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotesCache.java b/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotesCache.java
index 8c7e7627d4..676dbb8956 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotesCache.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotesCache.java
@@ -17,10 +17,13 @@ package com.google.gerrit.server.notedb;
import com.google.auto.value.AutoValue;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.cache.Cache;
+import com.google.common.collect.Table;
import com.google.gerrit.common.Nullable;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.reviewdb.client.RefNames;
+import com.google.gerrit.server.ReviewerByEmailSet;
+import com.google.gerrit.server.ReviewerSet;
import com.google.gerrit.server.cache.CacheModule;
import com.google.gerrit.server.notedb.AbstractChangeNotes.Args;
import com.google.gerrit.server.notedb.ChangeNotesCommit.ChangeNotesRevWalk;
@@ -111,6 +114,14 @@ public class ChangeNotesCache {
+ P
+ list(state.patchSets(), patchSet())
+ P
+ + reviewerSet(state.reviewers(), 2) // REVIEWER or CC
+ + P
+ + reviewerSet(state.reviewersByEmail(), 2) // REVIEWER or CC
+ + P
+ + reviewerSet(state.pendingReviewers(), 3) // includes REMOVED
+ + P
+ + reviewerSet(state.pendingReviewersByEmail(), 3) // includes REMOVED
+ + P
+ list(state.allPastReviewers(), approval())
+ P
+ list(state.reviewerUpdates(), 4 * O + K + K + P)
@@ -122,7 +133,11 @@ public class ChangeNotesCache {
+ P
+ map(state.changeMessagesByPatchSet().asMap(), patchSetId())
+ P
- + map(state.publishedComments().asMap(), comment());
+ + map(state.publishedComments().asMap(), comment())
+ + T // readOnlyUntil
+ + 1 // isPrivate
+ + 1 // workInProgress
+ + 1; // hasReviewStarted
}
private static int ptr(Object o, int size) {
@@ -176,6 +191,27 @@ public class ChangeNotesCache {
return O + O + n * (P + elemSize);
}
+ private static int hashBasedTable(
+ Table<?, ?, ?> table, int numRows, int rowKey, int columnKey, int elemSize) {
+ return O
+ + hashtable(numRows, rowKey + hashtable(0, 0))
+ + hashtable(table.size(), columnKey + elemSize);
+ }
+
+ private static int reviewerSet(ReviewerSet reviewers, int numRows) {
+ final int rowKey = 1; // ReviewerStateInternal
+ final int columnKey = K; // Account.Id
+ final int cellValue = T; // Timestamp
+ return hashBasedTable(reviewers.asTable(), numRows, rowKey, columnKey, cellValue);
+ }
+
+ private static int reviewerSet(ReviewerByEmailSet reviewers, int numRows) {
+ final int rowKey = 1; // ReviewerStateInternal
+ final int columnKey = P + 2 * str(20); // name and email, just a guess
+ final int cellValue = T; // Timestamp
+ return hashBasedTable(reviewers.asTable(), numRows, rowKey, columnKey, cellValue);
+ }
+
private static int patchSet() {
return O
+ P