Hey Wei,
That sounds about right.  I will have a look on our side and see what I can
come up with.

Thanks,

*Will STEVENS*
Lead Developer

<https://goo.gl/NYZ8KK>

On Thu, Apr 13, 2017 at 3:48 PM, Wei ZHOU <ustcweiz...@gmail.com> wrote:

> Hi Will,
>
> I checked our platforms. We also have this issue. After investigation, I
> found a public ip was not released in an account removal in 2015 which
> should not happen.
>
> If you execute the following query, you should get empty result. If not,
> then something went wrong in the past.
> select * from user_ip_address uia join account on uia.account_id=
> account.id
> where account.removed is not null;
>
> -Wei
>
>
> 2017-04-13 18:36 GMT+02:00 Will Stevens <wstev...@cloudops.com>:
>
> > The problem with that is that we are using the 'projectid=-1' to search
> > across all projects.
> >
> > I am not sure how a project gets into that state, but must be possible
> > through the API since that is our interface with ACS.
> >
> > We should be more defensive in this api call though because an end user
> api
> > call should never be able to throw a null pointer error.
> >
> > My guess is that we should do a null check on the 'project' here before
> we
> > try to use it.
> > https://github.com/apache/cloudstack/blob/master/server/
> src/com/cloud/api/
> > ApiResponseHelper.java#L2303
> >
> > *Will STEVENS*
> > Lead Developer
> >
> > <https://goo.gl/NYZ8KK>
> >
> > On Thu, Apr 13, 2017 at 12:17 PM, Rohit Yadav <rohit.ya...@shapeblue.com
> >
> > wrote:
> >
> > > Hi Will,
> > >
> > >
> > > I tested this against a local KVM-based 4.9.2.0 environment and I could
> > > not reproduce the error. I see this in api logs:
> > >
> > >
> > > ==> apilog.log <==
> > > 2017-04-13 18:16:30,340 INFO  [a.c.c.a.ApiServer]
> > > (catalina-exec-5:ctx-2b0966b8 ctx-2760e856) (logid:7439bdc4) (userId=2
> > > accountId=2 sessionId=6183303731812D5EC32B1B37445AEC60) 192.168.1.58
> --
> > > GET signatureversion=3&sessionkey=H6E-LUsWpVY6WT_mJzz7qjGAdxg&
> > > command=listPublicIpAddresses&projectid=-1&expires=2017-04-
> > > 13T16%3A26%3A30%2B0000&response=json&listall=true 200 {"
> > > listpublicipaddressesresponse":{}}
> > >
> > > I think proper way to fix this would be to check that project object is
> > > not null before calling any methods on it.
> > >
> > >
> > > Regards.
> > >
> > > ________________________________
> > > From: Will Stevens <sw...@apache.org>
> > > Sent: 13 April 2017 21:38:34
> > > To: dev@cloudstack.apache.org
> > > Subject: Null Pointer listing public ips for a project
> > >
> > > Hey All,
> > > Looking for the best way to resolve this issue.
> > >
> > > My line numbers in the stack trace will not match the line numbers I
> > > reference because I am running 4.7 and I am linking the master files.
> > From
> > > what I can tell by reviewing the code, this has not been fixed in
> master.
> > > So here goes.
> > >
> > > When making a call to listPublicIpAddresses [1] with 'listall=true' and
> > > 'projectid=-1', I get the following stacktrace.
> > >
> > > java.lang.NullPointerException
> > > at
> > > com.cloud.api.ApiResponseHelper.populateOwner(
> > ApiResponseHelper.java:2258)
> > > at
> > > com.cloud.api.ApiResponseHelper.createIPAddressResponse(
> > > ApiResponseHelper.java:718)
> > > at
> > > org.apache.cloudstack.api.command.admin.address.
> > > ListPublicIpAddressesCmdByAdmin.execute(ListPublicIpAddressesCmdByAdmi
> > > n.java:44)
> > > at com.cloud.api.ApiDispatcher.dispatch(ApiDispatcher.java:150)
> > > at com.cloud.api.ApiServer.queueCommand(ApiServer.java:698)
> > > at com.cloud.api.ApiServer.handleRequest(ApiServer.java:529)
> > > at com.cloud.api.ApiServlet.processRequestInContext(
> ApiServlet.java:297)
> > > at com.cloud.api.ApiServlet$1.run(ApiServlet.java:127)
> > > 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:124)
> > > at com.cloud.api.ApiServlet.doGet(ApiServlet.java:86)
> > > at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
> > > at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
> > > at
> > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> > > ApplicationFilterChain.java:290)
> > > at
> > > org.apache.catalina.core.ApplicationFilterChain.doFilter(
> > > ApplicationFilterChain.java:206)
> > > at
> > > org.apache.catalina.core.StandardWrapperValve.invoke(
> > > StandardWrapperValve.java:233)
> > > at
> > > org.apache.catalina.core.StandardContextValve.invoke(
> > > StandardContextValve.java:191)
> > > at
> > > org.apache.catalina.core.StandardHostValve.invoke(
> > > StandardHostValve.java:127)
> > > at
> > > org.apache.catalina.valves.ErrorReportValve.invoke(
> > > ErrorReportValve.java:102)
> > > at org.apache.catalina.valves.AccessLogValve.invoke(
> > > AccessLogValve.java:555)
> > > at
> > > org.apache.catalina.core.StandardEngineValve.invoke(
> > > StandardEngineValve.java:109)
> > > at
> > > org.apache.catalina.connector.CoyoteAdapter.service(
> > > CoyoteAdapter.java:299)
> > > at
> > > org.apache.coyote.http11.Http11NioProcessor.process(
> > > Http11NioProcessor.java:889)
> > > at
> > > org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.
> > > process(Http11NioProtocol.java:732)
> > > at
> > > org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.
> > > run(NioEndpoint.java:2274)
> > > at
> > > java.util.concurrent.ThreadPoolExecutor.runWorker(
> > > ThreadPoolExecutor.java:1145)
> > > at
> > > java.util.concurrent.ThreadPoolExecutor$Worker.run(
> > > ThreadPoolExecutor.java:615)
> > > at java.lang.Thread.run(Thread.java:745)
> > >
> > >
> > > The stack trace comes from this code [2]:
> > > Project project = ApiDBUtils.findProjectByProjectAccountId(
> > > account.getId());
> > > response.setProjectId(project.getUuid());  // <-- Null Pointer
> > > response.setProjectName(project.getName());
> > >
> > > In this case, the flow is coming from [3], which comes from [4].
> > >
> > > What would be the right way to fix this issue?
> > >
> > > Thanks...
> > >
> > > [1]
> > > https://cloudstack.apache.org/api/apidocs-4.7/root_admin/
> > > listPublicIpAddresses.html
> > > [2]
> > > https://github.com/apache/cloudstack/blob/master/server/
> > src/com/cloud/api/
> > > ApiResponseHelper.java#L2303
> > > [3]
> > > https://github.com/apache/cloudstack/blob/master/server/
> > src/com/cloud/api/
> > > ApiResponseHelper.java#L761
> > > [4]
> > > https://github.com/apache/cloudstack/blob/master/api/
> > > src/org/apache/cloudstack/api/command/admin/address/
> > > ListPublicIpAddressesCmdByAdmin.java#L44
> > >
> > > *Will Stevens*
> > >
> > > rohit.ya...@shapeblue.com
> > > www.shapeblue.com
> > > 53 Chandos Place, Covent Garden, London  WC2N 4HSUK
> > > @shapeblue
> > >
> > >
> > >
> > >
> >
>

Reply via email to