You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by Suresh Thalamati <su...@gmail.com> on 2005/04/30 01:15:40 UTC

[PATCH] fix for DERBY-235 ( unable to create a database using a different storage factory than the one provided by default with the engine)

Problem was service name on database creation  was getting just set to 
the canonical name of the database directory
without subsub protocol name added in the beginning. Whereas rest of the 
system seems to expect that the
subsub protocol name  also is part of the  service  name.  For example 
if "csf" is  subprotocol name ,
service name should be  "csf:C:\suresht\databases\wombat1" not just 
"C:\suresht\databases\wombat1".
Attached diff fixes the problem by  prefixing the subsub protocol name  
to the canonical name, to generate
the service name in the case of create also.

This was not an issue with default "directory"  subsub protocol because 
the system consistently generates
the service name as just the canonical name of  the service root.

Another doubt I had while fixing this issue why we generate the service 
name after creating the service root,
my guess is because of the following comment in the java docs for 
java.io.File.getCanonicalPath() method:
" Every pathname that denotes an existing file or directory has a unique 
canonical form. Every pathname that
 denotes a nonexistent file or directory also has a unique canonical 
form. The canonical form of the pathname of a
 nonexistent file or directory may be different  from the canonical form 
of the same pathname after the file or
directory is created. Similarly, the canonical form of the pathname of 
an existing file or directory may be different from the
canonical form of the same pathname after the file or directory is deleted.
"

Tests:  Ran derbyall ; all tests passed.


Thanks
-suresh


Re: [PATCH] fix for DERBY-235 ( unable to create a database using a different storage factory than the one provided by default with the engine)

Posted by Mike Matrigali <mi...@sbcglobal.net>.
committed this patch with svn 165645

Suresh Thalamati wrote:
> 
> Problem was service name on database creation  was getting just set to 
> the canonical name of the database directory
> without subsub protocol name added in the beginning. Whereas rest of the 
> system seems to expect that the
> subsub protocol name  also is part of the  service  name.  For example 
> if "csf" is  subprotocol name ,
> service name should be  "csf:C:\suresht\databases\wombat1" not just 
> "C:\suresht\databases\wombat1".
> Attached diff fixes the problem by  prefixing the subsub protocol name  
> to the canonical name, to generate
> the service name in the case of create also.
> 
> This was not an issue with default "directory"  subsub protocol because 
> the system consistently generates
> the service name as just the canonical name of  the service root.
> 
> Another doubt I had while fixing this issue why we generate the service 
> name after creating the service root,
> my guess is because of the following comment in the java docs for 
> java.io.File.getCanonicalPath() method:
> " Every pathname that denotes an existing file or directory has a unique 
> canonical form. Every pathname that
> denotes a nonexistent file or directory also has a unique canonical 
> form. The canonical form of the pathname of a
> nonexistent file or directory may be different  from the canonical form 
> of the same pathname after the file or
> directory is created. Similarly, the canonical form of the pathname of 
> an existing file or directory may be different from the
> canonical form of the same pathname after the file or directory is deleted.
> "
> 
> Tests:  Ran derbyall ; all tests passed.
> 
> 
> Thanks
> -suresh
> 
> 
> ------------------------------------------------------------------------
> 
> Index: java/engine/org/apache/derby/impl/services/monitor/PersistentServiceImpl.java
> ===================================================================
> --- java/engine/org/apache/derby/impl/services/monitor/PersistentServiceImpl.java	(revision 165030)
> +++ java/engine/org/apache/derby/impl/services/monitor/PersistentServiceImpl.java	(working copy)
> @@ -629,7 +629,15 @@
>  		Throwable t = null;
>          try
>          {
> -            return (String) AccessController.doPrivileged(
> +			String protocolLeadIn = "";
> +			//prepend the subsub protocol name to the storage factoty canonical
> +			//name to form the service name except in case of the the 
> +			//default subsubprototcol(PersistentService.DIRECTORY)
> +
> +			if (!(getType().equals( PersistentService.DIRECTORY))) 
> +				protocolLeadIn = getType() + ":";
> +
> +            return protocolLeadIn + (String) AccessController.doPrivileged(
>                  new PrivilegedExceptionAction()
>                  {
>                      public Object run()