This is an automated email from the ASF dual-hosted git repository.

voonhous pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hudi.git


The following commit(s) were added to refs/heads/master by this push:
     new 14fbc79f7566 perf: defer validation messages on hot paths (#20015)
14fbc79f7566 is described below

commit 14fbc79f756625d61e32cef8c0dc15d3b90b0d53
Author: voonhous <[email protected]>
AuthorDate: Mon Sep 21 17:24:19 2026 +0800

    perf: defer validation messages on hot paths (#20015)
    
    * perf: defer validation messages on hot paths
    
    ValidationUtils.checkArgument/checkState already offer Supplier<String>
    overloads that build the message only when the check fails. Switch the
    call sites that eagerly concatenate or String.format a message on a
    per-record, per-value, per-block or per-comparison path, so the passing
    case no longer allocates a message string.
    
    Notable sites:
    - MercifulJsonConverter: String.format per JSON field value
    - BootstrapColumnStichingRecordReader.next: String.format per row
    - ConditionalRangePartitioner.getPartition: concat per record
    - HoodieSchemaCompatibility.lookupWriterField: serialized the whole
      writer schema to JSON on every call
    - HoodieSourceSplitComparator.compare: stringified both splits on every
      comparison
    - HoodieMetadataPayload / MetadataPartitionType: per MDT record
    
    Message text is unchanged. Config, timeline and once-per-job checks are
    left as is.
    
    * perf(flink): defer per-record messages on the write path
    
    PreemptiveMemorySegmentPool.setCurrentOwner runs for every record from
    StreamWriteFunction.doBufferRecord, and
    GroupedInsertPartitioner.partition runs for every record routed by the
    partitioner. Switch both eagerly built messages to the Supplier form.
---
 .../java/org/apache/hudi/client/model/AbstractHoodieRowData.java  | 2 +-
 .../apache/hudi/data/partitioner/ConditionalRangePartitioner.java | 2 +-
 .../java/org/apache/hudi/common/avro/MercifulJsonConverter.java   | 2 +-
 .../org/apache/hudi/common/schema/HoodieSchemaCompatibility.java  | 2 +-
 .../org/apache/hudi/common/table/log/HoodieLogFileReader.java     | 6 +++---
 .../main/java/org/apache/hudi/common/util/HoodieVectorUtils.java  | 2 +-
 .../main/java/org/apache/hudi/metadata/HoodieMetadataPayload.java | 8 ++++----
 .../main/java/org/apache/hudi/metadata/MetadataPartitionType.java | 6 +++---
 .../org/apache/hudi/sink/buffer/PreemptiveMemorySegmentPool.java  | 2 +-
 .../src/main/java/org/apache/hudi/sink/buffer/RowDataBucket.java  | 2 +-
 .../apache/hudi/sink/partitioner/GroupedInsertPartitioner.java    | 2 +-
 .../main/java/org/apache/hudi/source/ExpressionEvaluators.java    | 2 +-
 .../hudi/source/reader/function/AbstractSplitReaderFunction.java  | 2 +-
 .../org/apache/hudi/source/split/HoodieSourceSplitComparator.java | 4 ++--
 .../java/org/apache/hudi/table/format/cdc/CdcImageManager.java    | 2 +-
 .../apache/hudi/hadoop/BootstrapColumnStichingRecordReader.java   | 2 +-
 .../main/java/org/apache/hudi/storage/inline/InLineFSUtils.java   | 2 +-
 17 files changed, 25 insertions(+), 25 deletions(-)

diff --git 
a/hudi-client/hudi-flink-client/src/main/java/org/apache/hudi/client/model/AbstractHoodieRowData.java
 
b/hudi-client/hudi-flink-client/src/main/java/org/apache/hudi/client/model/AbstractHoodieRowData.java
index d01bf3e34d76..31cc974514c2 100644
--- 
a/hudi-client/hudi-flink-client/src/main/java/org/apache/hudi/client/model/AbstractHoodieRowData.java
+++ 
b/hudi-client/hudi-flink-client/src/main/java/org/apache/hudi/client/model/AbstractHoodieRowData.java
@@ -63,7 +63,7 @@ public abstract class AbstractHoodieRowData implements 
RowData {
   }
 
   public void updateMetaField(int pos, String value) {
-    ValidationUtils.checkArgument(pos < metaColumnsNum, "Invalid position for 
metadata field: " + pos);
+    ValidationUtils.checkArgument(pos < metaColumnsNum, () -> "Invalid 
position for metadata field: " + pos);
     metaColumns[pos] = value;
   }
 
diff --git 
a/hudi-client/hudi-spark-client/src/main/java/org/apache/hudi/data/partitioner/ConditionalRangePartitioner.java
 
b/hudi-client/hudi-spark-client/src/main/java/org/apache/hudi/data/partitioner/ConditionalRangePartitioner.java
index fde35930684e..d8047ecf4300 100644
--- 
a/hudi-client/hudi-spark-client/src/main/java/org/apache/hudi/data/partitioner/ConditionalRangePartitioner.java
+++ 
b/hudi-client/hudi-spark-client/src/main/java/org/apache/hudi/data/partitioner/ConditionalRangePartitioner.java
@@ -76,7 +76,7 @@ public class ConditionalRangePartitioner<S extends 
Comparable<S>, V extends Comp
     S key = compositeKey._1();
     V value = compositeKey._2();
     ValidationUtils.checkArgument(startIndex.containsKey(key),
-        "ConditionalRangePartitioner does not expect key " + key);
+        () -> "ConditionalRangePartitioner does not expect key " + key);
 
     List<V> splits = splitPoints.getOrDefault(key, Collections.emptyList());
     // binary search to find the right bucket id.
diff --git 
a/hudi-common/src/main/java/org/apache/hudi/common/avro/MercifulJsonConverter.java
 
b/hudi-common/src/main/java/org/apache/hudi/common/avro/MercifulJsonConverter.java
index eb9c28564d79..9e198045f63c 100644
--- 
a/hudi-common/src/main/java/org/apache/hudi/common/avro/MercifulJsonConverter.java
+++ 
b/hudi-common/src/main/java/org/apache/hudi/common/avro/MercifulJsonConverter.java
@@ -205,7 +205,7 @@ public class MercifulJsonConverter {
     }
 
     ValidationUtils.checkArgument(
-        processor != null, String.format("JsonConverter cannot handle type: 
%s", type));
+        processor != null, () -> String.format("JsonConverter cannot handle 
type: %s", type));
     return processor;
   }
 
diff --git 
a/hudi-common/src/main/java/org/apache/hudi/common/schema/HoodieSchemaCompatibility.java
 
b/hudi-common/src/main/java/org/apache/hudi/common/schema/HoodieSchemaCompatibility.java
index e9a0aea0d9d0..5b50e7302cf4 100644
--- 
a/hudi-common/src/main/java/org/apache/hudi/common/schema/HoodieSchemaCompatibility.java
+++ 
b/hudi-common/src/main/java/org/apache/hudi/common/schema/HoodieSchemaCompatibility.java
@@ -302,7 +302,7 @@ public final class HoodieSchemaCompatibility {
    * @throws IllegalArgumentException if {@code writerSchema} is not a record
    */
   public static HoodieSchemaField lookupWriterField(final HoodieSchema 
writerSchema, final HoodieSchemaField readerField) {
-    ValidationUtils.checkArgument(writerSchema.getType() == 
HoodieSchemaType.RECORD, writerSchema + " is not a record");
+    ValidationUtils.checkArgument(writerSchema.getType() == 
HoodieSchemaType.RECORD, () -> writerSchema + " is not a record");
     return HoodieSchemaCompatibilityChecker.lookupWriterField(writerSchema, 
readerField);
   }
 
diff --git 
a/hudi-common/src/main/java/org/apache/hudi/common/table/log/HoodieLogFileReader.java
 
b/hudi-common/src/main/java/org/apache/hudi/common/table/log/HoodieLogFileReader.java
index da8a7a70e3f2..d146b07ae131 100644
--- 
a/hudi-common/src/main/java/org/apache/hudi/common/table/log/HoodieLogFileReader.java
+++ 
b/hudi-common/src/main/java/org/apache/hudi/common/table/log/HoodieLogFileReader.java
@@ -190,14 +190,14 @@ public class HoodieLogFileReader implements 
HoodieLogFormat.Reader {
 
       case HFILE_DATA_BLOCK:
         checkState(nextBlockVersion.getVersion() != 
HoodieLogFormatVersion.DEFAULT_VERSION,
-            String.format("HFile block could not be of version (%d)", 
HoodieLogFormatVersion.DEFAULT_VERSION));
+            () -> String.format("HFile block could not be of version (%d)", 
HoodieLogFormatVersion.DEFAULT_VERSION));
         return new HoodieHFileDataBlock(
             () -> getDataInputStream(storage, this.logFile, bufferSize), 
content, true, logBlockContentLoc,
             Option.ofNullable(readerSchema), header, footer, 
enableRecordLookups, logFile.getPath());
 
       case PARQUET_DATA_BLOCK:
         checkState(nextBlockVersion.getVersion() != 
HoodieLogFormatVersion.DEFAULT_VERSION,
-            String.format("Parquet block could not be of version (%d)", 
HoodieLogFormatVersion.DEFAULT_VERSION));
+            () -> String.format("Parquet block could not be of version (%d)", 
HoodieLogFormatVersion.DEFAULT_VERSION));
 
         return new HoodieParquetDataBlock(() -> getDataInputStream(storage, 
this.logFile, bufferSize), content, true, logBlockContentLoc,
             getTargetReaderSchemaForBlock(), header, footer, keyField);
@@ -235,7 +235,7 @@ public class HoodieLogFileReader implements 
HoodieLogFormat.Reader {
     }
 
     int type = inputStream.readInt();
-    checkArgument(type < HoodieLogBlockType.values().length, "Invalid block 
byte type found " + type);
+    checkArgument(type < HoodieLogBlockType.values().length, () -> "Invalid 
block byte type found " + type);
     return HoodieLogBlockType.values()[type];
   }
 
diff --git 
a/hudi-common/src/main/java/org/apache/hudi/common/util/HoodieVectorUtils.java 
b/hudi-common/src/main/java/org/apache/hudi/common/util/HoodieVectorUtils.java
index cd8e5c0e05b1..f6217c26beea 100644
--- 
a/hudi-common/src/main/java/org/apache/hudi/common/util/HoodieVectorUtils.java
+++ 
b/hudi-common/src/main/java/org/apache/hudi/common/util/HoodieVectorUtils.java
@@ -84,7 +84,7 @@ public final class HoodieVectorUtils {
       HoodieSchema.Vector.VectorElementType elemType) {
     int expectedSize = dim * elemType.getElementSize();
     ValidationUtils.checkArgument(bytes.length == expectedSize,
-        "Vector byte array length mismatch: expected " + expectedSize + " but 
got " + bytes.length);
+        () -> "Vector byte array length mismatch: expected " + expectedSize + 
" but got " + bytes.length);
     ByteBuffer buffer = 
ByteBuffer.wrap(bytes).order(HoodieSchema.VectorLogicalType.VECTOR_BYTE_ORDER);
     switch (elemType) {
       case FLOAT:
diff --git 
a/hudi-common/src/main/java/org/apache/hudi/metadata/HoodieMetadataPayload.java 
b/hudi-common/src/main/java/org/apache/hudi/metadata/HoodieMetadataPayload.java
index 6f100d65643e..e40beeac2b84 100644
--- 
a/hudi-common/src/main/java/org/apache/hudi/metadata/HoodieMetadataPayload.java
+++ 
b/hudi-common/src/main/java/org/apache/hudi/metadata/HoodieMetadataPayload.java
@@ -321,7 +321,7 @@ public class HoodieMetadataPayload implements 
HoodieRecordPayload<HoodieMetadata
     filesAdded.forEach((fileName, fileSize) -> {
       // Assert that the file-size of the file being added is positive, since 
Hudi
       // should not be creating empty files
-      checkState(fileSize > 0, "File name " + fileName
+      checkState(fileSize > 0, () -> "File name " + fileName
           + ", is a 0 byte file. It does not have any contents");
       fileInfo.put(fileName, new HoodieMetadataFileInfo(fileSize, false));
     });
@@ -360,7 +360,7 @@ public class HoodieMetadataPayload implements 
HoodieRecordPayload<HoodieMetadata
                                                                                
     String metadataPartitionName) {
     checkArgument(!baseFileName.contains(StoragePath.SEPARATOR)
             && FSUtils.isBaseFile(new StoragePath(baseFileName)),
-        "Invalid base file '" + baseFileName + "' for MetaIndexBloomFilter!");
+        () -> "Invalid base file '" + baseFileName + "' for 
MetaIndexBloomFilter!");
     final String bloomFilterIndexKey = getBloomFilterRecordKey(partitionName, 
baseFileName);
     HoodieKey key = new HoodieKey(bloomFilterIndexKey, metadataPartitionName);
 
@@ -383,9 +383,9 @@ public class HoodieMetadataPayload implements 
HoodieRecordPayload<HoodieMetadata
 
     // Validation of record merge scenario. Only records of same type and key 
can be combined. 
     checkArgument(previousRecord.type == type,
-        "Cannot combine " + previousRecord.type + " with " + type);
+        () -> "Cannot combine " + previousRecord.type + " with " + type);
     checkArgument(previousRecord.key.equals(key),
-        "Cannot combine " + previousRecord.key + " with " + key + " as the 
keys differ");
+        () -> "Cannot combine " + previousRecord.key + " with " + key + " as 
the keys differ");
 
     return 
MetadataPartitionType.get(type).combineMetadataPayloads(previousRecord, this);
   }
diff --git 
a/hudi-common/src/main/java/org/apache/hudi/metadata/MetadataPartitionType.java 
b/hudi-common/src/main/java/org/apache/hudi/metadata/MetadataPartitionType.java
index 6311a7cf1580..c93180457833 100644
--- 
a/hudi-common/src/main/java/org/apache/hudi/metadata/MetadataPartitionType.java
+++ 
b/hudi-common/src/main/java/org/apache/hudi/metadata/MetadataPartitionType.java
@@ -146,7 +146,7 @@ public enum MetadataPartitionType {
       //       Otherwise, it has to be present or the record would be 
considered invalid
       if (bloomFilterRecord == null) {
         
checkArgument(record.getSchema().getField(SCHEMA_FIELD_ID_BLOOM_FILTER) == null,
-            String.format("Valid %s record expected for type: %s", 
SCHEMA_FIELD_ID_BLOOM_FILTER, 
MetadataPartitionType.BLOOM_FILTERS.getRecordType()));
+            () -> String.format("Valid %s record expected for type: %s", 
SCHEMA_FIELD_ID_BLOOM_FILTER, 
MetadataPartitionType.BLOOM_FILTERS.getRecordType()));
       } else {
         payload.bloomFilterMetadata = new HoodieMetadataBloomFilter(
             bloomFilterRecord.get(BLOOM_FILTER_FIELD_TYPE).toString(),
@@ -228,7 +228,7 @@ public enum MetadataPartitionType {
     @Override
     public void constructMetadataPayload(HoodieMetadataPayload payload, 
GenericRecord record) {
       GenericRecord secondaryIndexRecord = getNestedFieldValue(record, 
SCHEMA_FIELD_ID_SECONDARY_INDEX);
-      checkState(secondaryIndexRecord != null, "Valid SecondaryIndexMetadata 
record expected for type: " + 
MetadataPartitionType.SECONDARY_INDEX.getRecordType());
+      checkState(secondaryIndexRecord != null, () -> "Valid 
SecondaryIndexMetadata record expected for type: " + 
MetadataPartitionType.SECONDARY_INDEX.getRecordType());
       payload.secondaryIndexMetadata = new HoodieSecondaryIndexInfo((Boolean) 
secondaryIndexRecord.get(SECONDARY_INDEX_FIELD_IS_DELETED));
     }
 
@@ -315,7 +315,7 @@ public enum MetadataPartitionType {
     //       Otherwise, it has to be present or the record would be considered 
invalid
     if (columnStatsRecord == null) {
       checkArgument(record.getSchema().getField(SCHEMA_FIELD_ID_COLUMN_STATS) 
== null,
-          String.format("Valid %s record expected for type: %s", 
SCHEMA_FIELD_ID_COLUMN_STATS, 
MetadataPartitionType.COLUMN_STATS.getRecordType()));
+          () -> String.format("Valid %s record expected for type: %s", 
SCHEMA_FIELD_ID_COLUMN_STATS, 
MetadataPartitionType.COLUMN_STATS.getRecordType()));
     } else {
       ValueMetadata valueMetadata = 
ValueMetadata.getValueMetadata(columnStatsRecord);
       HoodieMetadataColumnStats.Builder columnStatsBuilder = 
HoodieMetadataColumnStats.newBuilder(METADATA_COLUMN_STATS_BUILDER_STUB.get())
diff --git 
a/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/sink/buffer/PreemptiveMemorySegmentPool.java
 
b/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/sink/buffer/PreemptiveMemorySegmentPool.java
index 4fa21cf74dfe..56d14cba70bf 100644
--- 
a/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/sink/buffer/PreemptiveMemorySegmentPool.java
+++ 
b/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/sink/buffer/PreemptiveMemorySegmentPool.java
@@ -80,7 +80,7 @@ public class PreemptiveMemorySegmentPool implements 
MemorySegmentPool, Closeable
     ValidationUtils.checkArgument(ownerId != null, "Memory segment pool owner 
must not be null");
     ValidationUtils.checkState(
         currentOwnerId == null,
-        "A memory segment pool owner is already active: " + currentOwnerId);
+        () -> "A memory segment pool owner is already active: " + 
currentOwnerId);
     this.currentOwnerId = ownerId;
   }
 
diff --git 
a/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/sink/buffer/RowDataBucket.java
 
b/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/sink/buffer/RowDataBucket.java
index db1df7d34b01..84ca929100c4 100644
--- 
a/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/sink/buffer/RowDataBucket.java
+++ 
b/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/sink/buffer/RowDataBucket.java
@@ -66,7 +66,7 @@ public class RowDataBucket {
   public boolean writeRow(RowData rowData) throws IOException {
     ValidationUtils.checkState(
         !diverged,
-        "RowData bucket " + bucketId + " diverged after a failed write and 
cannot be reused");
+        () -> "RowData bucket " + bucketId + " diverged after a failed write 
and cannot be reused");
     boolean success = dataBuffer.write(rowData);
     if (success) {
       detector.detect(rowData);
diff --git 
a/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/sink/partitioner/GroupedInsertPartitioner.java
 
b/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/sink/partitioner/GroupedInsertPartitioner.java
index b00982009715..7ebcf4ca3ecf 100644
--- 
a/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/sink/partitioner/GroupedInsertPartitioner.java
+++ 
b/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/sink/partitioner/GroupedInsertPartitioner.java
@@ -61,7 +61,7 @@ public class GroupedInsertPartitioner<T extends HoodieKey> 
implements Partitione
     int groupNumber = numPartitions / groupLength;
     int remaining = numPartitions - groupNumber * groupLength;
     ValidationUtils.checkArgument(groupNumber != 0,
-        String.format("write.insert.partitioner.parallelism.per.partition are 
greater than numPartitions %d.", numPartitions));
+        () -> 
String.format("write.insert.partitioner.parallelism.per.partition are greater 
than numPartitions %d.", numPartitions));
 
     int groupIndex = (partitionPath.hashCode() & Integer.MAX_VALUE) % 
groupNumber;
     int step;
diff --git 
a/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/source/ExpressionEvaluators.java
 
b/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/source/ExpressionEvaluators.java
index 5b57d948481c..311e5ddea832 100644
--- 
a/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/source/ExpressionEvaluators.java
+++ 
b/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/source/ExpressionEvaluators.java
@@ -191,7 +191,7 @@ public class ExpressionEvaluators {
       ColumnStats columnStats = columnStatsMap.get(this.name);
       ValidationUtils.checkState(
           columnStats != null,
-          "Can not find column " + this.name);
+          () -> "Can not find column " + this.name);
       return columnStats;
     }
 
diff --git 
a/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/source/reader/function/AbstractSplitReaderFunction.java
 
b/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/source/reader/function/AbstractSplitReaderFunction.java
index d317dd7baa76..eb404db8d091 100644
--- 
a/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/source/reader/function/AbstractSplitReaderFunction.java
+++ 
b/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/source/reader/function/AbstractSplitReaderFunction.java
@@ -113,7 +113,7 @@ public abstract class AbstractSplitReaderFunction 
implements SplitReaderFunction
   @Override
   public BatchRecords<RowData> readBatch(HoodieSourceSplit split, int 
batchSize, BooleanSupplier wakeupSignal) {
     ValidationUtils.checkState(currentIterator != null,
-        "readBatch called before open for split " + split.splitId());
+        () -> "readBatch called before open for split " + split.splitId());
     RowDataSerializer serializer = getCopySerializer();
     List<RowData> buffer = new ArrayList<>();
     try {
diff --git 
a/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/source/split/HoodieSourceSplitComparator.java
 
b/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/source/split/HoodieSourceSplitComparator.java
index 1d3594df0c48..d8ae64563343 100644
--- 
a/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/source/split/HoodieSourceSplitComparator.java
+++ 
b/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/source/split/HoodieSourceSplitComparator.java
@@ -36,11 +36,11 @@ public class HoodieSourceSplitComparator implements 
SerializableComparator<Hoodi
   public int compare(HoodieSourceSplit o1, HoodieSourceSplit o2) {
     ValidationUtils.checkArgument(
         !StringUtils.isNullOrEmpty(o1.getLatestCommit()),
-        "The latest commit field of split can't be null or empty: " + o1);
+        () -> "The latest commit field of split can't be null or empty: " + 
o1);
 
     ValidationUtils.checkArgument(
         !StringUtils.isNullOrEmpty(o2.getLatestCommit()),
-        "The latest commit field of split can't be null or empty: " + o2);
+        () -> "The latest commit field of split can't be null or empty: " + 
o2);
 
     int commitComparison = CharSequence.compare(o1.getLatestCommit(), 
o2.getLatestCommit());
     if (commitComparison == 0) {
diff --git 
a/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/table/format/cdc/CdcImageManager.java
 
b/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/table/format/cdc/CdcImageManager.java
index 726c9b672abc..21d494b7db37 100644
--- 
a/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/table/format/cdc/CdcImageManager.java
+++ 
b/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/table/format/cdc/CdcImageManager.java
@@ -119,7 +119,7 @@ public class CdcImageManager implements AutoCloseable {
       RowKind rowKind) {
     byte[] bytes = imageCache.get(recordKey);
     ValidationUtils.checkState(bytes != null,
-        "Key " + recordKey + " does not exist in current file group image");
+        () -> "Key " + recordKey + " does not exist in current file group 
image");
     try {
       RowData row = serializer.deserialize(new BytesArrayInputView(bytes));
       row.setRowKind(rowKind);
diff --git 
a/hudi-hadoop-mr/src/main/java/org/apache/hudi/hadoop/BootstrapColumnStichingRecordReader.java
 
b/hudi-hadoop-mr/src/main/java/org/apache/hudi/hadoop/BootstrapColumnStichingRecordReader.java
index 5c24766d3868..a23f94abde92 100644
--- 
a/hudi-hadoop-mr/src/main/java/org/apache/hudi/hadoop/BootstrapColumnStichingRecordReader.java
+++ 
b/hudi-hadoop-mr/src/main/java/org/apache/hudi/hadoop/BootstrapColumnStichingRecordReader.java
@@ -72,7 +72,7 @@ public class BootstrapColumnStichingRecordReader implements 
RecordReader<NullWri
     boolean hasMoreOnRight = 
rightColsRecordReader.next(rightColsRecordReader.createKey(), right);
     if (validate) {
       ValidationUtils.checkArgument(hasMoreOnLeft == hasMoreOnRight,
-          String.format("hasMoreOnLeft:%s, hasMoreOnRight: %s", hasMoreOnLeft, 
hasMoreOnRight));
+          () -> String.format("hasMoreOnLeft:%s, hasMoreOnRight: %s", 
hasMoreOnLeft, hasMoreOnRight));
     }
     for (int i = 0; i < numLeftColumns; i++) {
       value.get()[i] = left.get()[i];
diff --git 
a/hudi-io/src/main/java/org/apache/hudi/storage/inline/InLineFSUtils.java 
b/hudi-io/src/main/java/org/apache/hudi/storage/inline/InLineFSUtils.java
index 13aade72865a..71579d7555e4 100644
--- a/hudi-io/src/main/java/org/apache/hudi/storage/inline/InLineFSUtils.java
+++ b/hudi-io/src/main/java/org/apache/hudi/storage/inline/InLineFSUtils.java
@@ -75,7 +75,7 @@ public class InLineFSUtils {
     final String outerFileScheme = inlineFSPath.getParent().getName();
     final StoragePath basePath = inlineFSPath.getParent().getParent();
     checkArgument(basePath.toString().contains(SCHEME_SEPARATOR),
-        "Invalid InLineFS path: " + inlineFSPath);
+        () -> "Invalid InLineFS path: " + inlineFSPath);
 
     final String pathExceptScheme = 
basePath.toString().substring(basePath.toString().indexOf(SCHEME_SEPARATOR) + 
1);
     final String fullPath = outerFileScheme + SCHEME_SEPARATOR

Reply via email to