Marta Kuczora created HIVE-19046: ------------------------------------ Summary: Refactor the common parts of the HiveMetastore add_partition_core and add_partitions_pspec_core methods Key: HIVE-19046 URL: https://issues.apache.org/jira/browse/HIVE-19046 Project: Hive Issue Type: Improvement Components: Metastore Reporter: Marta Kuczora Assignee: Marta Kuczora
This is a follow-up Jira of the [HIVE-18696|https://issues.apache.org/jira/browse/HIVE-18696] [review|https://reviews.apache.org/r/65716/]. The biggest part of these methods use the same code. It would make sense to move this code part to a common method. This code is almost the same in the two methods: {code} List<Future<Partition>> partFutures = Lists.newArrayList(); final Table table = tbl; for (final Partition part : parts) { if (!part.getTableName().equals(tblName) || !part.getDbName().equals(dbName)) { throw new MetaException("Partition does not belong to target table " + dbName + "." + tblName + ": " + part); } boolean shouldAdd = startAddPartition(ms, part, ifNotExists); if (!shouldAdd) { existingParts.add(part); LOG.info("Not adding partition " + part + " as it already exists"); continue; } final UserGroupInformation ugi; try { ugi = UserGroupInformation.getCurrentUser(); } catch (IOException e) { throw new RuntimeException(e); } partFutures.add(threadPool.submit(new Callable<Partition>() { @Override public Partition call() throws Exception { ugi.doAs(new PrivilegedExceptionAction<Object>() { @Override public Object run() throws Exception { try { boolean madeDir = createLocationForAddedPartition(table, part); if (addedPartitions.put(new PartValEqWrapper(part), madeDir) != null) { // Technically, for ifNotExists case, we could insert one and discard the other // because the first one now "exists", but it seems better to report the problem // upstream as such a command doesn't make sense. throw new MetaException("Duplicate partitions in the list: " + part); } initializeAddedPartition(table, part, madeDir); } catch (MetaException e) { throw new IOException(e.getMessage(), e); } return null; } }); return part; } })); } try { for (Future<Partition> partFuture : partFutures) { Partition part = partFuture.get(); if (part != null) { newParts.add(part); } } } catch (InterruptedException | ExecutionException e) { // cancel other tasks for (Future<Partition> partFuture : partFutures) { partFuture.cancel(true); } throw new MetaException(e.getMessage()); } {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)