This is an automated email from the ASF dual-hosted git repository.

dahn pushed a commit to branch 4.19
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/4.19 by this push:
     new 674129cd588 Update project account for all the events with project 
account owner, except for create project event (#9572)
674129cd588 is described below

commit 674129cd588e9be67923fc06d652170f405f2d07
Author: Suresh Kumar Anaparti <[email protected]>
AuthorDate: Tue Aug 27 16:07:28 2024 +0530

    Update project account for all the events with project account owner, 
except for create project event (#9572)
---
 .../api/command/user/account/AddUserToProjectCmd.java    |  2 +-
 .../command/user/account/DeleteUserFromProjectCmd.java   |  1 -
 .../java/com/cloud/event/ActionEventInterceptor.java     |  4 ++--
 .../src/main/java/com/cloud/event/ActionEventUtils.java  | 11 +++++++++--
 .../main/java/com/cloud/projects/ProjectManagerImpl.java | 16 ++++++++--------
 5 files changed, 20 insertions(+), 14 deletions(-)

diff --git 
a/api/src/main/java/org/apache/cloudstack/api/command/user/account/AddUserToProjectCmd.java
 
b/api/src/main/java/org/apache/cloudstack/api/command/user/account/AddUserToProjectCmd.java
index d38ae057f05..9cd845c774c 100644
--- 
a/api/src/main/java/org/apache/cloudstack/api/command/user/account/AddUserToProjectCmd.java
+++ 
b/api/src/main/java/org/apache/cloudstack/api/command/user/account/AddUserToProjectCmd.java
@@ -103,7 +103,7 @@ public class AddUserToProjectCmd extends BaseAsyncCmd {
 
     @Override
     public String getEventDescription() {
-        return "Adding user "+getUsername()+" to Project "+getProjectId();
+        return "Adding user " + getUsername() + " to project: " + 
getProjectId();
     }
 
     /////////////////////////////////////////////////////
diff --git 
a/api/src/main/java/org/apache/cloudstack/api/command/user/account/DeleteUserFromProjectCmd.java
 
b/api/src/main/java/org/apache/cloudstack/api/command/user/account/DeleteUserFromProjectCmd.java
index 596fb876008..fbcffb7332c 100644
--- 
a/api/src/main/java/org/apache/cloudstack/api/command/user/account/DeleteUserFromProjectCmd.java
+++ 
b/api/src/main/java/org/apache/cloudstack/api/command/user/account/DeleteUserFromProjectCmd.java
@@ -83,7 +83,6 @@ public class DeleteUserFromProjectCmd extends BaseAsyncCmd {
         return "Removing user " + userId + " from project: " + projectId;
     }
 
-
     @Override
     public long getEntityOwnerId() {
         Project project = _projectService.getProject(projectId);
diff --git a/server/src/main/java/com/cloud/event/ActionEventInterceptor.java 
b/server/src/main/java/com/cloud/event/ActionEventInterceptor.java
index ee025c825f5..9554ae34cb6 100644
--- a/server/src/main/java/com/cloud/event/ActionEventInterceptor.java
+++ b/server/src/main/java/com/cloud/event/ActionEventInterceptor.java
@@ -88,13 +88,13 @@ public class ActionEventInterceptor implements 
ComponentMethodInterceptor, Metho
         for (ActionEvent actionEvent : getActionEvents(method)) {
             CallContext ctx = CallContext.current();
             long userId = ctx.getCallingUserId();
-            long accountId = ctx.getProject() != null ? 
ctx.getProject().getProjectAccountId() : ctx.getCallingAccountId();    //This 
should be the entity owner id rather than the Calling User Account Id.
             long startEventId = ctx.getStartEventId();
             String eventDescription = getEventDescription(actionEvent, ctx);
             Long eventResourceId = getEventResourceId(actionEvent, ctx);
             String eventResourceType = getEventResourceType(actionEvent, ctx);
             String eventType = getEventType(actionEvent, ctx);
             boolean isEventDisplayEnabled = ctx.isEventDisplayEnabled();
+            long accountId = ActionEventUtils.getOwnerAccountId(ctx, 
eventType, ctx.getCallingAccountId());
 
             if (eventType.equals(""))
                 return;
@@ -118,13 +118,13 @@ public class ActionEventInterceptor implements 
ComponentMethodInterceptor, Metho
         for (ActionEvent actionEvent : getActionEvents(method)) {
             CallContext ctx = CallContext.current();
             long userId = ctx.getCallingUserId();
-            long accountId = ctx.getCallingAccountId();
             long startEventId = ctx.getStartEventId();
             String eventDescription = getEventDescription(actionEvent, ctx);
             Long eventResourceId = getEventResourceId(actionEvent, ctx);
             String eventResourceType = getEventResourceType(actionEvent, ctx);
             String eventType = getEventType(actionEvent, ctx);
             boolean isEventDisplayEnabled = ctx.isEventDisplayEnabled();
+            long accountId = ActionEventUtils.getOwnerAccountId(ctx, 
eventType, ctx.getCallingAccountId());
 
             if (eventType.equals(""))
                 return;
diff --git a/server/src/main/java/com/cloud/event/ActionEventUtils.java 
b/server/src/main/java/com/cloud/event/ActionEventUtils.java
index 36461d20e42..87dd4ef8af9 100644
--- a/server/src/main/java/com/cloud/event/ActionEventUtils.java
+++ b/server/src/main/java/com/cloud/event/ActionEventUtils.java
@@ -22,6 +22,7 @@ import java.lang.reflect.Method;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import javax.annotation.PostConstruct;
@@ -110,6 +111,8 @@ public class ActionEventUtils {
      */
     public static Long onScheduledActionEvent(Long userId, Long accountId, 
String type, String description, Long resourceId, String resourceType, boolean 
eventDisplayEnabled, long startEventId) {
         Ternary<Long, String, String> resourceDetails = 
getResourceDetails(resourceId, resourceType, type);
+        CallContext ctx = CallContext.current();
+        accountId = getOwnerAccountId(ctx, type, accountId);
         publishOnEventBus(userId, accountId, 
EventCategory.ACTION_EVENT.getName(), type, 
com.cloud.event.Event.State.Scheduled, description, resourceDetails.second(), 
resourceDetails.third());
         Event event = persistActionEvent(userId, accountId, null, null, type, 
Event.State.Scheduled, eventDisplayEnabled, description, 
resourceDetails.first(), resourceDetails.third(), startEventId);
         return event.getId();
@@ -123,7 +126,7 @@ public class ActionEventUtils {
     public static void onStartedActionEventFromContext(String eventType, 
String eventDescription, Long resourceId, String resourceType, boolean 
eventDisplayEnabled) {
         CallContext ctx = CallContext.current();
         long userId = ctx.getCallingUserId();
-        long accountId = ctx.getProject() != null ? 
ctx.getProject().getProjectAccountId() : ctx.getCallingAccountId();    //This 
should be the entity owner id rather than the Calling User Account Id.
+        long accountId = getOwnerAccountId(ctx, eventType, 
ctx.getCallingAccountId());
         long startEventId = ctx.getStartEventId();
 
         if (!eventType.equals(""))
@@ -393,7 +396,11 @@ public class ActionEventUtils {
                 s_logger.trace("Caught exception while populating first class 
entities for event bus, moving on");
             }
         }
-
     }
 
+    public static long getOwnerAccountId(CallContext ctx, String eventType, 
long callingAccountId) {
+        List<String> mainProjectEvents = 
List.of(EventTypes.EVENT_PROJECT_CREATE, EventTypes.EVENT_PROJECT_UPDATE, 
EventTypes.EVENT_PROJECT_DELETE);
+        long accountId = ctx.getProject() != null && 
!mainProjectEvents.stream().anyMatch(eventType::equalsIgnoreCase) ? 
ctx.getProject().getProjectAccountId() : callingAccountId;    //This should be 
the entity owner id rather than the Calling User Account Id.
+        return accountId;
+    }
 }
diff --git a/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java 
b/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java
index 19776d4993f..abdd48cd4ae 100644
--- a/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java
+++ b/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java
@@ -279,16 +279,16 @@ public class ProjectManagerImpl extends ManagerBase 
implements ProjectManager, C
                 assignAccountToProject(project, ownerFinal.getId(), 
ProjectAccount.Role.Admin,
                         
Optional.ofNullable(finalUser).map(User::getId).orElse(null),  null);
 
-        if (project != null) {
-            CallContext.current().setEventDetails("Project id=" + 
project.getId());
-            CallContext.current().putContextParameter(Project.class, 
project.getUuid());
-        }
+                if (project != null) {
+                    CallContext.current().setEventDetails("Project id=" + 
project.getId());
+                    CallContext.current().putContextParameter(Project.class, 
project.getUuid());
+                }
 
-        //Increment resource count
+                //Increment resource count
                 _resourceLimitMgr.incrementResourceCount(ownerFinal.getId(), 
ResourceType.project);
 
-        return project;
-    }
+                return project;
+            }
         });
 
         messageBus.publish(_name, 
ProjectManager.MESSAGE_CREATE_TUNGSTEN_PROJECT_EVENT, PublishScope.LOCAL, 
project);
@@ -1275,7 +1275,7 @@ public class ProjectManagerImpl extends ManagerBase 
implements ProjectManager, C
     }
 
     @Override
-    @ActionEvent(eventType = EventTypes.EVENT_PROJECT_ACTIVATE, 
eventDescription = "activating project")
+    @ActionEvent(eventType = EventTypes.EVENT_PROJECT_ACTIVATE, 
eventDescription = "activating project", async = true)
     @DB
     public Project activateProject(final long projectId) {
         Account caller = CallContext.current().getCallingAccount();

Reply via email to