1/******************************************************
2Percona XtraBackup: hot backup tool for InnoDB
3(c) 2009-2014 Percona LLC and/or its affiliates
4Originally Created 3/3/2009 Yasufumi Kinoshita
5Written by Alexey Kopytov, Aleksandr Kuzminsky, Stewart Smith, Vadim Tkachenko,
6Yasufumi Kinoshita, Ignacio Nin and Baron Schwartz.
7
8This program is free software; you can redistribute it and/or modify
9it under the terms of the GNU General Public License as published by
10the Free Software Foundation; version 2 of the License.
11
12This program is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with this program; if not, write to the Free Software
19Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
20
21*******************************************************
22
23This file incorporates work covered by the following copyright and
24permission notice:
25
26 Copyright 2010 Codership Oy <http://www.codership.com>
27
28 This program is free software; you can redistribute it and/or modify
29 it under the terms of the GNU General Public License as published by
30 the Free Software Foundation; version 2 of the License.
31
32 This program is distributed in the hope that it will be useful,
33 but WITHOUT ANY WARRANTY; without even the implied warranty of
34 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
35 GNU General Public License for more details.
36
37 You should have received a copy of the GNU General Public License
38 along with this program; if not, write to the Free Software
39 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
40
41*******************************************************/
42
43#include <my_global.h>
44#include <my_base.h>
45#include <handler.h>
46#include <trx0rseg.h>
47#include <mysql/service_wsrep.h>
48
49#include "common.h"
50#ifdef WITH_WSREP
51
52#include <wsrep_api.h>
53
54/*! Name of file where Galera info is stored on recovery */
55#define XB_GALERA_INFO_FILENAME "xtrabackup_galera_info"
56
57/***********************************************************************
58Store Galera checkpoint info in the 'xtrabackup_galera_info' file, if that
59information is present in the trx system header. Otherwise, do nothing. */
60void
61xb_write_galera_info(bool incremental_prepare)
62/*==================*/
63{
64 FILE* fp;
65 XID xid;
66 char uuid_str[40];
67 long long seqno;
68 MY_STAT statinfo;
69
70 /* Do not overwrite existing an existing file to be compatible with
71 servers with older server versions */
72 if (!incremental_prepare &&
73 my_stat(XB_GALERA_INFO_FILENAME, &statinfo, MYF(0)) != NULL) {
74
75 return;
76 }
77
78 memset(&xid, 0, sizeof(xid));
79 xid.formatID = -1;
80
81 if (!trx_rseg_read_wsrep_checkpoint(xid)) {
82
83 return;
84 }
85
86 wsrep_uuid_t uuid;
87 memcpy(uuid.data, wsrep_xid_uuid(&xid), sizeof(uuid.data));
88 if (wsrep_uuid_print(&uuid, uuid_str,
89 sizeof(uuid_str)) < 0) {
90 return;
91 }
92
93 fp = fopen(XB_GALERA_INFO_FILENAME, "w");
94 if (fp == NULL) {
95
96 msg("mariabackup: error: "
97 "could not create " XB_GALERA_INFO_FILENAME
98 ", errno = %d\n",
99 errno);
100 exit(EXIT_FAILURE);
101 }
102
103 seqno = wsrep_xid_seqno(&xid);
104
105 msg("mariabackup: Recovered WSREP position: %s:%lld\n",
106 uuid_str, (long long) seqno);
107
108 if (fprintf(fp, "%s:%lld", uuid_str, (long long) seqno) < 0) {
109
110 msg("mariabackup: error: "
111 "could not write to " XB_GALERA_INFO_FILENAME
112 ", errno = %d\n",
113 errno);
114 exit(EXIT_FAILURE);
115 }
116
117 fclose(fp);
118}
119#endif
120