[teiid-issues] [JBoss JIRA] (TEIID-4592) Creation, deletion and recreation of data source fails with exception
Steven Hawkins (JIRA)
issues at jboss.org
Wed Dec 6 10:33:20 EST 2017
[ https://issues.jboss.org/browse/TEIID-4592?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Steven Hawkins closed TEIID-4592.
---------------------------------
> Creation, deletion and recreation of data source fails with exception
> ---------------------------------------------------------------------
>
> Key: TEIID-4592
> URL: https://issues.jboss.org/browse/TEIID-4592
> Project: Teiid
> Issue Type: Bug
> Components: AdminApi
> Affects Versions: 9.1, 9.1.1
> Reporter: Paul Richardson
> Assignee: Steven Hawkins
>
> Creating a data source, using the Teiid Admin API, deleting it and recreating results in failing to recreate and an exception is generated. I don't know whether teiid is missing a step or wildfly is failing in some way.
> {code:java}
> org.teiid.adminapi.AdminProcessingException: TEIID70006 {"WFLYCTL0062: Composite operation failed and was rolled back. Steps that failed:" => {"Operation step-1" => "WFLYCTL0158: Operation handler failed: org.jboss.msc.service.DuplicateServiceException: Service org.wildfly.data-source.MySqlDS is already registered"}}
> at org.teiid.adminapi.jboss.AdminFactory$ResultCallback.onFailure(AdminFactory.java:193)
> at org.teiid.adminapi.jboss.AdminFactory$AdminImpl.cliCall(AdminFactory.java:1699)
> at org.teiid.adminapi.jboss.AdminFactory$AdminImpl.createDataSource(AdminFactory.java:572)
> at org.komodo.teiid.TeiidInstanceImpl.createDataSource(TeiidInstanceImpl.java:238)
> at org.komodo.plugin.framework.teiid.AbstractTeiidInstance.getOrCreateDataSource(AbstractTeiidInstance.java:575)
> at org.komodo.teiid.AbstractTestTeiidInstance.deployDataSource(AbstractTestTeiidInstance.java:195)
> at org.komodo.teiid.AbstractTestTeiidInstance.testDataSourceOperations(AbstractTestTeiidInstance.java:233)
> at org.komodo.teiid.TestTeiidInstance.testDataSourceOperations(TestTeiidInstance.java:76)
> 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.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
> at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
> at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
> at org.jboss.arquillian.junit.Arquillian$8$1.invoke(Arquillian.java:374)
> at org.jboss.arquillian.container.test.impl.execution.LocalTestExecuter.execute(LocalTestExecuter.java:60)
> 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.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
> at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99)
> at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81)
> at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:145)
> at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:116)
> at org.jboss.arquillian.core.impl.EventImpl.fire(EventImpl.java:67)
> at org.jboss.arquillian.container.test.impl.execution.ClientTestExecuter.execute(ClientTestExecuter.java:53)
> 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.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
> at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99)
> at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81)
> at org.jboss.arquillian.container.test.impl.client.ContainerEventController.createContext(ContainerEventController.java:142)
> at org.jboss.arquillian.container.test.impl.client.ContainerEventController.createTestContext(ContainerEventController.java:129)
> 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.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
> at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)
> at org.jboss.arquillian.test.impl.TestContextHandler.createTestContext(TestContextHandler.java:130)
> 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.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
> at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)
> at org.jboss.arquillian.test.impl.TestContextHandler.createClassContext(TestContextHandler.java:92)
> 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.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
> at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)
> at org.jboss.arquillian.test.impl.TestContextHandler.createSuiteContext(TestContextHandler.java:73)
> 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.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
> at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)
> at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:145)
> at org.jboss.arquillian.test.impl.EventTestRunnerAdaptor.test(EventTestRunnerAdaptor.java:136)
> at org.jboss.arquillian.junit.Arquillian$8.evaluate(Arquillian.java:367)
> at org.jboss.arquillian.junit.Arquillian$4.evaluate(Arquillian.java:245)
> at org.jboss.arquillian.junit.Arquillian.multiExecute(Arquillian.java:426)
> at org.jboss.arquillian.junit.Arquillian.access$200(Arquillian.java:54)
> at org.jboss.arquillian.junit.Arquillian$5.evaluate(Arquillian.java:259)
> at org.jboss.arquillian.junit.Arquillian$7$1.invoke(Arquillian.java:319)
> at org.jboss.arquillian.container.test.impl.execution.ClientBeforeAfterLifecycleEventExecuter.execute(ClientBeforeAfterLifecycleEventExecuter.java:99)
> at org.jboss.arquillian.container.test.impl.execution.ClientBeforeAfterLifecycleEventExecuter.on(ClientBeforeAfterLifecycleEventExecuter.java:72)
> 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.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
> at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99)
> at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81)
> at org.jboss.arquillian.container.test.impl.client.ContainerEventController.createContext(ContainerEventController.java:142)
> at org.jboss.arquillian.container.test.impl.client.ContainerEventController.createBeforeContext(ContainerEventController.java:124)
> 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.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
> at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)
> at org.jboss.arquillian.test.impl.TestContextHandler.createTestContext(TestContextHandler.java:130)
> 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.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
> at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)
> at org.jboss.arquillian.test.impl.TestContextHandler.createClassContext(TestContextHandler.java:92)
> 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.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
> at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)
> at org.jboss.arquillian.test.impl.TestContextHandler.createSuiteContext(TestContextHandler.java:73)
> 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.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
> at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)
> at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:145)
> at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:116)
> at org.jboss.arquillian.test.impl.EventTestRunnerAdaptor.fireCustomLifecycle(EventTestRunnerAdaptor.java:159)
> at org.jboss.arquillian.junit.Arquillian$7.evaluate(Arquillian.java:312)
> at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
> at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
> at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
> at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
> at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
> at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
> at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
> at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
> at org.jboss.arquillian.junit.Arquillian$2.evaluate(Arquillian.java:204)
> at org.jboss.arquillian.junit.Arquillian.multiExecute(Arquillian.java:426)
> at org.jboss.arquillian.junit.Arquillian.access$200(Arquillian.java:54)
> at org.jboss.arquillian.junit.Arquillian$3.evaluate(Arquillian.java:218)
> at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
> at org.jboss.arquillian.junit.Arquillian.run(Arquillian.java:166)
> {code}
> Below is the gist of a test demonstrating the steps to reproduce. This should provide a template for repoducing the issue in question. At the core though is teiid's admin.deleteDataSource(name) which is directly called from getTeiidInstance().deleteDataSource(dsName), resulting in some trace being left behind.
> {code:java}
> private void wait(int seconds) {
> try {
> Thread.sleep(seconds * 1000);
> } catch (Exception ex) {
> // Nothing required
> }
> }
> private TeiidDataSource deployDataSource() throws Exception {
> /*
> <jdbc-connection name="MySqlPool">
> <jndi-name>java:/MySqlDS</jndi-name>
> <driver-name>mysql-connector-java-5.1.39-bin.jarcom.mysql.jdbc.Driver_5_1</driver-name>
> <property name="track-statements">NOWARN</property>
> <property name="connection-url">jdbc:mysql://db4free.net:3306/usstates</property>
> <property name="share-prepared-statements">false</property>
> <property name="statistics-enabled">false</property>
> <property name="validate-on-match">false</property>
> <property name="allow-multiple-users">false</property>
> <property name="user-name">komodo</property>
> <property name="password">XUMz4vBKuA2v</property>
> <property name="use-fast-fail">false</property>
> <property name="set-tx-query-timeout">false</property>
> <property name="spy">false</property>
> </jdbc-connection>
> */
>
> String displayName = "MySqlPool";
> String jndiName = "java:/MySqlDS";
> String typeName = "mysql-connector_com.mysql.jdbc.Driver_5_1";
> Properties properties = new Properties();
> properties.setProperty("password", "XUMz4vBKuA2v");
> properties.setProperty("user-name", "komodo");
> properties.setProperty("validate-on-match", "false");
> properties.setProperty("connection-url", "jdbc:mysql://db4free.net:3306/usstates");
> properties.setProperty("jndi-name", "java:/MySqlDS");
> properties.setProperty("driver-name", "mysql-connector-java-5.1.39-bin.jar_com.mysql.jdbc.Driver_5_1");
>
> TeiidDataSource teiidDataSource = getTeiidInstance().getOrCreateDataSource(displayName, jndiName, typeName, properties);
> assertNotNull(teiidDataSource);
> return teiidDataSource;
> }
> @Test
> public void testDataSourceOperations() throws Exception {
> getTeiidInstance().connect();
> assertTrue(getTeiidInstance().isConnected());
> //
> // Load the sql driver ready for deployment to make the data source valid
> //
> String MYSQL_DRIVER = "mysql-connector";
> InputStream driverStream = TestUtilities.mySqlDriver();
> assertNotNull(driverStream);
> File driverFile = TestUtilities.createTempFile(MYSQL_DRIVER, ".jar");
> driverFile.deleteOnExit();
> FileUtils.write(driverStream, driverFile);
> //
> // Deploy the mysql driver
> //
> getTeiidInstance().deployDriver(MYSQL_DRIVER, driverFile);
> //
> // Give the driver time to be deployed
> //
> wait(2);
> //
> // Deploy the data source
> //
> TeiidDataSource teiidDataSource = deployDataSource();
> //
> // Test the data source exists
> //
> assertTrue(getTeiidInstance().dataSourceExists(teiidDataSource.getName()));
> //
> // Delete the data source
> //
> String dsName = teiidDataSource.getName();
> getTeiidInstance().deleteDataSource(dsName);
> //
> // Give the data source time to be removed
> //
> wait(4);
> //
> // Refresh the teiid connection
> //
> getTeiidInstance().reconnect();
> //
> // Test the data source no longer exists, which it should not
> //
> assertFalse(getTeiidInstance().dataSourceExists(dsName));
> /*
> * Try redeploying
> */
> try {
> //
> // This will throw an exception since something has remained of the data source
> //
> teiidDataSource = deployDataSource();
> wait(4);
> getTeiidInstance().reconnect();
> assertTrue(getTeiidInstance().dataSourceExists(dsName));
> } catch(Exception ex) {
> throw ex;
> } finally {
> if (getTeiidInstance().dataSourceExists(dsName)) {
> // Ensure everything tidied up at the end
> getTeiidInstance().deleteDataSource(dsName);
> wait(4);
> }
> }
> }
> {code}
--
This message was sent by Atlassian JIRA
(v7.5.0#75005)
More information about the teiid-issues
mailing list