Use separate variables instead of an array when rotating files

This makes the code easier to read plus gives us things like letting
the compiler check for unused variables.
pull/209/head
Andreas Karlsson 6 months ago committed by Andreas Karlsson
parent 07756f2734
commit b11d51ca85
  1. 48
      contrib/pg_tde/src/access/pg_tde_tdemap.c

@ -686,40 +686,40 @@ finalize_key_rotation(const char *path_old, const char *path_new)
void void
pg_tde_perform_rotate_key(TDEPrincipalKey *principal_key, TDEPrincipalKey *new_principal_key) pg_tde_perform_rotate_key(TDEPrincipalKey *principal_key, TDEPrincipalKey *new_principal_key)
{ {
#define OLD_PRINCIPAL_KEY 0
#define NEW_PRINCIPAL_KEY 1
#define PRINCIPAL_KEY_COUNT 2
off_t curr_pos[PRINCIPAL_KEY_COUNT] = {0};
int fd[PRINCIPAL_KEY_COUNT];
char path[PRINCIPAL_KEY_COUNT][MAXPGPATH];
TDESignedPrincipalKeyInfo new_signed_key_info; TDESignedPrincipalKeyInfo new_signed_key_info;
off_t old_curr_pos,
new_curr_pos;
int old_fd,
new_fd;
char old_path[MAXPGPATH],
new_path[MAXPGPATH];
off_t map_size; off_t map_size;
XLogPrincipalKeyRotate *xlrec; XLogPrincipalKeyRotate *xlrec;
off_t xlrec_size; off_t xlrec_size;
pg_tde_set_db_file_path(principal_key->keyInfo.databaseId, path[OLD_PRINCIPAL_KEY]);
pg_tde_sign_principal_key_info(&new_signed_key_info, new_principal_key); pg_tde_sign_principal_key_info(&new_signed_key_info, new_principal_key);
fd[OLD_PRINCIPAL_KEY] = pg_tde_open_file_read(path[OLD_PRINCIPAL_KEY], &curr_pos[OLD_PRINCIPAL_KEY]); pg_tde_set_db_file_path(principal_key->keyInfo.databaseId, old_path);
fd[NEW_PRINCIPAL_KEY] = keyrotation_init_file(&new_signed_key_info, path[NEW_PRINCIPAL_KEY], path[OLD_PRINCIPAL_KEY], &curr_pos[NEW_PRINCIPAL_KEY]);
old_fd = pg_tde_open_file_read(old_path, &old_curr_pos);
new_fd = keyrotation_init_file(&new_signed_key_info, new_path, old_path, &new_curr_pos);
/* Read all entries until EOF */ /* Read all entries until EOF */
while (1) while (1)
{ {
InternalKey *rel_key_data; InternalKey *rel_key_data;
off_t prev_pos[PRINCIPAL_KEY_COUNT]; off_t old_prev_pos,
new_prev_pos;
TDEMapEntry read_map_entry, TDEMapEntry read_map_entry,
write_map_entry; write_map_entry;
RelFileLocator rloc; RelFileLocator rloc;
bool found; bool found;
prev_pos[OLD_PRINCIPAL_KEY] = curr_pos[OLD_PRINCIPAL_KEY]; old_prev_pos = old_curr_pos;
found = pg_tde_read_one_map_entry(fd[OLD_PRINCIPAL_KEY], NULL, MAP_ENTRY_VALID, &read_map_entry, &curr_pos[OLD_PRINCIPAL_KEY]); found = pg_tde_read_one_map_entry(old_fd, NULL, MAP_ENTRY_VALID, &read_map_entry, &old_curr_pos);
/* We either reach EOF */ /* We either reach EOF */
if (prev_pos[OLD_PRINCIPAL_KEY] == curr_pos[OLD_PRINCIPAL_KEY]) if (old_prev_pos == old_curr_pos)
break; break;
/* We didn't find a valid entry */ /* We didn't find a valid entry */
@ -735,16 +735,16 @@ pg_tde_perform_rotate_key(TDEPrincipalKey *principal_key, TDEPrincipalKey *new_p
pg_tde_initialize_map_entry(&write_map_entry, new_principal_key, &rloc, rel_key_data); pg_tde_initialize_map_entry(&write_map_entry, new_principal_key, &rloc, rel_key_data);
/* Write the given entry at the location pointed by prev_pos */ /* Write the given entry at the location pointed by prev_pos */
prev_pos[NEW_PRINCIPAL_KEY] = curr_pos[NEW_PRINCIPAL_KEY]; new_prev_pos = new_curr_pos;
curr_pos[NEW_PRINCIPAL_KEY] = pg_tde_write_one_map_entry(fd[NEW_PRINCIPAL_KEY], &write_map_entry, &prev_pos[NEW_PRINCIPAL_KEY], path[NEW_PRINCIPAL_KEY]); new_curr_pos = pg_tde_write_one_map_entry(new_fd, &write_map_entry, &new_prev_pos, new_path);
pfree(rel_key_data); pfree(rel_key_data);
} }
close(fd[OLD_PRINCIPAL_KEY]); close(old_fd);
/* Let's calculate sizes */ /* Let's calculate sizes */
map_size = lseek(fd[NEW_PRINCIPAL_KEY], 0, SEEK_END); map_size = lseek(new_fd, 0, SEEK_END);
xlrec_size = map_size + SizeoOfXLogPrincipalKeyRotate; xlrec_size = map_size + SizeoOfXLogPrincipalKeyRotate;
/* palloc and fill in the structure */ /* palloc and fill in the structure */
@ -753,12 +753,12 @@ pg_tde_perform_rotate_key(TDEPrincipalKey *principal_key, TDEPrincipalKey *new_p
xlrec->databaseId = principal_key->keyInfo.databaseId; xlrec->databaseId = principal_key->keyInfo.databaseId;
xlrec->file_size = map_size; xlrec->file_size = map_size;
if (pg_pread(fd[NEW_PRINCIPAL_KEY], xlrec->buff, xlrec->file_size, 0) == -1) if (pg_pread(new_fd, xlrec->buff, xlrec->file_size, 0) == -1)
ereport(ERROR, ereport(ERROR,
(errcode_for_file_access(), (errcode_for_file_access(),
errmsg("could not write WAL for key rotation: %m"))); errmsg("could not write WAL for key rotation: %m")));
close(fd[NEW_PRINCIPAL_KEY]); close(new_fd);
/* Insert the XLog record */ /* Insert the XLog record */
XLogBeginInsert(); XLogBeginInsert();
@ -766,14 +766,10 @@ pg_tde_perform_rotate_key(TDEPrincipalKey *principal_key, TDEPrincipalKey *new_p
XLogInsert(RM_TDERMGR_ID, XLOG_TDE_ROTATE_KEY); XLogInsert(RM_TDERMGR_ID, XLOG_TDE_ROTATE_KEY);
/* Do the final steps */ /* Do the final steps */
finalize_key_rotation(path[OLD_PRINCIPAL_KEY], path[NEW_PRINCIPAL_KEY]); finalize_key_rotation(old_path, new_path);
/* Free up the palloc'ed data */ /* Free up the palloc'ed data */
pfree(xlrec); pfree(xlrec);
#undef OLD_PRINCIPAL_KEY
#undef NEW_PRINCIPAL_KEY
#undef PRINCIPAL_KEY_COUNT
} }
/* /*

Loading…
Cancel
Save