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.GeneratedKeysResult; 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 DistributedStatementExecuteUpdateWithKeys 46 extends DistributedRequest 47 { 48 private static final long serialVersionUID = -7075254412706395576L; 49 50 53 public DistributedStatementExecuteUpdateWithKeys(AbstractWriteRequest request) 54 { 55 super(request); 56 } 57 58 61 public Object scheduleRequest(DistributedRequestManager drm) 62 throws SQLException 63 { 64 LinkedList totalOrderQueue = drm.getVirtualDatabase().getTotalOrderQueue(); 65 synchronized (totalOrderQueue) 66 { 67 totalOrderQueue.addLast(request); 68 } 69 return request; 70 } 71 72 75 public Serializable executeScheduledRequest(DistributedRequestManager drm) 76 throws SQLException 77 { 78 boolean hasBeenScheduled = false; 79 80 try 81 { 82 drm.getLoadBalancer().waitForSuspendWritesToComplete(request); 83 drm.scheduleExecWriteRequest((AbstractWriteRequest) request); 85 hasBeenScheduled = true; 86 87 Serializable execWriteRequestResult = null; 88 execWriteRequestResult = drm 89 .loadBalanceStatementExecuteUpdateWithKeys((AbstractWriteRequest) request); 90 int updateCount = ((GeneratedKeysResult) execWriteRequestResult) 91 .getUpdateCount(); 92 93 if (drm.storeRequestResult(request, execWriteRequestResult)) 94 execWriteRequestResult = DistributedRequestManager.SUCCESSFUL_COMPLETION; 95 96 drm.updateAndNotifyExecWriteRequest((AbstractWriteRequest) request, 97 updateCount); 98 99 return execWriteRequestResult; 100 } 101 catch (NoMoreBackendException e) 102 { 103 if (drm.getLogger().isDebugEnabled()) 104 drm.getLogger().debug( 105 Translate.get("virtualdatabase.distributed.write.logging.only", 106 request.getSqlShortForm(drm.getVirtualDatabase() 107 .getSqlShortFormLength()))); 108 109 drm.addFailedOnAllBackends(request, hasBeenScheduled); 112 return e; 113 } 114 catch (AllBackendsFailedException e) 115 { 116 drm.addFailedOnAllBackends(request, hasBeenScheduled); 119 if (drm.getLogger().isDebugEnabled()) 120 drm 121 .getLogger() 122 .debug( 123 Translate 124 .get( 125 "virtualdatabase.distributed.write.all.backends.locally.failed", 126 request.getSqlShortForm(drm.getVirtualDatabase() 127 .getSqlShortFormLength()))); 128 return e; 129 } 130 catch (SQLException e) 131 { 132 drm.addFailedOnAllBackends(request, hasBeenScheduled); 135 drm.getLogger().warn( 136 Translate.get("virtualdatabase.distributed.write.sqlexception", e 137 .getMessage()), e); 138 return e; 139 } 140 catch (RuntimeException re) 141 { 142 drm.addFailedOnAllBackends(request, hasBeenScheduled); 145 drm.getLogger().warn( 146 Translate.get("virtualdatabase.distributed.write.exception", re 147 .getMessage()), re); 148 return new SQLException (re.getMessage()); 149 } 150 } 151 152 155 public String toString() 156 { 157 return "W " + request.getId() + " " + request.getTransactionId() + " " 158 + request.getUniqueKey(); 159 } 160 161 } | Popular Tags |