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 mi...@apache.org on 2005/05/25 18:51:45 UTC
svn commit: r178486 -
/incubator/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/log/LogCounter.java
/incubator/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/log/LogToFile.java
Author: mikem
Date: Wed May 25 09:51:44 2005
New Revision: 178486
URL: http://svn.apache.org/viewcvs?rev=178486&view=rev
Log:
Attached patch increases the maximum possible log file number to 231 -1 and keeps the old limit of 222-1 on soft upgrade.
Earlier patch for this problem increased it to 233 -1 , but that fix created upgrade problems because of the additional bits
that are used from the file position field, so the limit is being reduced to 231-1.
committed on behalf of: suresh.thalamati@gmail.com
Modified:
incubator/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/log/LogCounter.java
incubator/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/log/LogToFile.java
Modified: incubator/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/log/LogCounter.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/log/LogCounter.java?rev=178486&r1=178485&r2=178486&view=diff
==============================================================================
--- incubator/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/log/LogCounter.java (original)
+++ incubator/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/log/LogCounter.java Wed May 25 09:51:44 2005
@@ -60,18 +60,18 @@
/** A well defined value of an invalid log instant. */
public static final long INVALID_LOG_INSTANT = 0;
+
+ // max possible log file number in versions before 10.1 is 2^22 -1
+ public static final long DERBY_10_0_MAX_LOGFILE_NUMBER = (long)0x003FFFFFL; // 4194303
+ // max possible log file number is 2^31 -1
+ public static final long MAX_LOGFILE_NUMBER = (long)0x7FFFFFFFL; // 2147483647
+ // lower end of 32 bits in long type are used to store the log file position
+ private static final long FILE_NUMBER_SHIFT = 32;
-
- // max possible log file number is 2^33 -1 (8589934591)
- public static final long MAX_LOGFILE_NUMBER = (long)0x1FFFFFFFFL;
-
- // lower end of 30 bits in long type are used to store the log file position
- private static final long FILE_NUMBER_SHIFT = 30;
-
- // reserve top 2 bits in log file size for future use
+ // reserve top 4 bits in log file size for future use
public static final long MAX_LOGFILE_SIZE = (long)0x0FFFFFFFL; // 268435455
- // 30 bits are used to store the log file postion
- private static final long FILE_POSITION_MASK = (long)0x3FFFFFFFL;
+ // 32 bits are used to store the log file postion
+ private static final long FILE_POSITION_MASK = (long)0x7FFFFFFFL;
private long fileNumber;
private long filePosition;
Modified: incubator/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/log/LogToFile.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/log/LogToFile.java?rev=178486&r1=178485&r2=178486&view=diff
==============================================================================
--- incubator/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/log/LogToFile.java (original)
+++ incubator/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/log/LogToFile.java Wed May 25 09:51:44 2005
@@ -333,7 +333,7 @@
// must be synchronized with this to access
// or change.
-
+ private long maxLogFileNumber = LogCounter.MAX_LOGFILE_NUMBER;
private CheckpointOperation currentCheckpoint;
// last checkpoint successfully taken
//
@@ -1831,11 +1831,11 @@
// used.
StorageFile newLogFile = getLogFileName(logFileNumber+1);
- if (logFileNumber+1 >= LogCounter.MAX_LOGFILE_NUMBER)
+ if (logFileNumber+1 >= maxLogFileNumber)
{
throw StandardException.newException(
SQLState.LOG_EXCEED_MAX_LOG_FILE_NUMBER,
- new Long(LogCounter.MAX_LOGFILE_NUMBER));
+ new Long(maxLogFileNumber));
}
StorageRandomAccessFile newLog = null; // the new log file
@@ -3059,6 +3059,21 @@
{
throw Monitor.exceptionStartingModule(ioe);
}
+
+ // Number of the log file that can be created in Derby is increased from
+ // 2^22 -1 to 2^31 -1 in version 10.1. But if the database is running on
+ // engines 10.1 or above on a softupgrade from versions 10.0 or
+ // before, the max log file number that can be created is
+ // still limited to 2^22 -1, because users can revert back to older versions
+ // which does not have logic to handle a log file number greater than
+ // 2^22-1.
+
+ // set max possible log file number to derby 10.0 limit, if the database is not
+ // fully upgraded to or created in version 10.1 or above.
+ if (!checkVersion(RawStoreFactory.DERBY_STORE_MAJOR_VERSION_10,
+ RawStoreFactory.DERBY_STORE_MINOR_VERSION_1))
+ maxLogFileNumber = LogCounter.DERBY_10_0_MAX_LOGFILE_NUMBER;
+
} // end of boot
private void getLogStorageFactory() throws StandardException