Metadata migration for RethinkDB 2.4 (#6230) · rethinkdb/rethinkdb@827c672
1+// Copyright 2010-2017 RethinkDB, all rights reserved.
2+#include "clustering/administration/persist/migrate/migrate_v2_3.hpp"
3+4+#include "clustering/administration/metadata.hpp"
5+#include "clustering/administration/persist/file_keys.hpp"
6+#include "clustering/administration/persist/migrate/rewrite.hpp"
7+#include "clustering/administration/persist/raft_storage_interface.hpp"
8+#include "clustering/table_manager/table_metadata.hpp"
9+10+// This will migrate all metadata from v2_3 to v2_4
11+template <cluster_version_t W>
12+void migrate_metadata_v2_3_to_v2_4(metadata_file_t::write_txn_t *txn,
13+signal_t *interruptor) {
14+// We simply need to rewrite the table metadata to update to the latest
15+// format.
16+ rewrite_metadata_values<W>(mdprefix_table_active(), txn, interruptor);
17+ rewrite_metadata_values<W>(mdprefix_table_inactive(), txn, interruptor);
18+ rewrite_metadata_values<W>(mdprefix_table_raft_header(), txn, interruptor);
19+ rewrite_metadata_values<W>(mdprefix_table_raft_snapshot(), txn, interruptor);
20+ rewrite_metadata_values<W>(mdprefix_table_raft_log(), txn, interruptor);
21+}
22+23+24+25+// This will migrate all metadata from v2_3 to v2_4
26+void migrate_metadata_v2_3_to_v2_4(cluster_version_t serialization_version,
27+metadata_file_t::write_txn_t *txn,
28+signal_t *interruptor) {
29+switch (serialization_version) {
30+case cluster_version_t::v2_3:
31+ migrate_metadata_v2_3_to_v2_4<cluster_version_t::v2_3>(txn, interruptor);
32+break;
33+case cluster_version_t::v2_4_is_latest:
34+break;
35+case cluster_version_t::v1_14:
36+case cluster_version_t::v1_15:
37+case cluster_version_t::v1_16:
38+case cluster_version_t::v2_0:
39+case cluster_version_t::v2_1:
40+case cluster_version_t::v2_2:
41+default:
42+unreachable();
43+ }
44+}