1 24 25 package org.continuent.sequoia.controller.virtualdatabase.protocol; 26 27 import java.io.Serializable ; 28 import java.sql.SQLException ; 29 import java.util.LinkedList ; 30 31 import org.continuent.sequoia.common.exceptions.NoMoreBackendException; 32 import org.continuent.sequoia.common.i18n.Translate; 33 import org.continuent.sequoia.controller.backend.result.ExecuteUpdateResult; 34 import org.continuent.sequoia.controller.loadbalancer.AllBackendsFailedException; 35 import org.continuent.sequoia.controller.requestmanager.distributed.DistributedRequestManager; 36 import org.continuent.sequoia.controller.requests.AbstractWriteRequest; 37 38 45 public class DistributedStatementExecuteUpdate extends DistributedRequest 46 { 47 private static final long serialVersionUID = -4849018153223926739L; 48 49 52 public DistributedStatementExecuteUpdate(AbstractWriteRequest request) 53 { 54 super(request); 55 } 56 57 60 public Object scheduleRequest(DistributedRequestManager drm) 61 throws SQLException 62 { 63 LinkedList totalOrderQueue = drm.getVirtualDatabase().getTotalOrderQueue(); 64 synchronized (totalOrderQueue) 65 { 66 totalOrderQueue.addLast(request); 67 } 68 return request; 69 } 70 71 74 public Serializable executeScheduledRequest(DistributedRequestManager drm) 75 throws SQLException 76 { 77 boolean hasBeenScheduled = false; 78 79 try 80 { 81 drm.getLoadBalancer().waitForSuspendWritesToComplete(request); 82 83 drm.scheduleExecWriteRequest((AbstractWriteRequest) request); 85 hasBeenScheduled = true; 86 87 ExecuteUpdateResult execWriteRequestResult = drm 88 .loadBalanceStatementExecuteUpdate((AbstractWriteRequest) request); 89 drm.updateAndNotifyExecWriteRequest((AbstractWriteRequest) request, 90 execWriteRequestResult.getUpdateCount()); 91 return execWriteRequestResult; 92 } 93 catch (NoMoreBackendException e) 94 { 95 if (drm.getLogger().isDebugEnabled()) 96 drm.getLogger().debug( 97 Translate.get("virtualdatabase.distributed.write.logging.only", 98 request.getSqlShortForm(drm.getVirtualDatabase() 99 .getSqlShortFormLength()))); 100 101 drm.addFailedOnAllBackends(request, hasBeenScheduled); 102 return e; 103 } 104 catch (AllBackendsFailedException e) 105 { 106 drm.addFailedOnAllBackends(request, hasBeenScheduled); 109 if (drm.getLogger().isDebugEnabled()) 110 drm 111 .getLogger() 112 .debug( 113 Translate 114 .get( 115 "virtualdatabase.distributed.write.all.backends.locally.failed", 116 request.getSqlShortForm(drm.getVirtualDatabase() 117 .getSqlShortFormLength()))); 118 return e; 119 } 120 catch (SQLException e) 121 { 122 drm.addFailedOnAllBackends(request, hasBeenScheduled); 125 drm.getLogger().debug( 127 Translate.get("virtualdatabase.distributed.write.sqlexception", e 128 .getMessage()), e); 129 return e; 130 } 131 catch (RuntimeException re) 132 { 133 drm.addFailedOnAllBackends(request, hasBeenScheduled); 136 drm.getLogger().warn( 137 Translate.get("virtualdatabase.distributed.write.exception", re 138 .getMessage()), re); 139 return new SQLException (re.getMessage()); 140 } 141 } 142 143 146 public String toString() 147 { 148 return "W " + request.getId() + " " + request.getTransactionId() + " " 149 + request.getUniqueKey(); 150 } 151 152 } | Popular Tags |