bernardodemarco commented on code in PR #13449:
URL: https://github.com/apache/cloudstack/pull/13449#discussion_r3560081273
##########
plugins/database/quota/src/main/java/org/apache/cloudstack/api/command/QuotaCreditsCmd.java:
##########
@@ -42,22 +41,35 @@ public class QuotaCreditsCmd extends BaseCmd {
@Inject
QuotaService _quotaService;
-
-
- @Parameter(name = ApiConstants.ACCOUNT, type = CommandType.STRING,
required = true, description = "Account Id for which quota credits need to be
added")
+ @Deprecated
+ @Parameter(name = ApiConstants.ACCOUNT, type = CommandType.STRING,
description = "Name of the Account for which Quota credits will be added.
Deprecated, please use '" +
+ ApiConstants.ACCOUNT_ID + "' instead.")
private String accountName;
@ACL
- @Parameter(name = ApiConstants.DOMAIN_ID, type = CommandType.UUID,
required = true, entityType = DomainResponse.class, description = "Domain for
which quota credits need to be added")
+ @Deprecated
+ @Parameter(name = ApiConstants.DOMAIN_ID, type = CommandType.UUID,
entityType = DomainResponse.class,
+ description = "Domain of the Account specified by '" +
ApiConstants.ACCOUNT + "' for which Quota credits will be added. " +
+ "Deprecated, please use '" + ApiConstants.ACCOUNT_ID + "'
instead.")
private Long domainId;
- @Parameter(name = ApiConstants.VALUE, type = CommandType.DOUBLE, required
= true, description = "Value of the credits to be added+, subtracted-")
+ @ACL
+ @Parameter(name = ApiConstants.ACCOUNT_ID, type = CommandType.UUID,
entityType = AccountResponse.class,
+ description = "ID of the Account for which Quota credits will be
added. Cannot be specified with '" + ApiConstants.PROJECT_ID + "'.")
+ private Long accountId;
+
+ @ACL
+ @Parameter(name = ApiConstants.PROJECT_ID, type = CommandType.UUID,
entityType = ProjectResponse.class,
+ description = "ID of the Project for which Quota credits will be
added. Cannot be specified with '" + ApiConstants.ACCOUNT_ID + "'.")
+ private Long projectId;
+
+ @Parameter(name = ApiConstants.VALUE, type = CommandType.DOUBLE, required
= true, description = "Amount of credits to be added (in case of a positive
value) or subtracted (in case of a negative value).")
private Double value;
- @Parameter(name = "min_balance", type = CommandType.DOUBLE, required =
false, description = "Minimum balance threshold of the Account")
+ @Parameter(name = "min_balance", type = CommandType.DOUBLE, description =
"An email will be sent to the Account when the Quota credits get below this
threshold.")
private Double minBalance;
- @Parameter(name = "quota_enforce", type = CommandType.BOOLEAN, required =
false, description = "Account for which quota enforce is set to false will not
be locked when there is no credit balance")
+ @Parameter(name = "quota_enforce", type = CommandType.BOOLEAN, description
= "Whether to lock the Account when Quota credits are below zero.")
Review Comment:
@winterhazel, I've run into an issue when using the `quota_enforce`
parameter, when ACS tries to lock the target account. When the workflow hits
the `lockAccount` method, it tries to emit this following `ActionEvent`:
`@ActionEvent(eventType = EventTypes.EVENT_ACCOUNT_DISABLE, eventDescription
= "locking account", async = true)`
However, ACS tries to persist the event into the `event` table in the
`cloud_usage` DB, and not in the `cloud` DB:
<details>
<summary>Logs</summary>
```
2026-07-20 14:14:47,626 INFO [o.a.c.a.r.QuotaResponseBuilderImpl]
(qtp1800976873-18:[ctx-b6d8b4fd, ctx-73693395]) (logid:3b6d1a96) Locking
Account [client-x] due to negative balance.
2026-07-20 14:14:47,627 ERROR [c.c.e.d.EventDaoImpl]
(qtp1800976873-18:[ctx-b6d8b4fd, ctx-73693395]) (logid:3b6d1a96) DB Exception
on: HikariProxyPreparedStatement@1721340663 wrapping
com.mysql.cj.jdbc.ClientPreparedStatement: INSERT INTO event (event.type,
event.state, event.description, event.created, event.user_id, event.account_id,
event.domain_id, event.resource_id, event.resource_type, event.level,
event.start_id, event.parameters, event.uuid, event.archived, event.display)
VALUES (x'4143434f554e542e44495341424c45', 'Started',
x'4c6f636b696e67206163636f756e74', '2026-07-20 14:14:47', 2, 2, 1, 0,
x'4163636f756e74', x'494e464f', 0, NULL,
x'66323063643436382d393231362d343935642d626436332d396138643663373131383035', 0,
1) java.sql.SQLSyntaxErrorException: Table 'cloud_usage.event' doesn't exist
at
com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:112)
at
com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:113)
at
com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:938)
at
com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1106)
at
com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1045)
at
com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1369)
at
com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:1030)
at
com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61)
at
com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java)
at com.cloud.utils.db.GenericDaoBase.persist(GenericDaoBase.java:1639)
at jdk.internal.reflect.GeneratedMethodAccessor12.invoke(Unknown Source)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:569)
at
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at
com.cloud.utils.db.TransactionContextInterceptor.invoke(TransactionContextInterceptor.java:34)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
at
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)
at jdk.proxy3/jdk.proxy3.$Proxy199.persist(Unknown Source)
at
com.cloud.event.ActionEventUtils.persistActionEvent(ActionEventUtils.java:204)
at
com.cloud.event.ActionEventUtils.onStartedActionEvent(ActionEventUtils.java:145)
at
com.cloud.event.ActionEventUtils.onStartedActionEventFromContext(ActionEventUtils.java:137)
at
com.cloud.event.ActionEventInterceptor.interceptStart(ActionEventInterceptor.java:79)
at
com.cloud.event.ActionEventInterceptor.invoke(ActionEventInterceptor.java:50)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
at
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)
at jdk.proxy3/jdk.proxy3.$Proxy104.lockAccount(Unknown Source)
at
org.apache.cloudstack.api.response.QuotaResponseBuilderImpl.lockOrUnlockAccountIfRequired(QuotaResponseBuilderImpl.java:771)
at
org.apache.cloudstack.api.response.QuotaResponseBuilderImpl.persistQuotaCredits(QuotaResponseBuilderImpl.java:750)
at
org.apache.cloudstack.api.response.QuotaResponseBuilderImpl.lambda$addQuotaCredits$6(QuotaResponseBuilderImpl.java:720)
at com.cloud.utils.db.Transaction$3.doInTransaction(Transaction.java:72)
at com.cloud.utils.db.Transaction.execute(Transaction.java:60)
at com.cloud.utils.db.Transaction.execute(Transaction.java:69)
at
org.apache.cloudstack.api.response.QuotaResponseBuilderImpl.addQuotaCredits(QuotaResponseBuilderImpl.java:720)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:569)
at
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)
at jdk.proxy3/jdk.proxy3.$Proxy558.addQuotaCredits(Unknown Source)
at
org.apache.cloudstack.api.command.QuotaCreditsCmd.execute(QuotaCreditsCmd.java:129)
at com.cloud.api.ApiDispatcher.dispatch(ApiDispatcher.java:173)
at com.cloud.api.ApiServer.queueCommand(ApiServer.java:820)
at com.cloud.api.ApiServer.handleRequest(ApiServer.java:705)
at com.cloud.api.ApiServlet.processRequestInContext(ApiServlet.java:414)
at com.cloud.api.ApiServlet$1.run(ApiServlet.java:191)
at
org.apache.cloudstack.managed.context.impl.DefaultManagedContext$1.call(DefaultManagedContext.java:56)
at
org.apache.cloudstack.managed.context.impl.DefaultManagedContext.callWithContext(DefaultManagedContext.java:103)
at
org.apache.cloudstack.managed.context.impl.DefaultManagedContext.runWithContext(DefaultManagedContext.java:53)
at com.cloud.api.ApiServlet.processRequest(ApiServlet.java:188)
at com.cloud.api.ApiServlet.doGet(ApiServlet.java:142)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:645)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:750)
at
org.eclipse.jetty.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1450)
at
org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799)
at
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:554)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600)
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
at
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
at
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
at
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)
at
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
at
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505)
at
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
at
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
at
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at
org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:772)
at
org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.Server.handle(Server.java:516)
at
org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
at
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
at
org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
at
org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
at
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
at
org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
at java.base/java.lang.Thread.run(Thread.java:840)
2026-07-20 14:14:47,627 DEBUG [c.c.u.d.T.Transaction]
(qtp1800976873-18:[ctx-b6d8b4fd, ctx-73693395]) (logid:3b6d1a96) Rolling back
the transaction: Time = 3 Name = tx-1235; called by
-TransactionLegacy.rollback:902-TransactionLegacy.removeUpTo:845-TransactionLegacy.close:669-TransactionContextInterceptor.invoke:36-ReflectiveMethodInvocation.proceed:175-ExposeInvocationInterceptor.invoke:97-ReflectiveMethodInvocation.proceed:186-JdkDynamicAopProxy.invoke:215-$Proxy199.persist:-1-ActionEventUtils.persistActionEvent:204-ActionEventUtils.onStartedActionEvent:145-ActionEventUtils.onStartedActionEventFromContext:137
2026-07-20 14:14:47,628 ERROR [c.c.e.d.EventDaoImpl]
(qtp1800976873-18:[ctx-b6d8b4fd, ctx-73693395]) (logid:3b6d1a96) DB Exception
on: HikariProxyPreparedStatement@187721901 wrapping
com.mysql.cj.jdbc.ClientPreparedStatement: INSERT INTO event (event.type,
event.state, event.description, event.created, event.user_id, event.account_id,
event.domain_id, event.resource_id, event.resource_type, event.level,
event.start_id, event.parameters, event.uuid, event.archived, event.display)
VALUES (x'4143434f554e542e44495341424c45', 'Completed',
x'4572726f72207768696c65206c6f636b696e67206163636f756e74', '2026-07-20
14:14:47', 2, 2, 1, 0, x'4163636f756e74', x'4552524f52', 0, NULL,
x'32666433376233372d386439332d343363632d396237362d643637613365393265656466', 0,
1) java.sql.SQLSyntaxErrorException: Table 'cloud_usage.event' doesn't exist
at
com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:112)
at
com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:113)
at
com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:938)
at
com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1106)
at
com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1045)
at
com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1369)
at
com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:1030)
at
com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61)
at
com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java)
at com.cloud.utils.db.GenericDaoBase.persist(GenericDaoBase.java:1639)
at jdk.internal.reflect.GeneratedMethodAccessor12.invoke(Unknown Source)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:569)
at
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at
com.cloud.utils.db.TransactionContextInterceptor.invoke(TransactionContextInterceptor.java:34)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
at
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)
at jdk.proxy3/jdk.proxy3.$Proxy199.persist(Unknown Source)
at
com.cloud.event.ActionEventUtils.persistActionEvent(ActionEventUtils.java:204)
at
com.cloud.event.ActionEventUtils.onCompletedActionEvent(ActionEventUtils.java:159)
at
com.cloud.event.ActionEventInterceptor.interceptException(ActionEventInterceptor.java:138)
at
com.cloud.event.ActionEventInterceptor.invoke(ActionEventInterceptor.java:60)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
at
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)
at jdk.proxy3/jdk.proxy3.$Proxy104.lockAccount(Unknown Source)
at
org.apache.cloudstack.api.response.QuotaResponseBuilderImpl.lockOrUnlockAccountIfRequired(QuotaResponseBuilderImpl.java:771)
at
org.apache.cloudstack.api.response.QuotaResponseBuilderImpl.persistQuotaCredits(QuotaResponseBuilderImpl.java:750)
at
org.apache.cloudstack.api.response.QuotaResponseBuilderImpl.lambda$addQuotaCredits$6(QuotaResponseBuilderImpl.java:720)
at com.cloud.utils.db.Transaction$3.doInTransaction(Transaction.java:72)
at com.cloud.utils.db.Transaction.execute(Transaction.java:60)
at com.cloud.utils.db.Transaction.execute(Transaction.java:69)
at
org.apache.cloudstack.api.response.QuotaResponseBuilderImpl.addQuotaCredits(QuotaResponseBuilderImpl.java:720)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:569)
at
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)
at jdk.proxy3/jdk.proxy3.$Proxy558.addQuotaCredits(Unknown Source)
at
org.apache.cloudstack.api.command.QuotaCreditsCmd.execute(QuotaCreditsCmd.java:129)
at com.cloud.api.ApiDispatcher.dispatch(ApiDispatcher.java:173)
at com.cloud.api.ApiServer.queueCommand(ApiServer.java:820)
at com.cloud.api.ApiServer.handleRequest(ApiServer.java:705)
at com.cloud.api.ApiServlet.processRequestInContext(ApiServlet.java:414)
at com.cloud.api.ApiServlet$1.run(ApiServlet.java:191)
at
org.apache.cloudstack.managed.context.impl.DefaultManagedContext$1.call(DefaultManagedContext.java:56)
at
org.apache.cloudstack.managed.context.impl.DefaultManagedContext.callWithContext(DefaultManagedContext.java:103)
at
org.apache.cloudstack.managed.context.impl.DefaultManagedContext.runWithContext(DefaultManagedContext.java:53)
at com.cloud.api.ApiServlet.processRequest(ApiServlet.java:188)
at com.cloud.api.ApiServlet.doGet(ApiServlet.java:142)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:645)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:750)
at
org.eclipse.jetty.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1450)
at
org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799)
at
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:554)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600)
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
at
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
at
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
at
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)
at
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
at
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505)
at
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
at
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
at
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at
org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:772)
at
org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.Server.handle(Server.java:516)
at
org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
at
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
at
org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
at
org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
at
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
at
org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
at java.base/java.lang.Thread.run(Thread.java:840)
2026-07-20 14:14:47,628 DEBUG [c.c.u.d.T.Transaction]
(qtp1800976873-18:[ctx-b6d8b4fd, ctx-73693395]) (logid:3b6d1a96) Rolling back
the transaction: Time = 1 Name = tx-1235; called by
-TransactionLegacy.rollback:902-TransactionLegacy.removeUpTo:845-TransactionLegacy.close:669-TransactionContextInterceptor.invoke:36-ReflectiveMethodInvocation.proceed:175-ExposeInvocationInterceptor.invoke:97-ReflectiveMethodInvocation.proceed:186-JdkDynamicAopProxy.invoke:215-$Proxy199.persist:-1-ActionEventUtils.persistActionEvent:204-ActionEventUtils.onCompletedActionEvent:159-ActionEventInterceptor.interceptException:138
2026-07-20 14:14:47,628 ERROR [c.c.a.ApiServer]
(qtp1800976873-18:[ctx-b6d8b4fd, ctx-73693395]) (logid:3b6d1a96) unhandled
exception executing api command: [Ljava.lang.String;@39982175
com.cloud.utils.exception.CloudRuntimeException: Unable to persist on DB, due
to: Table 'cloud_usage.event' doesn't exist
at com.cloud.utils.db.GenericDaoBase.persist(GenericDaoBase.java:1679)
at jdk.internal.reflect.GeneratedMethodAccessor12.invoke(Unknown Source)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:569)
at
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at
com.cloud.utils.db.TransactionContextInterceptor.invoke(TransactionContextInterceptor.java:34)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
at
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)
at jdk.proxy3/jdk.proxy3.$Proxy199.persist(Unknown Source)
at
com.cloud.event.ActionEventUtils.persistActionEvent(ActionEventUtils.java:204)
at
com.cloud.event.ActionEventUtils.onCompletedActionEvent(ActionEventUtils.java:159)
at
com.cloud.event.ActionEventInterceptor.interceptException(ActionEventInterceptor.java:138)
at
com.cloud.event.ActionEventInterceptor.invoke(ActionEventInterceptor.java:60)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
at
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)
at jdk.proxy3/jdk.proxy3.$Proxy104.lockAccount(Unknown Source)
at
org.apache.cloudstack.api.response.QuotaResponseBuilderImpl.lockOrUnlockAccountIfRequired(QuotaResponseBuilderImpl.java:771)
at
org.apache.cloudstack.api.response.QuotaResponseBuilderImpl.persistQuotaCredits(QuotaResponseBuilderImpl.java:750)
at
org.apache.cloudstack.api.response.QuotaResponseBuilderImpl.lambda$addQuotaCredits$6(QuotaResponseBuilderImpl.java:720)
at com.cloud.utils.db.Transaction$3.doInTransaction(Transaction.java:72)
at com.cloud.utils.db.Transaction.execute(Transaction.java:60)
at com.cloud.utils.db.Transaction.execute(Transaction.java:69)
at
org.apache.cloudstack.api.response.QuotaResponseBuilderImpl.addQuotaCredits(QuotaResponseBuilderImpl.java:720)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:569)
at
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)
at jdk.proxy3/jdk.proxy3.$Proxy558.addQuotaCredits(Unknown Source)
at
org.apache.cloudstack.api.command.QuotaCreditsCmd.execute(QuotaCreditsCmd.java:129)
at com.cloud.api.ApiDispatcher.dispatch(ApiDispatcher.java:173)
at com.cloud.api.ApiServer.queueCommand(ApiServer.java:820)
at com.cloud.api.ApiServer.handleRequest(ApiServer.java:705)
at com.cloud.api.ApiServlet.processRequestInContext(ApiServlet.java:414)
at com.cloud.api.ApiServlet$1.run(ApiServlet.java:191)
at
org.apache.cloudstack.managed.context.impl.DefaultManagedContext$1.call(DefaultManagedContext.java:56)
at
org.apache.cloudstack.managed.context.impl.DefaultManagedContext.callWithContext(DefaultManagedContext.java:103)
at
org.apache.cloudstack.managed.context.impl.DefaultManagedContext.runWithContext(DefaultManagedContext.java:53)
at com.cloud.api.ApiServlet.processRequest(ApiServlet.java:188)
at com.cloud.api.ApiServlet.doGet(ApiServlet.java:142)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:645)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:750)
at
org.eclipse.jetty.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1450)
at
org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799)
at
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:554)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600)
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
at
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
at
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
at
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)
at
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
at
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505)
at
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
at
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
at
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at
org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:772)
at
org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.Server.handle(Server.java:516)
at
org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
at
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
at
org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
at
org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
at
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
at
org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
at java.base/java.lang.Thread.run(Thread.java:840)
2026-07-20 14:14:47,629 DEBUG [c.c.a.ApiServlet]
(qtp1800976873-18:[ctx-b6d8b4fd, ctx-73693395]) (logid:3b6d1a96) ===END===
192.168.122.1 -- GET
value=2"a_enforce=true&account=client-x&domainid=bd06d390-ecbc-11f0-8ad4-0e2ebc784cf3&command=quotaCredits&response=json&
```
</details>
--
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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]