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 {