You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cloudstack.apache.org by "Sanjeev N (JIRA)" <ji...@apache.org> on 2016/05/17 12:35:12 UTC

[jira] [Created] (CLOUDSTACK-9380) listDomains API returns NPE if there is a failure in deleting domains

Sanjeev N created CLOUDSTACK-9380:
-------------------------------------

             Summary: listDomains API returns NPE if there is a failure in deleting domains
                 Key: CLOUDSTACK-9380
                 URL: https://issues.apache.org/jira/browse/CLOUDSTACK-9380
             Project: CloudStack
          Issue Type: Bug
      Security Level: Public (Anyone can view this level - this is the default.)
          Components: Management Server
    Affects Versions: 4.9.0
         Environment: Latest build from master
            Reporter: Sanjeev N
            Priority: Critical


listDomains API returns NPE if there is a failure in deleting domains

Steps to Reproduce:
================
1.Create few domains under root domain and create one or two accounts in each domain
2.Create few vms, volumes, snapshots with those accounts.
3.Now delete the domains and for one of the domains simulate the domain deletion failure
4.Try to list the domains using listDomains api without any domain id paramter

Result:
======
listDomains API returns error code 530 and in the management server log we see following NPE:
2016-05-16 08:53:09,273 ERROR [c.c.a.ApiServer] (qtp237306958-12297:ctx-8f28bbf4 ctx-fdb614d0 ctx-6466fb85) (logid:d17482a8) unhandled exception executing api command: [Ljava.lang.String;@652d471e
java.lang.NullPointerException
        at com.cloud.api.query.dao.DomainJoinDaoImpl.setResourceLimits(DomainJoinDaoImpl.java:113)
        at com.cloud.api.query.dao.DomainJoinDaoImpl.newDomainResponse(DomainJoinDaoImpl.java:76)
        at sun.reflect.GeneratedMethodAccessor351.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
        at com.cloud.utils.db.TransactionContextInterceptor.invoke(TransactionContextInterceptor.java:34)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:161)
        at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:91)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
        at com.sun.proxy.$Proxy272.newDomainResponse(Unknown Source)
        at com.cloud.api.ApiDBUtils.newDomainResponse(ApiDBUtils.java:1834)
        at com.cloud.api.query.ViewResponseHelper.createDomainResponse(ViewResponseHelper.java:354)
        at com.cloud.api.query.QueryManagerImpl.searchForDomains(QueryManagerImpl.java:1880)
        at org.apache.cloudstack.api.command.admin.domain.ListDomainsCmd.execute(ListDomainsCmd.java:87)
        at com.cloud.api.ApiDispatcher.dispatch(ApiDispatcher.java:150)
        at com.cloud.api.ApiServer.queueCommand(ApiServer.java:705)
        at com.cloud.api.ApiServer.handleRequest(ApiServer.java:529)
        at com.cloud.api.ApiServlet.processRequestInContext(ApiServlet.java:299)
        at com.cloud.api.ApiServlet$1.run(ApiServlet.java:129)
        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:126)
        at com.cloud.api.ApiServlet.doGet(ApiServlet.java:88)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
        at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812)
        at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:587)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
        at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577)
        at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)
        at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
        at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
        at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
        at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
        at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:215)
        at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:110)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
        at org.eclipse.jetty.server.Server.handle(Server.java:499)
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)
        at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
        at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
        at java.lang.Thread.run(Thread.java:744)
2016-05-16 08:53:09,276 DEBUG [c.c.a.ApiServlet] (qtp237306958-12297:ctx-8f28bbf4 ctx-fdb614d0 ctx-6466fb85) (logid:d17482a8) ===END===  172.16.88.7 -- GET  apiKey=I1Vj6dA8tmVTJopVVZlgR7y6LU92d_AeUaXxbdbZhpJgu4BJ2MpfWD2xE2b8ZYd70qPA10_rDYucnQVmHNJHZw&command=listDomains&signature=gfujxqFCCJZHbDVx%2Bm8VsakdE4g%3D&response=json


Observations:
============
When there was a failure in deleting the domain, resouce_count table didn't have any entries for that domain id. So count filed for all the resources in domain_view table was set to NULL. This could be the reason for listDomains to return NPE.

mysql> select * from domain where id=70;
+----+--------+-----------+--------------------------------------+-------+-------------+-------+-------------+----------------+---------+--------+----------------+--------+
| id | parent | name      | uuid                                 | owner | path        | level | child_count | next_child_seq | removed | state  | network_domain | type   |
+----+--------+-----------+--------------------------------------+-------+-------------+-------+-------------+----------------+---------+--------+----------------+--------+
| 70 |      1 | D1-UE6QW6 | 612da7a8-0bff-4792-9dcd-08d14d19515b |     2 | /D1-UE6QW6/ |     1 |           1 |              3 | NULL    | Active | NULL           | Normal |
+----+--------+-----------+--------------------------------------+-------+-------------+-------+-------------+----------------+---------+--------+----------------+--------+
1 row in set (0.00 sec)

mysql> select * from domain_view where id=70\G
*************************** 1. row ***************************
                   id: 70
               parent: 1
                 name: D1-UE6QW6
                 uuid: 612da7a8-0bff-4792-9dcd-08d14d19515b
                owner: 2
                 path: /D1-UE6QW6/
                level: 1
          child_count: 1
       next_child_seq: 3
              removed: NULL
                state: Active
       network_domain: NULL
                 type: Normal
              vmLimit: NULL
              vmTotal: NULL
              ipLimit: NULL
              ipTotal: NULL
          volumeLimit: NULL
          volumeTotal: NULL
        snapshotLimit: NULL
        snapshotTotal: NULL
        templateLimit: NULL
        templateTotal: NULL
             vpcLimit: NULL
             vpcTotal: NULL
         projectLimit: NULL
         projectTotal: NULL
         networkLimit: NULL
         networkTotal: NULL
             cpuLimit: NULL
             cpuTotal: NULL
          memoryLimit: NULL
          memoryTotal: NULL
  primaryStorageLimit: NULL
  primaryStorageTotal: NULL
secondaryStorageLimit: NULL
secondaryStorageTotal: NULL
1 row in set (0.00 sec)

mysql> select * from resource_count where domain_id=70;
Empty set (0.00 sec)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)