[ https://issues.apache.org/jira/browse/HIVE-19046?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16441373#comment-16441373 ]
Sahil Takiar commented on HIVE-19046: ------------------------------------- +1 LGTM pending Hive QA > 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 > Priority: Minor > Attachments: HIVE-19046.1.patch > > > 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)