diff --git standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java index a0021f6..2f9150d 100644 --- standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java +++ standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java @@ -286,10 +286,9 @@ initQueries.add(pm.newQuery(MCreationMetadata.class, "dbName == ''")); initQueries.add(pm.newQuery(MPartitionPrivilege.class, "principalName == ''")); initQueries.add(pm.newQuery(MPartitionColumnPrivilege.class, "principalName == ''")); - Query q; - while ((q = initQueries.peekFirst()) != null) { + + for (Query q : initQueries) { q.execute(); - initQueries.pollFirst(); } return true; @@ -472,8 +471,11 @@ } Query queryParams = pm.newQuery("javax.jdo.query.SQL", queryText); - return executeWithArray( + List tableNames = executeWithArray( queryParams, pms.toArray(), queryText, limit); + List results = new ArrayList(tableNames); + queryParams.closeAll(); + return results; } /** @@ -493,8 +495,11 @@ pms.add(TableType.MATERIALIZED_VIEW.toString()); Query queryParams = pm.newQuery("javax.jdo.query.SQL", queryText); - return executeWithArray( + List mvs = executeWithArray( queryParams, pms.toArray(), queryText); + List results = new ArrayList(mvs); + queryParams.closeAll(); + return results; } /** @@ -1129,6 +1134,7 @@ int sqlResult = MetastoreDirectSqlUtils.extractSqlInt(query.executeWithArray(params)); long queryTime = doTrace ? System.nanoTime() : 0; MetastoreDirectSqlUtils.timingTrace(doTrace, queryText, start, queryTime); + query.closeAll(); return sqlResult; } @@ -2225,7 +2231,7 @@ } Query queryParams = pm.newQuery("javax.jdo.query.SQL", queryText); - List sqlResult = MetastoreDirectSqlUtils.ensureList(executeWithArray( + List sqlResult = MetastoreDirectSqlUtils.ensureList(executeWithArray( queryParams, pms.toArray(), queryText)); if (!sqlResult.isEmpty()) { @@ -2254,6 +2260,7 @@ ret.add(currKey); } } + queryParams.closeAll(); return ret; } @@ -2292,7 +2299,7 @@ } Query queryParams = pm.newQuery("javax.jdo.query.SQL", queryText); - List sqlResult = MetastoreDirectSqlUtils.ensureList(executeWithArray( + List sqlResult = MetastoreDirectSqlUtils.ensureList(executeWithArray( queryParams, pms.toArray(), queryText)); if (!sqlResult.isEmpty()) { @@ -2313,6 +2320,7 @@ ret.add(currKey); } } + queryParams.closeAll(); return ret; } @@ -2350,7 +2358,7 @@ } Query queryParams = pm.newQuery("javax.jdo.query.SQL", queryText); - List sqlResult = MetastoreDirectSqlUtils.ensureList(executeWithArray( + List sqlResult = MetastoreDirectSqlUtils.ensureList(executeWithArray( queryParams, pms.toArray(), queryText)); if (!sqlResult.isEmpty()) { @@ -2370,6 +2378,7 @@ rely)); } } + queryParams.closeAll(); return ret; } @@ -2407,7 +2416,7 @@ } Query queryParams = pm.newQuery("javax.jdo.query.SQL", queryText); - List sqlResult = MetastoreDirectSqlUtils.ensureList(executeWithArray( + List sqlResult = MetastoreDirectSqlUtils.ensureList(executeWithArray( queryParams, pms.toArray(), queryText)); if (!sqlResult.isEmpty()) { @@ -2427,6 +2436,7 @@ rely)); } } + queryParams.closeAll(); return ret; } @@ -2490,6 +2500,7 @@ ret.add(currConstraint); } } + queryParams.closeAll(); return ret; } @@ -2553,6 +2564,7 @@ ret.add(currConstraint); } } + queryParams.closeAll(); return ret; } diff --git standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java index 8fd4982..d7f6f94 100644 --- standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java +++ standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java @@ -4838,6 +4838,7 @@ } } pm.makePersistentAll(mConstraintsList); + query.closeAll(); } // Finally replace CD oldSd.setCD(newSd.getCD()); @@ -7348,6 +7349,7 @@ "partition.table.tableName", "partition.table.database.name", "partition.partitionName", "partition.table.database.catalogName"); queryWithParams.getLeft().deletePersistentAll(queryWithParams.getRight()); + queryWithParams.getLeft().closeAll(); } private List listDatabaseGrants(String catName, String dbName, @@ -7415,6 +7417,7 @@ "partition.table.database.name", "partition.partitionName", "partition.table.database.catalogName"); queryWithParams.getLeft().deletePersistentAll(queryWithParams.getRight()); + queryWithParams.getLeft().closeAll(); } private List queryByPartitionNames(String catName, String dbName, String tableName, @@ -7422,7 +7425,10 @@ String catCol) { Pair queryAndParams = makeQueryByPartitionNames(catName, dbName, tableName, partNames, clazz, tbCol, dbCol, partCol, catCol); - return (List)queryAndParams.getLeft().executeWithArray(queryAndParams.getRight()); + List results = new ArrayList( + (List)queryAndParams.getLeft().executeWithArray(queryAndParams.getRight())); + queryAndParams.getLeft().closeAll(); + return results; } private Pair makeQueryByPartitionNames( @@ -9476,6 +9482,7 @@ catName, dbName, tableName, partNames, MPartitionColumnStatistics.class, "tableName", "dbName", "partition.partitionName", "catName"); queryWithParams.getLeft().deletePersistentAll(queryWithParams.getRight()); + queryWithParams.getLeft().closeAll(); } @Override @@ -12872,19 +12879,18 @@ return 0; } boolean committed = false; + Query q = null; try { openTransaction(); int maxCreateTime = (int) (System.currentTimeMillis() / 1000) - maxRetainSecs; - Query q = pm.newQuery(MRuntimeStat.class); + q = pm.newQuery(MRuntimeStat.class); q.setFilter("createTime <= maxCreateTime"); q.declareParameters("int maxCreateTime"); long deleted = q.deletePersistentAll(maxCreateTime); committed = commitTransaction(); return (int) deleted; } finally { - if (!committed) { - rollbackTransaction(); - } + rollbackAndCleanup(committed, q); } } @@ -12923,6 +12929,7 @@ break; } } + query.closeAll(); return ret; } @@ -13014,9 +13021,10 @@ String namespace = request.getClusterNamespace(); boolean commited = false; ScheduledQueryPollResponse ret = new ScheduledQueryPollResponse(); + Query q = null; try { openTransaction(); - Query q = pm.newQuery(MScheduledQuery.class, + q = pm.newQuery(MScheduledQuery.class, "nextExecution <= now && enabled && clusterNamespace == ns && activeExecution == null"); q.setSerializeRead(true); q.declareParameters("java.lang.Integer now, java.lang.String ns"); @@ -13049,6 +13057,9 @@ LOG.debug("Caught jdo exception; exclusive", e); commited = false; } finally { + if (q != null) { + q.closeAll(); + } if (commited) { return ret; } else { @@ -13272,19 +13283,18 @@ return 0; } boolean committed = false; + Query q = null; try { openTransaction(); int maxCreateTime = (int) (System.currentTimeMillis() / 1000) - maxRetainSecs; - Query q = pm.newQuery(MScheduledExecution.class); + q = pm.newQuery(MScheduledExecution.class); q.setFilter("startTime <= maxCreateTime"); q.declareParameters("int maxCreateTime"); long deleted = q.deletePersistentAll(maxCreateTime); committed = commitTransaction(); return (int) deleted; } finally { - if (!committed) { - rollbackTransaction(); - } + rollbackAndCleanup(committed, q); } } @@ -13295,10 +13305,11 @@ return 0; } boolean committed = false; + Query q = null; try { openTransaction(); int maxLastUpdateTime = (int) (System.currentTimeMillis() / 1000) - timeoutSecs; - Query q = pm.newQuery(MScheduledExecution.class); + q = pm.newQuery(MScheduledExecution.class); q.setFilter("lastUpdateTime <= maxLastUpdateTime && (state == 'INITED' || state == 'EXECUTING')"); q.declareParameters("int maxLastUpdateTime"); @@ -13318,9 +13329,7 @@ committed = commitTransaction(); return results.size(); } finally { - if (!committed) { - rollbackTransaction(); - } + rollbackAndCleanup(committed, q); } } @@ -13339,5 +13348,6 @@ pm.makePersistent(e); } } + q.closeAll(); } }