On 12/15/23 09:41, Ronald Feicht wrote:
Hi Kishan, when I add my module to client/pom.xml I get the following error and http://192.168.17.252:8080/client/ returns "HTTP ERROR 503 Service Unavailable" because of the following exception: [WARNING] Failed startup of context o.e.j.m.p.JettyWebAppContext@1df8ea34{/client,file:///opt/cloudstack-huawei-obs/client/target/classes/META-INF/webapp/,UNAVAILABLE}{file:///opt/cloudstack-huawei-obs/client/target/classes/META-INF/webapp/} java.lang.NullPointerException at org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet$1.with (DefaultModuleDefinitionSet.java:104) at org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.withModule (DefaultModuleDefinitionSet.java:263) at org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.withModule (DefaultModuleDefinitionSet.java:268) at org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.withModule (DefaultModuleDefinitionSet.java:268) at org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.withModule (DefaultModuleDefinitionSet.java:268) at org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.withModule (DefaultModuleDefinitionSet.java:268) at org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.withModule (DefaultModuleDefinitionSet.java:268) at org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.withModule (DefaultModuleDefinitionSet.java:251) at org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.startContexts (DefaultModuleDefinitionSet.java:96) at org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.load (DefaultModuleDefinitionSet.java:79) at org.apache.cloudstack.spring.module.factory.ModuleBasedContextFactory.loadModules (ModuleBasedContextFactory.java:37) at org.apache.cloudstack.spring.module.factory.CloudStackSpringContext.init (CloudStackSpringContext.java:70) at org.apache.cloudstack.spring.module.factory.CloudStackSpringContext.<init> (CloudStackSpringContext.java:57) at org.apache.cloudstack.spring.module.factory.CloudStackSpringContext.<init> (CloudStackSpringContext.java:61) at org.apache.cloudstack.spring.module.web.CloudStackContextLoaderListener.contextInitialized (CloudStackContextLoaderListener.java:52) at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized (ContextHandler.java:933) at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized (ServletContextHandler.java:553) at org.eclipse.jetty.server.handler.ContextHandler.startContext (ContextHandler.java:892) at org.eclipse.jetty.servlet.ServletContextHandler.startContext (ServletContextHandler.java:356) at org.eclipse.jetty.webapp.WebAppContext.startWebapp (WebAppContext.java:1445) at org.eclipse.jetty.maven.plugin.JettyWebAppContext.startWebapp (JettyWebAppContext.java:328) at org.eclipse.jetty.webapp.WebAppContext.startContext (WebAppContext.java:1409) at org.eclipse.jetty.server.handler.ContextHandler.doStart (ContextHandler.java:825) at org.eclipse.jetty.servlet.ServletContextHandler.doStart (ServletContextHandler.java:275) at org.eclipse.jetty.webapp.WebAppContext.doStart (WebAppContext.java:524) at org.eclipse.jetty.maven.plugin.JettyWebAppContext.doStart (JettyWebAppContext.java:397) at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:72) at org.eclipse.jetty.util.component.ContainerLifeCycle.start (ContainerLifeCycle.java:169) at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart (ContainerLifeCycle.java:117) at org.eclipse.jetty.server.handler.AbstractHandler.doStart (AbstractHandler.java:97) at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:72) at org.eclipse.jetty.util.component.ContainerLifeCycle.start (ContainerLifeCycle.java:169) at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart (ContainerLifeCycle.java:117) at org.eclipse.jetty.server.handler.AbstractHandler.doStart (AbstractHandler.java:97) at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:72) at org.eclipse.jetty.util.component.ContainerLifeCycle.start (ContainerLifeCycle.java:169) at org.eclipse.jetty.server.Server.start (Server.java:407) at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart (ContainerLifeCycle.java:110) at org.eclipse.jetty.server.handler.AbstractHandler.doStart (AbstractHandler.java:97) at org.eclipse.jetty.server.Server.doStart (Server.java:371) at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:72) at org.eclipse.jetty.maven.plugin.AbstractJettyMojo.startJetty (AbstractJettyMojo.java:450) at org.eclipse.jetty.maven.plugin.AbstractJettyMojo.execute (AbstractJettyMojo.java:311) at org.eclipse.jetty.maven.plugin.JettyRunMojo.execute (JettyRunMojo.java:152) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192) at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105) at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957) at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289) at org.apache.maven.cli.MavenCli.main (MavenCli.java:193) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:566) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282) at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406) at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347) But the directory exists and is not empty: [root@cloudstack-centos cloudstack-huawei-obs]# ll /opt/cloudstack-huawei-obs/client/target/classes/META-INF/webapp/ total 4 drwxr-xr-x. 2 root root 21 Dec 15 08:59 WEB-INF -rw-r--r--. 1 root root 1135 Dec 15 08:59 index.html drwxr-xr-x. 3 root root 39 Dec 15 08:59 . drwxr-xr-x. 4 root root 87 Dec 15 08:59 .. [root@cloudstack-centos cloudstack-huawei-obs]# ll /opt/cloudstack-huawei-obs/client/target/classes/META-INF/webapp/WEB-INF/ total 4 -rw-r--r--. 1 root root 2694 Dec 15 08:59 web.xml drwxr-xr-x. 2 root root 21 Dec 15 08:59 . drwxr-xr-x. 3 root root 39 Dec 15 08:59 .. I have compared my plugin code to that of Minio and https://github.com/wido/cloudstack/commits/ceph-object-store but fail to see what I have done wrong. The only significant thing I can make out is my choice for the directory name "/opt/cloudstack-huawei-obs/plugins/storage/object/huawei-obs". In plugins/pom.xml all object storage plugins have only a simple name without the character "-" in it. <module>storage/object/minio</module> <module>storage/object/simulator</module> <module>storage/object/huawei-obs</module> But surely that cannot be the source of the error?
My code doesn't work either, just running it now:"com.cloud.exception.InvalidParameterValueException: can't find object store provider: Ceph RGW"
But the module was loaded:2023-12-15 12:24:39,440 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Loading module context [storage-object-ceph] from URL [jar:file:/usr/share/cloudstack-management/lib/cloudstack-4.19.0.0-SNAPSHOT.jar!/META-INF/cloudstack/bootstrap/spring-bootstrap-context-inheritable.xml] 2023-12-15 12:24:39,496 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Loaded module context [storage-object-ceph] in 56 ms
Trying to figure out what is happening. Wido
My fork is located here https://github.com/scsynergy/cloudstack-huawei-obs and I created a Pull Request for you. Mit freundlichen Grüßen R. Feicht sc synergy GmbH Hilgestrasse 14 | 55294 Bodenheim | Deutschland Fon: +49 6135 71691 - 000 | Fax: +49 6135 71691 - 299 http://www.scsynergy.com | ronald.fei...@scsynergy.com Sitz der Gesellschaft Bodenheim, HRB 8830, Amtsgericht Mainz, Geschäftsführer: Christian Reichert ________________________________ From: Kishan Kavala <kishan.kav...@shapeblue.com> Sent: Friday, December 15, 2023 06:35 To: dev@cloudstack.apache.org Subject: RE: New Object Storage - Huawei OBS Hi Ronald, You need to add module to client/pom.xml and add the plugin folder to plugins/pom.xml. Looks like your implementation of ObjectStoreProvider is not getting registered as a ObjectStoreProvider. If you can share a draft PR, I can review and suggest what is missing. Regards, Kishan -----Original Message----- From: Ronald Feicht <ronald.fei...@scsynergy.com> Sent: Thursday, December 14, 2023 5:01 PM To: dev@cloudstack.apache.org Subject: Re: New Object Storage - Huawei OBS Hi, I had added the module to client/pom.xml, but then http://192.168.17.252:8080/client/ retuns "HTTP ERROR 503 Service Unavailable" because of the following exception: [WARNING] Failed startup of context o.e.j.m.p.JettyWebAppContext@1df8ea34{/client,file:///opt/cloudstack-huawei-obs/client/target/classes/META-INF/webapp/,UNAVAILABLE}{file:///opt/cloudstack-huawei-obs/client/target/classes/META-INF/webapp/} java.lang.NullPointerException at org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet$1.with (DefaultModuleDefinitionSet.java:104) at org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.withModule (DefaultModuleDefinitionSet.java:263) at org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.withModule (DefaultModuleDefinitionSet.java:268) at org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.withModule (DefaultModuleDefinitionSet.java:268) at org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.withModule (DefaultModuleDefinitionSet.java:268) at org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.withModule (DefaultModuleDefinitionSet.java:268) at org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.withModule (DefaultModuleDefinitionSet.java:268) at org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.withModule (DefaultModuleDefinitionSet.java:251) at org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.startContexts (DefaultModuleDefinitionSet.java:96) at org.apache.cloudstack.spring.module.model.impl.DefaultModuleDefinitionSet.load (DefaultModuleDefinitionSet.java:79) at org.apache.cloudstack.spring.module.factory.ModuleBasedContextFactory.loadModules (ModuleBasedContextFactory.java:37) at org.apache.cloudstack.spring.module.factory.CloudStackSpringContext.init (CloudStackSpringContext.java:70) at org.apache.cloudstack.spring.module.factory.CloudStackSpringContext.<init> (CloudStackSpringContext.java:57) at org.apache.cloudstack.spring.module.factory.CloudStackSpringContext.<init> (CloudStackSpringContext.java:61) at org.apache.cloudstack.spring.module.web.CloudStackContextLoaderListener.contextInitialized (CloudStackContextLoaderListener.java:52) at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized (ContextHandler.java:933) at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized (ServletContextHandler.java:553) at org.eclipse.jetty.server.handler.ContextHandler.startContext (ContextHandler.java:892) at org.eclipse.jetty.servlet.ServletContextHandler.startContext (ServletContextHandler.java:356) at org.eclipse.jetty.webapp.WebAppContext.startWebapp (WebAppContext.java:1445) at org.eclipse.jetty.maven.plugin.JettyWebAppContext.startWebapp (JettyWebAppContext.java:328) at org.eclipse.jetty.webapp.WebAppContext.startContext (WebAppContext.java:1409) at org.eclipse.jetty.server.handler.ContextHandler.doStart (ContextHandler.java:825) at org.eclipse.jetty.servlet.ServletContextHandler.doStart (ServletContextHandler.java:275) at org.eclipse.jetty.webapp.WebAppContext.doStart (WebAppContext.java:524) at org.eclipse.jetty.maven.plugin.JettyWebAppContext.doStart (JettyWebAppContext.java:397) at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:72) at org.eclipse.jetty.util.component.ContainerLifeCycle.start (ContainerLifeCycle.java:169) at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart (ContainerLifeCycle.java:117) at org.eclipse.jetty.server.handler.AbstractHandler.doStart (AbstractHandler.java:97) at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:72) at org.eclipse.jetty.util.component.ContainerLifeCycle.start (ContainerLifeCycle.java:169) at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart (ContainerLifeCycle.java:117) at org.eclipse.jetty.server.handler.AbstractHandler.doStart (AbstractHandler.java:97) at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:72) at org.eclipse.jetty.util.component.ContainerLifeCycle.start (ContainerLifeCycle.java:169) at org.eclipse.jetty.server.Server.start (Server.java:407) at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart (ContainerLifeCycle.java:110) at org.eclipse.jetty.server.handler.AbstractHandler.doStart (AbstractHandler.java:97) at org.eclipse.jetty.server.Server.doStart (Server.java:371) at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:72) at org.eclipse.jetty.maven.plugin.AbstractJettyMojo.startJetty (AbstractJettyMojo.java:450) at org.eclipse.jetty.maven.plugin.AbstractJettyMojo.execute (AbstractJettyMojo.java:311) at org.eclipse.jetty.maven.plugin.JettyRunMojo.execute (JettyRunMojo.java:152) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192) at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105) at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957) at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289) at org.apache.maven.cli.MavenCli.main (MavenCli.java:193) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:566) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282) at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406) at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347) But the directory exists and is not empty: [root@cloudstack-centos cloudstack-huawei-obs]# ll /opt/cloudstack-huawei-obs/client/target/classes/META-INF/webapp/ total 4 drwxr-xr-x. 2 root root 21 Dec 14 12:17 WEB-INF -rw-r--r--. 1 root root 1135 Dec 14 12:17 index.html drwxr-xr-x. 3 root root 39 Dec 14 12:17 . drwxr-xr-x. 4 root root 87 Dec 14 12:17 .. [root@cloudstack-centos cloudstack-huawei-obs]# ll /opt/cloudstack-huawei-obs/client/target/classes/META-INF/webapp/WEB-INF/ total 4 -rw-r--r--. 1 root root 2694 Dec 14 12:17 web.xml drwxr-xr-x. 2 root root 21 Dec 14 12:17 . drwxr-xr-x. 3 root root 39 Dec 14 12:17 .. Because of that error I had removed my plugin from client/pom.xml again and then afterwards http://192.168.17.252:8080/client/ worked. So, I now understand that my plugin must by part of client/pom.xml but then I receive the same exception mentioned above - how do I fix that? Mit freundlichen Grüßen R. Feicht sc synergy GmbH Hilgestrasse 14 | 55294 Bodenheim | Deutschland Fon: +49 6135 71691 - 000 | Fax: +49 6135 71691 - 299 http://www.scsynergy.com | ronald.fei...@scsynergy.com Sitz der Gesellschaft Bodenheim, HRB 8830, Amtsgericht Mainz, Geschäftsführer: Christian Reichert ________________________________ From: Slavka Peleva <slav...@storpool.com.INVALID> Sent: Thursday, December 14, 2023 11:37 To: dev@cloudstack.apache.org Subject: Re: New Object Storage - Huawei OBS Hi Ronald, In the logs, you can find all the modules that are loaded like: ``` 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: baremetal-storage 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: server-alert-adapter-storage 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: server-storage 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: server-template-adapter 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage-allocator 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage-image-default 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage-image-s3 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage-image-swift 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage-object-minio 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage-object-simulator 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage-volume-cloudbyte 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage-volume-datera 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage-volume-default 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage-volume-flasharray 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage-volume-linstor 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage-volume-primera 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage-volume-scaleio 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage-volume-solidfire 2023-12-14 12:28:21,480 INFO [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Module Hierarchy: storage-volume-storpool ``` Like Wei mentioned you need to add the module in the client/pom.xml or you can copy the jar of your plugin (just for the tests) in `/usr/share/cloudstack-management/lib/` and restart the service Best regards, Slavka On Thu, Dec 14, 2023 at 11:57?AM Wei ZHOU <ustcweiz...@gmail.com> wrote:Is the module added to client/pom.xml ? -Wei On Thu, 14 Dec 2023 at 10:51, Ronald Feicht <ronald.fei...@scsynergy.com> wrote:Hi, I am trying to write an Object Storage plugin for Huawei OBS using Minio as example. I added my plugin code to the plugins/storage/object/ directory, added my plugin into plugins/pom.xml and added the string 'Huawei OBS' to AddObjectStorage.vue for the dropdown in the UI. Butwhen Iselect that dropdown entry and click "Save" in the UI the following exception is thrown: com.cloud.exception.InvalidParameterValueException: can't find object store provider: Huawei OBS atcom.cloud.storage.StorageManagerImpl.discoverObjectStore(StorageManage rImpl.java:3743)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Nati ve Method) atjava.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeM ethodAccessorImpl.java:62)atjava.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Del egatingMethodAccessorImpl.java:43)at java.base/java.lang.reflect.Method.invoke(Method.java:566) atorg.springframework.aop.support.AopUtils.invokeJoinpointUsingReflectio n(AopUtils.java:344)atorg.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoi npoint(ReflectiveMethodInvocation.java:198)atorg.springframework.aop.framework.ReflectiveMethodInvocation.proceed(R eflectiveMethodInvocation.java:163)atorg.apache.cloudstack.network.contrail.management.EventUtils$EventInte rceptor.invoke(EventUtils.java:107)atorg.springframework.aop.framework.ReflectiveMethodInvocation.proceed(R eflectiveMethodInvocation.java:175)atcom.cloud.event.ActionEventInterceptor.invoke(ActionEventInterceptor.j ava:52)atorg.springframework.aop.framework.ReflectiveMethodInvocation.proceed(R eflectiveMethodInvocation.java:175)atorg.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke (ExposeInvocationInterceptor.java:97)atorg.springframework.aop.framework.ReflectiveMethodInvocation.proceed(R eflectiveMethodInvocation.java:186)atorg.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamic AopProxy.java:215)at com.sun.proxy.$Proxy119.discoverObjectStore(Unknown Source) atorg.apache.cloudstack.api.command.admin.storage.AddObjectStoragePoolCm d.execute(AddObjectStoragePoolCmd.java:117)at com.cloud.api.ApiDispatcher.dispatch(ApiDispatcher.java:172) at com.cloud.api.ApiServer.queueCommand(ApiServer.java:782) at com.cloud.api.ApiServer.handleRequest(ApiServer.java:603) at com.cloud.api.ApiServlet.processRequestInContext(ApiServlet.java:347) at com.cloud.api.ApiServlet$1.run(ApiServlet.java:154) atorg.apache.cloudstack.managed.context.impl.DefaultManagedContext$1.cal l(DefaultManagedContext.java:55)atorg.apache.cloudstack.managed.context.impl.DefaultManagedContext.callW ithContext(DefaultManagedContext.java:102)atorg.apache.cloudstack.managed.context.impl.DefaultManagedContext.runWi thContext(DefaultManagedContext.java:52)at com.cloud.api.ApiServlet.processRequest(ApiServlet.java:151) at com.cloud.api.ApiServlet.doGet(ApiServlet.java:105) at javax.servlet.http.HttpServlet.service(HttpServlet.java:687) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) atorg.eclipse.jetty.servlet.ServletHolder$NotAsyncServlet.service(Servle tHolder.java:1386)at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:755) atorg.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletH andler.java:1617)atorg.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(Web SocketUpgradeFilter.java:226)atorg.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletH andler.java:1604)atorg.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java: 545)atorg.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.ja va:143)atorg.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java :590)atorg.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper. java:127)atorg.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandle r.java:235)atorg.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandle r.java:1610)atorg.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandle r.java:233)atorg.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandle r.java:1300)atorg.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler .java:188)at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:485) atorg.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler .java:1580)atorg.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler .java:186)atorg.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler .java:1215)atorg.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.ja va:141)atorg.eclipse.jetty.server.handler.ContextHandlerCollection.handle(Conte xtHandlerCollection.java:221)atorg.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerColle ction.java:146)atorg.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper. java:127)at org.eclipse.jetty.server.Server.handle(Server.java:500) atorg.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java: 383)at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:547) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375) atorg.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java :273)at org.eclipse.jetty.io .AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) at org.eclipse.jetty.io .FillInterest.fillable(FillInterest.java:103) at org.eclipse.jetty.io .ChannelEndPoint$2.run(ChannelEndPoint.java:117) atorg.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatY ouKill.java:336)atorg.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWha tYouKill.java:313)atorg.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWh atYouKill.java:171)atorg.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKi ll.java:129)atorg.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.ru n(ReservedThreadExecutor.java:375)atorg.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool .java:806)atorg.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThread Pool.java:938)at java.base/java.lang.Thread.run(Thread.java:829) What do I need to do to register my plugin with StorageManagerImpl.java? The fork I made with my code can be seen here https://github.com/scsynergy/cloudstack-huawei-obs . Mit freundlichen Grüßen R. Feicht sc synergy GmbH Hilgestrasse 14 | 55294 Bodenheim | Deutschland Fon: +49 6135 71691 - 000 | Fax: +49 6135 71691 - 299 http://www.scsynergy.com | ronald.fei...@scsynergy.com Sitz der Gesellschaft Bodenheim, HRB 8830, Amtsgericht Mainz, Geschäftsführer: Christian Reichert