odpi / egeria-connector-xtdb

Pluggable repository for Egeria, using XTDB (formerly "Crux") as the back-end to natively support historical metadata.
https://odpi.github.io/egeria-docs/connectors/repository/xtdb/
Apache License 2.0
15 stars 7 forks source link

Error locating module #470

Open dwolfson opened 1 year ago

dwolfson commented 1 year ago

In experimenting with XTDB configurations, I see an exception where xtdb is not finding the module xtdb.jdbc/->tx.log. Did I misspell something? Any suggestions?

I tried the following configuration document based on what I saw on the xtdb website:

repositoryConnectionBody = { "class": "Connection", "connectorType": { "class": "ConnectorType", "connectorProviderClassName": "org.odpi.egeria.connectors.juxt.xtdb.repositoryconnector.XtdbOMRSRepositoryConnectorProvider" }, "configurationProperties": { "xtdbConfig": {
"xtdb.lucene/lucene-store": { "db-dir": "data/servers/xtdb/lucene" }, "xtdb/index-store": { "kv-store": {
"xtdb/module": "xtdb.rocksdb/->kv-store", "db-dir": "data/servers/xtdb/rdb-index" } }, "xtdb.jdbc/connection-pool": { "dialect": { "xtdb/module": "xtdb.jdbc.psql/->dialect" }, "db-spec": { "host": "jdbc:postgresql://host.rancher-desktop.internal :5442", "dbname": "xtdb", "user": "postgres", "password": "im7383swg" } }, "xtdb/tx-log": { "xtdb/module": "xtdb.jdbc/->tx.log", "connection-pool": "xtdb.jdbc/connection-pool" }, "xtdb/document-store": { "xtdb/module": "xtdb.jdbc/->document-store", "connection-pool": "xtdb.jdbc/connection-pool" }, "poll-sleep-duration": "PT0.1S" } } }

When starting Egeria with that configuration loaded, in the audit log I see: ...

Sun Apr 02 13:37:00 GMT 2023 cocoMDS2 Exception OMRS-XTDB-REPOSITORY-0008 The XTDB repository node failed to start due to clojure.lang.ExceptionInfo. Sun Apr 02 13:37:00 GMT 2023 cocoMDS2 Exception OMRS-XTDB-REPOSITORY-0008 Supplementary information: log record id f8fdfe9d-216b-44f4-a5b3-6d6cb4d93538 clojure.lang.ExceptionInfo returned message of Error locating module and stacktrace of clojure.lang.ExceptionInfo: Error locating module {:module xtdb.jdbc/->tx.log} at xtdb.system.ModuleRef.prepare_dep(system.clj:113) at xtdb.system$opts_reducer$f__6430.invoke(system.clj:131) at xtdb.system$opts_reducer$f__6430.invoke(system.clj:130) at clojure.lang.PersistentVector.reduce(PersistentVector.java:343) at clojure.core$reduce.invokeStatic(core.clj:6885) at clojure.core$reduce.invoke(core.clj:6868) at xtdb.system$prep_system.invokeStatic(system.clj:156) at xtdb.system$prep_system.invoke(system.clj:141) at xtdb.system$prep_system.invokeStatic(system.clj:142) at xtdb.system$prep_system.invoke(system.clj:141) at xtdb.api$start_node.invokeStatic(api.clj:297) at xtdb.api$start_node.invoke(api.clj:284) at clojure.lang.Var.invoke(Var.java:384) at xtdb.api.XtdbFactory.startNode(XtdbFactory.java:16) at xtdb.api.IXtdb.startNode(IXtdb.java:45) at org.odpi.egeria.connectors.juxt.xtdb.repositoryconnector.XtdbOMRSRepositoryConnector.start(XtdbOMRSRepositoryConnector.java:157) at org.odpi.openmetadata.repositoryservices.localrepository.repositoryconnector.LocalOMRSRepositoryConnector.start(LocalOMRSRepositoryConnector.java:162) at org.odpi.openmetadata.repositoryservices.admin.OMRSOperationalServices.initializeCohortMember(OMRSOperationalServices.java:428) at org.odpi.openmetadata.adminservices.server.OMAGServerOperationalServices.activateWithSuppliedConfig(OMAGServerOperationalServices.java:324) at org.odpi.openmetadata.adminservices.server.OMAGServerOperationalServices.activateWithStoredConfig(OMAGServerOperationalServices.java:154) at org.odpi.openmetadata.adminservices.spring.OperationalServicesResource.activateWithStoredConfig(OperationalServicesResource.java:60) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:207) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:152) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:884) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1081) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:974) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1011) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:563) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:631) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.odpi.openmetadata.http.HttpRequestHeadersFilter.doFilter(HttpRequestHeadersFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:109) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:166) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:738) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:894) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:833)

dwolfson commented 1 year ago

I suspect that this was due to a malformed JSON config. Will test further.

planetf1 commented 1 year ago

Additional dependencies are likely needed - for example in your case, for using JDBC with xtdb

The docs at https://egeria-project.org/connectors/repository/xtdb/?h=xtdb#pluggable-persistence have some details

To use in the helm charts, you would need to locate a download source for each library, and add to the 'extralibs' configuration.

We should also consider whether to build