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 > > > > > > > > > > > > > > >