db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mike Matrigali <mikem_...@sbcglobal.net>
Subject Re: [jira] Created: (DERBY-555) Unable to restart after disk is full
Date Fri, 02 Sep 2005 20:34:48 GMT

The stack should help a lot.  Also could you include whether
the log disk was full or not?

It is expected that Derby may not be able to restart if there is
any recovery work to do and there is not disk space available.  Though
a null pointer error from the server would be incorrect.  On restart
recovery Derby may have to write compensation log records to the log,
and Derby does not "reserve" space for future possible log records
(though we do currently preallocate a log file at a time so there
usually is some space available).   When enough space is freed up
by the client the database should boot fine.

Note also that this case is often hard to debug using the derby.log
as often writes to it fail because it is on the same disk with no
disk space available.

Also historically the decision to not reserve log space came when we
did not preallocate any log space.  We could put logic in to try to
guarantee empty space for the maximum possible recovery space needed
after a crash which might help a small number of applications, the
others are just going to crash soon when they need space for their
regular data tables on the full disk.  My opinion would be to do what
it takes to get a reasonable error message to the client, but not
worry too much about being able to boot on a 100% full disk (but it
is important to be able to boot once space is available - also with
derby the client has the choice of freeing space on the db disk or
just copying the whole database/logs to another disk with more space).

We used to test this by using a floppy and filling it up, and then
making sure by hand that database would recover after freeing space and 
booting.  It
is likely it has not been tested with log on separate device and
it also could be a regression as there is not automated test for
this.


Øystein Grøvlen (JIRA) wrote:
> Unable to restart after disk is full
> ------------------------------------
> 
>          Key: DERBY-555
>          URL: http://issues.apache.org/jira/browse/DERBY-555
>      Project: Derby
>         Type: Bug
>   Components: Store  
>     Versions: 10.2.0.0    
>  Environment: Sun Sparc Solaris, 1.4 JDK, Derby Client/Server
>  Reporter: Øystein Grøvlen
>  Assigned to: Øystein Grøvlen 
>     Priority: Critical
> 
> 
> 1. Inserted data into the database until the disk was full. (5 clients inserting into
5 different tables in parallel.)
> 2. Shut down the server
> 3. Start the database again without freeing any disk space.
> 
> When I try to start the database again, I get Null-pointer-exception, regardless of how
I connect (have tried embedded, client server, ij, jdbc applications).  I have not tried to
free some space on the disk before starting.  
> 
> The call stack is not available right now (the computer I used had to be shut down due
to problems with our cooling system), but the exception comes from the following line in RawStore.java:
>      properties.put(Attribute.LOG_DEVICE, logFactory.getCanonicalLogPath());
> 
> getCanonicalLogPath() returns null which results in a NPE in the hash table.
> A quick debug before the computer was stopped, showed that the logFactory was an instance
of org.apache.derby.impl.store.raw.log.ReadOnly which always returns null in its  getCanonicalLogPath().
> 
> I suspect this may be related to the fact that I ran with the log in a non-default location.
> 
> 


Mime
View raw message