private void RestoreFilesystem() { if (!RequiresRollback || !_initialized || _backupDir == null) { return; } if (NewStudyPath == _oldStudyPath) { // Study folder was not changed. Files were overwritten. // restore header Platform.Log(LogLevel.Info, "Restoring old study header..."); FileUtils.Copy(Path.Combine(_backupDir, _study.StudyInstanceUid + ".xml"), _oldStudyLocation.GetStudyXmlPath(), true); FileUtils.Copy(Path.Combine(_backupDir, _study.StudyInstanceUid + ".xml.gz"), _oldStudyLocation.GetCompressedStudyXmlPath(), true); // restore updated SOPs Platform.Log(LogLevel.Info, "Restoring old study folder... {0} sop need to be restored", _updatedSopList.Count); int restoredCount = 0; foreach (InstanceInfo sop in _updatedSopList) { string backupSopPath = Path.Combine(_backupDir, sop.SopInstanceUid + ServerPlatform.DicomFileExtension); FileUtils.Copy(backupSopPath, _oldStudyLocation.GetSopInstancePath(sop.SeriesInstanceUid, sop.SopInstanceUid), true); restoredCount++; Platform.Log(ServerPlatform.InstanceLogLevel, "Restored SOP {0} [{1} of {2}]", sop.SopInstanceUid, restoredCount, _updatedSopList.Count); SimulateErrors(); } if (restoredCount > 0) { Platform.Log(LogLevel.Info, "{0} SOP(s) have been restored.", restoredCount); } } else { // Different study folder was used. Original folder must be kept around // because we are rolling back. _deleteOriginalFolder = false; } }