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

org.objectweb.cjdbc.controller.requestmanager.distributed.RAIDb1DistributedRequestManager Class Reference

Inheritance diagram for org.objectweb.cjdbc.controller.requestmanager.distributed.RAIDb1DistributedRequestManager:

Inheritance graph
[legend]
Collaboration diagram for org.objectweb.cjdbc.controller.requestmanager.distributed.RAIDb1DistributedRequestManager:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 RAIDb1DistributedRequestManager (DistributedVirtualDatabase vdb, AbstractScheduler scheduler, AbstractResultCache cache, AbstractLoadBalancer loadBalancer, AbstractRecoveryLog recoveryLog, long beginTimeout, long commitTimeout, long rollbackTimeout) throws SQLException, NotCompliantMBeanException
ControllerResultSet execRemoteReadRequest (long controllerUniqueId, SelectRequest request) throws SQLException
int execDistributedWriteRequest (AbstractWriteRequest request) throws SQLException
ControllerResultSet execDistributedWriteRequestWithKeys (AbstractWriteRequest request) throws SQLException
ControllerResultSet execDistributedReadStoredProcedure (StoredProcedure proc) throws SQLException
int execDistributedWriteStoredProcedure (StoredProcedure proc) throws SQLException
void distributedCommit (long transactionId) throws SQLException
void distributedRollback (long transactionId) throws SQLException

Detailed Description

This class defines a RAIDb1DistributedRequestManager

Author:
Emmanuel Cecchet
Version:
1.0

Definition at line 64 of file RAIDb1DistributedRequestManager.java.


Constructor & Destructor Documentation

org.objectweb.cjdbc.controller.requestmanager.distributed.RAIDb1DistributedRequestManager.RAIDb1DistributedRequestManager DistributedVirtualDatabase  vdb,
AbstractScheduler  scheduler,
AbstractResultCache  cache,
AbstractLoadBalancer  loadBalancer,
AbstractRecoveryLog  recoveryLog,
long  beginTimeout,
long  commitTimeout,
long  rollbackTimeout
throws SQLException, NotCompliantMBeanException
 

Creates a new RAIDb1DistributedRequestManager instance

Parameters:
vdb the virtual database this request manager belongs to
scheduler the Request Scheduler to use
cache a Query Cache implementation
loadBalancer the Request Load Balancer to use
recoveryLog the Log Recovery to use
beginTimeout timeout in seconds for begin
commitTimeout timeout in seconds for commit
rollbackTimeout timeout in seconds for rollback
Exceptions:
SQLException if an error occurs
NotCompliantMBeanException if the MBean is not JMX compliant

Definition at line 83 of file RAIDb1DistributedRequestManager.java.

00088   {
00089     super(vdb, scheduler, cache, loadBalancer, recoveryLog, beginTimeout,
00090         commitTimeout, rollbackTimeout);
00091   }


Member Function Documentation

void org.objectweb.cjdbc.controller.requestmanager.distributed.RAIDb1DistributedRequestManager.distributedCommit long  transactionId  )  throws SQLException [virtual]
 

See also:
org.objectweb.cjdbc.controller.requestmanager.distributed.DistributedRequestManager.distributedCommit(long)

Implements org.objectweb.cjdbc.controller.requestmanager.distributed.DistributedRequestManager.

Definition at line 652 of file RAIDb1DistributedRequestManager.java.

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

00653   {
00654     try
00655     {
00656       ArrayList groupMembers = dvdb.getCurrentGroup().getMembers();
00657       if (logger.isDebugEnabled())
00658         logger.debug("Broadcasting transaction " + transactionId
00659             + " commit to all controllers ("
00660             + dvdb.getChannel().getLocalMembership() + "->"
00661             + groupMembers.toString() + ")");
00662 
00663       // Send the query to everybody including us
00664       MulticastResponse responses;
00665       try
00666       {
00667         responses = dvdb.getMulticastRequestAdapter().multicastMessage(
00668             groupMembers, new Commit(transactionId),
00669             MulticastRequestAdapter.WAIT_ALL, this.commitTimeout);
00670       }
00671       catch (Exception e)
00672       {
00673         String msg = "An error occured while executing distributed rollback for transaction "
00674             + transactionId;
00675         logger.warn(msg, e);
00676         throw new SQLException(msg + "(" + e + ")");
00677       }
00678 
00679       if (logger.isDebugEnabled())
00680         logger.debug("Commit of transaction " + transactionId + " completed.");
00681 
00682       if (responses.getFailedMembers() != null)
00683       { // Some controllers failed ... too bad !
00684         logger.warn(responses.getFailedMembers().size()
00685             + " controller(s) died during execution of commit for transaction "
00686             + transactionId);
00687       }
00688 
00689       // List of controllers that gave a AllBackendsFailedException
00690       ArrayList failedOnAllBackends = null;
00691       SQLException exception = null;
00692       int size = groupMembers.size();
00693       boolean success = false;
00694       // Get the result of each controller
00695       for (int i = 0; i < size; i++)
00696       {
00697         Member member = (Member) groupMembers.get(i);
00698         if ((responses.getFailedMembers() != null)
00699             && responses.getFailedMembers().contains(member))
00700         {
00701           logger.warn("Controller " + member + " is suspected of failure.");
00702           continue;
00703         }
00704         Object r = responses.getResult(member);
00705         if (r instanceof Boolean)
00706         {
00707           if (((Boolean) r).booleanValue())
00708             success = true;
00709           else
00710             logger.error("Unexpected result for controller  " + member);
00711         }
00712         else if (r instanceof AllBackendsFailedException)
00713         {
00714           if (failedOnAllBackends == null)
00715             failedOnAllBackends = new ArrayList();
00716           failedOnAllBackends.add(member);
00717           if (logger.isDebugEnabled())
00718             logger.debug("Commit failed on all backends of controller "
00719                 + member + " (" + r + ")");
00720         }
00721         else if (r instanceof SQLException)
00722         {
00723           String msg = "Commit of transaction " + transactionId
00724               + " failed on controller " + member + " (" + r + ")";
00725           logger.warn(msg);
00726           exception = (SQLException) r;
00727         }
00728       }
00729 
00730       if (failedOnAllBackends != null)
00731       { // Notify all controllers where all backend failed that the commit
00732         // completed with 'success'
00733         AbstractRequest request = new UnknownRequest("commit", false, 0, "\n");
00734         request.setTransactionId(transactionId);
00735         try
00736         {
00737           dvdb.getMulticastRequestAdapter().multicastMessage(
00738               failedOnAllBackends, new NotifyCompletion(request, success),
00739               MulticastRequestAdapter.WAIT_NONE, commitTimeout);
00740         }
00741         catch (Exception e)
00742         {
00743           String msg = "An error occured while notifying all controllers of failure to commit transaction "
00744               + transactionId;
00745           logger.warn(msg, e);
00746           throw new SQLException(msg + " (" + e + ")");
00747         }
00748       }
00749 
00750       if (success)
00751         return; // This is a success if at least one controller has succeeded
00752 
00753       if (exception != null)
00754         throw exception;
00755       // At this point, all controllers failed
00756       String msg = "Transaction " + transactionId
00757           + " failed to commit on all controllers";
00758       logger.warn(msg);
00759       throw new SQLException(msg);
00760     }
00761     catch (SQLException e)
00762     {
00763       String msg = "Transaction " + transactionId + " commit failed (" + e
00764           + ")";
00765       logger.warn(msg);
00766       throw e;
00767     }
00768   }

void org.objectweb.cjdbc.controller.requestmanager.distributed.RAIDb1DistributedRequestManager.distributedRollback long  transactionId  )  throws SQLException [virtual]
 

See also:
org.objectweb.cjdbc.controller.requestmanager.distributed.DistributedRequestManager.distributedRollback(long)

Implements org.objectweb.cjdbc.controller.requestmanager.distributed.DistributedRequestManager.

Definition at line 773 of file RAIDb1DistributedRequestManager.java.

References org.objectweb.cjdbc.common.sql.AbstractRequest.debug(), and org.objectweb.cjdbc.common.sql.AbstractRequest.setTransactionId().

00774   {
00775     try
00776     {
00777       ArrayList groupMembers = dvdb.getCurrentGroup().getMembers();
00778       if (logger.isDebugEnabled())
00779         logger.debug("Broadcasting transaction " + transactionId
00780             + " rollback to all controllers ("
00781             + dvdb.getChannel().getLocalMembership() + "->"
00782             + groupMembers.toString() + ")");
00783 
00784       // Send the query to everybody including us
00785       MulticastResponse responses;
00786       try
00787       {
00788         responses = dvdb.getMulticastRequestAdapter().multicastMessage(
00789             groupMembers, new Rollback(transactionId),
00790             MulticastRequestAdapter.WAIT_ALL, this.rollbackTimeout);
00791       }
00792       catch (Exception e)
00793       {
00794         String msg = "An error occured while executing distributed rollback for transaction "
00795             + transactionId;
00796         logger.warn(msg, e);
00797         throw new SQLException(msg + "(" + e + ")");
00798       }
00799 
00800       if (logger.isDebugEnabled())
00801         logger
00802             .debug("rollback of transaction " + transactionId + " completed.");
00803 
00804       if (responses.getFailedMembers() != null)
00805       { // Some controllers failed ... too bad !
00806         logger
00807             .warn(responses.getFailedMembers().size()
00808                 + " controller(s) died during execution of rollback for transaction "
00809                 + transactionId);
00810       }
00811 
00812       // List of controllers that gave a AllBackendsFailedException
00813       ArrayList failedOnAllBackends = null;
00814       SQLException exception = null;
00815       int size = groupMembers.size();
00816       boolean success = false;
00817       // Get the result of each controller
00818       for (int i = 0; i < size; i++)
00819       {
00820         Member member = (Member) groupMembers.get(i);
00821         if ((responses.getFailedMembers() != null)
00822             && responses.getFailedMembers().contains(member))
00823         {
00824           logger.warn("Controller " + member + " is suspected of failure.");
00825           continue;
00826         }
00827         Object r = responses.getResult(member);
00828         if (r instanceof Boolean)
00829         {
00830           if (((Boolean) r).booleanValue())
00831             success = true;
00832           else
00833             logger.error("Unexpected result for controller  " + member);
00834         }
00835         else if (r instanceof AllBackendsFailedException)
00836         {
00837           if (failedOnAllBackends == null)
00838             failedOnAllBackends = new ArrayList();
00839           failedOnAllBackends.add(member);
00840           if (logger.isDebugEnabled())
00841             logger.debug("rollback failed on all backends of controller "
00842                 + member + " (" + r + ")");
00843         }
00844         else if (r instanceof SQLException)
00845         {
00846           String msg = "rollback of transaction " + transactionId
00847               + " failed on controller " + member + " (" + r + ")";
00848           logger.warn(msg);
00849           exception = (SQLException) r;
00850         }
00851       }
00852 
00853       if (failedOnAllBackends != null)
00854       { // Notify all controllers where all backend failed that the rollback
00855         // completed with 'success'
00856         AbstractRequest request = new UnknownRequest("rollback", false, 0, "\n");
00857         request.setTransactionId(transactionId);
00858         try
00859         {
00860           dvdb.getMulticastRequestAdapter().multicastMessage(
00861               failedOnAllBackends, new NotifyCompletion(request, success),
00862               MulticastRequestAdapter.WAIT_NONE, rollbackTimeout);
00863         }
00864         catch (Exception e)
00865         {
00866           String msg = "An error occured while notifying all controllers of failure to rollback transaction "
00867               + transactionId;
00868           logger.warn(msg, e);
00869           throw new SQLException(msg + " (" + e + ")");
00870         }
00871       }
00872 
00873       if (success)
00874         return; // This is a success if at least one controller has succeeded
00875 
00876       if (exception != null)
00877         throw exception;
00878 
00879       // At this point, all controllers failed
00880       String msg = "Transaction " + transactionId
00881           + " failed to rollback on all controllers";
00882       logger.warn(msg);
00883       throw new SQLException(msg);
00884     }
00885     catch (SQLException e)
00886     {
00887       String msg = "Transaction " + transactionId + " rollback failed (" + e
00888           + ")";
00889       logger.warn(msg);
00890       throw e;
00891     }
00892   }

ControllerResultSet org.objectweb.cjdbc.controller.requestmanager.distributed.RAIDb1DistributedRequestManager.execDistributedReadStoredProcedure StoredProcedure  proc  )  throws SQLException [virtual]
 

See also:
org.objectweb.cjdbc.controller.requestmanager.distributed.DistributedRequestManager.execDistributedReadStoredProcedure(StoredProcedure)

Implements org.objectweb.cjdbc.controller.requestmanager.distributed.DistributedRequestManager.

Definition at line 402 of file RAIDb1DistributedRequestManager.java.

00404   {
00405     try
00406     {
00407       ControllerResultSet result = null;
00408 
00409       ArrayList groupMembers = dvdb.getCurrentGroup().getMembers();
00410 
00411       if (logger.isDebugEnabled())
00412         logger.debug("Broadcasting read stored procedure "
00413             + proc.getSQLShortForm(dvdb.getSQLShortFormLength())
00414             + (proc.isAutoCommit() ? "" : " transaction "
00415                 + proc.getTransactionId()) + ") to all controllers ("
00416             + dvdb.getChannel().getLocalMembership() + "->"
00417             + groupMembers.toString() + ")");
00418 
00419       // Send the query to everybody including us
00420       MulticastResponse responses;
00421       try
00422       {
00423         responses = dvdb.getMulticastRequestAdapter().multicastMessage(
00424             groupMembers, new ExecReadStoredProcedure(proc),
00425             MulticastRequestAdapter.WAIT_ALL, proc.getTimeout());
00426       }
00427       catch (Exception e)
00428       {
00429         String msg = "An error occured while executing distributed read stored procedure "
00430             + proc.getId();
00431         logger.warn(msg, e);
00432         throw new SQLException(msg + " (" + e + ")");
00433       }
00434 
00435       if (logger.isDebugEnabled())
00436         logger.debug("Stored procedure "
00437             + proc.getSQLShortForm(dvdb.getSQLShortFormLength())
00438             + " completed.");
00439 
00440       if (responses.getFailedMembers() != null)
00441       { // Some controllers failed ... too bad !
00442         logger.warn(responses.getFailedMembers().size()
00443             + " controller(s) died during execution of stored procedure "
00444             + proc.getId());
00445       }
00446 
00447       // List of controllers that gave a AllBackendsFailedException
00448       ArrayList failedOnAllBackends = null;
00449       SQLException exception = null;
00450       int size = groupMembers.size();
00451       // Get the result of each controller
00452       for (int i = 0; i < size; i++)
00453       {
00454         Member member = (Member) groupMembers.get(i);
00455         if ((responses.getFailedMembers() != null)
00456             && responses.getFailedMembers().contains(member))
00457         {
00458           logger.warn("Controller " + member + " is suspected of failure.");
00459           continue;
00460         }
00461         Object r = responses.getResult(member);
00462         if (r instanceof ControllerResultSet)
00463         {
00464           if (result == null)
00465             result = (ControllerResultSet) r;
00466         }
00467         else if (r instanceof AllBackendsFailedException)
00468         {
00469           if (failedOnAllBackends == null)
00470             failedOnAllBackends = new ArrayList();
00471           failedOnAllBackends.add(member);
00472         }
00473         else if (r instanceof SQLException)
00474         {
00475           String msg = "Stored procedure " + proc.getId()
00476               + " failed on controller " + member + " (" + r + ")";
00477           logger.warn(msg);
00478           exception = (SQLException) r;
00479         }
00480       }
00481 
00482       if (failedOnAllBackends != null)
00483       { // Notify all controllers of completion
00484         try
00485         {
00486           dvdb.getMulticastRequestAdapter().multicastMessage(
00487               failedOnAllBackends, new NotifyCompletion(proc, result != null),
00488               MulticastRequestAdapter.WAIT_NONE, proc.getTimeout());
00489         }
00490         catch (Exception e)
00491         {
00492           String msg = "An error occured while notifying all controllers of failure of read stored procedure "
00493               + proc.getId();
00494           logger.warn(msg, e);
00495           throw new SQLException(msg + " (" + e + ")");
00496         }
00497       }
00498 
00499       if (result != null)
00500       {
00501         if (logger.isDebugEnabled())
00502           logger.debug("Stored procedure " + proc.getId()
00503               + " completed successfully.");
00504         return result; // Success
00505       }
00506       else if (exception != null)
00507         throw exception;
00508 
00509       // At this point, all controllers failed
00510       String msg = "Stored procedure '" + proc + "' failed on all controllers";
00511       logger.warn(msg);
00512       throw new SQLException(msg);
00513     }
00514     catch (SQLException e)
00515     {
00516       String msg = Translate.get("loadbalancer.request.failed", new String[]{
00517           proc.getSQLShortForm(vdb.getSQLShortFormLength()), e.getMessage()});
00518       logger.warn(msg);
00519       throw e;
00520     }
00521   }

int org.objectweb.cjdbc.controller.requestmanager.distributed.RAIDb1DistributedRequestManager.execDistributedWriteRequest AbstractWriteRequest  request  )  throws SQLException [virtual]
 

See also:
org.objectweb.cjdbc.controller.requestmanager.distributed.DistributedRequestManager.execDistributedWriteRequest(org.objectweb.cjdbc.common.sql.AbstractWriteRequest)

Implements org.objectweb.cjdbc.controller.requestmanager.distributed.DistributedRequestManager.

Definition at line 140 of file RAIDb1DistributedRequestManager.java.

References org.objectweb.cjdbc.common.log.Trace.debug(), org.objectweb.cjdbc.common.log.Trace.error(), org.objectweb.cjdbc.controller.virtualdatabase.DistributedVirtualDatabase.getChannel(), org.objectweb.cjdbc.controller.virtualdatabase.DistributedVirtualDatabase.getCurrentGroup(), org.objectweb.cjdbc.controller.virtualdatabase.DistributedVirtualDatabase.getMulticastRequestAdapter(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.getSQLShortFormLength(), org.objectweb.cjdbc.common.log.Trace.isDebugEnabled(), and org.objectweb.cjdbc.common.log.Trace.warn().

00142   {
00143     try
00144     {
00145       int execWriteRequestResult = -1;
00146 
00147       ArrayList groupMembers = dvdb.getCurrentGroup().getMembers();
00148 
00149       if (logger.isDebugEnabled())
00150         logger.debug("Broadcasting request "
00151             + request.getSQLShortForm(dvdb.getSQLShortFormLength())
00152             + (request.isAutoCommit() ? "" : " transaction "
00153                 + request.getTransactionId()) + " to all controllers ("
00154             + dvdb.getChannel().getLocalMembership() + "->"
00155             + groupMembers.toString() + ")");
00156 
00157       // Send the query to everybody including us
00158       MulticastResponse responses;
00159       try
00160       {
00161         responses = dvdb.getMulticastRequestAdapter().multicastMessage(
00162             groupMembers, new ExecWriteRequest(request),
00163             MulticastRequestAdapter.WAIT_ALL, request.getTimeout());
00164       }
00165       catch (Exception e)
00166       {
00167         String msg = "An error occured while executing distributed write request "
00168             + request.getId();
00169         logger.warn(msg, e);
00170         throw new SQLException(msg + " (" + e + ")");
00171       }
00172 
00173       if (logger.isDebugEnabled())
00174         logger.debug("Request "
00175             + request.getSQLShortForm(dvdb.getSQLShortFormLength())
00176             + " completed.");
00177 
00178       if (responses.getFailedMembers() != null)
00179       { // Some controllers failed ... too bad !
00180         logger.warn(responses.getFailedMembers().size()
00181             + " controller(s) died during execution of request "
00182             + request.getId());
00183       }
00184 
00185       // List of controllers that gave a AllBackendsFailedException
00186       ArrayList failedOnAllBackends = null;
00187       SQLException exception = null;
00188       int size = groupMembers.size();
00189       // Get the result of each controller
00190       for (int i = 0; i < size; i++)
00191       {
00192         Member member = (Member) groupMembers.get(i);
00193         if ((responses.getFailedMembers() != null)
00194             && responses.getFailedMembers().contains(member))
00195         {
00196           logger.warn("Controller " + member + " is suspected of failure.");
00197           continue;
00198         }
00199         Object r = responses.getResult(member);
00200         if (r instanceof Integer)
00201         {
00202           if (execWriteRequestResult == -1)
00203             execWriteRequestResult = ((Integer) r).intValue();
00204           else if (execWriteRequestResult != ((Integer) r).intValue())
00205             logger.error("Controllers have different results for request "
00206                 + request.getId());
00207         }
00208         else if (r instanceof AllBackendsFailedException)
00209         {
00210           if (failedOnAllBackends == null)
00211             failedOnAllBackends = new ArrayList();
00212           failedOnAllBackends.add(member);
00213           if (logger.isDebugEnabled())
00214             logger.debug("Request failed on all backends of controller "
00215                 + member + " (" + r + ")");
00216         }
00217         else if (r instanceof SQLException)
00218         {
00219           String msg = "Request " + request.getId() + " failed on controller "
00220               + member + " (" + r + ")";
00221           logger.warn(msg);
00222           exception = (SQLException) r;
00223         }
00224       }
00225 
00226       if (failedOnAllBackends != null)
00227       { // Notify all controllers of completion
00228         try
00229         {
00230           dvdb.getMulticastRequestAdapter().multicastMessage(
00231               failedOnAllBackends,
00232               new NotifyCompletion(request, execWriteRequestResult != -1),
00233               MulticastRequestAdapter.WAIT_NONE, request.getTimeout());
00234         }
00235         catch (Exception e)
00236         {
00237           String msg = "An error occured while notifying all controllers of failure of distributed write request "
00238               + request.getId();
00239           logger.warn(msg, e);
00240           throw new SQLException(msg + " (" + e + ")");
00241         }
00242       }
00243 
00244       if (execWriteRequestResult != -1)
00245       {
00246         if (logger.isDebugEnabled())
00247           logger.debug("Request " + request.getId()
00248               + " completed successfully.");
00249         return execWriteRequestResult;
00250       }
00251       else if (exception != null)
00252         throw exception;
00253 
00254       // At this point, all controllers failed
00255       String msg = "Request '" + request + "' failed on all controllers";
00256       logger.warn(msg);
00257       throw new SQLException(msg);
00258     }
00259     catch (SQLException e)
00260     {
00261       String msg = Translate
00262           .get("loadbalancer.request.failed", new String[]{
00263               request.getSQLShortForm(vdb.getSQLShortFormLength()),
00264               e.getMessage()});
00265       logger.warn(msg);
00266       throw e;
00267     }
00268   }

ControllerResultSet org.objectweb.cjdbc.controller.requestmanager.distributed.RAIDb1DistributedRequestManager.execDistributedWriteRequestWithKeys AbstractWriteRequest  request  )  throws SQLException [virtual]
 

See also:
org.objectweb.cjdbc.controller.requestmanager.distributed.DistributedRequestManager.execDistributedWriteRequestWithKeys(org.objectweb.cjdbc.common.sql.AbstractWriteRequest)

Implements org.objectweb.cjdbc.controller.requestmanager.distributed.DistributedRequestManager.

Definition at line 273 of file RAIDb1DistributedRequestManager.java.

References org.objectweb.cjdbc.common.log.Trace.debug(), and org.objectweb.cjdbc.common.log.Trace.warn().

00275   {
00276     try
00277     {
00278       ControllerResultSet execWriteRequestResult = null;
00279 
00280       ArrayList groupMembers = dvdb.getCurrentGroup().getMembers();
00281 
00282       if (logger.isDebugEnabled())
00283         logger.debug("Broadcasting request "
00284             + request.getSQLShortForm(dvdb.getSQLShortFormLength())
00285             + (request.isAutoCommit() ? "" : " transaction "
00286                 + request.getTransactionId()) + ") to all controllers ("
00287             + dvdb.getChannel().getLocalMembership() + "->"
00288             + groupMembers.toString() + ")");
00289 
00290       // Send the query to everybody including us
00291       MulticastResponse responses;
00292       try
00293       {
00294         responses = dvdb.getMulticastRequestAdapter().multicastMessage(
00295             groupMembers, new ExecWriteRequestWithKeys(request),
00296             MulticastRequestAdapter.WAIT_ALL, request.getTimeout());
00297       }
00298       catch (Exception e)
00299       {
00300         String msg = "An error occured while executing distributed write request with keys "
00301             + request.getId();
00302         logger.warn(msg, e);
00303         throw new SQLException(msg + " (" + e + ")");
00304       }
00305 
00306       if (logger.isDebugEnabled())
00307         logger.debug("Request "
00308             + request.getSQLShortForm(dvdb.getSQLShortFormLength())
00309             + " completed.");
00310 
00311       if (responses.getFailedMembers() != null)
00312       { // Some controllers failed ... too bad !
00313         logger.warn(responses.getFailedMembers().size()
00314             + " controller(s) died during execution of request "
00315             + request.getId());
00316       }
00317 
00318       // List of controllers that gave a AllBackendsFailedException
00319       ArrayList failedOnAllBackends = null;
00320       SQLException exception = null;
00321       int size = groupMembers.size();
00322       // Get the result of each controller
00323       for (int i = 0; i < size; i++)
00324       {
00325         Member member = (Member) groupMembers.get(i);
00326         if ((responses.getFailedMembers() != null)
00327             && responses.getFailedMembers().contains(member))
00328         {
00329           logger.warn("Controller " + member + " is suspected of failure.");
00330           continue;
00331         }
00332         Object r = responses.getResult(member);
00333         if (r instanceof ResultSet)
00334         {
00335           if (execWriteRequestResult == null)
00336             execWriteRequestResult = (ControllerResultSet) r;
00337         }
00338         else if (r instanceof AllBackendsFailedException)
00339         {
00340           if (failedOnAllBackends == null)
00341             failedOnAllBackends = new ArrayList();
00342           failedOnAllBackends.add(member);
00343           if (logger.isDebugEnabled())
00344             logger.debug("Request failed on all backends of controller "
00345                 + member + " (" + r + ")");
00346         }
00347         else if (r instanceof SQLException)
00348         {
00349           String msg = "Request " + request.getId() + " failed on controller "
00350               + member + " (" + r + ")";
00351           logger.warn(msg);
00352           exception = (SQLException) r;
00353         }
00354       }
00355 
00356       if (failedOnAllBackends != null)
00357       { // Notify all controllers of completion
00358         try
00359         {
00360           dvdb.getMulticastRequestAdapter().multicastMessage(
00361               failedOnAllBackends,
00362               new NotifyCompletion(request, execWriteRequestResult != null),
00363               MulticastRequestAdapter.WAIT_NONE, request.getTimeout());
00364         }
00365         catch (Exception e)
00366         {
00367           String msg = "An error occured while notifying all controllers of failure of distributed write request with keys "
00368               + request.getId();
00369           logger.warn(msg, e);
00370           throw new SQLException(msg + " (" + e + ")");
00371         }
00372       }
00373 
00374       if (execWriteRequestResult != null)
00375       {
00376         if (logger.isDebugEnabled())
00377           logger.debug("Request " + request.getId()
00378               + " completed successfully.");
00379         return execWriteRequestResult;
00380       }
00381       else if (exception != null)
00382         throw exception;
00383       // At this point, all controllers failed
00384       String msg = "Request '" + request + "' failed on all controllers";
00385       logger.warn(msg);
00386       throw new SQLException(msg);
00387     }
00388     catch (SQLException e)
00389     {
00390       String msg = Translate
00391           .get("loadbalancer.request.failed", new String[]{
00392               request.getSQLShortForm(vdb.getSQLShortFormLength()),
00393               e.getMessage()});
00394       logger.warn(msg);
00395       throw e;
00396     }
00397   }

int org.objectweb.cjdbc.controller.requestmanager.distributed.RAIDb1DistributedRequestManager.execDistributedWriteStoredProcedure StoredProcedure  proc  )  throws SQLException [virtual]
 

See also:
org.objectweb.cjdbc.controller.requestmanager.distributed.DistributedRequestManager.execDistributedWriteStoredProcedure(org.objectweb.cjdbc.common.sql.StoredProcedure)

Implements org.objectweb.cjdbc.controller.requestmanager.distributed.DistributedRequestManager.

Definition at line 526 of file RAIDb1DistributedRequestManager.java.

00528   {
00529     try
00530     {
00531       int execWriteStoredProcedureResult = NO_RESULT;
00532 
00533       ArrayList groupMembers = dvdb.getCurrentGroup().getMembers();
00534 
00535       if (logger.isDebugEnabled())
00536         logger.debug("Broadcasting write store procedure "
00537             + proc.getSQLShortForm(dvdb.getSQLShortFormLength())
00538             + (proc.isAutoCommit() ? "" : " transaction "
00539                 + proc.getTransactionId()) + ") to all controllers ("
00540             + dvdb.getChannel().getLocalMembership() + "->"
00541             + groupMembers.toString() + ")");
00542 
00543       // Send the query to everybody including us
00544       MulticastResponse responses;
00545       try
00546       {
00547         responses = dvdb.getMulticastRequestAdapter().multicastMessage(
00548             groupMembers, new ExecWriteStoredProcedure(proc),
00549             MulticastRequestAdapter.WAIT_ALL, proc.getTimeout());
00550       }
00551       catch (Exception e)
00552       {
00553         String msg = "An error occured while executing distributed write stored procedure "
00554             + proc.getId();
00555         logger.warn(msg, e);
00556         throw new SQLException(msg + " (" + e + ")");
00557       }
00558 
00559       if (logger.isDebugEnabled())
00560         logger.debug("Stored procedure "
00561             + proc.getSQLShortForm(dvdb.getSQLShortFormLength())
00562             + " completed.");
00563 
00564       if (responses.getFailedMembers() != null)
00565       { // Some controllers failed ... too bad !
00566         logger.warn(responses.getFailedMembers().size()
00567             + " controller(s) died during execution of stored procedure "
00568             + proc.getId());
00569       }
00570 
00571       // List of controllers that gave a AllBackendsFailedException
00572       ArrayList failedOnAllBackends = null;
00573       SQLException exception = null;
00574       int size = groupMembers.size();
00575       // Get the result of each controller
00576       for (int i = 0; i < size; i++)
00577       {
00578         Member member = (Member) groupMembers.get(i);
00579         if ((responses.getFailedMembers() != null)
00580             && responses.getFailedMembers().contains(member))
00581         {
00582           logger.warn("Controller " + member + " is suspected of failure.");
00583           continue;
00584         }
00585         Object r = responses.getResult(member);
00586         if (r instanceof Integer)
00587         {
00588           if (execWriteStoredProcedureResult == NO_RESULT)
00589             execWriteStoredProcedureResult = ((Integer) r).intValue();
00590         }
00591         else if (r instanceof AllBackendsFailedException)
00592         {
00593           if (failedOnAllBackends == null)
00594             failedOnAllBackends = new ArrayList();
00595           failedOnAllBackends.add(member);
00596         }
00597         else if (r instanceof SQLException)
00598         {
00599           String msg = "Stored procedure " + proc.getId()
00600               + " failed on controller " + member + " (" + r + ")";
00601           logger.warn(msg);
00602           exception = (SQLException) r;
00603         }
00604       }
00605 
00606       if (failedOnAllBackends != null)
00607       { // Notify all controllers of completion
00608         try
00609         {
00610           dvdb.getMulticastRequestAdapter().multicastMessage(
00611               failedOnAllBackends,
00612               new NotifyCompletion(proc,
00613                   execWriteStoredProcedureResult != NO_RESULT),
00614               MulticastRequestAdapter.WAIT_NONE, proc.getTimeout());
00615         }
00616         catch (Exception e)
00617         {
00618           String msg = "An error occured while notifying all controllers of failure of write stored procedure "
00619               + proc.getId();
00620           logger.warn(msg, e);
00621           throw new SQLException(msg + " (" + e + ")");
00622         }
00623       }
00624 
00625       if (execWriteStoredProcedureResult != NO_RESULT)
00626       {
00627         if (logger.isDebugEnabled())
00628           logger.debug("Stored procedure " + proc.getId()
00629               + " completed successfully.");
00630         return execWriteStoredProcedureResult; // Success
00631       }
00632       else if (exception != null)
00633         throw exception;
00634 
00635       // At this point, all controllers failed
00636       String msg = "Stored procedure '" + proc + "' failed on all controllers";
00637       logger.warn(msg);
00638       throw new SQLException(msg);
00639     }
00640     catch (SQLException e)
00641     {
00642       String msg = Translate.get("loadbalancer.request.failed", new String[]{
00643           proc.getSQLShortForm(vdb.getSQLShortFormLength()), e.getMessage()});
00644       logger.warn(msg);
00645       throw e;
00646     }
00647   }

ControllerResultSet org.objectweb.cjdbc.controller.requestmanager.distributed.RAIDb1DistributedRequestManager.execRemoteReadRequest long  controllerUniqueId,
SelectRequest  request
throws SQLException [virtual]
 

See also:
org.objectweb.cjdbc.controller.requestmanager.distributed.DistributedRequestManager.execRemoteReadRequest(long, org.objectweb.cjdbc.common.sql.SelectRequest)

Implements org.objectweb.cjdbc.controller.requestmanager.distributed.DistributedRequestManager.

Definition at line 97 of file RAIDb1DistributedRequestManager.java.

References org.objectweb.cjdbc.common.log.Trace.debug(), org.objectweb.cjdbc.controller.virtualdatabase.DistributedVirtualDatabase.getAllMemberButUs(), org.objectweb.cjdbc.controller.requestmanager.distributed.DistributedRequestManager.getControllerId(), org.objectweb.cjdbc.controller.virtualdatabase.DistributedVirtualDatabase.getMulticastRequestAdapter(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.getSQLShortFormLength(), org.objectweb.cjdbc.common.log.Trace.isDebugEnabled(), and org.objectweb.cjdbc.common.log.Trace.warn().

00099   {
00100     try
00101     {
00102       // Choose first controller in list but us. This list should be ordered to
00103       // prevent cycles.
00104       Member nextController = (Member) dvdb.getAllMemberButUs().get(0);
00105       ArrayList groupMembers = new ArrayList();
00106       groupMembers.add(nextController);
00107 
00108       if (logger.isDebugEnabled())
00109         logger.debug("Sending request "
00110             + request.getSQLShortForm(dvdb.getSQLShortFormLength())
00111             + (request.isAutoCommit() ? "" : " transaction "
00112                 + request.getTransactionId()) + " to next controller ("
00113             + groupMembers.get(0) + ")");
00114 
00115       // Send query to next controller
00116       MulticastResponse responses;
00117       responses = dvdb.getMulticastRequestAdapter().multicastMessage(
00118           groupMembers, new ExecReadRequest(getControllerId(), request),
00119           MulticastRequestAdapter.WAIT_ALL, request.getTimeout());
00120 
00121       if (logger.isDebugEnabled())
00122         logger.debug("Request "
00123             + request.getSQLShortForm(dvdb.getSQLShortFormLength())
00124             + " completed.");
00125 
00126       return (ControllerResultSet) responses.getResult(nextController);
00127     }
00128     catch (Exception e)
00129     {
00130       String msg = "An error occured while executing remote select request "
00131           + request.getId();
00132       logger.warn(msg, e);
00133       throw new SQLException(msg + " (" + e + ")");
00134     }
00135   }


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