1 24 25 package org.continuent.sequoia.controller.virtualdatabase.protocol; 26 27 import java.io.Serializable ; 28 import java.sql.SQLException ; 29 30 import org.continuent.hedera.common.Member; 31 import org.continuent.sequoia.common.exceptions.VirtualDatabaseStartingException; 32 import org.continuent.sequoia.common.log.Trace; 33 import org.continuent.sequoia.controller.requestmanager.distributed.DistributedRequestManager; 34 import org.continuent.sequoia.controller.requests.AbstractRequest; 35 import org.continuent.sequoia.controller.virtualdatabase.DistributedVirtualDatabase; 36 37 45 public abstract class DistributedRequest 46 extends DistributedVirtualDatabaseMessage 47 { 48 protected AbstractRequest request; 49 50 55 public DistributedRequest(AbstractRequest request) 56 { 57 this.request = request; 58 } 59 60 65 public final AbstractRequest getRequest() 66 { 67 return request; 68 } 69 70 77 public abstract Object scheduleRequest(DistributedRequestManager drm) 78 throws SQLException ; 79 80 88 public abstract Serializable executeScheduledRequest( 89 DistributedRequestManager drm) throws SQLException ; 90 91 95 public Object handleMessageSingleThreaded(DistributedVirtualDatabase dvdb, 96 Member sender) 97 { 98 if (!dvdb.isVirtualDatabaseStarted()) 99 { 100 request = null; return new VirtualDatabaseStartingException(); 102 } 103 104 Trace logger = dvdb.getLogger(); 105 106 if (logger.isDebugEnabled() && (getRequest() != null)) 107 logger.debug(dvdb.getControllerName() 108 + ": Scheduling distributedRequest " + getRequest().getId() 109 + " from " + sender); 110 111 if (request != null) 113 request.setStartTime(System.currentTimeMillis()); 114 115 Trace distributedRequestLogger = dvdb.getDistributedRequestLogger(); 117 if (distributedRequestLogger.isInfoEnabled()) 118 distributedRequestLogger.info(toString()); 119 120 try 121 { 122 return scheduleRequest((DistributedRequestManager) dvdb 123 .getRequestManager()); 124 } 125 catch (SQLException e) 126 { 127 return e; 128 } 129 } 130 131 135 public Serializable handleMessageMultiThreaded( 136 DistributedVirtualDatabase dvdb, Member sender, 137 Object handleMessageSingleThreadedResult) 138 { 139 Trace logger = dvdb.getLogger(); 140 141 if (handleMessageSingleThreadedResult instanceof Exception ) 142 { 143 if (logger.isInfoEnabled() && (getRequest() != null)) 145 logger.info("Distributed query " 146 + getRequest().getSqlShortForm(dvdb.getSqlShortFormLength()) 147 + " failed on this controller", 148 (Throwable ) handleMessageSingleThreadedResult); 149 return (Serializable ) handleMessageSingleThreadedResult; 150 } 151 152 if ((logger.isDebugEnabled()) && (getRequest() != null)) 153 logger.debug(dvdb.getControllerName() + ": Executing distributedRequest " 154 + getRequest().getId() + " from " + sender); 155 try 156 { 157 return executeScheduledRequest((DistributedRequestManager) dvdb 158 .getRequestManager()); 159 } 160 catch (SQLException e) 161 { 162 return e; 163 } 164 } 165 } | Popular Tags |