From 1605b2f0dbde83c2ad89531c01f4ed505df73dca Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Thu, 10 Aug 2023 20:33:59 +0800 Subject: [PATCH] server: remove registered userdata when cleanup an account (#7777) --- .../src/main/java/com/cloud/user/dao/UserDataDao.java | 2 ++ .../src/main/java/com/cloud/user/dao/UserDataDaoImpl.java | 7 +++++++ .../src/main/java/com/cloud/user/AccountManagerImpl.java | 7 +++++++ .../test/java/com/cloud/user/AccountManagerImplTest.java | 1 + .../java/com/cloud/user/AccountManagetImplTestBase.java | 3 +++ 5 files changed, 20 insertions(+) diff --git a/engine/schema/src/main/java/com/cloud/user/dao/UserDataDao.java b/engine/schema/src/main/java/com/cloud/user/dao/UserDataDao.java index f012d41db5e..2733d8d2782 100644 --- a/engine/schema/src/main/java/com/cloud/user/dao/UserDataDao.java +++ b/engine/schema/src/main/java/com/cloud/user/dao/UserDataDao.java @@ -25,4 +25,6 @@ public interface UserDataDao extends GenericDao { public UserDataVO findByName(long accountId, long domainId, String name); + int removeByAccountId(long accountId); + } diff --git a/engine/schema/src/main/java/com/cloud/user/dao/UserDataDaoImpl.java b/engine/schema/src/main/java/com/cloud/user/dao/UserDataDaoImpl.java index 416c4418a57..ded0cd172da 100644 --- a/engine/schema/src/main/java/com/cloud/user/dao/UserDataDaoImpl.java +++ b/engine/schema/src/main/java/com/cloud/user/dao/UserDataDaoImpl.java @@ -63,4 +63,11 @@ public class UserDataDaoImpl extends GenericDaoBase implements return findOneBy(sc); } + + @Override + public int removeByAccountId(long accountId) { + SearchCriteria sc = userdataSearch.create(); + sc.setParameters("accountId", accountId); + return remove(sc); + } } diff --git a/server/src/main/java/com/cloud/user/AccountManagerImpl.java b/server/src/main/java/com/cloud/user/AccountManagerImpl.java index 38b2eddeb60..c20e2fc2abf 100644 --- a/server/src/main/java/com/cloud/user/AccountManagerImpl.java +++ b/server/src/main/java/com/cloud/user/AccountManagerImpl.java @@ -162,6 +162,7 @@ import com.cloud.user.dao.AccountDao; import com.cloud.user.dao.SSHKeyPairDao; import com.cloud.user.dao.UserAccountDao; import com.cloud.user.dao.UserDao; +import com.cloud.user.dao.UserDataDao; import com.cloud.utils.ConstantTimeComparator; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; @@ -292,6 +293,8 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M private GlobalLoadBalancerRuleDao _gslbRuleDao; @Inject private SSHKeyPairDao _sshKeyPairDao; + @Inject + private UserDataDao userDataDao; private List _querySelectors; @@ -1089,6 +1092,10 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M for (SSHKeyPairVO keypair : sshkeypairs) { _sshKeyPairDao.remove(keypair.getId()); } + + // Delete registered UserData + userDataDao.removeByAccountId(accountId); + return true; } catch (Exception ex) { s_logger.warn("Failed to cleanup account " + account + " due to ", ex); diff --git a/server/src/test/java/com/cloud/user/AccountManagerImplTest.java b/server/src/test/java/com/cloud/user/AccountManagerImplTest.java index 71127137a9c..c79b5069c2d 100644 --- a/server/src/test/java/com/cloud/user/AccountManagerImplTest.java +++ b/server/src/test/java/com/cloud/user/AccountManagerImplTest.java @@ -164,6 +164,7 @@ public class AccountManagerImplTest extends AccountManagetImplTestBase { sshkeyList.add(sshkey); Mockito.when(_sshKeyPairDao.listKeyPairs(Mockito.anyLong(), Mockito.anyLong())).thenReturn(sshkeyList); Mockito.when(_sshKeyPairDao.remove(Mockito.anyLong())).thenReturn(true); + Mockito.when(userDataDao.removeByAccountId(Mockito.anyLong())).thenReturn(222); Assert.assertTrue(accountManagerImpl.deleteUserAccount(42l)); // assert that this was a clean delete diff --git a/server/src/test/java/com/cloud/user/AccountManagetImplTestBase.java b/server/src/test/java/com/cloud/user/AccountManagetImplTestBase.java index 7648ec155bc..7bc14a40c12 100644 --- a/server/src/test/java/com/cloud/user/AccountManagetImplTestBase.java +++ b/server/src/test/java/com/cloud/user/AccountManagetImplTestBase.java @@ -73,6 +73,7 @@ import com.cloud.user.dao.AccountDao; import com.cloud.user.dao.SSHKeyPairDao; import com.cloud.user.dao.UserAccountDao; import com.cloud.user.dao.UserDao; +import com.cloud.user.dao.UserDataDao; import com.cloud.vm.VirtualMachineManager; import com.cloud.vm.dao.DomainRouterDao; import com.cloud.vm.dao.InstanceGroupDao; @@ -193,6 +194,8 @@ public class AccountManagetImplTestBase { OrchestrationService _orchSrvc; @Mock SSHKeyPairDao _sshKeyPairDao; + @Mock + UserDataDao userDataDao; @Spy @InjectMocks