Skip to content

Commit d11b0d1

Browse files
authored
bug(rdb load): Rdb loader tasks stop running on failure dragonflydb#567 (dragonflydb#576)
Signed-off-by: adi_holden <[email protected]> Signed-off-by: adi_holden <[email protected]>
1 parent c18cb82 commit d11b0d1

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

src/server/rdb_load.cc

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1696,6 +1696,8 @@ error_code RdbLoader::Load(io::Source* src) {
16961696
settings.now = mstime();
16971697
size_t keys_loaded = 0;
16981698

1699+
auto cleanup = absl::Cleanup([&] { FinishLoad(start, &keys_loaded); });
1700+
16991701
while (!stop_early_.load(memory_order_relaxed)) {
17001702
/* Read type. */
17011703
SET_OR_RETURN(FetchType(), type);
@@ -1814,6 +1816,10 @@ error_code RdbLoader::Load(io::Source* src) {
18141816
/* Verify the checksum if RDB version is >= 5 */
18151817
RETURN_ON_ERR(VerifyChecksum());
18161818

1819+
return kOk;
1820+
}
1821+
1822+
void RdbLoader::FinishLoad(absl::Time start_time, size_t* keys_loaded) {
18171823
fibers_ext::BlockingCounter bc(shard_set->size());
18181824
for (unsigned i = 0; i < shard_set->size(); ++i) {
18191825
// Flush the remaining items.
@@ -1824,11 +1830,9 @@ error_code RdbLoader::Load(io::Source* src) {
18241830
}
18251831
bc.Wait(); // wait for sentinels to report.
18261832

1827-
absl::Duration dur = absl::Now() - start;
1833+
absl::Duration dur = absl::Now() - start_time;
18281834
load_time_ = double(absl::ToInt64Milliseconds(dur)) / 1000;
1829-
keys_loaded_ = keys_loaded;
1830-
1831-
return kOk;
1835+
keys_loaded_ = *keys_loaded;
18321836
}
18331837

18341838
std::error_code RdbLoaderBase::EnsureRead(size_t min_sz) {

src/server/rdb_load.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ class RdbLoader : protected RdbLoaderBase {
202202

203203
std::error_code VerifyChecksum();
204204
void FlushShardAsync(ShardId sid);
205+
void FinishLoad(absl::Time start_time, size_t* keys_loaded);
205206

206207
void LoadItemsBuffer(DbIndex db_ind, const ItemsBuf& ib);
207208

0 commit comments

Comments
 (0)