@Override public boolean isDone() { return getState().isDone(); }
private static int completeGroupQueries(Set<MockQueryExecution> groupQueries) { int groupRan = 0; for (Iterator<MockQueryExecution> iterator = groupQueries.iterator(); iterator.hasNext(); ) { MockQueryExecution query = iterator.next(); if (query.getState() == RUNNING) { query.complete(); iterator.remove(); groupRan++; } } return groupRan; }
@Test(timeOut = 10_000) public void testQueueFull() { RootInternalResourceGroup root = new RootInternalResourceGroup("root", (group, export) -> {}, directExecutor()); root.setSoftMemoryLimit(new DataSize(1, MEGABYTE)); root.setMaxQueuedQueries(1); root.setHardConcurrencyLimit(1); MockQueryExecution query1 = new MockQueryExecution(0); root.run(query1); assertEquals(query1.getState(), RUNNING); MockQueryExecution query2 = new MockQueryExecution(0); root.run(query2); assertEquals(query2.getState(), QUEUED); MockQueryExecution query3 = new MockQueryExecution(0); root.run(query3); assertEquals(query3.getState(), FAILED); assertEquals(query3.getThrowable().getMessage(), "Too many queued queries for \"root\""); }
@Test(timeOut = 10_000) public void testMemoryLimit() { RootInternalResourceGroup root = new RootInternalResourceGroup("root", (group, export) -> {}, directExecutor()); root.setSoftMemoryLimit(new DataSize(1, BYTE)); root.setMaxQueuedQueries(4); root.setHardConcurrencyLimit(3); MockQueryExecution query1 = new MockQueryExecution(2); root.run(query1); // Process the group to refresh stats root.processQueuedQueries(); assertEquals(query1.getState(), RUNNING); MockQueryExecution query2 = new MockQueryExecution(0); root.run(query2); assertEquals(query2.getState(), QUEUED); MockQueryExecution query3 = new MockQueryExecution(0); root.run(query3); assertEquals(query3.getState(), QUEUED); query1.complete(); root.processQueuedQueries(); assertEquals(query2.getState(), RUNNING); assertEquals(query3.getState(), RUNNING); }
@Test(timeOut = 10_000) public void testSoftCpuLimit() { RootInternalResourceGroup root = new RootInternalResourceGroup("root", (group, export) -> {}, directExecutor()); root.setSoftMemoryLimit(new DataSize(1, BYTE)); root.setSoftCpuLimit(new Duration(1, SECONDS)); root.setHardCpuLimit(new Duration(2, SECONDS)); root.setCpuQuotaGenerationMillisPerSecond(2000); root.setMaxQueuedQueries(1); root.setHardConcurrencyLimit(2); MockQueryExecution query1 = new MockQueryExecution(1, "query_id", 1, new Duration(1, SECONDS)); root.run(query1); assertEquals(query1.getState(), RUNNING); MockQueryExecution query2 = new MockQueryExecution(0); root.run(query2); assertEquals(query2.getState(), RUNNING); MockQueryExecution query3 = new MockQueryExecution(0); root.run(query3); assertEquals(query3.getState(), QUEUED); query1.complete(); root.processQueuedQueries(); assertEquals(query2.getState(), RUNNING); assertEquals(query3.getState(), QUEUED); root.generateCpuQuota(2); root.processQueuedQueries(); assertEquals(query2.getState(), RUNNING); assertEquals(query3.getState(), RUNNING); }
@Test(timeOut = 10_000) public void testHardCpuLimit() { RootInternalResourceGroup root = new RootInternalResourceGroup("root", (group, export) -> {}, directExecutor()); root.setSoftMemoryLimit(new DataSize(1, BYTE)); root.setHardCpuLimit(new Duration(1, SECONDS)); root.setCpuQuotaGenerationMillisPerSecond(2000); root.setMaxQueuedQueries(1); root.setHardConcurrencyLimit(1); MockQueryExecution query1 = new MockQueryExecution(1, "query_id", 1, new Duration(2, SECONDS)); root.run(query1); assertEquals(query1.getState(), RUNNING); MockQueryExecution query2 = new MockQueryExecution(0); root.run(query2); assertEquals(query2.getState(), QUEUED); query1.complete(); root.processQueuedQueries(); assertEquals(query2.getState(), QUEUED); root.generateCpuQuota(2); root.processQueuedQueries(); assertEquals(query2.getState(), RUNNING); }
MockQueryExecution query1a = new MockQueryExecution(0); group1.run(query1a); assertEquals(query1a.getState(), RUNNING); MockQueryExecution query1b = new MockQueryExecution(0); group1.run(query1b); assertEquals(query1b.getState(), QUEUED); MockQueryExecution query2a = new MockQueryExecution(0); group2.run(query2a); assertEquals(query2a.getState(), QUEUED); MockQueryExecution query2b = new MockQueryExecution(0); group2.run(query2b); assertEquals(query2b.getState(), QUEUED); MockQueryExecution query3a = new MockQueryExecution(0); group3.run(query3a); assertEquals(query3a.getState(), QUEUED); assertEquals(query1b.getState(), QUEUED); assertEquals(query2a.getState(), RUNNING); assertEquals(query2b.getState(), QUEUED); assertEquals(query3a.getState(), QUEUED); assertEquals(query3a.getState(), RUNNING); assertEquals(query2b.getState(), QUEUED); assertEquals(query1b.getState(), QUEUED); assertEquals(query1b.getState(), RUNNING); assertEquals(query2b.getState(), QUEUED);
MockQueryExecution query1a = new MockQueryExecution(0); group1.run(query1a); assertEquals(query1a.getState(), RUNNING); MockQueryExecution query1b = new MockQueryExecution(0); group1.run(query1b); assertEquals(query1b.getState(), QUEUED); MockQueryExecution query1c = new MockQueryExecution(0); group1.run(query1c); assertEquals(query1c.getState(), QUEUED); MockQueryExecution query2a = new MockQueryExecution(0); group2.run(query2a); assertEquals(query2a.getState(), QUEUED); assertEquals(query1b.getState(), RUNNING); assertEquals(query1c.getState(), QUEUED); assertEquals(query2a.getState(), QUEUED); assertEquals(query2a.getState(), RUNNING); assertEquals(query1c.getState(), QUEUED);
@Test public void testSubgroupMemoryLimit() { RootInternalResourceGroup root = new RootInternalResourceGroup("root", (group, export) -> {}, directExecutor()); root.setSoftMemoryLimit(new DataSize(10, BYTE)); root.setMaxQueuedQueries(4); root.setHardConcurrencyLimit(3); InternalResourceGroup subgroup = root.getOrCreateSubGroup("subgroup"); subgroup.setSoftMemoryLimit(new DataSize(1, BYTE)); subgroup.setMaxQueuedQueries(4); subgroup.setHardConcurrencyLimit(3); MockQueryExecution query1 = new MockQueryExecution(2); subgroup.run(query1); // Process the group to refresh stats root.processQueuedQueries(); assertEquals(query1.getState(), RUNNING); MockQueryExecution query2 = new MockQueryExecution(0); subgroup.run(query2); assertEquals(query2.getState(), QUEUED); MockQueryExecution query3 = new MockQueryExecution(0); subgroup.run(query3); assertEquals(query3.getState(), QUEUED); query1.complete(); root.processQueuedQueries(); assertEquals(query2.getState(), RUNNING); assertEquals(query3.getState(), RUNNING); }
MockQueryExecution query1a = new MockQueryExecution(0); group1.run(query1a); assertEquals(query1a.getState(), RUNNING); MockQueryExecution query1b = new MockQueryExecution(0); group1.run(query1b); assertEquals(query1b.getState(), QUEUED); MockQueryExecution query1c = new MockQueryExecution(0); group1.run(query1c); assertEquals(query1c.getState(), QUEUED); MockQueryExecution query2a = new MockQueryExecution(0); group2.run(query2a); assertEquals(query2a.getState(), QUEUED);
for (Iterator<MockQueryExecution> iterator = group1Queries.iterator(); iterator.hasNext(); ) { MockQueryExecution query = iterator.next(); if (query.getState() == RUNNING) { query.complete(); iterator.remove();
while (iterator.hasNext()) { MockQueryExecution query = iterator.next(); if (query.getState() == RUNNING) { query.complete(); iterator.remove();