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 ka...@apache.org on 2008/04/05 00:24:43 UTC

svn commit: r644961 - in /db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/store/raw/data: AllocPage.java CachedPage.java FileContainer.java PageCreationArgs.java StoredPage.java

Author: kahatlen
Date: Fri Apr  4 15:24:41 2008
New Revision: 644961

URL: http://svn.apache.org/viewvc?rev=644961&view=rev
Log:
DERBY-3589: AllocPage.createPage() doesn't initialize minimumRecordSize correctly

Merged fix from trunk (revision 644620).

Added:
    db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/store/raw/data/PageCreationArgs.java
      - copied unchanged from r644620, db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/PageCreationArgs.java
Modified:
    db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/store/raw/data/AllocPage.java
    db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/store/raw/data/CachedPage.java
    db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/store/raw/data/FileContainer.java
    db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/store/raw/data/StoredPage.java

Modified: db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/store/raw/data/AllocPage.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/store/raw/data/AllocPage.java?rev=644961&r1=644960&r2=644961&view=diff
==============================================================================
--- db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/store/raw/data/AllocPage.java (original)
+++ db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/store/raw/data/AllocPage.java Fri Apr  4 15:24:41 2008
@@ -270,22 +270,13 @@
      *
 	 * @exception  StandardException  Standard exception policy.
      **/
-	protected void createPage(PageKey newIdentity, int[] args) 
+	protected void createPage(PageKey newIdentity, PageCreationArgs args)
 		 throws StandardException
 	{
 
 		super.createPage(newIdentity, args);
 
-		// args[0] is the format id
-		// args[1] is whether to sync the page to disk or not
-		// args[2] is the pagesize (used by StoredPage)
-		// args[3] is the spareSize (used by StoredPage)
-		// args[4] is the number of bytes to reserve for container header
-		// args[5] is the minimumRecordSize
-		// NOTE: the arg list here must match the one in FileContainer
-		int pageSize = args[2];
-		int minimumRecordSize = args[5];
-		borrowedSpace = args[4];
+		borrowedSpace = args.containerInfoSize;
 
 		if (SanityManager.DEBUG)
 		{
@@ -321,7 +312,7 @@
 		// the pages this extent is going to manage starts from pageNum+1
 		// starting physical offset is pageSize*(pageNum+1) since we have
 		// no logical to physical mapping yet...
-		extent = createExtent(newIdentity.getPageNumber()+1, pageSize, 0 /* pagesAlloced */, maxSpace);
+		extent = createExtent(newIdentity.getPageNumber()+1, getPageSize(), 0 /* pagesAlloced */, maxSpace);
 	}
 
 	private AllocExtent createExtent(long pageNum, int pageSize, int pagesAlloced, int availspace)

Modified: db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/store/raw/data/CachedPage.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/store/raw/data/CachedPage.java?rev=644961&r1=644960&r2=644961&view=diff
==============================================================================
--- db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/store/raw/data/CachedPage.java (original)
+++ db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/store/raw/data/CachedPage.java Fri Apr  4 15:24:41 2008
@@ -256,9 +256,10 @@
 
 		PageKey newIdentity = (PageKey) key;
 
-		int[] createArgs = (int[]) createParameter;
+		PageCreationArgs createArgs = (PageCreationArgs) createParameter;
+        int formatId = createArgs.formatId;
 
-		if (createArgs[0] == -1)
+		if (formatId == -1)
         {
 			throw StandardException.newException(
                     SQLState.DATA_UNKNOWN_PAGE_FORMAT, newIdentity);
@@ -267,10 +268,10 @@
 		// createArgs[0] contains the integer form of the formatId 
 		// if it is not the same as this instance's formatId, instantiate the
 		// real page object
-		if (createArgs[0] != getTypeFormatId())
+		if (formatId != getTypeFormatId())
 		{
 			return(
-                changeInstanceTo(createArgs[0], newIdentity).createIdentity(
+                changeInstanceTo(formatId, newIdentity).createIdentity(
                         key, createParameter));
 		}
 		
@@ -296,22 +297,23 @@
 		 *	will be a SYNC call after all the pages are preallocated
 		 * 0 means creating a page that has already been preallocated.
 		 */
-		if ((createArgs[1] & WRITE_SYNC) != 0 ||
-			(createArgs[1] & WRITE_NO_SYNC) != 0)
-			writePage(newIdentity, (createArgs[1] & WRITE_SYNC) != 0);
+        int syncFlag = createArgs.syncFlag;
+		if ((syncFlag & WRITE_SYNC) != 0 ||
+			(syncFlag & WRITE_NO_SYNC) != 0)
+			writePage(newIdentity, (syncFlag & WRITE_SYNC) != 0);
 
 		if (SanityManager.DEBUG)
 		{
 			if (SanityManager.DEBUG_ON(FileContainer.SPACE_TRACE))
 			{
-				String syncFlag = 
-                    ((createArgs[1] & WRITE_SYNC) != 0)     ? "Write_Sync" :
-					(((createArgs[1] & WRITE_NO_SYNC) != 0) ? "Write_NO_Sync" : 
+				String sync =
+                    ((syncFlag & WRITE_SYNC) != 0)     ? "Write_Sync" :
+					(((syncFlag & WRITE_NO_SYNC) != 0) ? "Write_NO_Sync" :
 					                                          "No_write");
 
 				SanityManager.DEBUG(
                     FileContainer.SPACE_TRACE,
-                    "creating new page " + newIdentity + " with " + syncFlag);
+                    "creating new page " + newIdentity + " with " + sync);
 			}
 		}
 
@@ -900,7 +902,7 @@
 
 
 	// create the page
-	protected abstract void createPage(PageKey id, int[] args) 
+	protected abstract void createPage(PageKey id, PageCreationArgs args)
         throws StandardException;
 
 	// page is about to be written, write everything to pageData array

Modified: db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/store/raw/data/FileContainer.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/store/raw/data/FileContainer.java?rev=644961&r1=644960&r2=644961&view=diff
==============================================================================
--- db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/store/raw/data/FileContainer.java (original)
+++ db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/store/raw/data/FileContainer.java Fri Apr  4 15:24:41 2008
@@ -290,12 +290,6 @@
 		CONTAINER_FORMAT_ID_SIZE+4+4+4+4+2+2+8+8+8+8+CHECKSUM_SIZE+8+8;
 
 	/**
-		the number of arguments we need to pass to alloc page for create
-	*/
-	protected static final int STORED_PAGE_ARG_NUM = 5;
-	protected static final int ALLOC_PAGE_ARG_NUM  = 6;
-
-	/**
 	 * where the first alloc page is located - 
 	 * the logical page number and the physical page offset
 	 * NOTE if it is not 0 this is not going to work for Stream 
@@ -1768,13 +1762,13 @@
 			    // 2'nd element is pagesize
 			    // 3'rd element is spareSpace
 
-			    int[] createPageArgs = new int[STORED_PAGE_ARG_NUM];
-			    createPageArgs[0] = StoredPage.FORMAT_NUMBER;
-			    createPageArgs[1] = prealloced ? 
-                                        0 : (noIO ? 0 : CachedPage.WRITE_SYNC);
-			    createPageArgs[2] = pageSize;
-			    createPageArgs[3] = spareSpace;
-			    createPageArgs[4] = minimumRecordSize;
+                PageCreationArgs createPageArgs = new PageCreationArgs(
+                        StoredPage.FORMAT_NUMBER,
+                        prealloced ? 0 : (noIO ? 0 : CachedPage.WRITE_SYNC),
+                        pageSize,
+                        spareSpace,
+                        minimumRecordSize,
+                        0 /* containerInfoSize - unused for StoredPage */);
 
 			    // RESOLVE: right now, there is no re-mapping of pages, so
 			    // pageOffset = pageNumber*pageSize
@@ -1797,7 +1791,7 @@
                         SanityManager.DEBUG_PRINT("FileContainer",
                             "got exception from initPage:"  +
                             "\nreuse = " + reuse +
-                            "\ncreatePageArgs[1] = " + createPageArgs[1] +
+                            "\nsyncFlag = " + createPageArgs.syncFlag +
                             "\nallocPage = " + allocPage
                             );
                     }
@@ -2223,13 +2217,13 @@
 		boolean noIO = (handle.getMode() & ContainerHandle.MODE_UNLOGGED) ==
 			ContainerHandle.MODE_UNLOGGED;
 
-		int[] createAllocPageArgs = new int[ALLOC_PAGE_ARG_NUM];
-		createAllocPageArgs[0] = AllocPage.FORMAT_NUMBER;	
-		createAllocPageArgs[1] = noIO ? 0 : CachedPage.WRITE_SYNC;
-		createAllocPageArgs[2] = pageSize;
-		createAllocPageArgs[3] = 0;		// allocation page has no need for spare
-		createAllocPageArgs[4] = containerInfoSize;
-		createAllocPageArgs[5] = minimumRecordSize;
+		PageCreationArgs createAllocPageArgs = new PageCreationArgs(
+                AllocPage.FORMAT_NUMBER,
+                noIO ? 0 : CachedPage.WRITE_SYNC,
+                pageSize,
+                0,        // allocation page has no need for spare
+                minimumRecordSize,
+                containerInfoSize);
 
 		if (SanityManager.DEBUG)
         {
@@ -2271,7 +2265,7 @@
 
 		@param allochandle the contianer handle to initialize the page with - the ntt
 		@param pkey the page number of the page to be initialized
-		@param createArgs the int array for page creation
+		@param createArgs the arguments for page creation
 		@param reuse is true if we are reusing a page that has 
 				already been initialized once
 
@@ -2279,7 +2273,7 @@
 	*/
 	protected BasePage initPage(BaseContainerHandle allochandle, 
 								PageKey pkey,
-								int[] createArgs,
+								PageCreationArgs createArgs,
 								long pageOffset,
 								boolean reuse,
 								boolean overflow) throws StandardException
@@ -2553,20 +2547,20 @@
 		// no address translation necessary
 		PageKey pkey = new PageKey(identity, pageNumber);
 
-		int[] reCreatePageArgs = null;
+		PageCreationArgs reCreatePageArgs;
 
 		if (pageFormat == StoredPage.FORMAT_NUMBER)
 		{
-			reCreatePageArgs = new int[STORED_PAGE_ARG_NUM];
-			reCreatePageArgs[0] = pageFormat;
-			reCreatePageArgs[1] = CachedPage.WRITE_SYNC;
-			reCreatePageArgs[2] = pageSize;
-			reCreatePageArgs[3] = spareSpace;
-			reCreatePageArgs[4] = minimumRecordSize;
+            reCreatePageArgs = new PageCreationArgs(
+                    pageFormat,
+                    CachedPage.WRITE_SYNC,
+                    pageSize,
+                    spareSpace,
+                    minimumRecordSize,
+                    0 /* containerInfoSize - unused for StoredPage */);
 		}
 		else if (pageFormat == AllocPage.FORMAT_NUMBER)
 		{
-			reCreatePageArgs = new int[ALLOC_PAGE_ARG_NUM];
 
 			// only the first allocation page have borrowed space for the
 			// container info
@@ -2579,13 +2573,14 @@
 				firstAllocPageOffset = pageOffset;
 			}
 
+            reCreatePageArgs = new PageCreationArgs(
+                    pageFormat,
+                    CachedPage.WRITE_SYNC,
+                    pageSize,
+                    0, // allocation page has no need for spare
+                    minimumRecordSize,
+                    containerInfoSize);
 
-			reCreatePageArgs[0] = pageFormat;
-			reCreatePageArgs[1] = CachedPage.WRITE_SYNC;
-			reCreatePageArgs[2] = pageSize;
-			reCreatePageArgs[3] = 0; // allocation page has no need for spare
-			reCreatePageArgs[4] = containerInfoSize;
-			reCreatePageArgs[5] = minimumRecordSize;
 		}
 		else
 		{
@@ -3251,12 +3246,13 @@
 								 "how can we be Preallocating pages in a read only database?");
 
 		// initialize and a new page in cache
-		int[] createArgs = new int[5];
-		createArgs[0] = StoredPage.FORMAT_NUMBER;	// default is a stored page
-		createArgs[1] = CachedPage.WRITE_NO_SYNC;	// write it but no sync
-		createArgs[2] = pageSize;
-		createArgs[3] = spareSpace;
-		createArgs[4] = minimumRecordSize;
+        PageCreationArgs createArgs = new PageCreationArgs(
+                StoredPage.FORMAT_NUMBER, // default is a stored page
+                CachedPage.WRITE_NO_SYNC, // write it but no sync
+                pageSize,
+                spareSpace,
+                minimumRecordSize,
+                0 /* containerInfoSize - unused for StoredPage */);
 
 		StoredPage page = new StoredPage();
 		page.setFactory(dataFactory);

Modified: db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/store/raw/data/StoredPage.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/store/raw/data/StoredPage.java?rev=644961&r1=644960&r2=644961&view=diff
==============================================================================
--- db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/store/raw/data/StoredPage.java (original)
+++ db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/store/raw/data/StoredPage.java Fri Apr  4 15:24:41 2008
@@ -746,23 +746,18 @@
      *
      * @param newIdentity   The key describing page (segment,container,page).
      * @param args          information stored about the page, once in the 
-     *                      container header and passed in through the array.
+     *                      container header and passed in through the object.
      *
 	 * @exception  StandardException  Standard exception policy.
      **/
-	protected void createPage(
-    PageKey newIdentity, 
-    int[]   args) 
+	protected void createPage(PageKey newIdentity, PageCreationArgs args)
 		 throws StandardException
 	{
-		// arg[0] is the formatId of the page
-		// arg[1] is whether to sync the page to disk or not
 
-		int pageSize        = args[2];
-		spareSpace          = args[3];
-		minimumRecordSize   = args[4];
+		spareSpace          = args.spareSpace;
+		minimumRecordSize   = args.minimumRecordSize;
 
-        setPageArray(pageSize);
+        setPageArray(args.pageSize);
 
 		cleanPage();			// clean up the page array