Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ChangeFirmwareRequest: wrong firmware path after model update #228

Open
ThE-MaRaC opened this issue Jun 29, 2020 · 1 comment
Open

ChangeFirmwareRequest: wrong firmware path after model update #228

ThE-MaRaC opened this issue Jun 29, 2020 · 1 comment

Comments

@ThE-MaRaC
Copy link

If the firmware is created with one model and later on model is changed, a firmware path doesn't reflect this change and firmware can not be deleted anymore.

For example:
Create FW with manufacturer=LAGY and model=Landis_and_Gyr-T_E360_CDMA_SMR5.1_energy_meter

path=/var/www/html/firmware/LAGY/Landis_and_Gyr-T_E360_CDMA_SMR5.1_energy_meter/test-firmware.fw

Update FW with model=E360 CD2D GPRS SMR5

new path should be: /var/www/html/firmware/LAGY/E360_CD2D_GPRS_SMR5/test-firmware.fw

Stacktrace:

2020-06-29 10:28:34.506] [dev-box] [ajp-nio-8009-exec-15] INFO o.o.a.w.e.WebServiceMonitorInterceptor@printSoapMessage:338 - soap message: <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header><OrganisationIdentification xmlns="http://www.op
ensmartgridplatform.org/schemas/common">test-org</OrganisationIdentification><ApplicationName xmlns="http://www.opensmartgridplatform.org/schemas/common">client-application</ApplicationName><UserName xmlns="http://www.opensmartgridplatform.org/schemas/common">client-application-use
r</UserName></SOAP-ENV:Header><SOAP-ENV:Body><ns2:RemoveFirmwareRequest xmlns:ns2="http://www.opensmartgridplatform.org/schemas/common/firmwaremanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:ns4="http://www.opensmartgridplatform.org
/schemas/devicemanagement/2014/10"><ns2:Id>4</ns2:Id></ns2:RemoveFirmwareRequest></SOAP-ENV:Body></SOAP-ENV:Envelope>
2020-06-29 10:28:34.507] [dev-box] [ajp-nio-8009-exec-15] INFO o.o.a.w.c.e.FirmwareManagementEndpoint@removedFirmware:814 - Removing firmware with id:4.
2020-06-29 10:28:34.509] [dev-box] [ajp-nio-8009-exec-15] INFO o.o.d.core.services.SecurityService@checkAuthorization:84 - Organisation test-org is allowed function REMOVE_FIRMWARE
2020-06-29 10:28:34.514] [dev-box] [ajp-nio-8009-exec-15] INFO o.o.a.w.c.a.s.DeviceManagementService@supplyfirmwareFileNotFoundException:715 - FirmwareFile not found for id 4.
2020-06-29 10:28:34.518] [dev-box] [ajp-nio-8009-exec-15] ERROR o.o.a.w.c.e.FirmwareManagementEndpoint@removedFirmware:832 - Exception: [null, 4, test-org] while removing firmware: {} for organisation {}
java.lang.NullPointerException: null
        at org.opensmartgridplatform.adapter.ws.core.application.services.FirmwareManagementService.removePhysicalFirmwareFile(FirmwareManagementService.java:802)
        at org.opensmartgridplatform.adapter.ws.core.application.services.FirmwareManagementService.removeFirmware(FirmwareManagementService.java:702)
        at org.opensmartgridplatform.adapter.ws.core.application.services.FirmwareManagementService$$FastClassBySpringCGLIB$$b1a2241.invoke(<generated>)
        at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
        at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
        at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
        at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:120)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
        at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
        at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:366)
        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:118)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
        at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
        at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691)
        at org.opensmartgridplatform.adapter.ws.core.application.services.FirmwareManagementService$$EnhancerBySpringCGLIB$$410b0d99.removeFirmware(<generated>)
        at org.opensmartgridplatform.adapter.ws.core.endpoints.FirmwareManagementEndpoint.removedFirmware(FirmwareManagementEndpoint.java:818)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.ws.server.endpoint.MethodEndpoint.invoke(MethodEndpoint.java:134)
        at org.springframework.ws.server.endpoint.adapter.DefaultMethodEndpointAdapter.invokeInternal(DefaultMethodEndpointAdapter.java:291)
        at org.springframework.ws.server.endpoint.adapter.AbstractMethodEndpointAdapter.invoke(AbstractMethodEndpointAdapter.java:55)
        at org.springframework.ws.server.MessageDispatcher.dispatch(MessageDispatcher.java:236)
        at org.springframework.ws.server.MessageDispatcher.receive(MessageDispatcher.java:176)
        at org.springframework.ws.transport.support.WebServiceMessageReceiverObjectSupport.handleConnection(WebServiceMessageReceiverObjectSupport.java:89)
        at org.springframework.ws.transport.http.WebServiceMessageReceiverHandlerAdapter.handle(WebServiceMessageReceiverHandlerAdapter.java:61)
        at org.springframework.ws.transport.http.MessageDispatcherServlet.doService(MessageDispatcherServlet.java:293)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
        at psiprobe.Tomcat90AgentValve.invoke(Tomcat90AgentValve.java:35)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
        at org.apache.coyote.ajp.AjpProcessor.service(AjpProcessor.java:399)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1598)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:748)
@kevinsmeets
Copy link
Contributor

@ThE-MaRaC,

Thank you for reporting this issue.
I found that updating the device model can lead to the problem you describe.
There are 2 solutions I can think of:

  • prevent changing the device model when firmware files are present for the device model
    (which could be similar to the implementation of the checks in the function org.opensmartgridplatform.adapter.ws.core.application.services.FirmwareManagementService#removeDeviceModel(String, String, String))
  • updating the folder on the file system

The first option is the best fit for the behavior of our client application which manages manufacturers, device models and firmware files. I will discuss this issue with the team.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants