[jira] [Comment Edited] (DRILL-5090) JDBC tests silently ignore failure to set up test storage plugin

2016-12-01 Thread Paul Rogers (JIRA)

[ 
https://issues.apache.org/jira/browse/DRILL-5090?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15713647#comment-15713647
 ] 

Paul Rogers edited comment on DRILL-5090 at 12/2/16 5:55 AM:
-

Further tests show that the {{StoragePluginRegistryImpl.createPlugins()}} 
method does not load the test bootstrap plugins because the local plugin 
directory already exists: {{/tmp/drill/sys.storage_plugins}}.

Not sure how this could have ever worked if this directory exists and has 
contents:

{code}
cp.sys.drilldfs.sys.drill   s3.sys.drill
{code}

The JDBC test uses a {{LocalPersistentStore}} while the working unit tests use 
{{NoWriteLocalStore}}. The reason is that {{LocalPersistentStoreProvider}} 
checks {{ExecConstants.SYS_STORE_PROVIDER_LOCAL_ENABLE_WRITE}} 
({{drill.exec.sys.store.provider.local.write}}). This is set in {BaseTestQuery}:

{code}
  put(ExecConstants.SYS_STORE_PROVIDER_LOCAL_ENABLE_WRITE, "false");
{code}

Adding this to the {{JdbcAssert.getDefaultProperties()}} solves the problem.

This does not answer the question as to why the tests succeed for others. Do 
they delete /tmp/drill?


was (Author: paul-rogers):
Further tests show that the {{StoragePluginRegistryImpl.createPlugins()}} 
method does not load the test bootstrap plugins because the local plugin 
directory already exists: {{/tmp/drill/sys.storage_plugins}}.

Not sure how this could have ever worked if this directory exists and has 
contents:

{code}
cp.sys.drilldfs.sys.drill   s3.sys.drill
{code}

These may have been created when running other unit tests. How are they being 
cleaned up for folks for whom the JDBC unit tests succeed?

Interesting fact: the storage plugin thinks the local storage path is 
{{/tmp/drill/sys.storage_plugins}} while {{TestUtilities.createTempDir();}} in 
the JDBC driver test code sets the temp dir to {{/var/folders/xyz/abc}} where 
xyz and abc are random strings.

The persistent store is getting its directory from the 
{{drill.exec.sys.store.provider.local.path}} config parameter defined in 
{{drill/exec/java-exec/src/main/resources/drill-module.conf}}. But this value 
has remain unchanged for several years.

> JDBC tests silently ignore failure to set up test storage plugin
> 
>
> Key: DRILL-5090
> URL: https://issues.apache.org/jira/browse/DRILL-5090
> Project: Apache Drill
>  Issue Type: Bug
>Affects Versions: 1.8.0
>Reporter: Paul Rogers
>
> Run the {{TestJDBCQuery}} test cases using Java 8. The tests will fail with 
> error such as:
> {code}
> VALIDATION ERROR ...
> Current default schema: No default schema selected
> {code}
> The problem is that the tests try to set up a test schema, but fail. The code 
> that does this setup just silently ignores the error:
> {code}
> try {
> TestUtilities.updateDfsTestTmpSchemaLocation(pluginRegistry, 
> tmpDirPath);
> TestUtilities.makeDfsTmpSchemaImmutable(pluginRegistry);
>   }
> } catch(Throwable e) {
>   // ... This is unlikely to
>   // happen, but just a safeguard to avoid failing user applications.
>   logger.warn("Failed to update tmp schema locations. This step is purely 
> for testing purpose. " +
>   "Shouldn't be seen in production code.");
>   // Ignore the error and go with defaults
> }
> {code}
> The reason that the error is ignored is that the JDBC driver _itself_ 
> contains test code in the form of the following check:
> {code}
>   if (props != null && 
> "true".equalsIgnoreCase(props.getProperty("drillJDBCUnitTests"))) {
> {code}
> That is, the JDBC driver itself contains the code needed to set up the test 
> schemas. This means that test code is shipped in production. And, we must 
> handle the failure gracefully in case the user set the property in production.
> Requested changes:
> * Find a way to do test setup without including test code in JDBC.
> * If test setup fails, issue a fatal error to direct the developer to the 
> actual problem.
> And, of course, fix the Java 8 error so that the tests pass. Fixing that 
> error is a separate issue. If things were to fail again, we need the above 
> fixes to avoid wasting developer's time finding the problem.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Comment Edited] (DRILL-5090) JDBC tests silently ignore failure to set up test storage plugin

2016-12-01 Thread Paul Rogers (JIRA)

[ 
https://issues.apache.org/jira/browse/DRILL-5090?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15713647#comment-15713647
 ] 

Paul Rogers edited comment on DRILL-5090 at 12/2/16 5:55 AM:
-

Further tests show that the {{StoragePluginRegistryImpl.createPlugins()}} 
method does not load the test bootstrap plugins because the local plugin 
directory already exists: {{/tmp/drill/sys.storage_plugins}}.

Not sure how this could have ever worked if this directory exists and has 
contents:

{code}
cp.sys.drilldfs.sys.drill   s3.sys.drill
{code}

The JDBC test uses a {{LocalPersistentStore}} while the working unit tests use 
{{NoWriteLocalStore}}. The reason is that {{LocalPersistentStoreProvider}} 
checks {{ExecConstants.SYS_STORE_PROVIDER_LOCAL_ENABLE_WRITE}} 
({{drill.exec.sys.store.provider.local.write}}). This is set in 
{{BaseTestQuery}}:

{code}
  put(ExecConstants.SYS_STORE_PROVIDER_LOCAL_ENABLE_WRITE, "false");
{code}

Adding this to the {{JdbcAssert.getDefaultProperties()}} solves the problem.

This does not answer the question as to why the tests succeed for others. Do 
they delete /tmp/drill?


was (Author: paul-rogers):
Further tests show that the {{StoragePluginRegistryImpl.createPlugins()}} 
method does not load the test bootstrap plugins because the local plugin 
directory already exists: {{/tmp/drill/sys.storage_plugins}}.

Not sure how this could have ever worked if this directory exists and has 
contents:

{code}
cp.sys.drilldfs.sys.drill   s3.sys.drill
{code}

The JDBC test uses a {{LocalPersistentStore}} while the working unit tests use 
{{NoWriteLocalStore}}. The reason is that {{LocalPersistentStoreProvider}} 
checks {{ExecConstants.SYS_STORE_PROVIDER_LOCAL_ENABLE_WRITE}} 
({{drill.exec.sys.store.provider.local.write}}). This is set in {BaseTestQuery}:

{code}
  put(ExecConstants.SYS_STORE_PROVIDER_LOCAL_ENABLE_WRITE, "false");
{code}

Adding this to the {{JdbcAssert.getDefaultProperties()}} solves the problem.

This does not answer the question as to why the tests succeed for others. Do 
they delete /tmp/drill?

> JDBC tests silently ignore failure to set up test storage plugin
> 
>
> Key: DRILL-5090
> URL: https://issues.apache.org/jira/browse/DRILL-5090
> Project: Apache Drill
>  Issue Type: Bug
>Affects Versions: 1.8.0
>Reporter: Paul Rogers
>
> Run the {{TestJDBCQuery}} test cases using Java 8. The tests will fail with 
> error such as:
> {code}
> VALIDATION ERROR ...
> Current default schema: No default schema selected
> {code}
> The problem is that the tests try to set up a test schema, but fail. The code 
> that does this setup just silently ignores the error:
> {code}
> try {
> TestUtilities.updateDfsTestTmpSchemaLocation(pluginRegistry, 
> tmpDirPath);
> TestUtilities.makeDfsTmpSchemaImmutable(pluginRegistry);
>   }
> } catch(Throwable e) {
>   // ... This is unlikely to
>   // happen, but just a safeguard to avoid failing user applications.
>   logger.warn("Failed to update tmp schema locations. This step is purely 
> for testing purpose. " +
>   "Shouldn't be seen in production code.");
>   // Ignore the error and go with defaults
> }
> {code}
> The reason that the error is ignored is that the JDBC driver _itself_ 
> contains test code in the form of the following check:
> {code}
>   if (props != null && 
> "true".equalsIgnoreCase(props.getProperty("drillJDBCUnitTests"))) {
> {code}
> That is, the JDBC driver itself contains the code needed to set up the test 
> schemas. This means that test code is shipped in production. And, we must 
> handle the failure gracefully in case the user set the property in production.
> Requested changes:
> * Find a way to do test setup without including test code in JDBC.
> * If test setup fails, issue a fatal error to direct the developer to the 
> actual problem.
> And, of course, fix the Java 8 error so that the tests pass. Fixing that 
> error is a separate issue. If things were to fail again, we need the above 
> fixes to avoid wasting developer's time finding the problem.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Comment Edited] (DRILL-5090) JDBC tests silently ignore failure to set up test storage plugin

2016-12-01 Thread Paul Rogers (JIRA)

[ 
https://issues.apache.org/jira/browse/DRILL-5090?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15713647#comment-15713647
 ] 

Paul Rogers edited comment on DRILL-5090 at 12/2/16 3:56 AM:
-

Further tests show that the {{StoragePluginRegistryImpl.createPlugins()}} 
method does not load the test bootstrap plugins because the local plugin 
directory already exists: {{/tmp/drill/sys.storage_plugins}}.

Not sure how this could have ever worked if this directory exists and has 
contents:

{code}
cp.sys.drilldfs.sys.drill   s3.sys.drill
{code}

These may have been created when running other unit tests. How are they being 
cleaned up for folks for whom the JDBC unit tests succeed?

Interesting fact: the storage plugin thinks the local storage path is 
{{/tmp/drill/sys.storage_plugins}} while {{TestUtilities.createTempDir();}} in 
the JDBC driver test code sets the temp dir to {{/var/folders/xyz/abc}} where 
xyz and abc are random strings.

The persistent store is getting its directory from the 
{{drill.exec.sys.store.provider.local.path}} config parameter defined in 
{{drill/exec/java-exec/src/main/resources/drill-module.conf}}. But this value 
has remain unchanged for several years.


was (Author: paul-rogers):
Further tests show that the {{StoragePluginRegistryImpl.createPlugins()}} 
method does not load the test bootstrap plugins because the local plugin 
directory already exists: {{/tmp/drill/sys.storage_plugins}}.

Not sure how this could have ever worked if this directory exists and has 
contents:

{code}
cp.sys.drilldfs.sys.drill   s3.sys.drill
{code}

These may have been created when running other unit tests. How are they being 
cleaned up for folks for whom the JDBC unit tests succeed?

Interesting fact: the storage plugin thinks the local storage path is 
{{/tmp/drill/sys.storage_plugins}} while {{TestUtilities.createTempDir();}} in 
the JDBC driver test code sets the temp dir to {{/var/folders/xyz/abc}} where 
xyz and abc are random strings.

> JDBC tests silently ignore failure to set up test storage plugin
> 
>
> Key: DRILL-5090
> URL: https://issues.apache.org/jira/browse/DRILL-5090
> Project: Apache Drill
>  Issue Type: Bug
>Affects Versions: 1.8.0
>Reporter: Paul Rogers
>
> Run the {{TestJDBCQuery}} test cases using Java 8. The tests will fail with 
> error such as:
> {code}
> VALIDATION ERROR ...
> Current default schema: No default schema selected
> {code}
> The problem is that the tests try to set up a test schema, but fail. The code 
> that does this setup just silently ignores the error:
> {code}
> try {
> TestUtilities.updateDfsTestTmpSchemaLocation(pluginRegistry, 
> tmpDirPath);
> TestUtilities.makeDfsTmpSchemaImmutable(pluginRegistry);
>   }
> } catch(Throwable e) {
>   // ... This is unlikely to
>   // happen, but just a safeguard to avoid failing user applications.
>   logger.warn("Failed to update tmp schema locations. This step is purely 
> for testing purpose. " +
>   "Shouldn't be seen in production code.");
>   // Ignore the error and go with defaults
> }
> {code}
> The reason that the error is ignored is that the JDBC driver _itself_ 
> contains test code in the form of the following check:
> {code}
>   if (props != null && 
> "true".equalsIgnoreCase(props.getProperty("drillJDBCUnitTests"))) {
> {code}
> That is, the JDBC driver itself contains the code needed to set up the test 
> schemas. This means that test code is shipped in production. And, we must 
> handle the failure gracefully in case the user set the property in production.
> Requested changes:
> * Find a way to do test setup without including test code in JDBC.
> * If test setup fails, issue a fatal error to direct the developer to the 
> actual problem.
> And, of course, fix the Java 8 error so that the tests pass. Fixing that 
> error is a separate issue. If things were to fail again, we need the above 
> fixes to avoid wasting developer's time finding the problem.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Comment Edited] (DRILL-5090) JDBC tests silently ignore failure to set up test storage plugin

2016-12-01 Thread Paul Rogers (JIRA)

[ 
https://issues.apache.org/jira/browse/DRILL-5090?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15713647#comment-15713647
 ] 

Paul Rogers edited comment on DRILL-5090 at 12/2/16 3:46 AM:
-

Further tests show that the {{StoragePluginRegistryImpl.createPlugins()}} 
method does not load the test bootstrap plugins because the local plugin 
directory already exists: {{/tmp/drill/sys.storage_plugins}}.

Not sure how this could have ever worked if this directory exists and has 
contents:

{code}
cp.sys.drilldfs.sys.drill   s3.sys.drill
{code}

These may have been created when running other unit tests. How are they being 
cleaned up for folks for whom the JDBC unit tests succeed?

Interesting fact: the storage plugin thinks the local storage path is 
{{/tmp/drill/sys.storage_plugins}} while {{TestUtilities.createTempDir();}} in 
the JDBC driver test code sets the temp dir to {{/var/folders/xyz/abc}} where 
xyz and abc are random strings.


was (Author: paul-rogers):
Further tests show that the {{StoragePluginRegistryImpl.createPlugins()}} 
method does not load the test bootstrap plugins because the local plugin 
directory already exists: {{/tmp/drill/sys.storage_plugins}}.

Not sure how this could have ever worked if this directory exists and has 
contents:

{code}
cp.sys.drilldfs.sys.drill   s3.sys.drill
{code}

These may have been created when running other unit tests. How are they being 
cleaned up for folks for whom the JDBC unit tests succeed?

> JDBC tests silently ignore failure to set up test storage plugin
> 
>
> Key: DRILL-5090
> URL: https://issues.apache.org/jira/browse/DRILL-5090
> Project: Apache Drill
>  Issue Type: Bug
>Affects Versions: 1.8.0
>Reporter: Paul Rogers
>
> Run the {{TestJDBCQuery}} test cases using Java 8. The tests will fail with 
> error such as:
> {code}
> VALIDATION ERROR ...
> Current default schema: No default schema selected
> {code}
> The problem is that the tests try to set up a test schema, but fail. The code 
> that does this setup just silently ignores the error:
> {code}
> try {
> TestUtilities.updateDfsTestTmpSchemaLocation(pluginRegistry, 
> tmpDirPath);
> TestUtilities.makeDfsTmpSchemaImmutable(pluginRegistry);
>   }
> } catch(Throwable e) {
>   // ... This is unlikely to
>   // happen, but just a safeguard to avoid failing user applications.
>   logger.warn("Failed to update tmp schema locations. This step is purely 
> for testing purpose. " +
>   "Shouldn't be seen in production code.");
>   // Ignore the error and go with defaults
> }
> {code}
> The reason that the error is ignored is that the JDBC driver _itself_ 
> contains test code in the form of the following check:
> {code}
>   if (props != null && 
> "true".equalsIgnoreCase(props.getProperty("drillJDBCUnitTests"))) {
> {code}
> That is, the JDBC driver itself contains the code needed to set up the test 
> schemas. This means that test code is shipped in production. And, we must 
> handle the failure gracefully in case the user set the property in production.
> Requested changes:
> * Find a way to do test setup without including test code in JDBC.
> * If test setup fails, issue a fatal error to direct the developer to the 
> actual problem.
> And, of course, fix the Java 8 error so that the tests pass. Fixing that 
> error is a separate issue. If things were to fail again, we need the above 
> fixes to avoid wasting developer's time finding the problem.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)