SUPPORT-69: Async Job Database Connection Timeouts, connection refresh

during create volume

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
This commit is contained in:
Abhinandan Prateek 2016-07-07 14:20:39 +05:30 committed by Rohit Yadav
parent 7059c29e94
commit 23c6248ef7
4 changed files with 19 additions and 0 deletions

View File

@ -52,6 +52,7 @@ import com.cloud.storage.dao.VMTemplateDao;
import com.cloud.storage.dao.VMTemplatePoolDao;
import com.cloud.template.VirtualMachineTemplate;
import com.cloud.utils.component.ComponentContext;
import com.cloud.utils.db.TransactionLegacy;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.fsm.NoTransitionException;
@ -184,6 +185,8 @@ public class TemplateObject implements TemplateInfo {
@Override
public void processEvent(ObjectInDataStoreStateMachine.Event event, Answer answer) {
try {
TransactionLegacy txn = TransactionLegacy.currentTxn();
txn.checkConnection();
if (getDataStore().getRole() == DataStoreRole.Primary) {
if (answer instanceof CopyCmdAnswer) {
CopyCmdAnswer cpyAnswer = (CopyCmdAnswer)answer;

View File

@ -53,6 +53,7 @@ import com.cloud.storage.dao.SnapshotDao;
import com.cloud.storage.dao.VolumeDao;
import com.cloud.utils.component.ComponentContext;
import com.cloud.utils.db.QueryBuilder;
import com.cloud.utils.db.TransactionLegacy;
import com.cloud.utils.db.SearchCriteria.Op;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.fsm.NoTransitionException;
@ -288,6 +289,8 @@ public class SnapshotObject implements SnapshotInfo {
@Override
public void processEvent(ObjectInDataStoreStateMachine.Event event, Answer answer) {
try {
TransactionLegacy txn = TransactionLegacy.currentTxn();
txn.checkConnection();
SnapshotDataStoreVO snapshotStore = snapshotStoreDao.findByStoreSnapshot(getDataStore().getRole(), getDataStore().getId(), getId());
if (answer instanceof CreateObjectAnswer) {
SnapshotObjectTO snapshotTO = (SnapshotObjectTO)((CreateObjectAnswer)answer).getData();

View File

@ -48,6 +48,7 @@ import com.cloud.storage.VolumeVO;
import com.cloud.storage.dao.DiskOfferingDao;
import com.cloud.storage.dao.VolumeDao;
import com.cloud.utils.component.ComponentContext;
import com.cloud.utils.db.TransactionLegacy;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.fsm.NoTransitionException;
import com.cloud.utils.fsm.StateMachine2;
@ -512,6 +513,8 @@ public class VolumeObject implements VolumeInfo {
@Override
public void processEvent(ObjectInDataStoreStateMachine.Event event, Answer answer) {
try {
TransactionLegacy txn = TransactionLegacy.currentTxn();
txn.checkConnection();
if (dataStore.getRole() == DataStoreRole.Primary) {
if (answer instanceof CopyCmdAnswer) {
CopyCmdAnswer cpyAnswer = (CopyCmdAnswer)answer;

View File

@ -177,6 +177,16 @@ public class TransactionLegacy implements Closeable {
return txn;
}
public void checkConnection() {
try {
if (_conn != null && !_conn.isValid(3)) {
_conn = null;
}
} catch (SQLException e) {
_conn = null;
}
}
protected StackElement peekInStack(Object obj) {
final Iterator<StackElement> it = _stack.iterator();
while (it.hasNext()) {