private IConcurrentDocument <DashboardVersion> StartRestoringArchive(IConcurrentDocument <DashboardVersion> version) { const int IndexerPollIntervalMilliseconds = 5000; _dashboardVersionManager.StartRestoringArchive(version.ETag); PersistentQueueMessage message = _upgradeQueueReader.Dequeue(); int count = 0; do { while (message != null) { version = _dashboardVersionManager.Read(); if (version.Document.UpgradeState != DashboardUpgradeState.RestoringArchive) { _upgradeQueueReader.TryMakeItemVisible(message); return(version); } // Delete auto-"archives" from host-archive back to host-output. _upgradeQueueReader.Delete(message); message = _upgradeQueueReader.Dequeue(); } version = _dashboardVersionManager.Read(); if (version.Document.UpgradeState != DashboardUpgradeState.RestoringArchive) { return(version); } // Get items left // while limiting pagination to first page since we're only interested in // knowing if we're out of items. count = _upgradeQueueReader.Count(1); if (count > 0) { // wait for a while before resuming Thread.Sleep(IndexerPollIntervalMilliseconds); } }while (count > 0); return(version); }
public IHttpActionResult IndexingQueueLength(int?limit = null) { return(Ok(_queueReader.Count(limit))); }