This is an automated email from the ASF dual-hosted git repository. voonhous pushed a commit to branch branch-1.2.x in repository https://gitbox.apache.org/repos/asf/hudi.git
commit 4cfce3fb009693ea9805ed8debf578190515b1ed 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. Backport notes for release-1.2.1: - HoodieSchemaCompatibility.lookupWriterField keeps the 1.2.1 method body; only the checkArgument message is deferred. - HoodieVectorUtils does not exist on 1.2.1. The same vector length check lives in VectorConversionUtils.convertBinaryToVectorArray and gets the same change there. (cherry picked from commit 14fbc79f756625d61e32cef8c0dc15d3b90b0d53) --- .../java/org/apache/hudi/client/model/AbstractHoodieRowData.java | 2 +- .../apache/hudi/data/partitioner/ConditionalRangePartitioner.java | 2 +- .../java/org/apache/hudi/io/storage/VectorConversionUtils.java | 2 +- .../src/main/java/org/apache/hudi/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/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-client/hudi-spark-client/src/main/java/org/apache/hudi/io/storage/VectorConversionUtils.java b/hudi-client/hudi-spark-client/src/main/java/org/apache/hudi/io/storage/VectorConversionUtils.java index a8cc02f58dad..241e796f0ad9 100644 --- a/hudi-client/hudi-spark-client/src/main/java/org/apache/hudi/io/storage/VectorConversionUtils.java +++ b/hudi-client/hudi-spark-client/src/main/java/org/apache/hudi/io/storage/VectorConversionUtils.java @@ -182,7 +182,7 @@ public final class VectorConversionUtils { HoodieSchema.Vector.VectorElementType elemType) { int expectedSize = dim * elemType.getElementSize(); 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/avro/MercifulJsonConverter.java b/hudi-common/src/main/java/org/apache/hudi/avro/MercifulJsonConverter.java index afa9259326ce..9116e985150c 100644 --- a/hudi-common/src/main/java/org/apache/hudi/avro/MercifulJsonConverter.java +++ b/hudi-common/src/main/java/org/apache/hudi/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 0fd96e55233e..b33aaa9c7439 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 @@ -284,7 +284,7 @@ public final class HoodieSchemaCompatibility { * @return the writer field, if any does correspond, or None. */ 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"); Option<HoodieSchemaField> directOpt = writerSchema.getField(readerField.name()); // Check aliases for (final String readerFieldAliasName : readerField.getAvroField().aliases()) { 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 03ae4a2c4c07..33b68b4a4820 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/metadata/HoodieMetadataPayload.java b/hudi-common/src/main/java/org/apache/hudi/metadata/HoodieMetadataPayload.java index 325a7a5af6ba..3a64c5aecb43 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 655fd4e1d138..7c0a92d4c4e6 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 c9b34e440f85..214ce4da7d6b 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 @@ -61,7 +61,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 f3ca8f5c98af..36d47295fec9 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 @@ -112,7 +112,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 5492d153ebe8..28f2086a6b28 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 @@ -118,7 +118,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
