@@ -835,24 +835,6 @@ private long getMsid() {
835835 return ManagementServerNode .getManagementServerId ();
836836 }
837837
838- private void cleanupPendingJobs (List <SyncQueueItemVO > l ) {
839- for (SyncQueueItemVO item : l ) {
840- if (s_logger .isInfoEnabled ()) {
841- s_logger .info ("Discard left-over queue item: " + item .toString ());
842- }
843-
844- String contentType = item .getContentType ();
845- if (contentType != null && contentType .equalsIgnoreCase (SyncQueueItem .AsyncJobContentType )) {
846- Long jobId = item .getContentId ();
847- if (jobId != null ) {
848- s_logger .warn ("Mark job as failed as its correspoding queue-item has been discarded. job id: " + jobId );
849- completeAsyncJob (jobId , JobInfo .Status .FAILED , 0 , "Execution was cancelled because of server shutdown" );
850- }
851- }
852- _queueMgr .purgeItem (item .getId ());
853- }
854- }
855-
856838 @ DB
857839 protected List <Long > wakeupByJoinedJobCompletion (long joinedJobId ) {
858840 SearchCriteria <Long > joinJobSC = JoinJobSearch .create ("joinJobId" , joinedJobId );
@@ -967,25 +949,30 @@ public boolean configure(String name, Map<String, Object> params) throws Configu
967949 return true ;
968950 }
969951
952+ private void cleanupLeftOverJobs (final long msid ) {
953+ try {
954+ Transaction .execute (new TransactionCallbackNoReturn () {
955+ @ Override
956+ public void doInTransactionWithoutResult (TransactionStatus status ) {
957+ // purge sync queue item running on this ms node
958+ _queueMgr .cleanupActiveQueueItems (msid , true );
959+ // reset job status for all jobs running on this ms node
960+ _jobDao .resetJobProcess (msid , ApiErrorCode .INTERNAL_ERROR .getHttpCode (), "job cancelled because of management server restart or shutdown" );
961+ }
962+ });
963+ } catch (Throwable e ) {
964+ s_logger .warn ("Unexpected exception in cleaning up left over jobs for mamagement server node " + msid , e );
965+ }
966+ }
967+
970968 @ Override
971969 public void onManagementNodeJoined (List <? extends ManagementServerHost > nodeList , long selfNodeId ) {
972970 }
973971
974972 @ Override
975973 public void onManagementNodeLeft (List <? extends ManagementServerHost > nodeList , long selfNodeId ) {
976974 for (final ManagementServerHost msHost : nodeList ) {
977- try {
978- Transaction .execute (new TransactionCallbackNoReturn () {
979- @ Override
980- public void doInTransactionWithoutResult (TransactionStatus status ) {
981- List <SyncQueueItemVO > items = _queueMgr .getActiveQueueItems (msHost .getId (), true );
982- cleanupPendingJobs (items );
983- _jobDao .resetJobProcess (msHost .getId (), ApiErrorCode .INTERNAL_ERROR .getHttpCode (), "job cancelled because of management server restart" );
984- }
985- });
986- } catch (Throwable e ) {
987- s_logger .warn ("Unexpected exception " , e );
988- }
975+ cleanupLeftOverJobs (msHost .getId ());
989976 }
990977 }
991978
@@ -995,15 +982,7 @@ public void onManagementNodeIsolated() {
995982
996983 @ Override
997984 public boolean start () {
998- try {
999- _jobDao .cleanupPseduoJobs (getMsid ());
1000-
1001- List <SyncQueueItemVO > l = _queueMgr .getActiveQueueItems (getMsid (), false );
1002- cleanupPendingJobs (l );
1003- _jobDao .resetJobProcess (getMsid (), ApiErrorCode .INTERNAL_ERROR .getHttpCode (), "job cancelled because of management server restart" );
1004- } catch (Throwable e ) {
1005- s_logger .error ("Unexpected exception " + e .getMessage (), e );
1006- }
985+ cleanupLeftOverJobs (getMsid ());
1007986
1008987 _heartbeatScheduler .scheduleAtFixedRate (getHeartbeatTask (), HEARTBEAT_INTERVAL , HEARTBEAT_INTERVAL , TimeUnit .MILLISECONDS );
1009988 _heartbeatScheduler .scheduleAtFixedRate (getGCTask (), GC_INTERVAL , GC_INTERVAL , TimeUnit .MILLISECONDS );
0 commit comments