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+

}