Merge pull request #583 from metamx/fix-filtered-server-view
fix memory issues in FilteredServerView
diff --git a/server/src/main/java/io/druid/client/BatchServerInventoryView.java b/server/src/main/java/io/druid/client/BatchServerInventoryView.java
index 509c4a5..a2a3c42 100644
--- a/server/src/main/java/io/druid/client/BatchServerInventoryView.java
+++ b/server/src/main/java/io/druid/client/BatchServerInventoryView.java
@@ -24,6 +24,7 @@
import com.google.api.client.repackaged.com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
+import com.google.common.collect.Iterables;
import com.google.common.collect.MapMaker;
import com.google.common.collect.Sets;
import com.google.inject.Inject;
@@ -79,7 +80,8 @@
)
{
Predicate<DataSegment> predicate = Predicates.or(defaultFilter, Predicates.or(segmentPredicates.values()));
- Set<DataSegment> filteredInventory = Sets.filter(inventory, predicate);
+ // make a copy of the set and not just a filtered view, in order to not keep all the segment data in memory
+ Set<DataSegment> filteredInventory = Sets.newHashSet(Iterables.filter(inventory, predicate));
zNodes.put(inventoryKey, filteredInventory);
for (DataSegment segment : filteredInventory) {
@@ -94,7 +96,8 @@
)
{
Predicate<DataSegment> predicate = Predicates.or(defaultFilter, Predicates.or(segmentPredicates.values()));
- Set<DataSegment> filteredInventory = Sets.filter(inventory, predicate);
+ // make a copy of the set and not just a filtered view, in order to not keep all the segment data in memory
+ Set<DataSegment> filteredInventory = Sets.newHashSet(Iterables.filter(inventory, predicate));
Set<DataSegment> existing = zNodes.get(inventoryKey);
if (existing == null) {