tsfile
tsfile copied to clipboard
CPP. multi-flush error when data is minimal.
When the amount of data written is minimal, multiple flush operations may lead to exceptions during the writing process to the file index.
pass:
TEST_F(TsFileWriterTest, MultiFlush) {
std::string device_path = "device1";
std::string measurement_name = "temperature";
common::TSDataType data_type = common::TSDataType::INT32;
common::TSEncoding encoding = common::TSEncoding::PLAIN;
common::CompressionType compression_type =
common::CompressionType::UNCOMPRESSED;
ASSERT_EQ(tsfile_writer_->register_timeseries(device_path, measurement_name,
data_type, encoding,
compression_type),
E_OK);
for (int i = 1; i < 2; i++) {
TsRecord record(i, device_path);
DataPoint point(measurement_name, i);
record.append_data_point(point);
ASSERT_EQ(tsfile_writer_->write_record(record), E_OK);
}
ASSERT_EQ(tsfile_writer_->flush(), E_OK);
for (int i = 2; i < 10; i++) {
TsRecord record(i, device_path);
DataPoint point(measurement_name, i);
record.append_data_point(point);
ASSERT_EQ(tsfile_writer_->write_record(record), E_OK);
}
ASSERT_EQ(tsfile_writer_->flush(), E_OK);
ASSERT_EQ(tsfile_writer_->close(), E_OK);
}
FAILED
TEST_F(TsFileWriterTest, MultiFlush) {
std::string device_path = "device1";
std::string measurement_name = "temperature";
common::TSDataType data_type = common::TSDataType::INT32;
common::TSEncoding encoding = common::TSEncoding::PLAIN;
common::CompressionType compression_type =
common::CompressionType::UNCOMPRESSED;
ASSERT_EQ(tsfile_writer_->register_timeseries(device_path, measurement_name,
data_type, encoding,
compression_type),
E_OK);
for (int i = 1; i < 2; i++) {
TsRecord record(i, device_path);
DataPoint point(measurement_name, i);
record.append_data_point(point);
ASSERT_EQ(tsfile_writer_->write_record(record), E_OK);
}
ASSERT_EQ(tsfile_writer_->flush(), E_OK);
for (int i = 2; i < 3; i++) {
TsRecord record(i, device_path);
DataPoint point(measurement_name, i);
record.append_data_point(point);
ASSERT_EQ(tsfile_writer_->write_record(record), E_OK);
}
ASSERT_EQ(tsfile_writer_->flush(), E_OK);
ASSERT_EQ(tsfile_writer_->close(), E_OK);
}