diff --git a/sstables/sstables.cc b/sstables/sstables.cc index d67904fd57..fcd79ffcb6 100644 --- a/sstables/sstables.cc +++ b/sstables/sstables.cc @@ -63,6 +63,7 @@ #include "integrity_checked_file_impl.hh" #include "service/storage_service.hh" #include "db/extensions.hh" +#include "unimplemented.hh" thread_local disk_error_signal_type sstable_read_error; thread_local disk_error_signal_type sstable_write_error; @@ -750,6 +751,15 @@ future<> parse(sstable_version_types v, random_access_reader& in, statistics& s) return parse(v, in, s.contents[val.first]); case metadata_type::Stats: return parse(v, in, s.contents[val.first]); + case metadata_type::Serialization: + if (v != sstable_version_types::mc) { + throw std::runtime_error( + "Statistics is malformed: SSTable is in 2.x format but contains serialization header."); + } else { + // Ignore + warn(unimplemented::cause::SSTABLE_FORMAT_M); + } + return make_ready_future<>(); default: sstlog.warn("Invalid metadata type at Statistics file: {} ", int(val.first)); return make_ready_future<>(); diff --git a/sstables/types.hh b/sstables/types.hh index d119908b5c..a957998946 100644 --- a/sstables/types.hh +++ b/sstables/types.hh @@ -388,6 +388,7 @@ enum class metadata_type : uint32_t { Validation = 0, Compaction = 1, Stats = 2, + Serialization = 3, }; enum class scylla_metadata_type : uint32_t { diff --git a/unimplemented.cc b/unimplemented.cc index 8cbaaaa25a..013a41a50a 100644 --- a/unimplemented.cc +++ b/unimplemented.cc @@ -61,6 +61,7 @@ std::ostream& operator<<(std::ostream& out, cause c) { case cause::API: return out << "API"; case cause::SCHEMA_CHANGE: return out << "SCHEMA_CHANGE"; case cause::MIXED_CF: return out << "MIXED_CF"; + case cause::SSTABLE_FORMAT_M: return out << "SSTABLE_FORMAT_M"; } abort(); } diff --git a/unimplemented.hh b/unimplemented.hh index 9be107642a..6edd00ec54 100644 --- a/unimplemented.hh +++ b/unimplemented.hh @@ -56,6 +56,7 @@ enum class cause { STORAGE_SERVICE, SCHEMA_CHANGE, MIXED_CF, + SSTABLE_FORMAT_M, }; [[noreturn]] void fail(cause what);