[ 
https://issues.apache.org/jira/browse/DERBY-5994?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Kathey Marsden updated DERBY-5994:
----------------------------------

    Attachment: Derby5994Repro.java

Hi Oskar, 

The attached program ReproDerby5594.java tries the double shutdown 
1) With the client driver in the same jvm
2) With the client driver in a different jvm
3) With the embedded driver 

Which driver is used is determined by the URL. jdbc:derby:wombat;shutdown=true 
(embedded) jdbc:derby:wombat://localhost:1527/wombat;shutdown=true (client)


I see a difference in SQState for the Client and Embedded Drivers but I think 
the Client driver is consistent whether in the same JVM or a different one.

The output is as follows:

~/repro/derby-5994 $java Derby5994Repro


SAME JVM CLIENT BOOT THEN SHUTDOWN TWICE
Fri Nov 16 14:42:47 PST 2012 : Apache Derby Network Server - 10.8.3.1 - 
(1407442M) started and ready to accept conne
ns on port 1527
Booting wombat database
Shutdown database once:
SQLState=08006DERBY SQL error: SQLCODE: -1, SQLSTATE: 08006, SQLERRMC: Database 
'wombat' shutdown.
Shutdown database again:
SQLState=08004The connection was refused because the database 
wombat;shutdown=true was not found.


OTHER JVM CLIENT BOOT THEN SHUTDOWN TWICE
exitValue =0 process output =Booting wombat database
Shutdown database once:
SQLState=08006DERBY SQL error: SQLCODE: -1, SQLSTATE: 08006, SQLERRMC: Database 
'wombat' shutdown.
Shutdown database again:
SQLState=08004The connection was refused because the database 
wombat;shutdown=true was not found.



EMBEDDED BOOT AND SHUTDOWN TWICE
Booting wombat database
Embedded Shutdown database once:
SQLState=08006Database 'wombat' shutdown.
Embedded Shutdown database again:
SQLState=XJ004Database 'wombat' not found.
Fri Nov 16 14:42:51 PST 2012 : Apache Derby Network Server - 10.8.3.1 - 
(1407442M) shutdown
~/repro/derby-5994 $javac -g Derby5994Repro.java
~/repro/derby-5994 $java Derby5994Repro


SAME JVM CLIENT BOOT THEN SHUTDOWN TWICE
Fri Nov 16 14:43:24 PST 2012 : Apache Derby Network Server - 10.8.3.1 - 
(1407442M) started and ready to accept conne
ns on port 1527
Booting wombat database
Shutdown database once:
SQLState=08006DERBY SQL error: SQLCODE: -1, SQLSTATE: 08006, SQLERRMC: Database 
'wombat' shutdown.
Shutdown database again:
SQLState=08004The connection was refused because the database 
wombat;shutdown=true was not found.


OTHER JVM CLIENT BOOT THEN SHUTDOWN TWICE
exitValue =0 process output =Booting wombat database
Shutdown database once:
SQLState=08006DERBY SQL error: SQLCODE: -1, SQLSTATE: 08006, SQLERRMC: Database 
'wombat' shutdown.
Shutdown database again:
SQLState=08004The connection was refused because the database 
wombat;shutdown=true was not found.



EMBEDDED BOOT THEN SHUTDOWN TWICE
Booting wombat database
Embedded Shutdown database once:
SQLState=08006Database 'wombat' shutdown.
Embedded Shutdown database again:
SQLState=XJ004Database 'wombat' not found.
Fri Nov 16 14:43:28 PST 2012 : Apache Derby Network Server - 10.8.3.1 - 
(1407442M) shutdown


                
> Different SQL State is returned when executing "shutdown=true" - locally or 
> remotely using ClientDriver
> -------------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-5994
>                 URL: https://issues.apache.org/jira/browse/DERBY-5994
>             Project: Derby
>          Issue Type: Bug
>          Components: JDBC, Network Client, Network Server, Replication
>    Affects Versions: 10.8.2.2
>         Environment: Derby Embedded Network Server - Not specific to 
> operating systems, software platforms or hardware specifications.
>            Reporter: Oskar Zinger
>         Attachments: Derby5994Repro.java
>
>
> Different SQL State is returned when executing "shutdown=true" Derby URL 
> attribute while executing the shutdown Database connection locally or 
> remotely. Note: in both cases the client driver is used: 
> "org.apache.derby.jdbc.ClientDriver"
> Here is some background information:
> - Using the embedded Derby Network Server deployment (derbynet.jar)
> - Using the JDBC Derby Client (derbyclient.jar)
> - Using the Derby Engine (derby.jar)
> Note: in both cases the client driver is used: 
> "org.apache.derby.jdbc.ClientDriver". The only difference is the URL, when 
> host and port is not specified execution happens in the same JVM (local), 
> when host and port is specified execution happens into another JVM (remote).
> When executing the following - if database has not been booted yet (or 
> already shutdown) - the SQL State Code is "XJ004":
>   
> DriverManager.getConnection("jdbc:derby:MyDatabase;shutdown=true;deregister=false",
>  user, pass);
> When executing the following - if database has not been booted yet (or 
> already shutdown) - the SQL State Code is "08004":
>   
> DriverManager.getConnection("jdbc:derby://myhost.mycompany.net:1527/MyDatabase;shutdown=true;deregister=false",
>  user, pass);
> The SQL State Code of "08004" usually is returned with an SQL Exception if 
> "User Authentication is Invalid" for example username and / or password is 
> incorrect.
> Here is the error message: 
> Error Code: '40000', SQL State Code: '08004' and Exception: 
> 'java.sql.SQLNonTransientConnectionException: The connection was refused 
> because the database <database_name>;shutdown=true;deregister=false was not 
> found.'
> Separately, the error message "database was not found" is actually misleading 
> because the database actually does exist and it just has not been been booted 
> yet, or it has already been shutdown. The Derby Network Server has not been 
> shutdown, only the database and it is possible to check if the database 
> exists on the file system.
> The reason why this is important is because when using Derby Replication, 
> when replication is started - the databases must be identical and in sync, so 
> the database must be shutdown cleanly, copied over, and replication will be 
> started. Since the Salve Derby must start before Master Derby, it is required 
> to be able to remotely shutdown the Master Derby database from the Slave 
> Derby instance (host).

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to