Skip to content

Commit 78cbfbf

Browse files
authored
Fixing partition removal bug (#72)
1 parent e8416be commit 78cbfbf

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

src/main/java/com/yahoo/bullet/querying/QueryManager.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,12 @@ public Querier removeAndGetQuery(String id) {
130130
Query query = querier.getQuery();
131131
Set<String> keys = partitioner.getKeys(query);
132132
for (String key : keys) {
133-
partitioning.get(key).remove(id);
133+
Set<String> partition = partitioning.get(key);
134+
partition.remove(id);
135+
if (partition.isEmpty()) {
136+
log.debug("Partition: {} is empty. Removing...", key);
137+
partitioning.remove(key);
138+
}
134139
log.debug("Removed query: {} from partition: {}", id, key);
135140
}
136141
}

src/test/java/com/yahoo/bullet/querying/QueryManagerTest.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,4 +372,40 @@ public void testQuerySeeingStatistics() {
372372
Assert.assertEquals(stats.get(QueryManager.PartitionStat.ACTUAL_QUERIES_SEEN), 6L);
373373
Assert.assertEquals(stats.get(QueryManager.PartitionStat.EXPECTED_QUERIES_SEEN), 9L);
374374
}
375+
376+
@Test
377+
public void testPartitionRemoval() {
378+
QueryManager manager = new QueryManager(getEqualityPartitionerConfig("A", "B"));
379+
Query queryA = getQuery(ImmutablePair.of("A", "foo"));
380+
Query queryB = getQuery(ImmutablePair.of("A", "foo"), ImmutablePair.of("B", "bar"));
381+
Query queryC = getQuery();
382+
manager.addQuery("idA", getQuerier(queryA));
383+
manager.addQuery("idB", getQuerier(queryB));
384+
manager.addQuery("idC", getQuerier(queryC));
385+
manager.addQuery("idD", getQuerier(queryC));
386+
387+
Map<QueryManager.PartitionStat, Object> stats = manager.getStats();
388+
Assert.assertEquals(stats.get(QueryManager.PartitionStat.QUERY_COUNT), 4);
389+
Assert.assertEquals(stats.get(QueryManager.PartitionStat.PARTITION_COUNT), 3);
390+
391+
manager.removeAndGetQuery("idA");
392+
stats = manager.getStats();
393+
Assert.assertEquals(stats.get(QueryManager.PartitionStat.QUERY_COUNT), 3);
394+
Assert.assertEquals(stats.get(QueryManager.PartitionStat.PARTITION_COUNT), 2);
395+
396+
manager.removeAndGetQuery("idB");
397+
stats = manager.getStats();
398+
Assert.assertEquals(stats.get(QueryManager.PartitionStat.QUERY_COUNT), 2);
399+
Assert.assertEquals(stats.get(QueryManager.PartitionStat.PARTITION_COUNT), 1);
400+
401+
manager.removeAndGetQuery("idD");
402+
stats = manager.getStats();
403+
Assert.assertEquals(stats.get(QueryManager.PartitionStat.QUERY_COUNT), 1);
404+
Assert.assertEquals(stats.get(QueryManager.PartitionStat.PARTITION_COUNT), 1);
405+
406+
manager.removeAndGetQuery("idC");
407+
stats = manager.getStats();
408+
Assert.assertEquals(stats.get(QueryManager.PartitionStat.QUERY_COUNT), 0);
409+
Assert.assertEquals(stats.get(QueryManager.PartitionStat.PARTITION_COUNT), 0);
410+
}
375411
}

0 commit comments

Comments
 (0)