This is an automated email from the ASF dual-hosted git repository. sk0x50 pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push: new 7fb6e07 IGNITE-13906 Fixed possible deadlock in GridEncryptionManager. Fixes #8608 7fb6e07 is described below commit 7fb6e0723df7c0a05d42c44764319f48ee1efc7c Author: Mirza Aliev <alievmi...@gmail.com> AuthorDate: Wed Dec 30 01:50:41 2020 +0300 IGNITE-13906 Fixed possible deadlock in GridEncryptionManager. Fixes #8608 Signed-off-by: Slava Koptilin <slava.kopti...@gmail.com> --- .../managers/encryption/GridEncryptionManager.java | 47 +++++++++++++--------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/encryption/GridEncryptionManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/encryption/GridEncryptionManager.java index 592af7e..321638a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/encryption/GridEncryptionManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/encryption/GridEncryptionManager.java @@ -799,7 +799,7 @@ public class GridEncryptionManager extends GridManagerAdapter<EncryptionSpi> imp reencryptGroups.put(grpId, pageScanner.pagesCount(grp)); if (log.isInfoEnabled()) - log.info("New encryption key for group was added [grpId=" + grpId + ", keyId=" + newKeyId + "]"); + log.info("New encryption key for group was added [grpId=" + grpId + ", keyId=" + newKeyId + ']'); } startReencryption(encryptionStatus.keySet()); @@ -959,7 +959,7 @@ public class GridEncryptionManager extends GridManagerAdapter<EncryptionSpi> imp if (log.isInfoEnabled()) { log.info("Previous encryption keys have been removed [grpId=" + grpId + - ", keyIds=" + keyIds + "]"); + ", keyIds=" + keyIds + ']'); } } } @@ -980,7 +980,8 @@ public class GridEncryptionManager extends GridManagerAdapter<EncryptionSpi> imp String masterKeyName = (String)metastorage.read(MASTER_KEY_NAME_PREFIX); if (masterKeyName != null) { - log.info("Master key name loaded from metastrore [masterKeyName=" + masterKeyName + ']'); + if (log.isInfoEnabled()) + log.info("Master key name loaded from metastrore [masterKeyName=" + masterKeyName + ']'); getSpi().setMasterKeyName(masterKeyName); } @@ -1025,18 +1026,22 @@ public class GridEncryptionManager extends GridManagerAdapter<EncryptionSpi> imp if (newMasterKeyName != null) { if (newMasterKeyName.equals(getSpi().getMasterKeyName())) { - log.info("Restored master key name equals to name from system property " + - IGNITE_MASTER_KEY_NAME_TO_CHANGE_BEFORE_STARTUP + ". This system property will be ignored and " + - "recommended to remove [masterKeyName=" + newMasterKeyName + ']'); + if (log.isInfoEnabled()) { + log.info("Restored master key name equals to name from system property " + + IGNITE_MASTER_KEY_NAME_TO_CHANGE_BEFORE_STARTUP + ". This system property will be ignored and " + + "recommended to remove [masterKeyName=" + newMasterKeyName + ']'); + } return; } recoveryMasterKeyName = true; - log.info("System property " + IGNITE_MASTER_KEY_NAME_TO_CHANGE_BEFORE_STARTUP + " is set. Master key " + - "will be changed locally and group keys will be re-encrypted before join to cluster. Result will " + - "be saved to MetaStore on activation process. [masterKeyName=" + newMasterKeyName + ']'); + if (log.isInfoEnabled()) { + log.info("System property " + IGNITE_MASTER_KEY_NAME_TO_CHANGE_BEFORE_STARTUP + " is set. " + + "Master key will be changed locally and group keys will be re-encrypted before join to cluster. " + + "Result will be saved to MetaStore on activation process. [masterKeyName=" + newMasterKeyName + ']'); + } getSpi().setMasterKeyName(newMasterKeyName); } @@ -1259,7 +1264,7 @@ public class GridEncryptionManager extends GridManagerAdapter<EncryptionSpi> imp writeGroupKeysToMetaStore(grpId, grpKeys.getAll(grpId)); if (log.isInfoEnabled()) - log.info("Previous encryption keys were removed [grpId=" + grpId + ", keyIds=" + rmvKeyIds + "]"); + log.info("Previous encryption keys were removed [grpId=" + grpId + ", keyIds=" + rmvKeyIds + ']'); } /** @@ -1395,28 +1400,31 @@ public class GridEncryptionManager extends GridManagerAdapter<EncryptionSpi> imp * @param name New master key name. */ private void doChangeMasterKey(String name) { - log.info("Start master key change [masterKeyName=" + name + ']'); + if (log.isInfoEnabled()) + log.info("Start master key change [masterKeyName=" + name + ']'); masterKeyChangeLock.writeLock().lock(); try { getSpi().setMasterKeyName(name); - ctx.cache().context().database().checkpointReadLock(); + synchronized (metaStorageMux) { + ctx.cache().context().database().checkpointReadLock(); - try { - writeKeysToWal(); + try { + writeKeysToWal(); - synchronized (metaStorageMux) { assert writeToMetaStoreEnabled; writeKeysToMetaStore(true); } - } finally { - ctx.cache().context().database().checkpointReadUnlock(); + finally { + ctx.cache().context().database().checkpointReadUnlock(); + } } - log.info("Master key successfully changed [masterKeyName=" + name + ']'); + if (log.isInfoEnabled()) + log.info("Master key successfully changed [masterKeyName=" + name + ']'); } catch (Exception e) { U.error(log, "Unable to change master key locally.", e); @@ -1453,7 +1461,8 @@ public class GridEncryptionManager extends GridManagerAdapter<EncryptionSpi> imp public void applyKeys(MasterKeyChangeRecordV2 rec) { assert !writeToMetaStoreEnabled && !ctx.state().clusterState().active(); - log.info("Master key name loaded from WAL [masterKeyName=" + rec.getMasterKeyName() + ']'); + if (log.isInfoEnabled()) + log.info("Master key name loaded from WAL [masterKeyName=" + rec.getMasterKeyName() + ']'); try { getSpi().setMasterKeyName(rec.getMasterKeyName());