Encapsulate implementation details of RepoSizeCache
Change-Id: I51e5353521fe7e2c879ca8b04971deeaaf19e647
Signed-off-by: Adrian Görler <adrian.goerler@sap.com>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/quota/MaxRepositorySizeQuota.java b/src/main/java/com/googlesource/gerrit/plugins/quota/MaxRepositorySizeQuota.java
index 3d42aa4..d5c9e6c 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/quota/MaxRepositorySizeQuota.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/quota/MaxRepositorySizeQuota.java
@@ -48,7 +48,7 @@
import java.util.concurrent.atomic.AtomicLong;
@Singleton
-class MaxRepositorySizeQuota implements ReceivePackInitializer, PostReceiveHook {
+class MaxRepositorySizeQuota implements ReceivePackInitializer, PostReceiveHook, RepoSizeCache {
private static final Logger log = LoggerFactory
.getLogger(MaxRepositorySizeQuota.class);
@@ -60,6 +60,7 @@
persist(REPO_SIZE_CACHE, Project.NameKey.class, AtomicLong.class)
.loader(Loader.class)
.expireAfterWrite(1, TimeUnit.DAYS);
+ bind(RepoSizeCache.class).to(MaxRepositorySizeQuota.class);
}
};
}
@@ -173,4 +174,14 @@
return size.longValue();
}
}
+
+ @Override
+ public long get(Project.NameKey p) {
+ try {
+ return cache.get(p).get();
+ } catch (ExecutionException e) {
+ log.warn("Error creating RepoSizeEvent", e);
+ return 0;
+ }
+ }
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/quota/Publisher.java b/src/main/java/com/googlesource/gerrit/plugins/quota/Publisher.java
index b68e080..26637f8 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/quota/Publisher.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/quota/Publisher.java
@@ -14,14 +14,12 @@
package com.googlesource.gerrit.plugins.quota;
-import com.google.common.cache.LoadingCache;
import com.google.gerrit.extensions.events.UsageDataPublishedListener;
import com.google.gerrit.extensions.events.UsageDataPublishedListener.Data;
import com.google.gerrit.extensions.events.UsageDataPublishedListener.Event;
import com.google.gerrit.extensions.events.UsageDataPublishedListener.MetaData;
import com.google.gerrit.extensions.registration.DynamicSet;
import com.google.gerrit.reviewdb.client.Project;
-import com.google.gerrit.reviewdb.client.Project.NameKey;
import com.google.gerrit.server.project.ProjectCache;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@@ -33,8 +31,6 @@
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.atomic.AtomicLong;
@Singleton
public class Publisher implements Runnable {
@@ -51,7 +47,7 @@
private final Iterable<UsageDataPublishedListener> listeners;
private final ProjectCache projectCache;
- private final LoadingCache<NameKey, AtomicLong> repoSizeCache;
+ private final RepoSizeCache repoSizeCache;
private final PersistentCounter fetchCounts;
private final PersistentCounter pushCounts;
@@ -59,7 +55,7 @@
public Publisher(
DynamicSet<UsageDataPublishedListener> listeners,
ProjectCache projectCache,
- @Named(MaxRepositorySizeQuota.REPO_SIZE_CACHE) LoadingCache<Project.NameKey, AtomicLong> repoSizeCache,
+ RepoSizeCache repoSizeCache,
@Named(PersistentCounter.FETCH) PersistentCounter fetchCounts,
@Named(PersistentCounter.PUSH) PersistentCounter pushCounts) {
this.listeners = listeners;
@@ -75,29 +71,27 @@
return;
}
- try {
- UsageDataEvent repoSizeEvent = createRepoSizeEvent();
- UsageDataEvent fetchCountEvent = createEvent(FETCH_COUNT, fetchCounts);
- UsageDataEvent pushCountEvent = createEvent(PUSH_COUNT, pushCounts);
- for (UsageDataPublishedListener l : listeners) {
- try {
- l.onUsageDataPublished(repoSizeEvent);
- l.onUsageDataPublished(pushCountEvent);
- l.onUsageDataPublished(fetchCountEvent);
- } catch (RuntimeException e) {
- log.warn("Failure in UsageDataPublishedListener", e);
- }
+ UsageDataEvent repoSizeEvent = createRepoSizeEvent();
+ UsageDataEvent fetchCountEvent = createEvent(FETCH_COUNT, fetchCounts);
+ UsageDataEvent pushCountEvent = createEvent(PUSH_COUNT, pushCounts);
+ for (UsageDataPublishedListener l : listeners) {
+ try {
+ l.onUsageDataPublished(repoSizeEvent);
+ l.onUsageDataPublished(pushCountEvent);
+ l.onUsageDataPublished(fetchCountEvent);
+ } catch (RuntimeException e) {
+ log.warn("Failure in UsageDataPublishedListener", e);
}
- } catch (ExecutionException e) {
- log.warn("Error creating RepoSizeEvent", e);
}
}
- private UsageDataEvent createRepoSizeEvent() throws ExecutionException {
+ private UsageDataEvent createRepoSizeEvent() {
UsageDataEvent event = new UsageDataEvent(REPO_SIZE);
for (Project.NameKey p : projectCache.all()) {
- long size = repoSizeCache.get(p).get();
+ long size = repoSizeCache.get(p);
+ if (size > 0) {
event.addData(size, p.get());
+ }
}
return event;
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/quota/RepoSizeCache.java b/src/main/java/com/googlesource/gerrit/plugins/quota/RepoSizeCache.java
new file mode 100644
index 0000000..697c61e
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/quota/RepoSizeCache.java
@@ -0,0 +1,22 @@
+// Copyright (C) 2014 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.googlesource.gerrit.plugins.quota;
+
+import com.google.gerrit.reviewdb.client.Project;
+
+public interface RepoSizeCache {
+
+ long get(Project.NameKey p);
+}