Main Page | Packages | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

org.objectweb.cjdbc.controller.scheduler.AbstractScheduler Class Reference

Inheritance diagram for org.objectweb.cjdbc.controller.scheduler.AbstractScheduler:

Inheritance graph
[legend]
List of all members.

Public Member Functions

 AbstractScheduler (int raidbLevel, int parsingGranularity)
final void initializeTransactionId (long transactionId)
final int getParsingGranularity ()
final void setParsingGranularity (int parsingGranularity)
final int getPendingWrites ()
final int getRAIDbLevel ()
final void setRAIDbLevel (int raidbLevel)
void setDatabaseSchema (DatabaseSchema dbs)
void mergeDatabaseSchema (DatabaseSchema dbs)
abstract void scheduleReadRequest (SelectRequest request) throws SQLException
abstract void readCompletedNotify (SelectRequest request)
final void readCompleted (SelectRequest request)
final void scheduleWriteRequest (AbstractWriteRequest request) throws SQLException, RollbackException
abstract void scheduleNonSuspendedWriteRequest (AbstractWriteRequest request) throws SQLException, RollbackException
final void writeCompleted (AbstractWriteRequest request)
abstract void notifyWriteCompleted (AbstractWriteRequest request)
final long begin (TransactionMarkerMetaData tm) throws SQLException
final void beginCompleted (long transactionId)
final void commit (TransactionMarkerMetaData tm) throws SQLException
final void commitCompleted (long transactionId)
final void rollback (TransactionMarkerMetaData tm) throws SQLException
final void rollbackCompleted (long transactionId)
final void suspendNewTransactionsForCheckpoint () throws SQLException
final void resumeNewTransactions ()
void suspendWrites () throws SQLException
void resumeWrites ()
String getXml ()
String[] getSchedulerData ()
int getNumberRead ()
int getNumberWrite ()
int getPendingTransactions ()
boolean isSuspendedTransactions ()
boolean isSuspendedWrites ()

Protected Member Functions

boolean hasSQLMacros (AbstractRequest request)
abstract void commitTransaction (long transactionId)
abstract void rollbackTransaction (long transactionId)
abstract String getXmlImpl ()

Protected Attributes

int raidbLevel
int parsingGranularity

Static Protected Attributes

Trace logger

Detailed Description

The Request Scheduler should schedule the request according to a given policy.

The requests comes from the Request Controller and are sent later to the next ccontroller omponents (cache and load balancer).

Author:
Emmanuel Cecchet
Version:
1.0

Definition at line 50 of file AbstractScheduler.java.


Constructor & Destructor Documentation

org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.AbstractScheduler int  raidbLevel,
int  parsingGranularity
 

Default scheduler to assign scheduler RAIDb level, needed granularity and SQL macro handling (on the fly instanciation of NOW(), RAND(), ...).

Parameters:
raidbLevel RAIDb level of this scheduler
parsingGranularity Parsing granularity needed by the scheduler

Definition at line 99 of file AbstractScheduler.java.

00100   {
00101     this.raidbLevel = raidbLevel;
00102     this.parsingGranularity = parsingGranularity;
00103     this.tid = 0;
00104     this.pendingTransactions = 0;
00105     this.pendingWrites = 0;
00106   }


Member Function Documentation

final long org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.begin TransactionMarkerMetaData  tm  )  throws SQLException
 

Begin a new transaction and return the corresponding transaction identifier. This method is called from the driver when setAutoCommit(false) is called.

Parameters:
tm The transaction marker metadata
Returns:
the transaction identifier
Exceptions:
SQLException if an error occurs

Definition at line 371 of file AbstractScheduler.java.

References org.objectweb.cjdbc.common.sql.AbstractRequest.getTimeout(), and org.objectweb.cjdbc.common.sql.AbstractRequest.setTimeout().

Referenced by org.objectweb.cjdbc.controller.requestmanager.distributed.DistributedRequestManager.begin(), and org.objectweb.cjdbc.controller.requestmanager.distributed.DistributedRequestManager.lazyTransactionStart().

00372   {
00373     // Check if writes are suspended
00374     synchronized (writesSync)
00375     {
00376       if (suspendedWrites)
00377       {
00378         try
00379         {
00380           // Wait on writesSync
00381           long timeout = tm.getTimeout();
00382           if (timeout > 0)
00383           {
00384             long start = System.currentTimeMillis();
00385             writesSync.wait(timeout);
00386             long end = System.currentTimeMillis();
00387             long remaining = timeout - (end - start);
00388             if (remaining > 0)
00389               tm.setTimeout(remaining);
00390             else
00391             {
00392               String msg = Translate.get("scheduler.begin.timeout.writeSync");
00393               logger.warn(msg);
00394               throw new SQLException(msg);
00395             }
00396           }
00397           else
00398             writesSync.wait();
00399         }
00400         catch (InterruptedException e)
00401         {
00402           String msg = Translate.get("scheduler.begin.timeout.writeSync")
00403               + " (" + e + ")";
00404           logger.error(msg);
00405           throw new SQLException(msg);
00406         }
00407       }
00408       pendingWrites++;
00409     }
00410 
00411     // Check if transactions are suspended
00412     synchronized (transactionSync)
00413     {
00414       if (suspendedTransactions)
00415         try
00416         {
00417           // Wait on transactionSync
00418           long timeout = tm.getTimeout();
00419           if (timeout > 0)
00420           {
00421             long start = System.currentTimeMillis();
00422             transactionSync.wait(timeout);
00423             long end = System.currentTimeMillis();
00424             long remaining = timeout - (end - start);
00425             if (remaining > 0)
00426               tm.setTimeout(remaining);
00427             else
00428             {
00429               String msg = Translate
00430                   .get("scheduler.begin.timeout.transactionSync");
00431               logger.warn(msg);
00432               throw new SQLException(msg);
00433             }
00434           }
00435           else
00436             transactionSync.wait();
00437         }
00438         catch (InterruptedException e)
00439         {
00440           String msg = Translate.get("scheduler.begin.timeout.transactionSync")
00441               + " (" + e + ")";
00442           logger.error(msg);
00443           throw new SQLException(msg);
00444         }
00445       tid++;
00446       pendingTransactions++;
00447       return tid;
00448     }
00449   }

final void org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.beginCompleted long  transactionId  ) 
 

Notify the completion of a begin command.

Parameters:
transactionId of the completed begin

Definition at line 456 of file AbstractScheduler.java.

Referenced by org.objectweb.cjdbc.controller.requestmanager.distributed.DistributedRequestManager.begin(), and org.objectweb.cjdbc.controller.requestmanager.distributed.DistributedRequestManager.lazyTransactionStart().

00457   {
00458     // Take care of suspended write
00459     synchronized (writesSync)
00460     {
00461       pendingWrites--;
00462 
00463       // It this is the last write to complete and writes are
00464       // suspended we have to notify suspendedWrites()
00465       if (suspendedWrites && (pendingWrites == 0))
00466       {
00467         synchronized (endOfCurrentWrites)
00468         {
00469           endOfCurrentWrites.notifyAll();
00470         }
00471       }
00472     }
00473   }

final void org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.commit TransactionMarkerMetaData  tm  )  throws SQLException
 

Commit a transaction.

Calls the implementation specific commitTransaction()

Parameters:
tm The transaction marker metadata
Exceptions:
SQLException if an error occurs
See also:
commitTransaction(long)

Definition at line 484 of file AbstractScheduler.java.

References org.objectweb.cjdbc.common.sql.AbstractRequest.getTimeout(), and org.objectweb.cjdbc.common.sql.AbstractRequest.setTimeout().

00485   {
00486     // Check if writes are suspended
00487     synchronized (writesSync)
00488     {
00489       if (suspendedWrites)
00490       {
00491         try
00492         {
00493           // Wait on writesSync
00494           long timeout = tm.getTimeout();
00495           if (timeout > 0)
00496           {
00497             long start = System.currentTimeMillis();
00498             writesSync.wait(timeout);
00499             long end = System.currentTimeMillis();
00500             long remaining = timeout - (end - start);
00501             if (remaining > 0)
00502               tm.setTimeout(remaining);
00503             else
00504             {
00505               String msg = Translate.get("scheduler.commit.timeout.writeSync");
00506               logger.warn(msg);
00507               throw new SQLException(msg);
00508             }
00509           }
00510           else
00511             writesSync.wait();
00512         }
00513         catch (InterruptedException e)
00514         {
00515           String msg = Translate.get("scheduler.commit.timeout.writeSync")
00516               + " (" + e + ")";
00517           logger.error(msg);
00518           throw new SQLException(msg);
00519         }
00520       }
00521       pendingWrites++;
00522     }
00523     commitTransaction(tm.getTransactionId());
00524   }

final void org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.commitCompleted long  transactionId  ) 
 

Notify the completion of a commit command.

Parameters:
transactionId of the completed commit

Definition at line 539 of file AbstractScheduler.java.

00540   {
00541     // Take care of suspended transactions
00542     synchronized (transactionSync)
00543     {
00544       pendingTransactions--;
00545 
00546       // If it is the last pending transaction to complete and we
00547       // are waiting for pending transactions to complete, then wake
00548       // up suspendNewTransactionsForCheckpoint()
00549       if (suspendedTransactions && (pendingTransactions == 0))
00550       {
00551         synchronized (endOfCurrentTransactions)
00552         {
00553           endOfCurrentTransactions.notifyAll();
00554         }
00555       }
00556     }
00557     // Take care of suspended write
00558     synchronized (writesSync)
00559     {
00560       pendingWrites--;
00561 
00562       // It this is the last write to complete and writes are
00563       // suspended we have to notify suspendedWrites()
00564       if (suspendedWrites && (pendingWrites == 0))
00565       {
00566         synchronized (endOfCurrentWrites)
00567         {
00568           endOfCurrentWrites.notifyAll();
00569         }
00570       }
00571     }
00572   }

abstract void org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.commitTransaction long  transactionId  )  [protected, pure virtual]
 

Commit a transaction given its id.

Parameters:
transactionId the transaction id
Exceptions:
RemoteException if an error occurs

Implemented in org.objectweb.cjdbc.controller.scheduler.raidb0.RAIDb0PassThroughLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb0.RAIDb0PessimisticTransactionLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1OptimisticQueryLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1OptimisticTransactionLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1PassThroughScheduler, org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1PessimisticTransactionLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1QueryLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb2.RAIDb2PassThroughLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb2.RAIDb2PessimisticTransactionLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb2.RAIDb2QueryLevelScheduler, org.objectweb.cjdbc.controller.scheduler.singledb.SingleDBPassThroughScheduler, and org.objectweb.cjdbc.controller.scheduler.singledb.SingleDBPessimisticTransactionLevelScheduler.

int org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.getNumberRead  ) 
 

Returns:
Returns the numberRead.

Definition at line 836 of file AbstractScheduler.java.

Referenced by org.objectweb.cjdbc.common.monitor.scheduler.NumberRequestsCollector.getValue().

00837   {
00838     return numberRead;
00839   }

int org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.getNumberWrite  ) 
 

Returns:
Returns the numberWrite.

Definition at line 844 of file AbstractScheduler.java.

Referenced by org.objectweb.cjdbc.common.monitor.scheduler.NumberRequestsCollector.getValue().

00845   {
00846     return numberWrite;
00847   }

final int org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.getParsingGranularity  ) 
 

Get the needed query parsing granularity.

Returns:
needed query parsing granularity

Definition at line 128 of file AbstractScheduler.java.

00129   {
00130     return parsingGranularity;
00131   }

int org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.getPendingTransactions  ) 
 

Returns:
Returns the pendingTransactions.

Definition at line 852 of file AbstractScheduler.java.

00853   {
00854     return pendingTransactions;
00855   }

final int org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.getPendingWrites  ) 
 

Returns the number of pending writes.

Returns:
int

Definition at line 148 of file AbstractScheduler.java.

Referenced by org.objectweb.cjdbc.controller.scheduler.raidb2.RAIDb2QueryLevelScheduler.notifyWriteCompleted(), org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1QueryLevelScheduler.notifyWriteCompleted(), org.objectweb.cjdbc.controller.scheduler.singledb.SingleDBPessimisticTransactionLevelScheduler.scheduleNonSuspendedWriteRequest(), org.objectweb.cjdbc.controller.scheduler.raidb2.RAIDb2QueryLevelScheduler.scheduleNonSuspendedWriteRequest(), org.objectweb.cjdbc.controller.scheduler.raidb2.RAIDb2PessimisticTransactionLevelScheduler.scheduleNonSuspendedWriteRequest(), org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1QueryLevelScheduler.scheduleNonSuspendedWriteRequest(), org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1PessimisticTransactionLevelScheduler.scheduleNonSuspendedWriteRequest(), org.objectweb.cjdbc.controller.scheduler.raidb0.RAIDb0PessimisticTransactionLevelScheduler.scheduleNonSuspendedWriteRequest(), org.objectweb.cjdbc.controller.scheduler.raidb2.RAIDb2QueryLevelScheduler.scheduleReadRequest(), and org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1QueryLevelScheduler.scheduleReadRequest().

00149   {
00150     return pendingWrites;
00151   }

final int org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.getRAIDbLevel  ) 
 

Returns the RAIDbLevel.

Returns:
int

Definition at line 158 of file AbstractScheduler.java.

00159   {
00160     return raidbLevel;
00161   }

String [] org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.getSchedulerData  ) 
 

Returns live information on the scheduler

Returns:
array of data

Definition at line 820 of file AbstractScheduler.java.

Referenced by org.objectweb.cjdbc.controller.monitoring.datacollector.DataCollector.retrieveSchedulerData().

00821   {
00822     String[] data = new String[7];
00823     data[0] = "" + numberRead;
00824     data[1] = "" + numberWrite;
00825     data[2] = "" + pendingTransactions;
00826     data[3] = "" + pendingWrites;
00827     data[4] = "" + numberRead + numberWrite;
00828     data[5] = (suspendedTransactions) ? "1" : "0";
00829     data[6] = (suspendedWrites) ? "1" : "0";
00830     return data;
00831   }

String org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.getXml  ) 
 

Get information about the Request Scheduler in xml format

Returns:
String containing information in xml

Definition at line 806 of file AbstractScheduler.java.

00807   {
00808     StringBuffer info = new StringBuffer();
00809     info.append("<" + DatabasesXmlTags.ELT_RequestScheduler + ">");
00810     info.append(this.getXmlImpl());
00811     info.append("</" + DatabasesXmlTags.ELT_RequestScheduler + ">");
00812     return info.toString();
00813   }

boolean org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.hasSQLMacros AbstractRequest  request  )  [protected]
 

Returns true if the query contains SQL macros. Currently supported macros are NOW() and RAND().

Parameters:
request the request to check
Returns:
true if the query contains SQL macros.

Definition at line 348 of file AbstractScheduler.java.

References org.objectweb.cjdbc.common.sql.AbstractRequest.getSQL().

00349   {
00350     String lower = request.getSQL().toLowerCase();
00351     if (lower.indexOf("now()") > 0)
00352       return true;
00353     if (lower.indexOf("rand()") > 0)
00354       return true;
00355     return false;
00356   }

final void org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.initializeTransactionId long  transactionId  ) 
 

Initialize the transaction id with the given value (usually retrieved from the recovery log).

Parameters:
transactionId new current transaction identifier

Definition at line 118 of file AbstractScheduler.java.

00119   {
00120     this.tid = transactionId;
00121   }

boolean org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.isSuspendedTransactions  ) 
 

Returns:
Returns the suspendedTransactions.

Definition at line 859 of file AbstractScheduler.java.

00860   {
00861     return suspendedTransactions;
00862   }

boolean org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.isSuspendedWrites  ) 
 

Returns:
Returns the suspendedWrites.

Definition at line 866 of file AbstractScheduler.java.

00867   {
00868     return suspendedWrites;
00869   }

void org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.mergeDatabaseSchema DatabaseSchema  dbs  ) 
 

Merge the given DatabaseSchema with the current one.

Parameters:
dbs a DatabaseSchema value
See also:
org.objectweb.cjdbc.controller.scheduler.schema.SchedulerDatabaseSchema

Reimplemented in org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1OptimisticTransactionLevelScheduler.

Definition at line 193 of file AbstractScheduler.java.

00194   {
00195     logger.info(Translate.get("scheduler.doesnt.support.schemas"));
00196   }

abstract void org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.notifyWriteCompleted AbstractWriteRequest  request  )  [pure virtual]
 

Notify the completion of a write statement. This method does not need to be synchronized, it is enforced by the caller.

Parameters:
request the completed request
See also:
writeCompleted(AbstractWriteRequest)

Implemented in org.objectweb.cjdbc.controller.scheduler.raidb0.RAIDb0PassThroughLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb0.RAIDb0PessimisticTransactionLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1OptimisticQueryLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1OptimisticTransactionLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1PassThroughScheduler, org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1PessimisticTransactionLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1QueryLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb2.RAIDb2PassThroughLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb2.RAIDb2PessimisticTransactionLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb2.RAIDb2QueryLevelScheduler, org.objectweb.cjdbc.controller.scheduler.singledb.SingleDBPassThroughScheduler, and org.objectweb.cjdbc.controller.scheduler.singledb.SingleDBPessimisticTransactionLevelScheduler.

Referenced by org.objectweb.cjdbc.controller.requestmanager.distributed.DistributedRequestManager.completeFailedOnAllBackends().

final void org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.readCompleted SelectRequest  request  ) 
 

Notify the completion of a read statement.

Parameters:
request the completed request

Definition at line 225 of file AbstractScheduler.java.

00226   {
00227     numberRead++;
00228     this.readCompletedNotify(request);
00229   }

abstract void org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.readCompletedNotify SelectRequest  request  )  [pure virtual]
 

Notify the completion of a read statement.

Parameters:
request the completed request

Implemented in org.objectweb.cjdbc.controller.scheduler.raidb0.RAIDb0PassThroughLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb0.RAIDb0PessimisticTransactionLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1OptimisticQueryLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1OptimisticTransactionLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1PassThroughScheduler, org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1PessimisticTransactionLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1QueryLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb2.RAIDb2PassThroughLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb2.RAIDb2PessimisticTransactionLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb2.RAIDb2QueryLevelScheduler, org.objectweb.cjdbc.controller.scheduler.singledb.SingleDBPassThroughScheduler, and org.objectweb.cjdbc.controller.scheduler.singledb.SingleDBPessimisticTransactionLevelScheduler.

final void org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.resumeNewTransactions  ) 
 

Resume new transactions that were suspended by suspendNewTransactionsForCheckpoint().

See also:
suspendNewTransactionsForCheckpoint()

Definition at line 727 of file AbstractScheduler.java.

00728   {
00729     synchronized (transactionSync)
00730     {
00731       suspendedTransactions = false;
00732       // Wake up all pending begin statements
00733       transactionSync.notifyAll();
00734     }
00735   }

void org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.resumeWrites  ) 
 

Resume the execution of write queries that were suspended by suspendWrites().

See also:
suspendWrites()

Definition at line 785 of file AbstractScheduler.java.

00786   {
00787     synchronized (writesSync)
00788     {
00789       suspendedWrites = false;
00790       // Wake up all waiting writes
00791       writesSync.notifyAll();
00792     }
00793   }

final void org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.rollback TransactionMarkerMetaData  tm  )  throws SQLException
 

Rollback a transaction.

Calls the implementation specific rollbackTransaction()

Parameters:
tm The transaction marker metadata
Exceptions:
SQLException if an error occurs
See also:
rollbackTransaction(long)

Definition at line 583 of file AbstractScheduler.java.

References org.objectweb.cjdbc.common.sql.AbstractRequest.getTimeout(), and org.objectweb.cjdbc.common.sql.AbstractRequest.setTimeout().

00584   {
00585     // Check if writes are suspended
00586     synchronized (writesSync)
00587     {
00588       if (suspendedWrites)
00589       {
00590         try
00591         {
00592           // Wait on writesSync
00593           long timeout = tm.getTimeout();
00594           if (timeout > 0)
00595           {
00596             long start = System.currentTimeMillis();
00597             writesSync.wait(timeout);
00598             long end = System.currentTimeMillis();
00599             long remaining = timeout - (end - start);
00600             if (remaining > 0)
00601               tm.setTimeout(remaining);
00602             else
00603             {
00604               String msg = Translate
00605                   .get("scheduler.rollback.timeout.writeSync");
00606               logger.warn(msg);
00607               throw new SQLException(msg);
00608             }
00609           }
00610           else
00611             writesSync.wait();
00612         }
00613         catch (InterruptedException e)
00614         {
00615           String msg = Translate.get("scheduler.rollback.timeout.writeSync")
00616               + " (" + e + ")";
00617           logger.error(msg);
00618           throw new SQLException(msg);
00619         }
00620       }
00621       pendingWrites++;
00622     }
00623     rollbackTransaction(tm.getTransactionId());
00624   }

final void org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.rollbackCompleted long  transactionId  ) 
 

Notify the completion of a rollback command.

Parameters:
transactionId of the rollback commit

Definition at line 639 of file AbstractScheduler.java.

00640   {
00641     // Take care of suspended transactions
00642     synchronized (transactionSync)
00643     {
00644       pendingTransactions--;
00645 
00646       // If it is the last pending transaction to complete and we
00647       // are waiting for pending transactions to complete, then wake
00648       // up suspendNewTransactionsForCheckpoint()
00649       if (suspendedTransactions && (pendingTransactions == 0))
00650       {
00651         synchronized (endOfCurrentTransactions)
00652         {
00653           endOfCurrentTransactions.notifyAll();
00654         }
00655       }
00656     }
00657     // Take care of suspended write
00658     synchronized (writesSync)
00659     {
00660       pendingWrites--;
00661 
00662       // It this is the last write to complete and writes are
00663       // suspended we have to notify suspendedWrites()
00664       if (suspendedWrites && (pendingWrites == 0))
00665       {
00666         synchronized (endOfCurrentWrites)
00667         {
00668           endOfCurrentWrites.notifyAll();
00669         }
00670       }
00671     }
00672   }

abstract void org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.rollbackTransaction long  transactionId  )  [protected, pure virtual]
 

Rollback a transaction given its id.

Parameters:
transactionId the transaction id
Exceptions:
RemoteException if an error occurs

Implemented in org.objectweb.cjdbc.controller.scheduler.raidb0.RAIDb0PassThroughLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb0.RAIDb0PessimisticTransactionLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1OptimisticQueryLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1OptimisticTransactionLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1PassThroughScheduler, org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1PessimisticTransactionLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1QueryLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb2.RAIDb2PassThroughLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb2.RAIDb2PessimisticTransactionLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb2.RAIDb2QueryLevelScheduler, org.objectweb.cjdbc.controller.scheduler.singledb.SingleDBPassThroughScheduler, and org.objectweb.cjdbc.controller.scheduler.singledb.SingleDBPessimisticTransactionLevelScheduler.

abstract void org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.scheduleNonSuspendedWriteRequest AbstractWriteRequest  request  )  throws SQLException, RollbackException [pure virtual]
 

Schedule a write request (implementation specific). This method blocks until the request can be executed.

Parameters:
request Write request to schedule (SQL macros are already handled if needed)
Exceptions:
SQLException if a timeout occurs
RollbackException if the transaction must be rollbacked

Implemented in org.objectweb.cjdbc.controller.scheduler.raidb0.RAIDb0PassThroughLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb0.RAIDb0PessimisticTransactionLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1OptimisticQueryLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1OptimisticTransactionLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1PassThroughScheduler, org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1PessimisticTransactionLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1QueryLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb2.RAIDb2PassThroughLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb2.RAIDb2PessimisticTransactionLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb2.RAIDb2QueryLevelScheduler, org.objectweb.cjdbc.controller.scheduler.singledb.SingleDBPassThroughScheduler, and org.objectweb.cjdbc.controller.scheduler.singledb.SingleDBPessimisticTransactionLevelScheduler.

abstract void org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.scheduleReadRequest SelectRequest  request  )  throws SQLException [pure virtual]
 

Schedule a read request (implementation specific). This method blocks until the read can be executed.

Parameters:
request Select request to schedule (SQL macros are already handled if needed)
Exceptions:
SQLException if a timeout occurs

Implemented in org.objectweb.cjdbc.controller.scheduler.raidb0.RAIDb0PassThroughLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb0.RAIDb0PessimisticTransactionLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1OptimisticQueryLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1OptimisticTransactionLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1PassThroughScheduler, org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1PessimisticTransactionLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1QueryLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb2.RAIDb2PassThroughLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb2.RAIDb2PessimisticTransactionLevelScheduler, org.objectweb.cjdbc.controller.scheduler.raidb2.RAIDb2QueryLevelScheduler, org.objectweb.cjdbc.controller.scheduler.singledb.SingleDBPassThroughScheduler, and org.objectweb.cjdbc.controller.scheduler.singledb.SingleDBPessimisticTransactionLevelScheduler.

final void org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.scheduleWriteRequest AbstractWriteRequest  request  )  throws SQLException, RollbackException
 

Schedule a write request. This method blocks if the writes are suspended. Then the number of pending writes is updated and the implementation specific scheduleNonSuspendedWriteRequest function is called. SQL macros are replaced in the request if the scheduler has needSQLMacroHandling set to true.

Parameters:
request Write request to schedule
Exceptions:
SQLException if a timeout occurs
RollbackException if an error occurs
See also:
scheduleNonSuspendedWriteRequest(AbstractWriteRequest)

Definition at line 243 of file AbstractScheduler.java.

00245   {
00246     synchronized (writesSync)
00247     {
00248       if (suspendedWrites)
00249       {
00250         try
00251         {
00252           // Wait on writesSync
00253           int timeout = request.getTimeout();
00254           if (timeout > 0)
00255           {
00256             long start = System.currentTimeMillis();
00257             long lTimeout = timeout * 1000;
00258             writesSync.wait(lTimeout);
00259             long end = System.currentTimeMillis();
00260             int remaining = (int) (lTimeout - (end - start));
00261             if (remaining > 0)
00262               request.setTimeout(remaining);
00263             else
00264             {
00265               String msg = Translate.get("scheduler.request.timeout",
00266                   new String[]{String.valueOf(request.getId()),
00267                       String.valueOf(request.getTimeout())});
00268               logger.warn(msg);
00269               throw new SQLException(msg);
00270             }
00271           }
00272           else
00273             this.writesSync.wait();
00274         }
00275         catch (InterruptedException e)
00276         {
00277           String msg = Translate.get("scheduler.request.timeout.failed", e);
00278           logger.warn(msg);
00279           throw new SQLException(msg);
00280         }
00281       }
00282       pendingWrites++;
00283     }
00284     scheduleNonSuspendedWriteRequest(request);
00285   }

void org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.setDatabaseSchema DatabaseSchema  dbs  ) 
 

Sets the DatabaseSchema of the current virtual database. This is only needed by some schedulers that will have to define their own scheduler schema

Parameters:
dbs a DatabaseSchema value
See also:
org.objectweb.cjdbc.controller.scheduler.schema.SchedulerDatabaseSchema

Reimplemented in org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1OptimisticTransactionLevelScheduler.

Definition at line 181 of file AbstractScheduler.java.

00182   {
00183     if (logger.isInfoEnabled())
00184       logger.info(Translate.get("scheduler.doesnt.support.schemas"));
00185   }

final void org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.setParsingGranularity int  parsingGranularity  ) 
 

Set the needed query parsing granularity.

Parameters:
parsingGranularity Parsing granularity needed by the scheduler

Definition at line 138 of file AbstractScheduler.java.

00139   {
00140     this.parsingGranularity = parsingGranularity;
00141   }

final void org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.setRAIDbLevel int  raidbLevel  ) 
 

Sets the RAIDb level.

Parameters:
raidbLevel The RAIDbLevel to set

Definition at line 168 of file AbstractScheduler.java.

00169   {
00170     this.raidbLevel = raidbLevel;
00171   }

final void org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.suspendNewTransactionsForCheckpoint  )  throws SQLException
 

Suspend all calls to begin() until all current transactions are finished in order to store a checkpoint. This method returns when all pending transactions have finished.

New transactions remain suspended until resumeNewTransactions() is called.

Exceptions:
SQLException if an error occurs
See also:
resumeNewTransactions()

Definition at line 688 of file AbstractScheduler.java.

00689   {
00690     synchronized (transactionSync)
00691     {
00692       suspendedTransactions = true;
00693       if (pendingTransactions == 0)
00694         return;
00695     }
00696 
00697     synchronized (endOfCurrentTransactions)
00698     {
00699       // Here we have a potential synchronization problem since the last
00700       // transaction completion could have happened before we entered this
00701       // synchronized block. Therefore we recheck if there is effectively
00702       // still pending transactions. If this is not the case, we don't have
00703       // to sleep and we can immediately return.
00704       if (pendingTransactions == 0)
00705         return;
00706 
00707       // Wait for pending transactions to end
00708       try
00709       {
00710         endOfCurrentTransactions.wait();
00711       }
00712       catch (InterruptedException e)
00713       {
00714         String msg = Translate.get("scheduler.suspend.transaction.failed", e);
00715         logger.error(msg);
00716         throw new SQLException(msg);
00717       }
00718     }
00719   }

void org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.suspendWrites  )  throws SQLException
 

Suspend all write queries. This method blocks until all pending writes are completed.

Writes execution is resumed by calling resumeWrites()

Exceptions:
SQLException if an error occurs
See also:
resumeWrites()

Definition at line 746 of file AbstractScheduler.java.

00747   {
00748     synchronized (writesSync)
00749     {
00750       suspendedWrites = true;
00751       if (pendingWrites == 0)
00752         return;
00753     }
00754 
00755     synchronized (endOfCurrentWrites)
00756     {
00757       // Here we have a potential synchronization problem since the last
00758       // write completion could have happened before we entered this
00759       // synchronized block. Therefore we recheck if there is effectively
00760       // still pending writes. If this is not the case, we don't have
00761       // to sleep and we can immediately return.
00762       if (pendingWrites == 0)
00763         return;
00764 
00765       // Wait for pending transactions to end
00766       try
00767       {
00768         endOfCurrentWrites.wait();
00769       }
00770       catch (InterruptedException e)
00771       {
00772         String msg = Translate.get("scheduler.suspend.writes.failed", e);
00773         logger.error(msg);
00774         throw new SQLException(msg);
00775       }
00776     }
00777   }

final void org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.writeCompleted AbstractWriteRequest  request  ) 
 

Notify the completion of a write statement.

This method updates the number of pending writes and calls the implementation specific notifyWriteCompleted function.

Finally, the suspendWrites() function is notified if needed.

Parameters:
request the completed request
See also:
notifyWriteCompleted(AbstractWriteRequest)

suspendWrites()

Definition at line 311 of file AbstractScheduler.java.

00312   {
00313     synchronized (writesSync)
00314     {
00315       pendingWrites--;
00316 
00317       notifyWriteCompleted(request);
00318 
00319       // It this is the last write to complete and writes are
00320       // suspended we have to notify suspendedWrites()
00321       if (suspendedWrites && (pendingWrites == 0))
00322       {
00323         synchronized (endOfCurrentWrites)
00324         {
00325           endOfCurrentWrites.notifyAll();
00326         }
00327       }
00328     }
00329     numberWrite++;
00330   }


Member Data Documentation

Trace org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.logger [static, protected]
 

Initial value:

 Trace
                                                      .getLogger("org.objectweb.cjdbc.controller.scheduler")

Definition at line 81 of file AbstractScheduler.java.


The documentation for this class was generated from the following file:
Generated on Mon Apr 11 22:04:31 2005 for C-JDBC by  doxygen 1.3.9.1