From 54ef7755011e34dfddb983e27426bad848e2aedd Mon Sep 17 00:00:00 2001 From: Piotr Jastrzebski Date: Thu, 10 May 2018 10:35:22 +0200 Subject: [PATCH] Pass serialization_header to data_consume_rows_context* This header is needed to parse data for SSTable 3.0 format Signed-off-by: Piotr Jastrzebski --- sstables/data_consume_context.hh | 4 ++-- sstables/row.cc | 5 +++-- sstables/row.hh | 16 ++++++++++++---- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/sstables/data_consume_context.hh b/sstables/data_consume_context.hh index c5af55ba28..63d0f4a8aa 100644 --- a/sstables/data_consume_context.hh +++ b/sstables/data_consume_context.hh @@ -77,10 +77,10 @@ class data_consume_context { shared_sstable _sst; std::unique_ptr _ctx; - // This object can only be constructed by sstable::data_consume_rows() template data_consume_context(shared_sstable sst, Consumer &consumer, input_stream &&input, uint64_t start, uint64_t maxlen) - : _sst(std::move(sst)), _ctx(new DataConsumeRowsContext(consumer, std::move(input), start, maxlen)) + : _sst(std::move(sst)) + , _ctx(new DataConsumeRowsContext(_sst, consumer, std::move(input), start, maxlen)) { } friend class sstable; diff --git a/sstables/row.cc b/sstables/row.cc index 0bd39036eb..154d2bbea3 100644 --- a/sstables/row.cc +++ b/sstables/row.cc @@ -27,9 +27,10 @@ namespace sstables { future<> sstable::data_consume_rows_at_once(row_consumer& consumer, uint64_t start, uint64_t end) { - return data_read(start, end - start, consumer.io_priority()).then([&consumer] + return data_read(start, end - start, consumer.io_priority()).then([this, &consumer] (temporary_buffer buf) { - data_consume_rows_context ctx(consumer, input_stream(), 0, -1); + shared_sstable sst = shared_from_this(); + data_consume_rows_context ctx(sst, consumer, input_stream(), 0, -1); ctx.process(buf); ctx.verify_end_state(); }); diff --git a/sstables/row.hh b/sstables/row.hh index 679386171d..d07096d3d1 100644 --- a/sstables/row.hh +++ b/sstables/row.hh @@ -453,8 +453,9 @@ public: return row_consumer::proceed::yes; } - data_consume_rows_context(row_consumer& consumer, - input_stream && input, uint64_t start, uint64_t maxlen) + data_consume_rows_context(const shared_sstable&, + row_consumer& consumer, + input_stream&& input, uint64_t start, uint64_t maxlen) : continuous_data_consumer(std::move(input), start, maxlen) , _consumer(consumer) { } @@ -514,6 +515,7 @@ private: } _state = state::PARTITION_START; consumer_m& _consumer; + const serialization_header& _header; temporary_buffer _pk; @@ -676,8 +678,14 @@ public: return row_consumer::proceed::yes; } - data_consume_rows_context_m(consumer_m& consumer, input_stream && input, uint64_t start, uint64_t maxlen) - : continuous_data_consumer(std::move(input), start, maxlen), _consumer(consumer) + data_consume_rows_context_m(const shared_sstable& sst, + consumer_m& consumer, + input_stream && input, + uint64_t start, + uint64_t maxlen) + : continuous_data_consumer(std::move(input), start, maxlen) + , _consumer(consumer) + , _header(sst->get_serialization_header()) { } void verify_end_state() {