Fix corrupted transaction payload handling during start-up of the database engine. (#6731)
Markos Fountoulakis committed
Aug 28, 2019 at 17:52 UTC
7fe3db883aa183ae9927942211d95e1fc04b2531
1 file changed
+6
-3
database/engine/journalfile.c
+6
-3
@@ -269,7 +269,6 @@ static void restore_extent_metadata(struct rrdengine_instance *ctx, struct rrden
269
extent = mallocz(sizeof(*extent) + count * sizeof(extent->pages[0]));
270
extent->offset = jf_metric_data->extent_offset;
271
extent->size = jf_metric_data->extent_size;
272
- extent->number_of_pages = count;
272
extent->datafile = journalfile->datafile;
273
extent->next = NULL;
274
@@ -282,7 +281,6 @@ static void restore_extent_metadata(struct rrdengine_instance *ctx, struct rrden
281
error("Unknown page type encountered.");
282
continue;
283
}
285
- ++valid_pages;
284
temp_id = (uuid_t *)jf_metric_data->descr[i].uuid;
285
286
uv_rwlock_rdlock(&pg_cache->metrics_index.lock);
@@ -308,11 +306,16 @@ static void restore_extent_metadata(struct rrdengine_instance *ctx, struct rrden
306
descr->end_time = jf_metric_data->descr[i].end_time;
307
descr->id = &page_index->id;
308
descr->extent = extent;
311
- extent->pages[i] = descr;
309
+ extent->pages[valid_pages++] = descr;
310
pg_cache_insert(ctx, page_index, descr);
311
}
312
+
313
+ extent->number_of_pages = valid_pages;
314
+
315
if (likely(valid_pages))
316
df_extent_insert(extent);
317
+ else
318
+ freez(extent);
319
}
320
321
/*