Repository: lens Updated Branches: refs/heads/master b54c4b999 -> 3cd03a37a
LENS-832 : Fix recovery for queued queries upon restart Project: http://git-wip-us.apache.org/repos/asf/lens/repo Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/3cd03a37 Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/3cd03a37 Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/3cd03a37 Branch: refs/heads/master Commit: 3cd03a37a7914e493eb3fdee41fb96fbbf0f0d89 Parents: b54c4b9 Author: Amareshwari Sriramadasu <amareshw...@apache.org> Authored: Sun Oct 25 11:23:28 2015 +0530 Committer: Amareshwari Sriramadasu <amareshw...@apache.org> Committed: Sun Oct 25 11:23:28 2015 +0530 ---------------------------------------------------------------------- .../lens/server/api/query/MockQueryContext.java | 4 ++ .../api/query/TestAbstractQueryContext.java | 46 ++++++++++++++++++++ .../server/query/QueryExecutionServiceImpl.java | 1 + 3 files changed, 51 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lens/blob/3cd03a37/lens-server-api/src/test/java/org/apache/lens/server/api/query/MockQueryContext.java ---------------------------------------------------------------------- diff --git a/lens-server-api/src/test/java/org/apache/lens/server/api/query/MockQueryContext.java b/lens-server-api/src/test/java/org/apache/lens/server/api/query/MockQueryContext.java index 12fb4ce..fd6b560 100644 --- a/lens-server-api/src/test/java/org/apache/lens/server/api/query/MockQueryContext.java +++ b/lens-server-api/src/test/java/org/apache/lens/server/api/query/MockQueryContext.java @@ -43,6 +43,10 @@ public class MockQueryContext extends QueryContext { this(new Configuration()); } + public MockQueryContext(final Collection<LensDriver> drivers) throws LensException { + this("mock query", new LensConf(), new Configuration(), drivers); + } + public MockQueryContext(Configuration conf) throws LensException { this("mock query", new LensConf(), conf, getDrivers(conf)); } http://git-wip-us.apache.org/repos/asf/lens/blob/3cd03a37/lens-server-api/src/test/java/org/apache/lens/server/api/query/TestAbstractQueryContext.java ---------------------------------------------------------------------- diff --git a/lens-server-api/src/test/java/org/apache/lens/server/api/query/TestAbstractQueryContext.java b/lens-server-api/src/test/java/org/apache/lens/server/api/query/TestAbstractQueryContext.java index 44978f2..e41f2f4 100644 --- a/lens-server-api/src/test/java/org/apache/lens/server/api/query/TestAbstractQueryContext.java +++ b/lens-server-api/src/test/java/org/apache/lens/server/api/query/TestAbstractQueryContext.java @@ -26,14 +26,18 @@ import static org.testng.Assert.*; import java.io.*; import java.util.Arrays; +import java.util.List; import org.apache.lens.api.Priority; +import org.apache.lens.server.api.driver.LensDriver; import org.apache.lens.server.api.driver.MockDriver; import org.apache.lens.server.api.error.LensException; import org.apache.lens.server.api.metrics.LensMetricsRegistry; import org.apache.lens.server.api.query.cost.MockQueryCostCalculator; import org.apache.lens.server.api.query.priority.MockQueryPriorityDecider; +import org.apache.hadoop.conf.Configuration; + import org.testng.annotations.Test; import com.codahale.metrics.MetricRegistry; @@ -103,4 +107,46 @@ public class TestAbstractQueryContext { assertEquals(ctx.getPriority(), HIGH); } + @Test + public void testReadAndWriteExternal() throws Exception { + Configuration conf = new Configuration(); + List<LensDriver> drivers = MockQueryContext.getDrivers(conf); + MockQueryContext ctx = new MockQueryContext(drivers); + String driverQuery = "driver query"; + ctx.setSelectedDriverQuery(driverQuery); + assertNotNull(ctx.getSelectedDriverQuery()); + assertEquals(ctx.getSelectedDriverQuery(), driverQuery); + assertEquals(ctx.getDriverQuery(ctx.getSelectedDriver()), driverQuery); + + ByteArrayOutputStream bios = new ByteArrayOutputStream(); + ObjectOutputStream out = new ObjectOutputStream(bios); + byte[] ctxBytes = null; + try { + out.writeObject(ctx); + ctxBytes = bios.toByteArray(); + } finally { + out.close(); + } + ByteArrayInputStream bais = new ByteArrayInputStream(ctxBytes); + ObjectInputStream in = new ObjectInputStream(bais); + MockQueryContext ctxRead = null; + try { + ctxRead = (MockQueryContext) in.readObject(); + } finally { + in.close(); + } + ctxRead.initTransientState(); + ctxRead.setConf(ctx.getConf()); + assertNotNull(ctxRead.getHiveConf()); + assertNotNull(ctxRead.getSelectedDriverQuery()); + assertEquals(ctxRead.getSelectedDriverQuery(), driverQuery); + + //Create DriverSelectorQueryContext by passing all the drivers and the user query + DriverSelectorQueryContext driverCtx = new DriverSelectorQueryContext(ctxRead.getUserQuery(), ctxRead.getConf(), + drivers); + ctxRead.setDriverContext(driverCtx); + ctxRead.getDriverContext().setSelectedDriver(ctx.getSelectedDriver()); + ctxRead.setDriverQuery(ctxRead.getSelectedDriver(), ctxRead.getSelectedDriverQuery()); + assertEquals(ctxRead.getDriverQuery(ctxRead.getSelectedDriver()), driverQuery); + } } http://git-wip-us.apache.org/repos/asf/lens/blob/3cd03a37/lens-server/src/main/java/org/apache/lens/server/query/QueryExecutionServiceImpl.java ---------------------------------------------------------------------- diff --git a/lens-server/src/main/java/org/apache/lens/server/query/QueryExecutionServiceImpl.java b/lens-server/src/main/java/org/apache/lens/server/query/QueryExecutionServiceImpl.java index 1a49250..4d8ae51 100644 --- a/lens-server/src/main/java/org/apache/lens/server/query/QueryExecutionServiceImpl.java +++ b/lens-server/src/main/java/org/apache/lens/server/query/QueryExecutionServiceImpl.java @@ -2345,6 +2345,7 @@ public class QueryExecutionServiceImpl extends BaseLensService implements QueryE if (driverAvailable) { String clsName = in.readUTF(); ctx.getDriverContext().setSelectedDriver(drivers.get(clsName)); + ctx.setDriverQuery(ctx.getSelectedDriver(), ctx.getSelectedDriverQuery()); } allQueries.put(ctx.getQueryHandle(), ctx); }