Hello Kishan,sorry for taking so long to answer - I was on holiday. Your solution works and I can now continue with implementing the Huawei object store.
BIG THANKS to ALL for your help!
Regards, Ronald On 12/15/23 19:29, Kishan Kavala wrote:
Hi Ronald, Here is what I found from the logs: Error: WARN [o.a.c.s.m.m.i.DefaultModuleDefinitionSet] (main:null) (logid:) Failed to start module [root-ca] due to: [Failed to start bean 'cloudStackLifeCycle'; nested exception is java.lang.LinkageError: loader constraint violation: when resolving method 'org.bouncycastle.cert.X509v3CertificateBuilder org.bouncycastle.cert.X509v3CertificateBuilder.addExtension(org.bouncycastle.asn1.ASN1ObjectIdentifier, boolean, org.bouncycastle.asn1.ASN1Encodable)' the class loader org.eclipse.jetty.webapp.WebAppClassLoader @1d9295e2 of the current class, org/apache/cloudstack/utils/security/CertUtils, and the class loader org.codehaus.plexus.classworlds.realm.ClassRealm @7fecc26f for the method's defining class, org/bouncycastle/cert/X509v3CertificateBuilder, have different Class objects for the type org/bouncycastle/asn1/ASN1ObjectIdentifier used in the signature (org.apache.cloudstack.utils.security.CertUtils is in unnamed module of loader org.eclipse.jetty.webapp.WebAppClassLoader @1d9295e2, parent loader org.codehaus.plexus.classworlds.realm.ClassRealm @7fecc26f; org.bouncycastle.cert.X509v3CertificateBuilder is in unnamed module of loader org.codehaus.plexus.classworlds.realm.ClassRealm @7fecc26f, parent loader 'bootstrap')]. Reason: ASN1ObjectIdentifier has different versions in the dependencies of root-ca and Huawei OBS(huaweicloud-sdk-iam) packages. java.lang.LinkageError happens when code is compiled with dependency version say v1 and then is running with dependency version say v2. Solution: Add provided scope to huaweicloud-sdk-iam dependency in Huawei OBS project. This will mark dependencies that should be provided at runtime. <dependency> <groupId>com.huaweicloud.sdk</groupId> <artifactId>huaweicloud-sdk-iam</artifactId> <version>3.1.69</version> <scope>provided</scope> </dependency> Regards, Kishan-----Original Message-----From: Kishan Kavala<kishan.kav...@shapeblue.com> Sent: Friday, December 15, 2023 6:42 PMTo:dev@cloudstack.apache.org Subject: RE: New Object Storage - Huawei OBS Ronald, The error is coming from rootca project after adding Huawei OBS plugin. <dependency> <groupId>org.apache.cloudstack</groupId> <artifactId>cloud-plugin-ca-rootca</artifactId> <version>${project.version}</version> </dependency> After removing the above from client/pom.xml, Huawei OBS plugin was loaded. On the other hand, if I remove Huawei OBS plugin and keep rootca project, I see no issues. I'm investigating further, in the meantime removing rootca project can unblock your development. Regards, Kishan-----Original Message----- From: Ronald Feicht<ronald.fei...@scsynergy.com> Sent: Friday, December 15, 2023 2:12 PM To:dev@cloudstack.apache.org Subject: Re: New Object Storage - Huawei OBS Hi Kishan, when I add my module to client/pom.xml I get the following error andhttp://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 andhttps://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 fork is located herehttps://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 - 299http://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 thenhttp://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 afterwardshttp://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 - 299http://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
-- *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.comSitz der Gesellschaft Bodenheim, HRB 8830, Amtsgericht Mainz, Geschäftsführer: Christian Reichert