blob: 4781900d5577d736dd0cd5d23d0b4ec33728540a [file] [log] [blame]
/*
* prototypes for master mirror synchronisation write ahead logging.
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
#ifndef MMXLOG_H
#define MMXLOG_H
/*
* We define this to make it clear where temporary master mirror sync code
* resides. This is to be replaced by master file rep.
*/
#define MASTER_MIRROR_SYNC
#include "c.h"
#include "access/xlog.h"
#include "access/xlogdefs.h"
#include "lib/stringinfo.h"
#define MMXLOG_CREATE_DIR 0x00
#define MMXLOG_CREATE_FILE 0x10
#define MMXLOG_REMOVE_DIR 0x20
#define MMXLOG_REMOVE_FILE 0x30
typedef enum mm_fs_obj_type
{
MM_OBJ_FILESPACE,
MM_OBJ_TABLESPACE,
MM_OBJ_DATABASE,
MM_OBJ_RELATION,
MM_OBJ_RELFILENODE
} mm_fs_obj_type;
typedef struct xl_mm_fs_obj
{
mm_fs_obj_type objtype; /* One of the MM_OBJ_* types */
Oid filespace;
Oid tablespace;
Oid database;
Oid relfilenode;
int32 segnum;
bool shared;
char path[MAXPGPATH];
ItemPointerData persistentTid;
int64 persistentSerialNum;
} xl_mm_fs_obj;
/*
* XLOG format.
*/
typedef struct fspc_map
{
Oid filespaceoid;
int16 dbid1;
int16 dbid2;
char path1[MAXPGPATH];
char path2[MAXPGPATH];
} fspc_map;
typedef struct tspc_map
{
Oid tablespaceoid;
Oid filespaceoid;
} tspc_map;
typedef struct dbdir_map
{
Oid tablespaceoid;
Oid databaseoid;
} dbdir_map;
/*
* Container of filespaces/tablespaces used to accumulate mappings
*/
typedef struct fspc_agg_state
{
union
{
int count;
int64 dummy;
};
fspc_map maps[0]; /* variable length */
} fspc_agg_state;
#define FSPC_CHECKPOINT_BYTES(count) \
(SIZEOF_VARSTRUCT(count, fspc_agg_state, maps))
typedef struct tspc_agg_state
{
union
{
int count;
int64 dummy;
};
tspc_map maps[0]; /* variable length */
} tspc_agg_state;
#define TSPC_CHECKPOINT_BYTES(count) \
(SIZEOF_VARSTRUCT(count, tspc_agg_state, maps))
typedef struct dbdir_agg_state
{
union
{
int count;
int64 dummy;
};
dbdir_map maps[0]; /* variable length */
}dbdir_agg_state;
#define DBDIR_CHECKPOINT_BYTES(count) \
(SIZEOF_VARSTRUCT(count, dbdir_agg_state, maps))
extern void mmxlog_redo(XLogRecPtr beginLoc, XLogRecPtr lsn, XLogRecord *record);
extern void mmxlog_desc(StringInfo buf, XLogRecPtr beginLoc, XLogRecord *record);
/*
* Functions to generate WAL records to remove file system objects on the
* master / standby master.
*/
extern void mmxlog_log_remove_filespace(Oid filespace,ItemPointer persistentTid, int64 persistentSerialNum);
extern void mmxlog_log_remove_tablespace(Oid tablespace,ItemPointer persistentTid, int64 persistentSerialNum);
extern void mmxlog_log_remove_database(Oid tablespace, Oid database,ItemPointer persistentTid, int64 persistentSerialNum);
extern void mmxlog_log_remove_relation(Oid tablespace, Oid database, Oid relfilenode,ItemPointer persistentTid, int64 persistentSerialNum);
extern void mmxlog_log_remove_relfilenode(Oid tablespace, Oid database,
Oid relfilenode, int32 segnum,ItemPointer persistentTid, int64 persistentSerialNum);
/*
* Functions to generate WAL records to add file system objects on the
* master / standby master.
*/
extern void mmxlog_log_create_filespace(Oid filespace,ItemPointer persistentTid, int64 persistentSerialNum);
extern void mmxlog_log_create_tablespace(Oid filespace, Oid tablespace,ItemPointer persistentTid, int64 persistentSerialNum);
extern void mmxlog_log_create_database(Oid tablespace, Oid database,ItemPointer persistentTid, int64 persistentSerialNum);
extern void mmxlog_log_create_relation(Oid tablespace, Oid database, Oid relfilenode,ItemPointer persistentTid, int64 persistentSerialNum);
extern void mmxlog_log_create_relfilenode(Oid tablespace, Oid database,
Oid relfilenode, int32 segnum,ItemPointer persistentTid, int64 persistentSerialNum);
extern void mmxlog_append_checkpoint_data(XLogRecData rdata[5]);
extern void mmxlog_read_checkpoint_data(char *cpdata, int masterMirroringLen, int checkpointLen, XLogRecPtr *beginLoc);
extern bool mmxlog_filespace_get_path(
Oid fspcoid,
char **filespacePath);
extern bool mmxlog_tablespace_get_filespace(
Oid tspcoid,
Oid *filespaceOid);
extern void mmxlog_add_filespace_init(
fspc_agg_state **fas, int *maxCount);
extern void mmxlog_add_filespace(
fspc_agg_state **fas, int *maxCount,
Oid filespace,
char *path1,
char *caller);
extern void mmxlog_add_tablespace_init(
tspc_agg_state **tas, int *maxCount);
extern void mmxlog_add_tablespace(
tspc_agg_state **tas, int *maxCount,
Oid filespace, Oid tablespace, char *caller);
extern void mmxlog_add_database_init(
dbdir_agg_state **das, int *maxCount);
extern void mmxlog_add_database(
dbdir_agg_state **das, int *maxCount,
Oid database, Oid tablespace, char *caller);
extern char *mmxlog_get_checkpoint_record_suffix(XLogRecord *checkpointRecord);
extern bool mmxlog_get_checkpoint_info(char *cpdata, int masterMirroringLen, int checkpointLen, XLogRecPtr *beginLoc, int errlevel,
fspc_agg_state **f,
tspc_agg_state **t,
dbdir_agg_state **d);
extern bool mmxlog_verify_checkpoint_info(char *cpdata, int masterMirroringLen, int checkpointLen, XLogRecPtr *beginLoc, int errlevel);
extern bool mmxlog_get_checkpoint_counts(char *cpdata, int masterMirroringLen, int checkpointLen, XLogRecPtr *beginLoc, int errlevel, int *filespaceCount, int *tablespaceCount, int *databaseCount);
extern void mmxlog_print_filespaces(int elevel, char *caller);
extern void mmxlog_print_tablespaces(int elevel, char *caller);
extern void mmxlog_empty_hashtables(void);
#endif /* MMXLOG_H */