[5/8] lens git commit: LENS-1464: One or two queued queries failing with ConcurrentModificationException on restart
LENS-1464: One or two queued queries failing with ConcurrentModificationException on restart Project: http://git-wip-us.apache.org/repos/asf/lens/repo Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/1d667975 Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/1d667975 Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/1d667975 Branch: refs/heads/current-release-line Commit: 1d6679754240f2980e9bffd278a3ee04ac98db02 Parents: 0f58445 Author: Rajat KhandelwalAuthored: Wed Aug 30 15:59:23 2017 +0530 Committer: rajub Committed: Thu Oct 5 11:12:56 2017 +0800 -- lens-server/pom.xml | 4 +-- .../server/query/QueryExecutionServiceImpl.java | 32 +--- 2 files changed, 16 insertions(+), 20 deletions(-) -- http://git-wip-us.apache.org/repos/asf/lens/blob/1d667975/lens-server/pom.xml -- diff --git a/lens-server/pom.xml b/lens-server/pom.xml index 2065f04..f56f7bc 100644 --- a/lens-server/pom.xml +++ b/lens-server/pom.xml @@ -402,8 +402,8 @@ - 1.7 - 1.7 + 1.8 + 1.8 enunciate.xml http://git-wip-us.apache.org/repos/asf/lens/blob/1d667975/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 e70d290..4d141e5 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 @@ -3476,27 +3476,23 @@ public class QueryExecutionServiceImpl extends BaseLensService implements QueryE // Add resources if either they haven't been marked as added on the session, or if Hive driver says they need // to be added to the corresponding hive driver -if (!hiveDriver.areDBResourcesAddedForSession(sessionIdentifier, ctx.getDatabase())) { - Collection dbResources = session.getDBResources(ctx.getDatabase()); - - if (CollectionUtils.isNotEmpty(dbResources)) { -log.info("Proceeding to add resources for DB {} for query {} resources: {}", session.getCurrentDatabase(), - ctx.getLogHandle(), dbResources); - -List failedDBResources = addResources(dbResources, sessionHandle, hiveDriver); -Iterator itr = dbResources.iterator(); -while (itr.hasNext()) { - ResourceEntry res = itr.next(); - if (!failedDBResources.contains(res)) { -itr.remove(); - } +synchronized (session) { + if (!hiveDriver.areDBResourcesAddedForSession(sessionIdentifier, ctx.getDatabase())) { +Collection dbResources = session.getDBResources(ctx.getDatabase()); + +if (CollectionUtils.isNotEmpty(dbResources)) { + log.info("Proceeding to add resources for DB {} for query {} resources: {}", session.getCurrentDatabase(), +ctx.getLogHandle(), dbResources); + + List failedDBResources = addResources(dbResources, sessionHandle, hiveDriver); + dbResources.removeIf(res -> !failedDBResources.contains(res)); +} else { + log.info("No need to add DB resources for session: {} db= {}", sessionIdentifier, +session.getCurrentDatabase()); } - } else { -log.info("No need to add DB resources for session: {} db= {}", sessionIdentifier, session.getCurrentDatabase()); +hiveDriver.setResourcesAddedForSession(sessionIdentifier, ctx.getDatabase()); } - hiveDriver.setResourcesAddedForSession(sessionIdentifier, ctx.getDatabase()); } - // Get pending session resources which needed to be added for this database Collection pendingResources = session.getPendingSessionResourcesForDatabase(ctx.getDatabase());
[4/8] lens git commit: LENS-1475 : Override equals(Object obj) and hashcode() methods of SegmentationCandidate
LENS-1475 : Override equals(Object obj) and hashcode() methods of SegmentationCandidate Project: http://git-wip-us.apache.org/repos/asf/lens/repo Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/0f58445e Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/0f58445e Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/0f58445e Branch: refs/heads/current-release-line Commit: 0f58445e0e2bf4262a624f006c678786a00485d5 Parents: ae6bda3 Author: Sushil MohantyAuthored: Thu Sep 14 12:42:57 2017 +0530 Committer: rajub Committed: Thu Oct 5 11:12:29 2017 +0800 -- .../lens/cube/parse/SegmentationCandidate.java | 21 1 file changed, 21 insertions(+) -- http://git-wip-us.apache.org/repos/asf/lens/blob/0f58445e/lens-cube/src/main/java/org/apache/lens/cube/parse/SegmentationCandidate.java -- diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/SegmentationCandidate.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/SegmentationCandidate.java index 055d6ef..9378009 100644 --- a/lens-cube/src/main/java/org/apache/lens/cube/parse/SegmentationCandidate.java +++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/SegmentationCandidate.java @@ -404,4 +404,25 @@ public class SegmentationCandidate implements Candidate { return cubeQueryContextMap.entrySet().stream().filter(entry -> entry.getValue().getPickedCandidate() == null) .collect(toMap(Map.Entry::getKey, entry -> entry.getValue().getStoragePruningMsgs())); } + + @Override + public boolean equals(Object obj) { +if (super.equals(obj)) { + return true; +} + +if (obj == null || !(obj instanceof SegmentationCandidate)) { + return false; +} + +SegmentationCandidate segmantationCandidate = (SegmentationCandidate) obj; +return (segmantationCandidate.segmentation.getSegments().equals(this.segmentation.getSegments()) +&& segmantationCandidate.segmentation.getBaseCube().equals(this.segmentation.getBaseCube())); + } + + @Override + public int hashCode() { +return segmentation.hashCode(); + } + }
[8/8] lens git commit: LENS-1468: Expressions in having clauses are not getting rewritten properly for join queries
LENS-1468: Expressions in having clauses are not getting rewritten properly for join queries Project: http://git-wip-us.apache.org/repos/asf/lens/repo Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/2772efb2 Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/2772efb2 Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/2772efb2 Branch: refs/heads/current-release-line Commit: 2772efb275742eb4c03da5e7635bdbcfab63cebc Parents: 9a678d8 Author: Rajat KhandelwalAuthored: Sun Sep 3 18:27:59 2017 +0530 Committer: rajub Committed: Thu Oct 5 11:13:31 2017 +0800 -- .../lens/cube/parse/ExpressionResolver.java | 55 +++- .../cube/parse/StorageCandidateHQLContext.java | 4 ++ .../lens/cube/parse/UnionQueryWriter.java | 8 +++ .../lens/cube/parse/TestBaseCubeQueries.java| 32 +++- .../resources/schema/cubes/base/basecube.xml| 6 +++ .../resources/schema/cubes/derived/der2.xml | 2 + 6 files changed, 92 insertions(+), 15 deletions(-) -- http://git-wip-us.apache.org/repos/asf/lens/blob/2772efb2/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java -- diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java index 822e25e..553468f 100644 --- a/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java +++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java @@ -34,6 +34,7 @@ import org.apache.hadoop.hive.ql.parse.HiveParser; import org.antlr.runtime.CommonToken; +import com.google.common.collect.Maps; import com.google.common.collect.Sets; import lombok.*; import lombok.extern.slf4j.Slf4j; @@ -262,7 +263,7 @@ class ExpressionResolver implements ContextRewriter { @RequiredArgsConstructor @ToString - private static class PickedExpression { + static class PickedExpression { private final String srcAlias; private final ExprSpecContext pickedCtx; private transient ASTNode reWrittenAST = null; @@ -286,11 +287,13 @@ class ExpressionResolver implements ContextRewriter { static class ExpressionResolverContext { @Getter -private Map allExprsQueried = new HashMap (); -private Map pickedExpressions = new HashMap (); +private Map allExprsQueried = new HashMap<>(); +private Map pickedExpressions = new HashMap<>(); +@Getter +private Map > pickedExpressionsPerCandidate = new HashMap<>(); private Map nonPickedExpressionsForCandidate = new HashMap (); private final CubeQueryContext cubeql; - +private boolean replacedHavingExpressions = false; ExpressionResolverContext(CubeQueryContext cubeql) { this.cubeql = cubeql; } @@ -411,7 +414,7 @@ class ExpressionResolver implements ContextRewriter { // Replace picked expressions in all the base trees replacePickedExpressions(sc); } - + pickedExpressionsPerCandidate.put(sc, Maps.newHashMap(pickedExpressions)); pickedExpressions.clear(); nonPickedExpressionsForCandidate.clear(); @@ -430,16 +433,42 @@ class ExpressionResolver implements ContextRewriter { replaceAST(cubeql, queryAST.getJoinAST()); replaceAST(cubeql, queryAST.getGroupByAST()); // Resolve having expression for StorageCandidate - if (queryAST.getHavingAST() != null) { -replaceAST(cubeql, queryAST.getHavingAST()); - } else if (cubeql.getHavingAST() != null) { -ASTNode havingCopy = MetastoreUtil.copyAST(cubeql.getHavingAST()); -replaceAST(cubeql, havingCopy); -queryAST.setHavingAST(havingCopy); - } replaceAST(cubeql, queryAST.getOrderByAST()); } - +public void replaceHavingExpressions() throws LensException { + replaceHavingExpressions(pickedExpressionsPerCandidate); +} +public void replaceHavingExpressions( + Map > pickedExpressionsPerCandidate) throws LensException { + if (cubeql.getHavingAST() != null && !replacedHavingExpressions) { +HQLParser.bft(cubeql.getHavingAST(), visited -> { + ASTNode node1 = visited.getNode(); + int childcount = node1.getChildCount(); + for (int i = 0; i < childcount; i++) { +ASTNode current = (ASTNode) node1.getChild(i); +if (current.getToken().getType() == DOT) { + // This is for the case where column name is prefixed by table name + // or table alias + // For example 'select fact.id, dim2.id ...' +
[1/8] lens git commit: LENS-1463 : Valid Columns addition in Virtual Fact
Repository: lens Updated Branches: refs/heads/current-release-line ff4f3726a -> 2772efb27 LENS-1463 : Valid Columns addition in Virtual Fact Project: http://git-wip-us.apache.org/repos/asf/lens/repo Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/358efef9 Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/358efef9 Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/358efef9 Branch: refs/heads/current-release-line Commit: 358efef9a3214f2c57655f2ea227b646971ae005 Parents: ff4f372 Author: Rajitha RAuthored: Mon Aug 28 16:31:33 2017 +0530 Committer: rajub Committed: Thu Oct 5 11:11:42 2017 +0800 -- .../lens/cube/metadata/CubeVirtualFactTable.java | 9 - .../apache/lens/cube/parse/TestVirtualFactQueries.java | 13 + .../src/test/resources/schema/cubes/base/testcube2.xml | 2 ++ .../src/test/resources/schema/facts/testfact9_base.xml | 3 ++- .../resources/schema/facts/virtual/virtualfact.xml | 2 ++ 5 files changed, 27 insertions(+), 2 deletions(-) -- http://git-wip-us.apache.org/repos/asf/lens/blob/358efef9/lens-cube/src/main/java/org/apache/lens/cube/metadata/CubeVirtualFactTable.java -- diff --git a/lens-cube/src/main/java/org/apache/lens/cube/metadata/CubeVirtualFactTable.java b/lens-cube/src/main/java/org/apache/lens/cube/metadata/CubeVirtualFactTable.java index 1fc74b0..ce2a1a6 100644 --- a/lens-cube/src/main/java/org/apache/lens/cube/metadata/CubeVirtualFactTable.java +++ b/lens-cube/src/main/java/org/apache/lens/cube/metadata/CubeVirtualFactTable.java @@ -92,7 +92,14 @@ public class CubeVirtualFactTable extends AbstractCubeTable implements FactTable @Override public Set getValidColumns() { -return this.sourceCubeFactTable.getValidColumns(); +String validColsStr = + MetastoreUtil.getNamedStringValue(this.getProperties(), MetastoreUtil.getValidColumnsKey(getName())); +if (validColsStr == null) { + return this.sourceCubeFactTable.getValidColumns(); +} else { + return new HashSet<>(Arrays.asList(StringUtils.split(validColsStr.toLowerCase(), +','))); +} } @Override http://git-wip-us.apache.org/repos/asf/lens/blob/358efef9/lens-cube/src/test/java/org/apache/lens/cube/parse/TestVirtualFactQueries.java -- diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestVirtualFactQueries.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestVirtualFactQueries.java index 4bcb376..94e836c 100644 --- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestVirtualFactQueries.java +++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestVirtualFactQueries.java @@ -25,8 +25,11 @@ import static org.apache.lens.cube.parse.CubeQueryConfUtil.DISABLE_AGGREGATE_RES import static org.apache.lens.cube.parse.CubeTestSetup.*; import static org.testng.Assert.assertEquals; +import static org.testng.Assert.fail; +import org.apache.lens.cube.error.LensCubeErrorCode; import org.apache.lens.server.api.LensServerAPITestUtil; +import org.apache.lens.server.api.error.LensException; import org.apache.hadoop.conf.Configuration; @@ -119,5 +122,15 @@ public class TestVirtualFactQueries extends TestQueryRewrite { } + @Test + public void testVirtualFactValidColumns() throws Exception { + +try { + rewriteCtx("select SUM(msr4) from virtualCube where " + TWO_DAYS_RANGE, getConfWithStorages("C1")); + fail("Rewrite should not succeed here"); +} catch (LensException exc) { + assertEquals(exc.getErrorCode(), LensCubeErrorCode.COLUMN_NOT_FOUND.getLensErrorInfo().getErrorCode()); +} + } } http://git-wip-us.apache.org/repos/asf/lens/blob/358efef9/lens-cube/src/test/resources/schema/cubes/base/testcube2.xml -- diff --git a/lens-cube/src/test/resources/schema/cubes/base/testcube2.xml b/lens-cube/src/test/resources/schema/cubes/base/testcube2.xml index 9740e00..237e85a 100644 --- a/lens-cube/src/test/resources/schema/cubes/base/testcube2.xml +++ b/lens-cube/src/test/resources/schema/cubes/base/testcube2.xml @@ -27,5 +27,7 @@ + http://git-wip-us.apache.org/repos/asf/lens/blob/358efef9/lens-cube/src/test/resources/schema/facts/testfact9_base.xml -- diff --git a/lens-cube/src/test/resources/schema/facts/testfact9_base.xml b/lens-cube/src/test/resources/schema/facts/testfact9_base.xml index 56e5746..9c94fe2 100644 --- a/lens-cube/src/test/resources/schema/facts/testfact9_base.xml +++ b/lens-cube/src/test/resources/schema/facts/testfact9_base.xml @@ -22,7 +22,8 @@ -
[3/8] lens git commit: LENS-1474 : Fix NPE in ExpressionResolver for SegmentationCandidate
LENS-1474 : Fix NPE in ExpressionResolver for SegmentationCandidate Project: http://git-wip-us.apache.org/repos/asf/lens/repo Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/ae6bda33 Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/ae6bda33 Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/ae6bda33 Branch: refs/heads/current-release-line Commit: ae6bda33ed501e15dceeecea83c86adf189e4453 Parents: 717214c Author: Rajitha RAuthored: Mon Sep 11 09:53:21 2017 +0530 Committer: rajub Committed: Thu Oct 5 11:12:15 2017 +0800 -- .../apache/lens/cube/parse/ExpressionResolver.java | 17 +++-- 1 file changed, 11 insertions(+), 6 deletions(-) -- http://git-wip-us.apache.org/repos/asf/lens/blob/ae6bda33/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java -- diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java index 8906fae..822e25e 100644 --- a/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java +++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java @@ -314,12 +314,14 @@ class ExpressionResolver implements ContextRewriter { } ExpressionContext getExpressionContext(String expr, String alias) { - for (ExpressionContext ec : allExprsQueried.get(expr)) { -if (ec.getSrcAlias().equals(alias)) { - return ec; + if (allExprsQueried.get(expr) != null) { +for (ExpressionContext ec : allExprsQueried.get(expr)) { + if (ec.getSrcAlias().equals(alias)) { +return ec; + } } } - throw new IllegalArgumentException("no expression available for " + expr + " alias:" + alias); + return null; } boolean hasMeasures(String expr, CubeInterface cube) { @@ -511,8 +513,11 @@ class ExpressionResolver implements ContextRewriter { expressionContexts.add(expressionContext); for (StorageCandidate sc : scSet) { storageTableNames.add(sc.getStorageTable()); -expressionContexts.add(sc.getCubeQueryContext().getExprCtx() - .getExpressionContext(expressionContext.getExprCol().getName(), expressionContext.getSrcAlias())); +ExpressionContext ex = sc.getCubeQueryContext().getExprCtx().getExpressionContext(expressionContext. +getExprCol().getName(), expressionContext.getSrcAlias()); +if (ex != null) { + expressionContexts.add(ex); +} } for (ExpressionContext ec : expressionContexts) { for (CandidateTable table : ec.evaluableExpressions.keySet()) {
[7/8] lens git commit: LENS-1467: CubeQueryContext.getAllFilters is returning incorrect list of filters in case there is an "OR" in the filters
LENS-1467: CubeQueryContext.getAllFilters is returning incorrect list of filters in case there is an "OR" in the filters Project: http://git-wip-us.apache.org/repos/asf/lens/repo Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/9a678d8c Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/9a678d8c Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/9a678d8c Branch: refs/heads/current-release-line Commit: 9a678d8c2602860aac81bb31801c6c6acb946054 Parents: 13cbc81 Author: Rajat KhandelwalAuthored: Wed Aug 30 16:10:54 2017 +0530 Committer: rajub Committed: Thu Oct 5 11:13:18 2017 +0800 -- .../lens/cube/parse/CubeQueryContext.java | 67 ++- .../cube/parse/StorageCandidateHQLContext.java | 3 +- .../apache/lens/cube/parse/join/JoinClause.java | 9 +++ .../lens/cube/parse/CubeQueryContextTest.java | 70 4 files changed, 100 insertions(+), 49 deletions(-) -- http://git-wip-us.apache.org/repos/asf/lens/blob/9a678d8c/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryContext.java -- diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryContext.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryContext.java index 8b9583a..bff5c47 100644 --- a/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryContext.java +++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryContext.java @@ -49,7 +49,6 @@ import org.apache.lens.cube.metadata.*; import org.apache.lens.cube.metadata.join.TableRelationship; import org.apache.lens.cube.parse.join.AutoJoinContext; import org.apache.lens.cube.parse.join.JoinClause; -import org.apache.lens.cube.parse.join.JoinTree; import org.apache.lens.cube.parse.join.JoinUtils; import org.apache.lens.server.api.error.LensException; @@ -1137,14 +1136,13 @@ public class CubeQueryContext extends TracksQueriedColumns implements QueryAST, return ImmutableSet.copyOf(this.queriedTimeDimCols); } - String getWhere(StorageCandidateHQLContext sc, AutoJoinContext autoJoinCtx, -ASTNode node, String cubeAlias, -boolean shouldReplaceDimFilter, String storageTable, -Map dimToQuery) throws LensException { + String getWhere(StorageCandidateHQLContext sc, AutoJoinContext autoJoinCtx, String cubeAlias, +boolean shouldReplaceDimFilter, Map dimToQuery) throws LensException { String whereString; if (autoJoinCtx != null && shouldReplaceDimFilter) { List allfilters = new ArrayList<>(); - getAllFilters(node, cubeAlias, allfilters, autoJoinCtx.getJoinClause(sc.getStorageCandidate()), dimToQuery); + getAllFilters(sc.getQueryAst().getWhereAST(), cubeAlias, allfilters, +autoJoinCtx.getJoinClause(sc.getStorageCandidate()), dimToQuery); whereString = StringUtils.join(allfilters, " and "); } else { whereString = HQLParser.getString(sc.getQueryAst().getWhereAST()); @@ -1152,58 +1150,33 @@ public class CubeQueryContext extends TracksQueriedColumns implements QueryAST, return whereString; } - private void getAllFilters(ASTNode node, String cubeAlias, List allFilters, -JoinClause joinClause, Map dimToQuery) -throws LensException { - -if (node.getToken().getType() == HiveParser.KW_AND) { - // left child is and - if (node.getChild(0).getType() == HiveParser.KW_AND) { -// take right corresponding to right -String table = getTableFromFilterAST((ASTNode) node.getChild(1)); -allFilters.add(getFilter(table, cubeAlias, node, joinClause, 1, dimToQuery)); - } else if (node.getChildCount() > 1) { -for (int i = 0; i < node.getChildCount(); i++) { - String table = getTableFromFilterAST((ASTNode) node.getChild(i)); - allFilters.add(getFilter(table, cubeAlias, node, joinClause, i, dimToQuery)); -} + protected static void getAllFilters(ASTNode node, String cubeAlias, List allFilters, JoinClause joinClause, +Map dimToQuery) throws LensException { +if (node.getToken().getType() == HiveParser.KW_AND || node.getToken().getType() == HiveParser.TOK_WHERE) { + for (int i = 0; i < node.getChildCount(); i++) { +ASTNode child = (ASTNode) node.getChild(i); +getAllFilters(child, cubeAlias, allFilters, joinClause, dimToQuery); } -} else if (node.getParent() == null -&& node.getToken().getType() != HiveParser.KW_AND - && node.getChild(0).getType() != HiveParser.KW_AND) { - // if node is the only child - allFilters.add(HQLParser.getString((ASTNode) node)); -} -for (int i = 0; i <
[6/8] lens git commit: LENS-1465: Sync queries blocking threads
LENS-1465: Sync queries blocking threads Project: http://git-wip-us.apache.org/repos/asf/lens/repo Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/13cbc811 Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/13cbc811 Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/13cbc811 Branch: refs/heads/current-release-line Commit: 13cbc811342378d8fb39f4d03be08145fbc4f986 Parents: 1d66797 Author: Rajat KhandelwalAuthored: Wed Aug 30 16:10:13 2017 +0530 Committer: rajub Committed: Thu Oct 5 11:13:09 2017 +0800 -- .../org/apache/lens/server/api/query/QueryContext.java | 11 +-- 1 file changed, 5 insertions(+), 6 deletions(-) -- http://git-wip-us.apache.org/repos/asf/lens/blob/13cbc811/lens-server-api/src/main/java/org/apache/lens/server/api/query/QueryContext.java -- diff --git a/lens-server-api/src/main/java/org/apache/lens/server/api/query/QueryContext.java b/lens-server-api/src/main/java/org/apache/lens/server/api/query/QueryContext.java index 466fb25..8176f03 100644 --- a/lens-server-api/src/main/java/org/apache/lens/server/api/query/QueryContext.java +++ b/lens-server-api/src/main/java/org/apache/lens/server/api/query/QueryContext.java @@ -198,7 +198,7 @@ public class QueryContext extends AbstractQueryContext implements FailureContext @Getter @Setter private transient Future queryLauncher; - transient List driverStatusUpdateListeners = Lists.newArrayList(); + transient List driverStatusUpdateListeners = Lists.newCopyOnWriteArrayList(); @Getter @Setter List failedAttempts = Lists.newArrayList(); @@ -572,10 +572,9 @@ public class QueryContext extends AbstractQueryContext implements FailureContext getDriverStatus().setStatusMessage("Query " + getQueryHandleString() + " " + state.name().toLowerCase()); } getDriverStatus().setState(state); -synchronized (this) { - for (QueryDriverStatusUpdateListener listener : this.driverStatusUpdateListeners) { -listener.onDriverStatusUpdated(getQueryHandle(), getDriverStatus()); - } + +for (QueryDriverStatusUpdateListener listener : this.driverStatusUpdateListeners) { + listener.onDriverStatusUpdated(getQueryHandle(), getDriverStatus()); } } @@ -588,7 +587,7 @@ public class QueryContext extends AbstractQueryContext implements FailureContext } - public synchronized void registerStatusUpdateListener(QueryDriverStatusUpdateListener driverStatusUpdateListener) { + public void registerStatusUpdateListener(QueryDriverStatusUpdateListener driverStatusUpdateListener) { this.driverStatusUpdateListeners.add(driverStatusUpdateListener); }