#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#

# Seed entry used by MessagesTest. Real entries are added by migration tasks.
test.seed = hello %1$s

# === common ===

# TSDataType
error.common.invalid_input = Invalid input: %1$s

# RamUsageEstimator
error.common.no_array_classes = This method does not work with array classes.

# TsPrimitiveType — unsupported data type (typo fixed: added space after colon)
error.common.unsupported_data_type = Unsupported data type: %1$s

# TsPrimitiveType — get/set operations not supported for sub-class (14 sites collapsed to 1 key)
error.common.subclass_op_not_supported = %1$s is not supported for current sub-class

# TsPrimitiveType — wrong value type passed to setObject (7 sites collapsed to 1 key)
error.common.tsprimitive_wrong_value_type = %1$s can only be set %2$s value

# TsBlockBuilderStatus
error.common.bytes_cannot_be_negative = bytes cannot be negative

# ColumnEncoding
error.common.invalid_column_encoding_value = Invalid value: %1$s

# ColumnBuilderStatus
error.common.cannot_determine_size_array = Cannot determine size of %1$s because it contains an array
error.common.class_is_interface = %1$s is an interface
error.common.class_is_abstract = %1$s is abstract
error.common.cannot_determine_size_subclass = Cannot determine size of a subclass. %1$s extends from %2$s

# BitMap
error.common.bitmap_range_size_exceeds = range size %1$s should <= the minimal bitmap size %2$s
error.common.bitmap_start_length_out_of_range = startPosition %1$s + length %2$s is out of range %3$s
error.common.bitmap_out_of_src_range = %1$s is out of src range %2$s
error.common.bitmap_out_of_dest_range = %1$s is out of dest range %2$s

# TSDataType
error.common.unsupported_cast = Unsupported cast: from %1$s to %2$s

# === write ===

# DataPoint — set<Type> not supported (7 sites collapsed to 1 key; arg = type name)
error.write.datapoint_set_not_supported = set %1$s not support in DataPoint

# DataPoint / Tablet / AlignedChunkGroupWriterImpl / NonAlignedChunkGroupWriterImpl / TableTsBlock2TsFileWriter
# — "Data type X is not supported." (many sites collapsed to 1 key)
error.write.type_not_supported = Data type %1$s is not supported.

# DataPoint — type/value mismatch in getDataPoint
error.write.datapoint_type_value_mismatch = Data type of %1$s is %2$s, but input value is %3$s

# Tablet.addValue(rowIndex, indexOfSchema, Object) — wrong Java type for column type (7 sites collapsed to 1 key)
error.write.tablet_expected_type = Expected value of type %1$s for data type %2$s, but got %3$s

# Tablet.addValue(rowIndex, columnIndex, primitiveVal) — wrong array type (7 sites collapsed to 1 key)
error.write.tablet_col_wrong_type = The data type of column index %1$s is not %2$s

# Tablet — null measurement argument
error.write.tablet_null_measurement = measurement should be non null value

# Tablet — measurement not found
error.write.tablet_no_measurement = No measurement for %1$s

# Tablet.getValue — unsupported data type
error.write.tablet_unsupported_type = Unsupported type: %1$s

# Tablet.readvaluesFromBuffer — unsupported type at client
error.write.tablet_client_type_not_supported = data type %1$s is not supported when convert data at client

# VectorMeasurementSchema — getCompressor deprecated method
error.write.schema_vector_aligned_no_compressor = Aligned series should not invoke this method

# VectorMeasurementSchema — unsupported method (4 sites collapsed to 1 key)
error.write.schema_vector_method_unsupported = unsupported method for VectorMeasurementSchema

# VectorMeasurementSchema — unexpected end of stream
error.write.schema_vector_unexpected_end_of_stream = Unexpected end of stream when reading compressors

# MeasurementSchema — unsupported method (4 sites collapsed to 1 key)
error.write.schema_measurement_method_unsupported = unsupported method for MeasurementSchema

# MeasurementSchemaBuilder — validation errors
error.write.schema_builder_null_name = Measurement name cannot be null or empty
error.write.schema_builder_null_type = Data type cannot be null
error.write.schema_builder_null_property = Property key and value cannot be null

# ValueChunkWriter / ChunkWriterImpl / TimeChunkWriter — page header IO exception (3 files, 1 key)
error.write.page_write_header_io_exception = IO Exception in writeDataPageHeader,ignore this page

# ValueChunkWriter / ChunkWriterImpl / TimeChunkWriter — written bytes inconsistent (3 files, 1 key)
error.write.chunk_bytes_inconsistent = Bytes written is inconsistent with the size of data: %1$s != %2$s

# AlignedChunkWriterImpl — unknown data type
error.write.chunk_unknown_type = Unknown data type %1$s

# AlignedChunkGroupWriterImpl — out-of-order write (aligned)
error.write.chunk_group_aligned_out_of_order = Not allowed to write out-of-order data in timeseries %1$s%2$s%3$s, time should later than %4$s

# NonAlignedChunkGroupWriterImpl — out-of-order write
error.write.chunk_group_non_aligned_out_of_order = Not allowed to write out-of-order data in timeseries %1$s%2$s%3$s, time should later than %4$s

# TsFileWriter — file writer cannot write
error.write.tsfile_writer_cannot_write = the given file Writer does not support writing any more. Maybe it is an complete TsFile

# TsFileWriter — page size too large vs chunk group size
error.write.tsfile_writer_page_size_too_large = Invalid memory threshold configuration: page size %1$d must be smaller than chunk group size %2$d. Please either increase the chunk group size or decrease the page size.

# TsFileWriter — template not found
error.write.tsfile_writer_template_not_found = given template is not existed! %1$s

# TsFileWriter — device already registered (via template)
error.write.tsfile_writer_device_registered = this device %1$s has been registered, you can only use registerDevice method to register empty device.

# TsFileWriter — nonAligned timeseries trying to register on already-aligned device
error.write.tsfile_writer_timeseries_registered_aligned = given device %1$s has been registered for aligned timeseries.

# TsFileWriter — timeseries already registered (nonAligned)
error.write.tsfile_writer_timeseries_registered = given nonAligned timeseries %1$s has been registered.

# TsFileWriter — aligned device cannot be expanded
error.write.tsfile_writer_device_aligned_no_expand = given device %1$s has been registered for aligned timeseries and should not be expanded.

# TsFileWriter — trying to register nonAligned on already-nonAligned device
error.write.tsfile_writer_device_registered_nonaligned = given device %1$s has been registered for nonAligned timeseries.

# TsFileWriter — new measurement after flush
error.write.tsfile_writer_new_measurement = TsFile has flushed chunk group and should not add new measurement %1$s in device %2$s

# TsFileWriter / AbstractTableModelTsFileWriter — flush size inconsistent
error.write.tsfile_writer_flush_inconsistent = Flushed data size is inconsistent with computation! Estimated: %1$d, Actual: %2$d

# RestorableTsFileIOWriter — incompatible file format
error.write.restorable_writer_not_compatible = %1$s is not in TsFile format.

# ForceAppendTsFileWriter — not a complete TsFile
error.write.force_append_not_complete = File %1$s is not a complete TsFile

# DiskTSMIterator — read size mismatch
error.write.disk_tsm_read_size_mismatch = Expected to read %1$s bytes, but actually read %2$s bytes

# DeviceTableModelWriter / v4 — table name is null
error.write.v4_table_name_null = Table name is null

# TableTsBlock2TsFileWriter — null value in time column
error.write.v4_all_time_null = All values in time column should not be null

# TsFileTreeWriter — delegate error messages
error.write.v4_tree_writer_register_failed = Failed to register timeseries for device %1$s
error.write.v4_tree_writer_register_aligned_failed = Failed to register aligned timeseries for device %1$s
error.write.v4_tree_writer_write_tablet_failed = Failed to write tablet data
error.write.v4_tree_writer_write_record_failed = Failed to write TSRecord
error.write.v4_tree_writer_close_failed = Failed to close TsFileTreeWriter

# TsFileTreeWriterBuilder — output file not specified
error.write.v4_output_file_required = Output file must be specified

# TsFileWriterBuilder — parameter validation
error.write.v4_file_non_null = The file must be a non-null and non-directory File.
error.write.v4_table_schema_non_null = TableSchema must not be null.
error.write.v4_memory_threshold_positive = Memory threshold must be > 0 bytes.
error.write.v4_table_name_blank = TableName must not be blank.
error.write.v4_column_name_blank = Column name must not be blank.

# --- write LOG messages ---

# DataPoint subclasses — null IChunkWriter (7 files, 1 key)
log.write.datapoint_chunk_writer_null = given IChunkWriter is null, do nothing and return

# ChunkWriterImpl / TimeChunkWriter / ValueChunkWriter — upper bound hit (3 files, 1 key)
log.write.chunk_writer_write_page = current line count reaches the upper bound, write page {}

# ChunkWriterImpl / TimeChunkWriter / ValueChunkWriter — page write error (3 files, 1 key)
log.write.chunk_writer_page_error = meet error in pageWriter.writePageHeaderAndDataIntoBuff,ignore this page:

# AlignedChunkGroupWriterImpl / NonAlignedChunkGroupWriterImpl — flush device (2 files, 1 key)
log.write.flush_device = start flush device id:{}

# TsFileWriter / AbstractTableModelTsFileWriter — flush chunk groups (2 files, 1 key)
log.write.flush_chunk_groups = start to flush chunk groups, memory space occupy:{}

# TsFileWriter / AbstractTableModelTsFileWriter — close file (2 files, 1 key)
log.write.close_file = start close file

# AbstractTableModelTsFileWriter — close file exception (1 site)
log.write.close_file_exception = Meet exception when close file writer.

# TsFileWriter / AbstractTableModelTsFileWriter — page size vs chunk group size warn (2 files, 1 key)
log.write.page_size_warn = TsFile's page size {} is greater than chunk group size {}, please enlarge the chunk group size or decrease page size.

# TsFileWriter — ignore nonAligned measurement (1 site)
log.write.ignore_nonaligned_measurement = Ignore nonAligned measurement {} , because it is not registered or in the default template

# ForceAppendTsFileWriter / RestorableTsFileIOWriter — writer opened debug (2 files, 1 key)
log.write.writer_opened = {} writer is opened.

# TsFileIOWriter — start chunk group debug (1 site)
log.write.start_chunk_group = start chunk group:{}, file position {}

# TsFileIOWriter — start flush footer debug (1 site)
log.write.start_flush_footer = start to flush the footer,file pos:{}

# TsFileIOWriter — device timeseries metadata error (1 site)
log.write.tsm_device_metadata_error = Failed to get device timeseries metadata map

# TsFileIOWriter — flush metadata to temp file error (1 site)
log.write.flush_metadata_exception = Meets exception when flushing metadata to temp file for {}

# TsFileIOWriter — flushing series debug (1 site)
log.write.flushing_series = Flushing {}

# DiskTSMIterator — IOException reading timeseries metadata from disk (1 site)
log.write.tsm_disk_read_error = Meets IOException when reading timeseries metadata from disk

# ChunkWriterImpl / TimeChunkWriter / ValueChunkWriter — page header start (3 files, 1 key)
log.write.page_header_flush_start = start to flush a page header into buffer, buffer position {}

# ChunkWriterImpl / TimeChunkWriter / ValueChunkWriter — page header done (3 files, 1 key)
log.write.page_header_flush_done = finish to flush a page header {} of {} into buffer, buffer position {}

# TimeChunkWriter / ValueChunkWriter — page header done (time page variant, 2 files)
log.write.page_header_flush_done_time = finish to flush a page header {} of time page into buffer, buffer position {}

# ChunkWriterImpl / TimeChunkWriter / ValueChunkWriter — enough size, write page (3 files, 1 key)
log.write.page_enough_size = enough size, write page {}, pageSizeThreshold:{}, currentPateSize:{}, valueCountInOnePage:{}

# ValueChunkWriter variant of above (uses currentPageSize instead of currentPateSize)
log.write.page_enough_size_value = enough size, write page {}, pageSizeThreshold:{}, currentPageSize:{}, valueCountInOnePage:{}

# TsFileIOWriter — end flushing a chunk (1 site)
log.write.end_flush_chunk = end flushing a chunk:{}, totalvalue:{}

# TsFileIOWriter — flushing chunk metadata summary (1 site)
log.write.flush_chunk_metadata = Flushing chunk metadata, total size is {}, count is {}, avg size is {}

# === read.common ===

# TimeRange — null input in compareTo
error.read.timerange_null_input = The input cannot be null!

# TimeRange — setMin/setMax invalid input
error.read.timerange_invalid_input = Invalid input!

# TimeRange — set(min, max) range violation
error.read.timerange_min_gt_max = min:%1$s should not be larger than max: %2$s

# Chunk — unsupported data type in rewrite (2 sites, 1 key)
error.read.chunk_unsupported_type = Unsupported data type: %1$s

# Chunk — NonAlignedChunk null value at timestamp
error.read.chunk_non_aligned_null = NonAlignedChunk contains null, timestamp: %1$s

# BatchDataFactory — instantiation guard
error.read.factory_class = Factory class

# Field — OBJECT type does not support getBinaryV
error.read.field_object_type_no_binary = OBJECT Type only support getStringValue

# Path — getFullPathWithAlias not supported
error.read.path_no_alias = doesn't alias in TSFile Path

# SignalBatchData — hasCurrent not supported
error.read.signal_batch_data_no_has_current = hasCurrent is not supported for SignalBatchData

# BatchData — unknown data type (2 sites, 1 key)
error.read.batch_data_unknown_type = Unknown data type for BatchData:%1$s

# BatchData — invalid input in deserialize
error.read.batch_data_invalid_input = Invalid input: %1$s

# TypeFactory — invalid TSDataType
error.read.typefactory_invalid_tsdata_type = Invalid TSDataType for TypeFactory: %1$s

# TypeFactory — invalid TypeEnum
error.read.typefactory_invalid_type_enum = Invalid TypeEnum for TypeFactory: %1$s

# TsBlockBuilder — unknown data type (2 sites, 1 key)
error.read.tsblock_builder_unknown_type = Unknown data type: %1$s

# TsBlockBuilder.build — declared positions mismatch (time column)
error.read.tsblock_builder_time_mismatch = Declared positions (%1$s) does not match time column's number of entries (%2$s)

# TsBlockBuilder.build — declared positions mismatch (value column)
error.read.tsblock_builder_col_mismatch = Declared positions (%1$s) does not match column %2$s's number of entries (%3$s)

# TsBlock.getRegion — invalid position/length
error.read.tsblock_invalid_region = Invalid position %1$s and length %2$s in page with %3$s positions

# TsBlock.subTsBlock — fromIndex over positionCount
error.read.tsblock_from_index_over = FromIndex of subTsBlock cannot over positionCount.

# TsBlock.determinePositionCount — columns is empty
error.read.tsblock_columns_empty = columns is empty

# TsBlock — unknown datatype in updateWithoutTimeColumn
error.read.tsblock_unknown_datatype = Unknown datatype: %1$s

# ColumnBuilder — type-specific unsupported data type (1 key per builder, 6 builders)
error.read.col_builder_double_type = DoubleColumn only support Double data type
error.read.col_builder_int_type = IntegerColumn only support Integer data type
error.read.col_builder_float_type = FloatColumn only support Float data type
error.read.col_builder_long_type = LongColumn only support Long data type
error.read.col_builder_boolean_type = BooleanColumn only support Boolean data type
error.read.col_builder_binary_type = BinaryColumn only support Binary data type

# ColumnFactory — unsupported data type
error.read.column_factory_unsupported_type = Unsupported data type: %1$s

# TsBlockSerde — block too large
error.read.tsblock_too_large = TsBlock should not be that large: %1$s

# Shared column constructor checks (reused across multiple column classes)
error.read.col_array_offset_negative = arrayOffset is negative
error.read.col_position_count_negative = positionCount is negative
error.read.col_values_length_lt_position = values length is less than positionCount
error.read.col_isnull_length_lt_position = isNull length is less than positionCount
error.read.col_ids_length_lt_position = ids length is less than positionCount

# Shared fromIndex validation (reused across multiple column classes)
error.read.col_from_index_invalid = fromIndex is not valid

# TimeColumn — isNull not supported
error.read.time_column_isnull_unsupported = isNull is not supported for TimeColumn

# ColumnEncoderFactory — unsupported column encoding
error.read.col_encoder_unsupported = Unsupported column encoding: %1$s

# Int32/Int64/Binary/ByteArray array column encoders — invalid data type
error.read.col_encoder_invalid_type = Invalid data type: %1$s

# RunLengthEncodedColumn — expected single position
error.read.rle_col_expected_single = Expected value to contain a single position but has %1$s positions

# RunLengthEncodedColumn — setNull not supported
error.read.rle_col_set_null_unsupported = set null of %1$s is not supported !

# RunLengthColumnEncoder — nested RLE not supported
error.read.rle_encoder_nested = Unable to encode a nested RLE column.

# DictionaryColumn — sequential ids flag constraint
error.read.dict_col_sequential_ids = sequential ids flag is only valid for compacted dictionary

# DictionaryColumn — non-existent key reference (2 sites, 1 key)
error.read.dict_col_nonexistent_key = reference to a non-existent key

# DictionaryColumn — dictionary source ids mismatch
error.read.dict_col_source_ids_mismatch = dictionarySourceIds must be the same

# NullColumn — unknown data type
error.read.null_col_unknown_type = Unknown data type: %1$s

# ColumnUtil — invalid offset/length in array
error.read.col_util_invalid_offset_length = Invalid offset %1$s and length %2$s in array with %3$s elements

# ColumnUtil — invalid position/length in block
error.read.col_util_invalid_pos_length = Invalid position %1$s and length %2$s in block with %3$s positions

# ColumnUtil — invalid positions array size
error.read.col_util_invalid_positions_size = Invalid positions array size %1$d, actual position count is %2$d

# ColumnUtil — invalid position in block
error.read.col_util_invalid_position = Invalid position %1$s in block with %2$s positions

# ColumnUtil — cannot grow array
error.read.col_util_cannot_grow = Cannot grow array beyond '%1$s'

# TimeColumnBuilder — position not valid
error.read.time_col_builder_position_invalid = position is not valid

# PathParseError — syntax error with line and position
error.read.path_parse_error = line %1$s:%2$s %3$s

# === read ===

# TsFileSequenceReader / selfCheck — unexpected marker
error.read.unexpected_marker = Unexpected marker %1$s

# TsFileSequenceReader.selfCheck / checkChunkAndPagesStatistics — unexpected data type in switch
error.read.unexpected_type = Unexpected type %1$s

# TsFileSequenceReader — device not in tsFileMetaData (with file name, 3 sites)
error.read.device_not_in_metadata_file = Device {%1$s} is not in tsFileMetaData of %2$s

# TsFileSequenceReader — device not in tsFileMetaData (no file name, 1 site)
error.read.device_not_in_metadata = Device {%1$s} is not in tsFileMetaData

# TsFileSequenceReader / readPlanIndex / readMarker — reach end of file (3 sites)
error.read.reach_end_of_file = reach the end of the file.

# TsFileSequenceReader.readData — reach end of data (short form)
error.read.reach_end_of_data = reach the end of the data

# TsFileSequenceReader.readData — reach end of data with position detail
error.read.reach_end_of_data_detail = reach the end of the data. Size of data that want to read: %1$s,actual read size: %2$s, position: %3$s

# TsFileSequenceReader.uncompress — uncompress error with counts (no page header)
error.read.uncompress_error = Uncompress error! uncompress size: %1$scompressed size: %2$s%3$s

# ChunkReader.uncompressPageData / decryptAndUncompressPageData / LazyLoadPageData — uncompress error with page header
error.read.uncompress_error_with_header = Uncompress error! uncompress size: %1$scompressed size: %2$spage header: %3$s%4$s

# AbstractChunkReader — no more page
error.read.no_more_page = No more page

# ChunkReader.readCompressedPageData — incomplete page body
error.read.chunk_incomplete_page_body = do not has a complete page body. Expected:%1$s. Actual:%2$s

# TsFileSequenceReaderTimeseriesMetadataIterator — deserializeTimeseriesMetadataUsingTsFileInput failed
error.read.tsm_iterator_tsfinput_failed = TsFileSequenceReaderTimeseriesMetadataIterator: deserializeTimeseriesMetadataUsingTsFileInput failed, currentEndOffset: %1$d, %2$s

# TsFileSequenceReaderTimeseriesMetadataIterator — deserializeMetadataIndexEntry failed
error.read.tsm_iterator_index_entry_failed = TsFileSequenceReaderTimeseriesMetadataIterator: deserializeMetadataIndexEntry failed, MetadataIndexEntryInfo: %1$s, %2$s

# TsFileSequenceReaderTimeseriesMetadataIterator — currentBuffer still has remaining data
error.read.tsm_iterator_buffer_not_empty = currentBuffer still has some data left before deserializeLeafMeasurement

# TsFileSequenceReader — timeseries of device are not aligned
error.read.timeseries_not_aligned = Timeseries of device {%1$s} are not aligned

# TsFileSequenceReader — aligned chunk metadata should only have one timeseriesMetadataList per device
error.read.aligned_chunk_metadata_one_device = Error when reading timeseriesMetadata of device %1$s in file %2$s: should only one timeseriesMetadataList in one device, actual: %3$d

# TsFileSequenceReader.selfCheckWithInfo — statistics mistakes in Chunk
error.read.stats_mistakes_chunk = Chunk exists statistics mistakes at position %1$s

# TsFileSequenceReader.selfCheckWithInfo — statistics mistakes in TimeseriesMetadata
error.read.stats_mistakes_tsm = TimeseriesMetadata exists statistics mistakes at position %1$s

# TsFileSequenceReader / TsFileDeviceIterator — error reading a time series metadata block (2 sites)
error.read.metadata_block_read_error = Error occurred while reading a time series metadata block.

# LazyTsFileDeviceIterator.getDevicesOfLeafNode — first param should be device leaf node
error.read.device_leaf_node_required = the first param should be device leaf node.

# LazyTsFileDeviceIterator — next() must be called before accessing current device (3 sites)
error.read.device_iterator_no_current = next() must be called before accessing current device

# DeviceMetaIterator — non-device node detected
error.read.non_device_node_detected = A non-device node detected: %1$s

# MetadataQuerierByFileImpl — spacePartitionStartPos > spacePartitionEndPos
error.read.metadata_querier_illegal_arg = 'spacePartitionStartPos' should not be larger than 'spacePartitionEndPos'.

# ExpressionOptimizer — unsupported IExpression type in binary expression
error.read.expression_unsupported_binary_type = unsupported IExpression type: %1$s

# ExpressionOptimizer — StackOverflowError
error.read.expression_stack_overflow = StackOverflowError is encountered.

# ExpressionOptimizer — unknown IExpression type
error.read.expression_unknown_type = unknown IExpression type: %1$s

# ExpressionOptimizer — unknown relation in IExpression
error.read.expression_unknown_relation = unknown relation in IExpression:%1$s

# ExpressionOptimizer — size of selectSeries could not be 0
error.read.expression_empty_select_series = size of selectSeries could not be 0

# ExpressionOptimizer — IExpression should contain only SingleSeriesExpression
error.read.expression_unexpected_type = IExpression should contains only SingleSeriesExpression but other type is found:%1$s

# ExpressionOptimizer — unrecognized QueryFilterOperatorType
error.read.expression_unrecognized_operator = unrecognized QueryFilterOperatorType :%1$s

# ValueFilter — unsupported data type (7 satisfy methods, 1 key; arg = class name)
error.read.value_filter_unsupported_type = Unsupported data type for value filter: %1$s

# ValueFilter — getTimeRanges not supported
error.read.value_filter_no_time_ranges = Value filter does not support getTimeRanges()

# Not filter — contains NOT (4 sites, 1 key; appended with filter.toString())
error.read.filter_contains_not = This predicate contains a not! Did you forget to run this predicate through PredicateRemoveNotRewriter? %1$s

# Filter.deserialize — unsupported operator type
error.read.filter_unsupported_operator = Unsupported operator type:%1$s

# TimeFilterOperators.In — set must not be null
error.read.filter_timein_set_null = set must not be null!

# ExtractTimeFilterOperators — unexpected extract field (2 sites)
error.read.extract_unexpected_field = Unexpected extract field: %1$s

# ValueFilterApi — unsupported data type (14 sites, 1 key)
error.read.filter_api_unsupported_type = Unsupported data type: %1$s

# TagFilterBuilder — column is not a tag column
error.read.tag_not_a_tag_column = Column '%1$s' is not a tag column

# TimeGenerator.getValues — OR node present
error.read.time_generator_or_get_values = getValues() method should not be invoked when there is OR operator in where clause

# TimeGenerator.getValues — path not in where clause
error.read.time_generator_path_not_found_values = getValues() method should not be invoked by non-existent path in where clause

# TimeGenerator.getValue — OR node present
error.read.time_generator_or_get_value = getValue() method should not be invoked when there is OR operator in where clause

# TimeGenerator.getValue — path not in where clause
error.read.time_generator_path_not_found_value = getValue() method should not be invoked by non-existent path in where clause

# TimeGenerator.construct — unsupported ExpressionType
error.read.time_generator_unsupported_expression = Unsupported ExpressionType when construct OperatorNode: %1$s

# AndNode / OrNode / LeafNode — no more data (3 sites)
error.read.node_no_more_data = no more data

# AbstractResultSet — column name not found
error.read.result_set_column_not_found = Can't find columnName %1$s from result set

# AbstractResultSet — field is null
error.read.result_set_null_field = Field in columnIndex %1$s is null

# AbstractResultSet — column index out of bound
error.read.result_set_index_out_of_bound = column index %1$s out of bound

# DataSetWithoutTimeGenerator — unsupported data type
error.read.dataset_unsupported_type = UnSupported%1$s

# SingleDeviceTsBlockReader — unsupported data type (3 sites, same key)
error.read.block_reader_unsupported_type = Unsupported data type: %1$s

# TableQueryExecutor — unsupported ordering
error.read.table_query_unsupported_ordering = Unsupported ordering: %1$s

# TableQueryExecutor — no column exception
error.read.table_query_no_column = No column: %1$s

# TsFileTreeReaderBuilder — file must be set
error.read.tree_reader_file_required = file must be set before build()

# TsFileReaderBuilder — file must be non-null and non-directory
error.read.reader_builder_file_non_null = The file must be a non-null and non-directory File.

# --- read LOG messages ---

# TsFileRestorableReader — file has no correct tail magic
log.read.file_repair = File {} has no correct tail magic, try to repair...

# LocalTsFileInput — error getting file size
log.read.local_input_size_error = Error happened while getting {} size

# LocalTsFileInput — error getting current position
log.read.local_input_position_error = Error happened while getting {} current position

# LocalTsFileInput — error changing position
log.read.local_input_position_change_error = Error happened while changing {} position to {}

# LocalTsFileInput — ClosedByInterruptException on read (2 sites, 1 key)
log.read.local_input_interrupted = Current thread is interrupted by another thread when it is blocked in an I/O operation upon a channel.

# LocalTsFileInput — error reading from current position
log.read.local_input_read_current_error = Error happened while reading {} from current position

# LocalTsFileInput — error reading from position
log.read.local_input_read_position_error = Error happened while reading {} from position {}

# LocalTsFileInput — error closing
log.read.local_input_close_error = Error happened while closing {}

# TsFileSequenceReader — reading file metadata error
log.read.sequence_reader_file_metadata_error = Something error happened while reading file metadata of file {}

# TsFileSequenceReader — deserializing TimeseriesMetadata error (multiple sites, same key)
log.read.sequence_reader_tsm_deserialize_error = Something error happened while deserializing TimeseriesMetadata of file {}

# TsFileSequenceReader — deserializing MetadataIndexNode error (constant METADATA_INDEX_NODE_DESERIALIZE_ERROR, 8 sites)
log.read.sequence_reader_metadata_index_node_error = Something error happened while deserializing MetadataIndexNode of file {}

# TsFileSequenceReader — reading chunk header error (2 sites, 1 key)
log.read.sequence_reader_chunk_header_error = Exception {} happened while reading chunk header of {}

# TsFileSequenceReader — reading chunk error (3 sites, 1 key)
log.read.sequence_reader_chunk_error = Exception {} happened while reading chunk of {}

# TsFileSequenceReader — reading page header error
log.read.sequence_reader_page_header_error = Exception {} happened while reading page header of {}

# TsFileSequenceReader — reading data error
log.read.sequence_reader_data_error = Exception {} happened while reading data of {}

# TsFileSequenceReader — getting all paths error
log.read.sequence_reader_paths_error = Something error happened while getting all paths of file {}

# TsFileSequenceReader — generating MetadataIndex error (2 sites, 1 key)
log.read.sequence_reader_metadata_index_error = Something error happened while generating MetadataIndex of file {}

# TsFileSequenceReader — deserializing MetadataIndex error (2 sites, 1 key; different from MetadataIndexNode constant)
log.read.sequence_reader_deserialize_metadata_error = Something error happened while deserializing MetadataIndex of file {}

# TsFileSequenceReader.selfCheck — cannot proceed warning
log.read.sequence_reader_self_check_warn = TsFile {} self-check cannot proceed at position {} recovered, because : {}

# TsFileSequenceReader.selfCheckWithInfo — file length info
log.read.sequence_reader_file_length = file length: {}

# TsFileSequenceReader.selfCheckWithInfo — fast check error
log.read.sequence_reader_fast_check_error = Error occurred while fast checking TsFile.

# TsFileSequenceReader.selfCheckWithInfo — statistics check error
log.read.sequence_reader_stats_check_error = Error occurred while checking the statistics of chunk and its pages

# TsFileSequenceReader — collecting offset ranges error
log.read.sequence_reader_collect_offset_error = Error occurred while collecting offset ranges of measurement nodes of file {}

# TsFileSequenceReader.TimeseriesMetadataIterator — cannot read timeseries metadata
log.read.sequence_reader_tsm_warn = Cannot read timeseries metadata from {},

# TsFileLastReader — cannot read timeseries metadata from file (2 sites, 1 key)
log.read.last_reader_tsm_error = Cannot read timeseries metadata from {}

# TsFileLastReader — error while reading timeseries metadata (async)
log.read.last_reader_tsm_meta_error = Error while reading timeseries metadata

# DeviceOrderedTsBlockReader — failed to construct reader
log.read.block_reader_construct_error = Failed to construct reader for {}

# SingleDeviceTsBlockReader — cannot fill measurements
log.read.block_reader_fill_measurements_error = Cannot fill measurements

# TableResultSet — failed to close tsBlockReader
log.read.table_result_set_close_error = Failed to close tsBlockReader

# DeviceMetaIterator — failed to load device meta data
log.read.device_meta_iterator_error = Failed to load device meta data

# DeviceTableModelReader — close file reader exception
log.read.v4_close_reader_error = Meet exception when close file reader:

# === encoding ===

# --- encoder error messages ---

# Encoder — method not supported (8 sites, 1 key per type; parameterized on method name and class)
error.encoding.encoder_method_not_supported = Method encode %1$s is not supported by Encoder

# FloatEncoder / FloatDecoder — data type not supported (3+3 sites; same English text)
error.encoding.float_encoder_unsupported_type = data type %1$s is not supported by FloatEncoder

# FloatDecoder — encoding not supported
error.encoding.float_decoder_unsupported_encoding = %1$s encoding is not supported by FloatDecoder

# FloatEncoder — encoding not supported
error.encoding.float_encoder_unsupported_encoding = %1$s encoding is not supported by FloatEncoder

# PlainEncoder — BigDecimal not supported
error.encoding.plain_encoder_bigdecimal_unsupported = tsfile-encoding PlainEncoder: current version does not support BigDecimal value encoding

# RleEncoder/RleDecoder — getClass().getName() sites (8 RleEncoder throws; skip — data-only)

# RleDecoder — method not supported (8 sites, 1 key; note typo "supproted" preserved for backward compat)
error.encoding.rle_decoder_method_not_supported = Method %1$s is not supproted by RleDecoder

# RleDecoder — unknown encoding mode
error.encoding.rle_decoder_unknown_mode = tsfile-encoding IntRleDecoder: unknown encoding mode %1$s

# RleDecoder — bitPackedGroupCount < 1
error.encoding.rle_decoder_bit_packed_group_count = tsfile-encoding IntRleDecoder: bitPackedGroupCount %1$d, smaller than 1

# IntRleDecoder / LongRleDecoder — not a valid mode
error.encoding.rle_decoder_invalid_mode_int = tsfile-encoding IntRleDecoder: not a valid mode %1$s
error.encoding.rle_decoder_invalid_mode_long = tsfile-encoding LongRleDecoder: not a valid mode %1$s

# BitmapDecoder — method not supported (7 sites, 1 key)
error.encoding.bitmap_decoder_method_not_supported = Method %1$s is not supported by BitmapDecoder

# FloatDecoder — method not supported (5 sites, 1 key)
error.encoding.float_decoder_method_not_supported = Method %1$s is not supported by FloatDecoder

# PlainDecoder — BigDecimal not supported
error.encoding.plain_decoder_bigdecimal_unsupported = Method readBigDecimal is not supported by PlainDecoder

# Decoder — method not supported (8 sites, 1 key)
error.encoding.decoder_method_not_supported = Method %1$s is not supported by Decoder

# Decoder.getDecoderByType — encoding+type combination not found (many sites, 1 key using ERROR_MSG)
error.encoding.decoder_not_found = Decoder not found: %1$s , DataType is : %2$s

# GorillaDecoderV1 — reading from empty buffer
error.encoding.gorilla_empty_buffer = Reading from empty buffer

# CamelDecoder — no more data
error.encoding.camel_no_more_data = No more data to decode

# CamelDecoder — unexpected empty block
error.encoding.camel_unexpected_empty_block = Unexpected empty block

# FloatSprintzDecoder / IntSprintzDecoder / DoubleSprintzDecoder / LongSprintzDecoder — unsupported predictive method (4 sites, 1 key)
error.encoding.sprintz_unsupported_predict_method = Sprintz predictive method {} is not supported.

# FloatSprintzEncoder / IntSprintzEncoder / DoubleSprintzEncoder / LongSprintzEncoder — unsupported predictive method (4 sites, 1 key)
error.encoding.sprintz_encoder_unsupported_predict_method = Config: Predict Method {} of SprintzEncoder is not supported.

# TSEncodingBuilder — unsupported encoding type
error.encoding.ts_encoding_builder_unsupported = Unsupported encoding: %1$s

# TSEncodingBuilder — data type not supported (many sites using ERROR_MSG pattern, 1 key)
error.encoding.ts_encoding_builder_unsupported_type = %1$s doesn't support data type: %2$s

# --- encoder LOG messages ---

# DeltaBinaryEncoder / RegularDataEncoder — flush data to stream failed (2 sites, 1 key)
log.encoding.flush_data_failed = flush data to stream failed!

# DoubleSprintzEncoder — encoding error
log.encoding.sprintz_double_encode_error = Error occured when encoding INT32 Type value with with Sprintz

# FloatSprintzEncoder — encoding error
log.encoding.sprintz_float_encode_error = Error occured when encoding Float Type value with with Sprintz

# IntSprintzEncoder — encoding error
log.encoding.sprintz_int_encode_error = Error occured when encoding INT32 Type value with with Sprintz

# LongSprintzEncoder — encoding error
log.encoding.sprintz_long_encode_error = Error occured when encoding INT64 Type value with with Sprintz

# DictionaryEncoder — flush error
log.encoding.dictionary_encoder_flush_error = tsfile-encoding DictionaryEncoder: error occurs when flushing

# PlainEncoder — encode Binary error
log.encoding.plain_encoder_binary_error = tsfile-encoding PlainEncoder: error occurs when encode Binary value {}

# RleEncoder — flush rle run error (context-carrying message)
log.encoding.rle_flush_rle_run_error = tsfile-encoding RleEncoder : error occurs when writing nums to OutputStram when flushing left nums. numBufferedValues {}, repeatCount {}, bitPackedGroupCount{}, isBitPackRun {}, isBitWidthSaved {}

# RleEncoder — write full rle run debug
log.encoding.rle_write_full_rle_run = tsfile-encoding RleEncoder : write full rle run to stream

# RleEncoder — writing full rle run error
log.encoding.rle_full_rle_run_error =  error occurs when writing full rle run to OutputStram when repeatCount = {}.numBufferedValues {}, repeatCount {}, bitPackedGroupCount{}, isBitPackRun {}, isBitWidthSaved {}

# RleEncoder — writing num error when repeatCount > min
log.encoding.rle_write_num_error = tsfile-encoding RleEncoder : error occurs when writing num to OutputStram when repeatCount > {}.numBufferedValues {}, repeatCount {}, bitPackedGroupCount{}, isBitPackRun {}, isBitWidthSaved {}

# --- decoder LOG messages ---

# SinglePrecisionDecoderV1 — cannot read first float
log.encoding.single_precision_v1_first_float_error = SinglePrecisionDecoderV1 cannot read first float number

# SinglePrecisionDecoderV1 — cannot read following float
log.encoding.single_precision_v1_following_float_error = SinglePrecisionDecoderV1 cannot read following float number

# DoublePrecisionDecoderV1 — cannot read first double
log.encoding.double_precision_v1_first_double_error = DoublePrecisionDecoderV1 cannot read first double number

# DoublePrecisionDecoderV1 — cannot read following double
log.encoding.double_precision_v1_following_double_error = DoublePrecisionDecoderV1 cannot read following double number

# GorillaDecoderV1 — fill buffer failed
log.encoding.gorilla_fill_buffer_failed = Failed to fill a new buffer, because there is no byte to read

# IntRleDecoder — reading error
log.encoding.int_rle_decoder_read_error = tsfile-encoding IntRleDecoder: error occurs when reading all encoding number, length is {}, bit width is {}

# LongRleDecoder — reading error (same text but different logger)
log.encoding.long_rle_decoder_read_error = tsfile-encoding IntRleDecoder: error occurs when reading all encoding number, length is {}, bit width is {}

# DictionaryDecoder — decoding error
log.encoding.dictionary_decoder_error = tsfile-decoding DictionaryDecoder: error occurs when decoding

# FloatSprintzDecoder / IntSprintzDecoder / DoubleSprintzDecoder / LongSprintzDecoder — readInt error (4 sites, 1 key)
log.encoding.sprintz_decoder_read_error = Error occured when readInt with Sprintz Decoder.

# TSEncodingBuilder — max string length negative value warning
log.encoding.ts_encoding_max_string_length_negative = cannot set max string length to negative value, replaced with default value:{}

# TSEncodingBuilder — max point number bad format warning
log.encoding.ts_encoding_max_point_number_format = The format of max point number {} is not correct. Using default float precision.

# TSEncodingBuilder — max point number negative value warning
log.encoding.ts_encoding_max_point_number_negative = cannot set max point number to negative value, replaced with default value:{}

# IntZigzagEncoder — constructor debug
log.encoding.int_zigzag_encoder_init = tsfile-encoding IntZigzagEncoder: int zigzag encoder

# LongZigzagEncoder — constructor debug
log.encoding.long_zigzag_encoder_init = tsfile-encoding LongZigzagEncoder: long zigzag encoder

# BitmapEncoder — constructor debug
log.encoding.bitmap_encoder_init = tsfile-encoding BitmapEncoder: init bitmap encoder

# IntZigzagDecoder — constructor debug
log.encoding.int_zigzag_decoder_init = tsfile-decoding IntZigzagDecoder: int zigzag decoder

# LongZigzagDecoder — constructor debug
log.encoding.long_zigzag_decoder_init = tsfile-encoding LongZigzagDecoder: long zigzag decoder

# BitmapDecoder — constructor debug
log.encoding.bitmap_decoder_init = tsfile-encoding BitmapDecoder: init bitmap decoder

# BitmapDecoder — page data debug (2 args: number, byteArrayLength)
log.encoding.bitmap_decoder_page_data = tsfile-encoding BitmapDecoder: number {} in current page, byte length {}

# FloatDecoder — init decoder debug (6 keys for 6 branches)
log.encoding.float_decoder_init_int_rle = tsfile-encoding FloatDecoder: init decoder using int-rle and float
log.encoding.float_decoder_init_long_rle = tsfile-encoding FloatDecoder: init decoder using long-rle and double
log.encoding.float_decoder_init_int_delta = tsfile-encoding FloatDecoder: init decoder using int-delta and float
log.encoding.float_decoder_init_long_delta = tsfile-encoding FloatDecoder: init decoder using long-delta and double
log.encoding.float_decoder_init_int_rlbe = tsfile-encoding FloatDecoder: init decoder using int-rlbe and float
log.encoding.float_decoder_init_long_rlbe = tsfile-encoding FloatDecoder: init decoder using long-rlbe and double

# === file ===

# MetaMarker — unexpected marker byte
error.file.unexpected_marker = Unexpected marker %1$s

# AbstractAlignedChunkMetadata — unsupported getNewType/setNewType (2 sites, 1 key)
error.file.aligned_chunk_metadata_new_type_unsupported = AlignedChunkMetadata doesn't support setNewType method

# AbstractAlignedChunkMetadata — serializeTo not supported
error.file.aligned_chunk_metadata_serialize_unsupported = VectorChunkMetadata doesn't support serial method

# MetadataIndexConstructor — utility class guard
error.file.utility_class = Utility class

# TsFileMetadata — encryptType missing for encryptLevel 1 or 2 (2 sites, 1 key with level arg)
error.file.tsfile_metadata_no_encrypt_type = TsfileMetadata lack of encryptType while encryptLevel is %1$s

# TsFileMetadata — encryptKey missing for encryptLevel 1 or 2 (2 sites, 1 key with level arg)
error.file.tsfile_metadata_no_encrypt_key = TsfileMetadata lack of encryptKey while encryptLevel is %1$s

# TsFileMetadata — encryptKey null/empty for encryptLevel 1 or 2 (2 sites, 1 key with level arg)
error.file.tsfile_metadata_null_encrypt_key = TsfileMetadata null encryptKey while encryptLevel is %1$s

# TsFileMetadata — unsupported encryptLevel
error.file.tsfile_metadata_unsupported_encrypt_level = Unsupported encryptLevel: %1$s

# TableSchema — duplicate column name (4 sites, 1 key)
error.file.table_schema_duplicate_column = Each column name in the table should be unique(case insensitive).

# ColumnSchemaBuilder — name must be non-empty
error.file.column_schema_builder_name_empty = Column name must be a non empty string

# ColumnSchemaBuilder — name must be set before building
error.file.column_schema_builder_name_not_set = Column name must be set before building

# ColumnSchemaBuilder — data type must be set before building
error.file.column_schema_builder_type_not_set = Column data type must be set before building

# StringArrayDeviceID — all segments are null
error.file.device_id_all_segments_null = All segments are null

# Statistics — unsupported stat operation (many sites across subclasses; args: type name, op name)
error.file.stats_unsupported = %1$s statistics does not support: %2$s

# --- file LOG messages ---

# IDeviceID — using default inefficient serialized size implementation
log.file.device_id_default_serialized_size = Using default inefficient implementation of serialized size by {}

# IDeviceID — failed to serialize device ID
log.file.device_id_serialize_failed = Failed to serialize device ID: {}

# Statistics — statistics classes mismatched, no merge
log.file.stats_classes_mismatched = Statistics classes mismatched,no merge: {} v.s. {}

# === external ===

# ArrayUtils.remove — index out of bounds
error.external.array_index_out_of_bounds = Index: %1$s, Length: %2$s

# ArrayUtils.addAll — incompatible array types
error.external.array_incompatible_types = Cannot store %1$s in an array of %2$s

# Validate.isTrue() — default false expression
error.external.validate_expression_false = The validated expression is false

# Validate.isTrue(boolean, String, long) — formatted message with long value
# (caller passes String.format'd message; key used as wrapper for the pattern arg itself)
error.external.validate_size_too_large = Request %1$,d exceeds maximum %2$,d

# IOUtils.toByteArray — cannot read more than max bytes
error.external.io_cannot_read_max_bytes = Cannot read more than %1$,d into a byte array

# IOUtils.toByteArray — size must be non-negative
error.external.io_size_non_negative = Size must be equal or greater than zero: %1$s

# IOUtils.toByteArray — unexpected read size
error.external.io_unexpected_read_size = Unexpected read size, current: %1$s, expected: %2$s

# IOUtils.toString — null input stream supplier
error.external.io_null_input = input

# FileUtils.requireDirectoryExists — not a directory
error.external.file_not_a_directory = Parameter '%1$s' is not a directory: '%2$s'

# FileUtils.requireDirectoryExists — directory does not exist
error.external.file_directory_not_exist = Directory '%1$s' does not exist.

# FileUtils.listFiles — I/O error listing directory
error.external.file_list_io_error = Unknown I/O error listing contents of directory: %1$s

# FileUtils.forceDelete — cannot delete file
error.external.file_cannot_delete = Cannot delete file: %1$s

# FileUtils.forceDelete — file does not exist
error.external.file_not_exist = File does not exist: %1$s

# FileUtils.moveFile — failed to delete original after copy
error.external.file_move_delete_original = Failed to delete original file '%1$s' after copy to '%2$s'

# FileUtils.checkFileExists — not a file
error.external.file_param_not_a_file = Parameter '%1$s' is not a file: %2$s

# FileUtils.checkFileExists — source does not exist
error.external.file_source_not_exist = Source '%1$s' does not exist

# FileUtils.requireAbsent — file already exists
error.external.file_already_exists = File element in parameter '%1$s' already exists: '%2$s'

# FileUtils.copyFile — cannot set file time
error.external.file_cannot_set_time = Cannot set the file time.

# FileUtils.requireCanonicalPathsNotEquals — canonical paths equal
error.external.file_canonical_paths_equal = File canonical paths are equal: '%1$s' (file1='%2$s', file2='%3$s')

# FileUtils.mkdirs — cannot create directory
error.external.file_cannot_create_directory = Cannot create directory '%1$s'.

# FileUtils.validateMoveParameters — source does not exist (same key as checkFileExists for source)
# (reuses error.external.file_source_not_exist)

# FileUtils.requireExistsChecked — file system element does not exist
error.external.file_element_not_exist = File system element for parameter '%1$s' does not exist: '%2$s'

# FileUtils.requireDirectory — not a directory (same pattern as requireDirectoryExists)
# (reuses error.external.file_not_a_directory)

# FileUtils.moveDirectory — cannot move to subdirectory of itself
error.external.file_move_to_subdirectory = Cannot move directory: %1$s to a subdirectory of itself: %2$s

# FileUtils.moveDirectory — failed to delete original directory after copy
error.external.file_move_delete_directory = Failed to delete original directory '%1$s' after copy to '%2$s'

# FileUtils.requireCanWrite — file is not writable
error.external.file_not_writable = File parameter '%1$s is not writable: '%2$s'

# FilenameUtils.requireNonNullChars — null character in path
error.external.filename_null_char = Null character present in file/path name. There are no known legitimate use cases for such data, but several injection attacks may use it

# FilenameUtils.indexOfExtension — NTFS ADS separator in file name
error.external.filename_ntfs_ads_forbidden = NTFS ADS separator (':') in file name is forbidden.

# FilenameUtils.flipSeparator — invalid separator character
error.external.filename_invalid_separator = %1$s

# PathUtils.setReadOnly — DOS or POSIX not available
error.external.path_file_ops_not_available = DOS or POSIX file operations not available for '%1$s', linkOptions %2$s

# PathUtils.deleteFile — is a directory, not a file
error.external.path_is_directory = %1$s

# PathUtils.deleteFile — I/O error
error.external.path_set_readonly_io_error = DOS or POSIX file operations not available for '%1$s', linkOptions %2$s

# ReaderInputStream.checkMinBufferSize — buffer too small
error.external.reader_input_stream_buffer_too_small = Buffer size %1$,d must be at least %2$s for a CharsetEncoder %3$s.

# ReaderInputStream.read — index out of bounds
error.external.reader_input_stream_index_out_of_bounds = Array size=%1$s, offset=%2$s, length=%3$s

# UnsynchronizedByteArrayInputStream — length cannot be negative
error.external.ubais_length_negative = length cannot be negative

# UnsynchronizedByteArrayInputStream — offset cannot be negative
error.external.ubais_offset_negative = offset cannot be negative

# UnsynchronizedByteArrayInputStream.skip — skipping backward not supported
error.external.ubais_skip_backward = Skipping backward is not supported

# UnsynchronizedByteArrayOutputStream — negative initial size
error.external.ubaos_negative_initial_size = Negative initial size: %1$s

# UnsynchronizedByteArrayOutputStream.write — offset/length out of bounds
error.external.ubaos_offset_length_out_of_bounds = offset=%1$,d, length=%2$,d

# ByteArrayOutputStream — negative initial size (same as UBAOS)
# (reuses error.external.ubaos_negative_initial_size)

# WriterOutputStream — UTF-16 IBM JDK broken support
error.external.writer_output_stream_utf16_ibm = UTF-16 requested when running on an IBM JDK with broken UTF-16 support. Please find a JDK that supports UTF-16 if you intend to use UF-16 with WriterOutputStream

# WriterOutputStream.processInput — unexpected coder result
error.external.writer_output_stream_unexpected_coder = Unexpected coder result

# AbstractOrigin.getFile — not supported
error.external.abstract_origin_get_file = %1$s#getFile() for %2$s origin %3$s

# AbstractOrigin.getPath — not supported
error.external.abstract_origin_get_path = %1$s#getPath() for %2$s origin %3$s

# AbstractStreamBuilder.throwIae — request exceeds maximum
error.external.stream_builder_request_exceeds_max = Request %1$,d exceeds maximum %2$,d

# AbstractOriginSupplier.checkOrigin — origin is null
error.external.origin_null = origin == null

# AbstractEmptyMapIterator — iterator contains no elements (3 operations: setValue, getKey, getValue)
error.external.empty_map_iterator_no_elements = Iterator contains no elements

# AbstractEmptyIterator — iterator contains no elements (3 operations: remove, next, previous)
error.external.empty_iterator_no_elements = Iterator contains no elements

# AbstractLinkedMap — map is empty (first/last)
error.external.linked_map_empty = Map is empty

# AbstractLinkedMap — index less than zero
error.external.linked_map_index_negative = Index %1$s is less than zero

# AbstractLinkedMap — index invalid for size
error.external.linked_map_index_invalid = Index %1$s is invalid for size %2$s

# AbstractHashedMap — initial capacity negative
error.external.hashed_map_capacity_negative = Initial capacity must be a non negative number

# AbstractHashedMap — load factor not positive
error.external.hashed_map_load_factor_invalid = Load factor must be greater than 0

# AbstractHashedMap constants — iterator state errors (6 constants → 6 keys)
error.external.map_no_next_entry = No next() entry in the iteration
error.external.map_no_previous_entry = No previous() entry in the iteration
error.external.map_remove_invalid = remove() can only be called once after next()
error.external.map_getkey_invalid = getKey() can only be called after next() and before remove()
error.external.map_getvalue_invalid = getValue() can only be called after next() and before remove()
error.external.map_setvalue_invalid = setValue() can only be called after next() and before remove()

# LRUMap — max size constraint
error.external.lrumap_max_size_positive = LRUMap max size must be greater than 0

# LRUMap — initial size vs max size constraint (note: typo "greather" preserved for behaviour parity)
error.external.lrumap_initial_exceeds_max = LRUMap initial size must not be greather than max size

# LRUMap.moveToMRU — entry.before is null
error.external.lrumap_entry_before_null = Entry.before is null. This should not occur if your keys are immutable, and you have used synchronization properly.

# LRUMap.moveToMRU — cannot move header to MRU
error.external.lrumap_cannot_move_header = Can't move header to MRU This should not occur if your keys are immutable, and you have used synchronization properly.

# LRUMap.addMapping — entry.after is null (scanUntilRemovable path)
error.external.lrumap_entry_after_null = Entry.after=null, header.after=%1$s header.before=%2$s key=%3$s value=%4$s size=%5$s maxSize=%6$s This should not occur if your keys are immutable, and you have used synchronization properly.

# LRUMap.addMapping — reuse is null
error.external.lrumap_reuse_null = reuse=null, header.after=%1$s header.before=%2$s key=%3$s value=%4$s size=%5$s maxSize=%6$s This should not occur if your keys are immutable, and you have used synchronization properly.

# LRUMap.reuseMapping — loop is null (entry not found)
error.external.lrumap_loop_null = Entry.next=null, data[removeIndex]=%1$s previous=%2$s key=%3$s value=%4$s size=%5$s maxSize=%6$s This should not occur if your keys are immutable, and you have used synchronization properly.

# LRUMap.reuseMapping — NullPointerException
error.external.lrumap_npe = NPE, entry=%1$s entryIsHeader=%2$s key=%3$s value=%4$s size=%5$s maxSize=%6$s This should not occur if your keys are immutable, and you have used synchronization properly.

# ComparatorChain.checkChainIntegrity — must contain at least one comparator
error.external.comparator_chain_empty = ComparatorChains must contain at least one Comparator

# === encrypt ===

# IEncryptor.getEncryptor — class not found (class name arg)
error.encrypt.encryptor_class_not_found = Get encryptor class failed, class not found: %1$s

# IEncryptor.getEncryptor — no constructor (class name arg)
error.encrypt.encryptor_no_constructor = Get constructor for encryptor failed: %1$s

# IEncryptor.getEncryptor — instantiation failed (class name arg)
error.encrypt.encryptor_instantiation_failed = New encryptor instance failed: %1$s

# IDecryptor.getDecryptor — class not found (class name arg)
error.encrypt.decryptor_class_not_found = Get decryptor class failed, class not found: %1$s

# IDecryptor.getDecryptor — no constructor (class name arg)
error.encrypt.decryptor_no_constructor = Get constructor for decryptor failed: %1$s

# IDecryptor.getDecryptor — instantiation failed (class name arg)
error.encrypt.decryptor_instantiation_failed = New decryptor instance failed: %1$s

# EncryptUtils.getEncryptKeyFromToken — key derivation failed
error.encrypt.key_derivation_failed = Error deriving key from token

# EncryptUtils.deriveKeyInternal — dkLen not positive (value arg)
error.encrypt.dklen_not_positive = main key's dkLen must be positive integer: %1$s

# EncryptUtils.deriveKeyInternal — dkLen too long (value arg)
error.encrypt.dklen_too_long = main key's dkLen is too long: %1$s

# EncryptUtils.getNormalKeyStr / generateEncryptParameter — SHA-256 not found
error.encrypt.sha256_not_found = SHA-256 algorithm not found while using SHA-256 to generate data key

# EncryptUtils.getEncrypt — class not found (encryptType arg)
error.encrypt.encrypt_class_not_found = Get encryptor class failed: %1$s

# EncryptUtils.getEncrypt — no constructor (encryptType arg)
error.encrypt.encrypt_no_constructor = Get constructor for encryptor failed: %1$s

# EncryptUtils.getEncrypt — instantiation failed (encryptType arg)
error.encrypt.encrypt_instantiation_failed = New encryptor instance failed: %1$s

# === compress ===

# ICompressor.getCompressor / IUnCompressor.getUnCompressor — null type
error.compress.type_not_supported_null = NULL

# ICompressor.getCompressor / IUnCompressor.getUnCompressor — unsupported type (name arg)
error.compress.type_not_supported = %1$s

# NoCompressor — compress not supported (3 method variants, 1 key)
error.compress.no_compressor_not_supported = No Compressor does not support compression function

# NoUnCompressor — uncompress ByteBuffer not supported
error.compress.no_uncompressor_not_supported = NoUnCompressor does not support this method.

# LZ4UnCompressor / GZIPUnCompressor / LZMA2UnCompressor — getUncompressedLength not supported (6 sites, 1 key)
error.compress.get_uncompress_length_unsupported = unsupported get uncompress length

# --- compress LOG messages ---

# SnappyUnCompressor — uncompress input byte error (2 sites, 1 key)
log.compress.snappy_uncompress_error = tsfile-compression SnappyUnCompressor: errors occurs when uncompress input byte

# LZ4UnCompressor — uncompress input byte error (3 sites, 1 key)
log.compress.lz4_uncompress_error = tsfile-compression LZ4UnCompressor: errors occurs when uncompress input byte

# === fileSystem ===

# HDFSOutputFactory / OSFileOutputFactory — init error: get input class
log.fs.hdfs_output_factory_init_error = Failed to get HDFSInput in Hadoop file system. Please check your dependency of Hadoop module.
log.fs.os_output_factory_init_error = Failed to get OSInput in object storage. Please check your dependency of object storage module.

# HDFSOutputFactory / OSFileOutputFactory — getTsFileOutput error (path arg)
log.fs.hdfs_output_factory_get_error = Failed to get TsFile output of file: {}. Please check your dependency of Hadoop module.
log.fs.os_output_factory_get_error = Failed to get TsFile output of file: {}. Please check your dependency of object storage module.

# LocalFSOutputFactory — getTsFileOutput error (path arg)
log.fs.local_output_factory_get_error = Failed to get TsFile output of file: {},

# HDFSFactory — init error
log.fs.hdfs_factory_init_error = Failed to get Hadoop file system. Please check your dependency of Hadoop module.

# OSFSFactory — init error
log.fs.os_factory_init_error = Failed to get object storage. Please check your dependency of object storage module.

# HDFSFactory.getFileWithParent — get file error (path arg)
log.fs.hdfs_factory_get_file_with_parent_error = Failed to get file: {}. Please check your dependency of Hadoop module.

# HDFSFactory.getFile(String) — get file error (path arg)
log.fs.hdfs_factory_get_file_error = Failed to get file: {}. Please check your dependency of Hadoop module.

# HDFSFactory.getFile(String, String) — get file error (path arg)
log.fs.hdfs_factory_get_file2_error = Failed to get file: {}. Please check your dependency of Hadoop module.

# HDFSFactory.getFile(File, String) — get file error (path arg)
log.fs.hdfs_factory_get_file3_error = Failed to get file: {}. Please check your dependency of Hadoop module.

# HDFSFactory.getFile(URI) — get file error (uri arg)
log.fs.hdfs_factory_get_file_uri_error = Failed to get file: {}. Please check your dependency of Hadoop module.

# HDFSFactory.getBufferedReader — error (path arg)
log.fs.hdfs_factory_get_reader_error = Failed to get buffered reader for {}. Please check your dependency of Hadoop module.

# HDFSFactory.getBufferedWriter — error (path arg)
log.fs.hdfs_factory_get_writer_error = Failed to get buffered writer for {}. Please check your dependency of Hadoop module.

# HDFSFactory.getBufferedInputStream — error (path arg)
log.fs.hdfs_factory_get_input_stream_error = Failed to get buffered input stream for {}. Please check your dependency of Hadoop module.

# HDFSFactory.getBufferedOutputStream — error (path arg)
log.fs.hdfs_factory_get_output_stream_error = Failed to get buffered output stream for {}. Please check your dependency of Hadoop module.

# HDFSFactory.listFilesBySuffix — error (folder, suffix args)
log.fs.hdfs_factory_list_suffix_error = Failed to list files in {} with SUFFIX {}. Please check your dependency of Hadoop module.

# HDFSFactory.listFilesByPrefix — error (folder, prefix args)
log.fs.hdfs_factory_list_prefix_error = Failed to list files in {} with PREFIX {}. Please check your dependency of Hadoop module.

# OSFSFactory.getFileWithParent — error (path arg)
log.fs.os_factory_get_file_with_parent_error = Failed to get file: {}. Please check your dependency of object storage module.

# OSFSFactory.getFile(String) — error (path arg)  [note: message says Hadoop module — matching original]
log.fs.os_factory_get_file_error = Failed to get file: {}. Please check your dependency of Hadoop module.

# OSFSFactory.getFile(String, String) — error (path arg) [matches original]
log.fs.os_factory_get_file2_error = Failed to get file: {}. Please check your dependency of Hadoop module.

# OSFSFactory.getFile(File, String) — error (path arg) [matches original]
log.fs.os_factory_get_file3_error = Failed to get file: {}. Please check your dependency of Hadoop module.

# OSFSFactory.getFile(URI) — error (uri arg)
log.fs.os_factory_get_file_uri_error = Failed to get file: {}. Please check your dependency of object storage module.

# OSFSFactory.getBufferedReader — error (path arg)
log.fs.os_factory_get_reader_error = Failed to get buffered reader for {}. Please check your dependency of object storage module.

# OSFSFactory.getBufferedWriter — error (path arg)
log.fs.os_factory_get_writer_error = Failed to get buffered writer for {}. Please check your dependency of object storage module.

# OSFSFactory.getBufferedInputStream — error (path arg)
log.fs.os_factory_get_input_stream_error = Failed to get buffered input stream for {}. Please check your dependency of object storage module.

# OSFSFactory.getBufferedOutputStream — error (path arg)
log.fs.os_factory_get_output_stream_error = Failed to get buffered output stream for {}. Please check your dependency of object storage module.

# OSFSFactory.listFilesBySuffix — error (folder, suffix args)
log.fs.os_factory_list_suffix_error = Failed to list files in {} with SUFFIX {}. Please check your dependency of object storage module.

# OSFSFactory.listFilesByPrefix — error (folder, prefix args)
log.fs.os_factory_list_prefix_error = Failed to list files in {} with PREFIX {}. Please check your dependency of object storage module.

# OSFSFactory.copyFile — unsupported copy direction (srcType, destType args)
error.fs.os_factory_copy_unsupported = Doesn't support copy file from %1$s to %2$s.

# LocalFSFactory — buffered reader/writer/stream errors (4 sites, 4 keys)
log.fs.local_factory_get_reader_error = Failed to get buffered reader for {}.
log.fs.local_factory_get_writer_error = Failed to get buffered writer for {}.
log.fs.local_factory_get_input_stream_error = Failed to get buffered input stream for {}.
log.fs.local_factory_get_output_stream_error = Failed to get buffered output stream for {}.

# HybridFSFactory.moveFile — unsupported cross-type move (srcType, destType args)
error.fs.hybrid_factory_move_unsupported = Doesn't support move file from %1$s to %2$s.

# HybridFSFactory.copyFile — unsupported cross-type copy (srcType, destType args)
error.fs.hybrid_factory_copy_unsupported = Doesn't support move file from %1$s to %2$s.

# OSFileInputFactory / HDFSInputFactory — init error
log.fs.os_input_factory_init_error = Failed to get OSInput in object storage. Please check your dependency of object storage module.
log.fs.hdfs_input_factory_init_error = Failed to get HDFSInput in Hadoop file system. Please check your dependency of Hadoop module.

# OSFileInputFactory.getTsFileInput — error (path arg)
error.fs.os_input_factory_get_error = Failed to get TsFile input of file: %1$s. Please check your dependency of object storage module.

# HDFSInputFactory.getTsFileInput — error (path arg)
error.fs.hdfs_input_factory_get_error = Failed to get TsFile input of file: %1$s. Please check your dependency of Hadoop module.

# FSUtils — load file system class error (fsType name arg)
log.fs.fsutils_load_class_error = Failed to get {} file system. Please check your dependency of {} module.

# === utils ===

# NoSyncBufferedOutputStream — buffer size <= 0
error.utils.buffer_size_not_positive = Buffer size <= 0

# NoSyncBufferedInputStream — stream closed (2 sites, 1 key)
error.utils.stream_closed = Stream closed

# NoSyncBufferedInputStream — buffer size <= 0
error.utils.buffer_size_not_positive_input = Buffer size <= 0

# NoSyncBufferedInputStream — index out of bounds
error.utils.index_out_of_bounds_read = Index out of bounds

# NoSyncBufferedInputStream — resetting to invalid mark
error.utils.reset_invalid_mark = Resetting to invalid mark

# PublicBAOS — index out of bounds
error.utils.public_baos_index_out_of_bounds = Index out of bounds

# Loader — null input object
error.utils.loader_null_input = Input object cannot be null

# FilterDeserialize — unsupported operator type (type arg)
error.utils.filter_unsupported_operator_type = Unsupported operator type:%1$s

# FilterDeserialize — unsupported class serialize id (used for 15 methods via constant; id arg)
error.utils.filter_unsupported_class_id = Unsupported class serialize id:%1$s

# ReadWriteForEncodingUtils — too many bytes for bit width (paddedByteNum arg; 4 sites, 1 key)
error.utils.too_long_byte_format = Too long byte number %1$s

# BytesUtils — invalid input: desc.length - offset < 4 (intToBytes float variant)
error.utils.bytes_desc_offset_too_short = Invalid input: desc.length - offset < 4

# BytesUtils — invalid input: i > 0xFFFF
error.utils.bytes_int_too_large = Invalid input: %1$s > 0xFFFF

# BytesUtils — invalid input: ret.length != 2
error.utils.bytes_ret_length_not_two = Invalid input: ret.length != 2

# BytesUtils — row count too large
error.utils.bytes_row_count_too_large = Row count is larger than Integer.MAX_VALUE

# BytesUtils — invalid input: bytes.length - offset < 4
error.utils.bytes_offset_too_short_4 = Invalid input: bytes.length - offset < 4

# BytesUtils — invalid input: b.length != 4
error.utils.bytes_b_length_not_four = Invalid input: b.length != 4

# BytesUtils — invalid input: b.length - offset < 4
error.utils.bytes_b_offset_too_short_4 = Invalid input: b.length - offset < 4

# BytesUtils — invalid input: bytes.length - offset < 8
error.utils.bytes_offset_too_short_8 = Invalid input: bytes.length - offset < 8

# BytesUtils — invalid input: b.length != 1
error.utils.bytes_b_length_not_one = Invalid input: b.length != 1

# BytesUtils — invalid input: b.length - offset < 1
error.utils.bytes_b_offset_too_short_1 = Invalid input: b.length - offset < 1

# BytesUtils — invalid input: byteNum.length - offset < len
error.utils.bytes_bytenum_offset_too_short = Invalid input: byteNum.length - offset < len

# BytesUtils.intToBytes — cannot convert int to byte array (3 args: srcNum, pos, width)
log.utils.bytes_int_to_bytes_error = tsfile-common BytesUtils: cannot convert an integer {} to a byte array, pos {}, width {}

# BytesUtils.longToBytes — cannot convert long to byte array (3 args: srcNum, pos, width)
log.utils.bytes_long_to_bytes_error = tsfile-common BytesUtils: cannot convert a long {} to a byte array, pos {}, width {}

# TsFileSketchTool — cannot load file (filename arg)
error.utils.sketch_tool_cannot_load = Cannot load file %1$s because the file has crashed.

# ReadWriteIOUtils — short read (expectedLen, readLen args; 7 sites use String.format directly)
error.utils.rwio_short_read = Intend to read %1$d bytes but %2$d are actually returned

# ReadWriteIOUtils — string list must not be null (2 sites, 1 key)
error.utils.rwio_stringlist_null = stringList must not be null!

# ReadWriteIOUtils — set must not be null (2 sites via SET_NOT_NULL_MSG constant)
error.utils.rwio_set_null = set must not be null!

# StringContainer — index out of bounds (getSubString; 1 site)
error.utils.string_container_index_out_of_bounds = Index: %1$d, Real Index: %2$d, Size: %3$d

# StringContainer — start index out of bounds (getSubStringContainer)
error.utils.string_container_start_index_out_of_bounds = start Index: %1$d, Real start Index: %2$d, Size: %3$d

# StringContainer — end index out of bounds (getSubStringContainer)
error.utils.string_container_end_index_out_of_bounds = end Index: %1$d, Real end Index: %2$d, Size: %3$d

# TimeDuration — unsupported operation
error.utils.time_duration_unsupported = unsupported operation

# DateUtils — date expression null or empty (2 sites, 1 key)
error.utils.date_expression_null_or_empty = Date expression is null or empty.

# DateUtils — invalid date format (parse exception)
error.utils.date_invalid_format = Invalid date format. Please use YYYY-MM-DD format.

# DateUtils — year out of range (dateExpression arg)
error.utils.date_year_out_of_range = Year must be between 1000 and 9999.

# DateUtils — invalid date format (parseIntToLocalDate)
error.utils.date_invalid_format_local = Invalid date format.

# TsFileGeneratorUtils — invalid input (value arg)
error.utils.generator_invalid_input = Invalid input: %1$s

# FSUtils — failed to get file system (fsType name arg — used with string concat in original)
log.fs.fsutils_class_not_found = Failed to get {} file system. Please check your dependency of {} module.

# === tools ===

# ArrowSourceReader / ParquetSourceReader / CsvSourceReader — inferSchema called in schema mode
error.tools.infer_schema_not_in_auto_mode = inferSchema() is only available in auto mode

# CsvSourceReader.inferSchema — inferSchema called in schema mode (more descriptive variant)
error.tools.infer_schema_not_in_auto_mode_csv = inferSchema() is only available in auto mode (no schema provided)

# ArrowSourceReader / ParquetSourceReader / CsvSourceReader — failed to infer schema
error.tools.infer_schema_failed = Failed to infer schema from: %1$s

# CsvSourceReader.inferSchema — CSV file is empty
error.tools.csv_file_empty = CSV file is empty: %1$s

# CsvSourceReader.validateColumnCount — column count mismatch
error.tools.csv_column_count_mismatch = Column count mismatch: schema defines %1$s columns but CSV header has %2$s columns in %3$s

# TimeConverter — time value cannot be null (2 sites, 1 key)
error.tools.time_value_null = Time value cannot be null

# TimeConverter.toNanos / fromNanos — unknown precision (2 sites, 1 key)
error.tools.unknown_precision = Unknown precision: %1$s

# TsFileTool.parseBlockSize — unsupported block_size unit
error.tools.block_size_unsupported_unit = block_size only supports units of K, M, G, or numbers

# SchemaParser.parseIdColumns — invalid id_columns format
error.tools.schema_id_columns_invalid = The data format of id_columns is incorrect

# SchemaParser.parseCsvColumns — invalid csv_columns format
error.tools.schema_csv_columns_invalid = The data format of csv_columns is incorrect

# SchemaParser — has_header not true/false
error.tools.schema_has_header_invalid = The data format of has_header is incorrect

# SchemaParser.validateParams — time_precision not supported
error.tools.schema_time_precision_unsupported = The time_precision parameter only supports ms,us,ns

# SchemaParser.validateParams — separator invalid
error.tools.schema_separator_invalid = separator must be ",", tab, or ";"

# SchemaParser.validateParams — table_name required
error.tools.schema_table_name_required = table_name is required

# SchemaParser.validateParams — id_columns required
error.tools.schema_id_columns_required = id_columns is required

# SchemaParser.validateParams — csv_columns required
error.tools.schema_csv_columns_required = csv_columns is required

# SchemaParser.validateParams — time_column required
error.tools.schema_time_column_required = time_column is required

# SchemaParser.validateParams — time_column value not in csv_columns
error.tools.schema_time_column_not_in_csv = The value %1$s of time_column is not in csv_columns

# SchemaParser.validateParams — id_columns value not in csv_columns
error.tools.schema_id_column_not_in_csv = The value %1$s of id_columns is not in csv_columns

# ImportSchemaParser — has_header not true/false
error.tools.import_has_header_invalid = has_header must be true or false

# ImportSchemaParser.parseTagColumn — invalid tag_columns format
error.tools.import_tag_columns_invalid = Invalid tag_columns format: %1$s

# ImportSchemaParser.parseSourceColumn — invalid source_columns format
error.tools.import_source_columns_invalid = Invalid source_columns format: %1$s

# ImportSchemaParser.resolveDataType — unknown data type
error.tools.import_unknown_data_type = Unknown data type: %1$s

# ImportSchemaParser.validate — time_precision not supported
error.tools.import_time_precision_unsupported = time_precision must be ms, us, ns, or s

# ImportSchemaParser.validate — separator invalid
error.tools.import_separator_invalid = separator must be ",", tab, or ";"

# ImportSchemaParser.validate — table_name required
error.tools.import_table_name_required = table_name is required

# ImportSchemaParser.validate — time_column required
error.tools.import_time_column_required = time_column is required

# ImportSchemaParser.validate — source_columns required
error.tools.import_source_columns_required = source_columns is required

# ImportSchemaParser.validate — time_column not found in source_columns
error.tools.import_time_column_not_found = time_column '%1$s' not found in source_columns

# ImportSchemaParser.validate — tag_columns entry not found in source_columns
error.tools.import_tag_column_not_found = tag_columns '%1$s' not found in source_columns

# AutoSchemaInferer.detectTimeColumn — no time column found
error.tools.auto_no_time_column = No time column found. Auto mode requires exactly one column named 'time' or 'TIME'.

# AutoSchemaInferer.detectTimeColumn — ambiguous time column
error.tools.auto_ambiguous_time_column = Ambiguous time column: found multiple columns matching 'time'/'TIME': %1$s

# TabletBuilder.resolveTimeColumnIndex — time column not found in source columns
error.tools.tablet_time_column_not_found = Time column '%1$s' not found in source columns

# DateTimeUtils.convertDatetimeStrToLong — failed to convert timestamp (depth >= 2)
error.tools.datetime_convert_failed = Failed to convert %1$s to millisecond, zone offset is %2$s, please input like 2011-12-03T10:15:30 or 2011-12-03T10:15:30+01:00

# DateTimeUtils.convertDatetimeStrToLong — time-region not supported
error.tools.datetime_time_region_unsupported = %1$s with [time-region] at end is not supported now, please input like 2011-12-03T10:15:30 or 2011-12-03T10:15:30+01:00

# --- tools LOG messages ---

# ImportExecutor — failed to create output directory
log.tools.executor_create_dir_failed = Failed to create output directory: %1$s

# ImportExecutor — failed to write chunk
log.tools.executor_write_chunk_failed = Failed to write chunk %1$s to %2$s

# ImportExecutor — no data read from source
log.tools.executor_no_data = No data read from source: %1$s

# ImportExecutor — failed to rename indexed file to single name
log.tools.executor_rename_failed = Failed to rename %1$s to %2$s

# ImportExecutor.writeTsFile — failed to write file
log.tools.executor_write_file_failed = Failed to write file: %1$s

# ImportExecutor.writeTsFile — failed to close file
log.tools.executor_close_file_failed = Failed to close file: %1$s

# ImportExecutor.deleteFile — failed to delete file
log.tools.executor_delete_failed = Failed to delete: %1$s

# TsFileTool — failed to parse schema file
log.tools.tool_parse_schema_failed = Failed to parse schema file: %1$s

# TsFileTool — failed to await termination
log.tools.tool_await_termination_failed = Failed to await termination

# TsFileTool — directory or file has completed execution
log.tools.tool_execution_completed = The %1$s directory or file has completed execution

# TsFileTool — failed to process file
log.tools.tool_process_file_failed = Failed to process file: %1$s

# TsFileTool — file successfully generated
log.tools.tool_file_generated = %1$s.tsfile successfully generated

# TsFileTool — failed to copy file
log.tools.tool_copy_file_failed = Failed to copy file: %1$s

# TsFileTool — error parsing command line options
log.tools.tool_parse_cli_error = Error parsing command line options

# TsFileTool.validateParams — source is required
log.tools.tool_source_required = Missing required parameters. --source/-s is required

# TsFileTool.validateParams — target is required
log.tools.tool_target_required = Missing required parameters. --target/-t is required

# TsFileTool.validateParams — source does not exist
log.tools.tool_source_not_exist = %1$s directory or file does not exist.

# TsFileTool.validateParams — schema file does not exist
log.tools.tool_schema_not_exist = %1$s schema file does not exist.

# TsFileTool.validateParams — invalid thread number
log.tools.tool_invalid_thread_num = Invalid thread number. Thread number must be greater than 0.

# ArrowSourceReader — error reading Arrow file
log.tools.arrow_read_error = Error reading Arrow file: %1$s

# ArrowSourceReader — error closing Arrow reader
log.tools.arrow_close_reader_error = Error closing Arrow reader

# ArrowSourceReader — error closing FileInputStream
log.tools.arrow_close_stream_error = Error closing FileInputStream

# ParquetSourceReader — error reading Parquet file
log.tools.parquet_read_error = Error reading Parquet file: %1$s

# ParquetSourceReader — error closing Parquet reader
log.tools.parquet_close_reader_error = Error closing Parquet reader

# CsvSourceReader — error reading CSV file
log.tools.csv_read_error = Error reading CSV file: %1$s

# CsvSourceReader — error closing CSV reader
log.tools.csv_close_reader_error = Error closing CSV reader
