Skip to content

Commit eab9bd0

Browse files
committed
Move WAL logging of relation key creation to smgr
Instead of it being done down in tdemap code controlled with a boolean, we just do it where the decision to do it is made instead.
1 parent 964c78d commit eab9bd0

File tree

3 files changed

+19
-18
lines changed

3 files changed

+19
-18
lines changed

contrib/pg_tde/src/access/pg_tde_tdemap.c

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,10 @@ static void finalize_key_rotation(const char *path_old, const char *path_new);
7676
static int pg_tde_open_file_write(const char *tde_filename, const TDESignedPrincipalKeyInfo *signed_key_info, bool truncate, off_t *curr_pos);
7777

7878
void
79-
pg_tde_save_smgr_key(RelFileLocator rel, const InternalKey *rel_key_data, bool write_xlog)
79+
pg_tde_save_smgr_key(RelFileLocator rel, const InternalKey *rel_key_data)
8080
{
8181
TDEPrincipalKey *principal_key;
8282
LWLock *lock_pk = tde_lwlock_enc_keys();
83-
XLogRelKey xlrec = {
84-
.rlocator = rel,
85-
};
8683

8784
LWLockAcquire(lock_pk, LW_EXCLUSIVE);
8885
principal_key = GetPrincipalKey(rel.dbOid, LW_EXCLUSIVE);
@@ -95,17 +92,6 @@ pg_tde_save_smgr_key(RelFileLocator rel, const InternalKey *rel_key_data, bool w
9592

9693
pg_tde_write_key_map_entry(&rel, rel_key_data, principal_key);
9794
LWLockRelease(lock_pk);
98-
99-
if (write_xlog)
100-
{
101-
/*
102-
* It is fine to write the to WAL after writing to the file since we
103-
* have not WAL logged the SMGR CREATE event either.
104-
*/
105-
XLogBeginInsert();
106-
XLogRegisterData((char *) &xlrec, sizeof(xlrec));
107-
XLogInsert(RM_TDERMGR_ID, XLOG_TDE_ADD_RELATION_KEY);
108-
}
10995
}
11096

11197
const char *

contrib/pg_tde/src/include/access/pg_tde_tdemap.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ pg_tde_set_db_file_path(Oid dbOid, char *path)
9393
join_path_components(path, pg_tde_get_data_dir(), psprintf(PG_TDE_MAP_FILENAME, dbOid));
9494
}
9595

96-
extern void pg_tde_save_smgr_key(RelFileLocator rel, const InternalKey *key, bool write_xlog);
96+
extern void pg_tde_save_smgr_key(RelFileLocator rel, const InternalKey *key);
9797
extern bool pg_tde_has_smgr_key(RelFileLocator rel);
9898
extern InternalKey *pg_tde_get_smgr_key(RelFileLocator rel);
9999
extern void pg_tde_free_key_map_entry(RelFileLocator rel);

contrib/pg_tde/src/smgr/pg_tde_smgr.c

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
#include "smgr/pg_tde_smgr.h"
44
#include "storage/smgr.h"
55
#include "storage/md.h"
6+
#include "access/xloginsert.h"
67
#include "catalog/catalog.h"
8+
#include "access/pg_tde_xlog.h"
79
#include "encryption/enc_aes.h"
810
#include "encryption/enc_tde.h"
911
#include "access/pg_tde_tdemap.h"
@@ -77,11 +79,23 @@ tde_smgr_create_key(const RelFileLocatorBackend *smgr_rlocator)
7779
if (RelFileLocatorBackendIsTemp(*smgr_rlocator))
7880
tde_smgr_save_temp_key(&smgr_rlocator->locator, key);
7981
else
80-
pg_tde_save_smgr_key(smgr_rlocator->locator, key, true);
82+
pg_tde_save_smgr_key(smgr_rlocator->locator, key);
8183

8284
return key;
8385
}
8486

87+
static void
88+
tde_smgr_log_create_key(const RelFileLocatorBackend *smgr_rlocator)
89+
{
90+
XLogRelKey xlrec = {
91+
.rlocator = smgr_rlocator->locator,
92+
};
93+
94+
XLogBeginInsert();
95+
XLogRegisterData((char *) &xlrec, sizeof(xlrec));
96+
XLogInsert(RM_TDERMGR_ID, XLOG_TDE_ADD_RELATION_KEY);
97+
}
98+
8599
void
86100
tde_smgr_create_key_redo(const RelFileLocator *rlocator)
87101
{
@@ -92,7 +106,7 @@ tde_smgr_create_key_redo(const RelFileLocator *rlocator)
92106

93107
pg_tde_generate_internal_key(&key, TDE_KEY_TYPE_SMGR);
94108

95-
pg_tde_save_smgr_key(*rlocator, &key, false);
109+
pg_tde_save_smgr_key(*rlocator, &key);
96110
}
97111

98112
static bool
@@ -370,6 +384,7 @@ tde_mdcreate(RelFileLocator relold, SMgrRelation reln, ForkNumber forknum, bool
370384
else
371385
{
372386
key = tde_smgr_create_key(&reln->smgr_rlocator);
387+
tde_smgr_log_create_key(&reln->smgr_rlocator);
373388
}
374389

375390
tdereln->encryption_status = RELATION_KEY_AVAILABLE;

0 commit comments

Comments
 (0)