def _actionExecCompleted(self): """ Implement EXEC completion. Because the action is request by the worker thread of the testbox script we cannot pass pending commands back to it like originally planned. So, we just complete the test set and update the status. """ # # Parameter validation. # sStatus = self._getStringParam( constants.tbreq.EXEC_COMPLETED_PARAM_RESULT, TestBoxController.kasValidResults) self._checkForUnknownParameters() (oDb, oStatusData, _) = self._connectToDbAndValidateTb([ TestBoxStatusData.ksTestBoxState_Testing, TestBoxStatusData.ksTestBoxState_GangTesting ]) if oStatusData is None: return False # # Complete the status. # oDb.rollback() oDb.begin() oTestSetLogic = TestSetLogic(oDb) idTestSetGangLeader = oTestSetLogic.complete( oStatusData.idTestSet, self.kadTbResultToStatus[sStatus], fCommit=False) oStatusLogic = TestBoxStatusLogic(oDb) if oStatusData.enmState == TestBoxStatusData.ksTestBoxState_Testing: assert idTestSetGangLeader is None GlobalResourceLogic(oDb).freeGlobalResourcesByTestBox( self._idTestBox) oStatusLogic.updateState(self._idTestBox, TestBoxStatusData.ksTestBoxState_Idle, fCommit=False) else: assert idTestSetGangLeader is not None oStatusLogic.updateState( self._idTestBox, TestBoxStatusData.ksTestBoxState_GangCleanup, oStatusData.idTestSet, fCommit=False) if oStatusLogic.isWholeGangDoneTesting(idTestSetGangLeader): GlobalResourceLogic(oDb).freeGlobalResourcesByTestBox( self._idTestBox) oStatusLogic.updateState(self._idTestBox, TestBoxStatusData.ksTestBoxState_Idle, fCommit=False) oDb.commit() return self._resultResponse(constants.tbresp.STATUS_ACK)
def _actionExecCompleted(self): """ Implement EXEC completion. Because the action is request by the worker thread of the testbox script we cannot pass pending commands back to it like originally planned. So, we just complete the test set and update the status. """ # # Parameter validation. # sStatus = self._getStringParam(constants.tbreq.EXEC_COMPLETED_PARAM_RESULT, TestBoxController.kasValidResults); self._checkForUnknownParameters(); (oDb, oStatusData, _) = self._connectToDbAndValidateTb([TestBoxStatusData.ksTestBoxState_Testing, TestBoxStatusData.ksTestBoxState_GangTesting]); if oStatusData is None: return False; # # Complete the status. # oDb.rollback(); oDb.begin(); oTestSetLogic = TestSetLogic(oDb); idTestSetGangLeader = oTestSetLogic.complete(oStatusData.idTestSet, self.kadTbResultToStatus[sStatus], fCommit = False); oStatusLogic = TestBoxStatusLogic(oDb); if oStatusData.enmState == TestBoxStatusData.ksTestBoxState_Testing: assert idTestSetGangLeader is None; GlobalResourceLogic(oDb).freeGlobalResourcesByTestBox(self._idTestBox); oStatusLogic.updateState(self._idTestBox, TestBoxStatusData.ksTestBoxState_Idle, fCommit = False); else: assert idTestSetGangLeader is not None; oStatusLogic.updateState(self._idTestBox, TestBoxStatusData.ksTestBoxState_GangCleanup, oStatusData.idTestSet, fCommit = False); if oStatusLogic.isWholeGangDoneTesting(idTestSetGangLeader): GlobalResourceLogic(oDb).freeGlobalResourcesByTestBox(self._idTestBox); oStatusLogic.updateState(self._idTestBox, TestBoxStatusData.ksTestBoxState_Idle, fCommit = False); oDb.commit(); return self._resultResponse(constants.tbresp.STATUS_ACK);
def _doGangCleanup(self, oDb, oStatusData): """ _doRequestCommand worker for handling a box in gang-cleanup. This will check if all testboxes has completed their run, pretending to be busy until that happens. Once all are completed, resources will be freed and the testbox returns to idle state (we update oStatusData). """ oStatusLogic = TestBoxStatusLogic(oDb) oTestSet = TestSetData().initFromDbWithId(oDb, oStatusData.idTestSet); if oStatusLogic.isWholeGangDoneTesting(oTestSet.idTestSetGangLeader): oDb.begin(); GlobalResourceLogic(oDb).freeGlobalResourcesByTestBox(self._idTestBox, fCommit = False); TestBoxStatusLogic(oDb).updateState(self._idTestBox, TestBoxStatusData.ksTestBoxState_Idle, fCommit = False); oStatusData.tsUpdated = oDb.getCurrentTimestamp(); oStatusData.enmState = TestBoxStatusData.ksTestBoxState_Idle; oDb.commit(); return None;