From b90bb3a02c48b128c46b2c0a1427a2ba99c31141 Mon Sep 17 00:00:00 2001 From: Andrew Pogrebnoy Date: Fri, 14 Jun 2024 17:45:29 +0300 Subject: [PATCH] Fixes and chores after the rebase with smgr --- src/access/pg_tde_tdemap.c | 40 ++++++++---------------------- src/catalog/tde_global_catalog.c | 1 + src/include/access/pg_tde_tdemap.h | 2 ++ src/smgr/pg_tde_smgr.c | 2 +- 4 files changed, 14 insertions(+), 31 deletions(-) diff --git a/src/access/pg_tde_tdemap.c b/src/access/pg_tde_tdemap.c index 9520e4c777b..fcb1bd8e24e 100644 --- a/src/access/pg_tde_tdemap.c +++ b/src/access/pg_tde_tdemap.c @@ -79,8 +79,6 @@ typedef struct TDEMapFilePath char keydata_path[MAXPGPATH]; } TDEMapFilePath; -static void put_key_into_map(Oid rel_id, RelKeyData *key); - static int pg_tde_open_file_basic(char *tde_filename, int fileFlags, bool ignore_missing); static int pg_tde_file_header_write(char *tde_filename, int fd, TDEMasterKeyInfo *master_key_info, off_t *bytes_written); static int pg_tde_file_header_read(char *tde_filename, int fd, TDEFileHeader *fheader, bool *is_new_file, off_t *bytes_read); @@ -113,8 +111,7 @@ pg_tde_create_key_map_entry(const RelFileLocator *newrlocator) TDEMasterKey *master_key; XLogRelKey xlrec; - pg_tde_set_db_file_paths(newrlocator->dbOid); - master_key = GetMasterKey(newrlocator->dbOid); + master_key = GetMasterKey(newrlocator->dbOid, newrlocator->spcOid, NULL); if (master_key == NULL) { ereport(ERROR, @@ -168,23 +165,7 @@ RelKey *tde_rel_key_map = NULL; RelKeyData * GetRelationKey(RelFileLocator rel) { - RelKey *curr; - RelKeyData *key; - - Oid rel_id = rel.relNumber; - for (curr = tde_rel_key_map; curr != NULL; curr = curr->next) - { - if (curr->rel_id == rel_id) - { - return curr->key; - } - } - - key = pg_tde_get_key_from_file(&rel, NULL); - - put_key_into_map(rel.relNumber, key); - - return key; + return GetRelationKeyWithKeyring(rel, NULL); } RelKeyData * @@ -206,14 +187,14 @@ GetRelationKeyWithKeyring(RelFileLocator rel, GenericKeyring *keyring) if (key != NULL) { - put_key_into_map(rel.relNumber, key); + pg_tde_put_key_into_map(rel.relNumber, key); } return key; } -static void -put_key_into_map(Oid rel_id, RelKeyData *key) { +void +pg_tde_put_key_into_map(Oid rel_id, RelKeyData *key) { RelKey *new; RelKey *prev = NULL; @@ -256,7 +237,7 @@ tde_create_rel_key(Oid rel_id, InternalKey *key, TDEMasterKeyInfo *master_key_in rel_key_data->internal_key.ctx = NULL; /* Add to the decrypted key to cache */ - put_key_into_map(rel_id, rel_key_data); + pg_tde_put_key_into_map(rel_id, rel_key_data); return rel_key_data; } @@ -294,11 +275,11 @@ pg_tde_set_db_file_paths(const RelFileLocator *rlocator, char *map_path, char *k { char *db_path; - /* We use dbOid for the global space for key caches but for the backend - * it should be 0. + /* If this is a global space, than the call might be in a critial section + * (during XLog write) so we can't do GetDatabasePath as it calls palloc() */ if (rlocator->spcOid == GLOBALTABLESPACE_OID) - db_path = GetDatabasePath(0, rlocator->spcOid); + db_path = "global"; else db_path = GetDatabasePath(rlocator->dbOid, rlocator->spcOid); @@ -384,14 +365,13 @@ pg_tde_get_master_key(Oid dbOid, Oid spcOid) bool is_new_file = false; off_t bytes_read = 0; char db_map_path[MAXPGPATH] = {0}; - char db_keydata_path[MAXPGPATH] = {0}; /* Set the file paths */ pg_tde_set_db_file_paths(&(RelFileLocator) { spcOid, dbOid, 0}, - db_map_path, db_keydata_path); + db_map_path, NULL); /* * Ensuring that we always open the file in binary mode. The caller must diff --git a/src/catalog/tde_global_catalog.c b/src/catalog/tde_global_catalog.c index 429c065ecbb..662974a3508 100644 --- a/src/catalog/tde_global_catalog.c +++ b/src/catalog/tde_global_catalog.c @@ -198,6 +198,7 @@ init_gl_catalog_keys(void) enc_rel_key_data = tde_encrypt_rel_key(mkey, rel_key_data, rlocator); pg_tde_write_key_map_entry(rlocator, enc_rel_key_data, &mkey->keyInfo); + pg_tde_put_key_into_map(rlocator->relNumber, rel_key_data); TDEPutGlCatKeyInCache(mkey); } diff --git a/src/include/access/pg_tde_tdemap.h b/src/include/access/pg_tde_tdemap.h index 16e0bb83624..e0e06b63753 100644 --- a/src/include/access/pg_tde_tdemap.h +++ b/src/include/access/pg_tde_tdemap.h @@ -69,4 +69,6 @@ extern void pg_tde_set_db_file_paths(const RelFileLocator *rlocator, char *map_p const char * tde_sprint_key(InternalKey *k); +extern void pg_tde_put_key_into_map(Oid rel_id, RelKeyData *key); + #endif /*PG_TDE_MAP_H*/ diff --git a/src/smgr/pg_tde_smgr.c b/src/smgr/pg_tde_smgr.c index c6c2400eade..7c4aa49f7fc 100644 --- a/src/smgr/pg_tde_smgr.c +++ b/src/smgr/pg_tde_smgr.c @@ -35,7 +35,7 @@ tde_smgr_get_key(SMgrRelation reln) recursion++; - if(GetMasterKey(reln->smgr_rlocator.locator.relNumber)==NULL) + if(GetMasterKey(reln->smgr_rlocator.locator.relNumber, reln->smgr_rlocator.locator.spcOid, NULL)==NULL) { recursion--; return NULL;