killbill-memoizeit

Details

diff --git a/meter/src/main/java/com/ning/billing/meter/api/user/JsonSamplesOutputer.java b/meter/src/main/java/com/ning/billing/meter/api/user/JsonSamplesOutputer.java
index 9478edf..46434eb 100644
--- a/meter/src/main/java/com/ning/billing/meter/api/user/JsonSamplesOutputer.java
+++ b/meter/src/main/java/com/ning/billing/meter/api/user/JsonSamplesOutputer.java
@@ -95,7 +95,13 @@ public abstract class JsonSamplesOutputer {
     private List<Integer> translateSourcesToSourceIds(final List<String> sources) {
         final List<Integer> hostIds = new ArrayList<Integer>(sources.size());
         for (final String source : sources) {
-            hostIds.add(timelineDao.getSourceId(source, context));
+            final Integer sourceId = timelineDao.getSourceId(source, context);
+            if (sourceId == null) {
+                // Ignore
+                continue;
+            }
+
+            hostIds.add(sourceId);
         }
 
         return hostIds;
diff --git a/meter/src/main/java/com/ning/billing/meter/timeline/persistent/CachingTimelineDao.java b/meter/src/main/java/com/ning/billing/meter/timeline/persistent/CachingTimelineDao.java
index f0231ab..1ad87f3 100644
--- a/meter/src/main/java/com/ning/billing/meter/timeline/persistent/CachingTimelineDao.java
+++ b/meter/src/main/java/com/ning/billing/meter/timeline/persistent/CachingTimelineDao.java
@@ -34,24 +34,25 @@ import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 
 import com.google.common.collect.BiMap;
+import com.google.common.collect.HashBiMap;
 
 public class CachingTimelineDao implements TimelineDao {
 
     private static final Logger log = LoggerFactory.getLogger(CachingTimelineDao.class);
 
-    private final BiMap<Integer, String> sourcesCache;
-    private final BiMap<Integer, CategoryRecordIdAndMetric> metricsCache;
-    private final BiMap<Integer, String> eventCategoriesCache;
+    private final BiMap<Integer, String> sourcesCache = HashBiMap.<Integer, String>create();
+    private final BiMap<Integer, CategoryRecordIdAndMetric> metricsCache = HashBiMap.<Integer, CategoryRecordIdAndMetric>create();
+    private final BiMap<Integer, String> eventCategoriesCache = HashBiMap.<Integer, String>create();
 
     private final TimelineDao delegate;
 
     public CachingTimelineDao(final TimelineDao delegate) {
         this.delegate = delegate;
-        // TODO - rethink priming with tenants
-        final InternalTenantContext context = new InternalTenantContext(null, null);
-        sourcesCache = delegate.getSources(context);
-        metricsCache = delegate.getMetrics(context);
-        eventCategoriesCache = delegate.getEventCategories(context);
+        // TODO - rethink priming with tenants. Also, we shouldn't prime here, plug into the lifecycle instead
+        //final InternalTenantContext context = new InternalTenantContext(null, null);
+        //sourcesCache = delegate.getSources(context);
+        //metricsCache = delegate.getMetrics(context);
+        //eventCategoriesCache = delegate.getEventCategories(context);
     }
 
     @Override
diff --git a/meter/src/main/java/com/ning/billing/meter/timeline/persistent/DefaultTimelineDao.java b/meter/src/main/java/com/ning/billing/meter/timeline/persistent/DefaultTimelineDao.java
index 0ad1dc7..a67b49b 100644
--- a/meter/src/main/java/com/ning/billing/meter/timeline/persistent/DefaultTimelineDao.java
+++ b/meter/src/main/java/com/ning/billing/meter/timeline/persistent/DefaultTimelineDao.java
@@ -216,6 +216,10 @@ public class DefaultTimelineDao implements TimelineDao {
                                                   final DateTime endTime,
                                                   final TimelineChunkConsumer chunkConsumer,
                                                   final InternalTenantContext context) {
+        if (sourceIdList.size() == 0) {
+            return;
+        }
+
         dbi.withHandle(new HandleCallback<Void>() {
             @Override
             public Void withHandle(final Handle handle) throws Exception {