diff options
author | ilnaz <ilnaz@ydb.tech> | 2023-02-21 20:42:42 +0300 |
---|---|---|
committer | ilnaz <ilnaz@ydb.tech> | 2023-02-21 20:42:42 +0300 |
commit | 8a0803765349a801ec69038f281df1792835b682 (patch) | |
tree | 294a1c8bc2e971d85baec112ee758993b477b4d6 | |
parent | b9c4293655400ae51f8bfb44a8aa7320ea916e32 (diff) | |
download | ydb-8a0803765349a801ec69038f281df1792835b682.tar.gz |
Handle empty tables, little refactoring
-rw-r--r-- | ydb/library/backup/backup.cpp | 57 |
1 files changed, 27 insertions, 30 deletions
diff --git a/ydb/library/backup/backup.cpp b/ydb/library/backup/backup.cpp index 676cc831ee..38b0bbbaa8 100644 --- a/ydb/library/backup/backup.cpp +++ b/ydb/library/backup/backup.cpp @@ -230,16 +230,27 @@ TMaybe<TValue> ProcessResultSet(TStringStream& ss, return lastReadPK; } -TMaybe<TValue> TryReadTable(TDriver driver, const NTable::TTableDescription& desc, const TString& fullTablePath, - const TFsPath& folderPath, TMaybe<TValue> lastWrittenPK, ui32 *fileCounter) { - NTable::TTableClient client(driver); +static void Flush(TFile& tmpFile, TStringStream& ss, TMaybe<TValue>& lastWrittenPK, const TMaybe<TValue>& lastReadPK) { + tmpFile.Write(ss.Data(), ss.Size()); + ss.Clear(); + if (lastReadPK) { + lastWrittenPK = *lastReadPK; + } +} +static void CloseAndRename(TFile& tmpFile, const TFsPath& fileName) { + tmpFile.Close(); - TMaybe<NTable::TTablePartIterator> iter; - auto readTableJob = [fullTablePath, &lastWrittenPK, &iter] - (NTable::TSession session) -> TStatus { + LOG_DEBUG("New file with data is created, fileName# " << fileName); + TFsPath(tmpFile.GetName()).RenameTo(fileName); +} +TMaybe<TValue> TryReadTable(TDriver driver, const NTable::TTableDescription& desc, const TString& fullTablePath, + const TFsPath& folderPath, TMaybe<TValue> lastWrittenPK, ui32 *fileCounter) +{ + TMaybe<NTable::TTablePartIterator> iter; + auto readTableJob = [fullTablePath, &lastWrittenPK, &iter](NTable::TSession session) -> TStatus { NTable::TReadTableSettings settings; if (lastWrittenPK) { settings.From(NTable::TKeyBound::Exclusive(*lastWrittenPK)); @@ -251,10 +262,10 @@ TMaybe<TValue> TryReadTable(TDriver driver, const NTable::TTableDescription& des VerifyStatus(result, TStringBuilder() << "ReadTable result was not successfull," " path: " << fullTablePath.Quote()); return result; - }; - TStatus status = client.RetryOperationSync(readTableJob, NYdb::NTable::TRetryOperationSettings().MaxRetries(1)); + NTable::TTableClient client(driver); + TStatus status = client.RetryOperationSync(readTableJob, NTable::TRetryOperationSettings().MaxRetries(1)); VerifyStatus(status); { @@ -268,8 +279,7 @@ TMaybe<TValue> TryReadTable(TDriver driver, const NTable::TTableDescription& des " error msg: " << resultSetStreamPart.GetIssues().ToString()); TResultSet resultSetCurrent = resultSetStreamPart.ExtractPart(); - TFsPath tmpFileName = folderPath.Child(INCOMPLETE_DATA_FILE_NAME); - TFile tmpFile = TFile(tmpFileName, CreateAlways | WrOnly); + auto tmpFile = TFile(folderPath.Child(INCOMPLETE_DATA_FILE_NAME), CreateAlways | WrOnly); TStringStream ss; ss.Reserve(IO_BUFFER_SIZE); @@ -292,13 +302,9 @@ TMaybe<TValue> TryReadTable(TDriver driver, const NTable::TTableDescription& des break; } else { if (ss.Data()) { - tmpFile.Write(ss.Data(), ss.Size()); - lastWrittenPK = *lastReadPK; - ss.Clear(); + Flush(tmpFile, ss, lastWrittenPK, lastReadPK); } - tmpFile.Close(); - LOG_DEBUG("New file with data is created, fileName# " << CreateDataFileName(*fileCounter)); - tmpFileName.RenameTo(folderPath.Child(CreateDataFileName((*fileCounter)++))); + CloseAndRename(tmpFile, folderPath.Child(CreateDataFileName((*fileCounter)++))); return lastWrittenPK; } } @@ -307,24 +313,15 @@ TMaybe<TValue> TryReadTable(TDriver driver, const NTable::TTableDescription& des break; } if (ss.Size() > IO_BUFFER_SIZE) { - tmpFile.Write(ss.Data(), ss.Size()); - lastWrittenPK = *lastReadPK; - ss.Clear(); + Flush(tmpFile, ss, lastWrittenPK, lastReadPK); } if (tmpFile.GetLength() > FILE_SPLIT_THRESHOLD) { - tmpFile.Close(); - LOG_DEBUG("New file with data is created, fileName# " << CreateDataFileName(*fileCounter)); - tmpFileName.RenameTo(folderPath.Child(CreateDataFileName((*fileCounter)++))); - tmpFileName = folderPath.Child(INCOMPLETE_DATA_FILE_NAME); - tmpFile = TFile(tmpFileName, CreateAlways | WrOnly); + CloseAndRename(tmpFile, folderPath.Child(CreateDataFileName((*fileCounter)++))); + tmpFile = TFile(folderPath.Child(INCOMPLETE_DATA_FILE_NAME), CreateAlways | WrOnly); } } - tmpFile.Write(ss.Data(), ss.Size()); - lastWrittenPK = *lastReadPK; - ss.Clear(); - tmpFile.Close(); - LOG_DEBUG("New file with data is created, fileName# " << CreateDataFileName(*fileCounter)); - tmpFileName.RenameTo(folderPath.Child(CreateDataFileName((*fileCounter)++))); + Flush(tmpFile, ss, lastWrittenPK, lastReadPK); + CloseAndRename(tmpFile, folderPath.Child(CreateDataFileName((*fileCounter)++))); } return {}; |