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();