You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by dk...@apache.org on 2022/07/27 12:18:04 UTC
[hive] branch master updated: HIVE-26288: NullPointerException in CompactionTxnHandler.markFailed (Zsolt Miskolczi, reviewed by Denys Kuzmenko, Karen Coppage)
This is an automated email from the ASF dual-hosted git repository.
dkuzmenko pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git
The following commit(s) were added to refs/heads/master by this push:
new b197ed86029 HIVE-26288: NullPointerException in CompactionTxnHandler.markFailed (Zsolt Miskolczi, reviewed by Denys Kuzmenko, Karen Coppage)
b197ed86029 is described below
commit b197ed86029f07696e326acb5878f86c286e9e1a
Author: InvisibleProgrammer <zs...@gmail.com>
AuthorDate: Wed Jul 27 14:17:51 2022 +0200
HIVE-26288: NullPointerException in CompactionTxnHandler.markFailed (Zsolt Miskolczi, reviewed by Denys Kuzmenko, Karen Coppage)
Closes #3451
---
.../apache/hadoop/hive/ql/txn/compactor/Worker.java | 8 +++++++-
.../hadoop/hive/ql/txn/compactor/TestWorker.java | 18 ++++++++++++++++++
2 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/Worker.java b/ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/Worker.java
index 26f7f9c0eba..ea19328ef1d 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/Worker.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/Worker.java
@@ -474,7 +474,6 @@ public class Worker extends RemoteCompactorThread implements MetaStoreThread {
AcidMetricService.updateMetricsFromWorker(ci.dbname, ci.tableName, ci.partName, ci.type,
dir.getCurrentDirectories().size(), dir.getDeleteDeltas().size(), conf, msc);
-
} catch (Throwable e) {
LOG.error("Caught exception while trying to compact " + ci +
". Marking failed to avoid repeated failures", e);
@@ -501,7 +500,9 @@ public class Worker extends RemoteCompactorThread implements MetaStoreThread {
}
} catch (TException | IOException t) {
LOG.error("Caught an exception in the main loop of compactor worker " + workerName, t);
+
markFailed(ci, t.getMessage());
+
if (msc != null) {
msc.close();
msc = null;
@@ -513,6 +514,7 @@ public class Worker extends RemoteCompactorThread implements MetaStoreThread {
perfLogger.perfLogEnd(CLASS_NAME, workerMetric);
}
}
+
if (computeStats) {
StatsUpdater.gatherStats(ci, conf, runJobAsSelf(ci.runAs) ? ci.runAs : t1.getOwner(),
CompactorUtil.getCompactorJobQueueName(conf, ci, t1));
@@ -600,6 +602,10 @@ public class Worker extends RemoteCompactorThread implements MetaStoreThread {
}
private void markFailed(CompactionInfo ci, String errorMessage) {
+ if (ci == null) {
+ LOG.warn("CompactionInfo client was null. Could not mark failed");
+ return;
+ }
if (ci != null && StringUtils.isNotBlank(errorMessage)) {
ci.errorMessage = errorMessage;
}
diff --git a/ql/src/test/org/apache/hadoop/hive/ql/txn/compactor/TestWorker.java b/ql/src/test/org/apache/hadoop/hive/ql/txn/compactor/TestWorker.java
index bcfc5f76ffa..17920fd08f9 100644
--- a/ql/src/test/org/apache/hadoop/hive/ql/txn/compactor/TestWorker.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/txn/compactor/TestWorker.java
@@ -25,9 +25,12 @@ import org.apache.hadoop.hive.common.FileUtils;
import org.apache.hadoop.hive.common.StringableMap;
import org.apache.hadoop.hive.conf.HiveConf;
import org.apache.hadoop.hive.metastore.HiveMetaStoreUtils;
+import org.apache.hadoop.hive.metastore.IMetaStoreClient;
import org.apache.hadoop.hive.metastore.TransactionalValidationListener;
import org.apache.hadoop.hive.metastore.api.CompactionRequest;
import org.apache.hadoop.hive.metastore.api.CompactionType;
+import org.apache.hadoop.hive.metastore.api.FindNextCompactRequest;
+import org.apache.hadoop.hive.metastore.api.MetaException;
import org.apache.hadoop.hive.metastore.api.Order;
import org.apache.hadoop.hive.metastore.api.Partition;
import org.apache.hadoop.hive.metastore.api.ShowCompactRequest;
@@ -67,7 +70,10 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import static org.apache.hadoop.hive.common.AcidConstants.VISIBILITY_PATTERN;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
/**
* Tests for the worker thread and its MR jobs.
@@ -1008,6 +1014,18 @@ public class TestWorker extends CompactorTest {
}
+ @Test
+ public void testFindNextCompactThrowsTException() throws Exception {
+ Worker worker = Mockito.spy(new Worker());
+ IMetaStoreClient msc = Mockito.mock(IMetaStoreClient.class);
+ Mockito.when(msc.findNextCompact(Mockito.any(FindNextCompactRequest.class))).thenThrow(MetaException.class);
+ worker.msc = msc;
+
+ worker.findNextCompactionAndExecute(true, true);
+
+ verify(msc, times(0)).markFailed(any());
+ }
+
@Test
public void droppedTable() throws Exception {
Table t = newTable("default", "dt", false);