1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
/* Copyright (c) 2003-2007 MySQL AB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program 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 this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */
#ifndef CONSUMER_RESTORE_HPP
#define CONSUMER_RESTORE_HPP
#include "consumer.hpp"
bool map_nodegroups(Uint16 *ng_array, Uint32 no_parts);
struct restore_callback_t {
class BackupRestore *restore;
class TupleS tup;
class NdbTransaction *connection;
int retries;
int error_code;
Uint32 fragId;
restore_callback_t *next;
};
class BackupRestore : public BackupConsumer
{
public:
BackupRestore(NODE_GROUP_MAP *ng_map,
uint ng_map_len,
Uint32 parallelism=1)
{
m_ndb = 0;
m_cluster_connection = 0;
m_nodegroup_map = ng_map;
m_nodegroup_map_len = ng_map_len;
m_logCount = m_dataCount = 0;
m_restore = false;
m_restore_meta = false;
m_no_restore_disk = false;
m_restore_epoch = false;
m_parallelism = parallelism;
m_callback = 0;
m_free_callback = 0;
m_temp_error = false;
m_no_upgrade = false;
m_transactions = 0;
m_cache.m_old_table = 0;
}
virtual ~BackupRestore();
virtual bool init();
virtual void release();
virtual bool object(Uint32 type, const void* ptr);
virtual bool table(const TableS &);
virtual bool endOfTables();
virtual void tuple(const TupleS &, Uint32 fragId);
virtual void tuple_free();
virtual void tuple_a(restore_callback_t *cb);
virtual void cback(int result, restore_callback_t *cb);
virtual bool errorHandler(restore_callback_t *cb);
virtual void exitHandler();
virtual void endOfTuples();
virtual void logEntry(const LogEntry &);
virtual void endOfLogEntrys();
virtual bool finalize_table(const TableS &);
virtual bool has_temp_error();
virtual bool createSystable(const TableS & table);
virtual bool table_equal(const TableS & table);
virtual bool update_apply_status(const RestoreMetaData &metaData);
void connectToMysql();
bool map_in_frm(char *new_data, const char *data,
uint data_len, uint *new_data_len);
bool search_replace(char *search_str, char **new_data,
const char **data, const char *end_data,
uint *new_data_len);
bool map_nodegroups(Uint16 *ng_array, Uint32 no_parts);
Uint32 map_ng(Uint32 ng);
bool translate_frm(NdbDictionary::Table *table);
Ndb * m_ndb;
Ndb_cluster_connection * m_cluster_connection;
bool m_restore;
bool m_restore_meta;
bool m_no_restore_disk;
bool m_restore_epoch;
bool m_no_upgrade; // for upgrade ArrayType from 5.0 backup file.
Uint32 m_logCount;
Uint32 m_dataCount;
Uint32 m_parallelism;
volatile Uint32 m_transactions;
restore_callback_t *m_callback;
restore_callback_t *m_free_callback;
bool m_temp_error;
/**
* m_new_table_ids[X] = Y;
* X - old table id
* Y != 0 - new table
*/
Vector<const NdbDictionary::Table*> m_new_tables;
struct {
const NdbDictionary::Table* m_old_table;
const NdbDictionary::Table* m_new_table;
} m_cache;
const NdbDictionary::Table* get_table(const NdbDictionary::Table* );
Vector<const NdbDictionary::Table*> m_indexes;
Vector<NdbDictionary::Tablespace*> m_tablespaces; // Index by id
Vector<NdbDictionary::LogfileGroup*> m_logfilegroups;// Index by id
};
#endif
|