Repository: lens Updated Branches: refs/heads/master b3352997c -> ef6e59c61
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/806703ef Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/806703ef Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/806703ef Branch: refs/heads/master Commit: 806703ef2d8180a3baee21a6f27a3b7bdc1f2f79 Parents: b335299 Author: Rajat Khandelwal <pro...@apache.org> Authored: Wed Aug 30 15:59:23 2017 +0530 Committer: Rajat Khandelwal <rajatgupt...@gmail.com> Committed: Wed Aug 30 15:59:23 2017 +0530 ---------------------------------------------------------------------- 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/806703ef/lens-server/pom.xml ---------------------------------------------------------------------- diff --git a/lens-server/pom.xml b/lens-server/pom.xml index 34a7819..92e218f 100644 --- a/lens-server/pom.xml +++ b/lens-server/pom.xml @@ -402,8 +402,8 @@ </execution> </executions> <configuration> - <source>1.7</source> - <target>1.7</target> + <source>1.8</source> + <target>1.8</target> <configFile>enunciate.xml</configFile> </configuration> </plugin> http://git-wip-us.apache.org/repos/asf/lens/blob/806703ef/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<ResourceEntry> 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<ResourceEntry> failedDBResources = addResources(dbResources, sessionHandle, hiveDriver); - Iterator<ResourceEntry> 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<ResourceEntry> 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<ResourceEntry> 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<ResourceEntry> pendingResources = session.getPendingSessionResourcesForDatabase(ctx.getDatabase());