/// <summary> /// Get a list of restore candidates for the archive. /// </summary> /// <remarks> /// Note that at the current time only one cadidate is returned at a time. /// </remarks> /// <returns>A restore candidate. null will be returned if no candidates exist.</returns> public virtual RestoreQueue GetRestoreCandidate() { RestoreQueue queueItem; using (IUpdateContext updateContext = PersistentStore.OpenUpdateContext(UpdateContextSyncMode.Flush)) { QueryRestoreQueueParameters parms = new QueryRestoreQueueParameters(); parms.PartitionArchiveKey = _partitionArchive.GetKey(); parms.ProcessorId = ServerPlatform.ProcessorId; parms.RestoreQueueStatusEnum = RestoreQueueStatusEnum.Pending; IQueryRestoreQueue broker = updateContext.GetBroker<IQueryRestoreQueue>(); // Stored procedure only returns 1 result. queueItem = broker.FindOne(parms); if (queueItem != null) updateContext.Commit(); } return queueItem; }
public override RestoreQueue GetRestoreCandidate() { RestoreQueue queueItem; using (IUpdateContext updateContext = PersistentStore.OpenUpdateContext(UpdateContextSyncMode.Flush)) { QueryRestoreQueueParameters parms = new QueryRestoreQueueParameters(); parms.PartitionArchiveKey = _partitionArchive.GetKey(); parms.ProcessorId = ServerPlatform.ProcessorId; parms.RestoreQueueStatusEnum = RestoreQueueStatusEnum.Restoring; IQueryRestoreQueue broker = updateContext.GetBroker<IQueryRestoreQueue>(); // Stored procedure only returns 1 result. queueItem = broker.FindOne(parms); if (queueItem != null) updateContext.Commit(); } if (queueItem == null) { using (IUpdateContext updateContext = PersistentStore.OpenUpdateContext(UpdateContextSyncMode.Flush)) { RestoreQueueSelectCriteria criteria = new RestoreQueueSelectCriteria(); criteria.RestoreQueueStatusEnum.EqualTo(RestoreQueueStatusEnum.Restoring); IRestoreQueueEntityBroker restoreQueueBroker = updateContext.GetBroker<IRestoreQueueEntityBroker>(); if (restoreQueueBroker.Count(criteria) > HsmSettings.Default.MaxSimultaneousRestores) return null; QueryRestoreQueueParameters parms = new QueryRestoreQueueParameters(); parms.PartitionArchiveKey = _partitionArchive.GetKey(); parms.ProcessorId = ServerPlatform.ProcessorId; parms.RestoreQueueStatusEnum = RestoreQueueStatusEnum.Pending; IQueryRestoreQueue broker = updateContext.GetBroker<IQueryRestoreQueue>(); parms.RestoreQueueStatusEnum = RestoreQueueStatusEnum.Pending; queueItem = broker.FindOne(parms); if (queueItem != null) updateContext.Commit(); } } return queueItem; }