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 2006/09/19 16:24:45 UTC
svn commit: r447856 -
/db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/RAFContainer.java
Author: kahatlen
Date: Tue Sep 19 07:24:45 2006
New Revision: 447856
URL: http://svn.apache.org/viewvc?view=rev&rev=447856
Log:
DERBY-801 (partial) Allow parallel access to data files
Backing out the patch for DERBY-733 as it is not needed anymore and
the code is cleaner without it.
Modified:
db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/RAFContainer.java
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/RAFContainer.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/RAFContainer.java?view=diff&rev=447856&r1=447855&r2=447856
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/RAFContainer.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/data/RAFContainer.java Tue Sep 19 07:24:45 2006
@@ -55,8 +55,6 @@
import java.security.AccessController;
import java.security.PrivilegedExceptionAction;
import java.security.PrivilegedActionException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Constructor;
/**
RAFContainer (short for RandomAccessFileContainer) is a concrete subclass of FileContainer
@@ -97,43 +95,6 @@
private boolean inBackup = false;
private boolean inRemove = false;
- /* Fields with references to classes and methods in ReentrantLock
- * introduced in Java 1.5. Reflection is used to only use these
- * interfaces if they exist.
- *
- */
- private static Class fairLockClass;
- private static Constructor fairLockConstructor;
- private static Method lock;
- private static Method unlock;
- private static boolean hasJava5FairLocks = false;
-
- // Use reflection to find the constructor, lock() and unlock() in
- // java.util.concurrent.locks.ReentrantLock. If the class and its
- // methods are found, hasJava5FairLocks will be true and fair
- // locking can be used.
- static {
- try {
- fairLockClass =
- Class.forName("java.util.concurrent.locks.ReentrantLock");
-
- fairLockConstructor =
- fairLockClass.getConstructor(new Class[] { Boolean.TYPE });
-
- lock = fairLockClass.getMethod("lock", new Class[0]);
- unlock = fairLockClass.getMethod("unlock", new Class[0]);
- hasJava5FairLocks = true;
- }
- catch (NoSuchMethodException nsme) {}
- catch (ClassNotFoundException cnfe) {}
- }
-
- /**
- * Object of type java.util.concurrent.locks.ReentrantLock. It is
- * used to prevent starvation when many threads are reading from
- * the same file.
- */
- private Object fairLock;
/*
* Constructors
@@ -141,24 +102,6 @@
RAFContainer(BaseDataFileFactory factory) {
super(factory);
-
- // If Java 1.5 fair locks are available, construct one.
- if (hasJava5FairLocks) {
- try {
- // construct a lock with fairness set to true
- fairLock =
- fairLockConstructor.newInstance(
- new Object[] { Boolean.TRUE });
- } catch (Exception e) {
- // couldn't construct the lock, fall back to old behaviour
-
- hasJava5FairLocks = false;
- if (SanityManager.DEBUG) {
- SanityManager.THROWASSERT(
- "failed constructing ReentrantLock", e);
- }
- }
- }
}
/*
@@ -286,51 +229,11 @@
long pageOffset = pageNumber * pageSize;
- // Use Java 1.5 fair locks if they are available.
- if (hasJava5FairLocks) {
- try {
- lock.invoke(fairLock, null);
- } catch (Exception e) {
- // Something bad happened while trying to lock the
- // region. Since the locking is not required for
- // anything other than ensuring fairness, it is ok to
- // fall back to pre-1.5 behaviour.
- hasJava5FairLocks = false;
- if (SanityManager.DEBUG) {
- SanityManager.THROWASSERT(
- "failed invoking ReentrantLock.lock()", e);
- }
- }
- }
+ synchronized (this) {
- try {
- // Starvation might occur at this point if many threads
- // are waiting for the monitor. This section is therefore
- // surrounded by calls to ReentrantLock.lock()/unlock() if
- // we are running Java 1.5 or higher.
- synchronized (this) {
- fileData.seek(pageOffset);
- fileData.readFully(pageData, 0, pageSize);
- }
- } finally {
- // Unlock this section.
- if (hasJava5FairLocks) {
- try {
- unlock.invoke(fairLock, null);
- } catch (Exception e) {
- // An error occurred while unlocking the
- // region. The region might still be locked, so
- // we'd better stop using this kind of
- // locking. There will be no loss of
- // functionality, only a possible loss of
- // fairness.
- hasJava5FairLocks = false;
- if (SanityManager.DEBUG) {
- SanityManager.THROWASSERT(
- "failed invoking ReentrantLock.unlock()", e);
- }
- }
- }
+ fileData.seek(pageOffset);
+
+ fileData.readFully(pageData, 0, pageSize);
}
if (dataFactory.databaseEncrypted() &&