[PATCH v1 01/25] SST3: Make sure we call consume_partition_end

58 views
Skip to first unread message

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 21, 2018, 8:42:14 PM9/21/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
From: Piotr Jastrzebski <pi...@scylladb.com>

even when we slice and fast forward to.

Signed-off-by: Piotr Jastrzebski <pi...@scylladb.com>
---
sstables/row.hh | 7 +++++++
1 file changed, 7 insertions(+)

diff --git a/sstables/row.hh b/sstables/row.hh
index 2df580f2c2..5fa3268176 100644
--- a/sstables/row.hh
+++ b/sstables/row.hh
@@ -1290,6 +1290,13 @@ class data_consume_rows_context_m : public data_consumer::continuous_data_consum
{ }

void verify_end_state() {
+ // If reading a partial row (i.e., when we have a clustering row
+ // filter and using a promoted index), we may be in FLAGS or FLAGS_2
+ // state instead of PARTITION_START.
+ if (_state == state::FLAGS || _state == state::FLAGS_2) {
+ _consumer.consume_partition_end();
+ return;
+ }
if (_state != state::PARTITION_START || _prestate != prestate::NONE) {
throw malformed_sstable_exception("end of input, but not end of partition");
}
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 21, 2018, 8:42:14 PM9/21/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
This patchset fixes several issues in SSTables 3.x ('mc') writing and
parsing and extends existing SSTables unit tests to cover the new
format.

The only test enabled temporarily is check_multi_schema because it
turned out that reading SSTables 3.x with a different schema has not
been implemented in full. This will be addressed in a separate patchset.

This patchset depends on the "Support SSTables 3.x in Scylla runtime"
patchset.

GitHub URL: https://github.com/argenet/scylla/tree/projects/sstables-30/unit-tests/v1

Tests: unit {release}

Piotr Jastrzebski (5):
SST3: Make sure we call consume_partition_end
Add position_in_partition_view::as_end_bound_view
Add clustering_ranges_walker::upper_bound
Add mutation_fragment_filter::upper_bound
SST3: Make sure we emit range tombstone when slicing/fft

Vladimir Krivopalov (20):
sstables: Don't write promoted index consisting of a single block in
'mc' format.
sstables: For 'mc' format, use excl_start when split an RT over a row
with a full key.
mutation_fragment: Add range_tombstone_stream::empty() method.
tests: Introduce normalizing_reader helper for SSTables tests.
tests: SSTables 'mc' files for sliced_mutation_reads_test.
tests: Add 'mc' files for test_broken_promoted_index_is_skipped
tests: Add 'mc' files for test_counter_read
tests: Add 'mc' files for large_partition tests (promoted_index_read,
sub_partition_read, sub_partitions_read
tests: Add 'mc' files for test_partition_skipping
tests: Add 'mc' files for test_promoted_index_read
tests: Add 'mc' files for summary_test
tests: Add 'mc' files for test_wrong_counter_shard_order
tests: Add 'mc' files for test_wrong_range_tombstone_order
tests: Fix promoted_index_read to not rely on a specific index length
tests: Fix test_promoted_index_read for 'mc' format by using
normalizing_reader.
tests: Disable check_multi_schema for 'mc' format for the time being.
tests: Disable test_old_format_non_compound_range_tombstone_is_read
for 'mc' format.
tests: Extend reader assertions to check clustering keys made full.
tests: Fix test_wrong_range_tombstone_order for 'mc' format.
tests: Enable existing SSTables tests for 'mc' format.

clustering_ranges_walker.hh | 4 +
mutation_fragment.hh | 1 +
position_in_partition.hh | 5 +
sstables/mp_row_consumer.hh | 21 ++-
sstables/mutation_fragment_filter.hh | 4 +
sstables/row.hh | 7 +
tests/flat_mutation_reader_assertions.hh | 5 +-
tests/normalizing_reader.hh | 118 +++++++++++++++
tests/sstable_test.hh | 3 +-
mutation_fragment.cc | 4 +
sstables/sstables.cc | 2 +-
tests/sstable_3_x_test.cc | 41 +++---
tests/sstable_datafile_test.cc | 136 +++++++++++-------
tests/sstable_test.cc | 2 +-
.../mc-1-big-CompressionInfo.db | Bin 0 -> 51 bytes
.../mc-1-big-Data.db | Bin 0 -> 82 bytes
.../mc-1-big-Digest.crc32 | 1 +
.../mc-1-big-Filter.db | Bin 0 -> 176 bytes
.../mc-1-big-Index.db | Bin 0 -> 8 bytes
.../mc-1-big-Statistics.db | Bin 0 -> 4653 bytes
.../mc-1-big-Summary.db | Bin 0 -> 56 bytes
.../mc-1-big-TOC.txt | 8 ++
.../mc-5-big-CompressionInfo.db | Bin 0 -> 51 bytes
.../mc-5-big-Data.db | Bin 0 -> 146 bytes
.../mc-5-big-Digest.crc32 | 1 +
.../mc-5-big-Filter.db | Bin 0 -> 176 bytes
.../mc-5-big-Index.db | Bin 0 -> 8 bytes
.../mc-5-big-Statistics.db | Bin 0 -> 4712 bytes
.../mc-5-big-Summary.db | Bin 0 -> 56 bytes
.../mc-5-big-TOC.txt | 8 ++
.../mc-3-big-CompressionInfo.db | Bin 0 -> 75 bytes
.../mc-3-big-Data.db | Bin 0 -> 144236 bytes
.../mc-3-big-Digest.crc32 | 1 +
.../mc-3-big-Filter.db | Bin 0 -> 176 bytes
.../mc-3-big-Index.db | Bin 0 -> 106 bytes
.../mc-3-big-Statistics.db | Bin 0 -> 4630 bytes
.../mc-3-big-Summary.db | Bin 0 -> 50 bytes
.../mc-3-big-TOC.txt | 8 ++
.../mc-1-big-CRC.db | Bin 0 -> 8 bytes
.../mc-1-big-Data.db | Bin 0 -> 307 bytes
.../mc-1-big-Digest.crc32 | 1 +
.../mc-1-big-Filter.db | Bin 0 -> 24 bytes
.../mc-1-big-Index.db | Bin 0 -> 85 bytes
.../mc-1-big-Statistics.db | Bin 0 -> 4638 bytes
.../mc-1-big-Summary.db | Bin 0 -> 56 bytes
.../mc-1-big-TOC.txt | 8 ++
.../mc-1-big-CompressionInfo.db | Bin 0 -> 43 bytes
.../mc-1-big-Data.db | Bin 0 -> 83 bytes
.../mc-1-big-Digest.crc32 | 1 +
.../mc-1-big-Filter.db | Bin 0 -> 16 bytes
.../mc-1-big-Index.db | Bin 0 -> 8 bytes
.../mc-1-big-Statistics.db | Bin 0 -> 4731 bytes
.../mc-1-big-Summary.db | Bin 0 -> 56 bytes
.../mc-1-big-TOC.txt | 8 ++
.../mc-1-big-CRC.db | Bin 0 -> 8 bytes
.../mc-1-big-Data.db | Bin 0 -> 190 bytes
.../mc-1-big-Digest.crc32 | 1 +
.../mc-1-big-Filter.db | Bin 0 -> 16 bytes
.../mc-1-big-Index.db | Bin 0 -> 16 bytes
.../mc-1-big-Statistics.db | Bin 0 -> 4768 bytes
.../mc-1-big-Summary.db | Bin 0 -> 56 bytes
.../mc-1-big-TOC.txt | 8 ++
.../mc-1-big-CompressionInfo.db | Bin 0 -> 51 bytes
.../mc-1-big-Data.db | Bin 0 -> 1290 bytes
.../mc-1-big-Digest.crc32 | 1 +
.../mc-1-big-Filter.db | Bin 0 -> 176 bytes
.../mc-1-big-Index.db | Bin 0 -> 1164 bytes
.../mc-1-big-Statistics.db | Bin 0 -> 4922 bytes
.../mc-1-big-Summary.db | Bin 0 -> 72 bytes
.../mc-1-big-TOC.txt | 8 ++
.../mc-2-big-CRC.db | Bin 0 -> 12 bytes
.../mc-2-big-Data.db | Bin 0 -> 4471 bytes
.../mc-2-big-Digest.crc32 | 1 +
.../mc-2-big-Filter.db | Bin 0 -> 176 bytes
.../mc-2-big-Index.db | Bin 0 -> 25 bytes
.../mc-2-big-Statistics.db | Bin 0 -> 4865 bytes
.../mc-2-big-Summary.db | Bin 0 -> 68 bytes
.../mc-2-big-TOC.txt | 8 ++
.../mc-1-big-CompressionInfo.db | Bin 0 -> 43 bytes
.../mc-1-big-Data.db | Bin 0 -> 281 bytes
.../mc-1-big-Digest.crc32 | 1 +
.../mc-1-big-Filter.db | Bin 0 -> 16 bytes
.../mc-1-big-Index.db | Bin 0 -> 8 bytes
.../mc-1-big-Statistics.db | Bin 0 -> 4817 bytes
.../mc-1-big-Summary.db | Bin 0 -> 56 bytes
.../mc-1-big-TOC.txt | 8 ++
86 files changed, 353 insertions(+), 81 deletions(-)
create mode 100644 tests/normalizing_reader.hh
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-CompressionInfo.db
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Data.db
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Digest.crc32
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Filter.db
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Index.db
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Statistics.db
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Summary.db
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-TOC.txt
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-CompressionInfo.db
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Data.db
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Digest.crc32
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Filter.db
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Index.db
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Statistics.db
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Summary.db
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-TOC.txt
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-CRC.db
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CRC.db
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-CRC.db
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Data.db
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Digest.crc32
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Filter.db
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Index.db
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Statistics.db
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Summary.db
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-TOC.txt
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt

--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 21, 2018, 8:42:15 PM9/21/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
From: Piotr Jastrzebski <pi...@scylladb.com>

This will be used in sstables 3.

Signed-off-by: Piotr Jastrzebski <pi...@scylladb.com>
---
position_in_partition.hh | 5 +++++
1 file changed, 5 insertions(+)

diff --git a/position_in_partition.hh b/position_in_partition.hh
index 9716959423..6188cd4749 100644
--- a/position_in_partition.hh
+++ b/position_in_partition.hh
@@ -179,6 +179,11 @@ class position_in_partition_view {
return bound_view(*_ck, _bound_weight < 0 ? bound_kind::incl_start : bound_kind::excl_start);
}

+ bound_view as_end_bound_view() const {
+ assert(_bound_weight != 0);
+ return bound_view(*_ck, _bound_weight < 0 ? bound_kind::excl_end : bound_kind::incl_end);
+ }
+
friend std::ostream& operator<<(std::ostream&, position_in_partition_view);
friend bool no_clustering_row_between(const schema&, position_in_partition_view, position_in_partition_view);
};
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 21, 2018, 8:42:16 PM9/21/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
From: Piotr Jastrzebski <pi...@scylladb.com>

This method returns end of current position range.

Signed-off-by: Piotr Jastrzebski <pi...@scylladb.com>
---
clustering_ranges_walker.hh | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/clustering_ranges_walker.hh b/clustering_ranges_walker.hh
index 3824dab69c..e95d99cb5e 100644
--- a/clustering_ranges_walker.hh
+++ b/clustering_ranges_walker.hh
@@ -200,6 +200,10 @@ class clustering_ranges_walker {
return _current_start;
}

+ position_in_partition_view upper_bound() const {
+ return _current_end;
+ }
+
// When lower_bound() changes, this also does
// Always > 0.
size_t lower_bound_change_counter() const {
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 21, 2018, 8:42:17 PM9/21/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
From: Piotr Jastrzebski <pi...@scylladb.com>

Signed-off-by: Piotr Jastrzebski <pi...@scylladb.com>
---
sstables/mp_row_consumer.hh | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/sstables/mp_row_consumer.hh b/sstables/mp_row_consumer.hh
index eea012c5d0..42cd91a4b0 100644
--- a/sstables/mp_row_consumer.hh
+++ b/sstables/mp_row_consumer.hh
@@ -1220,7 +1220,17 @@ class mp_row_consumer_m : public consumer_m {
virtual proceed consume_partition_end() override {
sstlog.trace("mp_row_consumer_m {}: consume_partition_end()", this);
if (_opened_range_tombstone) {
- throw sstables::malformed_sstable_exception("Unclosed range tombstone.");
+ if (!_mf_filter || _mf_filter->out_of_range()) {
+ throw sstables::malformed_sstable_exception("Unclosed range tombstone.");
+ }
+ auto range_end = _mf_filter->upper_bound();
+ position_in_partition::less_compare less(*_schema);
+ auto start_pos = position_in_partition_view(position_in_partition_view::range_tag_t{},
+ bound_view(_opened_range_tombstone->ck, _opened_range_tombstone->kind));
+ if (!less(range_end, start_pos)) {
+ auto end_bound = range_end.as_end_bound_view();
+ consume_range_tombstone_end(end_bound.prefix(), end_bound.kind(), _opened_range_tombstone->tomb);
+ }
}
_is_mutation_end = true;
_in_progress_row.reset();
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 21, 2018, 8:42:17 PM9/21/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
From: Piotr Jastrzebski <pi...@scylladb.com>

This method returns end of current position range.

Signed-off-by: Piotr Jastrzebski <pi...@scylladb.com>
---
sstables/mutation_fragment_filter.hh | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/sstables/mutation_fragment_filter.hh b/sstables/mutation_fragment_filter.hh
index 9f6f0a6382..d4acbfbc07 100644
--- a/sstables/mutation_fragment_filter.hh
+++ b/sstables/mutation_fragment_filter.hh
@@ -153,6 +153,10 @@ class mutation_fragment_filter {
position_in_partition_view lower_bound() const {
return _walker.lower_bound();
}
+
+ position_in_partition_view upper_bound() const {
+ return _walker.upper_bound();
+ }
};

}; // namespace sstables
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 21, 2018, 8:42:18 PM9/21/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
sstables/sstables.cc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sstables/sstables.cc b/sstables/sstables.cc
index 28e8d89f69..f3afd7b680 100644
--- a/sstables/sstables.cc
+++ b/sstables/sstables.cc
@@ -3366,7 +3366,7 @@ static void write_clustering_prefix(file_writer& writer, bound_kind_m kind,

void sstable_writer_m::write_promoted_index(file_writer& writer) {
static constexpr size_t width_base = 65536;
- if (_pi_write_m.promoted_index.empty()) {
+ if (_pi_write_m.promoted_index.size() < 2) {
return;
}
write_vint(writer, _partition_header_length);
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 21, 2018, 8:42:20 PM9/21/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
This fixes the monotonicity issue as otherwise the range tombstone
emitted after such clustering row has a start position that should be
ordered before that of the row.

Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
sstables/mp_row_consumer.hh | 9 ++++----
tests/sstable_3_x_test.cc | 41 +++++++++++++++++++++----------------
2 files changed, 28 insertions(+), 22 deletions(-)

diff --git a/sstables/mp_row_consumer.hh b/sstables/mp_row_consumer.hh
index 42cd91a4b0..c3ce8cb06e 100644
--- a/sstables/mp_row_consumer.hh
+++ b/sstables/mp_row_consumer.hh
@@ -883,14 +883,15 @@ class mp_row_consumer_m : public consumer_m {
* and the end built from the row position because it also overlaps with query ranges.
*/
auto ck = cr.key();
- auto end_kind = clustering_key::make_full(*_schema, ck) ? bound_kind::excl_end : bound_kind::incl_end;
+ bool was_non_full_key = clustering_key::make_full(*_schema, ck);
+ auto end_kind = was_non_full_key ? bound_kind::excl_end : bound_kind::incl_end;
_reader->push_mutation_fragment(range_tombstone(std::move(_opened_range_tombstone->ck),
_opened_range_tombstone->kind,
ck,
end_kind,
_opened_range_tombstone->tomb));
_opened_range_tombstone->ck = std::move(ck);
- _opened_range_tombstone->kind = bound_kind::incl_start;
+ _opened_range_tombstone->kind = was_non_full_key ? bound_kind::incl_start : bound_kind::excl_start;
}
_reader->push_mutation_fragment(std::move(cr));
break;
@@ -898,9 +899,9 @@ class mp_row_consumer_m : public consumer_m {
if (_opened_range_tombstone) {
// Trim the opened range up to the clustering key of the current row
auto& ck = cr.key();
- clustering_key::make_full(*_schema, ck);
+ bool was_non_full_key = clustering_key::make_full(*_schema, ck);
_opened_range_tombstone->ck = std::move(ck);
- _opened_range_tombstone->kind = bound_kind::incl_start;
+ _opened_range_tombstone->kind = was_non_full_key ? bound_kind::incl_start : bound_kind::excl_start;
}
if (_mf_filter->is_current_range_changed()) {
return proceed::no;
diff --git a/tests/sstable_3_x_test.cc b/tests/sstable_3_x_test.cc
index 5089be5f48..8b73897526 100644
--- a/tests/sstable_3_x_test.cc
+++ b/tests/sstable_3_x_test.cc
@@ -1002,15 +1002,20 @@ SEASTAR_THREAD_TEST_CASE(test_uncompressed_slicing_interleaved_rows_and_rts_read
auto make_tombstone = [] (int64_t ts, int32_t tp) {
return tombstone{api::timestamp_type{ts}, gc_clock::time_point(gc_clock::duration(tp))};
};
- auto make_range_tombstone = [] (clustering_key_prefix start, clustering_key_prefix end, tombstone t) {
- return range_tombstone {
- std::move(start),
- bound_kind::incl_start,
- std::move(end),
- bound_kind::incl_end,
- t};
+ const auto make_range_tombstone_creator = [] (bound_kind start_kind) {
+ return [start_kind] (clustering_key_prefix start, clustering_key_prefix end, tombstone t) {
+ return range_tombstone {
+ std::move(start),
+ start_kind,
+ std::move(end),
+ bound_kind::incl_end,
+ t};
+ };
};

+ const auto make_rt_incl_start = make_range_tombstone_creator(bound_kind::incl_start);
+ const auto make_rt_excl_start = make_range_tombstone_creator(bound_kind::excl_start);
+
auto make_clustering_range = [] (clustering_key_prefix&& start, clustering_key_prefix&& end) {
return query::clustering_range::make(
query::clustering_range::bound(std::move(start), true),
@@ -1040,9 +1045,9 @@ SEASTAR_THREAD_TEST_CASE(test_uncompressed_slicing_interleaved_rows_and_rts_read

for (auto idx : boost::irange(1, 1024 * 128, 5)) {
range_tombstone rt1 =
- make_range_tombstone(to_non_full_ck(idx), to_full_ck(idx + 3, idx + 3), tomb);
+ make_rt_incl_start(to_non_full_ck(idx), to_full_ck(idx + 3, idx + 3), tomb);
range_tombstone rt2 =
- make_range_tombstone(to_full_ck(idx + 3, idx + 3), to_non_full_ck(idx + 4), tomb);
+ make_rt_excl_start(to_full_ck(idx + 3, idx + 3), to_non_full_ck(idx + 4), tomb);

r.produces_range_tombstone(rt1)
.produces_row(to_full_ck(idx + 3, idx + 3), to_expected(idx + 3))
@@ -1067,14 +1072,14 @@ SEASTAR_THREAD_TEST_CASE(test_uncompressed_slicing_interleaved_rows_and_rts_read
auto clustering_range = make_clustering_range(to_non_full_ck(7000), to_non_full_ck(8000));

range_tombstone rt =
- make_range_tombstone(to_full_ck(7459, 7459), to_non_full_ck(7460), tomb);
+ make_rt_excl_start(to_full_ck(7459, 7459), to_non_full_ck(7460), tomb);
r.produces_range_tombstone(rt, {clustering_range});

for (auto idx : boost::irange(7461, 7501, 5)) {
range_tombstone rt1 =
- make_range_tombstone(to_non_full_ck(idx), to_full_ck(idx + 3, idx + 3), tomb);
+ make_rt_incl_start(to_non_full_ck(idx), to_full_ck(idx + 3, idx + 3), tomb);
range_tombstone rt2 =
- make_range_tombstone(to_full_ck(idx + 3, idx + 3), to_non_full_ck(idx + 4), tomb);
+ make_rt_excl_start(to_full_ck(idx + 3, idx + 3), to_non_full_ck(idx + 4), tomb);

r.produces_range_tombstone(rt1, {clustering_range})
.produces_row(to_full_ck(idx + 3, idx + 3), to_expected(idx + 3))
@@ -1098,15 +1103,15 @@ SEASTAR_THREAD_TEST_CASE(test_uncompressed_slicing_interleaved_rows_and_rts_read

auto clustering_range = make_clustering_range(to_non_full_ck(7000), to_non_full_ck(8000));
range_tombstone rt =
- make_range_tombstone(to_full_ck(7459, 7459), to_non_full_ck(7460), tomb);
+ make_rt_excl_start(to_full_ck(7459, 7459), to_non_full_ck(7460), tomb);

r.produces_range_tombstone(rt, {clustering_range});

for (auto idx : boost::irange(7461, 7501, 5)) {
range_tombstone rt1 =
- make_range_tombstone(to_non_full_ck(idx), to_full_ck(idx + 3, idx + 3), tomb);
+ make_rt_incl_start(to_non_full_ck(idx), to_full_ck(idx + 3, idx + 3), tomb);
range_tombstone rt2 =
- make_range_tombstone(to_full_ck(idx + 3, idx + 3), to_non_full_ck(idx + 4), tomb);
+ make_rt_excl_start(to_full_ck(idx + 3, idx + 3), to_non_full_ck(idx + 4), tomb);

r.produces_range_tombstone(rt1, {clustering_range})
.produces_row(to_full_ck(idx + 3, idx + 3), to_expected(idx + 3))
@@ -1133,15 +1138,15 @@ SEASTAR_THREAD_TEST_CASE(test_uncompressed_slicing_interleaved_rows_and_rts_read

auto clustering_range = make_clustering_range(to_non_full_ck(7000), to_non_full_ck(8000));
range_tombstone rt =
- make_range_tombstone(to_full_ck(7469, 7469), to_non_full_ck(7470), tomb);
+ make_rt_excl_start(to_full_ck(7469, 7469), to_non_full_ck(7470), tomb);

r.produces_range_tombstone(rt, {clustering_range});

for (auto idx : boost::irange(7471, 7501, 5)) {
range_tombstone rt1 =
- make_range_tombstone(to_non_full_ck(idx), to_full_ck(idx + 3, idx + 3), tomb);
+ make_rt_incl_start(to_non_full_ck(idx), to_full_ck(idx + 3, idx + 3), tomb);
range_tombstone rt2 =
- make_range_tombstone(to_full_ck(idx + 3, idx + 3), to_non_full_ck(idx + 4), tomb);
+ make_rt_excl_start(to_full_ck(idx + 3, idx + 3), to_non_full_ck(idx + 4), tomb);

r.produces_range_tombstone(rt1, {clustering_range})
.produces_row(to_full_ck(idx + 3, idx + 3), to_expected(idx + 3))
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 21, 2018, 8:42:20 PM9/21/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
The method checks if the underlying range_tombstone_list is empty.

Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
mutation_fragment.hh | 1 +
mutation_fragment.cc | 4 ++++
2 files changed, 5 insertions(+)

diff --git a/mutation_fragment.hh b/mutation_fragment.hh
index 3ebc4b1297..7d31290343 100644
--- a/mutation_fragment.hh
+++ b/mutation_fragment.hh
@@ -595,6 +595,7 @@ class range_tombstone_stream {
}
void apply(const range_tombstone_list&, const query::clustering_range&);
void reset();
+ bool empty() const;
friend std::ostream& operator<<(std::ostream& out, const range_tombstone_stream&);
};

diff --git a/mutation_fragment.cc b/mutation_fragment.cc
index 04c2e871ff..a13bcdf935 100644
--- a/mutation_fragment.cc
+++ b/mutation_fragment.cc
@@ -268,6 +268,10 @@ void range_tombstone_stream::reset() {
_list.clear();
}

+bool range_tombstone_stream::empty() const {
+ return _list.empty();
+}
+
position_range position_range::from_range(const query::clustering_range& range) {
auto bv_range = bound_view::from_range(range);
return {
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 21, 2018, 8:42:21 PM9/21/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
This is a helper flat_mutation_reader that wraps another reader and
splits range tombstones over rows before emitting them.

It is used to produce the same mutation streams for both old (ka/la) and
new (mc) SSTables formats in unit tests.

Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
tests/normalizing_reader.hh | 118 ++++++++++++++++++++++++++++++++++++
1 file changed, 118 insertions(+)
create mode 100644 tests/normalizing_reader.hh

diff --git a/tests/normalizing_reader.hh b/tests/normalizing_reader.hh
new file mode 100644
index 0000000000..766f7bfa42
--- /dev/null
+++ b/tests/normalizing_reader.hh
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 2018 ScyllaDB
+ */
+
+/*
+ * This file is part of Scylla.
+ *
+ * Scylla is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Scylla is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Scylla. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "mutation_reader.hh"
+#include "core/future.hh"
+#include "core/future-util.hh"
+#include "flat_mutation_reader.hh"
+
+/*
+ * A helper class that wraps another flat_mutation_reader
+ * and splits range tombstones across rows before pushing them
+ * to the buffer.
+ *
+ * Used for bringing mutation stream read from old SSTables formats (ka/la)
+ * to the uniformed representation with that of a new format (mc).
+ */
+class normalizing_reader : public flat_mutation_reader::impl {
+ flat_mutation_reader _rd;
+ range_tombstone_stream _range_tombstones;
+public:
+ normalizing_reader(flat_mutation_reader rd)
+ : impl(rd.schema())
+ , _rd(std::move(rd))
+ , _range_tombstones(*_rd.schema()) {
+ }
+ virtual future<> fill_buffer(db::timeout_clock::time_point timeout) override {
+ return do_until([this] { return is_buffer_full() || is_end_of_stream(); }, [this, timeout] {
+ return _rd.fill_buffer(timeout).then([this] {
+ position_in_partition::less_compare less{*_rd.schema()};
+ position_in_partition::equal_compare eq{*_rd.schema()};
+ while (!_rd.is_buffer_empty()) {
+ auto mf = _rd.pop_mutation_fragment();
+ if (mf.is_end_of_partition()) {
+ while (auto mfo = _range_tombstones.get_next()) {
+ push_mutation_fragment(std::move(*mfo));
+ }
+ } else if (mf.is_range_tombstone()) {
+ _range_tombstones.apply(std::move(mf).as_range_tombstone());
+ continue;
+ } else if (mf.is_clustering_row()) {
+ const clustering_row& cr = mf.as_clustering_row();
+ auto ck = cr.key();
+ auto end_kind = clustering_key::make_full(*_schema, ck) ? bound_kind::excl_end : bound_kind::incl_end;
+ while (auto mfo = _range_tombstones.get_next(mf)) {
+ range_tombstone&& rt = std::move(*mfo).as_range_tombstone();
+ if (less(rt.end_position(), cr.position())
+ || eq(rt.end_position(), position_in_partition::after_key(ck))) {
+ push_mutation_fragment(std::move(rt));
+ } else {
+ push_mutation_fragment(range_tombstone{
+ rt.start_bound(),
+ bound_view{ck, end_kind},
+ rt.tomb});
+
+ rt.trim_front(*_rd.schema(), position_in_partition::after_key(ck));
+ _range_tombstones.apply(std::move(rt));
+ break;
+ }
+ }
+ }
+
+ push_mutation_fragment(std::move(mf));
+ }
+ _end_of_stream = _rd.is_end_of_stream() && _range_tombstones.empty();
+ });
+ });
+ }
+ virtual void next_partition() override {
+ clear_buffer_to_next_partition();
+ if (is_buffer_empty()) {
+ _end_of_stream = false;
+ _rd.next_partition();
+ }
+ }
+ virtual future<> fast_forward_to(const dht::partition_range& pr, db::timeout_clock::time_point timeout) override {
+ clear_buffer();
+ _end_of_stream = false;
+ return _rd.fast_forward_to(pr, timeout);
+ }
+ virtual future<> fast_forward_to(position_range pr, db::timeout_clock::time_point timeout) override {
+ forward_buffer_to(pr.start());
+ _end_of_stream = false;
+ return _rd.fast_forward_to(std::move(pr), timeout);
+ }
+ virtual size_t buffer_size() const override {
+ return flat_mutation_reader::impl::buffer_size() + _rd.buffer_size();
+ }
+};
+
+// Creates a mutation_reader wrapper which creates a new stream of mutations
+// with some mutations removed from the original stream.
+// MutationFilter is a callable which decides which mutations are dropped. It
+// accepts mutation const& and returns a bool. The mutation stays in the
+// stream if and only if the filter returns true.
+inline flat_mutation_reader make_normalizing_reader(flat_mutation_reader rd) {
+ return make_flat_mutation_reader<normalizing_reader>(std::move(rd));
+}
+
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 21, 2018, 8:42:22 PM9/21/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
.../mc-1-big-CRC.db | Bin 0 -> 8 bytes
.../mc-1-big-Data.db | Bin 0 -> 190 bytes
.../mc-1-big-Digest.crc32 | 1 +
.../mc-1-big-Filter.db | Bin 0 -> 16 bytes
.../mc-1-big-Index.db | Bin 0 -> 16 bytes
.../mc-1-big-Statistics.db | Bin 0 -> 4768 bytes
.../mc-1-big-Summary.db | Bin 0 -> 56 bytes
.../mc-1-big-TOC.txt | 8 ++++++++
8 files changed, 9 insertions(+)
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CRC.db
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt

diff --git a/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CRC.db b/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CRC.db
new file mode 100644
index 0000000000000000000000000000000000000000..cfcc6734935654417e36cb3572703bf015e1c895
GIT binary patch
literal 8
PcmZQzWMFtKSTGv^1xW${

literal 0
HcmV?d00001

diff --git a/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db b/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
new file mode 100644
index 0000000000000000000000000000000000000000..281c3088e9a7930075e96c8801a6c7e787d7f5b9
GIT binary patch
literal 190
zcmZQzVPIfjtpET2e*=&K0w4hfMsA@;n%eP993VDWgc&F@_pKF@2rIYHW4@kThzKJ@
zABI5;96}5b6)s?NCHNoYKlsN8B>plm@qkSRlZ+r)1}1KKCWZ$$H~$2(nIYD42tD+c
ZYG&f)1M6qu;eWVufeIs#P!?ri1OQH?AejIF

literal 0
HcmV?d00001

diff --git a/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32 b/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
new file mode 100644
index 0000000000..5a5cc7fba4
--- /dev/null
+++ b/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
@@ -0,0 +1 @@
+3809570971
\ No newline at end of file
diff --git a/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db b/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
new file mode 100644
index 0000000000000000000000000000000000000000..ee71a0f649d57455d42fae85417fc46c9704787a
GIT binary patch
literal 16
XcmZQzU|?lnU|?iWQgArYz#sqs2lxTu

literal 0
HcmV?d00001

diff --git a/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db b/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
new file mode 100644
index 0000000000000000000000000000000000000000..b5eead25ee8c2b16599b2625c7064de8470f5e38
GIT binary patch
literal 16
TcmZQzVPIfj1Y!`);K=|00R;e4

literal 0
HcmV?d00001

diff --git a/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db b/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
new file mode 100644
index 0000000000000000000000000000000000000000..8e4df3c409ceae8485c0748ee3fb8921d6a1ea35
GIT binary patch
literal 4768
zcmeI$e@q)?7zglsuPw9;DlO~>7>L_I1~X++5vLmn>jE{JA&iYVjXR(jEb=35LByHq
z#F!98G$LEZHk}DsfQ(Gk0g~;HDfnZ$jhNM`Bbao|jA+qplL?{Tg&sWLSIw6ApXr-i
z?)}{J^zOa)-n)Byf*@#xxso8Sn7nM07g1g+<wYY1rU7AfwR5LMs*y^|9hOqb<&vt(
zoRX!i+--TR)>&EWwB}1rcZIv6y2|0qYHau^_gM7v@{c3^e*bJl3=@yMK5ZC0-mL7j
zO<t6u9EcX)N-iyOL!hXQRyXR@N?;wrIh3=Wa~S7v&PL8A&e5EgagO7>l5+~@G|uZd
z=LM|x+ZHaqlZ)@>;;o!}IeXBIyB_R*F7D=h5-l#}ycezE_OEHjxV8wbv!X-RqeHp#
z)lXwQY#1HxL*MZV+Wanh$rI?<5%gWD=(`W2Eyd`JgXo+=bpB%Wju^D-adeY}?%>An
zunptBcrc6q4PCq$eGtbd^Id?rSg4N6xy|C2Xif1qkgwI^_}894199Ew&ESy9PO!ev
z4>rs?z>8+1z{WBhk0#sC5RdL(0$w&63y$*?fLETy>zy)%*W2213i8*FT?RjrjqTeO
z>xKBPU(DbaH}!z`-+Tbv_bK+zr9S9S78ZG(=CiEa*T8#L90h-MdJVOhbON5Q;ycD~
zX<QRq5934A|CE8owe^NfYTc6_INy-!ih3Fk?epHCHrO^^qh1t00QXZwvH2X0M{4Xt
z)KM9UFrJqhZ|<Y<JG<VzO1=EPybq|8zT3KvI`v%nG3vEDUN}T;`+m(<>Vm_S>C~l(
zA3sc8_h-a7b@OMPxzt^S`&UqZ-PZU9^^K24HWIT{5heZ9r5iTT`=52@pP=_Y^S^DR
z_rK`yj($RZFOGF*HV|vv%=;FxHsP$<PCYfXn_eH?A1$r){SlfRHJ(lK^=-!+J|qs?
z^xlw@IQ;46U+MW9FPg5>^EaK(>ot@7#ZprZeILXe%^I+fc>EXRW_rC6e$TZxk@!7D
zzC=17NViT58A&|Lb7kOJ;z!$ix@mj1`_`t@@my74>u4eQjU|1<W5kDkyfoNBeDcWq
zJ+!^v(<vhv3vp(C`OHiXv3=L|>AedUT!A`1ga1AU6S=&9n{%oA(UD^)Rd^=I{=d$-
z)YIOgRsw5v&ZTaqV@}!Dss;k<Ud|qLaL$GO5u9^De+1`Tsn8$6IaeC(kKml^zs$Lq
z<Kk$yAUtHgCg^H^NQkS+RMttWXS%kxFQ3>Wf7np_`qZRa6UyWo%f4_$|I+*><pT;7
zHvhS0t~UP;RbQ6!hl#+!ADmSF1j;X4>V<~Q6t&dlOlDp_@alw+{Ldd~N-UL<(^W1#
rW3gAct!bN|t8uW~PZdP5?%vx^7wggrZq<xJhg)gHs$1pFH#hk&Tp+Tv

literal 0
HcmV?d00001

diff --git a/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db b/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
new file mode 100644
index 0000000000000000000000000000000000000000..dc507f24e878d2904638cce0ab95406a9c05252f
GIT binary patch
literal 56
lcmZQzU}#`qU|<Ad5D)<31|Vi+0TLh@LV-z;5Qq<!0st`t0U-bY

literal 0
HcmV?d00001

diff --git a/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt b/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
new file mode 100644
index 0000000000..5f3ac91967
--- /dev/null
+++ b/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
@@ -0,0 +1,8 @@
+Statistics.db
+Summary.db
+CRC.db
+TOC.txt
+Filter.db
+Digest.crc32
+Data.db
+Index.db
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 21, 2018, 8:42:23 PM9/21/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
.../mc-1-big-CompressionInfo.db | Bin 0 -> 51 bytes
.../mc-1-big-Data.db | Bin 0 -> 82 bytes
.../mc-1-big-Digest.crc32 | 1 +
.../mc-1-big-Filter.db | Bin 0 -> 176 bytes
.../mc-1-big-Index.db | Bin 0 -> 8 bytes
.../mc-1-big-Statistics.db | Bin 0 -> 4653 bytes
.../mc-1-big-Summary.db | Bin 0 -> 56 bytes
.../mc-1-big-TOC.txt | 8 ++++++++
8 files changed, 9 insertions(+)
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt

diff --git a/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db b/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
new file mode 100644
index 0000000000000000000000000000000000000000..a411d5c1698ea447838d87b0490911bd0adb1566
GIT binary patch
literal 51
kcmZSJ^@%cZ&d)6<N-ZwVFJb@zMlcB?e1Vt=&Vw*K0p9xst^fc4

literal 0
HcmV?d00001

diff --git a/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db b/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
new file mode 100644
index 0000000000000000000000000000000000000000..9779a808fd08b38c22c183f5348b3a808df5c1cc
GIT binary patch
literal 82
zcmeZeU|=}Jzyc&0>;M1%-@w4gAfUj`V8F;O#LiI2z{tc16j5b(%JiR;?_r<uy(hvG
d<eAvS7!ELUioy7dg;KiZKob}kjwyYY1po-}6sQ0I

literal 0
HcmV?d00001

diff --git a/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32 b/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
new file mode 100644
index 0000000000..e593accf3a
--- /dev/null
+++ b/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
@@ -0,0 +1 @@
+2474332411
\ No newline at end of file
diff --git a/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db b/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
new file mode 100644
index 0000000000000000000000000000000000000000..34528f97ebd5bc6956b65758c59f739fa8aec983
GIT binary patch
literal 176
hcmZQzU|?lnU=U?c0FqP&4iNJ|lmLWD38?_q3;<MK0P6q%

literal 0
HcmV?d00001

diff --git a/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db b/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
new file mode 100644
index 0000000000000000000000000000000000000000..b077026fd87b3cdd609bc60c41ad771d3edb460d
GIT binary patch
literal 8
PcmZQzVPIfjWMBXQ04D$j

literal 0
HcmV?d00001

diff --git a/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db b/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
new file mode 100644
index 0000000000000000000000000000000000000000..d3e8854520269e519ae28bc16b8883e281c61c16
GIT binary patch
literal 4653
zcmeI$drTBZ90%~7-8&9WIK2ZO&`5oNR@yAaE24>VMbE$)TPgU!M_U)T2&TY!cUp?J
z8jJss7SX6^;=2hkXe6yKphitp(AHKZMyjcXCRf^M^lDQT#c=MyE&RTd{^6hf<0hHR
zeD*hYJ3BMGJ6S;xbV7ehQVXW$C2AJcT%u-45X=XKx69otWyPfw7CYra#p6-Rirk7^
zRP2@CU*j%a<F@7~Zf}XVq`b`OwpCUBo^>p4o%-YGKp@Z?6VKS8Z+fCs*Qq&}f+wMg
zcktvishxnNbyz#7*D9ehg0q2hBxfV%XwD|iX3lY(M{yp_c|7M7&Qmzg;G7+@Hg1c!
z_)5;}Iq%?noO1`7ar42Za&a%`vuJT7=S^sd`+sQ<#&rwPdMi3&CfdMVZ)6X~jcw>?
zKYHk9wB-PL#8PxZJ9<nidcuCRoR3c5i=K4`oiiN0A|CDe5M8aH>$&yYX2-Zc5zG=F
zqw^P__u~3w{#y_i^R#u@e^~qxE#?0L?R7d_|GFDjA+En%1CIE+0UVhZ07vyY!9#ju
z!KNZyk7oN{5RYpf0UmWP0X(`R7d-wN&UZ>T&bPJp9JHU=`3HDzCiZVhf)C=W9$LT~
z=Qo0PKc5C}x`^X*w+Y6R8HYWg?U^m>Yw(6~hrvHxm`p8BJPprRai{4fjY|m?us)>b
zkAlzsfuyU5${2uJ(J$|S>y0Qcsi1K~lkX{Ylzq;>)I$<m;C_n9w_K<3VUnYjIyOBS
z*7Hcy^IbIl#*wY}smH#X{XO->Ul-4yPQ6}yjC%TtFZNN}?@V4yox8s@jk+-T)O*xx
zU&M4#*Ia7IqCS$hdmQ!8byZuapPp==L(JZaDQKoHoIRV~|EwYBG`;^>V7rOl|Dw}(
z?+5aGvGZs~C9&jXzHP+1q-z!jb$9oAIzRenwL9qh!!RkfE0eU3toyF=1hH}c!B#hM
z^d~is==Ga!oA1->H{ZxUZXxZ5E7dOgK8QbTYmrGj@k*D4&R5buS&nKFe`ldTneGSD
ztPfgEByQ{Yv*k15d3zd<(*7*-Pfw%kxh&USUrX9o6*RSV67T!%?wNYxvxmNIr2X|>
zNNG<Wj5EtuS6|K|cC32RvuV(RCsfy-!F;JT6}3vJ4DY#cK(sxVc65<e36<eJ7Ys;v
z&jrIFg!f!99^pM#c+W)^#Q$l}rGB&MOMTtbfBdDK_Shw;W$MM`50=KIytzS*YF)QI
zI)Afmos_4#NX;zs)@I{QE!h7NWl+KI9=c$wzHI2Livxc(@Luje``|fVW>_~aTkR5r
kN&o#3ra&%L+@50PQ`u4GwN6>^xy#93zp233+ShOW3ahJ)hX4Qo

literal 0
HcmV?d00001

diff --git a/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db b/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
new file mode 100644
index 0000000000000000000000000000000000000000..4547a9451a6c383b420c1e8b235d7444d1e8c901
GIT binary patch
literal 56
kcmZQzU}#`qU|<Ad5D)<31|Vi+0TLh@LV-z;5Qq<^0Wk#uA^-pY

literal 0
HcmV?d00001

diff --git a/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt b/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
new file mode 100644
index 0000000000..364c89f309
--- /dev/null
+++ b/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
@@ -0,0 +1,8 @@
+Digest.crc32
+Filter.db
+Index.db
+Statistics.db
+Summary.db
+Data.db
+CompressionInfo.db
+TOC.txt
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 21, 2018, 8:42:24 PM9/21/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
.../mc-5-big-CompressionInfo.db | Bin 0 -> 51 bytes
.../mc-5-big-Data.db | Bin 0 -> 146 bytes
.../mc-5-big-Digest.crc32 | 1 +
.../mc-5-big-Filter.db | Bin 0 -> 176 bytes
.../mc-5-big-Index.db | Bin 0 -> 8 bytes
.../mc-5-big-Statistics.db | Bin 0 -> 4712 bytes
.../mc-5-big-Summary.db | Bin 0 -> 56 bytes
.../mc-5-big-TOC.txt | 8 ++++++++
8 files changed, 9 insertions(+)
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-CompressionInfo.db
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Data.db
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Digest.crc32
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Filter.db
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Index.db
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Statistics.db
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Summary.db
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-TOC.txt

diff --git a/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-CompressionInfo.db b/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-CompressionInfo.db
new file mode 100644
index 0000000000000000000000000000000000000000..87371de7809b87b14fa0628b2113c9defde77e61
GIT binary patch
literal 51
lcmZSJ^@%cZ&d)6<N-ZwVFJb@zMlcB?jsP(eoCjfa0s!d#24w&M

literal 0
HcmV?d00001

diff --git a/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Data.db b/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Data.db
new file mode 100644
index 0000000000000000000000000000000000000000..f287f6541cae83fafdcda56169a63e7f854843eb
GIT binary patch
literal 146
zcmX@Yz`(G9fdxo1)c^ngzk!p%5y(_vWB4f0FinWz!S+it+!&Y|7#bLxD_75SW%t_H
z5WA*zMKY(h3WEUy0~0I5M^>N)?j6exe}1IoY(MAay|5K-dF)~!Sw>a{CJhFDPX=x!
u#{Y~A@^d{Ic$gv?J}@xyG|XdSeQ_?;_fg7BA;z_HTGc=<U^u4qT^0a}DJv2H

literal 0
HcmV?d00001

diff --git a/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Digest.crc32 b/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Digest.crc32
new file mode 100644
index 0000000000..fffca614b0
--- /dev/null
+++ b/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Digest.crc32
@@ -0,0 +1 @@
+1110194964
\ No newline at end of file
diff --git a/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Filter.db b/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Filter.db
new file mode 100644
index 0000000000000000000000000000000000000000..ba6484bcc788a2d2e62bc10f602ccc594d6b84e7
GIT binary patch
literal 176
qcmZQzU|?lnU=Rgj1ZY4o8JLjRXiQ{fXi`XA1tc~qlLM7Y6b}HU>;Xjp

literal 0
HcmV?d00001

diff --git a/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Index.db b/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Index.db
new file mode 100644
index 0000000000000000000000000000000000000000..f9376371f57ea150ba2e6002d905fabebd52132f
GIT binary patch
literal 8
LcmZQzVE_XF03-kf

literal 0
HcmV?d00001

diff --git a/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Statistics.db b/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Statistics.db
new file mode 100644
index 0000000000000000000000000000000000000000..5e60a2402c2d7036b0b5e1949946103978217a43
GIT binary patch
literal 4712
zcmeI$eM}Q)90%~bYs;I^*@7=%B%8vVY&n$5n2FLMHPD4c20H6rGLO;-Mp|+$%21<G
zmStpPY?(t7#myzepph`Q3C!RhZm<_7N*1~;ldz<+#bxWZOo!7@pIT0S-^V4>CHt>W
z^5mXRf6w)K?s=ZOdvbyx=!HniU<Z-q4J=D6SF@}W1XG*vut(h_E47NV$|XA$uUBzb
zs)}4$<&&SRQ)}u}OR1vzs(sZSw@bA)HvCX@B4s-}IWZIpO(vy^;%MJ1iOj7mhf}x_
zns|pBr-^j}lGb7EM}t<FI>vC0<s8R3fpfU8G#M#a*~B@8^IXpJIWOd##W{!b3eLrx
zpXR)Y^A67YIG>!dHV=M`i`;yOk8*Jz=RUMFhw~n^j{ASzL5%Cyp$!&v%t~}DcfE1f
zF`h7hP7I>&dkJlR2R-{4blNcb{%rJvhtaYFop%Vm>NL7^7J6eU+WQo`NkO-B>vzD0
z@nAYwO#dD2Sc^V{>r)JlKwK)<)=}hV=?k>ZaSrP1^|=1^7X~42_^cTm^IHcvt~>;e
zpLBs|OeTYkmAD>Fwx1xL(lZ-8cQg$=-(Ln^IE3?^HG%VOX*mP+SB_l*KT&}F+mIH3
z_~u{C;N5FF!3VBA2JZd@$LC@<jHj3|^9rpmT8mx<?^<va{N>pt)Y76;@O+itHhxXx
zy0m&&AG)6B<7r%9AD>Tcc+L;k8{?_2r}5bCz*Xva+v-25XQcPS{gmV|pQrJeI(t8L
za$Y8^=Q+k}`)PdMu{SPLKd`L$ed<NutY1N$eZJ}h_4187+o)~dEm==pcDN>&+L`&$
z<J4RKP8z3f{<Ncr`dIma1=L@)Hoi`M^~2%S#NtCq6+P6>!a{ogiyft>=>0E--ZIkr
zUvdRTKPKl(W5@Fwh;=?O@FuZ7W5{f$o|xD{=g06@%Rc)4h+UjKUO?){wRSapK%B7V
z-F}rg@rCAJ>Gd1GHC?9HZ@N%?(oE{lQkrV%`ylnGwO1zb^v}o5biOkFD6%(^_#^9r
znRGvpYx%j~Na9xikG<Q7OAdA(r~P?0xICAxXLp&cy@k|otmqyXBX0Zt;^}tcz9a8-
z(*6d{W)0^}$3^qr!5gcH?VGP$-!pB&J5|PK@SS@wiK`dgbCE%0#s6#1rM2SM3Xx-U
z&xPX=-E+ZsME6|TFdor8R}LMI=$`Ap@447Fi(Bc|cp7ZyGS8Ik7uZpLt?QD*Wijt!
zQEjZP<1dda%kMhET*<OnFp^p_qy_JM$BMT<wM0s{-^tp`R*Ez|-N22Ez1sqVY=64=
zpTEFV$Tf=Utx~qgcDK)xv-ZVWmw5M81xa!)UHWhTT<EED`&??FXG>j;JKTcg%(?fI
FZUT6ArsMzs

literal 0
HcmV?d00001

diff --git a/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Summary.db b/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Summary.db
new file mode 100644
index 0000000000000000000000000000000000000000..2044a14c2e39a55524e98a74a92e2c043fc70007
GIT binary patch
literal 56
fcmZQzU}#`qU|<Ad5D)<31|Vi+0TO5cCIqGdFya9p

literal 0
HcmV?d00001

diff --git a/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-TOC.txt b/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-TOC.txt
new file mode 100644
index 0000000000..364c89f309
--- /dev/null
+++ b/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-TOC.txt

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 21, 2018, 8:42:26 PM9/21/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
.../mc-1-big-CRC.db | Bin 0 -> 8 bytes
.../mc-1-big-Data.db | Bin 0 -> 307 bytes
.../mc-1-big-Digest.crc32 | 1 +
.../mc-1-big-Filter.db | Bin 0 -> 24 bytes
.../mc-1-big-Index.db | Bin 0 -> 85 bytes
.../mc-1-big-Statistics.db | Bin 0 -> 4638 bytes
.../mc-1-big-Summary.db | Bin 0 -> 56 bytes
.../mc-1-big-TOC.txt | 8 ++++++++
8 files changed, 9 insertions(+)
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-CRC.db
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt

diff --git a/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-CRC.db b/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-CRC.db
new file mode 100644
index 0000000000000000000000000000000000000000..1c47cfaca2b13e0da456aa3919dbe0e596230dc3
GIT binary patch
literal 8
PcmZQzWMI%LGxh-h0?Pp*

literal 0
HcmV?d00001

diff --git a/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db b/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
new file mode 100644
index 0000000000000000000000000000000000000000..df874c408f1b2e667c5aa7e95773306940e9626b
GIT binary patch
literal 307
zcmZ9>yA8rH6h`6e#Ic=}E)XRJ>=UJ8fRyZjSD>aqG*Gic24Dm7QVN=k;N;h>a!+-n
zk2Dcw*BE112OSIF@9r<RZl(yV1h>_H4_3@h@Nk$<V8=`www_?bmTau>?fYDV6J{;A
m`-}#xnXTZy`OaX=Y$RWPPq1Om1rH%i;G8)X+?9_TI8_Vi9YN9n

literal 0
HcmV?d00001

diff --git a/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32 b/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
new file mode 100644
index 0000000000..2af6c722e1
--- /dev/null
+++ b/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
@@ -0,0 +1 @@
+712389452
\ No newline at end of file
diff --git a/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db b/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
new file mode 100644
index 0000000000000000000000000000000000000000..dab3740e3031a89b9d20880d29595e96e1df1db4
GIT binary patch
literal 24
fcmZQzU|?lnU|?!V(m2r2reXG4>5|upCJhDvJ!1yd

literal 0
HcmV?d00001

diff --git a/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db b/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
new file mode 100644
index 0000000000000000000000000000000000000000..88324d9113c78c9e91ddddcc7e11405edd64285f
GIT binary patch
literal 85
zcmZQzVPIfj1!54*C=a1I>>xBlEQDsNgwQMvGawB1hV2jrTf;R7gR|i)gu&b>!T<ov
Cr3W|w

literal 0
HcmV?d00001

diff --git a/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db b/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
new file mode 100644
index 0000000000000000000000000000000000000000..17f6f91c4392c17d26addfe0166604d2fbee5fc5
GIT binary patch
literal 4638
zcmeI$drVVT7y$5l?rjULP;J2nERsz?1<l1+k&&qQsDT=d2r}^%y+9)vd3akHV;YH~
ziD(!uDw+T)CPdMQ8`}gVny7&92O9C6F6nS_(c&AYp}W<d`F$sv?BB)S<m8-Rzwg35
zk9+TFIgV3t?~e$jB1)OB6kaKtl_GGQp_LnzFE10N0x2`wDrQPHo0OL&OJY{GU7WQ_
z&Rr#&k|o)mW6#OYv&spj#lI&W4*p&_S#-PIeSslFcjVS>;Yec}f3oC`P_k_+X{}!4
zJR4tg?U}l#zLYrDZ&G<8${CeP@f@DZfCp>O<-x;qE<9+L=x1u$@YWi}evJJY>lg<x
z)-yIR4rV;WYuc}&UTeK|IFldEcr4=yjFT9D!+06v)r_|@Ze-krO_=#0<C(af@o{W^
zFynRD0`vEUDjZj(VXIBpnu*wcOn?2~;JB^>JHUnAe*?C05B8u1*rA=+U&de$-;FJ%
zW5-ovPi@6c9*Dg(1lu+TyG+8aW7cnn8OL2=$Rz9ucKTfGYP>#)>jsMRsdU}H|Cm3A
zEu>#U`6?A&|EjAOP+Wbc99h#-kL;i7M%MOOk^A)pA?vg7dNi2-MDgI}LC8byhawN{
zN<j|4jORPL7tgn;;snZ{==cM9#uR*g^Fy5|zWk99xny<&@~+okBR8GK<8!YGjVI9!
zcmeZCLgE(WwZrx!pFcGQnjdi#Jzx19`s*+*gchOoAv7<h&%JkPsv_+qn6F;ch5D<>
z&nbd&zb5BPXsvnrbLf6yE$Ds<OgCPE@d1LR9Xcp360PUK`qw*Q{ELHIA3}dMF6n3J
z5jW>efR4G6eHc1^>6#j7^X)P7pi_3|#zJRC{x%u9@bAEG=<>GuMCgO5yM{qutStQj
z`sJ^k(}Bszz>H?-%xTl${ZHzXkHY((xVP!y{m)yS_m6?|dB>qi#lV7{IDZ6IMO-#o
zpnH2)!}(Fas@M+SAAV6m-BUomf8|fbzX0oI?`@ZX1D2FOhW*#yGCYL+H(X6>G=ltr
zQdt3fAB5~rXc0j?>}<CY&R4|KL`xZnk4|$%!u>$3>92M@h$nPCX!#a+W>v!>cs&bU
z@v(3{=cSnIDnNc|MpK6axaRJ?);i$hwfh?2^*T>QcgB5)6XW^|Z>IuVmcMwj?t?j-
zw@shHI>t1WrwwoYf8BG@ZqPj!wQtWwN8(-W+jF7e;Cy>7G#<V^7kr0soNv$d8SS}<
z_0dZ0NOGpu&8Z7xWXFMxp1M$qUa?mB$-`6Vy>g<5wz#Z+Tc2pq7q3#&e^Bk&Xelpd
vXxgrIzfE(tX`(iAT-3*ZpUDt&CE1oOtq?7FcGK9o-xVm|dk87~@9F;l;jWNO

literal 0
HcmV?d00001

diff --git a/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db b/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
new file mode 100644
index 0000000000000000000000000000000000000000..ab6bd5d065001dab321da058d45d4d71968b5047
GIT binary patch
literal 56
mcmZQzU}#`qU|<Ad5D)<31|Vi+0TMvK3ZcLxNC?CS(aZobj{z(I

literal 0
HcmV?d00001

diff --git a/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt b/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
new file mode 100644
index 0000000000..5f3ac91967
--- /dev/null
+++ b/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 21, 2018, 8:42:27 PM9/21/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
.../mc-1-big-CompressionInfo.db | Bin 0 -> 43 bytes
.../mc-1-big-Data.db | Bin 0 -> 83 bytes
.../mc-1-big-Digest.crc32 | 1 +
.../mc-1-big-Filter.db | Bin 0 -> 16 bytes
.../mc-1-big-Index.db | Bin 0 -> 8 bytes
.../mc-1-big-Statistics.db | Bin 0 -> 4731 bytes
.../mc-1-big-Summary.db | Bin 0 -> 56 bytes
.../mc-1-big-TOC.txt | 8 ++++++++
8 files changed, 9 insertions(+)
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt

diff --git a/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db b/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
new file mode 100644
index 0000000000000000000000000000000000000000..bca56160f6bf4b03f74048442ba1cd554c565b35
GIT binary patch
literal 43
fcmZSJ^@%cZ&d)6<N-ZwVFJb@zMlcB?!jX9Zv;zfh

literal 0
HcmV?d00001

diff --git a/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db b/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
new file mode 100644
index 0000000000000000000000000000000000000000..761b75cb0477534c49261054d0f5ab22d7771b59
GIT binary patch
literal 83
zcmWG%U|`t5zyc&0>i_@$-@wUG2xKxbGB9#71TqUTFsN_=xeNtdybnqo4LG<NSVb8M
h7`a3ryeP93W%$6r$i&9L2-3~KEXu&Z*yiSL2mpM74ix|Z

literal 0
HcmV?d00001

diff --git a/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32 b/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
new file mode 100644
index 0000000000..59cbf39067
--- /dev/null
+++ b/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
@@ -0,0 +1 @@
+3963475046
\ No newline at end of file
diff --git a/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db b/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
new file mode 100644
index 0000000000000000000000000000000000000000..157a4de7cff17365433da137f823747e58804d15
GIT binary patch
literal 16
XcmZQzU|?lnU|?imQefz4U|;|M1jqp~

literal 0
HcmV?d00001

diff --git a/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db b/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
new file mode 100644
index 0000000000000000000000000000000000000000..f9376371f57ea150ba2e6002d905fabebd52132f
GIT binary patch
literal 8
LcmZQzVE_XF03-kf

literal 0
HcmV?d00001

diff --git a/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db b/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
new file mode 100644
index 0000000000000000000000000000000000000000..5466932bf5b4a28d66c60e2e799695553cc19611
GIT binary patch
literal 4731
zcmeI$drVVT90%}wZd;%{sxA0{MKTqp;!=qf(M0X4HBcXsfhf$Gae>BS#v^TEjA>ky
z{V}pIwoH-4w+S(5B!j7d1{2+24;@GrQG<jnm2DcWZqwl-bhp3_zwe1A{JB4RlEb~9
z`}<vb?m6e)dvXOqPz$3aPTnxNX3JHSYk^!<f}p=7%rACsGfE{=p2Kd;lUy#TDBmd=
z^Br#E`ch|Msne7uIo$>Bg5n~((_C5cYs%@UkK~iXeLmlCL^Nal?VpCru9d65_<w{J
z-u@q_MQ#KXrNPQUjj}Vg4dNWkIfQd4XMbC1(NW0zdd^Xtr*odcc{b++&I>s&<DANQ
z)0mZh+{VRsaNf(gnR73iapS=jb8$E4cC<K+^KP_?`~Ru~7*}VaH70b>a&$0vy&=yr
z9@>cx_o63#f;JpMPkjd+(}R9}0s4)@Xk!*S`5=1b1$5dJbWSwd^)|XnLf3Qix6_Jo
zZ!DO_K0;@0L?6WY$-LJgE@mk6aP+YFBU+X9Gvuq)IRDkxu0UM#eKk1fVFNfM!w1$5
z+reSOkzidu&PToV4~R##P6bczj{(o<O$X2J!tqWR!tplMT!j4P19!k{EZDy67!Sm^
z-#36i-p~lHd%6VN@-6ny?H1@y7CQMc&1dG6&%nE8odExIIgwhNa}J)b;y&FkG_Hy%
zhxwsu-KwQ=b-8v0wdUPkxZa@Rf^r%UZt*;!)>>EpLmd{|2KQ4$mZ6)*C#!57)RD>Y
zFrTOCp6;jd*G_(MmwM)+)F$dVH#RS$UeN70O}#W{=OJqAt;EgL>4yuGsPp2_zC~U3
zEMkzl`n!e{>XR9Dv#77uR(?+X<V??MVm3D-x0O0?)hc@bvxc;D^!{hQuXObO7ww+@
z^W=PS;M9r=VwIbDz9d%1bs22bLqj|0_-OvE*-PIa!Sf;qEhImr_Unpoh(k9V?Qjx@
zzgPW$Ucc_9{w}?K{k7C)1IeEvRh7{9LG%f8n~}t0e;72-@rwH^#a2b)Z)SSq>3Sf^
zbgx54;^yAp+dd#(ccAeUZO<0((j+>ci_)$2H6*_>x21D{_)y>N3-!e9$BsAB_IfTS
z^dyhRnPJbB7b}Tv+aEvQJ#N7@wvW%?@imxoTqNiCcLQrK?2uQjxs<HHnoH@4k!@hj
z1>GS8)?CmZfi+iP%|#}}|7*>~>|NQ5j|<whO@gMhd45=K-^ljwo6%e9_E>hwA2pPw
zoA2w+7I)wCKl}6L$}HChbNZFw=tq=s`K=z|=wGz*9v=Df;?I&_$Vx-jl*yJ8sFnS-
zO)oMXI}?BFyR-jKi!kryA8K-qg_6_dklr`iirl7!8$T?uixW?sc&5Nu*~GK|12!$6
A`v3p{

literal 0
HcmV?d00001

diff --git a/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db b/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
new file mode 100644
index 0000000000000000000000000000000000000000..2044a14c2e39a55524e98a74a92e2c043fc70007
GIT binary patch
literal 56
fcmZQzU}#`qU|<Ad5D)<31|Vi+0TO5cCIqGdFya9p

literal 0
HcmV?d00001

diff --git a/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt b/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
new file mode 100644
index 0000000000..097d9e98b1
--- /dev/null
+++ b/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
@@ -0,0 +1,8 @@
+Data.db
+Digest.crc32
+Index.db
+TOC.txt
+Filter.db
+Statistics.db
+Summary.db
+CompressionInfo.db
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 21, 2018, 8:42:28 PM9/21/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
.../mc-1-big-CompressionInfo.db | Bin 0 -> 51 bytes
.../mc-1-big-Data.db | Bin 0 -> 1290 bytes
.../mc-1-big-Digest.crc32 | 1 +
.../mc-1-big-Filter.db | Bin 0 -> 176 bytes
.../mc-1-big-Index.db | Bin 0 -> 1164 bytes
.../mc-1-big-Statistics.db | Bin 0 -> 4922 bytes
.../mc-1-big-Summary.db | Bin 0 -> 72 bytes
.../mc-1-big-TOC.txt | 8 ++++++++
8 files changed, 9 insertions(+)
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt

diff --git a/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db b/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
new file mode 100644
index 0000000000000000000000000000000000000000..1c766313c15eecd4d762f9ffb7092d62568c3eba
GIT binary patch
literal 51
ncmZSJ^@%cZ&d)6<N-ZwVFJb@zMlcB^c-8|6CKwMwvoZnz=g$S%

literal 0
HcmV?d00001

diff --git a/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db b/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
new file mode 100644
index 0000000000000000000000000000000000000000..74011f44cc7c4cd2b8c51278dbefac77b2ddddf7
GIT binary patch
literal 1290
zcmWlZdu$X{6vpp%XV=<Nk=^R<aHk@(6{MgG*NWB$+A0-XmGaUG0wSU-S`bAl)mp^r
zA7Wxu6g85Vm=M8~CYt!7Br|tL5{SV^2*h9_pf=%QW2})zqxE<G`{n!2`R1H^?{5DX
zrL1z4Qn{Yd(b3H+q1M+snP6m2!d3bSSDEO@Aapepj=Tu16>YEMDsQQ)eE$`s%}8<U
zlh9LQ4pl-=i<VjjT?5&wz0mWbm0pG>LgB(Up%fG>+5>r_P5BRc1d3k!0eS|Cy@ODL
zxbHm3XAPe{u?T5}l(im0YDcQR9BBcP{c%4uL+TGthpM39r3|!C+*3b88=>f*3!ocB
zn|h9rTL>w?fYgl?7q5ioiTTw|=t3wMI0@Y(TIqHg+GzMbMye5WM-jTjRfVu|T0*Y_
zqF|^(&yn)iYfDP6hobL(rEwLFt6C_pmd34FSGk<FsmQ3Da<e(LfD1T06aPkOZX#4O
zjS2VNM)OpfcXlCdL5kZyhB$8%Y+z5_C}n5XKvbAG*H3hXt6GwofwOt#UXhpV@beM{
zb1AUfHN;(-VBQk4IVAtk-$++U&LDGoY~>$hXU&NlJM<^C9EzIyAWp&9_ilxz$>JZ4
zOX&?_o~kiQZ-U~g0nGd5FiNu%dNyFYesc6!yrBPhNqHB$Dmz@C){jfy*TY7651=fc
z>u3(Zg#W%l65|@Xi|f|Bu|o7qIjOG`Y2sg)cS~c!Wz>6V%;y|^mw3T$yhp|R;CC9?
zvk-der0xV_H9x7Zm#RspxtLlgI5D4u^GI0Rt@L8?hKESt!I`LhCkgeEux7;ZcxTyH
z`y9>M#&&EcU=kE|kEf_fwAusEWYM-vfYMN~av#L?8QUu_{5hGTu{Wvts<B7E<x6$a
zP@IB!vuJHR7k!z0v-50P-yzbTGG*sO!KNI;@_PN<JX-x2Rndnv6}m@KoAZ@=nJA6N
zEA_R29eXUH8P0^cZR~cD1Pr#)*8xR+e?a3z3x9*kqV;}B{6oZd?E-jB{#!@z3V7k_
z&yZLv+uX0b=~&-PW~$ZF*6}RXeMrSGsGfynXEi{`g}C8>qw^Aw>g0|uC7{(NJl6HM
zbr8@j)r*f&y;5dxTanUSsR^q#V)9cd*rgMywJ%cp`$+ddQF;dTY+`KBr_dNEc$<6D
rOT?|?FGzE9#(uIDN{ZXUDUW~HRc)E5=iS7~9mS*k^C`98KUeoZ(L6cM

literal 0
HcmV?d00001

diff --git a/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32 b/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
new file mode 100644
index 0000000000..c1ae0dfb60
--- /dev/null
+++ b/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
@@ -0,0 +1 @@
+1423862028
\ No newline at end of file
diff --git a/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db b/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
new file mode 100644
index 0000000000000000000000000000000000000000..b9e7964acbf8819e17fe22e7192e2926c39817db
GIT binary patch
literal 176
zcmV;h08jq_000F5000#l=6Zp$j>~|R*h-ACF%moh4`XhYBP;K$W1NG4tAm0{2?AmO
zgqsK<0H!^25eix98^L0kj*!{JEF>wCfNUrTB(V@x%|;*t3lxh6$t&6vG$1BPEyyJ5
zSi?s^LA^4>WLAKqU<4D$qS;Ug2qZT|K8GD9u|fg}Kmsfr0RqsIQiioSEP-xB2nmG%
eB6^A{8X^H}f+9l0>}+WH=ZPi(h%`flLf|k{+dcXK

literal 0
HcmV?d00001

diff --git a/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db b/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
new file mode 100644
index 0000000000000000000000000000000000000000..8952f475be2f621cf06b864bf43b881c0a50ec63
GIT binary patch
literal 1164
zcmXZcJ6Mik9LMn&9Z;ciD2ECaDu;5YP@!@thYA%chhB#Y6)K0~dG7l;KhK3l3kD1r
zuwcM|0SgNT3|Lq&V8Fub`rgC;`hAA`x`*HJ3q^%Op$U=upNCS(g$3lnYI0kc)CR~N
zZ4eyQZh=DW8PK(lV5;^9MC-|5vYrRp^h$6-Zvi=aA1Khzg6;Zs(5OEKb^1Gyum1!i
zMFQ9;vO%vX14~6CC>PyeKzLw-xB|wA2cS&61~uXvNRY80O=f^jSqxUoI?ydUK&v!B
zoV*Bz$h#m}J_jZ86PP3af?Oj72qPa1H>$t_qZJ%C`oU1+9GGp~0BejVAj)_Tl8j$q
zzL^N-nmJ&TSq@svCQxPefIRawIAUG}$IORdhxrCnn%}`_D-MjeGC`MB0(M#TV3E}c
zsx1c`wl0Ci);&;fy#!mVFJQeL4La;JFv%_ieRd64Vz+^@wg9pAd9c~O4Z^l6JkwT%
z&$LzH6^<%A+fjuVJF4&*jw(FHQH8H^RN*I`oBUksJOxvn4`7+|8)UgjV6B@AMz|GV
zl-msUyS?C)dj>SS*Fcf`2uyU}f^qH-aKMWPiCz}i=aqszUIS?Ny1;bL1?k>pFweUW
zc6+ZtllK*r`Z1v2PX{S}5y<ds!7RTWEcYeY>0bb;{vEKwe*vcXpFu+qS(2#8tqjzh
Z#0P3mwgzfY)&*hS3=7nx><tD({{VLmqz?c9

literal 0
HcmV?d00001

diff --git a/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db b/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
new file mode 100644
index 0000000000000000000000000000000000000000..fc805804cf9bef5d1ad534c46a4c7daaea58a00c
GIT binary patch
literal 4922
zcmeI$drVVT7y$6z+uKqqR4E9^1_9JDU@1g~%uPYD4p>G&@PTv7ERP6gpeeX9=VI5@
zWkCjxDJr667zslrb0XHta1(}#fE5kkri5ulg2+oiKvH%Jz47~QmhA6koaFYL-~CR@
zdG;R4<M9~YOj<-Tid>t>MU!GL$@x5<y@2PtUAa}J*r7;BPLd@k($f`biAsemF*!pP
zxl@_CQyCDgP-diLq-;-1Qif=D{S|iF;WP39xl>b9Cffy+nyQ(Ucb!S=sAgKfm|Id7
znf=JR`Jq>SomI;(eqVhPNbaB3(H%FPemcq+G(zJKekQG`P%9p&2vik`+ciw(eSx7i
zs`u$;!ikHFej>H<seik{BfH$Ms^7!>-fE^iH=wFAENeul9-@1XxRXM|Gso(aZr$I_
zZP3f|RKDcSXc@otu_U|3y}iair!J;l&lFsCE~t=}6t3;+4WHDC25!Y_E^esT`%S2P
z%5^lU-#idm{6KKGnjx(!(27U{?*8Wd>q*zEI^T{#kF4?e#>wc>Ci|JcOI|y#1r3Zl
zk%G~*&ZHF|Q2Dm>x@J8R*WGs;)~q~yNjg0FGKmhC@e6WAw<{z1x~yi}U-W?Add#ac
z-`sN21@hY4D(WkGQ+3PZ^3k<lcZ7EvQb>=?Ba=6;_^Dv*x{dmrtFFmDuT*I?T9Zch
z?2|YC>5@GnY|ghM9WO12G!60#E=e1IT&k{h8fx_>^LdC|=475{n7AhMj}lo2D6wmX
zy(wS|mR!iO6~`iu#T?skEaBLWV+V`bb~{_FvgEFooXr-p1xxP3@e+=ga~#g`29CFK
zyqn{L9G~U54Vz;7Ww}i)<-{{MuED0AI96lxIiJrj#BpXlwjcmoxB}aX(_hhZ92Z}~
zw&};7yBAwpgzfkqwo41PyC3!|T5MSycF-~G&}!`H`Pf?)V5hIe&Qf5PaMte?Iga<c
zAyaOH*m3KykKy%6^|zup9gFuf-GI%HYew}M2CskSW+RFVuI3;M2g;B|u~W#_rX=J!
zCVON_B3_Sn@@^D&xZsHF+~I=k+7^Sn@CKf5pD{e&0sAkZ`YSpgBEPc=w{Me+5yiJX
zks_<2Dv*zizk#f)!{c*LhsKi<&l`dDsgSU2<UO9H$k%KAp=q!4==+t<m)wSNzDp)r
zAN&g+Si?AzX&nqLc)tzxSGYYT6UMD{#!+Z%`I=$qIc|EipKRl#1{j~mkEn;X4_b`Y
zvy)`}FpR%+>f0V@kJrP0hW2XTxE$KgkbD|?*_O|bL(Bj0-v}L}O$~%jSX{Ld`r`@P
zF6f-!%fg^f#UAm5ZaSpNg&sZEvIdxX)i(YDbi(S@aQ{<f(dXg*r=|`_;QptRj2#!j
z`{~Z|;9bD{49b`X%q+Sgjes5-+YRSO@NEA<`24W)w(nX6>WdDY*;NTFj{3e{32gIW
zP9N;Q<c?hr?7!X3@Uv1-f4(AX2YenZC=JoeK-}$GmlV#|qM@*eED(Qfeg9&39taG0
zTrUCfkhVwqPk`SotSE==+1$S@5U%I67<tKlP+t?TyV41K{O-N#65yKR6BV$%##*12
zpcipU`eox}C~(BKk>~0c=A~Q8>~}C5W6f5j*@7kiubjEqW;?S5OFnz%LIXmx^KQ92
zd*(vJ!<#*Gq4AhKbHQf_k2ibf`rn+n$j?U8X?i~hJog$x4`lPq`P)x|_mGJBV)shO
z9r^8G_Y)@KME2gl<!bW&>BLr?c*`@{fgHiT|M_>Wcv-4KnVzipNEVTn5wK+4r#sC5
G-uw;9x<T&%

literal 0
HcmV?d00001

diff --git a/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db b/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
new file mode 100644
index 0000000000000000000000000000000000000000..754eaaca8d610d75760a91e5cc48eb46056b7789
GIT binary patch
literal 72
ucmZQzU}#`qU|<4b5KsW(1|VkQ01_fV3<Tm33QRIrvA}sC7Dx_6rvm_6Bm!Rm

literal 0
HcmV?d00001

diff --git a/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt b/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
new file mode 100644
index 0000000000..364c89f309
--- /dev/null
+++ b/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 21, 2018, 8:42:28 PM9/21/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
.../mc-3-big-CompressionInfo.db | Bin 0 -> 75 bytes
.../mc-3-big-Data.db | Bin 0 -> 144236 bytes
.../mc-3-big-Digest.crc32 | 1 +
.../mc-3-big-Filter.db | Bin 0 -> 176 bytes
.../mc-3-big-Index.db | Bin 0 -> 106 bytes
.../mc-3-big-Statistics.db | Bin 0 -> 4630 bytes
.../mc-3-big-Summary.db | Bin 0 -> 50 bytes
.../mc-3-big-TOC.txt | 8 ++++++++
8 files changed, 9 insertions(+)
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-CompressionInfo.db
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Data.db
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Digest.crc32
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Filter.db
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Index.db
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Statistics.db
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Summary.db
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-TOC.txt

diff --git a/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-CompressionInfo.db b/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-CompressionInfo.db
new file mode 100644
index 0000000000000000000000000000000000000000..a91bf99fae2733587d53315582eea49826d9aee6
GIT binary patch
literal 75
zcmZSJ^@%cZ&d)6<N-ZwVFJb@zMli|1z?}9N$YO=^pw!~oU<RY>JP7?h7)&!6Cj$V=
CDhgx(

literal 0
HcmV?d00001

diff --git a/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Data.db b/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Data.db
new file mode 100644
index 0000000000000000000000000000000000000000..6e2725d1ca5acbd326d55ea7bd21eaab82190019
GIT binary patch
literal 144236
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%0A|hh|izn-{w4PZIyE>%<${M>s5L=fcHU8
zS^-iTZ?V4>?w62sIgv*T37377K&nPYW1Jr;)yj&M<&5A+9SMuF%HDcU*us!?YB<5a
zI|%*9BNwT~bt836+<wtXW7N{#7iH9_V*?8fLF5B#C(=g;$ornOl##MIrk6PBH^|df
zYc}wnnKTz%L#CX;hBj;>cn$B1LtWSd7+CMfZANwhuv}xWZ#QyZla9vKqZLI}YhN*Q
zkTZW4C;~ZWw?+Dm1x*v=es6IZ9ob7xm@fNJu9W)C?v7&l*G%$g$4%<`GJC-v>-59P
zs3rnD>efiFDBH2dBljSQOOSWv#Wn2Fw10m*GA^Rx;TB>oz~_&8CQ2b=o{FoOv#gX!
zs(%N1sgqHfuq(xqWk_@FrA-3rwohmrnBAYl!8U>1;}y`#+~#5ff~Pq}xRoJFpG+u_
z(0Z<N@I!NY^|e*H;&&FY+Xip~ck3jEO0DDE7RN+g#5M&&)jzRFS61b}0%`ec{wWd(
zs8IKkg?qzNg@mue2vFAeDW70d@;I}3qaZeXcy2sN*GBPNU1_JQ2l^P$A4b?p42Z$2
zALNhsIS6AS|JOaT6-@|LdgrHVdrzfr*XTA{>40MKd|wB6$sGK{do<(JUp1V2D%4CJ
z(F3V!Lhdp<y9{uOu4iRU!qb?mla2h;XqMqy>~~JN8gr`$$=&^esfyIe#havL)%c<N
zEsT|K{)L{RLkB+08^gn=6<S|kti=y2kz5o{xBO}6pbiyx^hy3uTdc%qoVQ1t@IBp<
zZKOUS7w2eU+jLtw{bXcxC<A!Bk_Z7no<3S2IbA5rJ1puwrJqigy4|>E!~;-oesa&s
zgS#7Gm1geYN`Iq_n8+5|NV3l)$vYH}dkXym*JroQnrT%EUzntLUU%~wr}uH(jGRzb
z@$vp6$RL-H8iZbMnOk#cO2zeVX<4dG6}LA~p|&AG9%9xX94bk}GaZ|MRA_d{Sy?kJ
zwUGy%V&@ots7*d^Klz;o5Vg}cIH4ubbiIQ~iuF(SXx2t=Q)KMaf3KA%gPMaw+?rQY
zhI;K1?IYF*1fas0HFjBH!XxZW^|~?G3T922ncCDAHU-I@tQlqFIttV&vtQbzmdqcS
zAXVCyZSO7QY*@P3Obeo}Xjx0dAglZ7<#qUVA6IXvEysrUPI-X8Ior;|#$m*c2)WhT
zRp1KLWYRj+K(7vx<vs6^Vfv9m|B=`6gI2kQr|o|7VqJ^GbxJ!UPY~;U^}St#j&iGn
zUAmpSmz<Krqr+x`86CW4dB1c>LzQzUN$&ifEOtvv^P+>_a~171%b~qpVQ1@HWC#na
zRV5TcoC;@@UGj^BI+_s6l-IK%z%7I93P}pH!$MT9Zl(U9(~a^>kRpoeT{g4&fozyp
zK;tE6l-*>whpu2)#cPJYnJY=#i|_z-&@wDy!FNR>s)<PGs`cA-kCWXirvndzv%u0v
zw@jMZP(IzF*Knf_+*-!MV~DDY!xn6+asHY;?93yD3e{1?{^pTZ{ek~hVlu3BF@o&T
z3M(rrhCFMvpPW})k=|?Jhh{0jB|}*dq~FV1o8@|~$`MD#C|!HdEmvkkd#kiro8mT0
zZ?N^c%(sO96#N|S00XES*GNANQ-U0)?!XkmXMdob<VeF?WtYG^n$4O+&rjCX$vxYd
z>9-+!lwB-ulv%-)LngVp?)v@{x?2Gr$?EPcn~e4z)zE1ZQ8V86wK6MTnlRho`nZQk
zQ^1P;gTo){=--qA+0mQk1*{A3UAme!=2K)al&J0El_>p>QM3L^h09JF5&0lr<pnOe
zXf^F8oVoz(poYhB9ahgdz$4R>5a4qT@Iy~A-Y3%^tqM72B9Mj0S>*ah?67M9QaTn1
zhl~ncOG1S)R**fvP3SIR^Iw6qG5uP@W{C=e>N{lJsLzB@&}`UqRyO+5mT%-{8;cFa
zWB-GQMY~CxM0kVP-8$XMeZ}@P@s$>6k8kcn_%YOkxE6{7I3kzSmG88x@uT136aZ3P
zg;zA_*_vd#Jhfk6R~SZ=Zd&Q2JII{)b9|I)fZ`}&{0d^4lMNf{?22X^Kuq@JC6EK5
zt2y}Go4@$*|DU-Yw-$wpfrYuQj*LXKN8HZ;;F8ItKZm<Xt0{fqyK>UTa)N!lp0m}&
z)45Y^AKL}Adf+l@V^Gtcb~W<jtXX<3Ff-(h@Nm)7!yYXzQeRjC1eaI$b+jSiH&)+`
zII8dttXL;EkAiZ5IX6)Tk(Zq((p(_*sYY$x8&w&suz_8oE2W?5DNb5cD=38Kg?b?e
z?KFcKxT}=Yq;GgolkdZ3LLfOU@~xsm8#-gha8bA20FJmQSjp*d%8#IKJ%lO6>h^jA
zJ+uzeSF-cf3D}Z;lPXxb@xV-l--H35s4-^gDZi+Vv5AgG`P^DGri>S#k04GjU7CAT
zrY%V5fvR+mD<}3UBm+)!&%hC2?hag1S<g)A(s9nxW)3b}Ue_hXziM*<yKmH7`>~F{
zpb?weENnxQ*;>GI%p=a3VzGXXcO3=OpM4(5;MZ718ic)P?b=ln<-i;>iy4iQmQ6Er
zuP2J@KhVc2fqJk~PJf|D(|3NlPI9<(UrY-Xu1q&dD|qd;PD7A#dy!tM#QixotqaAI
zEpcqf93wn%ZgH#JEIv8m4}G53wMp;xa<L!T|Ji^e2pa|{po4==HpmjES?**$|8vpH
zi3E^&=JL|*EHyGKNV`T0_O-Mucl}A&290$xXfSMHTSL!t{ma@a)+m=X{Ggj<0aooJ
z{bZ+eF52~xSI+GoukbM=I1F`Bh(tyu_tO!=LZjWl&;8_(r+z0lY_i`jjqHmHG6GQJ
z_ItFGpRkzOkE%CS!YKJ@-6?bq<gBjH2Ci$ER}ueXH5RT{<QdK4Lc6vEjh25er1DgU
zHxgZeB%rT6(kE<Kk<gU5;J{_mx;H+U97^VGeU0%e%=4#lLe?nV)xjgzWp68w^mD)8
zuxc?(!y_9LFiv7{qKa8EIDMc%BH+SqvDHO|l&_uA-nh@ZoZQvT2X5_tn{ubXB*FCX
zu3dV#jQbL82HzJBYGcUXqi37?ED?{4%%<?MMUL%thsc&<cFMaYc2*%^rdS<^UPFq@
z6Qsx6i6oN_4jv{XTQS%w)w-(DBID+oUs+jbs8G*fmCF>e)<|{9s^m5H2%C=@&4&nm
zL%7qrZcGx+X5wIF^VFU??HF5WpOxBEET7tW`JYC{N?!L63;SDeh>VjaQ0d#$-*f-B
zdTnTi!P_u%RQ$Y)i*G@KwA6BG9?mdkx|?mxghkLAg~_QsTpU2cG3U*EDsua<dUN)n
zCRSv@Q+<^Hh4p75ZY^mCPw!;}tgLpLWvsgHuuYnfgn{C~01P&3;03v@NH1O1PE%?}
zZ3%w;*Pm|NSFu1^hy!URj>^z1X^&g3+=($}34k-3{Q>O7SxyPu6rU4Dibw8_P&j1|
z4mZA+5DmN2rcx2mNN-g>oC_78IcEIk)Lx-beErQ@BQ?KYFC#xLIIC#qj7njKQ!{Mg
zum8+9vREqXO9mu{F6EaKOO*VCqfGr(2RSmbKV7*6s7A93ja+iYM!70FSjn%|qJTt3
zILTK^@(m-hG;@Q<D^Tm#X6lcqes%&EsDOk%)P&Q4W%()-8I=4E6Llmz@iw9}zP;A$
zxtVMtF{r}(Got?Cn2jih!UhTMCx5WcL~2Z>hh3yvpc-8{ucwOzRr7W9pZ-I0LueCG
z^K2A;67|rG=tQRv2f1}YNtqMu_!oWfls}Yu^>PD{lql@;hQFRluOME`El$trGpX;J
z(1%p%`R0gPp!)M$h?efeAF?<tUP=Rwn|2MQ5mI2{X;r+4=0yh96aFP<@d))1|0HPI
z7}lx%%J?P~X;@2>NxQ(Sk$QpGBp|ebwm8ER$avE<yg^dX>k=AjWsmUk44gCP1p9R0
z8y4M<TRDdHO!}*cEDLenyM?(oe7Hwg)P=svq$kvMLJ$YNxWeXH6cR=IdFpGKono{Z
z2uVCEL*pWw*uq6Ja67+aNi}}r(GV;=8&_ASH6omDsVUNA!0z^WVP-D-B{)@H4&HrR
z$N@F?Z;6*%mcu&yil1nIY)BGK6091Ye3H~e2_J>3XNN~<Z}Tb_pGV7h;>w~3>DR9x
ziqcvssl#|&G?oXSRHxkyT?O@|-SW4~iVc<KAb00~nqLTiI_#{Dt?9nd(sUD)L=zDw
zjm3YDqu7+g1_zGfv=xP~X{AyUWO3P#an^`|Blgl?TE;?bv=Xr#z0HzV%ZTKik!@MM
znL^Kjgphkl+!|!)&qXrcYI!<Q3+2@|FUwn~k)hp8J1t|?rygFMS`K;s-eZ=ICjb_a
zmpCg)OEWG?GVA|F@>K_iOt$gxhRz+2VZoNBji?{WHy+S>^f&I0NLJVhr$zq}Pdj09
zEp>f$DVh%-;~t<)+n6jPj#)AOJLK~sE!2?Yy)Z9`9Y4q=HwvT?T>fc<EL}BUnkHpk
zm{nFtDAiJ~{^k&W{&@S<ROYJge5JiuzIzQqW(X0`+LsomaF+)gM9LQ|jurPO2Tpb4
z;2Jdz=Nh`Hq9OTv{$IKL7-yz}$u;F$D>Jz@D^W7J_m%(MLeD2M#0>W?iZ!t~ZlPCA
zZT^jyhZoPHlB7o{%w=UFVZ6Q{A%Xh7M<hj86#o^QTHT<LLB*qGZn^9znehwLPd<nH
zYT;wCB$aPKTCBGEgaRG4LSfxmd^3esxqKA0Cu5r4_))Z6n&v6uq#1Qvuh+3wfNVR3
z=S3&@=^bKyS_}}}C91y0x5u0)Qh4IK3JGh`S>J7Pk7^i@h@Bu94LM?AM+0)$LL(g~
zX&)}l4&?)UQky9XVR9TSO8SJ~ATiXPGSaFehXSQZpK%yF8_~g>etr}zSj=vOM7Maj
z-(N4I+%@W=bmbnq)N%V~q4M1EyEpM#nlNnR*H;rDI!Y*RKKvy&Qn&ZlZY%FRoJt=9
z;kPSyR~d^@fu(aS3I%znwf}_SScAhxethy1oqT-evOg5O_@RYE6|_%TB*YHVUChV2
z4D!ZcPk^RAkF3Qtyo5XqErK3#PVk67Es!0B2u_SN?_N{UYr#sh-<7vF$=SaNwraCi
z-+z6|L|{^jM}CF2KvmF9<jm0;Wck|Sgac-%;;~jJgYc_n;RqGN2U0R>^-mz%Fpgg$
zoZ;l>A+O^(<VDrc#p1mcG;e--j)fkpt;e4c=B$4v{)fBUjI&pa0M)yMxL9>TcK<z+
z%=tKeV=%-<kHh=6ahvguAZ*8g<hTlu#JX_tvf#tLLGXLlK>>K9Kw(an;bsZ(vG`~(
zIMJ(K85907%9D>N8?d>>d@-Ww2X|Y<H%MofiVV?KaPI3O=?)eqz(As^1BPh62#!H6
zuNomUJgf4OrSDlg*QWtU+0c?To?oi`@fStL{@d!9B)RjFFH|sAcTfAr#XamxOIEcZ
z99-wobY4B$r!It#UQZOkH!4IL&U|m;qKoBR+AVua>?e5DYr^ZYWNTOX72w8i)#XU<
zlyS)z^Fg6eBMs>pVs_as0EC$<`3ocKYjb|qIa(ef7v>abunc}3+E#o1zP#8Pl0CZ3
zrir36Z_qVqE)3-Yz!Zxb9D_}$FhLblrB$dkUPu=UQSbRtC4d~$R0}UmXi*F|R9oC>
z!AqsI`OV7TG=aPEwhJ@KAirZM92(}_Aha5~qS>Ewd;oyh!o}NwE}@MWLcgIVmMO@A
z9uaTDAx7aSjs`e<AR=rG5Db37P(|U`J31l>swc(Lp{8{J?@FlfKq?=4qHxZBj82Gh
zfl=(T9I!vZKDO5&mzfgSu!8)?$(l8TUYA@mePB>iB^+-rD(h*>rSQ7`a4tw&Hg)T#
z?TuWvW4*Jpc&sL_s4wd6=>lD5GI)P=MeF}?m@h;l|7cVsuN8b?<^2p<)rSSrOJ3>@
z10qI!CFuWCfN$ekYo)iJSY$kQf1#`!=E+?e3j0XkDb3soSnvo8Id4r2&L>mE-_OPE
z8uisTm&`nacjI6^K*Hbz9*x9t7{C6vkv8rCP}!ay`SzCnxkDO*s)6Dr8HDY&Xr4)}
zd!+zuAoY+BJ=(snVdKI?$Z--1n>WKPV*$0Z{*w!JjZt1H=<L$Vu<Q_Y9=!v9-9Op~
zL&5L+{gX&91k>{Nc1TMyASjX573>FZi<6;k9g`McDI-4O{RoX|^eW+KKt?xW`$MHM
zw=86e2wrWIwL=Xh_6J37<>uDKVF88$m$M*tvzv*<j%+Sb;w=%h6`_aU{O4fl2CqTD
zCFH!mv6;pD!<vF_qDa}|#)-CQyQ4qED#*l_R_R&xM7pFn{&E!`Kp({<WW+h-c#hXV
zoFbZ?J|$-1z*j>nN{<zm^1sG7kO`;kp!*i<Hrc3~!<-xufV^AEMl+_;hjxoL95rKl
zw3*AYlUd*B@#8-JD_PGT3^DTK!q;vYsK1W1NY#4(rAt#yL-80JLm=pagCIb!ab=ZT
zZPGSGhKfJ(W3}3>*`i+U<`#Za1#3}%xP#3fNW;rGBMlN{vtt(R>@1}I7A-Uzp)0AM
zf*dHl=huFQk#vPHlGSNl1e-_{cYP>=36Q=2vdM7dlX#c3HT@6jSeF5^!A-swgBhCR
zCTmEWyQ~o#th_*YK4$%C%pRO3WFkmV7?@M$4rfA{QPF?=I{R&qyq`aRyiO{p?J=7b
zlIYUq9$C5~%zse1`hPO?2woR0W6p%)a!J+AkEc0U_&e^IWy)jMdu;fz<DHt?OxfGc
z?ceKN4r-(=?vd9Pw&&>f_%Z*hpQqP@1q6%Iiwz?hYh+4Cvs_Ad31Rzj=yt1I6^c}m
zMO5xyHA@@#=wyPtOy^zXmea|3=<Xqy8J@(unEwlto)47Jyy&1yR(xxBv9E<?2~@0X
zPLQi9ImXFSEmL`%laJ%GE1ab7F+up14XcHIQue^i+nVfp*NoaSstuo2HS*dt8696Q
zKzN$p&1Iz}`9;S9#o9$IQ3wTulk85NoID5|fpt9)hKsP_R?hAnw@}s~AaQ~Ie!MgW
zpZ?4T5w!dRf6{Bsl&FS^G=;<d7H%CCMtz`{@EV^OMO#by!b5h9?_WEQahlyh_@Vc!
zvuAy0mCWYVx5}kj*hP3y1QSav9+u<sc3o-^=pe^cPdwZ!$hF6;QjIrsPSW;Y>ZS!h
zIk@K5JHi5^=1<l9(P~4Rj^48%lM>6rBc}U<+?x4O53TD8p~IXVeO#Xj<zxsvG6amW
zGjViX5DhL?#>fSkaxAWmh9S2B=ZD<LaI2J+E8e{yJxi<jsGcyy;NvYZN<8*uo8_+T
z@y7{a8lQhk3g>{1{&gF*kXU)s#u-Hw02`eG*Cxmk4Ro50Dy56`>@tCv3U{a51$34~
zV8Icu`f9F^R4@&g`6_2@9F3eX$&Fq}mqp0=B39MEap`EdSjg}%gLpiIn?$E(+mw#)
z;3&~EO1qZDX(*WEaKzX1`vO_x<3PXb>DNw#il{uOu~k-x`ojGw+7ZNFS!Limaywto
zBEI7SrBzZUZ8J%0Vx6sMlT%{*7D(94^$NC-)WUxpS`?!$Y51*3<;71lY5J$G>NFMe
zLcKLtTvCtMH?+x3?WQ#aWK66x=)0?qe&!FP_GH6`W4>s(3$Imc<emaCU6lU*F~7S+
z6%PNKz@``E@mN0Eqf*yRiwthhJKWN9{W(fZ2R7!)xo_fd^fUuUXuj)DjS}d0>R4q|
z_TYk%Ck$?BFLcs<X3aOt4PxFH7zQ!Qr++9~Y4D2zd0hJ{U6H=;-B>f9n;_CD)_tCn
z4~}w5Jw<zk0aNy?kC;&O5A0f*QswgkN@`IAyFyn}9uCxZl3fuW96kCUV?u2*;IaTm
zi)YadfHv{D(KT+l_U)qdbZAP;+~GWfoIYfc)9vF~W-ja<Aaph%G`LSuORZ)<t1yyi
zH1HoATTzfv6ZJC0`J#c`!YiX5%lKXy|Fcv2yqLF%yfSDuZHb-t4IpE03aR1c!@0>m
zL=1S(PO<%{lTqVRqlFiKc|+JH2nA19Z7-05Tx&MU3-+xX#iUSN{y1h^33zo(6|H`L
z;xh;`?ALig6jaB;2<%Nh&W{ZT7Gm<Kmh?T~Xkzlj2R6Clr$<L>jn(sUQ$)>6>2?h!
z!B-s8K3sbM2PHbZy-dDbWw^h<${an9?GpBx6D_h$ZfU<Sd~!xF$NM})C>X}{a=9?_
zApcvYu<T)f0=ii_aG)y&7j1l?mRmZYfWCX8pM{-pg|Cz<Qi0a#S;rvn8ew+cg@UZ(
zF%d61dd+Rnq6M<w;gml!{8Yd%9f53GfMgkF10=Lkrhp=#<c1&X0s-N1`+g3J1H`+1
zm*7%hh&ai&+9=Io<Oqau%t85dtW6#k4jjqh5BZ<mA#~N6YpBC!l(sSBk^P<We(ty=
zp`++7=1Y&XRMy{Yym7(?ZB}o=eqME(l<mSzHZ8aaUL4I(hvb(3V3#573r}g@0nWy&
zT)AtPIi)?=U{7sDLqY9L8+F=d-QduPqMs&VZ4`dGtE*1N9(z@{1j+Ar;#-U6>X9wy
zMWYk7EZPMC+>G<*X)o-zYpza7`Oc$R4TC$y&fIUN!@F`v>YaakTB%HZnAT4)%t&`@
zZ&Vw6qfPuQ|G+{cH+;4iQW0d~bGx)lue%DdVOH;!TiF@`J;g%we5NKoL3+ViS|4ZB
zlX2-PcPe2Os}|BRR~$rNRTbej$ePP6(jC-mW|PVtvVoH?w10VGWr3h-^I=x`ymdnh
z&6u8l?9x^-xP9Vklu_~~uk*J69cGAD-J3x9QH(>RyvPMMmJW*h8jYkHbY_w_pjd&l
zAA=KJ5^JA-YHT2Q7%U2W4;qb$(-A`9<{B-(EQ+Rn?BugHJe^s{NhVZO=N#O{f@`#(
zkZo*;b$ViGFr2ZnqJ+L4-Ma~=EZOQqCj|o59aprSwVLqRF|k;i2M)#zAm(lF5Cbqf
zb!V?Aei-~~WE%}U`xIV$(we*j_>}<~GFT@aaGALEiHXR~awFx;j-uw`v2t;~kObJL
zJT_~PQ{A0snE8%<-i=KT?W(YHr=49!xesj?iO!7QP4cY4H`s3#^9LEVQneuYs+9*&
zm}BPmB+=Dtw~4+-09-VzIUzArd~~!#S%qvIt>q0?dZK#idC_1?@+*GH?D@Hix+kg)
zJ1UXeE6af@mD=2FEhCyLO>`Vbl2r0r{LfA2CRE`EJxzr^PMhB@c#Vt8tah3yebO$!
z%i+neKQJTt-Cq?bD5al4%8%rGqtyJBGlUo+%K4dlqOy`Ua#=*3U?dWCLyQjjoBYw@
zD@RmnvQp4Mt-n&J4dpEItzJt-SOkkoUm5*rbupRb>$azqmbtt6O@Kz3ClO_)9N%9b
zbGi>XzT0JYak`H_G`b^#Do|gSd{R{!UF7$#fXc9@W@khbn>vz{e5HMS?tnz(;!2n_
zMB<4kN+9b(hiaZqT~f)8fmhXaMrPSDsVW{4^MjlV6Yu_w;w)c(oX>j(7Evrq-(K}Z
zZ8~hDs*SwYF*i=~nd2!`<($^|k2nEFtgegmOlXhwL?{avh2D61-Sg|9Ao{i_8Imms
zb%mTm`2`x<@p!)e#w4-RGKxYg;`vKtC@6Y+$@AUs(}FPLQJn1iE=cb2w<z3<lxzD}
ziQ3s$@GpsD(T)mtKY(Ku<o+E+68(ouBxz<^JvMfWO?-Rx<ckKP;@QzSlQ(kni?5Oh
zr=*5gmObM#_4=`EqF(CAD9x%G9`xrsIcnPdU{NV+?mJN_cek%Xpous%dOAwa^FNeS
zg#r>46YQL%*?8r@=N=v?oOU36BLn}J!d*;0;4&j23APZe{;KN}j0ds_Fn6PYp{$n5
zXB&jZxjM~bhJ~b^McAs2hSyCC-HqIiLUq-a7bh^GwD~WR%@o?Vo13b|0BVQA*;rU;
zN}8#Dyg_TzWB!MtP2^R)BOu7WF-Ure?gs=!aL@%#gIlLctPYJ&mgI=WOwu+dZS>kC
ztzCHZ=`muX(>$@XevFAfz_2w@dXQOj@x4!UfCzlvr+KNkeNVqSxUiroghqhnSaLT>
z5X%P*<$CI>Mbnv3)<wYhn5dSLP|p9^&&|!^<!Qq9o5|AR?R+mLkGi`zgf<afD*Lj5
z0A^-580uh7$4Yx-PUKW%oLseYO_Ss{AbFGjEt<>E$GLfs*9<eokZ#S7uB<`o-ZC~g
zG&)cJB9;b7Z+rq>tFey74kyibFR>aBqNrnWc=EV-ksSB4;ePX6_|zoF@H)+ZRR8|t
z0uEWojn5QeJ;<QoRJo}rJ071LW+2T#GFoA>@|`3tWKwHvISmT|Ak9y%t33^=#9Kd+
z<I8ez90MRV|9hi}TetqnCtq-BJ43{%KthLk7TR`;FNHqg_@CG=<P0zMAGtP;Buqvm
zz3(qc^@+v-efogC9*%QSWylG$bn(N!PS(D}5c0T#raCj(!w|0tzw@iSbnrSs?EFwT
z<G6_cNS`N8pYy-Z&Ac89R<sf8v3OKuBW*pF&GEnavhqMwd9<OWv45ekDuMhyz<(04
z@w;fb!PxvqyoMpe_91R=v-4z}ytlQxmR)PEIw!?A>9OI^hc2#mEHqL3P^fZpfL#LM
z%yozC@M0H{9Yx<M@i@R0BXWOGoz)bjH$G3&Ha8)e<u!3+BvjI+vQcStg6@Q(TJ{$X
zE$~(IJdZ_L!J2q^5u&iSRmQh(s@Yjv(dhj*dM1IJ;)C^U{ID4fx;M+hwy1mqB=*4y
z60Ud(kq&H8;(`F*WEv#OY7G|V7-YRUeALOQtcE&v_oxvZDl4eXFGj<&02Pz(@tzKC
z+77W%k7W9{%N9zPP$Q2B&$}ndQZ=&aD2yl}v{By(Gh5Xwu95?yaU4x%)f+*fAF=7@
zAco{&GAyH=(mIZvkystpQM~e36h{)Fm&-GzY(6LEHvJeng8#&>CS!Ivhg7wBI>EvL
zQ?!NEm_B=+v1CzkGfRAV?dq%ySnXB+xVdQU!rJmkbVIlwUO(<BkUY1AaL_{ww(}|i
z7_r*BXWRSJ!0BtL`<}vuh~k4A5zGnlsM(~sCgsFCm&DGQP5z?|oPvFzoeRu$&}&?Z
zIw7^0dUdT!Ft~BRsiUQYF})KU%Y^cPzD+2|^c=I?ab{m|NHTw^qFF}eSr6b?uqu3_
zllXbP(JjgMmGQPcD!`Q$^O_hwL8<U^;E%N|R}v98o`MXX&dNsXRjq*cKd>;hCQtV8
z(|WI<BqCgySwQ2U+tA+7cWsUQxWyxEAh1-hB;Gc^CpDxBoa$@8S=h3ccIuLthsL$m
z1oEew57!7Q=V6(}F#1^(VozZ44$QLBH0ZW~H)>u1PYEL({u$@j#Or>0s*^DQf<qpu
zIEPm8KA<}3+<Gq3M@8@@544$iG<mG(A$U&wDxx6q1!@)~;y|XaYP1$ptIK-LgJ|&Z
zo5N$dma-<UfKywjx4xQ_B?D;vK%+;|)`7nIButPyHi^v+$V7W&JFSyFJx5#l@&0xG
z>raOxbaDazXzG*zDIXdRfY{VY*!X(SWjbZdbm^l4S^G+PKlH8_la@oh{o;lg>iwk_
zi5$;UokV8lZ!A&_(U4or!ee<d(=D$wJnts=E6S_29!(((?_y99<|pu!nJa=UwY8~+
zB&BR0-Xzi2#4`1-#<>^+Rm)hl(=fH>t=0;asdaBSv3>|xGeb=H>XMNwHh!JJ_o=Wf
z&0C8zZB#X0nqp#0v;n_lBu?miRBymB8qCu%zfbAjFH(BS-Y*Yg-eA+WuSEt@1IpVp
z@G66UiEK{T0KOXNNjJ&P^>eZ;(c$Q|CoI%DINI5Zu!)EFanvjtba1n>fp@IKe{X4S
zLpzr`aMyI6g-B}ji%sf%{5Usno`IfKfo3~PdQBX@6$W9T&H5H5?XmL1dJoGIrCV+q
zrTf`2nDI_^6W=;DFW6|$r#7~&*IHH5Pga5`cwg|T44sbG(@B_|K4+4nyHK4cLMxs!
z)Xbf`?*jxpj<B1f=8&dP^6zdrw_Y3F!}T&hpk&N8OY@O^B~{*idpv**1dZ-lhMcHU
z_}(Io=<B{7+3fvF=(|{(;`DhzK?YrRX~I{^ea8zw4pt<q;x;4ST+FIA9|1f>Ub_uG
zerV*Ctv|-2#l?!@zv}W3qM3`2M@STngF@+Jo<xqdvrNIDeH`#0`s}n(VWFe6tJlGj
z2HE>M1Su+fvbw0FM)p4@gpLY>jdsmXDMOzI@nH>0M{G9o?giwSEgTrpMlWkZZc)8J
z7ms&}%_FBcqXutaXJG%E6&H9U2_i=(vf=#6MMOc0w&x!0ut-_@EpK~Cwkz8E-P`J+
zMybQ={%6&Ej+#($o0XSz^K+aeC`76|(z-CA{93|7M~oznju9<cdq7?ntARK^NjD=E
zK8Uh)$6b+O+S;G~F_~k2lwNGAuqg(a(lvnuPNxD{?lQ7}<yIx&5wZig?%uHRNFH6p
zL4d+VUhO-dIbMf6k9)FO1jJzZqL)|=47uo7M>jWqyFQLjRLI&GgncbC1ef&1QQz48
zW|yhOMvvTZc7^+VDoQA++`=V+RpX^aE@!<|JuLujbg~=%tJAbNyh-$Vhc3`MDC9^A
zQd{J5_Sonmfuho9JtJ1wWUSKNZ)mzE@oSJ|K2Ebf5S7NiHcH)p`kM&;VMzx5`WfVa
zvZyAo1#p8n5y&2P%cNzFl~L7%KB30=y#<=5GsHY`a-(VM?fjxIp3d56WUJyy)Hk*;
zjv%vzJw4KFEE#K)8n(QnQFBGgsuwny_+NX<B#qIA9zYi_ld@?^fyB|)hth*7Kh?2Q
zK8K*v#Kg%Q63bja+x_KD(zF~(sNO*EQjh+Fs}_XQlT94*$p6fjb{WK8tbshYsF31H
z)EX)7<~C{LZk6-LMtA@JGu4k;xa7pVl@eq#U%s5K;j!7xz5Y{H&rSvd`1cn4GIyoE
zY4_H{ZzlP41|#_`wM1jQd{2(YSDNB76HB^+N0=>~OIKcwdXRX{A6bX6v;k3dgfuFj
z6(PJH9|_Y>cbC93oL5FmmleJk2{Uwy#u0lJznLlSk!06kzsc&kNnFMPMm`RzXX8fw
zI>j|3U4i2nq)1y4HO5D-ikJ@9rSh=|$dQQ*A^O2M-?$(TKc1AxdKKVFY_uTA#;1$E
z*uggXgaDly`Q}O&t}HBa$)#A*6p=L8I|7t=YeXZBT-DPm5whk6#40MRZ!Lz8x|=q*
zXve2z{08Ybg+m~r?@~a==yRvLX8MDkJ^w0_-|uFR+@l?SlVs3XAD{0x1g?8*9BD-7
z_gN&){v3~Qz=>g8xonb%xL)Wa1t3%FyVF3LGUY*vf1qiv-5L~>tVK4>aVmKeZJOd3
zo}PB|>|ex)JvD6Cs~kPQck^zN!Z8!fPqB~mEG7ze-dfp=Ac)N=`?XAssrUf{3=d0F
zWu#6YAndH&Tua*7P`1}3mz<DOM(F{YL|HT!6xQP9VzU19h0Zn`Y&wAhwcYS%3Ulpn
z-L8dDN;k8f()IMSG&#LXNd{`4dV5S<wcjj7Rvq}tE<>KEsX7`qoxbLL(fCiUY8drg
zjCuTSJTx+7awZqEl19=+;GAhILc9K7QC9*V)Aju)f<|o<RT7F<Nk)R|5Rb$<whE=j
z@=McFhFW4DOEjTnT9lM9XbFn36rp8Mgcd`sP0Ls-D3g7%R7Wk1DE{Ab?z{8v=hKgq
z`|dsWzH`3!oOAEF_YG*gmYRek9L#?9MTeYcwk>+nHmPc%8q-=MQ*rQEBhz;3rLtGX
zJLQ>IHStX;ma~dnFKvEJ;2gZZdz8>ZW3bESkwM0ui+0)BfdzIAv})%15;1^dwK4e=
z9?MCrqqO#C=AQ4Ykr%w>Jp>tiF=4S*cqPv$$NEQFatE#S&H{@>nCF>Wb9!pQ)Y}f`
zUsBsB_c!mKS7@^o5>OvTmK*u;zsoVv#7O?r&Wr&z0de@|CBi}&@ZWXXX{NTXzVe=#
z&Fmsx0kZd5YvH*G9E8%+8O%X8Dzr<}(zFeOo07vNhFu~!K#k^)8J1M}?azgzK(=)W
z+=7f9VwG6vd<o7-Fz)fKRc2)3=zGi<Ar5O!bn<UemJA-twG8h+v+}-U$*^Q6Z<m7K
z$OM<PYh#b=wJ}Fe`XVK<c^wsdJ^MwLl`?((Avd&`)5I^gd7J%F?gDXThxX`8QXN+L
zO@<1K+=UHWimhcurK@*qzH!Q3zV(|p+eFxNRCUR$-nQ8;=}t1<!8KeA9~Jg=^c#Ww
z+Fe#m^TXRL{Pb9qx0OWB`Itzp&Dp~uOAF0rt-I*rn(ixBsoCpZzc<W&=GOXD?|NfR
zTr<xL6(~%4$1m<kV#OZ)k=jNsdhjDmm3aF2smRJXkhAISlw*If9IG{qz1+|?F!HQ`
z$ZwXal+IEqtyl9Mhx8A1!i{X7QChDfuV83VT-qQlncoD(O<IT0ijx+_rC}Sm3T`Li
zN?&Fd>H{@ejuJr*u-RO=V-%`pBiSZ8Sy3AMU}YjyfUXT)zIJh&9&f`S;dM|mPMnM)
zvVS{=1jV2rAI)t_UX;e~74{Z2h7PgI8WscmuNcAT&usE7#;=fIQl^^Oyc6S@|9@va
z<)~X4jk(V}3b~;aY|EA|m}?Evr<kkLj}0ncRrfE*mi?rY9&FVqVGmIueS}%g{0#|g
zoCzsgDsz}c<o13}3SDTAsdRUMm|O^x_Zmjg5{ddaP=?4?VU1=U5$S!D9<%DC@i>(s
zW*;zg?u+ltTr=yTUM7j%J&L$>@HKm;;G<@Dc~daFyU?MXq)_q>i@*@Py~9M90<!Ew
zOa%xJynPqfGw(|0R|+<5D{h<+9!N>-@c-BP>Re(N>a%%eM=@(Zc9}%YH`1WVsFc;a
zrN}H^3<n4FypCS84f=&nTIf(&Rn|38L)m2z<<OC%Cx=|tzKM^_7nRO(5}aw1x~%KZ
zcG4b|zVNa0=FDG|h=UPO^$&2<P*5Raw~H_C;p;5ncrj}73m-)wDw`K0ME%S1CaPCL
zD~<J+X0mluR$>d(;hbYTkh|`_qT3T0Ok~{iW|ZKg-xj>niSmE^>w@v6l|bSWU)YtC
z9im3I8%bHeX{+(;g8aSDjC7rr^t%)p0rrH;h~F1eW?uZf;D~a1P5NYq=k40JhI9X^
z?zb^^k@b6?Otw~J{dy(J;~d@6#ZD|%gPwP~rPIWwfgg<{)Qa3+qS(qpitumjgy7+p
zAnj&mL`jl^OX3p<R`hIuOS3onTRY{l*m{cl;F(miQ##_Wt!-VSuqWG2{G#AC&Z-cL
zR_UY}qE==S%7|*qsiA>Dh-W!pu0df$<}?hEbAD?RrNP@6;g8z3e0h_-3-G$*jSxBC
zcIR41Pk^pr-##19ibK^!z5^AHPULG*)MbUj{ttz}BqnN;N<H`Tj+0@3aoGuUPD#+K
zE+i_A%;@Ggf41e%5s7R>F+*~mes1E&g*IG)Q@DA_KJAXr-%}$)19-ZG{Ztp*^@NX}
zH=B~NZHF&^s{cL3Q{M5KsyC91;oNSx$u`h(qDK4_^b92EuV-=q0<zv}>2=kH9jEhS
zwF!bHt`}AmBM&S`I+JO(Q0rE|-;`u@B_xMMY5RE%__a}?<FiD~<Qq&l!$`Qu>G?$_
z9~MV=7I%G?okx~}6TlcQS`0$MOXCyY&dQ>I{r+&7iFQ)d5iQS{x!T9+xSVF>AGgg(
zykz73k~Yb;DCeigr#+*mZ97#CN$^)b=Yb=bI|7tB|1)XARpveM$`E^j$1nZV4>EZ}
z1a;FEyQCgh^;R^irKG>+V;Q2thUmr8^KH4si6_Fwj#@_UYWKHDW{O_-{w2OXhc-X9
z+Q0&Xf{yBgeXP<G15zM2l$<suGohT%NUl}ML}iBGp1PUcm6q_W%uc=W#V~%R+)guV
zFQ$6lrxdIMDZeyaUc*mOiIiVXf}Ubl!p5t9`~Ki#i-t<&@ne7TprR;Q`lpuzuG2Ae
z+6$bW#nTycB{!(PxQB$Outw5NX$JHu!UV&5<kr0>l9dpD=(dem7qp}6evQA_$=e|y
z!$QP|yFfN8OQ0B=4pZc|{6o>8V`#n0!s>08vRK}r>WIw%4G>-bgQCT}Uf>Th<I)r4
zHd+5e7CG+^gs^VV)BC@i=NAJxEG=2vo38s$Vibub?2D!`OhjakgX~df$~4<6$ayL4
z=mVfLPI@Jql%etpq&nAr$i%{)pJ<mK5?iDl9fAs$909(CBJHEan?bqXyrMI6qqXZ`
zuoNaY{F*Ke&6baLYK_$GXZi^CyWcd&Xf>VF&bJUe4F|h>xbe|eA)GV=@8b!L1n*PX
z<>Ye+Oy_!C5S?T#GfDWnYweVKEZ0Vs)A#sjv!tXvl#WLeNQx6VB6b8Qxxa`Y24vBg
zOt~FXTIgR9`_{zC(#QQ3GQ0%8XN_WH4=-1+qa+hld6>W!$e^5Lj(TB(kRCuINV(1#
zL{!2H{1X{XoKV<sn2AJBw{r5De3@;cLN)xAPxz@CxeOPjcvXT?@H3_LbiM&dZQFg6
z%yS!C5*_q(8=vwxd0ktDL}|=>9FL?IrA@WGIHN!2?BCTUPnKM@2I>=SRka@hEU`&5
zH}roVNm|Ccq?sF&5~&E*>i8E^#So`#EkqBPIeF7hz|<J&1;Rh6v$(m^4!<s_%&F>=
z6MEjZfp`U!Em#z%eI7<lee-vP%7W8k4hfA0uQVQ@K2UE>2gW&(-yYa$&`LK)dZg^P
zUt6rXEyM0lZPdoF_pyiD{^-zY*&oA^c(G$}ymCTQ4QHn|n>G8SoNJIE6I=7rYr>2u
z?ZyLFm(po<g`Te+fqoSxv+H}LeY{)6B&}xd-xAVF(KR7JG%H)>kaZvQjnmfI>f=X9
z+Y;A`jX3)wxV~(_8A=L5@&n6s%$5*z*DM`P%^FT=8iGGb<dr<MU%ye%TS6I1!x`r_
z+hAz&!o~r?Y<K|h2biKNM>v^ys~}7m6<0z-=!txIS4?bC7VRR6)_M8e-%{wu+Vm4l
zJEGrlhhkT)9h_=bNNw78ZATyO957a46@VOEX4XuHn(+Bb6L<8{aQrqL0d(YnbfZ9o
zI;P-FF`S9Nb`}q<!!7c=)-%u9<qM`9^GVIj?N~0;CG+3tr_ETyqJCyJr};~N21LQr
zfrIaJb<*Fhe#4*kS$D~-xjuE%2h$(})ZDt+CRYVJzlr1k45dH3i<ya0f!vqw?5UB5
zy2NRx%-jAHv(Lgtq^^rE^pO!MmDWJL@E(qLp|N_gE?sK@m#ftP4<nO*R9K}Oy7QGo
z`X0{{OK;JQTCo3PGuJGs=98<6`?IZ@)iFGbv-8uZ=|ZF6{$hF%3x<w6ow0LZ@tuP~
zN=|DKZ`Du;QV{%#II9B`)C(Q$VC6KpQx9W=avI;VYSUE->m@edP}=MzQUZVk&UUsJ
zKjEetFNw>b5$d;27D68ze_{bbh;V%%nDzJ{zUHHF2fd%qU_$9X*x}Fa)iuf`ar_S^
z&1fk@Bi$r+I{sWR;(s%tSL~V<e4M_Rle!p8Vr#Js1UV^}KNCr_q+nV%Gl7+E-xMT$
z_lJ<)?B)(F5K-sa>==Oq`QaZRa6vAfB<2uG(}JvW-)qHZda0b%ZGysuMwE5mE@r<E
zjc&aCrIlH29cGs9EF%ypQM@*Nz;oDXBYv(g&Zg|U3Ck$bd|^w&Zo=6jtcdVvI|+u9
zzlvd;ZH!qh$SjMP>o8jGTobWVuP0uzaBsI>1GtP#-u+fry^@{DywCg>gNv@(w1KOC
z4V`4>)(^ZJcvQ-hDoQP_b;VGZv^_6ZoHFuHS{GJM?t+RCYS0y!L0AGz?{#tps&#h6
zq6h$=@8;2?-WxH=WcTT4K;fGcvW(ogStYC$5$nQa6t*~Pl{tyF9=a*cZgz%;XC)ZK
z&eaF%rx?YZzRsI=Mv(ka-mSz%Xrq;FVef4AgeZ>g_w|hsgjI9_aNx<Ev`3CoHNM>;
zbO(qOe)!nQQy<SqY~{0j{Bg?B+i|#3FdpyIvu8k!DGPaTmAaepCR;gTmK^kjm3Pew
zKb?WZ1$uBGvsdn7n1WpRjZ2!8ul%>R)Mb|WX0Ewvs8g>sN)Pd|1w^9_PxW$wZ!NTH
zcC78L>etLXZ@NW>>ZjTQtW$ANpm6^!&eBo0nN=|pF>a7QpAFHVr<~m4kfrC0($*+h
zy@Rv}NpT08Wp6hci1`H$w{H1lz;f@RSm~fNe;Et}cVQ?lc5zqtzb-duukh$yTf8=a
z@)Q33jOX7vxeb|_7H9+GQq}4p_|oFCsn}6B)XsCVD(glgOfV8@2*nrENZd{Cmd8>L
zAjAK|)+G7|88yX^m19o2G|pH#ppy}3jNQM-+Bwd{h7OSEb{xN$p|qo{U$1jP+QKTh
zkNB1?^!eU_7Tmcqc&~-e452Kc)jiSsusdd%svFhFE<ri&#~A5ACp~gVxJ+9wltEjg
zn=CxyId8dm+2%k}udj`^Ur1F8CSsN`X-MrZiqa~uN<f!*y7KoREnrdC^x5U6GIjlu
znxfvOJZv%>x!$&>R=zPX4Vz>|JKwgDd$F|>zuIRrO8xGu>ylVFxDf|e1e+t}B6E)J
zj=x<ladT>kj{^sko@?TFrdb#5I<1+z4HC$L!;Ly(ZlLb1Vx3GN--}jc$N3>9?IjiO
zKmKU!uXsfU^#25VB(R>`@$oA?>m1aKqyW6=T3R?T0a@iO_R*Z%s~+fNs|01%_W#DC
zq3&`wi@U*QkMtYLrNqVodYyGTq~ndaV5%zNG8k3x3SeNY%6BA)Y@2H3cLW)8K)f!<
z&ef&H)o%5diAKFPD{Rf7<i0g6%x6GP&V^GB*gGUzycAj|Ob{jk<VRJL-_|-ExyQ*c
zK<U_8Zi(E9d%f%!P->lT<UkH&(r};V@YLB4s=HW3^Il+XLqrb1$Y_!3T0G0HO<gsu
z-*yu}UXhJyC2Fp2FLSgJ>o>UAqI_t=Z}uU4p8<>F-S!OD9PbCF87Z(hg8bn>f6%%=
zUN5^k93bt1`t#>5QPbtoX)7r8%)vgQ&tE6|q}#iA)gb|L^_gB%x|$u?*TkD<-ajv6
zt;($oxjF|8!%(=$&BH0Rngcbw|9#F)7M}+BXxd_l<fr#-((t~RrsuE>kO?%4wGmb|
z#X;2zz!T!EkyhS<x&f*8Djc?fe0`joVpdw`tugX97-`kpsvo%#%G!mUad1`$WR%55
zgQsQxbGO7xn+*vn4GYiPe{5nYf$Vt8LBkq|0HwIQUfT;W^sZ^<itk1s41q_&9(?hD
zISy7Gtj^$<JDvPIA<3?ROc~yeBOPKt>M4F;3oZ{EtHtB?xmk`Vo*V?riegUe*>xOv
zqBzOpl!4Ri>%tsEuC{#;fCEmdgIkLx45@Ep^e9UE!NmR&<jP^D5RwUAw4<Xcf_GcH
zB;cfY{cl!zYGiY0B%46g{;tCBgm!)Dlu^;1YZ7zO2fn(9Oi#Nc)Xm(Co0tmsckFee
zv`i<b`d#Lk1<7F~PSm|{-)~GV&eutRUMaT7jPW1qMd*RLcTy2ja5F>Bt9EW)kc3M~
zqN|eEby`>I{fk4~{P<xj|4zWa-;CsXhW}QX1L!<-Nx*w(Yh*)I<*Hj6j8|*o7%f93
zEX|7V*iaa|@fv!CxI??xU*)Yuy0X`(3_-joZyKY>Np5i3BxssHvuMgu-(D1FAr5NW
zGjw+Wtz$oQG#36)>3rQJJMXc@DS5`tFutd;e{Z^-N-5}?WR<%-2|B9;$FR9NjWmoL
zZex&?j6H)W7B7shCM_1;0o_|OEiNvbHJDQrw098U;4XoidE2clwFOlWBe1aArhfOc
znL1XM>CBb&pV+F>6j~vICkK|`>)mo<uHR-=gmM%|bs4%U+vd5oMUs-y&!OE^SN8N!
z_%*;`|6g|LD-LI5zN>LK_O@8ZB4=~*;^zs#6=e|5($AvtxRfl1KQedUbVxW}zc0gC
z<yL@Mc6|4~M|(ph@4j6^%sbU3y;#|C<Tjxebn)N_<RZw&FEM`wS<&Am-Q0_>`Fn}*
zUTp(gje<#pJg(r(5xM1LOrO%4{S<~S1Yf6xi8#=q*V203beiU(8?3UO#~V>Dut|F#
zt-~o`+ByzzhN5OqS#g}YYB^2}7saiO!rOyX<MlK~g2TUh!W{?bI4gp|;&BgEr$t3d
z+*ekaMCjj1PsUK(<f~;PM??$`IcZd6R!WC{Xk^)dg{6g!E8}QZ>FD`7dUxt0o%7|i
zi&Q!_-Yh*_QZ=Ilf657eY%xz4(oeIv3oLbET{w)ZV`7U8wJvkHX^);#ajVW*<=Ou9
zF>($o8-}|L=$DkT<yE6xk!>G@x}tP<Rhu*|dt3SgjsySrq=qw3m}RJYY?l98@F}O8
zn5yR%&vY@7^|ZZU=<b6Z0~7anZHH3}@73%ckBwaK?vnLfPt7|vTr}{Ga@5oslv(@;
z@m*8o#^+-#uaBi*MgC;7PCpx$PF_Zs@#B36P$2$LJL?aW_+kkGVGyD~QcbFvJUdYy
z2bmOl*4b<1k`SYOw!}jaqgpjs_C#6iBp9N;bCJBoO}>b5i*6v+#AO}NZ`K%}a?l*%
zt9(5xTS%~kkFvP8(Y5HX+Ceij+Na}dZSWO!unQrWUoet*shhhxa!y1&cWW*6?<#T-
zOBpHvP?)ccO{Z^<YR<V;D4R!Q{Ny)9-cFzUhW3knVWW*LqWIy>4mFX$qc3xYWK;fb
z4Bg+`+wCpdQLODzu6uQrnlR`iuEt15*nD&hO>7#?>zOnL@rlmmH%Zi^u|eR84fIBR
z(|#mh;Cpw9m2;b(ZX1&+2q9s3-s#O-OT@ypnBW8|V%B66|N9(iGkUVi%Zp=BzD%u-
zekdQ?r>8@BNlcW7uV_&`aegP8I!v&czC^lZVjYFR)swOoSsko%NE*AmWIU)@$8^#M
zQEP4z7U^VwXGsVCekLu5J<AW2%lAB<z<T6d-X=~2(zMywqFkE_(OZ^|jf+y+<7=D2
zJIY5w`z({)-WaOD`OSTYL!=cw6mnhzzjD-io@<a$PUvn*pZv>|IL%6ipRbZB7%LYy
zoY&$*<?314vwCy#Cr)v<@z1f?ZBlr8<-FXh*@56f|FOW56A7~0zdtLNUl=&QIFO77
zWD_><#7%~b^1Lc%P|2?5RQk-^3hw}WtiEz*8fGd2!y3bUa%)0=+wY|7eVeR>XiCFA
z$uxf2EXZk+<|gkzfqhQc<3x5E&`{(dk=6p)>ROy!oJI!;>B5z^UpT?R`|>%RbQ>`M
zR5Z1`sX-!uAxLF$x6e!K*ng?H9}N|ygK9;}&>+6k91E9yxGG)S*fNZ0<79)oQQwUu
zh6ah(V&w1T#)NP-i_s$dES}F=XeS#%YM(PSBtj$SJ<HU5T<`*SU#&28gs+_-4Qb2F
z++<b11ies=njZ4IV6&m)dASv}#lvQVtmcl_P8zw%?#*7gceeK*pX~d`X#eW-Xg$t>
z(}+&QbDn|7)9t*{s-NErBPRO#?ImtLF{xf@Gt<r;+*pjCwZqG!(d|_?X&w{l8Roxe
zn!hSUyC$tKw9y&HRqe;X0q6Wxduuu%IR>>KOtWd(1?BNG{}&u9?jx@#*uDIp{|m2y
zi^?hNr3u$a*b+k093x{A64uYVNJb9IQ0o>nu=5t^uF+heG`73sUUiuG5fyQ#@8M1!
zH<pnt3#_ci*3O$U(cEq>uC$>;Y^8o_wepSNT+^$c364F#^3qv(vKkwOD?-2hkF7Q`
zmqAC6GJtOgxmxeMk+;}#hpl&12~ap3Dfj6Hjm60TLdc?>G8PzrOhiF=l_{UwIWB=k
z$(?bI*WHA%6pP&Pj-I<_N(^L(k8LXRr|7j6reV=iGb>@q2`rHmChZgaG5a?)@DrXG
zJ=&~wc(uKA!v?p7i?)2MNL6hAO{dL%b$7Fe4u0(X<fgWVq8{wiQ1Cw5)*-t&{t??n
z@K#TGC~QV2=iVKrMT5avp7x?=gS)Pcj(<j68*AfaxG#pjTWV`R4#>#8b3Y_Z)Qir&
zaEJ`zIPfW&WRXkg(lV1YLB5TMb;a8}9vaC)MBQg$<<bVeTqBlVKuP71i7lxv$e=<U
z2aS~2YZYK;ZPm$g^42p%T<>3}1|p^5DE?7P!rM|a%LC8DYa$-RXEw1rpBMSHhtbyZ
z>Nu;w&L_CBU}UnLe-Wy7*fU9#b#05m<FXx=HhDcxFIBj4T)V+~ZqdJ&FEGH!tG%11
zO48l<tX*i}$Pf;dTV;x6Y69yK!x=L#j%Nz6H=**og3**+Ha7EUGhN)H<BNRtBO^6&
z&8hAWq37-5g$rqG!7{xRZE7<;%Lt`uFQH=a1-WubqMYPwO#TV_ZKg-Vin6(tOWKR=
zw}co0huvSy@KAeo@3U-Xr2e>_c5%S*$gsGON+u?czZxmAd1|{|D)wBIj(!A`0<i^-
z0R4ColWnxf=hq15f@$^}KMJOIYuF@Oa-VqR(xoUnNN#?Vt;LSCX!OARiJ7~9QpqfB
zX~i~|l*3CUkx!K(ws?37<0Sax<8*<-=Qs0f2D?~u!Jn10afTA=hjm6hD5haD!V85+
zRjHB1gc5EuQW#D5De|MLC6mjd-L(9-N@EzaXx8Se|7cZDHok<uSos5L5#6KVPf&8b
zoPPY1;}N%*-e@~uVsdkOFOY*D$kOP9MFubSMEK|WMvIq3g^@>uX$Lu`G{GpEsT19Z
zps2ldv{Cx!nZH5k7$`PL@>71{Fp^X^w;L~Uh@9Uvy)|mkY5Dv`gN!WCr6;lM#9QO>
ziUn4Qiq%b%r4rU%7YF-MVbchN9jp&!>vnOF3Z*;Oi#Z4Khk;JXVc$ldBoFmGAFeg~
zsf)Q2V4|Oh;N8{0QIpO^w5LB#Kd@@xjJ_}=iA%xnVgrXi4ypw!F8aQy+bIWk#~vaP
z;`wihnO~zI)Bi>#wJZ|y_iau&Jsu9gP6o45pKk0b8ofvf;^QFzPNm=63@iGy!S@ys
z1tsA7=n4ruJh<lh=C<||vC1o`*MyBK9la`Okn5J#sIkYykpi?6_U?I(s6a+m@yXz&
zWvBBzev}%o=}1bH*(p%BDDq?C17LYI)STfrAaD(}NVai-{(}kqKk&)YK@Aicx5pn~
zwgix&Z}EzU*1!cLhKdy*p#JfOQgn+ztst=-;tYN_Ws<L)!WrspfY@sSgQVRuBnh6K
zN$>$wg6HbHY7(6P(`hS<eera!c6vlft7+DvWy6a3;_2!bZ$k}c>oz;3RoIv#OguJB
zwvICK>4}1jYMBwDX4@Y|eQIZuau=V3nry48pRA9MKD=(wO@M}fwy!yU#t=hC^OKi&
zV9MF>#o8v8nl(1X#3OTicdDpHCnpN7PxY^VZ-oRY;w6;3n;lvhqvp*&BRCahyX0}J
zzb06up?PrMDq;Afx=o7+m5T8ee;Bl8F-=lR3Kv%X%<qkY{&4YhfIw?*4k3?Dy8u5}
zc{c@x^;11$vS~x0@Qp5V%Byc$3*9`=n+2I!x~SSB%Oy8pJNRCa5q(NB0R{ok{9iDB
zXt?utvzSo2`LG!QNuX)(yG9Z{ZB?yza-fOAf#+BWlp8LL@7&bPH9veN-X70KWWdA-
zR-^Yi`0Y_TUc1VIo~A76XXb@p;S3{|%TNfOC)W})6Xd7KI0XR)4y65FU|&Fx3)dMn
znHj$7$wk4-AX~IXy;bAQn#9%g#$D`Ow&5i@7mv68RX$CyX}haVCnIB|cR~aGRJd(`
zHz$F14G6|HJlf()`S~}CMn<39Ih_I)-0)M+wJR2*$?9*>4zVb1#lIPHLov$sx4eFf
zdhfbUDn9>fqc+aq;+=Q3H@m+UIWWQY(LlDz^h)Jtn3n^)0)@}Fw#C=1Hx9M5$Q!HE
z{Sz>iLd>avOi`uQOYsEz3@|W7Rp)jD#TWb{=Y!(weZ|*7!5J0Rjr|i808`YU(gIKj
zR*IVB*9Ap4`ywix((7izt`tSh1fpHy$NEnF3hq{iZlM)HTv7Cq`lyY&I7Kn5kAuP@
zu&8r90`Vk-vqjxbF9e0<aZ#_|_JG2<`Jz6L!$Dyp6}@*P3luO@H2B~?P+0#JC3N}<
z6pTvIu-sLk;E9Sxg<C*jtDtDy(O>`^I|W6Po>~Gbx%m!G(X`Di5NKghTr_LPE%+vg
zr)W+a4{2PTXP$*;B#8ynuv35{Lu#ClA1w>&$52pLULC?u)HMU%6jj!*;6q62rUz@d
zO51Ib^Wbu(IRdOZ+djklgQCCG@4xIKn(k}RfC=T`Hk(d_#OjgfX`+MUomY!mr&i>M
zTIV7>x=JP<M%J~1TuX7sz<&wyMu<b(BUNwx{gILD-Rr(rw9Rj<$e(8LmVYW5{58}g
z+x`<`l5L;lEatY#vmQ2b@q`1fu1z;kz=5|)bbH8^uJ2W^h8a&d@YXI(1_c~=>wfbE
zWC<L28|=^p5DdJ^jcSU{CDMDBUO)`f9RUlc0|wsaBe5GtFz^~{>;wfEc-yYI0tztj
z#vJ($6ky=(9E@m?VBqc6=wncTfw$L=9-sgNZ{OEOfdUM?1Kte-#o4{s)}R0bZ-TWp
zD8Rt`QB558q5~z~kw5kVAo%LuYf9xx9vy8Mc_$wBkqGGb2fWtQO-44Q-lTCH=MWgY
zv;UpUf>Ujk9}B52Xy?$fUh3jG;zWv?Hs}UFR9D<9W5TeyvxStQtl#RZ9Dp4}{8XOR
zVQB<Wfa2fe`!2w*x{P_3MJIbI%@BO{52N@WxH<gF5+;<NmzyeAGIN=$u(7Cq=BGOR
z(D3VY8$Y>t>uvGmn$9EIXSYHKM2!Btu@)~%0?4g3NE8*O9Tr4s(g{KQ{o8gyJo@Cc
zAf7%tB8V5CY({%vpg1u807MB46bA)Ed^*m`6xR^>9<m3;`uk(V;pXDkCm91=GqGD%
z9Qti8ULGH;TsRXrC~n-g4VduNyezklAO|EAM<tE~1tb)=s)YRvLPBwytrI{23B~Ql
zzlAnHLUBirj)XyhMsfFHBIp1bihI9i<`4&XD1NsE2L^<Q;sKw(V`fAY52=C$0U@F|
zVfJsJAduqWoqB=-9*Rf3+z$$9C?0os2l|4QES_8o9@45C3p5l@`^Lj_qd2Lst&!(O
z@$B0MAs}03tRNPeqL@%pRcn<>7M6b6{t8x1#L7`Voj%Ed6ij!V^#;LztiNoRVan#l
zE_U9ivR&tprMuFE3xy*0WS<o557-gqF;_KnM}H;^#~N6;zmrK;E>O;V<qNE2qB7;e
zBbyeWsuxqM7^%!~<v#zb{NZqFC)?CJ%bswVnxnrXIx3ih&_dKJX=u}Ykm3GSg_i8<
z!|1P>zxwZb*a2et-&!YIhLV6G&7e*oqNGZ8Up*gpFL||&UFVtwM3mHCZv!G`0THu+
zh?2V7K7j0jh?3Brb3p+QC5`@R3M~K+B~3eHWr3&-h$t}}V$IU!s*)Bu$QZSOijudN
z7MQfJZf5179S~6xYq11j>=b>LbiU2OHZ598dStNiqdnA;xD-1HW-L%q@?Nro%|yxI
z>3TYhM6f7HsG4DASd<J~FkZl-WaJnmwZIs#C>fjOra@3}UNR{S<^=<S-7K*l?}Pzi
z&Xmmh;8m1i&Xmk)(N#!w-uF(v2@Mf0s6I(y6{X@%XaM3*WX-J0s#b@1K+#|7$~CP-
zvo)KoG+juc>v!>f5GlbCynz*@Zd>T$dTPd?p9Ha|?+=35|FDP&<?vqXD*~6wF_jG<
zaXWcUC*zN^zevVP)=sM|b>G8)1*_|iDqC6Aw_XticOO3IF{ycvhH;6(JJZL5EIVxp
z&?doy6G=uYQ=e4!iDngp;Ml3;#kxolL6in|8i);c@ukh1uB!BFdJ9E@Zcr155cnvq
zV|)M#_$aOS&cC35kJ1Kf6F>nSrA<0LgeriI(y*Pduoku$rOjS&kVoF5wB_UhP#n-v
z+PbTU7Nq1qO4XseK>-`3vH!gUFCe3|iz6Boa8cT$V<0G4i_*B|w3-1dO8fUf8VLMh
zFG>g1wUTh?8!V;qXA~oc5~V{ekPpG4)Y4jC6L29|l#WiVr|=rTbo@pu?Me_ZN~aE^
zpK*XgElsMu5u7k>N>k1pW%;z7SGy|03S`}^3sO@73sCfz`c?hEg#eeG?JS5@zsED7
zq))^tOA||X!)QuUVrFj9bAht`eZ4%0xVx@RCQ<jcW*Lz_4wQ$QsfChx#w|DVj?GcD
zcv?Mm@T`#;o?Gtb9<pAfa}TO}z%K4yz4rYjCY0<x`l=e*?yk`Bx)dGcWldoYsyFd_
zu4gD4>*5}Lx15zLnV9S2XRmW5rJ~qO_d@iuA%K@HjzIvRv>(oE@-Bo0Sd>-E%ZIQ5
zi?UkpBligv0~lp>mLuRnIiOKiuh2vWmB3Nfu!o!G=~x(!GNrMF?M7Mn+89tkMp;yy
zZKw!bl)W_;v&F<)9c68H^TZ&lQP#dWucF9mly&^v%HSyLdj6`JZAMwoYB()TuB0rk
z?LS}zV3hR_g@ExKHlu9d;cnP40yN6v>w`ORQTE{_xOgKYqijSzueHg|mW{5&hMNvQ
zlqH(Y{5n8K*`$?xu7VcyW!5K-sycKNLtolF{$4fu(&m`%LAA~dTTxrwx${k`MVIP&
z2Gzbep*r2U<4<kg?aMdu=+a%|6#nWarRomiQeAB=S$8{;x1=y}JQ3M9X<vf`<Y_)3
zagKKFuE9lgjEUoE`*j>S3Yt2e*lGxzXzF-64>aOArjDoER^%)2f|xv>clzU~Jjx*<
zPv0|q{fuPf8Sp7~+EES}d4>cAaet7KC*i_$Of`tf^U;g*bfB8-s%O;5a!?SGXWWM?
z(F!8+O#FK%^+FTKWBq*!rWyp~nfWrPIv}K_?lvy2M4#TYic5G-zO+Ul@_f;~8(t6~
z@_hN-hoAr<&l1xjPymo;`H|7+1n}{EeL8`De}(*xXYIE83PX2e>kw_TT-~zb4=z)8
zG`ou?B%R&&GbwOn>Fhh!Ks-Lw7;~K_+R=G&+LTmJR5fAHB$!`jKmelR`5Kx>zql2f
zQ(R`anq}d(H)p{3aFO!o#5irgO3kgAVdiO6xb!ynp_ZJ!COZ3jenPDPlTMGTcFMzx
zF*S+cKg!>~$uopR@w_Jc1`<Y2rKPikFmhfgNfN@ysWFNG2VvwO<gQi;Acin<>TTuy
zaWb?y4F@zgYT3G#ZW<vO+MKXwWAS>BNKWK2fEhIKlGEyTGVLhQnk^@~mf!)*<g{P%
z1~>yTIi0E^>4Vx3Opd8d5W9UKCZ}hb7rg*4IdM6-Hzj6OPXCn%OaYgiL3Lf+3E+|w
z-<@->G^=txT)U1PH6W8SqWv!x229S!TeF2D%1OMn1&(MmB9)xUUCL|d@v%+oXap)b
z)0}#42pQ$fS`r~7I%ianrWMr|Fk0wh!6Q5GmqN&?V`TiMq|wznp^sIArkPkn>5bC_
zn+-jXzBF>#mI6SRkg+2)MB6o0ckewT%J!C<CF>t!gERxK9&K2{ZG%tT*6vWKr+Y5v
z7V7zfSg(<3|Gg#*6Y;$ggR5mGCT}cr1&T2#x7Ru~E3bGaysO2ZZS&I)VG%>QId9qG
zT13$Q>R)fx5=<X_Qd1C5bcKR@#Ul&v1fkZ;4~wCC03|mtZ5+S@nB)dEJqHRP$*uAE
zYfw8(O0GT)rrOL_H@9xdc{T%pNp7e!ld=E=libFuU9@5&nB<1F3?i(PSI%wrbcBUr
zlH0Nr?}GjSlib#a-Una+lH7I+U_(IzCb=D#I@pH7tmK;XMj5W<_FO*P#Gk&(joaqZ
z(Qjwx_CJHZfRNllCnEI_78#Y?_kaJ(#M>RY!#018?T)d)NUr6@7`P>5-mGH*lH4(A
z9^y+YoZRuh?4)s$Ys#IHs^{^;uH??R$TV4&+>|Nz%&eZd8)pgu&Yuw}Kc%~9rBKt7
z(+QkvhD`0&#$2X;Q>O!1lW5j%hkrH_6T=3v996cAmkpHdSL3uijk>$lduAaO=Vub3
z>cRJ0DvX7rv5NHg$45CeSg5B8$1-d6+`v&hK764eQxNV3H829$*xYNA%)Hn|dd_<D
zNq5Ktlpg=9cOJR8vXXmgG2f?jAb~f1r%cL~KENk91vlS!lf=tD9%(0y5mKKuXP-di
z%MC`BAMlb_Inl>qH;hVNP??Z1@RC<6+Q#J&N?x7IZi$z?de0T2DJ7BDaGaa{bY7E{
z?Hz1W^1@%kM_-LBn7qif9)do3>b#aWZy9;jm)H8UFHr`glGiTrXS_2^N?wN_%j;D#
zX?OHGcv;Z^OkR&)&1BCAFnMvEx(dML^?$b$j7lN^lQ*c)h+pAD7$bgs@9|bJ1X}Wj
zjx^EaCA8#OlI)Bkpe1k20=^bVflS_nR}r^@Ip$Q}6lWhZ&#AoWSq;Ghb1LtXMzDEC
zmff6SyPVJS_8NK99%5YZwM~ZgsV&p#JP-+YSyi{(Y+Sj5hfk$z-r30qFhG8L+%4_I
z=C%?W%65;9<chk6-HTn!$r*rORZ^Jz@q1uQ@INw=fBKb}9@n$(h&=VZQ8GREc1&;p
z0$p6yQ?kCoXC*-JAD6a@?`ER>+8OMd34Ym4<?(p+?rXETOwD~J_A->Bd-#z!BM+f$
z6AX)Z{2+d)D0`yEj=I8+D|W#-@ngeFgOw*!e&s;m30i=i$qy<qGoFB({F?Q3Y&+nP
z@`LAFSqrc<`Sqg|8$&0*;aria0d(?}I(iZ)tpM`FzvSE=ePb^_s<ux{@;&g79Vc6p
z-{v>;4d~>z?+Y7;z5$*5PF<bU2Tia1?j5~+Y<>dZlmE_bdsRJt>TaR<X}%k7zya{d
zA27W;sslXvga38&(ih;#Pgu&?O#)B;M-#vvbpW3Hk;kzW4H_mnf6M~}>YxFj{E0XC
za|2|S^Q{xal*2U3pLvBpKuF7^{FKX|*hzls+};ORddmDr+|pz5s*B$Ln}w?`J-1Fg
zT=A8nxi)2Wv-2`YS$F$eZeZ9n+RDtfe*YOaH0<1r<5kf25Amkz@Crok+osd7Y&g`%
z!bLyzwABp2%7A`9&(%bEl?eJ@J^in?{<!b~@(>F1zNmySp<Jz-$fs;k?`Bo8!54hT
ze~mP!l1uZ@O2KiR<^q+Hy1dUs<G8=jU;1#kS)%*t)=bTw8D7{NY-S27U4|Zkm4a6e
zBq$IKd8L9H!%sOGD+R%I%w%iHD;3m>;FOxk@D-V9N>Kb#(72H24~4r0VFSN0v#BYF
zBnyC+z)L~P?wlhayc8J4*>=K9fx6Q{7sjoVfR};}|N9|WKM96;65LZkmn`@SbO6K@
z^sqP>55P=8Tpe+93z#YB506T9fSH0p3YM?J;1t9keFzGODHs}!MJGA&f)OJxqbAT&
z@bOlh-ZW|HzD^dNEI>=aq$fH?8jNzmv?1py15cByAZedmf2y<FjkmB;=PrR$7MhxW
z$|{Y+;$;8#i_%_mNwus<)zdnH)UvvZ_=*k4b$cyjIH`1F5&VcCw@%edTbNPHLNk+g
zs|$We40j^uhr0Xnyp4$9KMp&5(qsN?yucjPlh-E-R%fGJa`!%KQi8%gx$o;`(&+kJ
znQ&5WHD*!MQ10$<N~@cf>Xcc$qPsSk!uiV@CyypPc%;aq4^Q;|0}B;Xu^1IYdAaGC
zQ@i-LKo4O8Lxn+q>S$Anw(kpTZhs7X06~Ry4mio45P}Npr_Vtt%uV4Nm^m7P3g7(1
z%ytS0Dr{Cy&q{-23R_%Gq`L;zDL_!6(WI+RANRCQ0fGwK+OQ9WZh@e}*i;w27p)Wu
zJMUhDQsAes+Y?w_*f!v&us1EuVQ>ojZFVtk0iVKwzw2q9jRk-T<9nDHKZQeSLk~lQ
zwJ992*Gd{7Yg0J-_-i&c&4uItTO3X`fS$rBcJ@NFx-6WbijWJ_tuVPRzKV}7G2IG3
zoh!AjeqK4+!m3)hGe~}w`m4T9E?PDbAD<G6Ts75yDmXoyXCecsvP}b>Ve3OauB7Y=
z5&L!Y0na`C6PoBEqm&r>W53sbRv<IjDIoLn6}J}0D<}76Di|JdJ=fVoawIZq5F#%o
zRd=%#GnJ_~3?gh-Zr#U5oRRC@yY0VYn7_`bSyH9=xmnJM`<vX-C_Q@LBF|u#XR)oP
zo}OpG?Vu+*fzaN`ki*HRstewAa6YwqD+kX%9Du9sb8=B#lUp8uYY-eGPg^!A7V{8^
z*N7m|5y&Wf5Dch6b~NmKZyb<~L2~qjE<l$I;ozp98nZ#CaK?0)Nly|-QMX^mGokdl
zVq+nJO`i%Qfs#_IE*%dSg@b=Gvuy^M&|S=Nki)z-n%Gpexs#_j3dgy4okj`bNiUo%
zS&-AVGrXyE)*e|Qcur81ki0T4-fz$sd?KU-fu+9Z(}E;*S?w8k7nH5c#<x8%YLIJ&
z_(P=iYs}K}Z2H$IZP&I|?$?D#^c~=>rU9uK>k_}}_ca0Pp%CyoxXY}W9pz|sopvoz
zJ>FxAczh}y?m+Z<u7zx`X5IST$gSO7u-`2n-)QWS-QRkm)7FT}y*?HRll*Y_5W&^^
zLY&q>|9_2ilGte||1{Q196c$rY1mYr^>MO6#hDddjE6v^R_Qj~C6H4ampCyJsI<24
zks_e8-p;!sC~NS8LzF3Z%&!DM5YwTCh#PSRI@m@q8Rz10qSRQ&#&#WK+YRX)fP#!U
zVIoUIimq>`!Gnqj3&L>0z1R0eOelTB6z$TgGGL&II8uYIE*dsbN!Yg)H9vZ7XA6*I
zOS~hGB5)I&#)kf4<*`pZ;o}cFplj>$@;9~iQ;jq<;`Bmra^SQ<b(hrOf{yZ{xw80k
zt2F3o347)Jf)xc0ZBiOmcQ-Sb*6-q9pXSV<V+z*VGfaHE;1!>oz8MRJY|z)9AiY$^
z{!xlN?{K)Lp1+KY3O}#*hxe{hkETxbjO#dF508IM##j|5FM6y}+t;cZrK8O5sFU6P
zc}Fi%lv@|Dg|J{?y@jj%cW+APIJIy|{rgHKJF|WC8K#ct;c10an>vOUpSc(=fy2g|
z*!Tq1ck*#rNOCjBFf=Xo53T$j_#uPWvFAq<Ws9i>-QS9#JAaKk*cree!!9fG_Ds~2
zxRx|FIG*BGK}KmV+GHr?Tgmklx1ZvZcV9XdS)@JaK8me6DKnI>`jF=-ez!GuLZyoo
z5)e_<W7ufp+H!)e^I{k?8qV-;9%&dquA<Y1V;Fbb%=npH7e*Pr3eLG0SCCo0Xp~fn
zY!-9@a(0eM`gz+4s}{<r3w!;K1*xWX(9+InE{D8qxiV1~su`0wTQyw>Mv~+}I_MAo
zXAL)p8zn%tS9NH(4Bq9GzGBZkpDa88oM9wrpZSAbD*c$^mS8?P#~+8Bu{)&cxKQDc
zSh={&tr;oh$|H^gh}j?8eUk5;uWizb<kUCHC4WJxFx049qL^g}cRw4_6vKHK<0iq=
zBD?tC&HnNHx5>`-wcHRLFe*N>xh;m4*d<l&c_RpLkm#!+(*5YS;@bqXgssgm@jSuv
z(7t?R1{#g{_cSZP(6on%n;L%B$qy{HsA^@{qQToM?M-MTh*L`1Ubb=fFgLMdms+@0
zXAg$NeXBk89uk9yTjbVh<9TnchvPeN8k}rrWrIwpVU(rAQY~yGP&zWnr?FSYUgn!{
zBB{7iCwsM?4g@k#b=C-IPINY>wL_ZsdHZG1sw@aLY34m5b)SjnQT0dzWfN&iee089
z$C~Z_ChMKfrkeO2^`(Z@ZA;%|m8cmB;xK@+XP{Nvn^N~zw8J1A0m|Wn;3&vrJ;d}v
z>B(C<4M~QxB8FD7oK6|ty9*E!33Xq8D#I7`R*ji9W_kCiRYpvC6=L!rB=XMgVC2VT
zzan%ok@*aMV3els$*X1w-HHUOe47_Lgn2>06WHA*PY>U7*3@~0<4Ir%(kyRpp&`)<
zy0l(DD<K!9VVl0edD$4;{ZpHC-+&QA0bzS!FEJ97MOMBcA{u<4TGL7EUQV6>sHl!)
zk4{_Or5!4X`G!VazRNQc?+DXL^oIzxH0~P{uh?N=OZ)e+(Nv)bwscSfi$q0y7T;r}
zW@Db3sdIy+9goK_dKu0lp}X<hF!fA4#Hqr#(JHYt>2*aiNy+lh^m(uI4_;_r^IY!a
z8%^Yi8^Q8|FI2cJORvpIb=6g*v8gP5nj$ynHcT+ecx6jt5oV#n_K*B7YIj46T;J?%
zFD5T49C+@L1|svKO(PA*K6fzxQ$NA}DombR?UUP2zg4zso<?!UJEg|2(N}N9u(AhO
zrG>h?8dI4|4SAP2U^9593SV0`(JepY<GZIwL-{1YCv8*3-#YEPC*iFJ`+vzVf)Pj%
zDQ49W^%1)&qQ2oz*NQY_nfUB5O8fYoM>rfJLrK5MEkl?PBbgX#J;_DVCTbr`h>}EQ
z?Ty0__@Zo)j+`k`7ab%i^1x+1Ys&yg-@)8WYu&^qd->T!Z-X`wjiy?;?R7h;jJOmd
z#umK=-HFnucsGfQo~E10ixKsozOqiQn;$!}Taez>v+;>YYwXDGLAB3}YSmbGJTf>o
zwz>Yv2LAoN*ya&a|9eZPLrLC5zWaxg@Y;>3B;r&qezp%!iZ29JYQ@yOBP{B*_=K{x
znBIsUM}-nhKt*ghW9E|D7icz#Bx3w+j2*QyqNt1{;CW|oY6M!)F+NY<EYakPVzMpd
zZ#_eT*0Qj$81^K%`%v&jd$*q9fhAUEHT5Yi*NLemMH@uK<C#V(iMWFO4B8y<Bvmo%
zb(K(O+wcHgMr0j&>5BoKwUNdlDi_(p-Iev+@SQQ@-xE#wU;TyDdf2_94K~l(U7;G1
z)s5{(8yVeO(m&7^qRNi9`p_t7dhLExjet(u`ksBK?9zQ63Qv)%kfRG#3snt1aYQqb
z>MtoP#f&*$CzQ%q2p2OxkhAk@c80|I&6M#PBjwL&lD(SyTC(6-m=cBdG?0>CGo)wv
zJ2i!NlOT$)tG6^kd~}2y7fJB73p~f48q`WFe>1Wqe01*QDK2A;%ite+gSPd5XAn|#
zAnWZ9Fludwe8Bbvg-z0r@C780;Q`}$PXR_VC-St#%EHKLm6NR(I*X{Ah#{h4dpiz9
z2(nZ4hGgPsJTYqt&U7Isr{^k&8WrRIe#)X+iyK*Mo?EzVP=gD6h!~IKd-q{Uf&6e|
zD7)#kk%keS-BeNiIO7*+5rD`^^rY4gFft^1Is<h_1SF1Uu&Y7iS@yNkNX;29ot9#&
z3f$t&A=8DG9GYp3PMtWTT9gt?zvGv-B}$&=T9q&#?}M`Ra7D`}D;xTLAmj8cB`yhw
z9gU}T(YWqDD0~E(?R}B0DNX&c>vSu#I@%Nwgy4E&RH|HvobEebhVJKo*=XXLzrU8D
zXf>~NM*lo$^~Tp$BR{^qDM}`AJXW6;1V-d<$2&pn|3tm6yC5VI*+)X`!KavL;@zKA
zHAw?qQL$MYyZX{%z+*rqa21b|W=n2RWD19)grF~-Br%aBT<K#Iht7OPc4&}!=y8`M
z8?S%RhB`xOSR1x!L^gYAWSN0%`QRzdLITOpp>Jtb+okrQ@Q?~uR-<u)il}$k!zEv5
z(<UuF%K+2_@BY7qQq)U@X8>=};PweKcRXx|yK(@xP)1fp2s+kXnS`?{Csu1c{(?h}
zcgl(jtXPa}#x;vJ$mo=r9}_U>BH!HaumBU9o1dbS>RPm>z{vVo@+&YV9^2>oh5Jo?
zle8skcY7qc;f|HN1=lT8#iT<#wf)vWE3?|&7Cu|Ba?THx^ZwvR7v!?wXxC!7f;gU-
zAp`YOWgo}|z`6H}<#IR6F`lP7`f@jUsxgbWHr>ZK`EPt}iIa*H369+B7CF+Q<RiR5
zLhDlP*JMEYcI)N%ACL3M_~coeSn0T5ZnY5y(h7aF4XOfqg8tF5-2+)G)<q<qhyBrG
zJOn%rVy_>_phIEA<e3W3_9koc&=$|aLqo$5<53DZFLD!N5~1kA$q+ssx1O(PCIz20
zt43lHIl-Se=%sDeysjp{S?S^SkPQ$i!S2{yCwr3DAIJ6s6qZVvuaf3sBAzuA0~k8a
z%-Tn17VW1@L5}$f5rL>MLC=AfNCh4mZsu`KcY8Q|f&u%asfm?4r@q9AVctPBMY3+e
zIwwC$ZDZ83h3c{zqpe)Fa-Bu97wVdR{U8+wvVW&z<*l2|v4~Wei?Y2?Cu8{C%K&sy
z>U<?TTqA$npDh7&BvCJ|*zwn`(jcDNzg+sLb1JUGvXjv-w<7)L;fa&sH+a{w^s-fU
zGex51Zqrz~36d8ev8EIiaPWnZt7YHS6~lTkOebf{lX@P81s+#8Q;aN;mo4!xa8mhI
z7&$=(`La120y^G!0#QQx!HdmgstIMSqIl(s!iEdh(jpPhRV5@<R19Bg)+|TF>$4z3
zJbUZkdZJRB%h%zbINdh@YZ!3o)XP=_p~66bBES3R-8C`f#Mag@5q9Sk*@OwGIv`oh
zRFH$8yCoD7R!V^Cr><q=i{~RxJLU5+FU9=AFectUXXSUXPW5pXfRlSSg-X^&2B-KH
zIk!Imh#^D&^IN5cY2>2efCrZvmi}($rz=)iq-a;a<&+9tm*d|}+%zFn^9aFP5fllY
zJ9j!{)gOl0d8AOtzFpIN%=FLzL>Q19djF}fSwbViR9QdK6iA`Siw~dTqdb)GyD(z4
zV0n?gg>K|FR~ulNB1&)8@ON})!x6dPkn>8E^o0edO%lf?p%<h@xxd6nlb+UY`41=g
zariXDChg;kRNhu6H2krag8&3UuN*z?CM2mfM&ocCgC+zSA&d$tsn=rKyWmMJ{>o;9
z3XL>=RA^%BQ4p43<-If1jI15{CXFA@TgDwSauW}h%n0s)k^*%POb62ClTfw8hxVE>
z7`dFm`%q}rV=VH*)I9EuDAD5>EUCpX1{ub)-Nw`SlR8m0G$w<#QAAE}91=)0-j8?o
z;fMfaVt1SLfRmm%q^<oB29&!|k`8<11fShW01v90YnN*=W&U}Wtg!e?i?s1+bTASe
zP<O?$6zNS?_i$<0P}d!t<Q9p~jeo(mVqDPp)}&2LC>eF_5_&&OcCkn}oA)5&wLz0{
z-HBrM?|f3bKev0+q;+;Ok0&?vd)5deD29+V-6D;f`#+O}=k*188M@pGm!>27?!ikb
zn3U9A-ty3B4XZ`@en0rvEWe$5Pyur$x_DBrljcd)ikaV8_|0GLaMM&IiC6xr8ZT*K
zzk~9)NUixpT@yd6lc`7`)!$)f38KXtec26A<2OIk%LwL;VP<O6w#6UIgi-Bf50;CV
zMJY1Wj$N+P!d<2Fz7Ha3h+xz0Kb=%{?-IzDOQZYk=$wl8oq`GjucCJ`-uS*&786Q`
zR!xyZA92vZoJODVXg*Ax5OB>xW$KjG+e9}rI#s-`0WvvMFPDX%&KDnEa|9@#S93{|
zzi@9VPY0BKW%h5IF0)#t=2j)aDu6F4q&N4-(v7c18MM-^PuWCLg<Xy9(w+=HQeXPr
zzsHN_ne{C?O_@LE+T;LE9!zbgaXQz-s<{s(D?xZ;Fm<<Lb3y!Xv@~nxOu6;Q5AS<9
zPg`mn@;7-TBufHy(wyAi9xL(x=>H93`Q-o)zt;0TX7<ZZ@%7G5R(4iZzcTWY80*}k
z>TN|X8H%X=ubF2W$hz-1H2o<JLQHb5Hu=XQ)gDpXDJw+T_$PAbi#vS3XFL_r{25Di
zX<fF$JhAT7&Le$Bft8!s;#8RI^@m=2tn}4!O^W7=-aDH@!EeB{A^MYc!U_fRMG3uy
zqre!4-FL80068kw!~zF7?yQLTFcBtWflaua_G2o23XgUGie~-jU?re<P8Z$`Aj!`g
zW|f9z!KZATQEEsXVq*y|YYg9pv7+M2dp-%5H6Qpi=cKIPV3c!y({rTw&@Jk2i#7#n
zF1f2a5O7%#D?aDBLR;?`*pX7zgH9_87Ua=7Hi?qs1N9P+r#2e3e${iWTMGVJ9-DR~
zMRE7!eIa6XBi!saI{!K4Tir7Y0ii;Elu-s(#g%zq8_m?e#*MS_sQ(EI4cA`wNtsiF
zvHI-2lSV$2<kfY70u+W(mENgFp;x8)>m1!t{OYa!ulPb4L|k|C=Dwsk?6-Rx91w^_
zv65?|LtC`Mx#QHyU}f@W6kkurb7Kh19{K>;b{orpvNYb9GjND_cNBMSY?P*^Tclf>
zv|jt|TB+K%#Y`*L96*PGn3rKlFT5feC(J>vOR)c_0YeL=>PXjaGd(tpZDQhT6EDG%
z<E^n-<h6doo`)RpCqh5qGpDNGcG!abxLD9l0!Uf>Wk!1e21D9#Ba3%Msf|sx1BXxI
zoDwSQomLWv_CtL$U6u7ST-C(KJimKg<O0wjV~JIU9(!sTrE2$&b4c(Ve$6Lc<<ILq
zY*f+A^?<kipyl8*4(U#Q{mdy>Ll+Beveh+z$P=9Hw>p33xHK3>=Qfyf0Xo8kM5S;o
zAg9nfsimKXGok$LvC4_^XujWjR_NA-2`Q*A7Bn(3bOJ}&$o~>vih~*{+LTml?9d}*
z!Hj<j0}7rH^6SYi`dvr;%*%t6&<uS8>5NPk!U7#8DGvL?t;IyqQAsPGBD$N2hOKJp
zHRot(vsa*|{Y+SRW~+Am%Z-tsTK7b!w(wDVH(4QK^maCS4N~?}zegJqtm9QDnk0M~
z+f>8h@ZN3~K1x5XZl)2@=(V^Ig_9ewCm>dv-K;zmCOyE*ixJH(a?9CnJ8PBe<Ar@)
z(#oWoB*xUVvvYimp_NlIng$>hp5(weg7<8=5QsYH;ZJd%0;QXy6zNH}S2t^pB6`<4
z6D<d**`9*XNRkA|1M83Q+knhGphzSfGw6A7g3^<pJER#nv-+-u8~v*D$<vw_zjnxR
zU#Wm?z>A^LAKweffxNReyQe5sa~gdj+7~Rx+)}t^iNPNu-@hw9orp#cy9_joMuva4
zE1dBDj{-8Z!D=fYQJ5Hn%T@9#Y^=yv8#@96#Hx6gxw3RUdtK5_gbs*mt4Y1lbE6jS
zMmLRn78_-YorNPuC5BTD%~U8YYM6O$LR)XA`!Ue=o<(zoYV4#$GwZsr*oZ+<v|rLA
z6P{M+H7?CZkR&iHa7$$mo@*yZJr;hbB%zLvElbI;<wq!fCc`sw4zdpDaqP{MW+(z^
z0z9<wL`SkptQUNmmkggZCaSp-I}0`EwC8C=0-tyI|1D5`oi^c=)WbeSKMTGC@Cepb
zmXl|*Px^>8--o_UV+M!y2mJ|pM<bn7<hE7v^P15a!}pPeMmkX0^S(=N{2b6_x6wEp
zKB||vJ=Vv=f=Atx9tmvq?4=|N_m!1tmhIi8It_H{^_MOqKfYB5zZ<47dH1DBF1_+~
z7RlZ_&!Yi6yzEl9Av`F<gDf*Qd7_6$5R58@yR{~U7eAPJ4OAM~+bFkB3d{leWM=?L
z2m2uO77%Kk-exVR46Zkx+!qx#*yAEVK%rrAVdH_AWE>DE4LjiA3nqwHN+Vwtb{Lgg
zelA7_vUOiYs$U)JkF+`j*=hI$kKGbdN{@F$e27+Y>-nY0Yz**ek&Qa2$zdmtCH}G^
z{nyY*P8rTvI*D~NnvecktRR4?@w=_mMxB~C8j{Deq=ru;wdgtJvL6QX8sb=*@W@|#
z0_mb4$t27vqu^zib#i^X>ZXgWEi{{+Y?V0LU{z!Uvn5PKiKwvsV>ko|5ajNrRvEDF
z?JNz7@?&7ND6K-~b)&Rd#}<p=63tGXa>$VP+_xDmwYtAmlj>L9L%pJdYne7ac!NgS
z|Fg>-!n@yI&^j>W{o&$~c#~}W*?3eeo92;j)K}nSn}E_MRgH49q2jSe#&GSeK>-<&
z*4a49SXQN_hqMCyMBK-w4C(1(pI*$_h%J|R?neAGRy-NtrgNXrbwu;3!mDgElOdy4
zjZK6qy5v;$*0ejQg|fpQ3hOA7Q`Wwnh2EYH8<llT6ExDkWnHhE$h%WSTh{Y+H(6?G
zX>#$XfT{=&O&TgY1z#p8I^ra#+X{&XPb2Q1adNF%n7BNmdXzv!vyG-VQGi^WZCaq7
TZchfp>Q;p7=)bc~|84YtJ7t}f

literal 0
HcmV?d00001

diff --git a/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Digest.crc32 b/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Digest.crc32
new file mode 100644
index 0000000000..937abafd61
--- /dev/null
+++ b/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Digest.crc32
@@ -0,0 +1 @@
+772386724
\ No newline at end of file
diff --git a/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Filter.db b/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Filter.db
new file mode 100644
index 0000000000000000000000000000000000000000..0b95b17664337f6e8e0bd2568e5587af96b6107a
GIT binary patch
literal 176
lcmZQzU|?lnU=RgjB7p({b&ODX7G!ly$Q%$`09}AcJ^&|n08#(|

literal 0
HcmV?d00001

diff --git a/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Index.db b/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Index.db
new file mode 100644
index 0000000000000000000000000000000000000000..3490db63efe60713eee773b68981a6cfab42b49f
GIT binary patch
literal 106
zcmZQzDl=qA5vc$F|9=Am1hB9$FdHN~vM{h1nv_Hch%i7{kw9U?Jg0*UQhY!WAk!I0
ln&$@}Vo+oN37F@H07=WLsKX432aT$shA{{L8A?EG3;;ib5%&N9

literal 0
HcmV?d00001

diff --git a/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Statistics.db b/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Statistics.db
new file mode 100644
index 0000000000000000000000000000000000000000..b1d3b4795a938b26d5fb1753127866b8af47e11e
GIT binary patch
literal 4630
zcmeI$drVVT90%}w?rnJq)fPm+$b5i0wiL30NTOD;2rL?rhoa8R3p4`CBW<17X*7z7
zVTLiMV<x^yh(RM!R2~}lhYHiViDVhuG7Tmj8jV($srU%pEwthHJ@XI$HTEPY_kQm0
z+}nH4<M!7If}j$HON_E%N?op0QK=<Ll>|Y%OZce5vPLgg%7w*deW7f%%H>5CSzlCa
z(=S?YDO+zbWXTp=iLIof+-xyc+wY{G4Es_!IoRcL4TeNAwsX(7TE+EBbr<)C(8AmO
z;j}0>0mXa6-h*oIj%Vw~*`IR&=OE6(oHd-?&q7NWg|Z*Pc>?DtoZ~ou!g&_w49-hA
zui?Cj^Ipy^oO{uX8xJ;vi`zI~M2q7%Z$nGm^`-q7SLLDA2DIO7v_JQ}0k1F~)P)Xq
zqDSvQ>kgyCSD>SM&=cd)QxBo_`RL>W=+q17tg-0Tk!b4@bd8K|<mPXe3FFRaFpGYI
z&d)_3!1>9Xzd>Bg!SyU&LreL;c-jviSE+FRt8QM0>#2XN1^Yd20te){z=4Bi@TkF1
zu%-y-qt<i};$iLK;E3B%;0e9i;3+q7yyFINybX0fK>OK!e}g}rhxfNU$^r4xhdS`q
z#m(S-FJ^+<E@S`PYJ>h{L1UiM_RN^R3%q6WG4M~95~#&#t?+&oztj9m<5E-=%nzx3
zRUnP4ssiUwt3T_7=k=>7siJZJHpesSKvUYk)T5$1U_FK8>$+)tjFj0)9hw{q^Ld=+
z#rHHm{`fcdsV607oTi@k`?6Wo@!iEIsZ&;OK1gl)GhrEZ_Mx&Q>cZG_bE&_08PZQ(
zd!;Fz`gqR1$<#mBSAR|Y>}*dOF`FJz&`w=Ae?DFRtSPINu7Bp*qoM0xG&^peC+CZO
zC+66RB^z_>CRWAV&}C8&3~Zv~qkdkumwtcve;C?7kF*b{KV?5d9JKgIr-eB9^V&!B
z`89uN@6+ek-ppvxk@jQdno9b85P8hlp(pX^tNl7UUNQfqXV#GT$9c|Jnhzuy9&~C*
z+}L}!V*~NR{mm!n{j7ARB+>a?o^5KZBkijT+PeCP5B_!QLL>3TqYcgUejS(MdXh)t
zOt<~|>r~>*(x<PsjaaaH_VFG3{~Syt=eT!$ITv<_FXw{(cxQ7i&pLQ-bFSf0^yOT>
zoQteyU(Pj>b1DB>43(koQO_t%S)ghVlx<pT>XR)>#9h5zXLPhg*ssOkQC#FbMz&0l
z5@dIBqwJ*Ey}ue0J?Uv;w{oSS;yvYc_y=FDt!@y6>2LnOr9fXMTdc+MI(=U5f|<D+
QE6wb!TMA6H8Q!|}e}y-X6aWAK

literal 0
HcmV?d00001

diff --git a/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Summary.db b/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Summary.db
new file mode 100644
index 0000000000000000000000000000000000000000..598b1deb2c9efa97578a9f480dc900a587bf4830
GIT binary patch
literal 50
kcmZQzU}#`qU|<Ad5a0vi1|Vi+0TN|~KmrDsz&s!c06s4R4gdfE

literal 0
HcmV?d00001

diff --git a/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-TOC.txt b/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-TOC.txt
new file mode 100644
index 0000000000..364c89f309
--- /dev/null
+++ b/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-TOC.txt

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 21, 2018, 8:42:29 PM9/21/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
.../mc-2-big-CRC.db | Bin 0 -> 12 bytes
.../mc-2-big-Data.db | Bin 0 -> 4471 bytes
.../mc-2-big-Digest.crc32 | 1 +
.../mc-2-big-Filter.db | Bin 0 -> 176 bytes
.../mc-2-big-Index.db | Bin 0 -> 25 bytes
.../mc-2-big-Statistics.db | Bin 0 -> 4865 bytes
.../mc-2-big-Summary.db | Bin 0 -> 68 bytes
.../mc-2-big-TOC.txt | 8 ++++++++
8 files changed, 9 insertions(+)
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-CRC.db
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Data.db
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Digest.crc32
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Filter.db
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Index.db
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Statistics.db
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Summary.db
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-TOC.txt

diff --git a/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-CRC.db b/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-CRC.db
new file mode 100644
index 0000000000000000000000000000000000000000..3dda9cf906137be6b9ac8417c091fe3576b15234
GIT binary patch
literal 12
ScmZQzWMJ5N*kvID5C8xV@d9H2

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Data.db b/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Data.db
new file mode 100644
index 0000000000000000000000000000000000000000..ce27b048b8c85d30c0f1450e21ac075b3363eb09
GIT binary patch
literal 4471
zcmeH}KT88a5XI+`M$-v$1dVYayAZ`M5Nr$_lFq_HQ&@-~R>9^VHu3%hEVU3jzkqUr
zNg-+c0AjFABcu_*LXgzLc{p?3E?Y0`HFMm%;lX>qVqgyFIZx9xpm#<SAS$~6Cr}I^
zaDu|e@}2kCZT;T+3tz|H{4@T>!+g$?tpj(zwR2rQT71~}e#7tLDxaIPo1f0M7hb%-
z?0zm?lD9Y|J)73blmHo)2H-^1h(jFfs!MQzCvr-7oAkDv65b%aVZF@CkYRBEg^ZMS
zh|hGSOsVOqf|LpA6FDh@{IY4ijLMKvb5Q&zCEU}HA}Y8bDsoapo%Fh#6n=<$Hm#RY
z89I<3E{@`GS#cr0)$vm!K57bnnxr=s{Pc*Qp7jz&Wyr8Nyk6EI>gY)Ei3DFx3Lg*&
z0|hBV(udYd7?mNz;_~aI|EeRUgbSjiAf-wqR28I*NFRaqGAcuc#Q|L}{U;46d`wM`
V6{K`Y@5)ILtEgwwdKs0W^9N=Nseb?f

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Digest.crc32 b/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Digest.crc32
new file mode 100644
index 0000000000..bbacfe06a5
--- /dev/null
+++ b/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Digest.crc32
@@ -0,0 +1 @@
+3116582049
\ No newline at end of file
diff --git a/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Filter.db b/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Filter.db
new file mode 100644
index 0000000000000000000000000000000000000000..7ab13fc1d6f23fc07a5ba0e4b5b08fa1d19eb1c8
GIT binary patch
literal 176
tcmZQzU|?lnU=RgjEPw@z7*-*|3OO+K2_S@k`Wc}-7lbHG2r8lgqyZ$S0Hpu`

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Index.db b/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Index.db
new file mode 100644
index 0000000000000000000000000000000000000000..94cab27584dd82655666b19ef6c320ba5a584784
GIT binary patch
literal 25
RcmZSJU_byEo3Udj0{{d^0aE|~

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Statistics.db b/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Statistics.db
new file mode 100644
index 0000000000000000000000000000000000000000..5dee8abc20be5868ce28b312f7a91d9bb2eba65b
GIT binary patch
literal 4865
zcmeI$Z%h+s90%~bYYPQwM++)oBu+sYTk4;RXreNu1~4unh*mc<kJ13fw&Yrrp+=+l
zhAfC?j=A`M2{C9S{@DaH`oalra}&unoKb>F#l>Z-TNF_Y^~!qk`#zd%5?}bDPx7SC
z=YG#~eeQXl>peY=<J8>0DM|j|<-9`9f}9<4R&ku+OYU8lRBRH<L|cj7WE0(P(OD#k
zrlJy$>4S2~Q7)NtMafg@DRnvRQbtwf?X2Um8|22(e!qV}7tae_Z3p$&`w!{lV|8*4
zq`()^#5&Lcn&gf^QaY_1)F_4EXBgvf##+XajH4Lq85<bKGLB<Bmhl9}sf?#Fp3OL$
z@iNB6j5jjg&G;1KPBhQV2S0;}dl;Wb3!@otMXQ+etM+1CU4Yh@(P4AY;mY*}&#Udn
zcw`$o%7=byJKA^<J!&O7p#wc`GJ4_xw8@H2--n)m4xKv^y*eK4UV^R`(e=#wZL?t9
zmk8z)|3+JvqW9tY<bA(FT*$}!S@<5Uvi=11)oNV->T6dZuDM(T4!hp~*5>=c5d(Jc
zh=CZez6jT&!SXxAW1B~T<GK>SV>|P}6RzTXr}p7|n`<vX{W;xtzzgSL|5hY;A-?8M
zBY4Z=M)01;Gr>*Y;`rQZg7M@dqaV`xd`8x%;LYQYfPc6+g<6<&27X_K&-FjkxGJFn
z)`zNjRRoQzD<bAnYd-3P>kV_2R?v8Oled>T!m{82^@zk4xSw=ZV>^vUt8!YYW73mh
zJ&)Eu{({EG9Nl@3`t9l2C#ff0Up||9a(l^f>RGEd?WeZfn6jKY?|>tX+Lrvy`_${6
z=z6GYE;VFPAI;x0p8ChSsvXq5Uw14Z=2LWq&D6HcOnU$G4Y_CN{m=V9)6@H3uzS1C
zlJ-LPvALDRDi817MXXM`YRsYT>)S}@NAsw5H+_DDzZ26lkJQ)Jov1ub9J%;Vt3(|2
zam`=!`t`pV?$PTvT+2RXB=tv%)n&@_AaFSTNJfi^#1p^kG1B=;`X?)=n#A8L@Fmmz
zK$`iFRy~Plblz=QPrPVv<1yNw4}G)J=z4bMS?X&^{i?#Iwr=A6H*cM*Cq94pt47*i
z@5R)P^r1L!+;-*ZeBzun5Bs+cnR5rr_#6D<9!wx@0>w9V&!zM;mg#RC<ItW921KB1
zA~3zmI0kFIwmnzye4#xT3_lmzbHR9o_FSPo7g-Q*(w<9xZ!wq#yQi_PN^bvUB{%qa
zW8!8x639x|FWgs3T+#E=P=V*@n}#7hf3~Is>uTk54ko4T)0xKgy#@0B%#@eEeJM0K
zM9Ezut~D)kIg6KmQfBA>cTG+s*rrbXuk&WQ%AFp&l<8Vq?r;XaK(I|4P9yVh8ciQg
JqqJ9V^bA@C;FkaZ

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Summary.db b/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Summary.db
new file mode 100644
index 0000000000000000000000000000000000000000..36f0accf7a9f5ce9d33ea0b6ace3ca1f0ed2f7bc
GIT binary patch
literal 68
icmZQzU}#`qU|<Ad5D)?41|Vi+0TNgM2a*_!%?JQLa{(*>

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-TOC.txt b/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-TOC.txt
new file mode 100644
index 0000000000..06b66f6fbc
--- /dev/null
+++ b/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-TOC.txt
@@ -0,0 +1,8 @@
+Digest.crc32
+Filter.db
+Index.db
+Statistics.db
+Summary.db
+Data.db
+TOC.txt
+CRC.db
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 21, 2018, 8:42:30 PM9/21/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
.../mc-1-big-CompressionInfo.db | Bin 0 -> 43 bytes
.../mc-1-big-Data.db | Bin 0 -> 281 bytes
.../mc-1-big-Digest.crc32 | 1 +
.../mc-1-big-Filter.db | Bin 0 -> 16 bytes
.../mc-1-big-Index.db | Bin 0 -> 8 bytes
.../mc-1-big-Statistics.db | Bin 0 -> 4817 bytes
.../mc-1-big-Summary.db | Bin 0 -> 56 bytes
.../mc-1-big-TOC.txt | 8 ++++++++
8 files changed, 9 insertions(+)
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt

diff --git a/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db b/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
new file mode 100644
index 0000000000000000000000000000000000000000..13c639a07f6c1ab98dfd6ff719729c9284795d8a
GIT binary patch
literal 43
gcmZSJ^@%cZ&d)6<N-ZwVFJb@zMlcCtOho1Z0Jj4LsQ>@~

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db b/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
new file mode 100644
index 0000000000000000000000000000000000000000..e18f714c2407d15697493ce99f5f625077ab8da5
GIT binary patch
literal 281
zcmXwxyGjF55QhJm-Lp4YNmdUM)?)3{GJ=vqgayIM5F1+y3$coYrFaAbmIi}ZSeOSe
zh`nGF#23&~4Xn2+sGX5@K%DBE|JEen0ygA!^E@{`wgj0#KGv;B&<W9}5J)D)pdiGf
zsiZ?llEi@&>p>AuwWaC;l*Tm&8a-UqC2CE9rcvNwpoHdK?@%<GX#_NmhUJv9nQgV2
zqH6`C$U2LsVyhGdYYq=Gl6^-%qB!iN@Vd5So~wRa6gLHZqUCAz^0m2V8hu={JNEi9
zxG~4fHQ)qg3X2*CZ>`&T(`FSTiZyrw-Ym)-3U9ox4DQYO|0|ZgMrZ8Ce>1ede6;fm
D|JFeu

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32 b/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
new file mode 100644
index 0000000000..5bd175f917
--- /dev/null
+++ b/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
@@ -0,0 +1 @@
+2945241528
\ No newline at end of file
diff --git a/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db b/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
new file mode 100644
index 0000000000000000000000000000000000000000..157a4de7cff17365433da137f823747e58804d15
GIT binary patch
literal 16
XcmZQzU|?lnU|?imQefz4U|;|M1jqp~

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db b/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
new file mode 100644
index 0000000000000000000000000000000000000000..f9376371f57ea150ba2e6002d905fabebd52132f
GIT binary patch
literal 8
LcmZQzVE_XF03-kf

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db b/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
new file mode 100644
index 0000000000000000000000000000000000000000..e9a1f2d163f6b8031086b2fb250b6dc6db98eea2
GIT binary patch
literal 4817
zcmeI$eQc9O90%~{o~PZqx4L%YWi>PtHj!yMLYb2URtLqkMzgsw8KRMATf;_NH=Y)l
za|Q$R4;M3s5hn>R3T7dLu;4(pNk$^N`GPVQL)FNfNtpx#RU^0wS$#TM`}>~8><|5~
zmt3Fw^mo_ip1XVcTpmFXG{T*fr5>1?*Qr@lbFG>sK`>kw?ypxiTI2?~s>Wrhl06>T
zU9HHL>Kd=*@hwW-7R6d3E8bdfZN1y2*jk!?C_0w@g4#Ga7z|FOWH2^5@Jh1k4mF2T
z=p;1p4xOAPwG)sc9gcjdjTFMiIL`5$b(|A9hx$sBo<c1fIHz--%XuE>1)Os@FX6nL
zvxD=KoHufA=DeG84`&~mar40*<l^42!}G`nFfPvFyaO$9zc1~@xTYMfwW8xzpyRpg
z)!o8);t)DHfWGTxwDE29?5EJC5p-rQ`rZR*O9eWAAA03!bjd9Ah77dl33RKB?&Q|*
zkR9UzGnkowL07Cn@5A-U0v91Jmf`&@eukDRzJ&T34X%I9g>w+se$obx`?(9OD+_`X
zrd;5psWh;@8rP%2eg)#`eY3%HM@`^)zEbdl^Elr*6FA@2_A^j_#n@%=qlMVNbtXT=
zH(fJ=Un=ef@0olE-1`xZ&!t`%PnMW^gVtxZqF2G&=N|@tes(dnxbPJGzlv|_zoK!;
z)ClWC>U$=E#x;!z1=QN7eQ>>T^|g&O9^dP~Nu6L{{Tp?XxgYMQlnUc8ji*Y^LF%;p
zY*^28^pkJV_}xc#U8TNfspCEBg<r2-PMtekbBub~h8Oo!+rM4Bmb&ynT^@B+_WKW0
zZ~Y@>oVxAft|ICqWqamRf6>wM8uiVSBddwoeJPcF)K#li(fglum7JpYKMTI0r}w|;
z@{fK%+KXdH3z~=}FY~`ntjRiWbW%@DG}HOf{@%WuK0o3YrHvPo`nrzeO(%#Gi{BYk
zh?AdfyH2lP|Bc})y?(<5M~{)zpCz|8(C0zMVOzh2#Lb_M8|i#y{aWN~CGiK!1KD&x
zkZ1jAP*37E-;e#<h#%YAeU$cRePCH0UC-`PduKbT-%{B-G)BDtyGy4#i3biI>Zbkm
zpUoM`kH(pC=egS}iJhBn+}aVf;0c%UKltx^Fp;zg75}R}SLD30Jr@pe4^r@<XT0YM
zH;e7LaQtF>E*Ov4o-4NJA`2q6=lZuj7js?PtnN{j)Ko#c)n1o*qB(Tj<~d%r{*cbG
zU45w$8A{u@Y1sVk$zs*jYL*HwUimOH5>#KJgq+K{AnK%Oak?ahU&UxtvA<r+-1%0V
zwkG@;ZWwu}s>g7rH-Eo#x-mF<LAT2%&pfiU`SL-xLs<0BFLf#{b+Y2Ak)N|T-CpaG
VHP1J=q?uR!KWYk$DKr1wKLHi5vXcM+

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db b/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
new file mode 100644
index 0000000000000000000000000000000000000000..2044a14c2e39a55524e98a74a92e2c043fc70007
GIT binary patch
literal 56
fcmZQzU}#`qU|<Ad5D)<31|Vi+0TO5cCIqGdFya9p

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt b/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
new file mode 100644
index 0000000000..f143a41c6e
--- /dev/null
+++ b/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
@@ -0,0 +1,8 @@
+Statistics.db
+Summary.db
+TOC.txt
+Filter.db
+Digest.crc32
+Data.db
+CompressionInfo.db
+Index.db
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 21, 2018, 8:42:31 PM9/21/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
tests/sstable_test.cc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/sstable_test.cc b/tests/sstable_test.cc
index a626963ce7..dd07fd5842 100644
--- a/tests/sstable_test.cc
+++ b/tests/sstable_test.cc
@@ -1036,7 +1036,7 @@ SEASTAR_TEST_CASE(promoted_index_read) {
schema_ptr s = large_partition_schema();
return sstables::test(sstp).read_indexes().then([sstp] (index_list vec) {
BOOST_REQUIRE(vec.size() == 1);
- BOOST_REQUIRE(vec.front().get_promoted_index_size() == 452);
+ BOOST_REQUIRE(vec.front().get_promoted_index_size() > 0);
});
});
});
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 21, 2018, 8:42:31 PM9/21/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
tests/sstable_datafile_test.cc | 21 ++++++++++++++++++++-
1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/tests/sstable_datafile_test.cc b/tests/sstable_datafile_test.cc
index 3e00fc5b39..c629b479c4 100644
--- a/tests/sstable_datafile_test.cc
+++ b/tests/sstable_datafile_test.cc
@@ -52,6 +52,7 @@
#include "tests/index_reader_assertions.hh"
#include "flat_mutation_reader_assertions.hh"
#include "tests/make_random_string.hh"
+#include "tests/normalizing_reader.hh"

#include <stdio.h>
#include <ftw.h>
@@ -1022,6 +1023,22 @@ static flat_mutation_reader sstable_reader(shared_sstable sst, schema_ptr s, con
return sst->as_mutation_source().make_reader(s, pr, s->full_slice());
}

+// We don't need to normalize the sstable reader for 'mc' format
+// because it is naturally normalized now.
+static flat_mutation_reader make_normalizing_sstable_reader(
+ shared_sstable sst, schema_ptr s, const dht::partition_range& pr) {
+ auto sstable_reader = sst->as_mutation_source().make_reader(s, pr, s->full_slice());
+ if (sst->get_version() == sstables::sstable::version_types::mc) {
+ return sstable_reader;
+ }
+
+ return make_normalizing_reader(std::move(sstable_reader));
+}
+
+static flat_mutation_reader make_normalizing_sstable_reader(shared_sstable sst, schema_ptr s) {
+ return make_normalizing_sstable_reader(sst, s, query::full_partition_range);
+}
+
SEASTAR_TEST_CASE(compaction_manager_test) {
return seastar::async([] {
storage_service_for_tests ssft;
@@ -3324,13 +3341,15 @@ SEASTAR_TEST_CASE(test_promoted_index_read) {
auto pkey = partition_key::from_exploded(*s, { int32_type->decompose(0) });
auto dkey = dht::global_partitioner().decorate_key(*s, std::move(pkey));

- auto rd = sstable_reader(sst, s);
+ auto rd = make_normalizing_sstable_reader(sst, s);
using kind = mutation_fragment::kind;
assert_that(std::move(rd))
.produces_partition_start(dkey)
.produces(kind::range_tombstone, { 0 })
.produces(kind::clustering_row, { 0, 0 })
+ .produces(kind::range_tombstone, { 0, 0 })
.produces(kind::clustering_row, { 0, 1 })
+ .produces(kind::range_tombstone, { 0, 1 })
.produces_partition_end()
.produces_end_of_stream();
}
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 21, 2018, 8:42:32 PM9/21/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Reading SSTables in 'mc' format with a different schema is not yet
supported.
Disabling this test with a FIXME as it will be addressed separately.

Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
tests/sstable_datafile_test.cc | 62 ++++++++++++++++++----------------
1 file changed, 33 insertions(+), 29 deletions(-)

diff --git a/tests/sstable_datafile_test.cc b/tests/sstable_datafile_test.cc
index c629b479c4..75eb119284 100644
--- a/tests/sstable_datafile_test.cc
+++ b/tests/sstable_datafile_test.cc
@@ -2509,36 +2509,40 @@ SEASTAR_TEST_CASE(check_multi_schema) {
// d int,
// e blob
//);
- return for_each_sstable_version([] (const sstables::sstable::version_types version) {
- auto set_of_ints_type = set_type_impl::get_instance(int32_type, true);
- auto builder = schema_builder("test", "test_multi_schema")
- .with_column("a", int32_type, column_kind::partition_key)
- .with_column("c", set_of_ints_type)
- .with_column("d", int32_type)
- .with_column("e", bytes_type);
- auto s = builder.build();
-
- auto sst = make_sstable(s, get_test_dir("multi_schema_test", s), 1, version, big);
- auto f = sst->load();
- return f.then([sst, s] {
- auto reader = make_lw_shared(sstable_reader(sst, s));
- return read_mutation_from_flat_mutation_reader(*reader, db::no_timeout).then([reader, s] (mutation_opt m) {
- BOOST_REQUIRE(m);
- BOOST_REQUIRE(m->key().equal(*s, partition_key::from_singular(*s, 0)));
- auto& rows = m->partition().clustered_rows();
- BOOST_REQUIRE_EQUAL(rows.calculate_size(), 1);
- auto& row = rows.begin()->row();
- BOOST_REQUIRE(!row.deleted_at());
- auto& cells = row.cells();
- BOOST_REQUIRE_EQUAL(cells.size(), 1);
- auto& cdef = *s->get_column_definition("e");
- BOOST_REQUIRE_EQUAL(cells.cell_at(cdef.id).as_atomic_cell(cdef).value(), int32_type->decompose(5));
- return (*reader)(db::no_timeout);
- }).then([reader, s] (mutation_fragment_opt m) {
- BOOST_REQUIRE(!m);
- });
+ return for_each_sstable_version([] (const sstables::sstable::version_types version) {
+ // FIXME: schema change is not yet supported with 'mc' format - to be implemented
+ if (version != sstables::sstable::version_types::mc) {
+ auto set_of_ints_type = set_type_impl::get_instance(int32_type, true);
+ auto builder = schema_builder("test", "test_multi_schema")
+ .with_column("a", int32_type, column_kind::partition_key)
+ .with_column("c", set_of_ints_type)
+ .with_column("d", int32_type)
+ .with_column("e", int32_type);
+ auto s = builder.build();
+
+ auto sst = make_sstable(s, get_test_dir("multi_schema_test", s), 1, version, big);
+ auto f = sst->load();
+ return f.then([sst, s] {
+ auto reader = make_lw_shared(sstable_reader(sst, s));
+ return read_mutation_from_flat_mutation_reader(*reader, db::no_timeout).then([reader, s] (mutation_opt m) {
+ BOOST_REQUIRE(m);
+ BOOST_REQUIRE(m->key().equal(*s, partition_key::from_singular(*s, 0)));
+ auto& rows = m->partition().clustered_rows();
+ BOOST_REQUIRE_EQUAL(rows.calculate_size(), 1);
+ auto& row = rows.begin()->row();
+ BOOST_REQUIRE(!row.deleted_at());
+ auto& cells = row.cells();
+ BOOST_REQUIRE_EQUAL(cells.size(), 1);
+ auto& cdef = *s->get_column_definition("e");
+ BOOST_REQUIRE_EQUAL(cells.cell_at(cdef.id).as_atomic_cell(cdef).value(), int32_type->decompose(5));
+ return (*reader)(db::no_timeout);
+ }).then([reader, s] (mutation_fragment_opt m) {
+ BOOST_REQUIRE(!m);
+ });
+ });
+ }
+ return make_ready_future<>();
});
- });
}

SEASTAR_TEST_CASE(sstable_rewrite) {
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 21, 2018, 8:42:33 PM9/21/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
This test is not applicable to the 'mc' format as it covers a backward
compatibility case which may only occur with SSTables generated by older
Scylla versions in 'ka' format.

Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
tests/sstable_datafile_test.cc | 48 ++++++++++++++++++----------------
1 file changed, 25 insertions(+), 23 deletions(-)

diff --git a/tests/sstable_datafile_test.cc b/tests/sstable_datafile_test.cc
index 75eb119284..43a9482bdc 100644
--- a/tests/sstable_datafile_test.cc
+++ b/tests/sstable_datafile_test.cc
@@ -4519,30 +4519,32 @@ SEASTAR_TEST_CASE(test_old_format_non_compound_range_tombstone_is_read) {
// insert into ks.test (pk, ck, v) values (1, 3, 1);
// delete from ks.test where pk = 1 and ck = 2;
return seastar::async([] {
- for (const auto version : all_sstable_versions) {
- auto s = schema_builder("ks", "test")
- .with_column("pk", int32_type, column_kind::partition_key)
- .with_column("ck", int32_type, column_kind::clustering_key)
- .with_column("v", int32_type)
- .build(schema_builder::compact_storage::yes);
-
- auto sst = sstables::make_sstable(s, get_test_dir("broken_non_compound_pi_and_range_tombstone", s), 1, version, big);
- sst->load().get0();
-
- auto pk = partition_key::from_exploded(*s, { int32_type->decompose(1) });
- auto dk = dht::global_partitioner().decorate_key(*s, pk);
- auto ck = clustering_key::from_exploded(*s, {int32_type->decompose(2)});
- mutation m(s, dk);
- m.set_clustered_cell(ck, *s->get_column_definition("v"), atomic_cell::make_live(*int32_type, 1511270919978349, int32_type->decompose(1), { }));
- m.partition().apply_delete(*s, ck, {1511270943827278, gc_clock::from_time_t(1511270943)});
-
- {
- auto slice = partition_slice_builder(*s).with_range(query::clustering_range::make_singular({ck})).build();
- assert_that(sst->as_mutation_source().make_reader(s, dht::partition_range::make_singular(dk), slice))
- .produces(m)
- .produces_end_of_stream();
+ for (const auto version : all_sstable_versions) {
+ if (version != sstables::sstable::version_types::mc) { // Does not apply to 'mc' format
+ auto s = schema_builder("ks", "test")
+ .with_column("pk", int32_type, column_kind::partition_key)
+ .with_column("ck", int32_type, column_kind::clustering_key)
+ .with_column("v", int32_type)
+ .build(schema_builder::compact_storage::yes);
+
+ auto sst = sstables::make_sstable(s, get_test_dir("broken_non_compound_pi_and_range_tombstone", s), 1, version, big);
+ sst->load().get0();
+
+ auto pk = partition_key::from_exploded(*s, { int32_type->decompose(1) });
+ auto dk = dht::global_partitioner().decorate_key(*s, pk);
+ auto ck = clustering_key::from_exploded(*s, {int32_type->decompose(2)});
+ mutation m(s, dk);
+ m.set_clustered_cell(ck, *s->get_column_definition("v"), atomic_cell::make_live(*int32_type, 1511270919978349, int32_type->decompose(1), { }));
+ m.partition().apply_delete(*s, ck, {1511270943827278, gc_clock::from_time_t(1511270943)});
+
+ {
+ auto slice = partition_slice_builder(*s).with_range(query::clustering_range::make_singular({ck})).build();
+ assert_that(sst->as_mutation_source().make_reader(s, dht::partition_range::make_singular(dk), slice))
+ .produces(m)
+ .produces_end_of_stream();
+ }
+ }
}
- }
});
}

--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 21, 2018, 8:42:34 PM9/21/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
tests/flat_mutation_reader_assertions.hh | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/tests/flat_mutation_reader_assertions.hh b/tests/flat_mutation_reader_assertions.hh
index 5daddd62dd..b81b0ab6a4 100644
--- a/tests/flat_mutation_reader_assertions.hh
+++ b/tests/flat_mutation_reader_assertions.hh
@@ -259,12 +259,15 @@ class flat_reader_assertions {
return *this;
}

- flat_reader_assertions& produces(mutation_fragment::kind k, std::vector<int> ck_elements) {
+ flat_reader_assertions& produces(mutation_fragment::kind k, std::vector<int> ck_elements, bool make_full_key = false) {
std::vector<bytes> ck_bytes;
for (auto&& e : ck_elements) {
ck_bytes.emplace_back(int32_type->decompose(e));
}
auto ck = clustering_key_prefix::from_exploded(*_reader.schema(), std::move(ck_bytes));
+ if (make_full_key) {
+ clustering_key::make_full(*_reader.schema(), ck);
+ }

auto mfopt = read_next();
if (!mfopt) {
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 21, 2018, 8:42:36 PM9/21/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
tests/sstable_datafile_test.cc | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/tests/sstable_datafile_test.cc b/tests/sstable_datafile_test.cc
index 43a9482bdc..405c34fd12 100644
--- a/tests/sstable_datafile_test.cc
+++ b/tests/sstable_datafile_test.cc
@@ -2745,6 +2745,7 @@ SEASTAR_TEST_CASE(test_wrong_range_tombstone_order) {
// insert into wrong_range_tombstone_order (p,a,b,r) values (0,1,3,5);
// insert into wrong_range_tombstone_order (p,a,b,c,r) values (0,1,3,4,6);
// insert into wrong_range_tombstone_order (p,a,b,r) values (0,1,4,7);
+ // insert into wrong_range_tombstone_order (p,a,b,c,r) values (0,1,4,0,8);
// delete from wrong_range_tombstone_order where p = 0 and a = 1 and b = 4 and c = 0;
// delete from wrong_range_tombstone_order where p = 0 and a = 2;
// delete from wrong_range_tombstone_order where p = 0 and a = 2 and b = 1;
@@ -2766,7 +2767,7 @@ SEASTAR_TEST_CASE(test_wrong_range_tombstone_order) {

auto sst = make_sstable(s, get_test_dir("wrong_range_tombstone_order", s), 1, version, big);
sst->load().get0();
- auto reader = sstable_reader(sst, s);
+ auto reader = make_normalizing_sstable_reader(sst, s);

using kind = mutation_fragment::kind;
assert_that(std::move(reader))
@@ -2778,7 +2779,9 @@ SEASTAR_TEST_CASE(test_wrong_range_tombstone_order) {
.produces(kind::clustering_row, { 1, 2, 3 })
.produces(kind::range_tombstone, { 1, 3 })
.produces(kind::clustering_row, { 1, 3 })
+ .produces(kind::range_tombstone, { 1, 3 }, true)
.produces(kind::clustering_row, { 1, 3, 4 })
+ .produces(kind::range_tombstone, { 1, 3, 4 })
.produces(kind::clustering_row, { 1, 4 })
.produces(kind::clustering_row, { 1, 4, 0 })
.produces(kind::range_tombstone, { 2 })
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 21, 2018, 8:42:36 PM9/21/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
tests/sstable_test.hh | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/tests/sstable_test.hh b/tests/sstable_test.hh
index 2c1790970e..2ac47dad01 100644
--- a/tests/sstable_test.hh
+++ b/tests/sstable_test.hh
@@ -225,9 +225,10 @@ inline sstring get_test_dir(const sstring& name, const schema_ptr s)
return seastar::sprint("tests/sstables/%s/%s/%s-1c6ace40fad111e7b9cf000000000002", name, s->ks_name(), s->cf_name());
}

-inline std::array<sstables::sstable::version_types, 2> all_sstable_versions = {
+inline std::array<sstables::sstable::version_types, 3> all_sstable_versions = {
sstables::sstable::version_types::ka,
sstables::sstable::version_types::la,
+ sstables::sstable::version_types::mc,
};

template<typename AsyncAction>
--
2.17.1

Glauber Costa

<glauber@scylladb.com>
unread,
Sep 22, 2018, 12:56:25 PM9/22/18
to Vladimir Krivopalov, scylladb-dev, Piotr Jastrzebski
Hi,

Are we keeping tests around for the old formats?
We should be able to read them in the future so tests will be helpful.


--
2.17.1

--
You received this message because you are subscribed to the Google Groups "ScyllaDB development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to scylladb-dev+unsubscribe@googlegroups.com.
To post to this group, send email to scylla...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/scylladb-dev/cover.1537576724.git.vladimir%40scylladb.com.
For more options, visit https://groups.google.com/d/optout.

Raphael S. Carvalho

<raphaelsc@scylladb.com>
unread,
Sep 22, 2018, 2:24:11 PM9/22/18
to Glauber Costa, Vladimir Krivopalov, scylladb-dev, Piotr Jastrzebski
On Sat, Sep 22, 2018 at 1:56 PM, Glauber Costa <gla...@scylladb.com> wrote:
Hi,

Are we keeping tests around for the old formats?
We should be able to read them in the future so tests will be helpful.

Indeed. It would be interesting to make it a parameter, so we can run test for both formats easily.
 

Avi Kivity

<avi@scylladb.com>
unread,
Sep 23, 2018, 5:43:10 AM9/23/18
to Vladimir Krivopalov, scylladb-dev@googlegroups.com, piotr@scylladb.com

On 22/09/2018 03.41, Vladimir Krivopalov wrote:
> From: Piotr Jastrzebski <pi...@scylladb.com>


Need more explanation here. I think I understand the change, but readers
shouldn't be required to reverse-engineer the patch.

Avi Kivity

<avi@scylladb.com>
unread,
Sep 23, 2018, 5:49:13 AM9/23/18
to Vladimir Krivopalov, scylladb-dev@googlegroups.com, piotr@scylladb.com
Why not?


I guess it points at an inefficiency in the promoted index format, where
the first promoted index block points at the beginning of the partition,
and therefore has no useful information?


Can we omit the first block, or will that cause Cassandra to misread our
files?


On 22/09/2018 03.41, Vladimir Krivopalov wrote:

Avi Kivity

<avi@scylladb.com>
unread,
Sep 23, 2018, 5:54:24 AM9/23/18
to Vladimir Krivopalov, scylladb-dev@googlegroups.com, piotr@scylladb.com

On 22/09/2018 03.41, Vladimir Krivopalov wrote:
> This is a helper flat_mutation_reader that wraps another reader and
> splits range tombstones over rows before emitting them.
>
> It is used to produce the same mutation streams for both old (ka/la) and
> new (mc) SSTables formats in unit tests.


Looks good, but please move to .cc to reduce compilation time.

Avi Kivity

<avi@scylladb.com>
unread,
Sep 23, 2018, 5:56:51 AM9/23/18
to Vladimir Krivopalov, scylladb-dev@googlegroups.com, piotr@scylladb.com

On 22/09/2018 03.41, Vladimir Krivopalov wrote:
> This patchset fixes several issues in SSTables 3.x ('mc') writing and
> parsing and extends existing SSTables unit tests to cover the new
> format.
>
> The only test enabled temporarily is check_multi_schema because it
> turned out that reading SSTables 3.x with a different schema has not
> been implemented in full. This will be addressed in a separate patchset.
>
> This patchset depends on the "Support SSTables 3.x in Scylla runtime"
> patchset.


Looks good. Were the mc sstables generated with Cassandra or Scylla? If
with Scylla, we may be hiding double-bugs where we generate the wrong
sstable and then misinterpret it. Such bugs can happen if we did not
reverse-engineer the format correctly.

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 11:34:56 AM9/24/18
to Avi Kivity, scylladb-dev@googlegroups.com, piotr@scylladb.com


On 09/23/2018 02:56 AM, Avi Kivity wrote:
>
> On 22/09/2018 03.41, Vladimir Krivopalov wrote:
>> This patchset fixes several issues in SSTables 3.x ('mc') writing and
>> parsing and extends existing SSTables unit tests to cover the new
>> format.
>>
>> The only test enabled temporarily is check_multi_schema because it
>> turned out that reading SSTables 3.x with a different schema has not
>> been implemented in full. This will be addressed in a separate patchset.
>>
>> This patchset depends on the "Support SSTables 3.x in Scylla runtime"
>> patchset.
>
>
> Looks good. Were the mc sstables generated with Cassandra or Scylla?
> If with Scylla, we may be hiding double-bugs where we generate the
> wrong sstable and then misinterpret it. Such bugs can happen if we did
> not reverse-engineer the format correctly.

The new files were generated using Cassandra.
In most cases, I used sstableupgrade on existing 'la' files, in a couple
others where only few queries sufficed I created them manually.
Cassandra 3.11 has been used.

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 11:36:39 AM9/24/18
to Glauber Costa, scylladb-dev, Piotr Jastrzebski



On 09/22/2018 09:56 AM, Glauber Costa wrote:
Hi,

Are we keeping tests around for the old formats?
We should be able to read them in the future so tests will be helpful.

We are. The array of versions has been expanded to cover 'mc' along with 'ka' and 'la' for those tests.
For a couple tests, we introduced normalization (this is how I called splitting RTs over rows - a better name is welcome) to wrap readers for old files so that the produced mutation streams are identical regardless of the version.
For most tests it went transparently though.

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 11:38:40 AM9/24/18
to Raphael S. Carvalho, Glauber Costa, scylladb-dev, Piotr Jastrzebski



On 09/22/2018 11:24 AM, Raphael S. Carvalho wrote:


On Sat, Sep 22, 2018 at 1:56 PM, Glauber Costa <gla...@scylladb.com> wrote:
Hi,

Are we keeping tests around for the old formats?
We should be able to read them in the future so tests will be helpful.

Indeed. It would be interesting to make it a parameter, so we can run test for both formats easily.

It is a parameter already. See patch 25/25 that adds 'mc' to the array of version formats that is traversed in tests to run those for every format included.

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 12:01:39 PM9/24/18
to Avi Kivity, scylladb-dev@googlegroups.com, piotr@scylladb.com


On 09/23/2018 02:43 AM, Avi Kivity wrote:
>
> On 22/09/2018 03.41, Vladimir Krivopalov wrote:
>> From: Piotr Jastrzebski <pi...@scylladb.com>
>
>
> Need more explanation here. I think I understand the change, but
> readers shouldn't be required to reverse-engineer the patch.

I will elaborate on what this patch does in v2.

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 12:08:05 PM9/24/18
to Avi Kivity, scylladb-dev@googlegroups.com, piotr@scylladb.com


On 09/23/2018 02:49 AM, Avi Kivity wrote:
> Why not?

A promoted index consisting of a single block does not make sense as it
will point to the start of the partition and we only waste time parsing it.
That is why Cassandra does not write it:

https://github.com/apache/cassandra/blob/cassandra-3.0/src/java/org/apache/cassandra/db/RowIndexEntry.java#L61

We do the same for 'ka'/'la' format:

https://github.com/scylladb/scylla/blob/master/sstables/sstables.cc#L2357

This is also consistent with Cassandra behaviour - I had the
corresponding test failed with Cassandra-generated SSTables until I
fixed the writing code.

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 12:08:20 PM9/24/18
to Avi Kivity, scylladb-dev@googlegroups.com, piotr@scylladb.com


On 09/23/2018 02:54 AM, Avi Kivity wrote:
>
> On 22/09/2018 03.41, Vladimir Krivopalov wrote:
>> This is a helper flat_mutation_reader that wraps another reader and
>> splits range tombstones over rows before emitting them.
>>
>> It is used to produce the same mutation streams for both old (ka/la) and
>> new (mc) SSTables formats in unit tests.
>
>
> Looks good, but please move to .cc to reduce compilation time.

Makes sense - will do in v2.

Tomasz Grabiec

<tgrabiec@scylladb.com>
unread,
Sep 24, 2018, 12:18:06 PM9/24/18
to Vladimir Krivopalov, Avi Kivity, scylladb-dev, Piotr Jastrzebski
On Mon, Sep 24, 2018 at 6:08 PM Vladimir Krivopalov <vlad...@scylladb.com> wrote:


On 09/23/2018 02:49 AM, Avi Kivity wrote:
> Why not?

A promoted index consisting of a single block does not make sense as it
will point to the start of the partition and we only waste time parsing it.
That is why Cassandra does not write it:

https://github.com/apache/cassandra/blob/cassandra-3.0/src/java/org/apache/cassandra/db/RowIndexEntry.java#L61

We do the same for 'ka'/'la' format:

https://github.com/scylladb/scylla/blob/master/sstables/sstables.cc#L2357

In ka/la we don't emit an entry to the head of the partition, here we're dropping single-entry indexes, but will still emit an entry to the head of the partition if there is more than one entry. Could we do the same as in ka/la, that is always drop the first entry?
 
--
You received this message because you are subscribed to the Google Groups "ScyllaDB development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to scylladb-dev...@googlegroups.com.

To post to this group, send email to scylla...@googlegroups.com.

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 12:22:05 PM9/24/18
to Tomasz Grabiec, Avi Kivity, scylladb-dev, Piotr Jastrzebski



On 09/24/2018 09:17 AM, Tomasz Grabiec wrote:


On Mon, Sep 24, 2018 at 6:08 PM Vladimir Krivopalov <vlad...@scylladb.com> wrote:


On 09/23/2018 02:49 AM, Avi Kivity wrote:
> Why not?

A promoted index consisting of a single block does not make sense as it
will point to the start of the partition and we only waste time parsing it.
That is why Cassandra does not write it:

https://github.com/apache/cassandra/blob/cassandra-3.0/src/java/org/apache/cassandra/db/RowIndexEntry.java#L61

We do the same for 'ka'/'la' format:

https://github.com/scylladb/scylla/blob/master/sstables/sstables.cc#L2357

In ka/la we don't emit an entry to the head of the partition, here we're dropping single-entry indexes, but will still emit an entry to the head of the partition if there is more than one entry. Could we do the same as in ka/la, that is always drop the first entry?

We can't if we want to stay compatible. Cassandra emits all the entries as long as the index size is >1.

Tomasz Grabiec

<tgrabiec@scylladb.com>
unread,
Sep 24, 2018, 12:48:46 PM9/24/18
to Vladimir Krivopalov, Avi Kivity, scylladb-dev, Piotr Jastrzebski


pon., 24 wrz 2018, 18:22 użytkownik Vladimir Krivopalov <vlad...@scylladb.com> napisał:



On 09/24/2018 09:17 AM, Tomasz Grabiec wrote:


On Mon, Sep 24, 2018 at 6:08 PM Vladimir Krivopalov <vlad...@scylladb.com> wrote:


On 09/23/2018 02:49 AM, Avi Kivity wrote:
> Why not?

A promoted index consisting of a single block does not make sense as it
will point to the start of the partition and we only waste time parsing it.
That is why Cassandra does not write it:

https://github.com/apache/cassandra/blob/cassandra-3.0/src/java/org/apache/cassandra/db/RowIndexEntry.java#L61

We do the same for 'ka'/'la' format:

https://github.com/scylladb/scylla/blob/master/sstables/sstables.cc#L2357

In ka/la we don't emit an entry to the head of the partition, here we're dropping single-entry indexes, but will still emit an entry to the head of the partition if there is more than one entry. Could we do the same as in ka/la, that is always drop the first entry?

We can't if we want to stay compatible. Cassandra emits all the entries as long as the index size is >1.

Does Cassandra actually rely on having a useless entry when reading? 

In general it's OK to emit entries at different positions than Cassandra does. 

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 2:47:55 PM9/24/18
to Tomasz Grabiec, Avi Kivity, scylladb-dev, Piotr Jastrzebski



On 09/24/2018 09:48 AM, Tomasz Grabiec wrote:


pon., 24 wrz 2018, 18:22 użytkownik Vladimir Krivopalov <vlad...@scylladb.com> napisał:



On 09/24/2018 09:17 AM, Tomasz Grabiec wrote:


On Mon, Sep 24, 2018 at 6:08 PM Vladimir Krivopalov <vlad...@scylladb.com> wrote:


On 09/23/2018 02:49 AM, Avi Kivity wrote:
> Why not?

A promoted index consisting of a single block does not make sense as it
will point to the start of the partition and we only waste time parsing it.
That is why Cassandra does not write it:

https://github.com/apache/cassandra/blob/cassandra-3.0/src/java/org/apache/cassandra/db/RowIndexEntry.java#L61

We do the same for 'ka'/'la' format:

https://github.com/scylladb/scylla/blob/master/sstables/sstables.cc#L2357

In ka/la we don't emit an entry to the head of the partition, here we're dropping single-entry indexes, but will still emit an entry to the head of the partition if there is more than one entry. Could we do the same as in ka/la, that is always drop the first entry?

We can't if we want to stay compatible. Cassandra emits all the entries as long as the index size is >1.

Does Cassandra actually rely on having a useless entry when reading? 

In general it's OK to emit entries at different positions than Cassandra does.

Cassandra uses binary search through promoted index using offsets map to locate a block with the start position that precedes the upper bound for the searched position:
https://github.com/apache/cassandra/blob/cassandra-3.0/src/java/org/apache/cassandra/io/sstable/IndexHelper.java#L52

You are right that we could technically drop the first item for promoted indices of size > 1. I really doubt that will gain us much though because we will have to handle this specific case separately from all other cases but it will only save a small amount of disk space and parsing, and the larger the given promoted index is, the smaller will be the gain.
At the same time this will complicate the code for we will have to take into account that first N clustered items in a partition are not covered by the index whereas if the index covers the entire partition we don't have to do any special handling for this corner case.

One more thing is, our files won't be backward-compatible with Cassandra, i.e., one would not be able to take them and put to Cassandra. I don't think it is critical but this may come as an obstacle for example when digging up bugs that may appear in our SSTables 3.x implementation. For now, sstabledump has been my Swiss knife for various sort of issues to investigate. With the index being written incompatibly, it won't be of help because it uses Index.db to output the data file contents.

And in either case, even if we are to try this optimization I would strongly object going for it before the initial SSTables release is out.
For now, we rely on our Index.db files to match those generated by Cassandra and we use that in a number of tests in sstable_3_x_test.
Those may eventually be obsoleted but not before we make sure the feature is mature and well-tested, including real-world scenarios.

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 7:30:15 PM9/24/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
From: Piotr Jastrzebski <pi...@scylladb.com>

even when we slice and fast forward to.

Signed-off-by: Piotr Jastrzebski <pi...@scylladb.com>
---
sstables/row.hh | 7 +++++++
1 file changed, 7 insertions(+)

diff --git a/sstables/row.hh b/sstables/row.hh
index 2df580f2c2..5fa3268176 100644
--- a/sstables/row.hh
+++ b/sstables/row.hh
@@ -1290,6 +1290,13 @@ class data_consume_rows_context_m : public data_consumer::continuous_data_consum
{ }

void verify_end_state() {
+ // If reading a partial row (i.e., when we have a clustering row
+ // filter and using a promoted index), we may be in FLAGS or FLAGS_2
+ // state instead of PARTITION_START.
+ if (_state == state::FLAGS || _state == state::FLAGS_2) {
+ _consumer.consume_partition_end();
+ return;
+ }
if (_state != state::PARTITION_START || _prestate != prestate::NONE) {
throw malformed_sstable_exception("end of input, but not end of partition");
}
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 7:30:16 PM9/24/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
From: Piotr Jastrzebski <pi...@scylladb.com>

This will be used in sstables 3.

Signed-off-by: Piotr Jastrzebski <pi...@scylladb.com>
---
position_in_partition.hh | 5 +++++
1 file changed, 5 insertions(+)

diff --git a/position_in_partition.hh b/position_in_partition.hh
index 9716959423..6188cd4749 100644
--- a/position_in_partition.hh
+++ b/position_in_partition.hh
@@ -179,6 +179,11 @@ class position_in_partition_view {
return bound_view(*_ck, _bound_weight < 0 ? bound_kind::incl_start : bound_kind::excl_start);
}

+ bound_view as_end_bound_view() const {
+ assert(_bound_weight != 0);
+ return bound_view(*_ck, _bound_weight < 0 ? bound_kind::excl_end : bound_kind::incl_end);
+ }
+
friend std::ostream& operator<<(std::ostream&, position_in_partition_view);
friend bool no_clustering_row_between(const schema&, position_in_partition_view, position_in_partition_view);
};
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 7:30:17 PM9/24/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
From: Piotr Jastrzebski <pi...@scylladb.com>

This method returns end of current position range.

Signed-off-by: Piotr Jastrzebski <pi...@scylladb.com>
---
clustering_ranges_walker.hh | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/clustering_ranges_walker.hh b/clustering_ranges_walker.hh
index 3824dab69c..e95d99cb5e 100644
--- a/clustering_ranges_walker.hh
+++ b/clustering_ranges_walker.hh
@@ -200,6 +200,10 @@ class clustering_ranges_walker {
return _current_start;
}

+ position_in_partition_view upper_bound() const {
+ return _current_end;
+ }
+
// When lower_bound() changes, this also does
// Always > 0.
size_t lower_bound_change_counter() const {
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 7:30:18 PM9/24/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
This patchset fixes several issues in SSTables 3.x ('mc') writing and
parsing and extends existing SSTables unit tests to cover the new
format.

The only test enabled temporarily is check_multi_schema because it
turned out that reading SSTables 3.x with a different schema has not
been implemented in full. This will be addressed in a separate patchset.

This patchset depends on the "Support SSTables 3.x in Scylla runtime"
patchset.

In v2:
- Added details to patch 05/26 commit message
- Moved normalizing_reader code into .cc file

GitHub URL: https://github.com/argenet/scylla/tree/projects/sstables-30/unit-tests/v2

Tests: unit {release}

Piotr Jastrzebski (5):
SST3: Make sure we call consume_partition_end
Add position_in_partition_view::as_end_bound_view
Add clustering_ranges_walker::upper_bound
Add mutation_fragment_filter::upper_bound
SST3: Make sure we emit range tombstone when slicing/fft

Vladimir Krivopalov (21):
sstables: Don't write promoted index consisting of a single block in
'mc' format.
sstables: For 'mc' format, use excl_start when split an RT over a row
with a full key.
sstables: Make key full when setting a range tombstone start from end
open marker.
tests/normalizing_reader.hh | 61 ++++++++
tests/sstable_test.hh | 3 +-
mutation_fragment.cc | 4 +
sstables/partition.cc | 11 +-
sstables/sstables.cc | 2 +-
tests/normalizing_reader.cc | 95 ++++++++++++
88 files changed, 399 insertions(+), 84 deletions(-)
create mode 100644 tests/normalizing_reader.hh
create mode 100644 tests/normalizing_reader.cc

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 7:30:18 PM9/24/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
From: Piotr Jastrzebski <pi...@scylladb.com>

This method returns end of current position range.

Signed-off-by: Piotr Jastrzebski <pi...@scylladb.com>
---
sstables/mutation_fragment_filter.hh | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/sstables/mutation_fragment_filter.hh b/sstables/mutation_fragment_filter.hh
index 9f6f0a6382..d4acbfbc07 100644
--- a/sstables/mutation_fragment_filter.hh
+++ b/sstables/mutation_fragment_filter.hh
@@ -153,6 +153,10 @@ class mutation_fragment_filter {
position_in_partition_view lower_bound() const {
return _walker.lower_bound();
}
+
+ position_in_partition_view upper_bound() const {
+ return _walker.upper_bound();
+ }
};

}; // namespace sstables
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 7:30:19 PM9/24/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
From: Piotr Jastrzebski <pi...@scylladb.com>

If we go past the slice to be read with a range tombstone being opened
we need to emit an RT corresponding to this slice.

Signed-off-by: Piotr Jastrzebski <pi...@scylladb.com>
---
sstables/mp_row_consumer.hh | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/sstables/mp_row_consumer.hh b/sstables/mp_row_consumer.hh
index eea012c5d0..42cd91a4b0 100644
--- a/sstables/mp_row_consumer.hh
+++ b/sstables/mp_row_consumer.hh
@@ -1220,7 +1220,17 @@ class mp_row_consumer_m : public consumer_m {
virtual proceed consume_partition_end() override {
sstlog.trace("mp_row_consumer_m {}: consume_partition_end()", this);
if (_opened_range_tombstone) {
- throw sstables::malformed_sstable_exception("Unclosed range tombstone.");
+ if (!_mf_filter || _mf_filter->out_of_range()) {
+ throw sstables::malformed_sstable_exception("Unclosed range tombstone.");
+ }
+ auto range_end = _mf_filter->upper_bound();
+ position_in_partition::less_compare less(*_schema);
+ auto start_pos = position_in_partition_view(position_in_partition_view::range_tag_t{},
+ bound_view(_opened_range_tombstone->ck, _opened_range_tombstone->kind));
+ if (!less(range_end, start_pos)) {
+ auto end_bound = range_end.as_end_bound_view();
+ consume_range_tombstone_end(end_bound.prefix(), end_bound.kind(), _opened_range_tombstone->tomb);
+ }
}
_is_mutation_end = true;
_in_progress_row.reset();
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 7:30:20 PM9/24/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
sstables/sstables.cc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sstables/sstables.cc b/sstables/sstables.cc
index 28e8d89f69..f3afd7b680 100644
--- a/sstables/sstables.cc
+++ b/sstables/sstables.cc
@@ -3366,7 +3366,7 @@ static void write_clustering_prefix(file_writer& writer, bound_kind_m kind,

void sstable_writer_m::write_promoted_index(file_writer& writer) {
static constexpr size_t width_base = 65536;
- if (_pi_write_m.promoted_index.empty()) {
+ if (_pi_write_m.promoted_index.size() < 2) {
return;
}
write_vint(writer, _partition_header_length);
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 7:30:21 PM9/24/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
This fixes the monotonicity issue as otherwise the range tombstone
emitted after such clustering row has a start position that should be
ordered before that of the row.

Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
sstables/mp_row_consumer.hh | 9 ++++----
tests/sstable_3_x_test.cc | 41 +++++++++++++++++++++----------------
2 files changed, 28 insertions(+), 22 deletions(-)

diff --git a/sstables/mp_row_consumer.hh b/sstables/mp_row_consumer.hh
index 42cd91a4b0..c3ce8cb06e 100644
--- a/sstables/mp_row_consumer.hh
+++ b/sstables/mp_row_consumer.hh
@@ -883,14 +883,15 @@ class mp_row_consumer_m : public consumer_m {
* and the end built from the row position because it also overlaps with query ranges.
*/
auto ck = cr.key();
- auto end_kind = clustering_key::make_full(*_schema, ck) ? bound_kind::excl_end : bound_kind::incl_end;
+ bool was_non_full_key = clustering_key::make_full(*_schema, ck);
+ auto end_kind = was_non_full_key ? bound_kind::excl_end : bound_kind::incl_end;
_reader->push_mutation_fragment(range_tombstone(std::move(_opened_range_tombstone->ck),
_opened_range_tombstone->kind,
ck,
end_kind,
_opened_range_tombstone->tomb));
_opened_range_tombstone->ck = std::move(ck);
- _opened_range_tombstone->kind = bound_kind::incl_start;
+ _opened_range_tombstone->kind = was_non_full_key ? bound_kind::incl_start : bound_kind::excl_start;
}
_reader->push_mutation_fragment(std::move(cr));
break;
@@ -898,9 +899,9 @@ class mp_row_consumer_m : public consumer_m {
if (_opened_range_tombstone) {
// Trim the opened range up to the clustering key of the current row
auto& ck = cr.key();
- clustering_key::make_full(*_schema, ck);
+ bool was_non_full_key = clustering_key::make_full(*_schema, ck);
_opened_range_tombstone->ck = std::move(ck);
- _opened_range_tombstone->kind = bound_kind::incl_start;
+ _opened_range_tombstone->kind = was_non_full_key ? bound_kind::incl_start : bound_kind::excl_start;
}
if (_mf_filter->is_current_range_changed()) {
return proceed::no;
diff --git a/tests/sstable_3_x_test.cc b/tests/sstable_3_x_test.cc
index 59fc952bf2..3c07a448fd 100644
--- a/tests/sstable_3_x_test.cc
+++ b/tests/sstable_3_x_test.cc
@@ -1006,15 +1006,20 @@ SEASTAR_THREAD_TEST_CASE(test_uncompressed_slicing_interleaved_rows_and_rts_read
auto make_tombstone = [] (int64_t ts, int32_t tp) {
return tombstone{api::timestamp_type{ts}, gc_clock::time_point(gc_clock::duration(tp))};
};
- auto make_range_tombstone = [] (clustering_key_prefix start, clustering_key_prefix end, tombstone t) {
- return range_tombstone {
- std::move(start),
- bound_kind::incl_start,
- std::move(end),
- bound_kind::incl_end,
- t};
+ const auto make_range_tombstone_creator = [] (bound_kind start_kind) {
+ return [start_kind] (clustering_key_prefix start, clustering_key_prefix end, tombstone t) {
+ return range_tombstone {
+ std::move(start),
+ start_kind,
+ std::move(end),
+ bound_kind::incl_end,
+ t};
+ };
};

+ const auto make_rt_incl_start = make_range_tombstone_creator(bound_kind::incl_start);
+ const auto make_rt_excl_start = make_range_tombstone_creator(bound_kind::excl_start);
+
auto make_clustering_range = [] (clustering_key_prefix&& start, clustering_key_prefix&& end) {
return query::clustering_range::make(
query::clustering_range::bound(std::move(start), true),
@@ -1044,9 +1049,9 @@ SEASTAR_THREAD_TEST_CASE(test_uncompressed_slicing_interleaved_rows_and_rts_read

for (auto idx : boost::irange(1, 1024 * 128, 5)) {
range_tombstone rt1 =
- make_range_tombstone(to_non_full_ck(idx), to_full_ck(idx + 3, idx + 3), tomb);
+ make_rt_incl_start(to_non_full_ck(idx), to_full_ck(idx + 3, idx + 3), tomb);
range_tombstone rt2 =
- make_range_tombstone(to_full_ck(idx + 3, idx + 3), to_non_full_ck(idx + 4), tomb);
+ make_rt_excl_start(to_full_ck(idx + 3, idx + 3), to_non_full_ck(idx + 4), tomb);

r.produces_range_tombstone(rt1)
.produces_row(to_full_ck(idx + 3, idx + 3), to_expected(idx + 3))
@@ -1071,14 +1076,14 @@ SEASTAR_THREAD_TEST_CASE(test_uncompressed_slicing_interleaved_rows_and_rts_read
auto clustering_range = make_clustering_range(to_non_full_ck(7000), to_non_full_ck(8000));

range_tombstone rt =
- make_range_tombstone(to_full_ck(7459, 7459), to_non_full_ck(7460), tomb);
+ make_rt_excl_start(to_full_ck(7459, 7459), to_non_full_ck(7460), tomb);
r.produces_range_tombstone(rt, {clustering_range});

for (auto idx : boost::irange(7461, 7501, 5)) {
range_tombstone rt1 =
- make_range_tombstone(to_non_full_ck(idx), to_full_ck(idx + 3, idx + 3), tomb);
+ make_rt_incl_start(to_non_full_ck(idx), to_full_ck(idx + 3, idx + 3), tomb);
range_tombstone rt2 =
- make_range_tombstone(to_full_ck(idx + 3, idx + 3), to_non_full_ck(idx + 4), tomb);
+ make_rt_excl_start(to_full_ck(idx + 3, idx + 3), to_non_full_ck(idx + 4), tomb);

r.produces_range_tombstone(rt1, {clustering_range})
.produces_row(to_full_ck(idx + 3, idx + 3), to_expected(idx + 3))
@@ -1102,15 +1107,15 @@ SEASTAR_THREAD_TEST_CASE(test_uncompressed_slicing_interleaved_rows_and_rts_read

auto clustering_range = make_clustering_range(to_non_full_ck(7000), to_non_full_ck(8000));
range_tombstone rt =
- make_range_tombstone(to_full_ck(7459, 7459), to_non_full_ck(7460), tomb);
+ make_rt_excl_start(to_full_ck(7459, 7459), to_non_full_ck(7460), tomb);

r.produces_range_tombstone(rt, {clustering_range});

for (auto idx : boost::irange(7461, 7501, 5)) {
range_tombstone rt1 =
- make_range_tombstone(to_non_full_ck(idx), to_full_ck(idx + 3, idx + 3), tomb);
+ make_rt_incl_start(to_non_full_ck(idx), to_full_ck(idx + 3, idx + 3), tomb);
range_tombstone rt2 =
- make_range_tombstone(to_full_ck(idx + 3, idx + 3), to_non_full_ck(idx + 4), tomb);
+ make_rt_excl_start(to_full_ck(idx + 3, idx + 3), to_non_full_ck(idx + 4), tomb);

r.produces_range_tombstone(rt1, {clustering_range})
.produces_row(to_full_ck(idx + 3, idx + 3), to_expected(idx + 3))
@@ -1137,15 +1142,15 @@ SEASTAR_THREAD_TEST_CASE(test_uncompressed_slicing_interleaved_rows_and_rts_read

auto clustering_range = make_clustering_range(to_non_full_ck(7000), to_non_full_ck(8000));
range_tombstone rt =
- make_range_tombstone(to_full_ck(7469, 7469), to_non_full_ck(7470), tomb);
+ make_rt_excl_start(to_full_ck(7469, 7469), to_non_full_ck(7470), tomb);

r.produces_range_tombstone(rt, {clustering_range});

for (auto idx : boost::irange(7471, 7501, 5)) {
range_tombstone rt1 =
- make_range_tombstone(to_non_full_ck(idx), to_full_ck(idx + 3, idx + 3), tomb);
+ make_rt_incl_start(to_non_full_ck(idx), to_full_ck(idx + 3, idx + 3), tomb);
range_tombstone rt2 =
- make_range_tombstone(to_full_ck(idx + 3, idx + 3), to_non_full_ck(idx + 4), tomb);
+ make_rt_excl_start(to_full_ck(idx + 3, idx + 3), to_non_full_ck(idx + 4), tomb);

r.produces_range_tombstone(rt1, {clustering_range})
.produces_row(to_full_ck(idx + 3, idx + 3), to_expected(idx + 3))
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 7:30:22 PM9/24/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
sstables/partition.cc | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/sstables/partition.cc b/sstables/partition.cc
index 2577c0cda7..aa31dcaa9e 100644
--- a/sstables/partition.cc
+++ b/sstables/partition.cc
@@ -101,13 +101,18 @@ concept bool RowConsumer() {
* For other consumers, it is a no-op.
*/
template <typename Consumer>
-void set_range_tombstone_start_from_end_open_marker(Consumer& c, const index_reader& idx) {
+void set_range_tombstone_start_from_end_open_marker(Consumer& c, const schema& s, const index_reader& idx) {
if constexpr (Consumer::is_setting_range_tombstone_start_supported) {
auto open_end_marker = idx.end_open_marker();
if (open_end_marker) {
auto[pos, tomb] = *open_end_marker;
if (pos.is_clustering_row()) {
- c.set_range_tombstone_start(pos.key(), bound_kind::excl_start, tomb);
+ auto ck = pos.key();
+ bool was_non_full = clustering_key::make_full(s, ck);
+ c.set_range_tombstone_start(
+ std::move(ck),
+ was_non_full ? bound_kind::incl_start : bound_kind::excl_start,
+ tomb);
} else {
auto view = position_in_partition_view(pos).as_start_bound_view();
c.set_range_tombstone_start(view.prefix(), view.kind(), tomb);
@@ -374,7 +379,7 @@ class sstable_mutation_reader : public mp_row_consumer_reader {
return make_ready_future<>();
}
return _context->skip_to(idx.element_kind(), index_position.start).then([this, &idx] {
- set_range_tombstone_start_from_end_open_marker(_consumer, idx);
+ set_range_tombstone_start_from_end_open_marker(_consumer, *_schema, idx);
});
});
});
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 7:30:23 PM9/24/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
The method checks if the underlying range_tombstone_list is empty.

Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
mutation_fragment.hh | 1 +
mutation_fragment.cc | 4 ++++
2 files changed, 5 insertions(+)

diff --git a/mutation_fragment.hh b/mutation_fragment.hh
index 3ebc4b1297..7d31290343 100644
--- a/mutation_fragment.hh
+++ b/mutation_fragment.hh
@@ -595,6 +595,7 @@ class range_tombstone_stream {
}
void apply(const range_tombstone_list&, const query::clustering_range&);
void reset();
+ bool empty() const;
friend std::ostream& operator<<(std::ostream& out, const range_tombstone_stream&);
};

diff --git a/mutation_fragment.cc b/mutation_fragment.cc
index 04c2e871ff..a13bcdf935 100644
--- a/mutation_fragment.cc
+++ b/mutation_fragment.cc
@@ -268,6 +268,10 @@ void range_tombstone_stream::reset() {
_list.clear();
}

+bool range_tombstone_stream::empty() const {
+ return _list.empty();
+}
+
position_range position_range::from_range(const query::clustering_range& range) {
auto bv_range = bound_view::from_range(range);
return {
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 7:30:24 PM9/24/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
This is a helper flat_mutation_reader that wraps another reader and
splits range tombstones over rows before emitting them.

It is used to produce the same mutation streams for both old (ka/la) and
new (mc) SSTables formats in unit tests.

Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
configure.py | 2 +-
tests/normalizing_reader.hh | 59 +++++++++++++++++++++
tests/normalizing_reader.cc | 100 ++++++++++++++++++++++++++++++++++++
3 files changed, 160 insertions(+), 1 deletion(-)
create mode 100644 tests/normalizing_reader.hh
create mode 100644 tests/normalizing_reader.cc

diff --git a/configure.py b/configure.py
index d1a698e0c2..ee523877a3 100755
--- a/configure.py
+++ b/configure.py
@@ -833,7 +833,7 @@ perf_tests_seastar_deps = [
for t in perf_tests:
deps[t] = [t + '.cc'] + scylla_tests_dependencies + perf_tests_seastar_deps

-deps['tests/sstable_test'] += ['tests/sstable_datafile_test.cc', 'tests/sstable_utils.cc']
+deps['tests/sstable_test'] += ['tests/sstable_datafile_test.cc', 'tests/sstable_utils.cc', 'tests/normalizing_reader.cc']
deps['tests/mutation_reader_test'] += ['tests/sstable_utils.cc']

deps['tests/bytes_ostream_test'] = ['tests/bytes_ostream_test.cc', 'utils/managed_bytes.cc', 'utils/logalloc.cc', 'utils/dynamic_bitset.cc']
diff --git a/tests/normalizing_reader.hh b/tests/normalizing_reader.hh
new file mode 100644
index 0000000000..74c531857b
--- /dev/null
+++ b/tests/normalizing_reader.hh
@@ -0,0 +1,59 @@
+#include "flat_mutation_reader.hh"
+
+/*
+ * A helper class that wraps another flat_mutation_reader
+ * and splits range tombstones across rows before pushing them
+ * to the buffer.
+ *
+ * Used for bringing mutation stream read from old SSTables formats (ka/la)
+ * to the uniformed representation with that of a new format (mc).
+ */
+class normalizing_reader : public flat_mutation_reader::impl {
+ flat_mutation_reader _rd;
+ range_tombstone_stream _range_tombstones;
+public:
+ normalizing_reader(flat_mutation_reader rd);
+
+ virtual future<> fill_buffer(db::timeout_clock::time_point timeout) override;
+
+ virtual void next_partition() override;
+
+ virtual future<> fast_forward_to(const dht::partition_range& pr, db::timeout_clock::time_point timeout) override;
+
+ virtual future<> fast_forward_to(position_range pr, db::timeout_clock::time_point timeout) override;
+
+ virtual size_t buffer_size() const override;
+};
+
+// Creates a mutation_reader wrapper which creates a new stream of mutations
+// with some mutations removed from the original stream.
+// MutationFilter is a callable which decides which mutations are dropped. It
+// accepts mutation const& and returns a bool. The mutation stays in the
+// stream if and only if the filter returns true.
+flat_mutation_reader make_normalizing_reader(flat_mutation_reader rd);
+
diff --git a/tests/normalizing_reader.cc b/tests/normalizing_reader.cc
new file mode 100644
index 0000000000..3952176e56
--- /dev/null
+++ b/tests/normalizing_reader.cc
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2018 ScyllaDB
+ */
+
+/*
+ * This file is part of Scylla.
+ *
+ * Scylla is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Scylla is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Scylla. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "normalizing_reader.hh"
+#include "core/future-util.hh"
+
+normalizing_reader::normalizing_reader(flat_mutation_reader rd)
+ : impl(rd.schema())
+ , _rd(std::move(rd))
+ , _range_tombstones(*_rd.schema())
+{}
+
+future<> normalizing_reader::fill_buffer(db::timeout_clock::time_point timeout) {
+ return do_until([this] { return is_buffer_full() || is_end_of_stream(); }, [this, timeout] {
+ return _rd.fill_buffer(timeout).then([this] {
+ position_in_partition::less_compare less{*_rd.schema()};
+ position_in_partition::equal_compare eq{*_rd.schema()};
+ while (!_rd.is_buffer_empty()) {
+ auto mf = _rd.pop_mutation_fragment();
+ if (mf.is_end_of_partition()) {
+ while (auto mfo = _range_tombstones.get_next()) {
+ push_mutation_fragment(std::move(*mfo));
+ }
+ } else if (mf.is_range_tombstone()) {
+ _range_tombstones.apply(std::move(mf).as_range_tombstone());
+ continue;
+ } else if (mf.is_clustering_row()) {
+ const clustering_row& cr = mf.as_clustering_row();
+ auto ck = cr.key();
+ auto end_kind = clustering_key::make_full(*_schema, ck) ? bound_kind::excl_end : bound_kind::incl_end;
+ while (auto mfo = _range_tombstones.get_next(mf)) {
+ range_tombstone&& rt = std::move(*mfo).as_range_tombstone();
+ if (less(rt.end_position(), cr.position())
+ || eq(rt.end_position(), position_in_partition::after_key(ck))) {
+ push_mutation_fragment(std::move(rt));
+ } else {
+ push_mutation_fragment(range_tombstone{
+ rt.start_bound(),
+ bound_view{ck, end_kind},
+ rt.tomb});
+
+ rt.trim_front(*_rd.schema(), position_in_partition::after_key(ck));
+ _range_tombstones.apply(std::move(rt));
+ break;
+ }
+ }
+ }
+
+ push_mutation_fragment(std::move(mf));
+ }
+ _end_of_stream = _rd.is_end_of_stream() && _range_tombstones.empty();
+ });
+ });
+}
+
+void normalizing_reader::next_partition() {
+ clear_buffer_to_next_partition();
+ if (is_buffer_empty()) {
+ _end_of_stream = false;
+ _rd.next_partition();
+ }
+}
+future<> normalizing_reader::fast_forward_to(
+ const dht::partition_range& pr, db::timeout_clock::time_point timeout) {
+ clear_buffer();
+ _end_of_stream = false;
+ return _rd.fast_forward_to(pr, timeout);
+}
+future<> normalizing_reader::fast_forward_to(
+ position_range pr, db::timeout_clock::time_point timeout) {
+ forward_buffer_to(pr.start());
+ _end_of_stream = false;
+ return _rd.fast_forward_to(std::move(pr), timeout);
+}
+size_t normalizing_reader::buffer_size() const {
+ return flat_mutation_reader::impl::buffer_size() + _rd.buffer_size();
+}
+
+flat_mutation_reader make_normalizing_reader(flat_mutation_reader rd) {
+ return make_flat_mutation_reader<normalizing_reader>(std::move(rd));
+}
+
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 7:30:25 PM9/24/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
.../mc-1-big-CRC.db | Bin 0 -> 8 bytes
.../mc-1-big-Data.db | Bin 0 -> 190 bytes
.../mc-1-big-Digest.crc32 | 1 +
.../mc-1-big-Filter.db | Bin 0 -> 16 bytes
.../mc-1-big-Index.db | Bin 0 -> 16 bytes
.../mc-1-big-Statistics.db | Bin 0 -> 4768 bytes
.../mc-1-big-Summary.db | Bin 0 -> 56 bytes
.../mc-1-big-TOC.txt | 8 ++++++++
8 files changed, 9 insertions(+)
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CRC.db
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt

diff --git a/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CRC.db b/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CRC.db
new file mode 100644
index 0000000000000000000000000000000000000000..cfcc6734935654417e36cb3572703bf015e1c895
GIT binary patch
literal 8
PcmZQzWMFtKSTGv^1xW${

literal 0
HcmV?d00001

diff --git a/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db b/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
new file mode 100644
index 0000000000000000000000000000000000000000..281c3088e9a7930075e96c8801a6c7e787d7f5b9
GIT binary patch
literal 190
zcmZQzVPIfjtpET2e*=&K0w4hfMsA@;n%eP993VDWgc&F@_pKF@2rIYHW4@kThzKJ@
zABI5;96}5b6)s?NCHNoYKlsN8B>plm@qkSRlZ+r)1}1KKCWZ$$H~$2(nIYD42tD+c
ZYG&f)1M6qu;eWVufeIs#P!?ri1OQH?AejIF

literal 0
HcmV?d00001

diff --git a/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32 b/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
new file mode 100644
index 0000000000..5a5cc7fba4
--- /dev/null
+++ b/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
@@ -0,0 +1 @@
+3809570971
\ No newline at end of file
diff --git a/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db b/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
new file mode 100644
index 0000000000000000000000000000000000000000..ee71a0f649d57455d42fae85417fc46c9704787a
GIT binary patch
literal 16
XcmZQzU|?lnU|?iWQgArYz#sqs2lxTu

literal 0
HcmV?d00001

diff --git a/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db b/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
new file mode 100644
index 0000000000000000000000000000000000000000..b5eead25ee8c2b16599b2625c7064de8470f5e38
GIT binary patch
literal 16
TcmZQzVPIfj1Y!`);K=|00R;e4

literal 0
HcmV?d00001

diff --git a/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db b/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
new file mode 100644
index 0000000000000000000000000000000000000000..8e4df3c409ceae8485c0748ee3fb8921d6a1ea35
GIT binary patch
literal 4768
zcmeI$e@q)?7zglsuPw9;DlO~>7>L_I1~X++5vLmn>jE{JA&iYVjXR(jEb=35LByHq
z#F!98G$LEZHk}DsfQ(Gk0g~;HDfnZ$jhNM`Bbao|jA+qplL?{Tg&sWLSIw6ApXr-i
z?)}{J^zOa)-n)Byf*@#xxso8Sn7nM07g1g+<wYY1rU7AfwR5LMs*y^|9hOqb<&vt(
zoRX!i+--TR)>&EWwB}1rcZIv6y2|0qYHau^_gM7v@{c3^e*bJl3=@yMK5ZC0-mL7j
zO<t6u9EcX)N-iyOL!hXQRyXR@N?;wrIh3=Wa~S7v&PL8A&e5EgagO7>l5+~@G|uZd
z=LM|x+ZHaqlZ)@>;;o!}IeXBIyB_R*F7D=h5-l#}ycezE_OEHjxV8wbv!X-RqeHp#
z)lXwQY#1HxL*MZV+Wanh$rI?<5%gWD=(`W2Eyd`JgXo+=bpB%Wju^D-adeY}?%>An
zunptBcrc6q4PCq$eGtbd^Id?rSg4N6xy|C2Xif1qkgwI^_}894199Ew&ESy9PO!ev
z4>rs?z>8+1z{WBhk0#sC5RdL(0$w&63y$*?fLETy>zy)%*W2213i8*FT?RjrjqTeO
z>xKBPU(DbaH}!z`-+Tbv_bK+zr9S9S78ZG(=CiEa*T8#L90h-MdJVOhbON5Q;ycD~
zX<QRq5934A|CE8owe^NfYTc6_INy-!ih3Fk?epHCHrO^^qh1t00QXZwvH2X0M{4Xt
z)KM9UFrJqhZ|<Y<JG<VzO1=EPybq|8zT3KvI`v%nG3vEDUN}T;`+m(<>Vm_S>C~l(
zA3sc8_h-a7b@OMPxzt^S`&UqZ-PZU9^^K24HWIT{5heZ9r5iTT`=52@pP=_Y^S^DR
z_rK`yj($RZFOGF*HV|vv%=;FxHsP$<PCYfXn_eH?A1$r){SlfRHJ(lK^=-!+J|qs?
z^xlw@IQ;46U+MW9FPg5>^EaK(>ot@7#ZprZeILXe%^I+fc>EXRW_rC6e$TZxk@!7D
zzC=17NViT58A&|Lb7kOJ;z!$ix@mj1`_`t@@my74>u4eQjU|1<W5kDkyfoNBeDcWq
zJ+!^v(<vhv3vp(C`OHiXv3=L|>AedUT!A`1ga1AU6S=&9n{%oA(UD^)Rd^=I{=d$-
z)YIOgRsw5v&ZTaqV@}!Dss;k<Ud|qLaL$GO5u9^De+1`Tsn8$6IaeC(kKml^zs$Lq
z<Kk$yAUtHgCg^H^NQkS+RMttWXS%kxFQ3>Wf7np_`qZRa6UyWo%f4_$|I+*><pT;7
zHvhS0t~UP;RbQ6!hl#+!ADmSF1j;X4>V<~Q6t&dlOlDp_@alw+{Ldd~N-UL<(^W1#
rW3gAct!bN|t8uW~PZdP5?%vx^7wggrZq<xJhg)gHs$1pFH#hk&Tp+Tv

literal 0
HcmV?d00001

diff --git a/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db b/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
new file mode 100644
index 0000000000000000000000000000000000000000..dc507f24e878d2904638cce0ab95406a9c05252f
GIT binary patch
literal 56
lcmZQzU}#`qU|<Ad5D)<31|Vi+0TLh@LV-z;5Qq<!0st`t0U-bY

literal 0
HcmV?d00001

diff --git a/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt b/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
new file mode 100644
index 0000000000..5f3ac91967
--- /dev/null
+++ b/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
@@ -0,0 +1,8 @@
+Statistics.db
+Summary.db
+CRC.db
+TOC.txt
+Filter.db
+Digest.crc32
+Data.db
+Index.db
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 7:30:26 PM9/24/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
.../mc-1-big-CompressionInfo.db | Bin 0 -> 51 bytes
.../mc-1-big-Data.db | Bin 0 -> 82 bytes
.../mc-1-big-Digest.crc32 | 1 +
.../mc-1-big-Filter.db | Bin 0 -> 176 bytes
.../mc-1-big-Index.db | Bin 0 -> 8 bytes
.../mc-1-big-Statistics.db | Bin 0 -> 4653 bytes
.../mc-1-big-Summary.db | Bin 0 -> 56 bytes
.../mc-1-big-TOC.txt | 8 ++++++++
8 files changed, 9 insertions(+)
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt

diff --git a/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db b/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
new file mode 100644
index 0000000000000000000000000000000000000000..a411d5c1698ea447838d87b0490911bd0adb1566
GIT binary patch
literal 51
kcmZSJ^@%cZ&d)6<N-ZwVFJb@zMlcB?e1Vt=&Vw*K0p9xst^fc4

literal 0
HcmV?d00001

diff --git a/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db b/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
new file mode 100644
index 0000000000000000000000000000000000000000..9779a808fd08b38c22c183f5348b3a808df5c1cc
GIT binary patch
literal 82
zcmeZeU|=}Jzyc&0>;M1%-@w4gAfUj`V8F;O#LiI2z{tc16j5b(%JiR;?_r<uy(hvG
d<eAvS7!ELUioy7dg;KiZKob}kjwyYY1po-}6sQ0I

literal 0
HcmV?d00001

diff --git a/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32 b/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
new file mode 100644
index 0000000000..e593accf3a
--- /dev/null
+++ b/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
@@ -0,0 +1 @@
+2474332411
\ No newline at end of file
diff --git a/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db b/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
new file mode 100644
index 0000000000000000000000000000000000000000..34528f97ebd5bc6956b65758c59f739fa8aec983
GIT binary patch
literal 176
hcmZQzU|?lnU=U?c0FqP&4iNJ|lmLWD38?_q3;<MK0P6q%

literal 0
HcmV?d00001

diff --git a/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db b/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
new file mode 100644
index 0000000000000000000000000000000000000000..b077026fd87b3cdd609bc60c41ad771d3edb460d
GIT binary patch
literal 8
PcmZQzVPIfjWMBXQ04D$j

literal 0
HcmV?d00001

diff --git a/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db b/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
new file mode 100644
index 0000000000000000000000000000000000000000..d3e8854520269e519ae28bc16b8883e281c61c16
GIT binary patch
literal 4653
zcmeI$drTBZ90%~7-8&9WIK2ZO&`5oNR@yAaE24>VMbE$)TPgU!M_U)T2&TY!cUp?J
z8jJss7SX6^;=2hkXe6yKphitp(AHKZMyjcXCRf^M^lDQT#c=MyE&RTd{^6hf<0hHR
zeD*hYJ3BMGJ6S;xbV7ehQVXW$C2AJcT%u-45X=XKx69otWyPfw7CYra#p6-Rirk7^
zRP2@CU*j%a<F@7~Zf}XVq`b`OwpCUBo^>p4o%-YGKp@Z?6VKS8Z+fCs*Qq&}f+wMg
zcktvishxnNbyz#7*D9ehg0q2hBxfV%XwD|iX3lY(M{yp_c|7M7&Qmzg;G7+@Hg1c!
z_)5;}Iq%?noO1`7ar42Za&a%`vuJT7=S^sd`+sQ<#&rwPdMi3&CfdMVZ)6X~jcw>?
zKYHk9wB-PL#8PxZJ9<nidcuCRoR3c5i=K4`oiiN0A|CDe5M8aH>$&yYX2-Zc5zG=F
zqw^P__u~3w{#y_i^R#u@e^~qxE#?0L?R7d_|GFDjA+En%1CIE+0UVhZ07vyY!9#ju
z!KNZyk7oN{5RYpf0UmWP0X(`R7d-wN&UZ>T&bPJp9JHU=`3HDzCiZVhf)C=W9$LT~
z=Qo0PKc5C}x`^X*w+Y6R8HYWg?U^m>Yw(6~hrvHxm`p8BJPprRai{4fjY|m?us)>b
zkAlzsfuyU5${2uJ(J$|S>y0Qcsi1K~lkX{Ylzq;>)I$<m;C_n9w_K<3VUnYjIyOBS
z*7Hcy^IbIl#*wY}smH#X{XO->Ul-4yPQ6}yjC%TtFZNN}?@V4yox8s@jk+-T)O*xx
zU&M4#*Ia7IqCS$hdmQ!8byZuapPp==L(JZaDQKoHoIRV~|EwYBG`;^>V7rOl|Dw}(
z?+5aGvGZs~C9&jXzHP+1q-z!jb$9oAIzRenwL9qh!!RkfE0eU3toyF=1hH}c!B#hM
z^d~is==Ga!oA1->H{ZxUZXxZ5E7dOgK8QbTYmrGj@k*D4&R5buS&nKFe`ldTneGSD
ztPfgEByQ{Yv*k15d3zd<(*7*-Pfw%kxh&USUrX9o6*RSV67T!%?wNYxvxmNIr2X|>
zNNG<Wj5EtuS6|K|cC32RvuV(RCsfy-!F;JT6}3vJ4DY#cK(sxVc65<e36<eJ7Ys;v
z&jrIFg!f!99^pM#c+W)^#Q$l}rGB&MOMTtbfBdDK_Shw;W$MM`50=KIytzS*YF)QI
zI)Afmos_4#NX;zs)@I{QE!h7NWl+KI9=c$wzHI2Livxc(@Luje``|fVW>_~aTkR5r
kN&o#3ra&%L+@50PQ`u4GwN6>^xy#93zp233+ShOW3ahJ)hX4Qo

literal 0
HcmV?d00001

diff --git a/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db b/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
new file mode 100644
index 0000000000000000000000000000000000000000..4547a9451a6c383b420c1e8b235d7444d1e8c901
GIT binary patch
literal 56
kcmZQzU}#`qU|<Ad5D)<31|Vi+0TLh@LV-z;5Qq<^0Wk#uA^-pY

literal 0
HcmV?d00001

diff --git a/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt b/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
new file mode 100644
index 0000000000..364c89f309
--- /dev/null
+++ b/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
@@ -0,0 +1,8 @@
+Digest.crc32
+Filter.db
+Index.db
+Statistics.db
+Summary.db
+Data.db
+CompressionInfo.db
+TOC.txt
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 7:30:27 PM9/24/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
.../mc-5-big-CompressionInfo.db | Bin 0 -> 51 bytes
.../mc-5-big-Data.db | Bin 0 -> 146 bytes
.../mc-5-big-Digest.crc32 | 1 +
.../mc-5-big-Filter.db | Bin 0 -> 176 bytes
.../mc-5-big-Index.db | Bin 0 -> 8 bytes
.../mc-5-big-Statistics.db | Bin 0 -> 4712 bytes
.../mc-5-big-Summary.db | Bin 0 -> 56 bytes
.../mc-5-big-TOC.txt | 8 ++++++++
8 files changed, 9 insertions(+)
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-CompressionInfo.db
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Data.db
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Digest.crc32
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Filter.db
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Index.db
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Statistics.db
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Summary.db
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-TOC.txt

diff --git a/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-CompressionInfo.db b/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-CompressionInfo.db
new file mode 100644
index 0000000000000000000000000000000000000000..87371de7809b87b14fa0628b2113c9defde77e61
GIT binary patch
literal 51
lcmZSJ^@%cZ&d)6<N-ZwVFJb@zMlcB?jsP(eoCjfa0s!d#24w&M

literal 0
HcmV?d00001

diff --git a/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Data.db b/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Data.db
new file mode 100644
index 0000000000000000000000000000000000000000..f287f6541cae83fafdcda56169a63e7f854843eb
GIT binary patch
literal 146
zcmX@Yz`(G9fdxo1)c^ngzk!p%5y(_vWB4f0FinWz!S+it+!&Y|7#bLxD_75SW%t_H
z5WA*zMKY(h3WEUy0~0I5M^>N)?j6exe}1IoY(MAay|5K-dF)~!Sw>a{CJhFDPX=x!
u#{Y~A@^d{Ic$gv?J}@xyG|XdSeQ_?;_fg7BA;z_HTGc=<U^u4qT^0a}DJv2H

literal 0
HcmV?d00001

diff --git a/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Digest.crc32 b/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Digest.crc32
new file mode 100644
index 0000000000..fffca614b0
--- /dev/null
+++ b/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Digest.crc32
@@ -0,0 +1 @@
+1110194964
\ No newline at end of file
diff --git a/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Filter.db b/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Filter.db
new file mode 100644
index 0000000000000000000000000000000000000000..ba6484bcc788a2d2e62bc10f602ccc594d6b84e7
GIT binary patch
literal 176
qcmZQzU|?lnU=Rgj1ZY4o8JLjRXiQ{fXi`XA1tc~qlLM7Y6b}HU>;Xjp

literal 0
HcmV?d00001

diff --git a/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Index.db b/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Index.db
new file mode 100644
index 0000000000000000000000000000000000000000..f9376371f57ea150ba2e6002d905fabebd52132f
GIT binary patch
literal 8
LcmZQzVE_XF03-kf

literal 0
HcmV?d00001

diff --git a/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Statistics.db b/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Statistics.db
new file mode 100644
index 0000000000000000000000000000000000000000..5e60a2402c2d7036b0b5e1949946103978217a43
GIT binary patch
literal 4712
zcmeI$eM}Q)90%~bYs;I^*@7=%B%8vVY&n$5n2FLMHPD4c20H6rGLO;-Mp|+$%21<G
zmStpPY?(t7#myzepph`Q3C!RhZm<_7N*1~;ldz<+#bxWZOo!7@pIT0S-^V4>CHt>W
z^5mXRf6w)K?s=ZOdvbyx=!HniU<Z-q4J=D6SF@}W1XG*vut(h_E47NV$|XA$uUBzb
zs)}4$<&&SRQ)}u}OR1vzs(sZSw@bA)HvCX@B4s-}IWZIpO(vy^;%MJ1iOj7mhf}x_
zns|pBr-^j}lGb7EM}t<FI>vC0<s8R3fpfU8G#M#a*~B@8^IXpJIWOd##W{!b3eLrx
zpXR)Y^A67YIG>!dHV=M`i`;yOk8*Jz=RUMFhw~n^j{ASzL5%Cyp$!&v%t~}DcfE1f
zF`h7hP7I>&dkJlR2R-{4blNcb{%rJvhtaYFop%Vm>NL7^7J6eU+WQo`NkO-B>vzD0
z@nAYwO#dD2Sc^V{>r)JlKwK)<)=}hV=?k>ZaSrP1^|=1^7X~42_^cTm^IHcvt~>;e
zpLBs|OeTYkmAD>Fwx1xL(lZ-8cQg$=-(Ln^IE3?^HG%VOX*mP+SB_l*KT&}F+mIH3
z_~u{C;N5FF!3VBA2JZd@$LC@<jHj3|^9rpmT8mx<?^<va{N>pt)Y76;@O+itHhxXx
zy0m&&AG)6B<7r%9AD>Tcc+L;k8{?_2r}5bCz*Xva+v-25XQcPS{gmV|pQrJeI(t8L
za$Y8^=Q+k}`)PdMu{SPLKd`L$ed<NutY1N$eZJ}h_4187+o)~dEm==pcDN>&+L`&$
z<J4RKP8z3f{<Ncr`dIma1=L@)Hoi`M^~2%S#NtCq6+P6>!a{ogiyft>=>0E--ZIkr
zUvdRTKPKl(W5@Fwh;=?O@FuZ7W5{f$o|xD{=g06@%Rc)4h+UjKUO?){wRSapK%B7V
z-F}rg@rCAJ>Gd1GHC?9HZ@N%?(oE{lQkrV%`ylnGwO1zb^v}o5biOkFD6%(^_#^9r
znRGvpYx%j~Na9xikG<Q7OAdA(r~P?0xICAxXLp&cy@k|otmqyXBX0Zt;^}tcz9a8-
z(*6d{W)0^}$3^qr!5gcH?VGP$-!pB&J5|PK@SS@wiK`dgbCE%0#s6#1rM2SM3Xx-U
z&xPX=-E+ZsME6|TFdor8R}LMI=$`Ap@447Fi(Bc|cp7ZyGS8Ik7uZpLt?QD*Wijt!
zQEjZP<1dda%kMhET*<OnFp^p_qy_JM$BMT<wM0s{-^tp`R*Ez|-N22Ez1sqVY=64=
zpTEFV$Tf=Utx~qgcDK)xv-ZVWmw5M81xa!)UHWhTT<EED`&??FXG>j;JKTcg%(?fI
FZUT6ArsMzs

literal 0
HcmV?d00001

diff --git a/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Summary.db b/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Summary.db
new file mode 100644
index 0000000000000000000000000000000000000000..2044a14c2e39a55524e98a74a92e2c043fc70007
GIT binary patch
literal 56
fcmZQzU}#`qU|<Ad5D)<31|Vi+0TO5cCIqGdFya9p

literal 0
HcmV?d00001

diff --git a/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-TOC.txt b/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-TOC.txt
new file mode 100644
index 0000000000..364c89f309
--- /dev/null
+++ b/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-TOC.txt

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 7:30:29 PM9/24/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
.../mc-1-big-CRC.db | Bin 0 -> 8 bytes
.../mc-1-big-Data.db | Bin 0 -> 307 bytes
.../mc-1-big-Digest.crc32 | 1 +
.../mc-1-big-Filter.db | Bin 0 -> 24 bytes
.../mc-1-big-Index.db | Bin 0 -> 85 bytes
.../mc-1-big-Statistics.db | Bin 0 -> 4638 bytes
.../mc-1-big-Summary.db | Bin 0 -> 56 bytes
.../mc-1-big-TOC.txt | 8 ++++++++
8 files changed, 9 insertions(+)
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-CRC.db
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt

diff --git a/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-CRC.db b/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-CRC.db
new file mode 100644
index 0000000000000000000000000000000000000000..1c47cfaca2b13e0da456aa3919dbe0e596230dc3
GIT binary patch
literal 8
PcmZQzWMI%LGxh-h0?Pp*

literal 0
HcmV?d00001

diff --git a/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db b/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
new file mode 100644
index 0000000000000000000000000000000000000000..df874c408f1b2e667c5aa7e95773306940e9626b
GIT binary patch
literal 307
zcmZ9>yA8rH6h`6e#Ic=}E)XRJ>=UJ8fRyZjSD>aqG*Gic24Dm7QVN=k;N;h>a!+-n
zk2Dcw*BE112OSIF@9r<RZl(yV1h>_H4_3@h@Nk$<V8=`www_?bmTau>?fYDV6J{;A
m`-}#xnXTZy`OaX=Y$RWPPq1Om1rH%i;G8)X+?9_TI8_Vi9YN9n

literal 0
HcmV?d00001

diff --git a/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32 b/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
new file mode 100644
index 0000000000..2af6c722e1
--- /dev/null
+++ b/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
@@ -0,0 +1 @@
+712389452
\ No newline at end of file
diff --git a/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db b/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
new file mode 100644
index 0000000000000000000000000000000000000000..dab3740e3031a89b9d20880d29595e96e1df1db4
GIT binary patch
literal 24
fcmZQzU|?lnU|?!V(m2r2reXG4>5|upCJhDvJ!1yd

literal 0
HcmV?d00001

diff --git a/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db b/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
new file mode 100644
index 0000000000000000000000000000000000000000..88324d9113c78c9e91ddddcc7e11405edd64285f
GIT binary patch
literal 85
zcmZQzVPIfj1!54*C=a1I>>xBlEQDsNgwQMvGawB1hV2jrTf;R7gR|i)gu&b>!T<ov
Cr3W|w

literal 0
HcmV?d00001

diff --git a/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db b/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
new file mode 100644
index 0000000000000000000000000000000000000000..17f6f91c4392c17d26addfe0166604d2fbee5fc5
GIT binary patch
literal 4638
zcmeI$drVVT7y$5l?rjULP;J2nERsz?1<l1+k&&qQsDT=d2r}^%y+9)vd3akHV;YH~
ziD(!uDw+T)CPdMQ8`}gVny7&92O9C6F6nS_(c&AYp}W<d`F$sv?BB)S<m8-Rzwg35
zk9+TFIgV3t?~e$jB1)OB6kaKtl_GGQp_LnzFE10N0x2`wDrQPHo0OL&OJY{GU7WQ_
z&Rr#&k|o)mW6#OYv&spj#lI&W4*p&_S#-PIeSslFcjVS>;Yec}f3oC`P_k_+X{}!4
zJR4tg?U}l#zLYrDZ&G<8${CeP@f@DZfCp>O<-x;qE<9+L=x1u$@YWi}evJJY>lg<x
z)-yIR4rV;WYuc}&UTeK|IFldEcr4=yjFT9D!+06v)r_|@Ze-krO_=#0<C(af@o{W^
zFynRD0`vEUDjZj(VXIBpnu*wcOn?2~;JB^>JHUnAe*?C05B8u1*rA=+U&de$-;FJ%
zW5-ovPi@6c9*Dg(1lu+TyG+8aW7cnn8OL2=$Rz9ucKTfGYP>#)>jsMRsdU}H|Cm3A
zEu>#U`6?A&|EjAOP+Wbc99h#-kL;i7M%MOOk^A)pA?vg7dNi2-MDgI}LC8byhawN{
zN<j|4jORPL7tgn;;snZ{==cM9#uR*g^Fy5|zWk99xny<&@~+okBR8GK<8!YGjVI9!
zcmeZCLgE(WwZrx!pFcGQnjdi#Jzx19`s*+*gchOoAv7<h&%JkPsv_+qn6F;ch5D<>
z&nbd&zb5BPXsvnrbLf6yE$Ds<OgCPE@d1LR9Xcp360PUK`qw*Q{ELHIA3}dMF6n3J
z5jW>efR4G6eHc1^>6#j7^X)P7pi_3|#zJRC{x%u9@bAEG=<>GuMCgO5yM{qutStQj
z`sJ^k(}Bszz>H?-%xTl${ZHzXkHY((xVP!y{m)yS_m6?|dB>qi#lV7{IDZ6IMO-#o
zpnH2)!}(Fas@M+SAAV6m-BUomf8|fbzX0oI?`@ZX1D2FOhW*#yGCYL+H(X6>G=ltr
zQdt3fAB5~rXc0j?>}<CY&R4|KL`xZnk4|$%!u>$3>92M@h$nPCX!#a+W>v!>cs&bU
z@v(3{=cSnIDnNc|MpK6axaRJ?);i$hwfh?2^*T>QcgB5)6XW^|Z>IuVmcMwj?t?j-
zw@shHI>t1WrwwoYf8BG@ZqPj!wQtWwN8(-W+jF7e;Cy>7G#<V^7kr0soNv$d8SS}<
z_0dZ0NOGpu&8Z7xWXFMxp1M$qUa?mB$-`6Vy>g<5wz#Z+Tc2pq7q3#&e^Bk&Xelpd
vXxgrIzfE(tX`(iAT-3*ZpUDt&CE1oOtq?7FcGK9o-xVm|dk87~@9F;l;jWNO

literal 0
HcmV?d00001

diff --git a/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db b/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
new file mode 100644
index 0000000000000000000000000000000000000000..ab6bd5d065001dab321da058d45d4d71968b5047
GIT binary patch
literal 56
mcmZQzU}#`qU|<Ad5D)<31|Vi+0TMvK3ZcLxNC?CS(aZobj{z(I

literal 0
HcmV?d00001

diff --git a/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt b/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
new file mode 100644
index 0000000000..5f3ac91967
--- /dev/null
+++ b/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 7:30:30 PM9/24/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
.../mc-1-big-CompressionInfo.db | Bin 0 -> 43 bytes
.../mc-1-big-Data.db | Bin 0 -> 83 bytes
.../mc-1-big-Digest.crc32 | 1 +
.../mc-1-big-Filter.db | Bin 0 -> 16 bytes
.../mc-1-big-Index.db | Bin 0 -> 8 bytes
.../mc-1-big-Statistics.db | Bin 0 -> 4731 bytes
.../mc-1-big-Summary.db | Bin 0 -> 56 bytes
.../mc-1-big-TOC.txt | 8 ++++++++
8 files changed, 9 insertions(+)
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt

diff --git a/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db b/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
new file mode 100644
index 0000000000000000000000000000000000000000..bca56160f6bf4b03f74048442ba1cd554c565b35
GIT binary patch
literal 43
fcmZSJ^@%cZ&d)6<N-ZwVFJb@zMlcB?!jX9Zv;zfh

literal 0
HcmV?d00001

diff --git a/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db b/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
new file mode 100644
index 0000000000000000000000000000000000000000..761b75cb0477534c49261054d0f5ab22d7771b59
GIT binary patch
literal 83
zcmWG%U|`t5zyc&0>i_@$-@wUG2xKxbGB9#71TqUTFsN_=xeNtdybnqo4LG<NSVb8M
h7`a3ryeP93W%$6r$i&9L2-3~KEXu&Z*yiSL2mpM74ix|Z

literal 0
HcmV?d00001

diff --git a/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32 b/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
new file mode 100644
index 0000000000..59cbf39067
--- /dev/null
+++ b/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
@@ -0,0 +1 @@
+3963475046
\ No newline at end of file
diff --git a/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db b/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
new file mode 100644
index 0000000000000000000000000000000000000000..157a4de7cff17365433da137f823747e58804d15
GIT binary patch
literal 16
XcmZQzU|?lnU|?imQefz4U|;|M1jqp~

literal 0
HcmV?d00001

diff --git a/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db b/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
new file mode 100644
index 0000000000000000000000000000000000000000..f9376371f57ea150ba2e6002d905fabebd52132f
GIT binary patch
literal 8
LcmZQzVE_XF03-kf

literal 0
HcmV?d00001

diff --git a/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db b/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
new file mode 100644
index 0000000000000000000000000000000000000000..5466932bf5b4a28d66c60e2e799695553cc19611
GIT binary patch
literal 4731
zcmeI$drVVT90%}wZd;%{sxA0{MKTqp;!=qf(M0X4HBcXsfhf$Gae>BS#v^TEjA>ky
z{V}pIwoH-4w+S(5B!j7d1{2+24;@GrQG<jnm2DcWZqwl-bhp3_zwe1A{JB4RlEb~9
z`}<vb?m6e)dvXOqPz$3aPTnxNX3JHSYk^!<f}p=7%rACsGfE{=p2Kd;lUy#TDBmd=
z^Br#E`ch|Msne7uIo$>Bg5n~((_C5cYs%@UkK~iXeLmlCL^Nal?VpCru9d65_<w{J
z-u@q_MQ#KXrNPQUjj}Vg4dNWkIfQd4XMbC1(NW0zdd^Xtr*odcc{b++&I>s&<DANQ
z)0mZh+{VRsaNf(gnR73iapS=jb8$E4cC<K+^KP_?`~Ru~7*}VaH70b>a&$0vy&=yr
z9@>cx_o63#f;JpMPkjd+(}R9}0s4)@Xk!*S`5=1b1$5dJbWSwd^)|XnLf3Qix6_Jo
zZ!DO_K0;@0L?6WY$-LJgE@mk6aP+YFBU+X9Gvuq)IRDkxu0UM#eKk1fVFNfM!w1$5
z+reSOkzidu&PToV4~R##P6bczj{(o<O$X2J!tqWR!tplMT!j4P19!k{EZDy67!Sm^
z-#36i-p~lHd%6VN@-6ny?H1@y7CQMc&1dG6&%nE8odExIIgwhNa}J)b;y&FkG_Hy%
zhxwsu-KwQ=b-8v0wdUPkxZa@Rf^r%UZt*;!)>>EpLmd{|2KQ4$mZ6)*C#!57)RD>Y
zFrTOCp6;jd*G_(MmwM)+)F$dVH#RS$UeN70O}#W{=OJqAt;EgL>4yuGsPp2_zC~U3
zEMkzl`n!e{>XR9Dv#77uR(?+X<V??MVm3D-x0O0?)hc@bvxc;D^!{hQuXObO7ww+@
z^W=PS;M9r=VwIbDz9d%1bs22bLqj|0_-OvE*-PIa!Sf;qEhImr_Unpoh(k9V?Qjx@
zzgPW$Ucc_9{w}?K{k7C)1IeEvRh7{9LG%f8n~}t0e;72-@rwH^#a2b)Z)SSq>3Sf^
zbgx54;^yAp+dd#(ccAeUZO<0((j+>ci_)$2H6*_>x21D{_)y>N3-!e9$BsAB_IfTS
z^dyhRnPJbB7b}Tv+aEvQJ#N7@wvW%?@imxoTqNiCcLQrK?2uQjxs<HHnoH@4k!@hj
z1>GS8)?CmZfi+iP%|#}}|7*>~>|NQ5j|<whO@gMhd45=K-^ljwo6%e9_E>hwA2pPw
zoA2w+7I)wCKl}6L$}HChbNZFw=tq=s`K=z|=wGz*9v=Df;?I&_$Vx-jl*yJ8sFnS-
zO)oMXI}?BFyR-jKi!kryA8K-qg_6_dklr`iirl7!8$T?uixW?sc&5Nu*~GK|12!$6
A`v3p{

literal 0
HcmV?d00001

diff --git a/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db b/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
new file mode 100644
index 0000000000000000000000000000000000000000..2044a14c2e39a55524e98a74a92e2c043fc70007
GIT binary patch
literal 56
fcmZQzU}#`qU|<Ad5D)<31|Vi+0TO5cCIqGdFya9p

literal 0
HcmV?d00001

diff --git a/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt b/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
new file mode 100644
index 0000000000..097d9e98b1
--- /dev/null
+++ b/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
@@ -0,0 +1,8 @@
+Data.db
+Digest.crc32
+Index.db
+TOC.txt
+Filter.db
+Statistics.db
+Summary.db
+CompressionInfo.db
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 7:30:31 PM9/24/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
.../mc-1-big-CompressionInfo.db | Bin 0 -> 51 bytes
.../mc-1-big-Data.db | Bin 0 -> 1290 bytes
.../mc-1-big-Digest.crc32 | 1 +
.../mc-1-big-Filter.db | Bin 0 -> 176 bytes
.../mc-1-big-Index.db | Bin 0 -> 1164 bytes
.../mc-1-big-Statistics.db | Bin 0 -> 4922 bytes
.../mc-1-big-Summary.db | Bin 0 -> 72 bytes
.../mc-1-big-TOC.txt | 8 ++++++++
8 files changed, 9 insertions(+)
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt

diff --git a/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db b/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
new file mode 100644
index 0000000000000000000000000000000000000000..1c766313c15eecd4d762f9ffb7092d62568c3eba
GIT binary patch
literal 51
ncmZSJ^@%cZ&d)6<N-ZwVFJb@zMlcB^c-8|6CKwMwvoZnz=g$S%

literal 0
HcmV?d00001

diff --git a/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db b/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
new file mode 100644
index 0000000000000000000000000000000000000000..74011f44cc7c4cd2b8c51278dbefac77b2ddddf7
GIT binary patch
literal 1290
zcmWlZdu$X{6vpp%XV=<Nk=^R<aHk@(6{MgG*NWB$+A0-XmGaUG0wSU-S`bAl)mp^r
zA7Wxu6g85Vm=M8~CYt!7Br|tL5{SV^2*h9_pf=%QW2})zqxE<G`{n!2`R1H^?{5DX
zrL1z4Qn{Yd(b3H+q1M+snP6m2!d3bSSDEO@Aapepj=Tu16>YEMDsQQ)eE$`s%}8<U
zlh9LQ4pl-=i<VjjT?5&wz0mWbm0pG>LgB(Up%fG>+5>r_P5BRc1d3k!0eS|Cy@ODL
zxbHm3XAPe{u?T5}l(im0YDcQR9BBcP{c%4uL+TGthpM39r3|!C+*3b88=>f*3!ocB
zn|h9rTL>w?fYgl?7q5ioiTTw|=t3wMI0@Y(TIqHg+GzMbMye5WM-jTjRfVu|T0*Y_
zqF|^(&yn)iYfDP6hobL(rEwLFt6C_pmd34FSGk<FsmQ3Da<e(LfD1T06aPkOZX#4O
zjS2VNM)OpfcXlCdL5kZyhB$8%Y+z5_C}n5XKvbAG*H3hXt6GwofwOt#UXhpV@beM{
zb1AUfHN;(-VBQk4IVAtk-$++U&LDGoY~>$hXU&NlJM<^C9EzIyAWp&9_ilxz$>JZ4
zOX&?_o~kiQZ-U~g0nGd5FiNu%dNyFYesc6!yrBPhNqHB$Dmz@C){jfy*TY7651=fc
z>u3(Zg#W%l65|@Xi|f|Bu|o7qIjOG`Y2sg)cS~c!Wz>6V%;y|^mw3T$yhp|R;CC9?
zvk-der0xV_H9x7Zm#RspxtLlgI5D4u^GI0Rt@L8?hKESt!I`LhCkgeEux7;ZcxTyH
z`y9>M#&&EcU=kE|kEf_fwAusEWYM-vfYMN~av#L?8QUu_{5hGTu{Wvts<B7E<x6$a
zP@IB!vuJHR7k!z0v-50P-yzbTGG*sO!KNI;@_PN<JX-x2Rndnv6}m@KoAZ@=nJA6N
zEA_R29eXUH8P0^cZR~cD1Pr#)*8xR+e?a3z3x9*kqV;}B{6oZd?E-jB{#!@z3V7k_
z&yZLv+uX0b=~&-PW~$ZF*6}RXeMrSGsGfynXEi{`g}C8>qw^Aw>g0|uC7{(NJl6HM
zbr8@j)r*f&y;5dxTanUSsR^q#V)9cd*rgMywJ%cp`$+ddQF;dTY+`KBr_dNEc$<6D
rOT?|?FGzE9#(uIDN{ZXUDUW~HRc)E5=iS7~9mS*k^C`98KUeoZ(L6cM

literal 0
HcmV?d00001

diff --git a/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32 b/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
new file mode 100644
index 0000000000..c1ae0dfb60
--- /dev/null
+++ b/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
@@ -0,0 +1 @@
+1423862028
\ No newline at end of file
diff --git a/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db b/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
new file mode 100644
index 0000000000000000000000000000000000000000..b9e7964acbf8819e17fe22e7192e2926c39817db
GIT binary patch
literal 176
zcmV;h08jq_000F5000#l=6Zp$j>~|R*h-ACF%moh4`XhYBP;K$W1NG4tAm0{2?AmO
zgqsK<0H!^25eix98^L0kj*!{JEF>wCfNUrTB(V@x%|;*t3lxh6$t&6vG$1BPEyyJ5
zSi?s^LA^4>WLAKqU<4D$qS;Ug2qZT|K8GD9u|fg}Kmsfr0RqsIQiioSEP-xB2nmG%
eB6^A{8X^H}f+9l0>}+WH=ZPi(h%`flLf|k{+dcXK

literal 0
HcmV?d00001

diff --git a/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db b/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
new file mode 100644
index 0000000000000000000000000000000000000000..8952f475be2f621cf06b864bf43b881c0a50ec63
GIT binary patch
literal 1164
zcmXZcJ6Mik9LMn&9Z;ciD2ECaDu;5YP@!@thYA%chhB#Y6)K0~dG7l;KhK3l3kD1r
zuwcM|0SgNT3|Lq&V8Fub`rgC;`hAA`x`*HJ3q^%Op$U=upNCS(g$3lnYI0kc)CR~N
zZ4eyQZh=DW8PK(lV5;^9MC-|5vYrRp^h$6-Zvi=aA1Khzg6;Zs(5OEKb^1Gyum1!i
zMFQ9;vO%vX14~6CC>PyeKzLw-xB|wA2cS&61~uXvNRY80O=f^jSqxUoI?ydUK&v!B
zoV*Bz$h#m}J_jZ86PP3af?Oj72qPa1H>$t_qZJ%C`oU1+9GGp~0BejVAj)_Tl8j$q
zzL^N-nmJ&TSq@svCQxPefIRawIAUG}$IORdhxrCnn%}`_D-MjeGC`MB0(M#TV3E}c
zsx1c`wl0Ci);&;fy#!mVFJQeL4La;JFv%_ieRd64Vz+^@wg9pAd9c~O4Z^l6JkwT%
z&$LzH6^<%A+fjuVJF4&*jw(FHQH8H^RN*I`oBUksJOxvn4`7+|8)UgjV6B@AMz|GV
zl-msUyS?C)dj>SS*Fcf`2uyU}f^qH-aKMWPiCz}i=aqszUIS?Ny1;bL1?k>pFweUW
zc6+ZtllK*r`Z1v2PX{S}5y<ds!7RTWEcYeY>0bb;{vEKwe*vcXpFu+qS(2#8tqjzh
Z#0P3mwgzfY)&*hS3=7nx><tD({{VLmqz?c9

literal 0
HcmV?d00001

diff --git a/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db b/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
new file mode 100644
index 0000000000000000000000000000000000000000..fc805804cf9bef5d1ad534c46a4c7daaea58a00c
GIT binary patch
literal 4922
zcmeI$drVVT7y$6z+uKqqR4E9^1_9JDU@1g~%uPYD4p>G&@PTv7ERP6gpeeX9=VI5@
zWkCjxDJr667zslrb0XHta1(}#fE5kkri5ulg2+oiKvH%Jz47~QmhA6koaFYL-~CR@
zdG;R4<M9~YOj<-Tid>t>MU!GL$@x5<y@2PtUAa}J*r7;BPLd@k($f`biAsemF*!pP
zxl@_CQyCDgP-diLq-;-1Qif=D{S|iF;WP39xl>b9Cffy+nyQ(Ucb!S=sAgKfm|Id7
znf=JR`Jq>SomI;(eqVhPNbaB3(H%FPemcq+G(zJKekQG`P%9p&2vik`+ciw(eSx7i
zs`u$;!ikHFej>H<seik{BfH$Ms^7!>-fE^iH=wFAENeul9-@1XxRXM|Gso(aZr$I_
zZP3f|RKDcSXc@otu_U|3y}iair!J;l&lFsCE~t=}6t3;+4WHDC25!Y_E^esT`%S2P
z%5^lU-#idm{6KKGnjx(!(27U{?*8Wd>q*zEI^T{#kF4?e#>wc>Ci|JcOI|y#1r3Zl
zk%G~*&ZHF|Q2Dm>x@J8R*WGs;)~q~yNjg0FGKmhC@e6WAw<{z1x~yi}U-W?Add#ac
z-`sN21@hY4D(WkGQ+3PZ^3k<lcZ7EvQb>=?Ba=6;_^Dv*x{dmrtFFmDuT*I?T9Zch
z?2|YC>5@GnY|ghM9WO12G!60#E=e1IT&k{h8fx_>^LdC|=475{n7AhMj}lo2D6wmX
zy(wS|mR!iO6~`iu#T?skEaBLWV+V`bb~{_FvgEFooXr-p1xxP3@e+=ga~#g`29CFK
zyqn{L9G~U54Vz;7Ww}i)<-{{MuED0AI96lxIiJrj#BpXlwjcmoxB}aX(_hhZ92Z}~
zw&};7yBAwpgzfkqwo41PyC3!|T5MSycF-~G&}!`H`Pf?)V5hIe&Qf5PaMte?Iga<c
zAyaOH*m3KykKy%6^|zup9gFuf-GI%HYew}M2CskSW+RFVuI3;M2g;B|u~W#_rX=J!
zCVON_B3_Sn@@^D&xZsHF+~I=k+7^Sn@CKf5pD{e&0sAkZ`YSpgBEPc=w{Me+5yiJX
zks_<2Dv*zizk#f)!{c*LhsKi<&l`dDsgSU2<UO9H$k%KAp=q!4==+t<m)wSNzDp)r
zAN&g+Si?AzX&nqLc)tzxSGYYT6UMD{#!+Z%`I=$qIc|EipKRl#1{j~mkEn;X4_b`Y
zvy)`}FpR%+>f0V@kJrP0hW2XTxE$KgkbD|?*_O|bL(Bj0-v}L}O$~%jSX{Ld`r`@P
zF6f-!%fg^f#UAm5ZaSpNg&sZEvIdxX)i(YDbi(S@aQ{<f(dXg*r=|`_;QptRj2#!j
z`{~Z|;9bD{49b`X%q+Sgjes5-+YRSO@NEA<`24W)w(nX6>WdDY*;NTFj{3e{32gIW
zP9N;Q<c?hr?7!X3@Uv1-f4(AX2YenZC=JoeK-}$GmlV#|qM@*eED(Qfeg9&39taG0
zTrUCfkhVwqPk`SotSE==+1$S@5U%I67<tKlP+t?TyV41K{O-N#65yKR6BV$%##*12
zpcipU`eox}C~(BKk>~0c=A~Q8>~}C5W6f5j*@7kiubjEqW;?S5OFnz%LIXmx^KQ92
zd*(vJ!<#*Gq4AhKbHQf_k2ibf`rn+n$j?U8X?i~hJog$x4`lPq`P)x|_mGJBV)shO
z9r^8G_Y)@KME2gl<!bW&>BLr?c*`@{fgHiT|M_>Wcv-4KnVzipNEVTn5wK+4r#sC5
G-uw;9x<T&%

literal 0
HcmV?d00001

diff --git a/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db b/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
new file mode 100644
index 0000000000000000000000000000000000000000..754eaaca8d610d75760a91e5cc48eb46056b7789
GIT binary patch
literal 72
ucmZQzU}#`qU|<4b5KsW(1|VkQ01_fV3<Tm33QRIrvA}sC7Dx_6rvm_6Bm!Rm

literal 0
HcmV?d00001

diff --git a/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt b/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
new file mode 100644
index 0000000000..364c89f309
--- /dev/null
+++ b/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 7:30:31 PM9/24/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
.../mc-3-big-CompressionInfo.db | Bin 0 -> 75 bytes
.../mc-3-big-Data.db | Bin 0 -> 144236 bytes
.../mc-3-big-Digest.crc32 | 1 +
.../mc-3-big-Filter.db | Bin 0 -> 176 bytes
.../mc-3-big-Index.db | Bin 0 -> 106 bytes
.../mc-3-big-Statistics.db | Bin 0 -> 4630 bytes
.../mc-3-big-Summary.db | Bin 0 -> 50 bytes
.../mc-3-big-TOC.txt | 8 ++++++++
8 files changed, 9 insertions(+)
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-CompressionInfo.db
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Data.db
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Digest.crc32
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Filter.db
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Index.db
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Statistics.db
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Summary.db
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-TOC.txt

diff --git a/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-CompressionInfo.db b/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-CompressionInfo.db
new file mode 100644
index 0000000000000000000000000000000000000000..a91bf99fae2733587d53315582eea49826d9aee6
GIT binary patch
literal 75
zcmZSJ^@%cZ&d)6<N-ZwVFJb@zMli|1z?}9N$YO=^pw!~oU<RY>JP7?h7)&!6Cj$V=
CDhgx(

literal 0
HcmV?d00001

diff --git a/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Data.db b/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Data.db
new file mode 100644
index 0000000000000000000000000000000000000000..6e2725d1ca5acbd326d55ea7bd21eaab82190019
GIT binary patch
literal 144236
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%0A|hh|izn-{w4PZIyE>%<${M>s5L=fcHU8
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
TZchfp>Q;p7=)bc~|84YtJ7t}f

literal 0
HcmV?d00001

diff --git a/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Digest.crc32 b/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Digest.crc32
new file mode 100644
index 0000000000..937abafd61
--- /dev/null
+++ b/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Digest.crc32
@@ -0,0 +1 @@
+772386724
\ No newline at end of file
diff --git a/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Filter.db b/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Filter.db
new file mode 100644
index 0000000000000000000000000000000000000000..0b95b17664337f6e8e0bd2568e5587af96b6107a
GIT binary patch
literal 176
lcmZQzU|?lnU=RgjB7p({b&ODX7G!ly$Q%$`09}AcJ^&|n08#(|

literal 0
HcmV?d00001

diff --git a/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Index.db b/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Index.db
new file mode 100644
index 0000000000000000000000000000000000000000..3490db63efe60713eee773b68981a6cfab42b49f
GIT binary patch
literal 106
zcmZQzDl=qA5vc$F|9=Am1hB9$FdHN~vM{h1nv_Hch%i7{kw9U?Jg0*UQhY!WAk!I0
ln&$@}Vo+oN37F@H07=WLsKX432aT$shA{{L8A?EG3;;ib5%&N9

literal 0
HcmV?d00001

diff --git a/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Statistics.db b/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Statistics.db
new file mode 100644
index 0000000000000000000000000000000000000000..b1d3b4795a938b26d5fb1753127866b8af47e11e
GIT binary patch
literal 4630
zcmeI$drVVT90%}w?rnJq)fPm+$b5i0wiL30NTOD;2rL?rhoa8R3p4`CBW<17X*7z7
zVTLiMV<x^yh(RM!R2~}lhYHiViDVhuG7Tmj8jV($srU%pEwthHJ@XI$HTEPY_kQm0
z+}nH4<M!7If}j$HON_E%N?op0QK=<Ll>|Y%OZce5vPLgg%7w*deW7f%%H>5CSzlCa
z(=S?YDO+zbWXTp=iLIof+-xyc+wY{G4Es_!IoRcL4TeNAwsX(7TE+EBbr<)C(8AmO
z;j}0>0mXa6-h*oIj%Vw~*`IR&=OE6(oHd-?&q7NWg|Z*Pc>?DtoZ~ou!g&_w49-hA
zui?Cj^Ipy^oO{uX8xJ;vi`zI~M2q7%Z$nGm^`-q7SLLDA2DIO7v_JQ}0k1F~)P)Xq
zqDSvQ>kgyCSD>SM&=cd)QxBo_`RL>W=+q17tg-0Tk!b4@bd8K|<mPXe3FFRaFpGYI
z&d)_3!1>9Xzd>Bg!SyU&LreL;c-jviSE+FRt8QM0>#2XN1^Yd20te){z=4Bi@TkF1
zu%-y-qt<i};$iLK;E3B%;0e9i;3+q7yyFINybX0fK>OK!e}g}rhxfNU$^r4xhdS`q
z#m(S-FJ^+<E@S`PYJ>h{L1UiM_RN^R3%q6WG4M~95~#&#t?+&oztj9m<5E-=%nzx3
zRUnP4ssiUwt3T_7=k=>7siJZJHpesSKvUYk)T5$1U_FK8>$+)tjFj0)9hw{q^Ld=+
z#rHHm{`fcdsV607oTi@k`?6Wo@!iEIsZ&;OK1gl)GhrEZ_Mx&Q>cZG_bE&_08PZQ(
zd!;Fz`gqR1$<#mBSAR|Y>}*dOF`FJz&`w=Ae?DFRtSPINu7Bp*qoM0xG&^peC+CZO
zC+66RB^z_>CRWAV&}C8&3~Zv~qkdkumwtcve;C?7kF*b{KV?5d9JKgIr-eB9^V&!B
z`89uN@6+ek-ppvxk@jQdno9b85P8hlp(pX^tNl7UUNQfqXV#GT$9c|Jnhzuy9&~C*
z+}L}!V*~NR{mm!n{j7ARB+>a?o^5KZBkijT+PeCP5B_!QLL>3TqYcgUejS(MdXh)t
zOt<~|>r~>*(x<PsjaaaH_VFG3{~Syt=eT!$ITv<_FXw{(cxQ7i&pLQ-bFSf0^yOT>
zoQteyU(Pj>b1DB>43(koQO_t%S)ghVlx<pT>XR)>#9h5zXLPhg*ssOkQC#FbMz&0l
z5@dIBqwJ*Ey}ue0J?Uv;w{oSS;yvYc_y=FDt!@y6>2LnOr9fXMTdc+MI(=U5f|<D+
QE6wb!TMA6H8Q!|}e}y-X6aWAK

literal 0
HcmV?d00001

diff --git a/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Summary.db b/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Summary.db
new file mode 100644
index 0000000000000000000000000000000000000000..598b1deb2c9efa97578a9f480dc900a587bf4830
GIT binary patch
literal 50
kcmZQzU}#`qU|<Ad5a0vi1|Vi+0TN|~KmrDsz&s!c06s4R4gdfE

literal 0
HcmV?d00001

diff --git a/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-TOC.txt b/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-TOC.txt
new file mode 100644
index 0000000000..364c89f309
--- /dev/null
+++ b/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-TOC.txt

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 7:30:32 PM9/24/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
.../mc-2-big-CRC.db | Bin 0 -> 12 bytes
.../mc-2-big-Data.db | Bin 0 -> 4471 bytes
.../mc-2-big-Digest.crc32 | 1 +
.../mc-2-big-Filter.db | Bin 0 -> 176 bytes
.../mc-2-big-Index.db | Bin 0 -> 25 bytes
.../mc-2-big-Statistics.db | Bin 0 -> 4865 bytes
.../mc-2-big-Summary.db | Bin 0 -> 68 bytes
.../mc-2-big-TOC.txt | 8 ++++++++
8 files changed, 9 insertions(+)
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-CRC.db
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Data.db
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Digest.crc32
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Filter.db
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Index.db
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Statistics.db
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Summary.db
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-TOC.txt

diff --git a/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-CRC.db b/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-CRC.db
new file mode 100644
index 0000000000000000000000000000000000000000..3dda9cf906137be6b9ac8417c091fe3576b15234
GIT binary patch
literal 12
ScmZQzWMJ5N*kvID5C8xV@d9H2

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Data.db b/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Data.db
new file mode 100644
index 0000000000000000000000000000000000000000..ce27b048b8c85d30c0f1450e21ac075b3363eb09
GIT binary patch
literal 4471
zcmeH}KT88a5XI+`M$-v$1dVYayAZ`M5Nr$_lFq_HQ&@-~R>9^VHu3%hEVU3jzkqUr
zNg-+c0AjFABcu_*LXgzLc{p?3E?Y0`HFMm%;lX>qVqgyFIZx9xpm#<SAS$~6Cr}I^
zaDu|e@}2kCZT;T+3tz|H{4@T>!+g$?tpj(zwR2rQT71~}e#7tLDxaIPo1f0M7hb%-
z?0zm?lD9Y|J)73blmHo)2H-^1h(jFfs!MQzCvr-7oAkDv65b%aVZF@CkYRBEg^ZMS
zh|hGSOsVOqf|LpA6FDh@{IY4ijLMKvb5Q&zCEU}HA}Y8bDsoapo%Fh#6n=<$Hm#RY
z89I<3E{@`GS#cr0)$vm!K57bnnxr=s{Pc*Qp7jz&Wyr8Nyk6EI>gY)Ei3DFx3Lg*&
z0|hBV(udYd7?mNz;_~aI|EeRUgbSjiAf-wqR28I*NFRaqGAcuc#Q|L}{U;46d`wM`
V6{K`Y@5)ILtEgwwdKs0W^9N=Nseb?f

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Digest.crc32 b/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Digest.crc32
new file mode 100644
index 0000000000..bbacfe06a5
--- /dev/null
+++ b/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Digest.crc32
@@ -0,0 +1 @@
+3116582049
\ No newline at end of file
diff --git a/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Filter.db b/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Filter.db
new file mode 100644
index 0000000000000000000000000000000000000000..7ab13fc1d6f23fc07a5ba0e4b5b08fa1d19eb1c8
GIT binary patch
literal 176
tcmZQzU|?lnU=RgjEPw@z7*-*|3OO+K2_S@k`Wc}-7lbHG2r8lgqyZ$S0Hpu`

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Index.db b/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Index.db
new file mode 100644
index 0000000000000000000000000000000000000000..94cab27584dd82655666b19ef6c320ba5a584784
GIT binary patch
literal 25
RcmZSJU_byEo3Udj0{{d^0aE|~

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Statistics.db b/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Statistics.db
new file mode 100644
index 0000000000000000000000000000000000000000..5dee8abc20be5868ce28b312f7a91d9bb2eba65b
GIT binary patch
literal 4865
zcmeI$Z%h+s90%~bYYPQwM++)oBu+sYTk4;RXreNu1~4unh*mc<kJ13fw&Yrrp+=+l
zhAfC?j=A`M2{C9S{@DaH`oalra}&unoKb>F#l>Z-TNF_Y^~!qk`#zd%5?}bDPx7SC
z=YG#~eeQXl>peY=<J8>0DM|j|<-9`9f}9<4R&ku+OYU8lRBRH<L|cj7WE0(P(OD#k
zrlJy$>4S2~Q7)NtMafg@DRnvRQbtwf?X2Um8|22(e!qV}7tae_Z3p$&`w!{lV|8*4
zq`()^#5&Lcn&gf^QaY_1)F_4EXBgvf##+XajH4Lq85<bKGLB<Bmhl9}sf?#Fp3OL$
z@iNB6j5jjg&G;1KPBhQV2S0;}dl;Wb3!@otMXQ+etM+1CU4Yh@(P4AY;mY*}&#Udn
zcw`$o%7=byJKA^<J!&O7p#wc`GJ4_xw8@H2--n)m4xKv^y*eK4UV^R`(e=#wZL?t9
zmk8z)|3+JvqW9tY<bA(FT*$}!S@<5Uvi=11)oNV->T6dZuDM(T4!hp~*5>=c5d(Jc
zh=CZez6jT&!SXxAW1B~T<GK>SV>|P}6RzTXr}p7|n`<vX{W;xtzzgSL|5hY;A-?8M
zBY4Z=M)01;Gr>*Y;`rQZg7M@dqaV`xd`8x%;LYQYfPc6+g<6<&27X_K&-FjkxGJFn
z)`zNjRRoQzD<bAnYd-3P>kV_2R?v8Oled>T!m{82^@zk4xSw=ZV>^vUt8!YYW73mh
zJ&)Eu{({EG9Nl@3`t9l2C#ff0Up||9a(l^f>RGEd?WeZfn6jKY?|>tX+Lrvy`_${6
z=z6GYE;VFPAI;x0p8ChSsvXq5Uw14Z=2LWq&D6HcOnU$G4Y_CN{m=V9)6@H3uzS1C
zlJ-LPvALDRDi817MXXM`YRsYT>)S}@NAsw5H+_DDzZ26lkJQ)Jov1ub9J%;Vt3(|2
zam`=!`t`pV?$PTvT+2RXB=tv%)n&@_AaFSTNJfi^#1p^kG1B=;`X?)=n#A8L@Fmmz
zK$`iFRy~Plblz=QPrPVv<1yNw4}G)J=z4bMS?X&^{i?#Iwr=A6H*cM*Cq94pt47*i
z@5R)P^r1L!+;-*ZeBzun5Bs+cnR5rr_#6D<9!wx@0>w9V&!zM;mg#RC<ItW921KB1
zA~3zmI0kFIwmnzye4#xT3_lmzbHR9o_FSPo7g-Q*(w<9xZ!wq#yQi_PN^bvUB{%qa
zW8!8x639x|FWgs3T+#E=P=V*@n}#7hf3~Is>uTk54ko4T)0xKgy#@0B%#@eEeJM0K
zM9Ezut~D)kIg6KmQfBA>cTG+s*rrbXuk&WQ%AFp&l<8Vq?r;XaK(I|4P9yVh8ciQg
JqqJ9V^bA@C;FkaZ

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Summary.db b/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Summary.db
new file mode 100644
index 0000000000000000000000000000000000000000..36f0accf7a9f5ce9d33ea0b6ace3ca1f0ed2f7bc
GIT binary patch
literal 68
icmZQzU}#`qU|<Ad5D)?41|Vi+0TNgM2a*_!%?JQLa{(*>

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-TOC.txt b/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-TOC.txt
new file mode 100644
index 0000000000..06b66f6fbc
--- /dev/null
+++ b/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-TOC.txt
@@ -0,0 +1,8 @@
+Digest.crc32
+Filter.db
+Index.db
+Statistics.db
+Summary.db
+Data.db
+TOC.txt
+CRC.db
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 7:30:34 PM9/24/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
.../mc-1-big-CompressionInfo.db | Bin 0 -> 43 bytes
.../mc-1-big-Data.db | Bin 0 -> 281 bytes
.../mc-1-big-Digest.crc32 | 1 +
.../mc-1-big-Filter.db | Bin 0 -> 16 bytes
.../mc-1-big-Index.db | Bin 0 -> 8 bytes
.../mc-1-big-Statistics.db | Bin 0 -> 4817 bytes
.../mc-1-big-Summary.db | Bin 0 -> 56 bytes
.../mc-1-big-TOC.txt | 8 ++++++++
8 files changed, 9 insertions(+)
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt

diff --git a/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db b/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
new file mode 100644
index 0000000000000000000000000000000000000000..13c639a07f6c1ab98dfd6ff719729c9284795d8a
GIT binary patch
literal 43
gcmZSJ^@%cZ&d)6<N-ZwVFJb@zMlcCtOho1Z0Jj4LsQ>@~

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db b/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
new file mode 100644
index 0000000000000000000000000000000000000000..e18f714c2407d15697493ce99f5f625077ab8da5
GIT binary patch
literal 281
zcmXwxyGjF55QhJm-Lp4YNmdUM)?)3{GJ=vqgayIM5F1+y3$coYrFaAbmIi}ZSeOSe
zh`nGF#23&~4Xn2+sGX5@K%DBE|JEen0ygA!^E@{`wgj0#KGv;B&<W9}5J)D)pdiGf
zsiZ?llEi@&>p>AuwWaC;l*Tm&8a-UqC2CE9rcvNwpoHdK?@%<GX#_NmhUJv9nQgV2
zqH6`C$U2LsVyhGdYYq=Gl6^-%qB!iN@Vd5So~wRa6gLHZqUCAz^0m2V8hu={JNEi9
zxG~4fHQ)qg3X2*CZ>`&T(`FSTiZyrw-Ym)-3U9ox4DQYO|0|ZgMrZ8Ce>1ede6;fm
D|JFeu

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32 b/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
new file mode 100644
index 0000000000..5bd175f917
--- /dev/null
+++ b/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
@@ -0,0 +1 @@
+2945241528
\ No newline at end of file
diff --git a/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db b/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
new file mode 100644
index 0000000000000000000000000000000000000000..157a4de7cff17365433da137f823747e58804d15
GIT binary patch
literal 16
XcmZQzU|?lnU|?imQefz4U|;|M1jqp~

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db b/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
new file mode 100644
index 0000000000000000000000000000000000000000..f9376371f57ea150ba2e6002d905fabebd52132f
GIT binary patch
literal 8
LcmZQzVE_XF03-kf

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db b/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
new file mode 100644
index 0000000000000000000000000000000000000000..e9a1f2d163f6b8031086b2fb250b6dc6db98eea2
GIT binary patch
literal 4817
zcmeI$eQc9O90%~{o~PZqx4L%YWi>PtHj!yMLYb2URtLqkMzgsw8KRMATf;_NH=Y)l
za|Q$R4;M3s5hn>R3T7dLu;4(pNk$^N`GPVQL)FNfNtpx#RU^0wS$#TM`}>~8><|5~
zmt3Fw^mo_ip1XVcTpmFXG{T*fr5>1?*Qr@lbFG>sK`>kw?ypxiTI2?~s>Wrhl06>T
zU9HHL>Kd=*@hwW-7R6d3E8bdfZN1y2*jk!?C_0w@g4#Ga7z|FOWH2^5@Jh1k4mF2T
z=p;1p4xOAPwG)sc9gcjdjTFMiIL`5$b(|A9hx$sBo<c1fIHz--%XuE>1)Os@FX6nL
zvxD=KoHufA=DeG84`&~mar40*<l^42!}G`nFfPvFyaO$9zc1~@xTYMfwW8xzpyRpg
z)!o8);t)DHfWGTxwDE29?5EJC5p-rQ`rZR*O9eWAAA03!bjd9Ah77dl33RKB?&Q|*
zkR9UzGnkowL07Cn@5A-U0v91Jmf`&@eukDRzJ&T34X%I9g>w+se$obx`?(9OD+_`X
zrd;5psWh;@8rP%2eg)#`eY3%HM@`^)zEbdl^Elr*6FA@2_A^j_#n@%=qlMVNbtXT=
zH(fJ=Un=ef@0olE-1`xZ&!t`%PnMW^gVtxZqF2G&=N|@tes(dnxbPJGzlv|_zoK!;
z)ClWC>U$=E#x;!z1=QN7eQ>>T^|g&O9^dP~Nu6L{{Tp?XxgYMQlnUc8ji*Y^LF%;p
zY*^28^pkJV_}xc#U8TNfspCEBg<r2-PMtekbBub~h8Oo!+rM4Bmb&ynT^@B+_WKW0
zZ~Y@>oVxAft|ICqWqamRf6>wM8uiVSBddwoeJPcF)K#li(fglum7JpYKMTI0r}w|;
z@{fK%+KXdH3z~=}FY~`ntjRiWbW%@DG}HOf{@%WuK0o3YrHvPo`nrzeO(%#Gi{BYk
zh?AdfyH2lP|Bc})y?(<5M~{)zpCz|8(C0zMVOzh2#Lb_M8|i#y{aWN~CGiK!1KD&x
zkZ1jAP*37E-;e#<h#%YAeU$cRePCH0UC-`PduKbT-%{B-G)BDtyGy4#i3biI>Zbkm
zpUoM`kH(pC=egS}iJhBn+}aVf;0c%UKltx^Fp;zg75}R}SLD30Jr@pe4^r@<XT0YM
zH;e7LaQtF>E*Ov4o-4NJA`2q6=lZuj7js?PtnN{j)Ko#c)n1o*qB(Tj<~d%r{*cbG
zU45w$8A{u@Y1sVk$zs*jYL*HwUimOH5>#KJgq+K{AnK%Oak?ahU&UxtvA<r+-1%0V
zwkG@;ZWwu}s>g7rH-Eo#x-mF<LAT2%&pfiU`SL-xLs<0BFLf#{b+Y2Ak)N|T-CpaG
VHP1J=q?uR!KWYk$DKr1wKLHi5vXcM+

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db b/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
new file mode 100644
index 0000000000000000000000000000000000000000..2044a14c2e39a55524e98a74a92e2c043fc70007
GIT binary patch
literal 56
fcmZQzU}#`qU|<Ad5D)<31|Vi+0TO5cCIqGdFya9p

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt b/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
new file mode 100644
index 0000000000..f143a41c6e
--- /dev/null
+++ b/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
@@ -0,0 +1,8 @@
+Statistics.db
+Summary.db
+TOC.txt
+Filter.db
+Digest.crc32
+Data.db
+CompressionInfo.db
+Index.db
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 7:30:35 PM9/24/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
tests/sstable_datafile_test.cc | 21 ++++++++++++++++++++-
1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/tests/sstable_datafile_test.cc b/tests/sstable_datafile_test.cc
index 3e00fc5b39..c629b479c4 100644
--- a/tests/sstable_datafile_test.cc
+++ b/tests/sstable_datafile_test.cc
@@ -52,6 +52,7 @@
#include "tests/index_reader_assertions.hh"
#include "flat_mutation_reader_assertions.hh"
#include "tests/make_random_string.hh"
+#include "tests/normalizing_reader.hh"

#include <stdio.h>
#include <ftw.h>
@@ -1022,6 +1023,22 @@ static flat_mutation_reader sstable_reader(shared_sstable sst, schema_ptr s, con
return sst->as_mutation_source().make_reader(s, pr, s->full_slice());
}

+// We don't need to normalize the sstable reader for 'mc' format
+// because it is naturally normalized now.
+static flat_mutation_reader make_normalizing_sstable_reader(
+ shared_sstable sst, schema_ptr s, const dht::partition_range& pr) {
+ auto sstable_reader = sst->as_mutation_source().make_reader(s, pr, s->full_slice());
+ if (sst->get_version() == sstables::sstable::version_types::mc) {
+ return sstable_reader;
+ }
+
+ return make_normalizing_reader(std::move(sstable_reader));
+}
+
+static flat_mutation_reader make_normalizing_sstable_reader(shared_sstable sst, schema_ptr s) {
+ return make_normalizing_sstable_reader(sst, s, query::full_partition_range);
+}
+
SEASTAR_TEST_CASE(compaction_manager_test) {
return seastar::async([] {
storage_service_for_tests ssft;
@@ -3324,13 +3341,15 @@ SEASTAR_TEST_CASE(test_promoted_index_read) {
auto pkey = partition_key::from_exploded(*s, { int32_type->decompose(0) });
auto dkey = dht::global_partitioner().decorate_key(*s, std::move(pkey));

- auto rd = sstable_reader(sst, s);
+ auto rd = make_normalizing_sstable_reader(sst, s);
using kind = mutation_fragment::kind;
assert_that(std::move(rd))
.produces_partition_start(dkey)
.produces(kind::range_tombstone, { 0 })
.produces(kind::clustering_row, { 0, 0 })
+ .produces(kind::range_tombstone, { 0, 0 })
.produces(kind::clustering_row, { 0, 1 })
+ .produces(kind::range_tombstone, { 0, 1 })
.produces_partition_end()
.produces_end_of_stream();
}
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 7:30:35 PM9/24/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
tests/sstable_test.cc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/sstable_test.cc b/tests/sstable_test.cc
index a626963ce7..dd07fd5842 100644
--- a/tests/sstable_test.cc
+++ b/tests/sstable_test.cc
@@ -1036,7 +1036,7 @@ SEASTAR_TEST_CASE(promoted_index_read) {
schema_ptr s = large_partition_schema();
return sstables::test(sstp).read_indexes().then([sstp] (index_list vec) {
BOOST_REQUIRE(vec.size() == 1);
- BOOST_REQUIRE(vec.front().get_promoted_index_size() == 452);
+ BOOST_REQUIRE(vec.front().get_promoted_index_size() > 0);

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 7:30:37 PM9/24/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Reading SSTables in 'mc' format with a different schema is not yet
supported.
Disabling this test with a FIXME as it will be addressed separately.

Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
tests/sstable_datafile_test.cc | 62 ++++++++++++++++++----------------
1 file changed, 33 insertions(+), 29 deletions(-)

diff --git a/tests/sstable_datafile_test.cc b/tests/sstable_datafile_test.cc
index c629b479c4..75eb119284 100644
--- a/tests/sstable_datafile_test.cc
+++ b/tests/sstable_datafile_test.cc
@@ -2509,36 +2509,40 @@ SEASTAR_TEST_CASE(check_multi_schema) {
// d int,
// e blob
//);
- return for_each_sstable_version([] (const sstables::sstable::version_types version) {
- auto set_of_ints_type = set_type_impl::get_instance(int32_type, true);
- auto builder = schema_builder("test", "test_multi_schema")
- .with_column("a", int32_type, column_kind::partition_key)
- .with_column("c", set_of_ints_type)
- .with_column("d", int32_type)
- .with_column("e", bytes_type);
- auto s = builder.build();
-
- auto sst = make_sstable(s, get_test_dir("multi_schema_test", s), 1, version, big);
- auto f = sst->load();
- return f.then([sst, s] {
- auto reader = make_lw_shared(sstable_reader(sst, s));
- return read_mutation_from_flat_mutation_reader(*reader, db::no_timeout).then([reader, s] (mutation_opt m) {
- BOOST_REQUIRE(m);
- BOOST_REQUIRE(m->key().equal(*s, partition_key::from_singular(*s, 0)));
- auto& rows = m->partition().clustered_rows();
- BOOST_REQUIRE_EQUAL(rows.calculate_size(), 1);
- auto& row = rows.begin()->row();
- BOOST_REQUIRE(!row.deleted_at());
- auto& cells = row.cells();
- BOOST_REQUIRE_EQUAL(cells.size(), 1);
- auto& cdef = *s->get_column_definition("e");
- BOOST_REQUIRE_EQUAL(cells.cell_at(cdef.id).as_atomic_cell(cdef).value(), int32_type->decompose(5));
- return (*reader)(db::no_timeout);
- }).then([reader, s] (mutation_fragment_opt m) {
- BOOST_REQUIRE(!m);
- });
+ return for_each_sstable_version([] (const sstables::sstable::version_types version) {
+ // FIXME: schema change is not yet supported with 'mc' format - to be implemented
+ if (version != sstables::sstable::version_types::mc) {
+ auto set_of_ints_type = set_type_impl::get_instance(int32_type, true);
+ auto builder = schema_builder("test", "test_multi_schema")
+ .with_column("a", int32_type, column_kind::partition_key)
+ .with_column("c", set_of_ints_type)
+ .with_column("d", int32_type)
+ .with_column("e", int32_type);
+ auto s = builder.build();
+
+ auto sst = make_sstable(s, get_test_dir("multi_schema_test", s), 1, version, big);
+ auto f = sst->load();
+ return f.then([sst, s] {
+ auto reader = make_lw_shared(sstable_reader(sst, s));
+ return read_mutation_from_flat_mutation_reader(*reader, db::no_timeout).then([reader, s] (mutation_opt m) {
+ BOOST_REQUIRE(m);
+ BOOST_REQUIRE(m->key().equal(*s, partition_key::from_singular(*s, 0)));
+ auto& rows = m->partition().clustered_rows();
+ BOOST_REQUIRE_EQUAL(rows.calculate_size(), 1);
+ auto& row = rows.begin()->row();
+ BOOST_REQUIRE(!row.deleted_at());
+ auto& cells = row.cells();
+ BOOST_REQUIRE_EQUAL(cells.size(), 1);
+ auto& cdef = *s->get_column_definition("e");
+ BOOST_REQUIRE_EQUAL(cells.cell_at(cdef.id).as_atomic_cell(cdef).value(), int32_type->decompose(5));
+ return (*reader)(db::no_timeout);
+ }).then([reader, s] (mutation_fragment_opt m) {
+ BOOST_REQUIRE(!m);
+ });
+ });
+ }
+ return make_ready_future<>();
});
- });
}

SEASTAR_TEST_CASE(sstable_rewrite) {
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 7:30:37 PM9/24/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
This test is not applicable to the 'mc' format as it covers a backward
compatibility case which may only occur with SSTables generated by older
Scylla versions in 'ka' format.

Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
tests/sstable_datafile_test.cc | 48 ++++++++++++++++++----------------
1 file changed, 25 insertions(+), 23 deletions(-)

diff --git a/tests/sstable_datafile_test.cc b/tests/sstable_datafile_test.cc
index 75eb119284..43a9482bdc 100644
--- a/tests/sstable_datafile_test.cc
+++ b/tests/sstable_datafile_test.cc
@@ -4519,30 +4519,32 @@ SEASTAR_TEST_CASE(test_old_format_non_compound_range_tombstone_is_read) {
// insert into ks.test (pk, ck, v) values (1, 3, 1);
// delete from ks.test where pk = 1 and ck = 2;
return seastar::async([] {
- for (const auto version : all_sstable_versions) {
- auto s = schema_builder("ks", "test")
- .with_column("pk", int32_type, column_kind::partition_key)
- .with_column("ck", int32_type, column_kind::clustering_key)
- .with_column("v", int32_type)
- .build(schema_builder::compact_storage::yes);
-
- auto sst = sstables::make_sstable(s, get_test_dir("broken_non_compound_pi_and_range_tombstone", s), 1, version, big);
- sst->load().get0();
-
- auto pk = partition_key::from_exploded(*s, { int32_type->decompose(1) });
- auto dk = dht::global_partitioner().decorate_key(*s, pk);
- auto ck = clustering_key::from_exploded(*s, {int32_type->decompose(2)});
- mutation m(s, dk);
- m.set_clustered_cell(ck, *s->get_column_definition("v"), atomic_cell::make_live(*int32_type, 1511270919978349, int32_type->decompose(1), { }));
- m.partition().apply_delete(*s, ck, {1511270943827278, gc_clock::from_time_t(1511270943)});
-
- {
- auto slice = partition_slice_builder(*s).with_range(query::clustering_range::make_singular({ck})).build();
- assert_that(sst->as_mutation_source().make_reader(s, dht::partition_range::make_singular(dk), slice))
- .produces(m)
- .produces_end_of_stream();
+ for (const auto version : all_sstable_versions) {
+ if (version != sstables::sstable::version_types::mc) { // Does not apply to 'mc' format
+ auto s = schema_builder("ks", "test")
+ .with_column("pk", int32_type, column_kind::partition_key)
+ .with_column("ck", int32_type, column_kind::clustering_key)
+ .with_column("v", int32_type)
+ .build(schema_builder::compact_storage::yes);
+
+ auto sst = sstables::make_sstable(s, get_test_dir("broken_non_compound_pi_and_range_tombstone", s), 1, version, big);
+ sst->load().get0();
+
+ auto pk = partition_key::from_exploded(*s, { int32_type->decompose(1) });
+ auto dk = dht::global_partitioner().decorate_key(*s, pk);
+ auto ck = clustering_key::from_exploded(*s, {int32_type->decompose(2)});
+ mutation m(s, dk);
+ m.set_clustered_cell(ck, *s->get_column_definition("v"), atomic_cell::make_live(*int32_type, 1511270919978349, int32_type->decompose(1), { }));
+ m.partition().apply_delete(*s, ck, {1511270943827278, gc_clock::from_time_t(1511270943)});
+
+ {
+ auto slice = partition_slice_builder(*s).with_range(query::clustering_range::make_singular({ck})).build();
+ assert_that(sst->as_mutation_source().make_reader(s, dht::partition_range::make_singular(dk), slice))
+ .produces(m)
+ .produces_end_of_stream();
+ }
+ }
}
- }
});
}

--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 7:30:39 PM9/24/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
tests/sstable_datafile_test.cc | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/tests/sstable_datafile_test.cc b/tests/sstable_datafile_test.cc
index 43a9482bdc..405c34fd12 100644
--- a/tests/sstable_datafile_test.cc
+++ b/tests/sstable_datafile_test.cc
@@ -2745,6 +2745,7 @@ SEASTAR_TEST_CASE(test_wrong_range_tombstone_order) {
// insert into wrong_range_tombstone_order (p,a,b,r) values (0,1,3,5);
// insert into wrong_range_tombstone_order (p,a,b,c,r) values (0,1,3,4,6);
// insert into wrong_range_tombstone_order (p,a,b,r) values (0,1,4,7);
+ // insert into wrong_range_tombstone_order (p,a,b,c,r) values (0,1,4,0,8);
// delete from wrong_range_tombstone_order where p = 0 and a = 1 and b = 4 and c = 0;
// delete from wrong_range_tombstone_order where p = 0 and a = 2;
// delete from wrong_range_tombstone_order where p = 0 and a = 2 and b = 1;
@@ -2766,7 +2767,7 @@ SEASTAR_TEST_CASE(test_wrong_range_tombstone_order) {

auto sst = make_sstable(s, get_test_dir("wrong_range_tombstone_order", s), 1, version, big);
sst->load().get0();
- auto reader = sstable_reader(sst, s);
+ auto reader = make_normalizing_sstable_reader(sst, s);

using kind = mutation_fragment::kind;
assert_that(std::move(reader))
@@ -2778,7 +2779,9 @@ SEASTAR_TEST_CASE(test_wrong_range_tombstone_order) {
.produces(kind::clustering_row, { 1, 2, 3 })
.produces(kind::range_tombstone, { 1, 3 })
.produces(kind::clustering_row, { 1, 3 })
+ .produces(kind::range_tombstone, { 1, 3 }, true)
.produces(kind::clustering_row, { 1, 3, 4 })
+ .produces(kind::range_tombstone, { 1, 3, 4 })
.produces(kind::clustering_row, { 1, 4 })
.produces(kind::clustering_row, { 1, 4, 0 })
.produces(kind::range_tombstone, { 2 })
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 7:30:39 PM9/24/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
tests/flat_mutation_reader_assertions.hh | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/tests/flat_mutation_reader_assertions.hh b/tests/flat_mutation_reader_assertions.hh
index 5daddd62dd..b81b0ab6a4 100644
--- a/tests/flat_mutation_reader_assertions.hh
+++ b/tests/flat_mutation_reader_assertions.hh
@@ -259,12 +259,15 @@ class flat_reader_assertions {
return *this;
}

- flat_reader_assertions& produces(mutation_fragment::kind k, std::vector<int> ck_elements) {
+ flat_reader_assertions& produces(mutation_fragment::kind k, std::vector<int> ck_elements, bool make_full_key = false) {
std::vector<bytes> ck_bytes;
for (auto&& e : ck_elements) {
ck_bytes.emplace_back(int32_type->decompose(e));
}
auto ck = clustering_key_prefix::from_exploded(*_reader.schema(), std::move(ck_bytes));
+ if (make_full_key) {
+ clustering_key::make_full(*_reader.schema(), ck);
+ }

auto mfopt = read_next();
if (!mfopt) {
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 24, 2018, 7:30:40 PM9/24/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
tests/sstable_test.hh | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/tests/sstable_test.hh b/tests/sstable_test.hh
index 2c1790970e..2ac47dad01 100644
--- a/tests/sstable_test.hh
+++ b/tests/sstable_test.hh
@@ -225,9 +225,10 @@ inline sstring get_test_dir(const sstring& name, const schema_ptr s)
return seastar::sprint("tests/sstables/%s/%s/%s-1c6ace40fad111e7b9cf000000000002", name, s->ks_name(), s->cf_name());
}

-inline std::array<sstables::sstable::version_types, 2> all_sstable_versions = {
+inline std::array<sstables::sstable::version_types, 3> all_sstable_versions = {
sstables::sstable::version_types::ka,
sstables::sstable::version_types::la,
+ sstables::sstable::version_types::mc,
};

template<typename AsyncAction>
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 25, 2018, 9:25:00 PM9/25/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
This patchset fixes several issues in SSTables 3.x ('mc') writing and
parsing and extends existing SSTables unit tests to cover the new
format.

The only test enabled temporarily is check_multi_schema because it
turned out that reading SSTables 3.x with a different schema has not
been implemented in full. This will be addressed in a separate patchset.

This patchset depends on the "Support SSTables 3.x in Scylla runtime"
patchset.

In v3:
- Rebased on top of the refined "Support SSTables 3.x in Scylla
runtime" patchset.

GitHub URL: https://github.com/argenet/scylla/tree/projects/sstables-30/unit-tests/v3

Tests: unit {release}

Piotr Jastrzebski (4):
tests: Disable check_multi_schema for 'mc' format.
tests: Disable test_old_format_non_compound_range_tombstone_is_read
for 'mc' format.
tests: Extend reader assertions to check clustering keys made full.
tests: Fix test_wrong_range_tombstone_order for 'mc' format.
tests: Enable existing SSTables tests for 'mc' format.

configure.py | 2 +-
clustering_ranges_walker.hh | 4 +
mutation_fragment.hh | 1 +
position_in_partition.hh | 5 +
sstables/mp_row_consumer.hh | 21 ++-
sstables/mutation_fragment_filter.hh | 4 +
tests/flat_mutation_reader_assertions.hh | 5 +-
tests/normalizing_reader.hh | 59 ++++++++
tests/sstable_test.hh | 3 +-
mutation_fragment.cc | 4 +
sstables/partition.cc | 11 +-
sstables/sstables.cc | 2 +-
tests/normalizing_reader.cc | 100 +++++++++++++
tests/sstable_3_x_test.cc | 41 +++---
tests/sstable_datafile_test.cc | 137 +++++++++++-------
tests/sstable_test.cc | 2 +-
.../mc-1-big-CompressionInfo.db | Bin 0 -> 51 bytes
.../mc-1-big-Data.db | Bin 0 -> 82 bytes
.../mc-1-big-Digest.crc32 | 1 +
.../mc-1-big-Filter.db | Bin 0 -> 176 bytes
.../mc-1-big-Index.db | Bin 0 -> 8 bytes
.../mc-1-big-Statistics.db | Bin 0 -> 4653 bytes
.../mc-1-big-Summary.db | Bin 0 -> 56 bytes
.../mc-1-big-TOC.txt | 8 +
.../mc-5-big-CompressionInfo.db | Bin 0 -> 51 bytes
.../mc-5-big-Data.db | Bin 0 -> 146 bytes
.../mc-5-big-Digest.crc32 | 1 +
.../mc-5-big-Filter.db | Bin 0 -> 176 bytes
.../mc-5-big-Index.db | Bin 0 -> 8 bytes
.../mc-5-big-Statistics.db | Bin 0 -> 4712 bytes
.../mc-5-big-Summary.db | Bin 0 -> 56 bytes
.../mc-5-big-TOC.txt | 8 +
.../mc-3-big-CompressionInfo.db | Bin 0 -> 75 bytes
.../mc-3-big-Data.db | Bin 0 -> 144236 bytes
.../mc-3-big-Digest.crc32 | 1 +
.../mc-3-big-Filter.db | Bin 0 -> 176 bytes
.../mc-3-big-Index.db | Bin 0 -> 106 bytes
.../mc-3-big-Statistics.db | Bin 0 -> 4630 bytes
.../mc-3-big-Summary.db | Bin 0 -> 50 bytes
.../mc-3-big-TOC.txt | 8 +
.../mc-1-big-CRC.db | Bin 0 -> 8 bytes
.../mc-1-big-Data.db | Bin 0 -> 307 bytes
.../mc-1-big-Digest.crc32 | 1 +
.../mc-1-big-Filter.db | Bin 0 -> 24 bytes
.../mc-1-big-Index.db | Bin 0 -> 85 bytes
.../mc-1-big-Statistics.db | Bin 0 -> 4638 bytes
.../mc-1-big-Summary.db | Bin 0 -> 56 bytes
.../mc-1-big-TOC.txt | 8 +
.../mc-1-big-CompressionInfo.db | Bin 0 -> 43 bytes
.../mc-1-big-Data.db | Bin 0 -> 83 bytes
.../mc-1-big-Digest.crc32 | 1 +
.../mc-1-big-Filter.db | Bin 0 -> 16 bytes
.../mc-1-big-Index.db | Bin 0 -> 8 bytes
.../mc-1-big-Statistics.db | Bin 0 -> 4731 bytes
.../mc-1-big-Summary.db | Bin 0 -> 56 bytes
.../mc-1-big-TOC.txt | 8 +
.../mc-1-big-CRC.db | Bin 0 -> 8 bytes
.../mc-1-big-Data.db | Bin 0 -> 190 bytes
.../mc-1-big-Digest.crc32 | 1 +
.../mc-1-big-Filter.db | Bin 0 -> 16 bytes
.../mc-1-big-Index.db | Bin 0 -> 16 bytes
.../mc-1-big-Statistics.db | Bin 0 -> 4768 bytes
.../mc-1-big-Summary.db | Bin 0 -> 56 bytes
.../mc-1-big-TOC.txt | 8 +
.../mc-1-big-CompressionInfo.db | Bin 0 -> 51 bytes
.../mc-1-big-Data.db | Bin 0 -> 1290 bytes
.../mc-1-big-Digest.crc32 | 1 +
.../mc-1-big-Filter.db | Bin 0 -> 176 bytes
.../mc-1-big-Index.db | Bin 0 -> 1164 bytes
.../mc-1-big-Statistics.db | Bin 0 -> 4922 bytes
.../mc-1-big-Summary.db | Bin 0 -> 72 bytes
.../mc-1-big-TOC.txt | 8 +
.../mc-2-big-CRC.db | Bin 0 -> 12 bytes
.../mc-2-big-Data.db | Bin 0 -> 4471 bytes
.../mc-2-big-Digest.crc32 | 1 +
.../mc-2-big-Filter.db | Bin 0 -> 176 bytes
.../mc-2-big-Index.db | Bin 0 -> 25 bytes
.../mc-2-big-Statistics.db | Bin 0 -> 4865 bytes
.../mc-2-big-Summary.db | Bin 0 -> 68 bytes
.../mc-2-big-TOC.txt | 8 +
.../mc-1-big-CompressionInfo.db | Bin 0 -> 43 bytes
.../mc-1-big-Data.db | Bin 0 -> 281 bytes
.../mc-1-big-Digest.crc32 | 1 +
.../mc-1-big-Filter.db | Bin 0 -> 16 bytes
.../mc-1-big-Index.db | Bin 0 -> 8 bytes
.../mc-1-big-Statistics.db | Bin 0 -> 4817 bytes
.../mc-1-big-Summary.db | Bin 0 -> 56 bytes
.../mc-1-big-TOC.txt | 8 +
88 files changed, 397 insertions(+), 85 deletions(-)
create mode 100644 tests/normalizing_reader.hh
create mode 100644 tests/normalizing_reader.cc
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-CompressionInfo.db
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Data.db
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Digest.crc32
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Filter.db
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Index.db
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Statistics.db
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Summary.db
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-TOC.txt
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-CompressionInfo.db
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Data.db
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Digest.crc32
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Filter.db
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Index.db
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Statistics.db
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Summary.db
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-TOC.txt
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-CRC.db
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CRC.db
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-CRC.db
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Data.db
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Digest.crc32
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Filter.db
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Index.db
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Statistics.db
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Summary.db
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-TOC.txt
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt

--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 25, 2018, 9:25:01 PM9/25/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
From: Piotr Jastrzebski <pi...@scylladb.com>

This method returns end of current position range.

Signed-off-by: Piotr Jastrzebski <pi...@scylladb.com>
---
clustering_ranges_walker.hh | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/clustering_ranges_walker.hh b/clustering_ranges_walker.hh
index 3824dab69c..e95d99cb5e 100644
--- a/clustering_ranges_walker.hh
+++ b/clustering_ranges_walker.hh
@@ -200,6 +200,10 @@ class clustering_ranges_walker {
return _current_start;
}

+ position_in_partition_view upper_bound() const {
+ return _current_end;
+ }
+
// When lower_bound() changes, this also does
// Always > 0.
size_t lower_bound_change_counter() const {
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 25, 2018, 9:25:01 PM9/25/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
From: Piotr Jastrzebski <pi...@scylladb.com>

This will be used in sstables 3.

Signed-off-by: Piotr Jastrzebski <pi...@scylladb.com>
---
position_in_partition.hh | 5 +++++
1 file changed, 5 insertions(+)

diff --git a/position_in_partition.hh b/position_in_partition.hh
index 9716959423..6188cd4749 100644
--- a/position_in_partition.hh
+++ b/position_in_partition.hh
@@ -179,6 +179,11 @@ class position_in_partition_view {
return bound_view(*_ck, _bound_weight < 0 ? bound_kind::incl_start : bound_kind::excl_start);
}

+ bound_view as_end_bound_view() const {
+ assert(_bound_weight != 0);
+ return bound_view(*_ck, _bound_weight < 0 ? bound_kind::excl_end : bound_kind::incl_end);
+ }
+
friend std::ostream& operator<<(std::ostream&, position_in_partition_view);
friend bool no_clustering_row_between(const schema&, position_in_partition_view, position_in_partition_view);
};
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 25, 2018, 9:25:02 PM9/25/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
From: Piotr Jastrzebski <pi...@scylladb.com>

This method returns end of current position range.

Signed-off-by: Piotr Jastrzebski <pi...@scylladb.com>
---
sstables/mutation_fragment_filter.hh | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/sstables/mutation_fragment_filter.hh b/sstables/mutation_fragment_filter.hh
index 9f6f0a6382..d4acbfbc07 100644
--- a/sstables/mutation_fragment_filter.hh
+++ b/sstables/mutation_fragment_filter.hh
@@ -153,6 +153,10 @@ class mutation_fragment_filter {
position_in_partition_view lower_bound() const {
return _walker.lower_bound();
}
+
+ position_in_partition_view upper_bound() const {
+ return _walker.upper_bound();
+ }
};

}; // namespace sstables
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 25, 2018, 9:25:04 PM9/25/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
From: Piotr Jastrzebski <pi...@scylladb.com>

If we go past the slice to be read with a range tombstone being opened
we need to emit an RT corresponding to this slice.

Signed-off-by: Piotr Jastrzebski <pi...@scylladb.com>
---
sstables/mp_row_consumer.hh | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/sstables/mp_row_consumer.hh b/sstables/mp_row_consumer.hh
index eea012c5d0..42cd91a4b0 100644
--- a/sstables/mp_row_consumer.hh
+++ b/sstables/mp_row_consumer.hh
@@ -1220,7 +1220,17 @@ class mp_row_consumer_m : public consumer_m {
virtual proceed consume_partition_end() override {
sstlog.trace("mp_row_consumer_m {}: consume_partition_end()", this);
if (_opened_range_tombstone) {
- throw sstables::malformed_sstable_exception("Unclosed range tombstone.");
+ if (!_mf_filter || _mf_filter->out_of_range()) {
+ throw sstables::malformed_sstable_exception("Unclosed range tombstone.");
+ }
+ auto range_end = _mf_filter->upper_bound();
+ position_in_partition::less_compare less(*_schema);
+ auto start_pos = position_in_partition_view(position_in_partition_view::range_tag_t{},
+ bound_view(_opened_range_tombstone->ck, _opened_range_tombstone->kind));
+ if (!less(range_end, start_pos)) {
+ auto end_bound = range_end.as_end_bound_view();
+ consume_range_tombstone_end(end_bound.prefix(), end_bound.kind(), _opened_range_tombstone->tomb);
+ }
}
_is_mutation_end = true;
_in_progress_row.reset();
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 25, 2018, 9:25:04 PM9/25/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
sstables/sstables.cc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sstables/sstables.cc b/sstables/sstables.cc
index 28e8d89f69..f3afd7b680 100644
--- a/sstables/sstables.cc
+++ b/sstables/sstables.cc
@@ -3366,7 +3366,7 @@ static void write_clustering_prefix(file_writer& writer, bound_kind_m kind,

void sstable_writer_m::write_promoted_index(file_writer& writer) {
static constexpr size_t width_base = 65536;
- if (_pi_write_m.promoted_index.empty()) {
+ if (_pi_write_m.promoted_index.size() < 2) {
return;
}
write_vint(writer, _partition_header_length);
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 25, 2018, 9:25:05 PM9/25/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
This fixes the monotonicity issue as otherwise the range tombstone
emitted after such clustering row has a start position that should be
ordered before that of the row.

Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
sstables/mp_row_consumer.hh | 9 ++++----
tests/sstable_3_x_test.cc | 41 +++++++++++++++++++++----------------
2 files changed, 28 insertions(+), 22 deletions(-)

diff --git a/sstables/mp_row_consumer.hh b/sstables/mp_row_consumer.hh
index 42cd91a4b0..c3ce8cb06e 100644
--- a/sstables/mp_row_consumer.hh
+++ b/sstables/mp_row_consumer.hh
@@ -883,14 +883,15 @@ class mp_row_consumer_m : public consumer_m {
* and the end built from the row position because it also overlaps with query ranges.
*/
auto ck = cr.key();
- auto end_kind = clustering_key::make_full(*_schema, ck) ? bound_kind::excl_end : bound_kind::incl_end;
+ bool was_non_full_key = clustering_key::make_full(*_schema, ck);
+ auto end_kind = was_non_full_key ? bound_kind::excl_end : bound_kind::incl_end;
_reader->push_mutation_fragment(range_tombstone(std::move(_opened_range_tombstone->ck),
_opened_range_tombstone->kind,
ck,
end_kind,
_opened_range_tombstone->tomb));
_opened_range_tombstone->ck = std::move(ck);
- _opened_range_tombstone->kind = bound_kind::incl_start;
+ _opened_range_tombstone->kind = was_non_full_key ? bound_kind::incl_start : bound_kind::excl_start;
}
_reader->push_mutation_fragment(std::move(cr));
break;
@@ -898,9 +899,9 @@ class mp_row_consumer_m : public consumer_m {
if (_opened_range_tombstone) {
// Trim the opened range up to the clustering key of the current row
auto& ck = cr.key();
- clustering_key::make_full(*_schema, ck);
+ bool was_non_full_key = clustering_key::make_full(*_schema, ck);
_opened_range_tombstone->ck = std::move(ck);
- _opened_range_tombstone->kind = bound_kind::incl_start;
+ _opened_range_tombstone->kind = was_non_full_key ? bound_kind::incl_start : bound_kind::excl_start;
}
if (_mf_filter->is_current_range_changed()) {
return proceed::no;
diff --git a/tests/sstable_3_x_test.cc b/tests/sstable_3_x_test.cc
index 59fc952bf2..3c07a448fd 100644
--- a/tests/sstable_3_x_test.cc
+++ b/tests/sstable_3_x_test.cc
@@ -1006,15 +1006,20 @@ SEASTAR_THREAD_TEST_CASE(test_uncompressed_slicing_interleaved_rows_and_rts_read
auto make_tombstone = [] (int64_t ts, int32_t tp) {
return tombstone{api::timestamp_type{ts}, gc_clock::time_point(gc_clock::duration(tp))};
};
- auto make_range_tombstone = [] (clustering_key_prefix start, clustering_key_prefix end, tombstone t) {
- return range_tombstone {
- std::move(start),
- bound_kind::incl_start,
- std::move(end),
- bound_kind::incl_end,
- t};
+ const auto make_range_tombstone_creator = [] (bound_kind start_kind) {
+ return [start_kind] (clustering_key_prefix start, clustering_key_prefix end, tombstone t) {
+ return range_tombstone {
+ std::move(start),
+ start_kind,
+ std::move(end),
+ bound_kind::incl_end,
+ t};
+ };
};

+ const auto make_rt_incl_start = make_range_tombstone_creator(bound_kind::incl_start);
+ const auto make_rt_excl_start = make_range_tombstone_creator(bound_kind::excl_start);
+
auto make_clustering_range = [] (clustering_key_prefix&& start, clustering_key_prefix&& end) {
return query::clustering_range::make(
query::clustering_range::bound(std::move(start), true),
@@ -1044,9 +1049,9 @@ SEASTAR_THREAD_TEST_CASE(test_uncompressed_slicing_interleaved_rows_and_rts_read

for (auto idx : boost::irange(1, 1024 * 128, 5)) {
range_tombstone rt1 =
- make_range_tombstone(to_non_full_ck(idx), to_full_ck(idx + 3, idx + 3), tomb);
+ make_rt_incl_start(to_non_full_ck(idx), to_full_ck(idx + 3, idx + 3), tomb);
range_tombstone rt2 =
- make_range_tombstone(to_full_ck(idx + 3, idx + 3), to_non_full_ck(idx + 4), tomb);
+ make_rt_excl_start(to_full_ck(idx + 3, idx + 3), to_non_full_ck(idx + 4), tomb);

r.produces_range_tombstone(rt1)
.produces_row(to_full_ck(idx + 3, idx + 3), to_expected(idx + 3))
@@ -1071,14 +1076,14 @@ SEASTAR_THREAD_TEST_CASE(test_uncompressed_slicing_interleaved_rows_and_rts_read
auto clustering_range = make_clustering_range(to_non_full_ck(7000), to_non_full_ck(8000));

range_tombstone rt =
- make_range_tombstone(to_full_ck(7459, 7459), to_non_full_ck(7460), tomb);
+ make_rt_excl_start(to_full_ck(7459, 7459), to_non_full_ck(7460), tomb);
r.produces_range_tombstone(rt, {clustering_range});

for (auto idx : boost::irange(7461, 7501, 5)) {
range_tombstone rt1 =
- make_range_tombstone(to_non_full_ck(idx), to_full_ck(idx + 3, idx + 3), tomb);
+ make_rt_incl_start(to_non_full_ck(idx), to_full_ck(idx + 3, idx + 3), tomb);
range_tombstone rt2 =
- make_range_tombstone(to_full_ck(idx + 3, idx + 3), to_non_full_ck(idx + 4), tomb);
+ make_rt_excl_start(to_full_ck(idx + 3, idx + 3), to_non_full_ck(idx + 4), tomb);

r.produces_range_tombstone(rt1, {clustering_range})
.produces_row(to_full_ck(idx + 3, idx + 3), to_expected(idx + 3))
@@ -1102,15 +1107,15 @@ SEASTAR_THREAD_TEST_CASE(test_uncompressed_slicing_interleaved_rows_and_rts_read

auto clustering_range = make_clustering_range(to_non_full_ck(7000), to_non_full_ck(8000));
range_tombstone rt =
- make_range_tombstone(to_full_ck(7459, 7459), to_non_full_ck(7460), tomb);
+ make_rt_excl_start(to_full_ck(7459, 7459), to_non_full_ck(7460), tomb);

r.produces_range_tombstone(rt, {clustering_range});

for (auto idx : boost::irange(7461, 7501, 5)) {
range_tombstone rt1 =
- make_range_tombstone(to_non_full_ck(idx), to_full_ck(idx + 3, idx + 3), tomb);
+ make_rt_incl_start(to_non_full_ck(idx), to_full_ck(idx + 3, idx + 3), tomb);
range_tombstone rt2 =
- make_range_tombstone(to_full_ck(idx + 3, idx + 3), to_non_full_ck(idx + 4), tomb);
+ make_rt_excl_start(to_full_ck(idx + 3, idx + 3), to_non_full_ck(idx + 4), tomb);

r.produces_range_tombstone(rt1, {clustering_range})
.produces_row(to_full_ck(idx + 3, idx + 3), to_expected(idx + 3))
@@ -1137,15 +1142,15 @@ SEASTAR_THREAD_TEST_CASE(test_uncompressed_slicing_interleaved_rows_and_rts_read

auto clustering_range = make_clustering_range(to_non_full_ck(7000), to_non_full_ck(8000));
range_tombstone rt =
- make_range_tombstone(to_full_ck(7469, 7469), to_non_full_ck(7470), tomb);
+ make_rt_excl_start(to_full_ck(7469, 7469), to_non_full_ck(7470), tomb);

r.produces_range_tombstone(rt, {clustering_range});

for (auto idx : boost::irange(7471, 7501, 5)) {
range_tombstone rt1 =
- make_range_tombstone(to_non_full_ck(idx), to_full_ck(idx + 3, idx + 3), tomb);
+ make_rt_incl_start(to_non_full_ck(idx), to_full_ck(idx + 3, idx + 3), tomb);
range_tombstone rt2 =
- make_range_tombstone(to_full_ck(idx + 3, idx + 3), to_non_full_ck(idx + 4), tomb);
+ make_rt_excl_start(to_full_ck(idx + 3, idx + 3), to_non_full_ck(idx + 4), tomb);

r.produces_range_tombstone(rt1, {clustering_range})
.produces_row(to_full_ck(idx + 3, idx + 3), to_expected(idx + 3))
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 25, 2018, 9:25:07 PM9/25/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
sstables/partition.cc | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/sstables/partition.cc b/sstables/partition.cc
index 2577c0cda7..aa31dcaa9e 100644
--- a/sstables/partition.cc
+++ b/sstables/partition.cc
@@ -101,13 +101,18 @@ concept bool RowConsumer() {
* For other consumers, it is a no-op.
*/
template <typename Consumer>
-void set_range_tombstone_start_from_end_open_marker(Consumer& c, const index_reader& idx) {
+void set_range_tombstone_start_from_end_open_marker(Consumer& c, const schema& s, const index_reader& idx) {
if constexpr (Consumer::is_setting_range_tombstone_start_supported) {
auto open_end_marker = idx.end_open_marker();
if (open_end_marker) {
auto[pos, tomb] = *open_end_marker;
if (pos.is_clustering_row()) {
- c.set_range_tombstone_start(pos.key(), bound_kind::excl_start, tomb);
+ auto ck = pos.key();
+ bool was_non_full = clustering_key::make_full(s, ck);
+ c.set_range_tombstone_start(
+ std::move(ck),
+ was_non_full ? bound_kind::incl_start : bound_kind::excl_start,
+ tomb);
} else {
auto view = position_in_partition_view(pos).as_start_bound_view();
c.set_range_tombstone_start(view.prefix(), view.kind(), tomb);
@@ -374,7 +379,7 @@ class sstable_mutation_reader : public mp_row_consumer_reader {
return make_ready_future<>();
}
return _context->skip_to(idx.element_kind(), index_position.start).then([this, &idx] {
- set_range_tombstone_start_from_end_open_marker(_consumer, idx);
+ set_range_tombstone_start_from_end_open_marker(_consumer, *_schema, idx);

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 25, 2018, 9:25:07 PM9/25/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
The method checks if the underlying range_tombstone_list is empty.

Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
mutation_fragment.hh | 1 +
mutation_fragment.cc | 4 ++++
2 files changed, 5 insertions(+)

diff --git a/mutation_fragment.hh b/mutation_fragment.hh
index 3ebc4b1297..7d31290343 100644
--- a/mutation_fragment.hh
+++ b/mutation_fragment.hh
@@ -595,6 +595,7 @@ class range_tombstone_stream {
}
void apply(const range_tombstone_list&, const query::clustering_range&);
void reset();
+ bool empty() const;
friend std::ostream& operator<<(std::ostream& out, const range_tombstone_stream&);
};

diff --git a/mutation_fragment.cc b/mutation_fragment.cc
index 04c2e871ff..a13bcdf935 100644
--- a/mutation_fragment.cc
+++ b/mutation_fragment.cc
@@ -268,6 +268,10 @@ void range_tombstone_stream::reset() {
_list.clear();
}

+bool range_tombstone_stream::empty() const {
+ return _list.empty();
+}
+
position_range position_range::from_range(const query::clustering_range& range) {
auto bv_range = bound_view::from_range(range);
return {
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 25, 2018, 9:25:08 PM9/25/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
This is a helper flat_mutation_reader that wraps another reader and
splits range tombstones over rows before emitting them.

It is used to produce the same mutation streams for both old (ka/la) and
new (mc) SSTables formats in unit tests.

Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
configure.py | 2 +-
tests/normalizing_reader.hh | 59 +++++++++++++++++++++
tests/normalizing_reader.cc | 100 ++++++++++++++++++++++++++++++++++++
3 files changed, 160 insertions(+), 1 deletion(-)
create mode 100644 tests/normalizing_reader.hh
create mode 100644 tests/normalizing_reader.cc

diff --git a/configure.py b/configure.py
index d1a698e0c2..ee523877a3 100755
--- a/configure.py
+++ b/configure.py
@@ -833,7 +833,7 @@ perf_tests_seastar_deps = [
for t in perf_tests:
deps[t] = [t + '.cc'] + scylla_tests_dependencies + perf_tests_seastar_deps

-deps['tests/sstable_test'] += ['tests/sstable_datafile_test.cc', 'tests/sstable_utils.cc']
+deps['tests/sstable_test'] += ['tests/sstable_datafile_test.cc', 'tests/sstable_utils.cc', 'tests/normalizing_reader.cc']
deps['tests/mutation_reader_test'] += ['tests/sstable_utils.cc']

deps['tests/bytes_ostream_test'] = ['tests/bytes_ostream_test.cc', 'utils/managed_bytes.cc', 'utils/logalloc.cc', 'utils/dynamic_bitset.cc']
diff --git a/tests/normalizing_reader.hh b/tests/normalizing_reader.hh
new file mode 100644
index 0000000000..74c531857b
--- /dev/null
+++ b/tests/normalizing_reader.hh
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2018 ScyllaDB
+ */
+
+/*
+ * This file is part of Scylla.
+ *
+ * Scylla is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Scylla is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Scylla. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "mutation_reader.hh"
+#include "core/future.hh"
+#include "flat_mutation_reader.hh"
+
+/*
+ * A helper class that wraps another flat_mutation_reader
+ * and splits range tombstones across rows before pushing them
+ * to the buffer.
+ *
+ * Used for bringing mutation stream read from old SSTables formats (ka/la)
+ * to the uniformed representation with that of a new format (mc).
+ */
+class normalizing_reader : public flat_mutation_reader::impl {
+ flat_mutation_reader _rd;
+ range_tombstone_stream _range_tombstones;
+public:
+ normalizing_reader(flat_mutation_reader rd);
+
+ virtual future<> fill_buffer(db::timeout_clock::time_point timeout) override;
+
+ virtual void next_partition() override;
+
+ virtual future<> fast_forward_to(const dht::partition_range& pr, db::timeout_clock::time_point timeout) override;
+
+ virtual future<> fast_forward_to(position_range pr, db::timeout_clock::time_point timeout) override;
+
+ virtual size_t buffer_size() const override;
+};
+
+// Creates a mutation_reader wrapper which creates a new stream of mutations
+// with some mutations removed from the original stream.
+// MutationFilter is a callable which decides which mutations are dropped. It
+// accepts mutation const& and returns a bool. The mutation stays in the
+// stream if and only if the filter returns true.
+flat_mutation_reader make_normalizing_reader(flat_mutation_reader rd);
+
diff --git a/tests/normalizing_reader.cc b/tests/normalizing_reader.cc
new file mode 100644
index 0000000000..3952176e56
--- /dev/null
+++ b/tests/normalizing_reader.cc
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2018 ScyllaDB
+ */
+
+/*
+ * This file is part of Scylla.
+ *
+ * Scylla is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Scylla is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Scylla. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "normalizing_reader.hh"
+#include "core/future-util.hh"
+
+normalizing_reader::normalizing_reader(flat_mutation_reader rd)
+ : impl(rd.schema())
+ , _rd(std::move(rd))
+ , _range_tombstones(*_rd.schema())
+{}
+
+future<> normalizing_reader::fill_buffer(db::timeout_clock::time_point timeout) {
+ return do_until([this] { return is_buffer_full() || is_end_of_stream(); }, [this, timeout] {
+ return _rd.fill_buffer(timeout).then([this] {
+ position_in_partition::less_compare less{*_rd.schema()};
+ position_in_partition::equal_compare eq{*_rd.schema()};
+ while (!_rd.is_buffer_empty()) {
+ auto mf = _rd.pop_mutation_fragment();
+ if (mf.is_end_of_partition()) {
+ while (auto mfo = _range_tombstones.get_next()) {
+ push_mutation_fragment(std::move(*mfo));
+ }
+ } else if (mf.is_range_tombstone()) {
+ _range_tombstones.apply(std::move(mf).as_range_tombstone());
+ continue;
+ } else if (mf.is_clustering_row()) {
+ const clustering_row& cr = mf.as_clustering_row();
+ auto ck = cr.key();
+ auto end_kind = clustering_key::make_full(*_schema, ck) ? bound_kind::excl_end : bound_kind::incl_end;
+ while (auto mfo = _range_tombstones.get_next(mf)) {
+ range_tombstone&& rt = std::move(*mfo).as_range_tombstone();
+ if (less(rt.end_position(), cr.position())
+ || eq(rt.end_position(), position_in_partition::after_key(ck))) {
+ push_mutation_fragment(std::move(rt));
+ } else {
+ push_mutation_fragment(range_tombstone{
+ rt.start_bound(),
+ bound_view{ck, end_kind},
+ rt.tomb});
+
+ rt.trim_front(*_rd.schema(), position_in_partition::after_key(ck));
+ _range_tombstones.apply(std::move(rt));
+ break;
+ }
+ }
+ }
+
+ push_mutation_fragment(std::move(mf));
+ }
+ _end_of_stream = _rd.is_end_of_stream() && _range_tombstones.empty();
+ });
+ });
+}
+
+void normalizing_reader::next_partition() {
+ clear_buffer_to_next_partition();
+ if (is_buffer_empty()) {
+ _end_of_stream = false;
+ _rd.next_partition();
+ }
+}
+future<> normalizing_reader::fast_forward_to(
+ const dht::partition_range& pr, db::timeout_clock::time_point timeout) {
+ clear_buffer();
+ _end_of_stream = false;
+ return _rd.fast_forward_to(pr, timeout);
+}
+future<> normalizing_reader::fast_forward_to(
+ position_range pr, db::timeout_clock::time_point timeout) {
+ forward_buffer_to(pr.start());
+ _end_of_stream = false;
+ return _rd.fast_forward_to(std::move(pr), timeout);
+}
+size_t normalizing_reader::buffer_size() const {
+ return flat_mutation_reader::impl::buffer_size() + _rd.buffer_size();
+}
+
+flat_mutation_reader make_normalizing_reader(flat_mutation_reader rd) {
+ return make_flat_mutation_reader<normalizing_reader>(std::move(rd));
+}
+
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 25, 2018, 9:25:09 PM9/25/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
.../mc-1-big-CRC.db | Bin 0 -> 8 bytes
.../mc-1-big-Data.db | Bin 0 -> 190 bytes
.../mc-1-big-Digest.crc32 | 1 +
.../mc-1-big-Filter.db | Bin 0 -> 16 bytes
.../mc-1-big-Index.db | Bin 0 -> 16 bytes
.../mc-1-big-Statistics.db | Bin 0 -> 4768 bytes
.../mc-1-big-Summary.db | Bin 0 -> 56 bytes
.../mc-1-big-TOC.txt | 8 ++++++++
8 files changed, 9 insertions(+)
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CRC.db
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
create mode 100644 tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt

diff --git a/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CRC.db b/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CRC.db
new file mode 100644
index 0000000000000000000000000000000000000000..cfcc6734935654417e36cb3572703bf015e1c895
GIT binary patch
literal 8
PcmZQzWMFtKSTGv^1xW${

literal 0
HcmV?d00001

diff --git a/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db b/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
new file mode 100644
index 0000000000000000000000000000000000000000..281c3088e9a7930075e96c8801a6c7e787d7f5b9
GIT binary patch
literal 190
zcmZQzVPIfjtpET2e*=&K0w4hfMsA@;n%eP993VDWgc&F@_pKF@2rIYHW4@kThzKJ@
zABI5;96}5b6)s?NCHNoYKlsN8B>plm@qkSRlZ+r)1}1KKCWZ$$H~$2(nIYD42tD+c
ZYG&f)1M6qu;eWVufeIs#P!?ri1OQH?AejIF

literal 0
HcmV?d00001

diff --git a/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32 b/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
new file mode 100644
index 0000000000..5a5cc7fba4
--- /dev/null
+++ b/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
@@ -0,0 +1 @@
+3809570971
\ No newline at end of file
diff --git a/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db b/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
new file mode 100644
index 0000000000000000000000000000000000000000..ee71a0f649d57455d42fae85417fc46c9704787a
GIT binary patch
literal 16
XcmZQzU|?lnU|?iWQgArYz#sqs2lxTu

literal 0
HcmV?d00001

diff --git a/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db b/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
new file mode 100644
index 0000000000000000000000000000000000000000..b5eead25ee8c2b16599b2625c7064de8470f5e38
GIT binary patch
literal 16
TcmZQzVPIfj1Y!`);K=|00R;e4

literal 0
HcmV?d00001

diff --git a/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db b/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
new file mode 100644
index 0000000000000000000000000000000000000000..8e4df3c409ceae8485c0748ee3fb8921d6a1ea35
GIT binary patch
literal 4768
zcmeI$e@q)?7zglsuPw9;DlO~>7>L_I1~X++5vLmn>jE{JA&iYVjXR(jEb=35LByHq
z#F!98G$LEZHk}DsfQ(Gk0g~;HDfnZ$jhNM`Bbao|jA+qplL?{Tg&sWLSIw6ApXr-i
z?)}{J^zOa)-n)Byf*@#xxso8Sn7nM07g1g+<wYY1rU7AfwR5LMs*y^|9hOqb<&vt(
zoRX!i+--TR)>&EWwB}1rcZIv6y2|0qYHau^_gM7v@{c3^e*bJl3=@yMK5ZC0-mL7j
zO<t6u9EcX)N-iyOL!hXQRyXR@N?;wrIh3=Wa~S7v&PL8A&e5EgagO7>l5+~@G|uZd
z=LM|x+ZHaqlZ)@>;;o!}IeXBIyB_R*F7D=h5-l#}ycezE_OEHjxV8wbv!X-RqeHp#
z)lXwQY#1HxL*MZV+Wanh$rI?<5%gWD=(`W2Eyd`JgXo+=bpB%Wju^D-adeY}?%>An
zunptBcrc6q4PCq$eGtbd^Id?rSg4N6xy|C2Xif1qkgwI^_}894199Ew&ESy9PO!ev
z4>rs?z>8+1z{WBhk0#sC5RdL(0$w&63y$*?fLETy>zy)%*W2213i8*FT?RjrjqTeO
z>xKBPU(DbaH}!z`-+Tbv_bK+zr9S9S78ZG(=CiEa*T8#L90h-MdJVOhbON5Q;ycD~
zX<QRq5934A|CE8owe^NfYTc6_INy-!ih3Fk?epHCHrO^^qh1t00QXZwvH2X0M{4Xt
z)KM9UFrJqhZ|<Y<JG<VzO1=EPybq|8zT3KvI`v%nG3vEDUN}T;`+m(<>Vm_S>C~l(
zA3sc8_h-a7b@OMPxzt^S`&UqZ-PZU9^^K24HWIT{5heZ9r5iTT`=52@pP=_Y^S^DR
z_rK`yj($RZFOGF*HV|vv%=;FxHsP$<PCYfXn_eH?A1$r){SlfRHJ(lK^=-!+J|qs?
z^xlw@IQ;46U+MW9FPg5>^EaK(>ot@7#ZprZeILXe%^I+fc>EXRW_rC6e$TZxk@!7D
zzC=17NViT58A&|Lb7kOJ;z!$ix@mj1`_`t@@my74>u4eQjU|1<W5kDkyfoNBeDcWq
zJ+!^v(<vhv3vp(C`OHiXv3=L|>AedUT!A`1ga1AU6S=&9n{%oA(UD^)Rd^=I{=d$-
z)YIOgRsw5v&ZTaqV@}!Dss;k<Ud|qLaL$GO5u9^De+1`Tsn8$6IaeC(kKml^zs$Lq
z<Kk$yAUtHgCg^H^NQkS+RMttWXS%kxFQ3>Wf7np_`qZRa6UyWo%f4_$|I+*><pT;7
zHvhS0t~UP;RbQ6!hl#+!ADmSF1j;X4>V<~Q6t&dlOlDp_@alw+{Ldd~N-UL<(^W1#
rW3gAct!bN|t8uW~PZdP5?%vx^7wggrZq<xJhg)gHs$1pFH#hk&Tp+Tv

literal 0
HcmV?d00001

diff --git a/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db b/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
new file mode 100644
index 0000000000000000000000000000000000000000..dc507f24e878d2904638cce0ab95406a9c05252f
GIT binary patch
literal 56
lcmZQzU}#`qU|<Ad5D)<31|Vi+0TLh@LV-z;5Qq<!0st`t0U-bY

literal 0
HcmV?d00001

diff --git a/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt b/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
new file mode 100644
index 0000000000..5f3ac91967
--- /dev/null
+++ b/tests/sstables/sliced_mutation_reads/ks/sliced_mutation_reads_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
@@ -0,0 +1,8 @@
+Statistics.db
+Summary.db

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 25, 2018, 9:25:10 PM9/25/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
.../mc-1-big-CompressionInfo.db | Bin 0 -> 51 bytes
.../mc-1-big-Data.db | Bin 0 -> 82 bytes
.../mc-1-big-Digest.crc32 | 1 +
.../mc-1-big-Filter.db | Bin 0 -> 176 bytes
.../mc-1-big-Index.db | Bin 0 -> 8 bytes
.../mc-1-big-Statistics.db | Bin 0 -> 4653 bytes
.../mc-1-big-Summary.db | Bin 0 -> 56 bytes
.../mc-1-big-TOC.txt | 8 ++++++++
8 files changed, 9 insertions(+)
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
create mode 100644 tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt

diff --git a/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db b/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
new file mode 100644
index 0000000000000000000000000000000000000000..a411d5c1698ea447838d87b0490911bd0adb1566
GIT binary patch
literal 51
kcmZSJ^@%cZ&d)6<N-ZwVFJb@zMlcB?e1Vt=&Vw*K0p9xst^fc4

literal 0
HcmV?d00001

diff --git a/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db b/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
new file mode 100644
index 0000000000000000000000000000000000000000..9779a808fd08b38c22c183f5348b3a808df5c1cc
GIT binary patch
literal 82
zcmeZeU|=}Jzyc&0>;M1%-@w4gAfUj`V8F;O#LiI2z{tc16j5b(%JiR;?_r<uy(hvG
d<eAvS7!ELUioy7dg;KiZKob}kjwyYY1po-}6sQ0I

literal 0
HcmV?d00001

diff --git a/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32 b/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
new file mode 100644
index 0000000000..e593accf3a
--- /dev/null
+++ b/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
@@ -0,0 +1 @@
+2474332411
\ No newline at end of file
diff --git a/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db b/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
new file mode 100644
index 0000000000000000000000000000000000000000..34528f97ebd5bc6956b65758c59f739fa8aec983
GIT binary patch
literal 176
hcmZQzU|?lnU=U?c0FqP&4iNJ|lmLWD38?_q3;<MK0P6q%

literal 0
HcmV?d00001

diff --git a/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db b/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
new file mode 100644
index 0000000000000000000000000000000000000000..b077026fd87b3cdd609bc60c41ad771d3edb460d
GIT binary patch
literal 8
PcmZQzVPIfjWMBXQ04D$j

literal 0
HcmV?d00001

diff --git a/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db b/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
new file mode 100644
index 0000000000000000000000000000000000000000..d3e8854520269e519ae28bc16b8883e281c61c16
GIT binary patch
literal 4653
zcmeI$drTBZ90%~7-8&9WIK2ZO&`5oNR@yAaE24>VMbE$)TPgU!M_U)T2&TY!cUp?J
z8jJss7SX6^;=2hkXe6yKphitp(AHKZMyjcXCRf^M^lDQT#c=MyE&RTd{^6hf<0hHR
zeD*hYJ3BMGJ6S;xbV7ehQVXW$C2AJcT%u-45X=XKx69otWyPfw7CYra#p6-Rirk7^
zRP2@CU*j%a<F@7~Zf}XVq`b`OwpCUBo^>p4o%-YGKp@Z?6VKS8Z+fCs*Qq&}f+wMg
zcktvishxnNbyz#7*D9ehg0q2hBxfV%XwD|iX3lY(M{yp_c|7M7&Qmzg;G7+@Hg1c!
z_)5;}Iq%?noO1`7ar42Za&a%`vuJT7=S^sd`+sQ<#&rwPdMi3&CfdMVZ)6X~jcw>?
zKYHk9wB-PL#8PxZJ9<nidcuCRoR3c5i=K4`oiiN0A|CDe5M8aH>$&yYX2-Zc5zG=F
zqw^P__u~3w{#y_i^R#u@e^~qxE#?0L?R7d_|GFDjA+En%1CIE+0UVhZ07vyY!9#ju
z!KNZyk7oN{5RYpf0UmWP0X(`R7d-wN&UZ>T&bPJp9JHU=`3HDzCiZVhf)C=W9$LT~
z=Qo0PKc5C}x`^X*w+Y6R8HYWg?U^m>Yw(6~hrvHxm`p8BJPprRai{4fjY|m?us)>b
zkAlzsfuyU5${2uJ(J$|S>y0Qcsi1K~lkX{Ylzq;>)I$<m;C_n9w_K<3VUnYjIyOBS
z*7Hcy^IbIl#*wY}smH#X{XO->Ul-4yPQ6}yjC%TtFZNN}?@V4yox8s@jk+-T)O*xx
zU&M4#*Ia7IqCS$hdmQ!8byZuapPp==L(JZaDQKoHoIRV~|EwYBG`;^>V7rOl|Dw}(
z?+5aGvGZs~C9&jXzHP+1q-z!jb$9oAIzRenwL9qh!!RkfE0eU3toyF=1hH}c!B#hM
z^d~is==Ga!oA1->H{ZxUZXxZ5E7dOgK8QbTYmrGj@k*D4&R5buS&nKFe`ldTneGSD
ztPfgEByQ{Yv*k15d3zd<(*7*-Pfw%kxh&USUrX9o6*RSV67T!%?wNYxvxmNIr2X|>
zNNG<Wj5EtuS6|K|cC32RvuV(RCsfy-!F;JT6}3vJ4DY#cK(sxVc65<e36<eJ7Ys;v
z&jrIFg!f!99^pM#c+W)^#Q$l}rGB&MOMTtbfBdDK_Shw;W$MM`50=KIytzS*YF)QI
zI)Afmos_4#NX;zs)@I{QE!h7NWl+KI9=c$wzHI2Livxc(@Luje``|fVW>_~aTkR5r
kN&o#3ra&%L+@50PQ`u4GwN6>^xy#93zp233+ShOW3ahJ)hX4Qo

literal 0
HcmV?d00001

diff --git a/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db b/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
new file mode 100644
index 0000000000000000000000000000000000000000..4547a9451a6c383b420c1e8b235d7444d1e8c901
GIT binary patch
literal 56
kcmZQzU}#`qU|<Ad5D)<31|Vi+0TLh@LV-z;5Qq<^0Wk#uA^-pY

literal 0
HcmV?d00001

diff --git a/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt b/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
new file mode 100644
index 0000000000..364c89f309
--- /dev/null
+++ b/tests/sstables/broken_non_compound_pi_and_range_tombstone/ks/test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
@@ -0,0 +1,8 @@
+Digest.crc32
+Filter.db
+Index.db
+Statistics.db
+Summary.db
+Data.db
+CompressionInfo.db
+TOC.txt
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 25, 2018, 9:25:12 PM9/25/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
.../mc-5-big-CompressionInfo.db | Bin 0 -> 51 bytes
.../mc-5-big-Data.db | Bin 0 -> 146 bytes
.../mc-5-big-Digest.crc32 | 1 +
.../mc-5-big-Filter.db | Bin 0 -> 176 bytes
.../mc-5-big-Index.db | Bin 0 -> 8 bytes
.../mc-5-big-Statistics.db | Bin 0 -> 4712 bytes
.../mc-5-big-Summary.db | Bin 0 -> 56 bytes
.../mc-5-big-TOC.txt | 8 ++++++++
8 files changed, 9 insertions(+)
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-CompressionInfo.db
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Data.db
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Digest.crc32
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Filter.db
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Index.db
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Statistics.db
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Summary.db
create mode 100644 tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-TOC.txt

diff --git a/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-CompressionInfo.db b/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-CompressionInfo.db
new file mode 100644
index 0000000000000000000000000000000000000000..87371de7809b87b14fa0628b2113c9defde77e61
GIT binary patch
literal 51
lcmZSJ^@%cZ&d)6<N-ZwVFJb@zMlcB?jsP(eoCjfa0s!d#24w&M

literal 0
HcmV?d00001

diff --git a/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Data.db b/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Data.db
new file mode 100644
index 0000000000000000000000000000000000000000..f287f6541cae83fafdcda56169a63e7f854843eb
GIT binary patch
literal 146
zcmX@Yz`(G9fdxo1)c^ngzk!p%5y(_vWB4f0FinWz!S+it+!&Y|7#bLxD_75SW%t_H
z5WA*zMKY(h3WEUy0~0I5M^>N)?j6exe}1IoY(MAay|5K-dF)~!Sw>a{CJhFDPX=x!
u#{Y~A@^d{Ic$gv?J}@xyG|XdSeQ_?;_fg7BA;z_HTGc=<U^u4qT^0a}DJv2H

literal 0
HcmV?d00001

diff --git a/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Digest.crc32 b/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Digest.crc32
new file mode 100644
index 0000000000..fffca614b0
--- /dev/null
+++ b/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Digest.crc32
@@ -0,0 +1 @@
+1110194964
\ No newline at end of file
diff --git a/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Filter.db b/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Filter.db
new file mode 100644
index 0000000000000000000000000000000000000000..ba6484bcc788a2d2e62bc10f602ccc594d6b84e7
GIT binary patch
literal 176
qcmZQzU|?lnU=Rgj1ZY4o8JLjRXiQ{fXi`XA1tc~qlLM7Y6b}HU>;Xjp

literal 0
HcmV?d00001

diff --git a/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Index.db b/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Index.db
new file mode 100644
index 0000000000000000000000000000000000000000..f9376371f57ea150ba2e6002d905fabebd52132f
GIT binary patch
literal 8
LcmZQzVE_XF03-kf

literal 0
HcmV?d00001

diff --git a/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Statistics.db b/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Statistics.db
new file mode 100644
index 0000000000000000000000000000000000000000..5e60a2402c2d7036b0b5e1949946103978217a43
GIT binary patch
literal 4712
zcmeI$eM}Q)90%~bYs;I^*@7=%B%8vVY&n$5n2FLMHPD4c20H6rGLO;-Mp|+$%21<G
zmStpPY?(t7#myzepph`Q3C!RhZm<_7N*1~;ldz<+#bxWZOo!7@pIT0S-^V4>CHt>W
z^5mXRf6w)K?s=ZOdvbyx=!HniU<Z-q4J=D6SF@}W1XG*vut(h_E47NV$|XA$uUBzb
zs)}4$<&&SRQ)}u}OR1vzs(sZSw@bA)HvCX@B4s-}IWZIpO(vy^;%MJ1iOj7mhf}x_
zns|pBr-^j}lGb7EM}t<FI>vC0<s8R3fpfU8G#M#a*~B@8^IXpJIWOd##W{!b3eLrx
zpXR)Y^A67YIG>!dHV=M`i`;yOk8*Jz=RUMFhw~n^j{ASzL5%Cyp$!&v%t~}DcfE1f
zF`h7hP7I>&dkJlR2R-{4blNcb{%rJvhtaYFop%Vm>NL7^7J6eU+WQo`NkO-B>vzD0
z@nAYwO#dD2Sc^V{>r)JlKwK)<)=}hV=?k>ZaSrP1^|=1^7X~42_^cTm^IHcvt~>;e
zpLBs|OeTYkmAD>Fwx1xL(lZ-8cQg$=-(Ln^IE3?^HG%VOX*mP+SB_l*KT&}F+mIH3
z_~u{C;N5FF!3VBA2JZd@$LC@<jHj3|^9rpmT8mx<?^<va{N>pt)Y76;@O+itHhxXx
zy0m&&AG)6B<7r%9AD>Tcc+L;k8{?_2r}5bCz*Xva+v-25XQcPS{gmV|pQrJeI(t8L
za$Y8^=Q+k}`)PdMu{SPLKd`L$ed<NutY1N$eZJ}h_4187+o)~dEm==pcDN>&+L`&$
z<J4RKP8z3f{<Ncr`dIma1=L@)Hoi`M^~2%S#NtCq6+P6>!a{ogiyft>=>0E--ZIkr
zUvdRTKPKl(W5@Fwh;=?O@FuZ7W5{f$o|xD{=g06@%Rc)4h+UjKUO?){wRSapK%B7V
z-F}rg@rCAJ>Gd1GHC?9HZ@N%?(oE{lQkrV%`ylnGwO1zb^v}o5biOkFD6%(^_#^9r
znRGvpYx%j~Na9xikG<Q7OAdA(r~P?0xICAxXLp&cy@k|otmqyXBX0Zt;^}tcz9a8-
z(*6d{W)0^}$3^qr!5gcH?VGP$-!pB&J5|PK@SS@wiK`dgbCE%0#s6#1rM2SM3Xx-U
z&xPX=-E+ZsME6|TFdor8R}LMI=$`Ap@447Fi(Bc|cp7ZyGS8Ik7uZpLt?QD*Wijt!
zQEjZP<1dda%kMhET*<OnFp^p_qy_JM$BMT<wM0s{-^tp`R*Ez|-N22Ez1sqVY=64=
zpTEFV$Tf=Utx~qgcDK)xv-ZVWmw5M81xa!)UHWhTT<EED`&??FXG>j;JKTcg%(?fI
FZUT6ArsMzs

literal 0
HcmV?d00001

diff --git a/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Summary.db b/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-Summary.db
new file mode 100644
index 0000000000000000000000000000000000000000..2044a14c2e39a55524e98a74a92e2c043fc70007
GIT binary patch
literal 56
fcmZQzU}#`qU|<Ad5D)<31|Vi+0TO5cCIqGdFya9p

literal 0
HcmV?d00001

diff --git a/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-TOC.txt b/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-TOC.txt
new file mode 100644
index 0000000000..364c89f309
--- /dev/null
+++ b/tests/sstables/counter_test/ks/counter_test-1c6ace40fad111e7b9cf000000000002/mc-5-big-TOC.txt

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 25, 2018, 9:25:13 PM9/25/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
.../mc-1-big-CRC.db | Bin 0 -> 8 bytes
.../mc-1-big-Data.db | Bin 0 -> 307 bytes
.../mc-1-big-Digest.crc32 | 1 +
.../mc-1-big-Filter.db | Bin 0 -> 24 bytes
.../mc-1-big-Index.db | Bin 0 -> 85 bytes
.../mc-1-big-Statistics.db | Bin 0 -> 4638 bytes
.../mc-1-big-Summary.db | Bin 0 -> 56 bytes
.../mc-1-big-TOC.txt | 8 ++++++++
8 files changed, 9 insertions(+)
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-CRC.db
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
create mode 100644 tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt

diff --git a/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-CRC.db b/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-CRC.db
new file mode 100644
index 0000000000000000000000000000000000000000..1c47cfaca2b13e0da456aa3919dbe0e596230dc3
GIT binary patch
literal 8
PcmZQzWMI%LGxh-h0?Pp*

literal 0
HcmV?d00001

diff --git a/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db b/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
new file mode 100644
index 0000000000000000000000000000000000000000..df874c408f1b2e667c5aa7e95773306940e9626b
GIT binary patch
literal 307
zcmZ9>yA8rH6h`6e#Ic=}E)XRJ>=UJ8fRyZjSD>aqG*Gic24Dm7QVN=k;N;h>a!+-n
zk2Dcw*BE112OSIF@9r<RZl(yV1h>_H4_3@h@Nk$<V8=`www_?bmTau>?fYDV6J{;A
m`-}#xnXTZy`OaX=Y$RWPPq1Om1rH%i;G8)X+?9_TI8_Vi9YN9n

literal 0
HcmV?d00001

diff --git a/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32 b/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
new file mode 100644
index 0000000000..2af6c722e1
--- /dev/null
+++ b/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
@@ -0,0 +1 @@
+712389452
\ No newline at end of file
diff --git a/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db b/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
new file mode 100644
index 0000000000000000000000000000000000000000..dab3740e3031a89b9d20880d29595e96e1df1db4
GIT binary patch
literal 24
fcmZQzU|?lnU|?!V(m2r2reXG4>5|upCJhDvJ!1yd

literal 0
HcmV?d00001

diff --git a/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db b/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
new file mode 100644
index 0000000000000000000000000000000000000000..88324d9113c78c9e91ddddcc7e11405edd64285f
GIT binary patch
literal 85
zcmZQzVPIfj1!54*C=a1I>>xBlEQDsNgwQMvGawB1hV2jrTf;R7gR|i)gu&b>!T<ov
Cr3W|w

literal 0
HcmV?d00001

diff --git a/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db b/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
new file mode 100644
index 0000000000000000000000000000000000000000..17f6f91c4392c17d26addfe0166604d2fbee5fc5
GIT binary patch
literal 4638
zcmeI$drVVT7y$5l?rjULP;J2nERsz?1<l1+k&&qQsDT=d2r}^%y+9)vd3akHV;YH~
ziD(!uDw+T)CPdMQ8`}gVny7&92O9C6F6nS_(c&AYp}W<d`F$sv?BB)S<m8-Rzwg35
zk9+TFIgV3t?~e$jB1)OB6kaKtl_GGQp_LnzFE10N0x2`wDrQPHo0OL&OJY{GU7WQ_
z&Rr#&k|o)mW6#OYv&spj#lI&W4*p&_S#-PIeSslFcjVS>;Yec}f3oC`P_k_+X{}!4
zJR4tg?U}l#zLYrDZ&G<8${CeP@f@DZfCp>O<-x;qE<9+L=x1u$@YWi}evJJY>lg<x
z)-yIR4rV;WYuc}&UTeK|IFldEcr4=yjFT9D!+06v)r_|@Ze-krO_=#0<C(af@o{W^
zFynRD0`vEUDjZj(VXIBpnu*wcOn?2~;JB^>JHUnAe*?C05B8u1*rA=+U&de$-;FJ%
zW5-ovPi@6c9*Dg(1lu+TyG+8aW7cnn8OL2=$Rz9ucKTfGYP>#)>jsMRsdU}H|Cm3A
zEu>#U`6?A&|EjAOP+Wbc99h#-kL;i7M%MOOk^A)pA?vg7dNi2-MDgI}LC8byhawN{
zN<j|4jORPL7tgn;;snZ{==cM9#uR*g^Fy5|zWk99xny<&@~+okBR8GK<8!YGjVI9!
zcmeZCLgE(WwZrx!pFcGQnjdi#Jzx19`s*+*gchOoAv7<h&%JkPsv_+qn6F;ch5D<>
z&nbd&zb5BPXsvnrbLf6yE$Ds<OgCPE@d1LR9Xcp360PUK`qw*Q{ELHIA3}dMF6n3J
z5jW>efR4G6eHc1^>6#j7^X)P7pi_3|#zJRC{x%u9@bAEG=<>GuMCgO5yM{qutStQj
z`sJ^k(}Bszz>H?-%xTl${ZHzXkHY((xVP!y{m)yS_m6?|dB>qi#lV7{IDZ6IMO-#o
zpnH2)!}(Fas@M+SAAV6m-BUomf8|fbzX0oI?`@ZX1D2FOhW*#yGCYL+H(X6>G=ltr
zQdt3fAB5~rXc0j?>}<CY&R4|KL`xZnk4|$%!u>$3>92M@h$nPCX!#a+W>v!>cs&bU
z@v(3{=cSnIDnNc|MpK6axaRJ?);i$hwfh?2^*T>QcgB5)6XW^|Z>IuVmcMwj?t?j-
zw@shHI>t1WrwwoYf8BG@ZqPj!wQtWwN8(-W+jF7e;Cy>7G#<V^7kr0soNv$d8SS}<
z_0dZ0NOGpu&8Z7xWXFMxp1M$qUa?mB$-`6Vy>g<5wz#Z+Tc2pq7q3#&e^Bk&Xelpd
vXxgrIzfE(tX`(iAT-3*ZpUDt&CE1oOtq?7FcGK9o-xVm|dk87~@9F;l;jWNO

literal 0
HcmV?d00001

diff --git a/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db b/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
new file mode 100644
index 0000000000000000000000000000000000000000..ab6bd5d065001dab321da058d45d4d71968b5047
GIT binary patch
literal 56
mcmZQzU}#`qU|<Ad5D)<31|Vi+0TMvK3ZcLxNC?CS(aZobj{z(I

literal 0
HcmV?d00001

diff --git a/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt b/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
new file mode 100644
index 0000000000..5f3ac91967
--- /dev/null
+++ b/tests/sstables/partition_skipping/ks/test_skipping_partitions-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 25, 2018, 9:25:14 PM9/25/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
.../mc-1-big-CompressionInfo.db | Bin 0 -> 43 bytes
.../mc-1-big-Data.db | Bin 0 -> 83 bytes
.../mc-1-big-Digest.crc32 | 1 +
.../mc-1-big-Filter.db | Bin 0 -> 16 bytes
.../mc-1-big-Index.db | Bin 0 -> 8 bytes
.../mc-1-big-Statistics.db | Bin 0 -> 4731 bytes
.../mc-1-big-Summary.db | Bin 0 -> 56 bytes
.../mc-1-big-TOC.txt | 8 ++++++++
8 files changed, 9 insertions(+)
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
create mode 100644 tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt

diff --git a/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db b/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
new file mode 100644
index 0000000000000000000000000000000000000000..bca56160f6bf4b03f74048442ba1cd554c565b35
GIT binary patch
literal 43
fcmZSJ^@%cZ&d)6<N-ZwVFJb@zMlcB?!jX9Zv;zfh

literal 0
HcmV?d00001

diff --git a/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db b/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
new file mode 100644
index 0000000000000000000000000000000000000000..761b75cb0477534c49261054d0f5ab22d7771b59
GIT binary patch
literal 83
zcmWG%U|`t5zyc&0>i_@$-@wUG2xKxbGB9#71TqUTFsN_=xeNtdybnqo4LG<NSVb8M
h7`a3ryeP93W%$6r$i&9L2-3~KEXu&Z*yiSL2mpM74ix|Z

literal 0
HcmV?d00001

diff --git a/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32 b/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
new file mode 100644
index 0000000000..59cbf39067
--- /dev/null
+++ b/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
@@ -0,0 +1 @@
+3963475046
\ No newline at end of file
diff --git a/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db b/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
new file mode 100644
index 0000000000000000000000000000000000000000..157a4de7cff17365433da137f823747e58804d15
GIT binary patch
literal 16
XcmZQzU|?lnU|?imQefz4U|;|M1jqp~

literal 0
HcmV?d00001

diff --git a/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db b/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
new file mode 100644
index 0000000000000000000000000000000000000000..f9376371f57ea150ba2e6002d905fabebd52132f
GIT binary patch
literal 8
LcmZQzVE_XF03-kf

literal 0
HcmV?d00001

diff --git a/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db b/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
new file mode 100644
index 0000000000000000000000000000000000000000..5466932bf5b4a28d66c60e2e799695553cc19611
GIT binary patch
literal 4731
zcmeI$drVVT90%}wZd;%{sxA0{MKTqp;!=qf(M0X4HBcXsfhf$Gae>BS#v^TEjA>ky
z{V}pIwoH-4w+S(5B!j7d1{2+24;@GrQG<jnm2DcWZqwl-bhp3_zwe1A{JB4RlEb~9
z`}<vb?m6e)dvXOqPz$3aPTnxNX3JHSYk^!<f}p=7%rACsGfE{=p2Kd;lUy#TDBmd=
z^Br#E`ch|Msne7uIo$>Bg5n~((_C5cYs%@UkK~iXeLmlCL^Nal?VpCru9d65_<w{J
z-u@q_MQ#KXrNPQUjj}Vg4dNWkIfQd4XMbC1(NW0zdd^Xtr*odcc{b++&I>s&<DANQ
z)0mZh+{VRsaNf(gnR73iapS=jb8$E4cC<K+^KP_?`~Ru~7*}VaH70b>a&$0vy&=yr
z9@>cx_o63#f;JpMPkjd+(}R9}0s4)@Xk!*S`5=1b1$5dJbWSwd^)|XnLf3Qix6_Jo
zZ!DO_K0;@0L?6WY$-LJgE@mk6aP+YFBU+X9Gvuq)IRDkxu0UM#eKk1fVFNfM!w1$5
z+reSOkzidu&PToV4~R##P6bczj{(o<O$X2J!tqWR!tplMT!j4P19!k{EZDy67!Sm^
z-#36i-p~lHd%6VN@-6ny?H1@y7CQMc&1dG6&%nE8odExIIgwhNa}J)b;y&FkG_Hy%
zhxwsu-KwQ=b-8v0wdUPkxZa@Rf^r%UZt*;!)>>EpLmd{|2KQ4$mZ6)*C#!57)RD>Y
zFrTOCp6;jd*G_(MmwM)+)F$dVH#RS$UeN70O}#W{=OJqAt;EgL>4yuGsPp2_zC~U3
zEMkzl`n!e{>XR9Dv#77uR(?+X<V??MVm3D-x0O0?)hc@bvxc;D^!{hQuXObO7ww+@
z^W=PS;M9r=VwIbDz9d%1bs22bLqj|0_-OvE*-PIa!Sf;qEhImr_Unpoh(k9V?Qjx@
zzgPW$Ucc_9{w}?K{k7C)1IeEvRh7{9LG%f8n~}t0e;72-@rwH^#a2b)Z)SSq>3Sf^
zbgx54;^yAp+dd#(ccAeUZO<0((j+>ci_)$2H6*_>x21D{_)y>N3-!e9$BsAB_IfTS
z^dyhRnPJbB7b}Tv+aEvQJ#N7@wvW%?@imxoTqNiCcLQrK?2uQjxs<HHnoH@4k!@hj
z1>GS8)?CmZfi+iP%|#}}|7*>~>|NQ5j|<whO@gMhd45=K-^ljwo6%e9_E>hwA2pPw
zoA2w+7I)wCKl}6L$}HChbNZFw=tq=s`K=z|=wGz*9v=Df;?I&_$Vx-jl*yJ8sFnS-
zO)oMXI}?BFyR-jKi!kryA8K-qg_6_dklr`iirl7!8$T?uixW?sc&5Nu*~GK|12!$6
A`v3p{

literal 0
HcmV?d00001

diff --git a/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db b/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
new file mode 100644
index 0000000000000000000000000000000000000000..2044a14c2e39a55524e98a74a92e2c043fc70007
GIT binary patch
literal 56
fcmZQzU}#`qU|<Ad5D)<31|Vi+0TO5cCIqGdFya9p

literal 0
HcmV?d00001

diff --git a/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt b/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
new file mode 100644
index 0000000000..097d9e98b1
--- /dev/null
+++ b/tests/sstables/promoted_index_read/ks/promoted_index_read-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
@@ -0,0 +1,8 @@
+Data.db
+Digest.crc32
+Index.db
+TOC.txt
+Filter.db
+Statistics.db
+Summary.db
+CompressionInfo.db
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 25, 2018, 9:25:15 PM9/25/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
.../mc-3-big-CompressionInfo.db | Bin 0 -> 75 bytes
.../mc-3-big-Data.db | Bin 0 -> 144236 bytes
.../mc-3-big-Digest.crc32 | 1 +
.../mc-3-big-Filter.db | Bin 0 -> 176 bytes
.../mc-3-big-Index.db | Bin 0 -> 106 bytes
.../mc-3-big-Statistics.db | Bin 0 -> 4630 bytes
.../mc-3-big-Summary.db | Bin 0 -> 50 bytes
.../mc-3-big-TOC.txt | 8 ++++++++
8 files changed, 9 insertions(+)
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-CompressionInfo.db
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Data.db
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Digest.crc32
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Filter.db
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Index.db
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Statistics.db
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Summary.db
create mode 100644 tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-TOC.txt

diff --git a/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-CompressionInfo.db b/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-CompressionInfo.db
new file mode 100644
index 0000000000000000000000000000000000000000..a91bf99fae2733587d53315582eea49826d9aee6
GIT binary patch
literal 75
zcmZSJ^@%cZ&d)6<N-ZwVFJb@zMli|1z?}9N$YO=^pw!~oU<RY>JP7?h7)&!6Cj$V=
CDhgx(

literal 0
HcmV?d00001

diff --git a/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Data.db b/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Data.db
new file mode 100644
literal 0
HcmV?d00001

diff --git a/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Digest.crc32 b/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Digest.crc32
new file mode 100644
index 0000000000..937abafd61
--- /dev/null
+++ b/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Digest.crc32
@@ -0,0 +1 @@
+772386724
\ No newline at end of file
diff --git a/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Filter.db b/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Filter.db
new file mode 100644
index 0000000000000000000000000000000000000000..0b95b17664337f6e8e0bd2568e5587af96b6107a
GIT binary patch
literal 176
lcmZQzU|?lnU=RgjB7p({b&ODX7G!ly$Q%$`09}AcJ^&|n08#(|

literal 0
HcmV?d00001

diff --git a/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Index.db b/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Index.db
new file mode 100644
index 0000000000000000000000000000000000000000..3490db63efe60713eee773b68981a6cfab42b49f
GIT binary patch
literal 106
zcmZQzDl=qA5vc$F|9=Am1hB9$FdHN~vM{h1nv_Hch%i7{kw9U?Jg0*UQhY!WAk!I0
ln&$@}Vo+oN37F@H07=WLsKX432aT$shA{{L8A?EG3;;ib5%&N9

literal 0
HcmV?d00001

diff --git a/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Statistics.db b/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Statistics.db
new file mode 100644
index 0000000000000000000000000000000000000000..b1d3b4795a938b26d5fb1753127866b8af47e11e
GIT binary patch
literal 4630
zcmeI$drVVT90%}w?rnJq)fPm+$b5i0wiL30NTOD;2rL?rhoa8R3p4`CBW<17X*7z7
zVTLiMV<x^yh(RM!R2~}lhYHiViDVhuG7Tmj8jV($srU%pEwthHJ@XI$HTEPY_kQm0
z+}nH4<M!7If}j$HON_E%N?op0QK=<Ll>|Y%OZce5vPLgg%7w*deW7f%%H>5CSzlCa
z(=S?YDO+zbWXTp=iLIof+-xyc+wY{G4Es_!IoRcL4TeNAwsX(7TE+EBbr<)C(8AmO
z;j}0>0mXa6-h*oIj%Vw~*`IR&=OE6(oHd-?&q7NWg|Z*Pc>?DtoZ~ou!g&_w49-hA
zui?Cj^Ipy^oO{uX8xJ;vi`zI~M2q7%Z$nGm^`-q7SLLDA2DIO7v_JQ}0k1F~)P)Xq
zqDSvQ>kgyCSD>SM&=cd)QxBo_`RL>W=+q17tg-0Tk!b4@bd8K|<mPXe3FFRaFpGYI
z&d)_3!1>9Xzd>Bg!SyU&LreL;c-jviSE+FRt8QM0>#2XN1^Yd20te){z=4Bi@TkF1
zu%-y-qt<i};$iLK;E3B%;0e9i;3+q7yyFINybX0fK>OK!e}g}rhxfNU$^r4xhdS`q
z#m(S-FJ^+<E@S`PYJ>h{L1UiM_RN^R3%q6WG4M~95~#&#t?+&oztj9m<5E-=%nzx3
zRUnP4ssiUwt3T_7=k=>7siJZJHpesSKvUYk)T5$1U_FK8>$+)tjFj0)9hw{q^Ld=+
z#rHHm{`fcdsV607oTi@k`?6Wo@!iEIsZ&;OK1gl)GhrEZ_Mx&Q>cZG_bE&_08PZQ(
zd!;Fz`gqR1$<#mBSAR|Y>}*dOF`FJz&`w=Ae?DFRtSPINu7Bp*qoM0xG&^peC+CZO
zC+66RB^z_>CRWAV&}C8&3~Zv~qkdkumwtcve;C?7kF*b{KV?5d9JKgIr-eB9^V&!B
z`89uN@6+ek-ppvxk@jQdno9b85P8hlp(pX^tNl7UUNQfqXV#GT$9c|Jnhzuy9&~C*
z+}L}!V*~NR{mm!n{j7ARB+>a?o^5KZBkijT+PeCP5B_!QLL>3TqYcgUejS(MdXh)t
zOt<~|>r~>*(x<PsjaaaH_VFG3{~Syt=eT!$ITv<_FXw{(cxQ7i&pLQ-bFSf0^yOT>
zoQteyU(Pj>b1DB>43(koQO_t%S)ghVlx<pT>XR)>#9h5zXLPhg*ssOkQC#FbMz&0l
z5@dIBqwJ*Ey}ue0J?Uv;w{oSS;yvYc_y=FDt!@y6>2LnOr9fXMTdc+MI(=U5f|<D+
QE6wb!TMA6H8Q!|}e}y-X6aWAK

literal 0
HcmV?d00001

diff --git a/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Summary.db b/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-Summary.db
new file mode 100644
index 0000000000000000000000000000000000000000..598b1deb2c9efa97578a9f480dc900a587bf4830
GIT binary patch
literal 50
kcmZQzU}#`qU|<Ad5a0vi1|Vi+0TN|~KmrDsz&s!c06s4R4gdfE

literal 0
HcmV?d00001

diff --git a/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-TOC.txt b/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-TOC.txt
new file mode 100644
index 0000000000..364c89f309
--- /dev/null
+++ b/tests/sstables/large_partition/try1/data-1c6ace40fad111e7b9cf000000000002/mc-3-big-TOC.txt

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 25, 2018, 9:25:16 PM9/25/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
.../mc-1-big-CompressionInfo.db | Bin 0 -> 51 bytes
.../mc-1-big-Data.db | Bin 0 -> 1290 bytes
.../mc-1-big-Digest.crc32 | 1 +
.../mc-1-big-Filter.db | Bin 0 -> 176 bytes
.../mc-1-big-Index.db | Bin 0 -> 1164 bytes
.../mc-1-big-Statistics.db | Bin 0 -> 4922 bytes
.../mc-1-big-Summary.db | Bin 0 -> 72 bytes
.../mc-1-big-TOC.txt | 8 ++++++++
8 files changed, 9 insertions(+)
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
create mode 100644 tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt

diff --git a/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db b/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
new file mode 100644
index 0000000000000000000000000000000000000000..1c766313c15eecd4d762f9ffb7092d62568c3eba
GIT binary patch
literal 51
ncmZSJ^@%cZ&d)6<N-ZwVFJb@zMlcB^c-8|6CKwMwvoZnz=g$S%

literal 0
HcmV?d00001

diff --git a/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db b/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
new file mode 100644
index 0000000000000000000000000000000000000000..74011f44cc7c4cd2b8c51278dbefac77b2ddddf7
GIT binary patch
literal 1290
zcmWlZdu$X{6vpp%XV=<Nk=^R<aHk@(6{MgG*NWB$+A0-XmGaUG0wSU-S`bAl)mp^r
zA7Wxu6g85Vm=M8~CYt!7Br|tL5{SV^2*h9_pf=%QW2})zqxE<G`{n!2`R1H^?{5DX
zrL1z4Qn{Yd(b3H+q1M+snP6m2!d3bSSDEO@Aapepj=Tu16>YEMDsQQ)eE$`s%}8<U
zlh9LQ4pl-=i<VjjT?5&wz0mWbm0pG>LgB(Up%fG>+5>r_P5BRc1d3k!0eS|Cy@ODL
zxbHm3XAPe{u?T5}l(im0YDcQR9BBcP{c%4uL+TGthpM39r3|!C+*3b88=>f*3!ocB
zn|h9rTL>w?fYgl?7q5ioiTTw|=t3wMI0@Y(TIqHg+GzMbMye5WM-jTjRfVu|T0*Y_
zqF|^(&yn)iYfDP6hobL(rEwLFt6C_pmd34FSGk<FsmQ3Da<e(LfD1T06aPkOZX#4O
zjS2VNM)OpfcXlCdL5kZyhB$8%Y+z5_C}n5XKvbAG*H3hXt6GwofwOt#UXhpV@beM{
zb1AUfHN;(-VBQk4IVAtk-$++U&LDGoY~>$hXU&NlJM<^C9EzIyAWp&9_ilxz$>JZ4
zOX&?_o~kiQZ-U~g0nGd5FiNu%dNyFYesc6!yrBPhNqHB$Dmz@C){jfy*TY7651=fc
z>u3(Zg#W%l65|@Xi|f|Bu|o7qIjOG`Y2sg)cS~c!Wz>6V%;y|^mw3T$yhp|R;CC9?
zvk-der0xV_H9x7Zm#RspxtLlgI5D4u^GI0Rt@L8?hKESt!I`LhCkgeEux7;ZcxTyH
z`y9>M#&&EcU=kE|kEf_fwAusEWYM-vfYMN~av#L?8QUu_{5hGTu{Wvts<B7E<x6$a
zP@IB!vuJHR7k!z0v-50P-yzbTGG*sO!KNI;@_PN<JX-x2Rndnv6}m@KoAZ@=nJA6N
zEA_R29eXUH8P0^cZR~cD1Pr#)*8xR+e?a3z3x9*kqV;}B{6oZd?E-jB{#!@z3V7k_
z&yZLv+uX0b=~&-PW~$ZF*6}RXeMrSGsGfynXEi{`g}C8>qw^Aw>g0|uC7{(NJl6HM
zbr8@j)r*f&y;5dxTanUSsR^q#V)9cd*rgMywJ%cp`$+ddQF;dTY+`KBr_dNEc$<6D
rOT?|?FGzE9#(uIDN{ZXUDUW~HRc)E5=iS7~9mS*k^C`98KUeoZ(L6cM

literal 0
HcmV?d00001

diff --git a/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32 b/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
new file mode 100644
index 0000000000..c1ae0dfb60
--- /dev/null
+++ b/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
@@ -0,0 +1 @@
+1423862028
\ No newline at end of file
diff --git a/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db b/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
new file mode 100644
index 0000000000000000000000000000000000000000..b9e7964acbf8819e17fe22e7192e2926c39817db
GIT binary patch
literal 176
zcmV;h08jq_000F5000#l=6Zp$j>~|R*h-ACF%moh4`XhYBP;K$W1NG4tAm0{2?AmO
zgqsK<0H!^25eix98^L0kj*!{JEF>wCfNUrTB(V@x%|;*t3lxh6$t&6vG$1BPEyyJ5
zSi?s^LA^4>WLAKqU<4D$qS;Ug2qZT|K8GD9u|fg}Kmsfr0RqsIQiioSEP-xB2nmG%
eB6^A{8X^H}f+9l0>}+WH=ZPi(h%`flLf|k{+dcXK

literal 0
HcmV?d00001

diff --git a/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db b/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
new file mode 100644
index 0000000000000000000000000000000000000000..8952f475be2f621cf06b864bf43b881c0a50ec63
GIT binary patch
literal 1164
zcmXZcJ6Mik9LMn&9Z;ciD2ECaDu;5YP@!@thYA%chhB#Y6)K0~dG7l;KhK3l3kD1r
zuwcM|0SgNT3|Lq&V8Fub`rgC;`hAA`x`*HJ3q^%Op$U=upNCS(g$3lnYI0kc)CR~N
zZ4eyQZh=DW8PK(lV5;^9MC-|5vYrRp^h$6-Zvi=aA1Khzg6;Zs(5OEKb^1Gyum1!i
zMFQ9;vO%vX14~6CC>PyeKzLw-xB|wA2cS&61~uXvNRY80O=f^jSqxUoI?ydUK&v!B
zoV*Bz$h#m}J_jZ86PP3af?Oj72qPa1H>$t_qZJ%C`oU1+9GGp~0BejVAj)_Tl8j$q
zzL^N-nmJ&TSq@svCQxPefIRawIAUG}$IORdhxrCnn%}`_D-MjeGC`MB0(M#TV3E}c
zsx1c`wl0Ci);&;fy#!mVFJQeL4La;JFv%_ieRd64Vz+^@wg9pAd9c~O4Z^l6JkwT%
z&$LzH6^<%A+fjuVJF4&*jw(FHQH8H^RN*I`oBUksJOxvn4`7+|8)UgjV6B@AMz|GV
zl-msUyS?C)dj>SS*Fcf`2uyU}f^qH-aKMWPiCz}i=aqszUIS?Ny1;bL1?k>pFweUW
zc6+ZtllK*r`Z1v2PX{S}5y<ds!7RTWEcYeY>0bb;{vEKwe*vcXpFu+qS(2#8tqjzh
Z#0P3mwgzfY)&*hS3=7nx><tD({{VLmqz?c9

literal 0
HcmV?d00001

diff --git a/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db b/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
new file mode 100644
index 0000000000000000000000000000000000000000..fc805804cf9bef5d1ad534c46a4c7daaea58a00c
GIT binary patch
literal 4922
zcmeI$drVVT7y$6z+uKqqR4E9^1_9JDU@1g~%uPYD4p>G&@PTv7ERP6gpeeX9=VI5@
zWkCjxDJr667zslrb0XHta1(}#fE5kkri5ulg2+oiKvH%Jz47~QmhA6koaFYL-~CR@
zdG;R4<M9~YOj<-Tid>t>MU!GL$@x5<y@2PtUAa}J*r7;BPLd@k($f`biAsemF*!pP
zxl@_CQyCDgP-diLq-;-1Qif=D{S|iF;WP39xl>b9Cffy+nyQ(Ucb!S=sAgKfm|Id7
znf=JR`Jq>SomI;(eqVhPNbaB3(H%FPemcq+G(zJKekQG`P%9p&2vik`+ciw(eSx7i
zs`u$;!ikHFej>H<seik{BfH$Ms^7!>-fE^iH=wFAENeul9-@1XxRXM|Gso(aZr$I_
zZP3f|RKDcSXc@otu_U|3y}iair!J;l&lFsCE~t=}6t3;+4WHDC25!Y_E^esT`%S2P
z%5^lU-#idm{6KKGnjx(!(27U{?*8Wd>q*zEI^T{#kF4?e#>wc>Ci|JcOI|y#1r3Zl
zk%G~*&ZHF|Q2Dm>x@J8R*WGs;)~q~yNjg0FGKmhC@e6WAw<{z1x~yi}U-W?Add#ac
z-`sN21@hY4D(WkGQ+3PZ^3k<lcZ7EvQb>=?Ba=6;_^Dv*x{dmrtFFmDuT*I?T9Zch
z?2|YC>5@GnY|ghM9WO12G!60#E=e1IT&k{h8fx_>^LdC|=475{n7AhMj}lo2D6wmX
zy(wS|mR!iO6~`iu#T?skEaBLWV+V`bb~{_FvgEFooXr-p1xxP3@e+=ga~#g`29CFK
zyqn{L9G~U54Vz;7Ww}i)<-{{MuED0AI96lxIiJrj#BpXlwjcmoxB}aX(_hhZ92Z}~
zw&};7yBAwpgzfkqwo41PyC3!|T5MSycF-~G&}!`H`Pf?)V5hIe&Qf5PaMte?Iga<c
zAyaOH*m3KykKy%6^|zup9gFuf-GI%HYew}M2CskSW+RFVuI3;M2g;B|u~W#_rX=J!
zCVON_B3_Sn@@^D&xZsHF+~I=k+7^Sn@CKf5pD{e&0sAkZ`YSpgBEPc=w{Me+5yiJX
zks_<2Dv*zizk#f)!{c*LhsKi<&l`dDsgSU2<UO9H$k%KAp=q!4==+t<m)wSNzDp)r
zAN&g+Si?AzX&nqLc)tzxSGYYT6UMD{#!+Z%`I=$qIc|EipKRl#1{j~mkEn;X4_b`Y
zvy)`}FpR%+>f0V@kJrP0hW2XTxE$KgkbD|?*_O|bL(Bj0-v}L}O$~%jSX{Ld`r`@P
zF6f-!%fg^f#UAm5ZaSpNg&sZEvIdxX)i(YDbi(S@aQ{<f(dXg*r=|`_;QptRj2#!j
z`{~Z|;9bD{49b`X%q+Sgjes5-+YRSO@NEA<`24W)w(nX6>WdDY*;NTFj{3e{32gIW
zP9N;Q<c?hr?7!X3@Uv1-f4(AX2YenZC=JoeK-}$GmlV#|qM@*eED(Qfeg9&39taG0
zTrUCfkhVwqPk`SotSE==+1$S@5U%I67<tKlP+t?TyV41K{O-N#65yKR6BV$%##*12
zpcipU`eox}C~(BKk>~0c=A~Q8>~}C5W6f5j*@7kiubjEqW;?S5OFnz%LIXmx^KQ92
zd*(vJ!<#*Gq4AhKbHQf_k2ibf`rn+n$j?U8X?i~hJog$x4`lPq`P)x|_mGJBV)shO
z9r^8G_Y)@KME2gl<!bW&>BLr?c*`@{fgHiT|M_>Wcv-4KnVzipNEVTn5wK+4r#sC5
G-uw;9x<T&%

literal 0
HcmV?d00001

diff --git a/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db b/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
new file mode 100644
index 0000000000000000000000000000000000000000..754eaaca8d610d75760a91e5cc48eb46056b7789
GIT binary patch
literal 72
ucmZQzU}#`qU|<4b5KsW(1|VkQ01_fV3<Tm33QRIrvA}sC7Dx_6rvm_6Bm!Rm

literal 0
HcmV?d00001

diff --git a/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt b/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
new file mode 100644
index 0000000000..364c89f309
--- /dev/null
+++ b/tests/sstables/summary_test/test/summary_test-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 25, 2018, 9:25:16 PM9/25/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
.../mc-2-big-CRC.db | Bin 0 -> 12 bytes
.../mc-2-big-Data.db | Bin 0 -> 4471 bytes
.../mc-2-big-Digest.crc32 | 1 +
.../mc-2-big-Filter.db | Bin 0 -> 176 bytes
.../mc-2-big-Index.db | Bin 0 -> 25 bytes
.../mc-2-big-Statistics.db | Bin 0 -> 4865 bytes
.../mc-2-big-Summary.db | Bin 0 -> 68 bytes
.../mc-2-big-TOC.txt | 8 ++++++++
8 files changed, 9 insertions(+)
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-CRC.db
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Data.db
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Digest.crc32
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Filter.db
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Index.db
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Statistics.db
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Summary.db
create mode 100644 tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-TOC.txt

diff --git a/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-CRC.db b/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-CRC.db
new file mode 100644
index 0000000000000000000000000000000000000000..3dda9cf906137be6b9ac8417c091fe3576b15234
GIT binary patch
literal 12
ScmZQzWMJ5N*kvID5C8xV@d9H2

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Data.db b/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Data.db
new file mode 100644
index 0000000000000000000000000000000000000000..ce27b048b8c85d30c0f1450e21ac075b3363eb09
GIT binary patch
literal 4471
zcmeH}KT88a5XI+`M$-v$1dVYayAZ`M5Nr$_lFq_HQ&@-~R>9^VHu3%hEVU3jzkqUr
zNg-+c0AjFABcu_*LXgzLc{p?3E?Y0`HFMm%;lX>qVqgyFIZx9xpm#<SAS$~6Cr}I^
zaDu|e@}2kCZT;T+3tz|H{4@T>!+g$?tpj(zwR2rQT71~}e#7tLDxaIPo1f0M7hb%-
z?0zm?lD9Y|J)73blmHo)2H-^1h(jFfs!MQzCvr-7oAkDv65b%aVZF@CkYRBEg^ZMS
zh|hGSOsVOqf|LpA6FDh@{IY4ijLMKvb5Q&zCEU}HA}Y8bDsoapo%Fh#6n=<$Hm#RY
z89I<3E{@`GS#cr0)$vm!K57bnnxr=s{Pc*Qp7jz&Wyr8Nyk6EI>gY)Ei3DFx3Lg*&
z0|hBV(udYd7?mNz;_~aI|EeRUgbSjiAf-wqR28I*NFRaqGAcuc#Q|L}{U;46d`wM`
V6{K`Y@5)ILtEgwwdKs0W^9N=Nseb?f

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Digest.crc32 b/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Digest.crc32
new file mode 100644
index 0000000000..bbacfe06a5
--- /dev/null
+++ b/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Digest.crc32
@@ -0,0 +1 @@
+3116582049
\ No newline at end of file
diff --git a/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Filter.db b/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Filter.db
new file mode 100644
index 0000000000000000000000000000000000000000..7ab13fc1d6f23fc07a5ba0e4b5b08fa1d19eb1c8
GIT binary patch
literal 176
tcmZQzU|?lnU=RgjEPw@z7*-*|3OO+K2_S@k`Wc}-7lbHG2r8lgqyZ$S0Hpu`

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Index.db b/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Index.db
new file mode 100644
index 0000000000000000000000000000000000000000..94cab27584dd82655666b19ef6c320ba5a584784
GIT binary patch
literal 25
RcmZSJU_byEo3Udj0{{d^0aE|~

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Statistics.db b/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Statistics.db
new file mode 100644
index 0000000000000000000000000000000000000000..5dee8abc20be5868ce28b312f7a91d9bb2eba65b
GIT binary patch
literal 4865
zcmeI$Z%h+s90%~bYYPQwM++)oBu+sYTk4;RXreNu1~4unh*mc<kJ13fw&Yrrp+=+l
zhAfC?j=A`M2{C9S{@DaH`oalra}&unoKb>F#l>Z-TNF_Y^~!qk`#zd%5?}bDPx7SC
z=YG#~eeQXl>peY=<J8>0DM|j|<-9`9f}9<4R&ku+OYU8lRBRH<L|cj7WE0(P(OD#k
zrlJy$>4S2~Q7)NtMafg@DRnvRQbtwf?X2Um8|22(e!qV}7tae_Z3p$&`w!{lV|8*4
zq`()^#5&Lcn&gf^QaY_1)F_4EXBgvf##+XajH4Lq85<bKGLB<Bmhl9}sf?#Fp3OL$
z@iNB6j5jjg&G;1KPBhQV2S0;}dl;Wb3!@otMXQ+etM+1CU4Yh@(P4AY;mY*}&#Udn
zcw`$o%7=byJKA^<J!&O7p#wc`GJ4_xw8@H2--n)m4xKv^y*eK4UV^R`(e=#wZL?t9
zmk8z)|3+JvqW9tY<bA(FT*$}!S@<5Uvi=11)oNV->T6dZuDM(T4!hp~*5>=c5d(Jc
zh=CZez6jT&!SXxAW1B~T<GK>SV>|P}6RzTXr}p7|n`<vX{W;xtzzgSL|5hY;A-?8M
zBY4Z=M)01;Gr>*Y;`rQZg7M@dqaV`xd`8x%;LYQYfPc6+g<6<&27X_K&-FjkxGJFn
z)`zNjRRoQzD<bAnYd-3P>kV_2R?v8Oled>T!m{82^@zk4xSw=ZV>^vUt8!YYW73mh
zJ&)Eu{({EG9Nl@3`t9l2C#ff0Up||9a(l^f>RGEd?WeZfn6jKY?|>tX+Lrvy`_${6
z=z6GYE;VFPAI;x0p8ChSsvXq5Uw14Z=2LWq&D6HcOnU$G4Y_CN{m=V9)6@H3uzS1C
zlJ-LPvALDRDi817MXXM`YRsYT>)S}@NAsw5H+_DDzZ26lkJQ)Jov1ub9J%;Vt3(|2
zam`=!`t`pV?$PTvT+2RXB=tv%)n&@_AaFSTNJfi^#1p^kG1B=;`X?)=n#A8L@Fmmz
zK$`iFRy~Plblz=QPrPVv<1yNw4}G)J=z4bMS?X&^{i?#Iwr=A6H*cM*Cq94pt47*i
z@5R)P^r1L!+;-*ZeBzun5Bs+cnR5rr_#6D<9!wx@0>w9V&!zM;mg#RC<ItW921KB1
zA~3zmI0kFIwmnzye4#xT3_lmzbHR9o_FSPo7g-Q*(w<9xZ!wq#yQi_PN^bvUB{%qa
zW8!8x639x|FWgs3T+#E=P=V*@n}#7hf3~Is>uTk54ko4T)0xKgy#@0B%#@eEeJM0K
zM9Ezut~D)kIg6KmQfBA>cTG+s*rrbXuk&WQ%AFp&l<8Vq?r;XaK(I|4P9yVh8ciQg
JqqJ9V^bA@C;FkaZ

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Summary.db b/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-Summary.db
new file mode 100644
index 0000000000000000000000000000000000000000..36f0accf7a9f5ce9d33ea0b6ace3ca1f0ed2f7bc
GIT binary patch
literal 68
icmZQzU}#`qU|<Ad5D)?41|Vi+0TNgM2a*_!%?JQLa{(*>

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-TOC.txt b/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-TOC.txt
new file mode 100644
index 0000000000..06b66f6fbc
--- /dev/null
+++ b/tests/sstables/wrong_counter_shard_order/scylla_bench/test_counters-1c6ace40fad111e7b9cf000000000002/mc-2-big-TOC.txt
@@ -0,0 +1,8 @@
+Digest.crc32
+Filter.db
+Index.db
+Statistics.db
+Summary.db
+Data.db
+TOC.txt
+CRC.db
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 25, 2018, 9:25:17 PM9/25/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
.../mc-1-big-CompressionInfo.db | Bin 0 -> 43 bytes
.../mc-1-big-Data.db | Bin 0 -> 281 bytes
.../mc-1-big-Digest.crc32 | 1 +
.../mc-1-big-Filter.db | Bin 0 -> 16 bytes
.../mc-1-big-Index.db | Bin 0 -> 8 bytes
.../mc-1-big-Statistics.db | Bin 0 -> 4817 bytes
.../mc-1-big-Summary.db | Bin 0 -> 56 bytes
.../mc-1-big-TOC.txt | 8 ++++++++
8 files changed, 9 insertions(+)
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
create mode 100644 tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt

diff --git a/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db b/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-CompressionInfo.db
new file mode 100644
index 0000000000000000000000000000000000000000..13c639a07f6c1ab98dfd6ff719729c9284795d8a
GIT binary patch
literal 43
gcmZSJ^@%cZ&d)6<N-ZwVFJb@zMlcCtOho1Z0Jj4LsQ>@~

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db b/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Data.db
new file mode 100644
index 0000000000000000000000000000000000000000..e18f714c2407d15697493ce99f5f625077ab8da5
GIT binary patch
literal 281
zcmXwxyGjF55QhJm-Lp4YNmdUM)?)3{GJ=vqgayIM5F1+y3$coYrFaAbmIi}ZSeOSe
zh`nGF#23&~4Xn2+sGX5@K%DBE|JEen0ygA!^E@{`wgj0#KGv;B&<W9}5J)D)pdiGf
zsiZ?llEi@&>p>AuwWaC;l*Tm&8a-UqC2CE9rcvNwpoHdK?@%<GX#_NmhUJv9nQgV2
zqH6`C$U2LsVyhGdYYq=Gl6^-%qB!iN@Vd5So~wRa6gLHZqUCAz^0m2V8hu={JNEi9
zxG~4fHQ)qg3X2*CZ>`&T(`FSTiZyrw-Ym)-3U9ox4DQYO|0|ZgMrZ8Ce>1ede6;fm
D|JFeu

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32 b/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
new file mode 100644
index 0000000000..5bd175f917
--- /dev/null
+++ b/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Digest.crc32
@@ -0,0 +1 @@
+2945241528
\ No newline at end of file
diff --git a/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db b/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Filter.db
new file mode 100644
index 0000000000000000000000000000000000000000..157a4de7cff17365433da137f823747e58804d15
GIT binary patch
literal 16
XcmZQzU|?lnU|?imQefz4U|;|M1jqp~

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db b/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Index.db
new file mode 100644
index 0000000000000000000000000000000000000000..f9376371f57ea150ba2e6002d905fabebd52132f
GIT binary patch
literal 8
LcmZQzVE_XF03-kf

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db b/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Statistics.db
new file mode 100644
index 0000000000000000000000000000000000000000..e9a1f2d163f6b8031086b2fb250b6dc6db98eea2
GIT binary patch
literal 4817
zcmeI$eQc9O90%~{o~PZqx4L%YWi>PtHj!yMLYb2URtLqkMzgsw8KRMATf;_NH=Y)l
za|Q$R4;M3s5hn>R3T7dLu;4(pNk$^N`GPVQL)FNfNtpx#RU^0wS$#TM`}>~8><|5~
zmt3Fw^mo_ip1XVcTpmFXG{T*fr5>1?*Qr@lbFG>sK`>kw?ypxiTI2?~s>Wrhl06>T
zU9HHL>Kd=*@hwW-7R6d3E8bdfZN1y2*jk!?C_0w@g4#Ga7z|FOWH2^5@Jh1k4mF2T
z=p;1p4xOAPwG)sc9gcjdjTFMiIL`5$b(|A9hx$sBo<c1fIHz--%XuE>1)Os@FX6nL
zvxD=KoHufA=DeG84`&~mar40*<l^42!}G`nFfPvFyaO$9zc1~@xTYMfwW8xzpyRpg
z)!o8);t)DHfWGTxwDE29?5EJC5p-rQ`rZR*O9eWAAA03!bjd9Ah77dl33RKB?&Q|*
zkR9UzGnkowL07Cn@5A-U0v91Jmf`&@eukDRzJ&T34X%I9g>w+se$obx`?(9OD+_`X
zrd;5psWh;@8rP%2eg)#`eY3%HM@`^)zEbdl^Elr*6FA@2_A^j_#n@%=qlMVNbtXT=
zH(fJ=Un=ef@0olE-1`xZ&!t`%PnMW^gVtxZqF2G&=N|@tes(dnxbPJGzlv|_zoK!;
z)ClWC>U$=E#x;!z1=QN7eQ>>T^|g&O9^dP~Nu6L{{Tp?XxgYMQlnUc8ji*Y^LF%;p
zY*^28^pkJV_}xc#U8TNfspCEBg<r2-PMtekbBub~h8Oo!+rM4Bmb&ynT^@B+_WKW0
zZ~Y@>oVxAft|ICqWqamRf6>wM8uiVSBddwoeJPcF)K#li(fglum7JpYKMTI0r}w|;
z@{fK%+KXdH3z~=}FY~`ntjRiWbW%@DG}HOf{@%WuK0o3YrHvPo`nrzeO(%#Gi{BYk
zh?AdfyH2lP|Bc})y?(<5M~{)zpCz|8(C0zMVOzh2#Lb_M8|i#y{aWN~CGiK!1KD&x
zkZ1jAP*37E-;e#<h#%YAeU$cRePCH0UC-`PduKbT-%{B-G)BDtyGy4#i3biI>Zbkm
zpUoM`kH(pC=egS}iJhBn+}aVf;0c%UKltx^Fp;zg75}R}SLD30Jr@pe4^r@<XT0YM
zH;e7LaQtF>E*Ov4o-4NJA`2q6=lZuj7js?PtnN{j)Ko#c)n1o*qB(Tj<~d%r{*cbG
zU45w$8A{u@Y1sVk$zs*jYL*HwUimOH5>#KJgq+K{AnK%Oak?ahU&UxtvA<r+-1%0V
zwkG@;ZWwu}s>g7rH-Eo#x-mF<LAT2%&pfiU`SL-xLs<0BFLf#{b+Y2Ak)N|T-CpaG
VHP1J=q?uR!KWYk$DKr1wKLHi5vXcM+

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db b/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-Summary.db
new file mode 100644
index 0000000000000000000000000000000000000000..2044a14c2e39a55524e98a74a92e2c043fc70007
GIT binary patch
literal 56
fcmZQzU}#`qU|<Ad5D)<31|Vi+0TO5cCIqGdFya9p

literal 0
HcmV?d00001

diff --git a/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt b/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
new file mode 100644
index 0000000000..f143a41c6e
--- /dev/null
+++ b/tests/sstables/wrong_range_tombstone_order/ks/wrong_range_tombstone_order-1c6ace40fad111e7b9cf000000000002/mc-1-big-TOC.txt
@@ -0,0 +1,8 @@
+Statistics.db
+Summary.db
+TOC.txt
+Filter.db
+Digest.crc32
+Data.db
+CompressionInfo.db
+Index.db
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 25, 2018, 9:25:18 PM9/25/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
tests/sstable_test.cc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/sstable_test.cc b/tests/sstable_test.cc
index a626963ce7..dd07fd5842 100644
--- a/tests/sstable_test.cc
+++ b/tests/sstable_test.cc
@@ -1036,7 +1036,7 @@ SEASTAR_TEST_CASE(promoted_index_read) {
schema_ptr s = large_partition_schema();
return sstables::test(sstp).read_indexes().then([sstp] (index_list vec) {
BOOST_REQUIRE(vec.size() == 1);
- BOOST_REQUIRE(vec.front().get_promoted_index_size() == 452);
+ BOOST_REQUIRE(vec.front().get_promoted_index_size() > 0);

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 25, 2018, 9:25:19 PM9/25/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
tests/sstable_datafile_test.cc | 21 ++++++++++++++++++++-
1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/tests/sstable_datafile_test.cc b/tests/sstable_datafile_test.cc
index 3e00fc5b39..c629b479c4 100644
--- a/tests/sstable_datafile_test.cc
+++ b/tests/sstable_datafile_test.cc
@@ -52,6 +52,7 @@
#include "tests/index_reader_assertions.hh"
#include "flat_mutation_reader_assertions.hh"
#include "tests/make_random_string.hh"
+#include "tests/normalizing_reader.hh"

#include <stdio.h>
#include <ftw.h>
@@ -1022,6 +1023,22 @@ static flat_mutation_reader sstable_reader(shared_sstable sst, schema_ptr s, con
return sst->as_mutation_source().make_reader(s, pr, s->full_slice());
}

+// We don't need to normalize the sstable reader for 'mc' format
+// because it is naturally normalized now.
+static flat_mutation_reader make_normalizing_sstable_reader(
+ shared_sstable sst, schema_ptr s, const dht::partition_range& pr) {
+ auto sstable_reader = sst->as_mutation_source().make_reader(s, pr, s->full_slice());
+ if (sst->get_version() == sstables::sstable::version_types::mc) {
+ return sstable_reader;
+ }
+
+ return make_normalizing_reader(std::move(sstable_reader));
+}
+
+static flat_mutation_reader make_normalizing_sstable_reader(shared_sstable sst, schema_ptr s) {
+ return make_normalizing_sstable_reader(sst, s, query::full_partition_range);
+}
+
SEASTAR_TEST_CASE(compaction_manager_test) {
return seastar::async([] {
storage_service_for_tests ssft;
@@ -3324,13 +3341,15 @@ SEASTAR_TEST_CASE(test_promoted_index_read) {
auto pkey = partition_key::from_exploded(*s, { int32_type->decompose(0) });
auto dkey = dht::global_partitioner().decorate_key(*s, std::move(pkey));

- auto rd = sstable_reader(sst, s);
+ auto rd = make_normalizing_sstable_reader(sst, s);
using kind = mutation_fragment::kind;
assert_that(std::move(rd))
.produces_partition_start(dkey)
.produces(kind::range_tombstone, { 0 })
.produces(kind::clustering_row, { 0, 0 })
+ .produces(kind::range_tombstone, { 0, 0 })
.produces(kind::clustering_row, { 0, 1 })
+ .produces(kind::range_tombstone, { 0, 1 })
.produces_partition_end()
.produces_end_of_stream();
}
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 25, 2018, 9:25:20 PM9/25/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Altering types in schema has been disabled in Origin (see
CASSANDRA-12443). We do the same.

Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
tests/sstable_datafile_test.cc | 63 ++++++++++++++++++----------------
1 file changed, 34 insertions(+), 29 deletions(-)

diff --git a/tests/sstable_datafile_test.cc b/tests/sstable_datafile_test.cc
index c629b479c4..03cf9109a9 100644
--- a/tests/sstable_datafile_test.cc
+++ b/tests/sstable_datafile_test.cc
@@ -2509,36 +2509,41 @@ SEASTAR_TEST_CASE(check_multi_schema) {
// d int,
// e blob
//);
- return for_each_sstable_version([] (const sstables::sstable::version_types version) {
- auto set_of_ints_type = set_type_impl::get_instance(int32_type, true);
- auto builder = schema_builder("test", "test_multi_schema")
- .with_column("a", int32_type, column_kind::partition_key)
- .with_column("c", set_of_ints_type)
- .with_column("d", int32_type)
- .with_column("e", bytes_type);
- auto s = builder.build();
-
- auto sst = make_sstable(s, get_test_dir("multi_schema_test", s), 1, version, big);
- auto f = sst->load();
- return f.then([sst, s] {
- auto reader = make_lw_shared(sstable_reader(sst, s));
- return read_mutation_from_flat_mutation_reader(*reader, db::no_timeout).then([reader, s] (mutation_opt m) {
- BOOST_REQUIRE(m);
- BOOST_REQUIRE(m->key().equal(*s, partition_key::from_singular(*s, 0)));
- auto& rows = m->partition().clustered_rows();
- BOOST_REQUIRE_EQUAL(rows.calculate_size(), 1);
- auto& row = rows.begin()->row();
- BOOST_REQUIRE(!row.deleted_at());
- auto& cells = row.cells();
- BOOST_REQUIRE_EQUAL(cells.size(), 1);
- auto& cdef = *s->get_column_definition("e");
- BOOST_REQUIRE_EQUAL(cells.cell_at(cdef.id).as_atomic_cell(cdef).value(), int32_type->decompose(5));
- return (*reader)(db::no_timeout);
- }).then([reader, s] (mutation_fragment_opt m) {
- BOOST_REQUIRE(!m);
- });
+ return for_each_sstable_version([] (const sstables::sstable::version_types version) {
+ // We prohibit altering types for SSTables in 'mc' format.
+ // This is compliant with the Origin behaviour - see CASSANDRA-12443
+ if (version != sstables::sstable::version_types::mc) {
+ auto set_of_ints_type = set_type_impl::get_instance(int32_type, true);
+ auto builder = schema_builder("test", "test_multi_schema")
+ .with_column("a", int32_type, column_kind::partition_key)
+ .with_column("c", set_of_ints_type)
+ .with_column("d", int32_type)
+ .with_column("e", int32_type);
+ auto s = builder.build();
+
+ auto sst = make_sstable(s, get_test_dir("multi_schema_test", s), 1, version, big);
+ auto f = sst->load();
+ return f.then([sst, s] {
+ auto reader = make_lw_shared(sstable_reader(sst, s));
+ return read_mutation_from_flat_mutation_reader(*reader, db::no_timeout).then([reader, s] (mutation_opt m) {
+ BOOST_REQUIRE(m);
+ BOOST_REQUIRE(m->key().equal(*s, partition_key::from_singular(*s, 0)));
+ auto& rows = m->partition().clustered_rows();
+ BOOST_REQUIRE_EQUAL(rows.calculate_size(), 1);
+ auto& row = rows.begin()->row();
+ BOOST_REQUIRE(!row.deleted_at());
+ auto& cells = row.cells();
+ BOOST_REQUIRE_EQUAL(cells.size(), 1);
+ auto& cdef = *s->get_column_definition("e");
+ BOOST_REQUIRE_EQUAL(cells.cell_at(cdef.id).as_atomic_cell(cdef).value(), int32_type->decompose(5));
+ return (*reader)(db::no_timeout);
+ }).then([reader, s] (mutation_fragment_opt m) {
+ BOOST_REQUIRE(!m);
+ });
+ });
+ }
+ return make_ready_future<>();
});
- });
}

SEASTAR_TEST_CASE(sstable_rewrite) {
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 25, 2018, 9:25:21 PM9/25/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
This test is not applicable to the 'mc' format as it covers a backward
compatibility case which may only occur with SSTables generated by older
Scylla versions in 'ka' format.

Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
tests/sstable_datafile_test.cc | 48 ++++++++++++++++++----------------
1 file changed, 25 insertions(+), 23 deletions(-)

diff --git a/tests/sstable_datafile_test.cc b/tests/sstable_datafile_test.cc
index 03cf9109a9..ea87e9648b 100644
--- a/tests/sstable_datafile_test.cc
+++ b/tests/sstable_datafile_test.cc
@@ -4520,30 +4520,32 @@ SEASTAR_TEST_CASE(test_old_format_non_compound_range_tombstone_is_read) {
// insert into ks.test (pk, ck, v) values (1, 3, 1);
// delete from ks.test where pk = 1 and ck = 2;
return seastar::async([] {
- for (const auto version : all_sstable_versions) {
- auto s = schema_builder("ks", "test")
- .with_column("pk", int32_type, column_kind::partition_key)
- .with_column("ck", int32_type, column_kind::clustering_key)
- .with_column("v", int32_type)
- .build(schema_builder::compact_storage::yes);
-
- auto sst = sstables::make_sstable(s, get_test_dir("broken_non_compound_pi_and_range_tombstone", s), 1, version, big);
- sst->load().get0();
-
- auto pk = partition_key::from_exploded(*s, { int32_type->decompose(1) });
- auto dk = dht::global_partitioner().decorate_key(*s, pk);
- auto ck = clustering_key::from_exploded(*s, {int32_type->decompose(2)});
- mutation m(s, dk);
- m.set_clustered_cell(ck, *s->get_column_definition("v"), atomic_cell::make_live(*int32_type, 1511270919978349, int32_type->decompose(1), { }));
- m.partition().apply_delete(*s, ck, {1511270943827278, gc_clock::from_time_t(1511270943)});
-
- {
- auto slice = partition_slice_builder(*s).with_range(query::clustering_range::make_singular({ck})).build();
- assert_that(sst->as_mutation_source().make_reader(s, dht::partition_range::make_singular(dk), slice))
- .produces(m)
- .produces_end_of_stream();
+ for (const auto version : all_sstable_versions) {
+ if (version != sstables::sstable::version_types::mc) { // Does not apply to 'mc' format
+ auto s = schema_builder("ks", "test")
+ .with_column("pk", int32_type, column_kind::partition_key)
+ .with_column("ck", int32_type, column_kind::clustering_key)
+ .with_column("v", int32_type)
+ .build(schema_builder::compact_storage::yes);
+
+ auto sst = sstables::make_sstable(s, get_test_dir("broken_non_compound_pi_and_range_tombstone", s), 1, version, big);
+ sst->load().get0();
+
+ auto pk = partition_key::from_exploded(*s, { int32_type->decompose(1) });
+ auto dk = dht::global_partitioner().decorate_key(*s, pk);
+ auto ck = clustering_key::from_exploded(*s, {int32_type->decompose(2)});
+ mutation m(s, dk);
+ m.set_clustered_cell(ck, *s->get_column_definition("v"), atomic_cell::make_live(*int32_type, 1511270919978349, int32_type->decompose(1), { }));
+ m.partition().apply_delete(*s, ck, {1511270943827278, gc_clock::from_time_t(1511270943)});
+
+ {
+ auto slice = partition_slice_builder(*s).with_range(query::clustering_range::make_singular({ck})).build();
+ assert_that(sst->as_mutation_source().make_reader(s, dht::partition_range::make_singular(dk), slice))
+ .produces(m)
+ .produces_end_of_stream();
+ }
+ }
}
- }
});
}

--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 25, 2018, 9:25:22 PM9/25/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 25, 2018, 9:25:23 PM9/25/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
tests/sstable_datafile_test.cc | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/tests/sstable_datafile_test.cc b/tests/sstable_datafile_test.cc
index ea87e9648b..12e4df8800 100644
--- a/tests/sstable_datafile_test.cc
+++ b/tests/sstable_datafile_test.cc
@@ -2746,6 +2746,7 @@ SEASTAR_TEST_CASE(test_wrong_range_tombstone_order) {
// insert into wrong_range_tombstone_order (p,a,b,r) values (0,1,3,5);
// insert into wrong_range_tombstone_order (p,a,b,c,r) values (0,1,3,4,6);
// insert into wrong_range_tombstone_order (p,a,b,r) values (0,1,4,7);
+ // insert into wrong_range_tombstone_order (p,a,b,c,r) values (0,1,4,0,8);
// delete from wrong_range_tombstone_order where p = 0 and a = 1 and b = 4 and c = 0;
// delete from wrong_range_tombstone_order where p = 0 and a = 2;
// delete from wrong_range_tombstone_order where p = 0 and a = 2 and b = 1;
@@ -2767,7 +2768,7 @@ SEASTAR_TEST_CASE(test_wrong_range_tombstone_order) {

auto sst = make_sstable(s, get_test_dir("wrong_range_tombstone_order", s), 1, version, big);
sst->load().get0();
- auto reader = sstable_reader(sst, s);
+ auto reader = make_normalizing_sstable_reader(sst, s);

using kind = mutation_fragment::kind;
assert_that(std::move(reader))
@@ -2779,7 +2780,9 @@ SEASTAR_TEST_CASE(test_wrong_range_tombstone_order) {
.produces(kind::clustering_row, { 1, 2, 3 })
.produces(kind::range_tombstone, { 1, 3 })
.produces(kind::clustering_row, { 1, 3 })
+ .produces(kind::range_tombstone, { 1, 3 }, true)
.produces(kind::clustering_row, { 1, 3, 4 })
+ .produces(kind::range_tombstone, { 1, 3, 4 })
.produces(kind::clustering_row, { 1, 4 })
.produces(kind::clustering_row, { 1, 4, 0 })
.produces(kind::range_tombstone, { 2 })
--
2.17.1

Vladimir Krivopalov

<vladimir@scylladb.com>
unread,
Sep 25, 2018, 9:25:24 PM9/25/18
to scylladb-dev@googlegroups.com, piotr@scylladb.com
Signed-off-by: Vladimir Krivopalov <vlad...@scylladb.com>
---
tests/sstable_test.hh | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/tests/sstable_test.hh b/tests/sstable_test.hh
index 2c1790970e..2ac47dad01 100644
--- a/tests/sstable_test.hh
+++ b/tests/sstable_test.hh
@@ -225,9 +225,10 @@ inline sstring get_test_dir(const sstring& name, const schema_ptr s)
return seastar::sprint("tests/sstables/%s/%s/%s-1c6ace40fad111e7b9cf000000000002", name, s->ks_name(), s->cf_name());
}

-inline std::array<sstables::sstable::version_types, 2> all_sstable_versions = {
+inline std::array<sstables::sstable::version_types, 3> all_sstable_versions = {
sstables::sstable::version_types::ka,
sstables::sstable::version_types::la,
+ sstables::sstable::version_types::mc,
};

template<typename AsyncAction>
--
2.17.1

Avi Kivity

<avi@scylladb.com>
unread,
Sep 26, 2018, 3:41:07 AM9/26/18
to Vladimir Krivopalov, scylladb-dev@googlegroups.com, piotr@scylladb.com

On 26/09/2018 04.24, Vladimir Krivopalov wrote:
> This is a helper flat_mutation_reader that wraps another reader and
> splits range tombstones over rows before emitting them.
>
> It is used to produce the same mutation streams for both old (ka/la) and
> new (mc) SSTables formats in unit tests.
>

Hopefully, one day all our sstables will be normalized, the core will
rely on this fact, and we'll insert this reader into the pipeline when
reading from old sstables.

Commit Bot

<bot@cloudius-systems.com>
unread,
Sep 26, 2018, 3:44:37 AM9/26/18
to scylladb-dev@googlegroups.com, Piotr Jastrzebski
From: Piotr Jastrzebski <pi...@scylladb.com>
Committer: Vladimir Krivopalov <vlad...@scylladb.com>
Branch: next

Add position_in_partition_view::as_end_bound_view

This will be used in sstables 3.

Signed-off-by: Piotr Jastrzebski <pi...@scylladb.com>

---
diff --git a/position_in_partition.hh b/position_in_partition.hh
--- a/position_in_partition.hh
+++ b/position_in_partition.hh
@@ -179,6 +179,11 @@ public:

Commit Bot

<bot@cloudius-systems.com>
unread,
Sep 26, 2018, 3:44:38 AM9/26/18
to scylladb-dev@googlegroups.com, Piotr Jastrzebski
From: Piotr Jastrzebski <pi...@scylladb.com>
Committer: Vladimir Krivopalov <vlad...@scylladb.com>
Branch: next

Add clustering_ranges_walker::upper_bound

This method returns end of current position range.

Signed-off-by: Piotr Jastrzebski <pi...@scylladb.com>

---
diff --git a/clustering_ranges_walker.hh b/clustering_ranges_walker.hh
--- a/clustering_ranges_walker.hh
+++ b/clustering_ranges_walker.hh
@@ -200,6 +200,10 @@ public:
return _current_start;
}

+ position_in_partition_view upper_bound() const {
+ return _current_end;
+ }
+
// When lower_bound() changes, this also does
// Always > 0.
size_t lower_bound_change_counter() const {

Commit Bot

<bot@cloudius-systems.com>
unread,
Sep 26, 2018, 3:44:39 AM9/26/18
to scylladb-dev@googlegroups.com, Piotr Jastrzebski
From: Piotr Jastrzebski <pi...@scylladb.com>
Committer: Vladimir Krivopalov <vlad...@scylladb.com>
Branch: next

Add mutation_fragment_filter::upper_bound

This method returns end of current position range.

Signed-off-by: Piotr Jastrzebski <pi...@scylladb.com>

---
diff --git a/sstables/mutation_fragment_filter.hh
b/sstables/mutation_fragment_filter.hh
--- a/sstables/mutation_fragment_filter.hh
+++ b/sstables/mutation_fragment_filter.hh
@@ -153,6 +153,10 @@ public:
position_in_partition_view lower_bound() const {
return _walker.lower_bound();
}
+
+ position_in_partition_view upper_bound() const {
+ return _walker.upper_bound();
+ }
};

}; // namespace sstables

Commit Bot

<bot@cloudius-systems.com>
unread,
Sep 26, 2018, 3:44:40 AM9/26/18
to scylladb-dev@googlegroups.com, Piotr Jastrzebski
From: Piotr Jastrzebski <pi...@scylladb.com>
Committer: Vladimir Krivopalov <vlad...@scylladb.com>
Branch: next

SST3: Make sure we emit range tombstone when slicing/fft

If we go past the slice to be read with a range tombstone being opened
we need to emit an RT corresponding to this slice.

Signed-off-by: Piotr Jastrzebski <pi...@scylladb.com>

---
diff --git a/sstables/mp_row_consumer.hh b/sstables/mp_row_consumer.hh
--- a/sstables/mp_row_consumer.hh
+++ b/sstables/mp_row_consumer.hh
@@ -1220,7 +1220,17 @@ public:
virtual proceed consume_partition_end() override {
sstlog.trace("mp_row_consumer_m {}: consume_partition_end()",
this);
if (_opened_range_tombstone) {
- throw sstables::malformed_sstable_exception("Unclosed range
tombstone.");
+ if (!_mf_filter || _mf_filter->out_of_range()) {
+ throw sstables::malformed_sstable_exception("Unclosed
range tombstone.");
+ }
+ auto range_end = _mf_filter->upper_bound();
+ position_in_partition::less_compare less(*_schema);
+ auto start_pos =
position_in_partition_view(position_in_partition_view::range_tag_t{},
+
bound_view(_opened_range_tombstone->ck, _opened_range_tombstone->kind));
+ if (!less(range_end, start_pos)) {
+ auto end_bound = range_end.as_end_bound_view();
+ consume_range_tombstone_end(end_bound.prefix(),
end_bound.kind(), _opened_range_tombstone->tomb);
+ }
}
_is_mutation_end = true;
_in_progress_row.reset();
It is loading more messages.
0 new messages