diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/CompactionTxnHandler.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/CompactionTxnHandler.java index d3b6091574a2..15fe01eae226 100644 --- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/CompactionTxnHandler.java +++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/CompactionTxnHandler.java @@ -453,6 +453,7 @@ public void markRefused(CompactionInfo info) throws MetaException { @Override @RetrySemantics.CannotRetry public void setCleanerRetryRetentionTimeOnError(CompactionInfo info) throws MetaException { + String sanitizedErrorMessage = TxnUtils.utf8Sanitize(info.errorMessage); if (info.isAbortedTxnCleanup() && info.id == 0) { /* * MUTEX_KEY.CompactionScheduler lock ensures that there is only 1 entry in @@ -473,7 +474,7 @@ public void setCleanerRetryRetentionTimeOnError(CompactionInfo info) throws Meta .addValue("type", Character.toString(thriftCompactionType2DbType(info.type))) .addValue("state", Character.toString(info.state)) .addValue("retention", info.retryRetention) - .addValue("msg", info.errorMessage), null); + .addValue("msg", sanitizedErrorMessage), null); if (updCnt == 0) { LOG.error("Unable to update/insert compaction queue record: {}. updCnt={}", info, updCnt); throw new MetaException("Unable to insert abort retry entry into COMPACTION QUEUE: " + @@ -487,7 +488,7 @@ public void setCleanerRetryRetentionTimeOnError(CompactionInfo info) throws Meta "UPDATE \"COMPACTION_QUEUE\" SET \"CQ_RETRY_RETENTION\" = :retention, \"CQ_ERROR_MESSAGE\"= :msg WHERE \"CQ_ID\" = :id", new MapSqlParameterSource() .addValue("retention", info.retryRetention) - .addValue("msg", info.errorMessage) + .addValue("msg", sanitizedErrorMessage) .addValue("id", info.id), ParameterizedCommand.EXACTLY_ONE_ROW); } diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/TxnUtils.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/TxnUtils.java index f490798be56a..f344161415e1 100644 --- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/TxnUtils.java +++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/TxnUtils.java @@ -696,4 +696,8 @@ public static String createInsertPreparedStmt(String tableName, List col sb.append(") values (" + placeholder + ")"); return sb.toString(); } + + public static String utf8Sanitize(String input) { + return input == null ? null : input.replace("\0", ""); + } } diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/jdbc/functions/MarkCleanedFunction.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/jdbc/functions/MarkCleanedFunction.java index 9f985d7c459e..bc9d6f2e64e0 100644 --- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/jdbc/functions/MarkCleanedFunction.java +++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/jdbc/functions/MarkCleanedFunction.java @@ -122,9 +122,9 @@ private void removeTxnComponents(CompactionInfo info, MultiDataSourceJdbcResourc MapSqlParameterSource params = new MapSqlParameterSource() .addValue("state", TxnStatus.ABORTED.getSqlConst(), Types.CHAR) - .addValue("db", info.dbname) - .addValue("table", info.tableName) - .addValue("partition", info.partName); + .addValue("db", info.dbname, Types.VARCHAR) + .addValue("table", info.tableName, Types.VARCHAR) + .addValue("partition", info.partName, Types.VARCHAR); int totalCount = 0; if (!info.hasUncompactedAborts && info.highestWriteId != 0) {