@ -70,6 +70,26 @@ static bool tde_smgr_has_temp_key(const RelFileLocator *rel);
static void tde_smgr_remove_temp_key ( const RelFileLocator * rel ) ;
static void CalcBlockIv ( ForkNumber forknum , BlockNumber bn , const unsigned char * base_iv , unsigned char * iv ) ;
static void
tde_smgr_log_create_key ( const RelFileLocator * rlocator )
{
XLogRelKey xlrec = { . rlocator = * rlocator } ;
XLogBeginInsert ( ) ;
XLogRegisterData ( ( char * ) & xlrec , sizeof ( xlrec ) ) ;
XLogInsert ( RM_TDERMGR_ID , XLOG_TDE_ADD_RELATION_KEY ) ;
}
static void
tde_smgr_log_delete_key ( const RelFileLocator * rlocator )
{
XLogRelKey xlrec = { . rlocator = * rlocator } ;
XLogBeginInsert ( ) ;
XLogRegisterData ( ( char * ) & xlrec , sizeof ( xlrec ) ) ;
XLogInsert ( RM_TDERMGR_ID , XLOG_TDE_DELETE_RELATION_KEY ) ;
}
static InternalKey *
tde_smgr_create_key ( const RelFileLocatorBackend * smgr_rlocator )
{
@ -80,23 +100,14 @@ tde_smgr_create_key(const RelFileLocatorBackend *smgr_rlocator)
if ( RelFileLocatorBackendIsTemp ( * smgr_rlocator ) )
tde_smgr_save_temp_key ( & smgr_rlocator - > locator , key ) ;
else
{
pg_tde_save_smgr_key ( smgr_rlocator - > locator , key ) ;
tde_smgr_log_create_key ( & smgr_rlocator - > locator ) ;
}
return key ;
}
static void
tde_smgr_log_create_key ( const RelFileLocatorBackend * smgr_rlocator )
{
XLogRelKey xlrec = {
. rlocator = smgr_rlocator - > locator ,
} ;
XLogBeginInsert ( ) ;
XLogRegisterData ( ( char * ) & xlrec , sizeof ( xlrec ) ) ;
XLogInsert ( RM_TDERMGR_ID , XLOG_TDE_ADD_RELATION_KEY ) ;
}
void
tde_smgr_create_key_redo ( const RelFileLocator * rlocator )
{
@ -111,17 +122,22 @@ tde_smgr_create_key_redo(const RelFileLocator *rlocator)
}
static void
tde_smgr_delet e_key ( const RelFileLocatorBackend * smgr_rlocator )
tde_smgr_remov e_key ( const RelFileLocatorBackend * smgr_rlocator )
{
XLogRelKey xlrec = {
. rlocator = smgr_rlocator - > locator ,
} ;
pg_tde_free_key_map_entry ( smgr_rlocator - > locator ) ;
if ( RelFileLocatorBackendIsTemp ( * smgr_rlocator ) )
tde_smgr_remove_temp_key ( & smgr_rlocator - > locator ) ;
else
pg_tde_free_key_map_entry ( smgr_rlocator - > locator ) ;
}
XLogBeginInsert ( ) ;
XLogRegisterData ( ( char * ) & xlrec , sizeof ( xlrec ) ) ;
XLogInsert ( RM_TDERMGR_ID , XLOG_TDE_DELETE_RELATION_KEY ) ;
static void
tde_smgr_delete_key ( const RelFileLocatorBackend * smgr_rlocator )
{
if ( ! RelFileLocatorBackendIsTemp ( * smgr_rlocator ) )
{
pg_tde_free_key_map_entry ( smgr_rlocator - > locator ) ;
tde_smgr_log_delete_key ( & smgr_rlocator - > locator ) ;
}
}
void
@ -148,15 +164,6 @@ tde_smgr_get_key(const RelFileLocatorBackend *smgr_rlocator)
return pg_tde_get_smgr_key ( smgr_rlocator - > locator ) ;
}
static void
tde_smgr_remove_key ( const RelFileLocatorBackend * smgr_rlocator )
{
if ( RelFileLocatorBackendIsTemp ( * smgr_rlocator ) )
tde_smgr_remove_temp_key ( & smgr_rlocator - > locator ) ;
else
pg_tde_free_key_map_entry ( smgr_rlocator - > locator ) ;
}
static bool
tde_smgr_should_encrypt ( const RelFileLocatorBackend * smgr_rlocator , RelFileLocator * old_locator )
{
@ -393,7 +400,6 @@ tde_mdcreate(RelFileLocator relold, SMgrRelation reln, ForkNumber forknum, bool
}
key = tde_smgr_create_key ( & reln - > smgr_rlocator ) ;
tde_smgr_log_create_key ( & reln - > smgr_rlocator ) ;
tdereln - > encryption_status = RELATION_KEY_AVAILABLE ;
tdereln - > relKey = * key ;