xy720 commented on code in PR #44905:
URL: https://github.com/apache/doris/pull/44905#discussion_r1891803847


##########
fe/fe-core/src/main/java/org/apache/doris/analysis/AbstractBackupStmt.java:
##########
@@ -120,6 +126,10 @@ public String getDbName() {
         return labelName.getDbName();
     }
 
+    public  boolean isBackupGlobal() {

Review Comment:
   ```suggestion
       public boolean isBackupGlobal() {
   ```



##########
fe/fe-core/src/main/java/org/apache/doris/backup/RestoreJob.java:
##########
@@ -1263,6 +1298,154 @@ private void checkAndRestoreResources() {
         }
     }
 
+    private void checkAndRestorePrivileges() {
+        List<User> users = 
jobInfo.newBackupObjects.backupGlobalInfo.getUserList();
+        List<UserIdentity> localUsers = Lists.newArrayList();
+
+        for (User user : users) {
+
+            if 
(Env.getCurrentEnv().getAuth().doesUserExist(user.getUserIdentity())) {
+                localUsers.add(user.getUserIdentity());
+                continue;
+            }
+            try {
+                
Env.getCurrentEnv().getAuth().createUserInternal(user.getUserIdentity(), null,

Review Comment:
   Should drop it in cancelInternal



##########
fe/fe-core/src/main/java/org/apache/doris/backup/RestoreJob.java:
##########
@@ -1263,6 +1298,154 @@ private void checkAndRestoreResources() {
         }
     }
 
+    private void checkAndRestorePrivileges() {
+        List<User> users = 
jobInfo.newBackupObjects.backupGlobalInfo.getUserList();
+        List<UserIdentity> localUsers = Lists.newArrayList();
+
+        for (User user : users) {
+
+            if 
(Env.getCurrentEnv().getAuth().doesUserExist(user.getUserIdentity())) {
+                localUsers.add(user.getUserIdentity());
+                continue;
+            }
+            try {
+                
Env.getCurrentEnv().getAuth().createUserInternal(user.getUserIdentity(), null,
+                        user.getPassword().getPassword(), true, 
PasswordOptions.UNSET_OPTION,
+                        user.getComment(), UUID.randomUUID().toString(), 
false);
+            } catch (DdlException e) {
+                LOG.error("restore user fail should not happen", e);

Review Comment:
   set status and return here, and roll back in cancelInternal



##########
fe/fe-core/src/main/java/org/apache/doris/backup/RestoreJob.java:
##########
@@ -1263,6 +1298,154 @@ private void checkAndRestoreResources() {
         }
     }
 
+    private void checkAndRestorePrivileges() {

Review Comment:
   How to roll back?



##########
fe/fe-core/src/main/java/org/apache/doris/backup/RestoreJob.java:
##########
@@ -1263,6 +1298,154 @@ private void checkAndRestoreResources() {
         }
     }
 
+    private void checkAndRestorePrivileges() {
+        List<User> users = 
jobInfo.newBackupObjects.backupGlobalInfo.getUserList();
+        List<UserIdentity> localUsers = Lists.newArrayList();
+
+        for (User user : users) {
+
+            if 
(Env.getCurrentEnv().getAuth().doesUserExist(user.getUserIdentity())) {
+                localUsers.add(user.getUserIdentity());
+                continue;
+            }
+            try {
+                
Env.getCurrentEnv().getAuth().createUserInternal(user.getUserIdentity(), null,
+                        user.getPassword().getPassword(), true, 
PasswordOptions.UNSET_OPTION,
+                        user.getComment(), UUID.randomUUID().toString(), 
false);
+            } catch (DdlException e) {
+                LOG.error("restore user fail should not happen", e);
+            }
+        }
+
+        List<UserProperty> userProperties = 
jobInfo.newBackupObjects.backupGlobalInfo.getUserProperties();
+        for (UserProperty userProperty : userProperties) {
+            for (UserIdentity localIdentity : localUsers) {
+                if 
(localIdentity.getUser().equals(userProperty.getQualifiedUser())) {
+                    continue;
+                }
+            }
+            try {
+                List<Pair<String, String>> properties = Lists.newArrayList();
+                List<List<String>> list = userProperty.fetchProperty();
+                for (List<String> row : list) {
+                    String key = row.get(0);
+                    String value = row.get(1);
+                    if (key.equals(UserProperty.PROP_RESOURCE_TAGS)) {
+                        continue;
+                    }
+
+                    if (key.equals(UserProperty.PROP_WORKLOAD_GROUP) && 
!reserveWorkloadGroup) {
+                        properties.add(Pair.of(key, 
WorkloadGroupMgr.DEFAULT_GROUP_NAME));
+                        continue;
+                    }
+
+                    if (!value.equals("")) {
+                        properties.add(Pair.of(key, value));
+                    }
+
+                }
+                
Env.getCurrentEnv().getAuth().updateUserPropertyInternal(userProperty.getQualifiedUser(),
+                        properties, false /* is replay */);
+            } catch (Exception e) {
+                LOG.error("restore user property fail should not happen", e);
+            }
+        }
+
+        Map<UserIdentity, PasswordPolicy> policyMap = 
jobInfo.newBackupObjects.backupGlobalInfo.getPolicyMap();
+        for (Map.Entry<UserIdentity, PasswordPolicy> entry : 
policyMap.entrySet()) {
+            UserIdentity identity = entry.getKey();
+            PasswordPolicy passwordPolicy = entry.getValue();
+            for (UserIdentity localIdentity : localUsers) {
+                if (localIdentity.equals(identity)) {
+                    continue;
+                }
+            }
+            try {
+                PasswordOptions passwordOptions = new 
PasswordOptions(passwordPolicy.getExpirePolicy().expirationSecond,
+                        passwordPolicy.getHistoryPolicy().historyNum, -2,
+                        passwordPolicy.getFailedLoginPolicy().numFailedLogin,
+                        
passwordPolicy.getFailedLoginPolicy().passwordLockSeconds, -2);
+                
Env.getCurrentEnv().getAuth().getPasswdPolicyManager().updatePolicy(identity, 
null, passwordOptions);
+            } catch (Exception e) {
+                LOG.error("restore user property fail should not happen", e);
+            }
+        }
+
+        List<Policy> rowPolicies = 
jobInfo.newBackupObjects.backupGlobalInfo.getRowPolicies();
+        for (Policy policy : rowPolicies) {
+            RowPolicy rowPolicy = (RowPolicy) policy;
+            if (Env.getCurrentEnv().getPolicyMgr().existPolicy(policy)) {
+                continue;
+            }
+
+            try {
+                Env.getCurrentEnv().getPolicyMgr().createRowPolicy(rowPolicy);

Review Comment:
   should drop it in cancelInternal



##########
fe/fe-core/src/main/java/org/apache/doris/backup/BackupMeta.java:
##########
@@ -52,18 +52,22 @@ public class BackupMeta implements Writable, 
GsonPostProcessable {
     // resource name -> resource
     @SerializedName(value = "resourceNameMap")
     private Map<String, Resource> resourceNameMap = Maps.newHashMap();
+    // don't need to serialize
+    private BackupGlobalInfo backupGlobalInfo = new BackupGlobalInfo();

Review Comment:
   Why not put it in BackupJobInfo?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to