Skip to content

Commit 630441e

Browse files
committed
Do not try to delete keys or log WAL for temporary tables
We forgot to have a check against trying to delete leftover SMGR keys for temporary tables which is a useless operation since they are store in memory. Additionally we forgot to prevent WAL from being written when creating or removing a key in smgrcreate() for temporary tables.
1 parent b2bb77c commit 630441e

File tree

1 file changed

+37
-31
lines changed

1 file changed

+37
-31
lines changed

contrib/pg_tde/src/smgr/pg_tde_smgr.c

Lines changed: 37 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,26 @@ static bool tde_smgr_has_temp_key(const RelFileLocator *rel);
7070
static void tde_smgr_remove_temp_key(const RelFileLocator *rel);
7171
static void CalcBlockIv(ForkNumber forknum, BlockNumber bn, const unsigned char *base_iv, unsigned char *iv);
7272

73+
static void
74+
tde_smgr_log_create_key(const RelFileLocator *rlocator)
75+
{
76+
XLogRelKey xlrec = {.rlocator = *rlocator};
77+
78+
XLogBeginInsert();
79+
XLogRegisterData((char *) &xlrec, sizeof(xlrec));
80+
XLogInsert(RM_TDERMGR_ID, XLOG_TDE_ADD_RELATION_KEY);
81+
}
82+
83+
static void
84+
tde_smgr_log_delete_key(const RelFileLocator *rlocator)
85+
{
86+
XLogRelKey xlrec = {.rlocator = *rlocator};
87+
88+
XLogBeginInsert();
89+
XLogRegisterData((char *) &xlrec, sizeof(xlrec));
90+
XLogInsert(RM_TDERMGR_ID, XLOG_TDE_DELETE_RELATION_KEY);
91+
}
92+
7393
static InternalKey *
7494
tde_smgr_create_key(const RelFileLocatorBackend *smgr_rlocator)
7595
{
@@ -80,23 +100,14 @@ tde_smgr_create_key(const RelFileLocatorBackend *smgr_rlocator)
80100
if (RelFileLocatorBackendIsTemp(*smgr_rlocator))
81101
tde_smgr_save_temp_key(&smgr_rlocator->locator, key);
82102
else
103+
{
83104
pg_tde_save_smgr_key(smgr_rlocator->locator, key);
105+
tde_smgr_log_create_key(&smgr_rlocator->locator);
106+
}
84107

85108
return key;
86109
}
87110

88-
static void
89-
tde_smgr_log_create_key(const RelFileLocatorBackend *smgr_rlocator)
90-
{
91-
XLogRelKey xlrec = {
92-
.rlocator = smgr_rlocator->locator,
93-
};
94-
95-
XLogBeginInsert();
96-
XLogRegisterData((char *) &xlrec, sizeof(xlrec));
97-
XLogInsert(RM_TDERMGR_ID, XLOG_TDE_ADD_RELATION_KEY);
98-
}
99-
100111
void
101112
tde_smgr_create_key_redo(const RelFileLocator *rlocator)
102113
{
@@ -111,17 +122,22 @@ tde_smgr_create_key_redo(const RelFileLocator *rlocator)
111122
}
112123

113124
static void
114-
tde_smgr_delete_key(const RelFileLocatorBackend *smgr_rlocator)
125+
tde_smgr_remove_key(const RelFileLocatorBackend *smgr_rlocator)
115126
{
116-
XLogRelKey xlrec = {
117-
.rlocator = smgr_rlocator->locator,
118-
};
119-
120-
pg_tde_free_key_map_entry(smgr_rlocator->locator);
127+
if (RelFileLocatorBackendIsTemp(*smgr_rlocator))
128+
tde_smgr_remove_temp_key(&smgr_rlocator->locator);
129+
else
130+
pg_tde_free_key_map_entry(smgr_rlocator->locator);
131+
}
121132

122-
XLogBeginInsert();
123-
XLogRegisterData((char *) &xlrec, sizeof(xlrec));
124-
XLogInsert(RM_TDERMGR_ID, XLOG_TDE_DELETE_RELATION_KEY);
133+
static void
134+
tde_smgr_delete_key(const RelFileLocatorBackend *smgr_rlocator)
135+
{
136+
if (!RelFileLocatorBackendIsTemp(*smgr_rlocator))
137+
{
138+
pg_tde_free_key_map_entry(smgr_rlocator->locator);
139+
tde_smgr_log_delete_key(&smgr_rlocator->locator);
140+
}
125141
}
126142

127143
void
@@ -148,15 +164,6 @@ tde_smgr_get_key(const RelFileLocatorBackend *smgr_rlocator)
148164
return pg_tde_get_smgr_key(smgr_rlocator->locator);
149165
}
150166

151-
static void
152-
tde_smgr_remove_key(const RelFileLocatorBackend *smgr_rlocator)
153-
{
154-
if (RelFileLocatorBackendIsTemp(*smgr_rlocator))
155-
tde_smgr_remove_temp_key(&smgr_rlocator->locator);
156-
else
157-
pg_tde_free_key_map_entry(smgr_rlocator->locator);
158-
}
159-
160167
static bool
161168
tde_smgr_should_encrypt(const RelFileLocatorBackend *smgr_rlocator, RelFileLocator *old_locator)
162169
{
@@ -393,7 +400,6 @@ tde_mdcreate(RelFileLocator relold, SMgrRelation reln, ForkNumber forknum, bool
393400
}
394401

395402
key = tde_smgr_create_key(&reln->smgr_rlocator);
396-
tde_smgr_log_create_key(&reln->smgr_rlocator);
397403

398404
tdereln->encryption_status = RELATION_KEY_AVAILABLE;
399405
tdereln->relKey = *key;

0 commit comments

Comments
 (0)