You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by my...@apache.org on 2014/06/06 02:18:16 UTC

svn commit: r1600794 - in /db/derby/code/branches/10.10: ./ java/engine/org/apache/derby/impl/store/raw/data/ java/engine/org/apache/derby/loc/ java/shared/org/apache/derby/shared/common/reference/ java/testing/org/apache/derbyTesting/functionTests/tes...

Author: myrnavl
Date: Fri Jun  6 00:18:15 2014
New Revision: 1600794

URL: http://svn.apache.org/r1600794
Log:
DERBY-6504; change AllocPage.ReadContainerInfo to catch ArrayIndexOutOfBoundsException and turn it into Derby error.
   backport of revision 1600417 and revision 1600721 from trunk

Modified:
    db/derby/code/branches/10.10/   (props changed)
    db/derby/code/branches/10.10/java/engine/org/apache/derby/impl/store/raw/data/AllocPage.java
    db/derby/code/branches/10.10/java/engine/org/apache/derby/loc/messages.xml
    db/derby/code/branches/10.10/java/shared/org/apache/derby/shared/common/reference/SQLState.java
    db/derby/code/branches/10.10/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ErrorCodeTest.java

Propchange: db/derby/code/branches/10.10/
------------------------------------------------------------------------------
  Merged /db/derby/code/trunk:r1600417,1600721

Modified: db/derby/code/branches/10.10/java/engine/org/apache/derby/impl/store/raw/data/AllocPage.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.10/java/engine/org/apache/derby/impl/store/raw/data/AllocPage.java?rev=1600794&r1=1600793&r2=1600794&view=diff
==============================================================================
--- db/derby/code/branches/10.10/java/engine/org/apache/derby/impl/store/raw/data/AllocPage.java (original)
+++ db/derby/code/branches/10.10/java/engine/org/apache/derby/impl/store/raw/data/AllocPage.java Fri Jun  6 00:18:15 2014
@@ -596,6 +596,7 @@ public class AllocPage extends StoredPag
 	*/
 	public static void ReadContainerInfo(byte[] containerInfo,
 										 byte[] epage)
+	throws StandardException
 	{
 		int N = (int)epage[BORROWED_SPACE_OFFSET];
 
@@ -612,8 +613,30 @@ public class AllocPage extends StoredPag
 		}
 
 		if (N != 0)
-			System.arraycopy(epage, BORROWED_SPACE_OFFSET+BORROWED_SPACE_LEN,
-							 containerInfo, 0, N);
+		{
+		    try {
+		        System.arraycopy(
+		                epage, BORROWED_SPACE_OFFSET+BORROWED_SPACE_LEN,
+						containerInfo, 0, N);
+		    }  catch (ArrayIndexOutOfBoundsException ioobe) {
+                throw StandardException.newException (
+                    SQLState.DATA_UNEXPECTED_EXCEPTION, 
+                        StandardException.newException (
+                            SQLState.UNABLE_TO_ARRAYCOPY,
+                            ioobe,
+                            new Integer(epage.length),
+                            new Integer(containerInfo.length),
+                            new Integer(MAX_BORROWED_SPACE),
+                            new Integer(BORROWED_SPACE_OFFSET),
+                            new Integer(BORROWED_SPACE_LEN),
+                            new Integer(BORROWED_SPACE_OFFSET + BORROWED_SPACE_LEN),
+                            new Integer(N),
+                            org.apache.derby.iapi.util.StringUtil.hexDump(
+                                    epage)
+                        )
+                );
+		    }
+		} 
 	}
 
 

Modified: db/derby/code/branches/10.10/java/engine/org/apache/derby/loc/messages.xml
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.10/java/engine/org/apache/derby/loc/messages.xml?rev=1600794&r1=1600793&r2=1600794&view=diff
==============================================================================
--- db/derby/code/branches/10.10/java/engine/org/apache/derby/loc/messages.xml (original)
+++ db/derby/code/branches/10.10/java/engine/org/apache/derby/loc/messages.xml Fri Jun  6 00:18:15 2014
@@ -5940,6 +5940,19 @@ ln=lower-case two-letter ISO-639 languag
             </msg>
 
             <msg>
+                <name>XSDG4.D</name>
+                <text>Unrecoverable internal error encountered while attempting to read low level metadata about the table or index. Please provide your support organization with the following exception information: Failed: arraycopy of embryonic page byte[{0}] to container information byte[{1}]. Values of variables and constants: MAX_BORROWED_SPACE: {2}, BORROWED_SPACE_OFFSET({3}) + BORROWED_SPACE_LENG({4}) = {5}; arraycopylength: {6}; embryonic page {7}.</text>
+                <arg>pageArrayLength</arg>
+                <arg>containerArrayLength</arg>
+                <arg>maxBorrowedSpace</arg>
+                <arg>borrowedSpaceOffset</arg>
+                <arg>borrowedSpaceLength</arg>
+                <arg>arraycopySourcePosition</arg>
+                <arg>maxBorrowableSpace</arg>
+                <arg>hexdump</arg>
+            </msg>
+
+            <msg>
                 <name>XSDG5.D</name>
                 <text>Database is not in create mode when createFinished is called.</text>
             </msg>

Modified: db/derby/code/branches/10.10/java/shared/org/apache/derby/shared/common/reference/SQLState.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.10/java/shared/org/apache/derby/shared/common/reference/SQLState.java?rev=1600794&r1=1600793&r2=1600794&view=diff
==============================================================================
--- db/derby/code/branches/10.10/java/shared/org/apache/derby/shared/common/reference/SQLState.java (original)
+++ db/derby/code/branches/10.10/java/shared/org/apache/derby/shared/common/reference/SQLState.java Fri Jun  6 00:18:15 2014
@@ -540,6 +540,7 @@ public interface SQLState {
 	String FILE_WRITE_PAGE_EXCEPTION                            = "XSDG1.D";
 	String FILE_BAD_CHECKSUM                                    = "XSDG2.D";
 	String FILE_CONTAINER_EXCEPTION                             = "XSDG3.D";
+    String UNABLE_TO_ARRAYCOPY                                  = "XSDG4.D";
 	String FILE_DATABASE_NOT_IN_CREATE                          = "XSDG5.D";
 	String DATA_DIRECTORY_NOT_FOUND_IN_BACKUP                   = "XSDG6.D";
 	String UNABLE_TO_REMOVE_DATA_DIRECTORY                      = "XSDG7.D";

Modified: db/derby/code/branches/10.10/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ErrorCodeTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.10/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ErrorCodeTest.java?rev=1600794&r1=1600793&r2=1600794&view=diff
==============================================================================
--- db/derby/code/branches/10.10/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ErrorCodeTest.java (original)
+++ db/derby/code/branches/10.10/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ErrorCodeTest.java Fri Jun  6 00:18:15 2014
@@ -219,6 +219,7 @@ public final class ErrorCodeTest extends
         		{"XSDG1","Page {0} could not be written to disk, please check if the disk is full, or if a file system limit, such as a quota or a maximum file size, has been reached.","45000"},
         		{"XSDG2","Invalid checksum on Page {0}, expected={1}, on-disk version={2}, page dump follows: {3}","45000"},
         		{"XSDG3","Meta-data for {0} could not be accessed to {1} {2}","45000"},
+                {"XSDG4","Unrecoverable internal error encountered while attempting to read low level metadata about the table or index. Please provide your support organization with the following exception information: Failed: arraycopy of embryonic page byte[{0}] to container information byte[{1}]. Values of variables and constants: MAX_BORROWED_SPACE: {2}, BORROWED_SPACE_OFFSET({3}) + BORROWED_SPACE_LENG({4}) = {5}; arraycopylength: {6}; embryonic page {7}.","45000"},
         		{"XSDG5","Database is not in create mode when createFinished is called.","45000"},
         		{"XSDG6","Data segment directory not found in {0} backup during restore. Please make sure that backup copy is the right one and it is not corrupted.","45000"},
         		{"XSDG7","Directory {0} could not be removed during restore. Please make sure that permissions are correct.","45000"},