mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-28 12:40:49 +00:00
Added WriteMode enumeration
This commit is contained in:
parent
764b506fd5
commit
3f1832355f
@ -93,7 +93,7 @@ void FileChecker::updateImpl(const String & file_path)
|
||||
void FileChecker::save() const
|
||||
{
|
||||
{
|
||||
std::unique_ptr<WriteBuffer> out = disk->write(tmp_files_info_path);
|
||||
std::unique_ptr<WriteBuffer> out = disk->writeFile(tmp_files_info_path);
|
||||
|
||||
/// So complex JSON structure - for compatibility with the old format.
|
||||
writeCString("{\"yandex\":{", *out);
|
||||
@ -125,7 +125,7 @@ void FileChecker::load(Map & local_map, const String & path) const
|
||||
if (!disk->exists(path))
|
||||
return;
|
||||
|
||||
std::unique_ptr<ReadBuffer> in = disk->read(path);
|
||||
std::unique_ptr<ReadBuffer> in = disk->readFile(path);
|
||||
WriteBufferFromOwnString out;
|
||||
|
||||
/// The JSON library does not support whitespace. We delete them. Inefficient.
|
||||
|
@ -134,19 +134,15 @@ void DiskLocal::copyFile(const String & from_path, const String & to_path)
|
||||
Poco::File(disk_path + from_path).copyTo(disk_path + to_path);
|
||||
}
|
||||
|
||||
std::unique_ptr<ReadBuffer> DiskLocal::read(const String & path, size_t buf_size) const
|
||||
std::unique_ptr<ReadBuffer> DiskLocal::readFile(const String & path, size_t buf_size) const
|
||||
{
|
||||
return std::make_unique<ReadBufferFromFile>(disk_path + path, buf_size);
|
||||
}
|
||||
|
||||
std::unique_ptr<WriteBuffer> DiskLocal::write(const String & path, size_t buf_size)
|
||||
std::unique_ptr<WriteBuffer> DiskLocal::writeFile(const String & path, size_t buf_size, WriteMode mode)
|
||||
{
|
||||
return std::make_unique<WriteBufferFromFile>(disk_path + path, buf_size);
|
||||
}
|
||||
|
||||
std::unique_ptr<WriteBuffer> DiskLocal::append(const String & path, size_t buf_size)
|
||||
{
|
||||
return std::make_unique<WriteBufferFromFile>(disk_path + path, buf_size, O_APPEND | O_CREAT | O_WRONLY);
|
||||
int flags = (mode == WriteMode::Append) ? (O_APPEND | O_CREAT | O_WRONLY) : -1;
|
||||
return std::make_unique<WriteBufferFromFile>(disk_path + path, buf_size, flags);
|
||||
}
|
||||
|
||||
|
||||
|
@ -65,11 +65,9 @@ public:
|
||||
|
||||
void copyFile(const String & from_path, const String & to_path) override;
|
||||
|
||||
std::unique_ptr<ReadBuffer> read(const String & path, size_t buf_size = DBMS_DEFAULT_BUFFER_SIZE) const override;
|
||||
std::unique_ptr<ReadBuffer> readFile(const String & path, size_t buf_size = DBMS_DEFAULT_BUFFER_SIZE) const override;
|
||||
|
||||
std::unique_ptr<WriteBuffer> write(const String & path, size_t buf_size = DBMS_DEFAULT_BUFFER_SIZE) override;
|
||||
|
||||
std::unique_ptr<WriteBuffer> append(const String & path, size_t buf_size = DBMS_DEFAULT_BUFFER_SIZE) override;
|
||||
std::unique_ptr<WriteBuffer> writeFile(const String & path, size_t buf_size = DBMS_DEFAULT_BUFFER_SIZE, WriteMode mode = WriteMode::Rewrite) override;
|
||||
|
||||
private:
|
||||
bool tryReserve(UInt64 bytes);
|
||||
|
@ -26,6 +26,15 @@ using ReservationPtr = std::unique_ptr<IReservation>;
|
||||
class ReadBuffer;
|
||||
class WriteBuffer;
|
||||
|
||||
/**
|
||||
* Mode of opening a file for write.
|
||||
*/
|
||||
enum class WriteMode
|
||||
{
|
||||
Rewrite,
|
||||
Append
|
||||
};
|
||||
|
||||
/**
|
||||
* Provide interface for reservation.
|
||||
*/
|
||||
@ -106,13 +115,10 @@ public:
|
||||
virtual void copyFile(const String & from_path, const String & to_path) = 0;
|
||||
|
||||
/// Open the file for read and return ReadBuffer object.
|
||||
virtual std::unique_ptr<ReadBuffer> read(const String & path, size_t buf_size = DBMS_DEFAULT_BUFFER_SIZE) const = 0;
|
||||
virtual std::unique_ptr<ReadBuffer> readFile(const String & path, size_t buf_size = DBMS_DEFAULT_BUFFER_SIZE) const = 0;
|
||||
|
||||
/// Open the file for write and return WriteBuffer object.
|
||||
virtual std::unique_ptr<WriteBuffer> write(const String & path, size_t buf_size = DBMS_DEFAULT_BUFFER_SIZE) = 0;
|
||||
|
||||
/// Open the file for write in append mode and return WriteBuffer object.
|
||||
virtual std::unique_ptr<WriteBuffer> append(const String & path, size_t buf_size = DBMS_DEFAULT_BUFFER_SIZE) = 0;
|
||||
virtual std::unique_ptr<WriteBuffer> writeFile(const String & path, size_t buf_size = DBMS_DEFAULT_BUFFER_SIZE, WriteMode mode = WriteMode::Rewrite) = 0;
|
||||
};
|
||||
|
||||
using DiskPtr = std::shared_ptr<IDisk>;
|
||||
|
@ -490,7 +490,7 @@ void StorageLog::loadMarks()
|
||||
for (auto & file : files_by_index)
|
||||
file->second.marks.reserve(marks_count);
|
||||
|
||||
std::unique_ptr<ReadBuffer> marks_rb = disk->read(marks_file_path, 32768);
|
||||
std::unique_ptr<ReadBuffer> marks_rb = disk->readFile(marks_file_path, 32768);
|
||||
while (!marks_rb->eof())
|
||||
{
|
||||
for (size_t i = 0; i < files_by_index.size(); ++i)
|
||||
|
@ -133,10 +133,10 @@ public:
|
||||
explicit StripeLogBlockOutputStream(StorageStripeLog & storage_)
|
||||
: storage(storage_), lock(storage.rwlock),
|
||||
data_out_file(storage.table_path + "data.bin"),
|
||||
data_out_compressed(storage.disk->append(data_out_file)),
|
||||
data_out_compressed(storage.disk->writeFile(data_out_file, DBMS_DEFAULT_BUFFER_SIZE, WriteMode::Append)),
|
||||
data_out(*data_out_compressed, CompressionCodecFactory::instance().getDefaultCodec(), storage.max_compress_block_size),
|
||||
index_out_file(storage.table_path + "index.mrk"),
|
||||
index_out_compressed(storage.disk->append(index_out_file)),
|
||||
index_out_compressed(storage.disk->writeFile(index_out_file, DBMS_DEFAULT_BUFFER_SIZE, WriteMode::Append)),
|
||||
index_out(*index_out_compressed),
|
||||
block_out(data_out, 0, storage.getSampleBlock(), false, &index_out, storage.disk->getFileSize(data_out_file))
|
||||
{
|
||||
|
@ -81,7 +81,7 @@ private:
|
||||
struct Stream
|
||||
{
|
||||
Stream(const DiskPtr & disk, const String & data_path, size_t max_read_buffer_size_)
|
||||
: plain(disk->read(data_path, std::min(max_read_buffer_size_, disk->getFileSize(data_path)))),
|
||||
: plain(disk->readFile(data_path, std::min(max_read_buffer_size_, disk->getFileSize(data_path)))),
|
||||
compressed(*plain)
|
||||
{
|
||||
}
|
||||
@ -134,7 +134,7 @@ private:
|
||||
struct Stream
|
||||
{
|
||||
Stream(const DiskPtr & disk, const String & data_path, CompressionCodecPtr codec, size_t max_compress_block_size) :
|
||||
plain(disk->append(data_path, max_compress_block_size)),
|
||||
plain(disk->writeFile(data_path, max_compress_block_size, WriteMode::Append)),
|
||||
compressed(*plain, std::move(codec), max_compress_block_size)
|
||||
{
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user