Added WriteMode enumeration

This commit is contained in:
Alexander Burmak 2019-12-26 17:28:22 +03:00
parent 764b506fd5
commit 3f1832355f
7 changed files with 24 additions and 24 deletions

View File

@ -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.

View File

@ -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);
}

View File

@ -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);

View File

@ -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>;

View File

@ -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)

View File

@ -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))
{

View 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)
{
}