You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sk...@apache.org on 2020/12/29 22:56:25 UTC

[ignite] branch master updated: IGNITE-13906 Fixed possible deadlock in GridEncryptionManager. Fixes #8608

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 <al...@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 <sl...@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());