RAIDb2QueryLevelScheduler.java の 45 行で定義されています。
Public メソッド | |
RAIDb2QueryLevelScheduler () | |
void | scheduleReadRequest (SelectRequest request) throws SQLException |
final void | readCompletedNotify (SelectRequest request) |
void | scheduleNonSuspendedWriteRequest (AbstractWriteRequest request) throws SQLException |
final synchronized void | notifyWriteCompleted (AbstractWriteRequest request) |
String | getXmlImpl () |
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) |
final void | readCompleted (SelectRequest request) |
final void | scheduleWriteRequest (AbstractWriteRequest request) throws SQLException, RollbackException |
final void | writeCompleted (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 () |
Protected メソッド | |
final void | commitTransaction (long transactionId) |
final void | rollbackTransaction (long transactionId) |
boolean | hasSQLMacros (AbstractRequest request) |
Protected 変数 | |
int | raidbLevel |
int | parsingGranularity |
Static Protected 変数 | |
Trace | logger |
Private 変数 | |
long | requestId |
String | groupName |
int | pendingReads |
Object | readSync |
Object | writeSync |
|
Creates a new Query Level Scheduler RAIDb2QueryLevelScheduler.java の 74 行で定義されています。
00075 { 00076 super(RAIDbLevels.RAIDb2, ParsingGranularities.NO_PARSING); 00077 requestId = 0; 00078 pendingReads = 0; 00079 readSync = new Object(); 00080 writeSync = new Object(); 00081 } |
|
Begin a new transaction and return the corresponding transaction identifier. This method is called from the driver when setAutoCommit(false) is called.
AbstractScheduler.java の 371 行で定義されています。 参照元 org.objectweb.cjdbc.controller.requestmanager.distributed.DistributedRequestManager.begin().
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 } |
|
Notify the completion of a begin command.
AbstractScheduler.java の 456 行で定義されています。 参照元 org.objectweb.cjdbc.controller.requestmanager.distributed.DistributedRequestManager.begin().
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 } |
|
Commit a transaction. Calls the implementation specific commitTransaction()
AbstractScheduler.java の 484 行で定義されています。
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 } |
|
Notify the completion of a commit command.
AbstractScheduler.java の 539 行で定義されています。
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 } |
|
org.objectweb.cjdbc.controller.scheduler.AbstractSchedulerに実装されています. RAIDb2QueryLevelScheduler.java の 281 行で定義されています。
00282 { 00283 } |
|
AbstractScheduler.java の 834 行で定義されています。 参照元 org.objectweb.cjdbc.common.monitor.scheduler.NumberRequestsCollector.getValue().
00835 {
00836 return numberRead;
00837 }
|
|
AbstractScheduler.java の 842 行で定義されています。 参照元 org.objectweb.cjdbc.common.monitor.scheduler.NumberRequestsCollector.getValue().
00843 {
00844 return numberWrite;
00845 }
|
|
Get the needed query parsing granularity.
AbstractScheduler.java の 128 行で定義されています。 参照元 org.objectweb.cjdbc.controller.requestmanager.RequestManager.setScheduler().
00129 { 00130 return parsingGranularity; 00131 } |
|
AbstractScheduler.java の 850 行で定義されています。
00851 {
00852 return pendingTransactions;
00853 }
|
|
|
Returns the RAIDbLevel.
AbstractScheduler.java の 158 行で定義されています。
00159 { 00160 return raidbLevel; 00161 } |
|
Returns live information on the scheduler
AbstractScheduler.java の 818 行で定義されています。 参照元 org.objectweb.cjdbc.controller.monitoring.datacollector.DataCollector.retrieveSchedulerData().
00819 { 00820 String[] data = new String[7]; 00821 data[0] = "" + numberRead; 00822 data[1] = "" + numberWrite; 00823 data[2] = "" + pendingTransactions; 00824 data[3] = "" + pendingWrites; 00825 data[4] = "" + numberRead + numberWrite; 00826 data[5] = (suspendedTransactions) ? "1" : "0"; 00827 data[6] = (suspendedWrites) ? "1" : "0"; 00828 return data; 00829 } |
|
Get information about the Request Scheduler in xml format
AbstractScheduler.java の 804 行で定義されています。
00805 { 00806 StringBuffer info = new StringBuffer(); 00807 info.append("<" + DatabasesXmlTags.ELT_RequestScheduler + ">"); 00808 info.append(this.getXmlImpl()); 00809 info.append("</" + DatabasesXmlTags.ELT_RequestScheduler + ">"); 00810 return info.toString(); 00811 } |
|
org.objectweb.cjdbc.controller.scheduler.AbstractSchedulerに実装されています. RAIDb2QueryLevelScheduler.java の 298 行で定義されています。
00299 { 00300 StringBuffer info = new StringBuffer(); 00301 info.append("<" + DatabasesXmlTags.ELT_RAIDb2Scheduler + " " 00302 + DatabasesXmlTags.ATT_level + "=\"" + DatabasesXmlTags.VAL_query 00303 + "\"/>"); 00304 info.append(System.getProperty("line.separator")); 00305 return info.toString(); 00306 } |
|
Returns true if the query contains SQL macros. Currently supported macros are NOW() and RAND().
AbstractScheduler.java の 348 行で定義されています。 参照先 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 } |
|
Initialize the transaction id with the given value (usually retrieved from the recovery log).
AbstractScheduler.java の 118 行で定義されています。
00119 {
00120 this.tid = transactionId;
00121 }
|
|
Merge the given
org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1OptimisticTransactionLevelSchedulerで再定義されています。 AbstractScheduler.java の 193 行で定義されています。 参照先 org.objectweb.cjdbc.common.log.Trace.info().
00194 { 00195 logger.info(Translate.get("scheduler.doesnt.support.schemas")); 00196 } |
|
org.objectweb.cjdbc.controller.scheduler.AbstractSchedulerに実装されています. RAIDb2QueryLevelScheduler.java の 258 行で定義されています。 参照先 org.objectweb.cjdbc.common.log.Trace.debug(), org.objectweb.cjdbc.common.sql.AbstractRequest.getId(), org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.getPendingWrites(), と org.objectweb.cjdbc.common.log.Trace.isDebugEnabled().
00260 { 00261 synchronized (this.writeSync) 00262 { 00263 if (logger.isDebugEnabled()) 00264 logger.debug("Request " + request.getId() + " completed"); 00265 if (getPendingWrites() == 0) 00266 { 00267 if (logger.isDebugEnabled()) 00268 logger.debug("Last write completed, notifying reads"); 00269 writeSync.notifyAll(); // Wakes up all waiting read queries 00270 } 00271 } 00272 } |
|
Notify the completion of a read statement.
AbstractScheduler.java の 225 行で定義されています。 参照先 org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.numberRead.
00226 {
00227 numberRead++;
00228 this.readCompletedNotify(request);
00229 }
|
|
org.objectweb.cjdbc.controller.scheduler.AbstractSchedulerに実装されています. RAIDb2QueryLevelScheduler.java の 165 行で定義されています。 参照先 org.objectweb.cjdbc.common.log.Trace.debug(), org.objectweb.cjdbc.common.sql.AbstractRequest.getId(), と org.objectweb.cjdbc.common.log.Trace.isDebugEnabled().
00166 { 00167 synchronized (this.readSync) 00168 { 00169 pendingReads--; 00170 if (logger.isDebugEnabled()) 00171 logger.debug("Request " + request.getId() + " completed"); 00172 if (pendingReads == 0) 00173 { 00174 if (logger.isDebugEnabled()) 00175 logger.debug("Last read completed, notifying writes"); 00176 readSync.notifyAll(); // Wakes up any waiting write query 00177 } 00178 } 00179 } |
|
Resume new transactions that were suspended by suspendNewTransactionsForCheckpoint().
AbstractScheduler.java の 726 行で定義されています。
00727 { 00728 synchronized (transactionSync) 00729 { 00730 suspendedTransactions = false; 00731 // Wake up all pending begin statements 00732 transactionSync.notifyAll(); 00733 } 00734 } |
|
Resume the execution of write queries that were suspended by suspendWrites().
AbstractScheduler.java の 783 行で定義されています。
00784 { 00785 synchronized (writesSync) 00786 { 00787 suspendedWrites = false; 00788 // Wake up all waiting writes 00789 writesSync.notifyAll(); 00790 } 00791 } |
|
Rollback a transaction. Calls the implementation specific rollbackTransaction()
AbstractScheduler.java の 583 行で定義されています。
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 } |
|
Notify the completion of a rollback command.
AbstractScheduler.java の 639 行で定義されています。
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 } |
|
org.objectweb.cjdbc.controller.scheduler.AbstractSchedulerに実装されています. RAIDb2QueryLevelScheduler.java の 288 行で定義されています。
00289 { 00290 } |
|
Additionally to scheduling the request, this method replaces the SQL Date macros such as now() with the current date.
org.objectweb.cjdbc.controller.scheduler.AbstractSchedulerに実装されています. RAIDb2QueryLevelScheduler.java の 187 行で定義されています。 参照先 org.objectweb.cjdbc.common.log.Trace.debug(), org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.getPendingWrites(), org.objectweb.cjdbc.common.log.Trace.isDebugEnabled(), org.objectweb.cjdbc.common.log.Trace.isWarnEnabled(), と org.objectweb.cjdbc.common.log.Trace.warn().
00189 { 00190 // We have to take the locks in the same order as reads else 00191 // we could have a deadlock 00192 synchronized (this.writeSync) 00193 { 00194 synchronized (this.readSync) 00195 { 00196 if (pendingReads == 0) 00197 { // No read pending, go ahead 00198 request.setId(requestId++); 00199 if (logger.isDebugEnabled()) 00200 logger.debug("Request " + request.getId() 00201 + " scheduled for write (" + getPendingWrites() 00202 + " pending writes)"); 00203 return; 00204 } 00205 00206 // Wait for the reads completion 00207 try 00208 { 00209 if (logger.isDebugEnabled()) 00210 logger.debug("Request " + request.getId() + " waiting for " 00211 + pendingReads + " pending reads)"); 00212 00213 int timeout = request.getTimeout(); 00214 if (timeout > 0) 00215 { 00216 long start = System.currentTimeMillis(); 00217 // Convert seconds to milliseconds for wait call 00218 long lTimeout = timeout * 1000; 00219 this.readSync.wait(lTimeout); 00220 long end = System.currentTimeMillis(); 00221 int remaining = (int) (lTimeout - (end - start)); 00222 if (remaining > 0) 00223 request.setTimeout(remaining); 00224 else 00225 { 00226 String msg = "Timeout (" + request.getTimeout() 00227 + ") for request: " + request.getId(); 00228 logger.warn(msg); 00229 throw new SQLException(msg); 00230 } 00231 } 00232 else 00233 this.readSync.wait(); 00234 00235 // We are already on a synchronized block on writeSync 00236 request.setId(requestId++); 00237 if (logger.isDebugEnabled()) 00238 logger.debug("Request " + request.getId() 00239 + " scheduled for write (" + getPendingWrites() 00240 + " pending writes)"); 00241 } 00242 catch (InterruptedException e) 00243 { 00244 // Timeout 00245 if (logger.isWarnEnabled()) 00246 logger.warn("Request " + request.getId() + " timed out (" 00247 + request.getTimeout() + " ms)"); 00248 throw new SQLException("Timeout (" + request.getTimeout() 00249 + ") for request: " + request.getId()); 00250 } 00251 } 00252 } 00253 } |
|
Additionally to scheduling the request, this method replaces the SQL Date macros such as now() with the current date.
org.objectweb.cjdbc.controller.scheduler.AbstractSchedulerに実装されています. RAIDb2QueryLevelScheduler.java の 93 行で定義されています。 参照先 org.objectweb.cjdbc.common.log.Trace.debug(), org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.getPendingWrites(), org.objectweb.cjdbc.common.log.Trace.isDebugEnabled(), org.objectweb.cjdbc.common.log.Trace.isWarnEnabled(), と org.objectweb.cjdbc.common.log.Trace.warn().
00094 { 00095 // Now deal with synchronization 00096 synchronized (this.writeSync) 00097 { 00098 if (getPendingWrites() == 0) 00099 { // No writes pending, go ahead ! 00100 synchronized (this.readSync) 00101 { 00102 request.setId(requestId++); 00103 pendingReads++; 00104 if (logger.isDebugEnabled()) 00105 logger.debug("Request " + request.getId() + " scheduled for read (" 00106 + pendingReads + " pending reads)"); 00107 return; 00108 } 00109 } 00110 00111 // Wait for the writes completion 00112 try 00113 { 00114 if (logger.isDebugEnabled()) 00115 logger.debug("Request " + request.getId() + " waiting for " 00116 + getPendingWrites() + " pending writes)"); 00117 00118 int timeout = request.getTimeout(); 00119 if (timeout > 0) 00120 { 00121 long start = System.currentTimeMillis(); 00122 // Convert seconds to milliseconds for wait call 00123 long lTimeout = timeout * 1000; 00124 this.writeSync.wait(lTimeout); 00125 long end = System.currentTimeMillis(); 00126 int remaining = (int) (lTimeout - (end - start)); 00127 if (remaining > 0) 00128 request.setTimeout(remaining); 00129 else 00130 { 00131 String msg = "Timeout (" + request.getTimeout() + ") for request: " 00132 + request.getId(); 00133 logger.warn(msg); 00134 throw new SQLException(msg); 00135 } 00136 } 00137 else 00138 this.writeSync.wait(); 00139 00140 synchronized (this.readSync) 00141 { 00142 request.setId(requestId++); 00143 pendingReads++; 00144 if (logger.isDebugEnabled()) 00145 logger.debug("Request " + request.getId() + " scheduled for read (" 00146 + pendingReads + " pending reads)"); 00147 return; // Ok, write completed before timeout 00148 } 00149 } 00150 catch (InterruptedException e) 00151 { 00152 // Timeout 00153 if (logger.isWarnEnabled()) 00154 logger.warn("Request " + request.getId() + " timed out (" 00155 + request.getTimeout() + " s)"); 00156 throw new SQLException("Timeout (" + request.getTimeout() 00157 + ") for request: " + request.getId()); 00158 } 00159 } 00160 } |
|
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.
AbstractScheduler.java の 243 行で定義されています。 参照先 org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.pendingWrites, org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.suspendedWrites, org.objectweb.cjdbc.common.log.Trace.warn(), と org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.writesSync.
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 } |
|
Sets the
org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1OptimisticTransactionLevelSchedulerで再定義されています。 AbstractScheduler.java の 181 行で定義されています。 参照先 org.objectweb.cjdbc.common.log.Trace.info(), と org.objectweb.cjdbc.common.log.Trace.isInfoEnabled().
|
|
Set the needed query parsing granularity.
AbstractScheduler.java の 138 行で定義されています。
00139 {
00140 this.parsingGranularity = parsingGranularity;
00141 }
|
|
Sets the RAIDb level.
AbstractScheduler.java の 168 行で定義されています。
00169 {
00170 this.raidbLevel = raidbLevel;
00171 }
|
|
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.
AbstractScheduler.java の 687 行で定義されています。
00688 { 00689 synchronized (transactionSync) 00690 { 00691 suspendedTransactions = true; 00692 if (pendingTransactions == 0) 00693 return; 00694 } 00695 00696 synchronized (endOfCurrentTransactions) 00697 { 00698 // Here we have a potential synchronization problem since the last 00699 // transaction completion could have happened before we entered this 00700 // synchronized block. Therefore we recheck if there is effectively 00701 // still pending transactions. If this is not the case, we don't have 00702 // to sleep and we can immediately return. 00703 if (pendingTransactions == 0) 00704 return; 00705 00706 // Wait for pending transactions to end 00707 try 00708 { 00709 endOfCurrentTransactions.wait(); 00710 } 00711 catch (InterruptedException e) 00712 { 00713 String msg = Translate.get("scheduler.suspend.transaction.failed", e); 00714 logger.error(msg); 00715 throw new SQLException(msg); 00716 } 00717 } 00718 } |
|
Suspend all write queries. This method blocks until all pending writes are completed. Writes execution is resumed by calling resumeWrites()
AbstractScheduler.java の 744 行で定義されています。
00745 { 00746 synchronized (writesSync) 00747 { 00748 suspendedWrites = true; 00749 if (pendingWrites == 0) 00750 return; 00751 } 00752 00753 synchronized (endOfCurrentWrites) 00754 { 00755 // Here we have a potential synchronization problem since the last 00756 // write completion could have happened before we entered this 00757 // synchronized block. Therefore we recheck if there is effectively 00758 // still pending writes. If this is not the case, we don't have 00759 // to sleep and we can immediately return. 00760 if (pendingWrites == 0) 00761 return; 00762 00763 // Wait for pending transactions to end 00764 try 00765 { 00766 endOfCurrentWrites.wait(); 00767 } 00768 catch (InterruptedException e) 00769 { 00770 String msg = Translate.get("scheduler.suspend.writes.failed", e); 00771 logger.error(msg); 00772 throw new SQLException(msg); 00773 } 00774 } 00775 } |
|
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.
AbstractScheduler.java の 311 行で定義されています。
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 } |
|
RAIDb2QueryLevelScheduler.java の 59 行で定義されています。 |
|
初期値: Trace
.getLogger("org.objectweb.cjdbc.controller.scheduler")
AbstractScheduler.java の 81 行で定義されています。 |
|
AbstractScheduler.java の 66 行で定義されています。 |
|
RAIDb2QueryLevelScheduler.java の 60 行で定義されています。 |
|
AbstractScheduler.java の 65 行で定義されています。 |
|
RAIDb2QueryLevelScheduler.java の 64 行で定義されています。 |
|
RAIDb2QueryLevelScheduler.java の 58 行で定義されています。 |
|
RAIDb2QueryLevelScheduler.java の 65 行で定義されています。 |