public void DeleteSnapshotRevision( VolumeSnapshotRevision revision ) { if ( mSnapshotXmlCache.ContainsKey( revision ) ) mSnapshotXmlCache.Remove( revision ); if ( mSnapshotDictionary.ContainsKey( revision ) ) mSnapshotDictionary.Remove( revision ); }
public RevisionListObject(VolumeSnapshotRevision revision) { mRevision = revision; DateTime dt = mRevision.CreationTime; mDateString = dt.ToLongDateString() + " " + dt.ToLongTimeString(); mFuzzyString = PWLib.Platform.Windows.Misc.FormatFuzzyDateString(dt); }
private VolumeSnapshot( VolumeSource source, XmlNode parentNode ) { mRevision = VolumeSnapshotRevision.Create( PWLib.XmlHelp.GetAttribute( parentNode, VolumeSnapshotXml.XmlRevisionElement, "" ) ); if ( mRevision == null ) throw new Exception( "Could not read revision from snapshot xml '" + parentNode.Name + "'" ); mRoot = VolumeSnapshotDirectory.BuildFromXml( this, PWLib.XmlHelp.GetFirstChildWithName( parentNode, "directory" ) ); mFileCount = mRoot.CountAllFiles( ref mTotalFileSize ); }
public void DeleteSnapshotRevision( VolumeSnapshotRevision revision ) { PWLib.Platform.Windows.File.Delete( GetRevisionFileName( revision ) ); if ( mSnapshotsStored.Contains( revision ) ) mSnapshotsStored.Remove( revision ); if ( mSnapshotDictionary.ContainsKey( revision ) ) mSnapshotDictionary.Remove( revision ); }
private VolumeSnapshotFile( VolumeSnapshot snapshot, VolumeSource source, string relativePath ) { mSnapshot = snapshot; mRevision = null; mRelativePath = relativePath; mFileName = PWLib.Platform.Windows.Path.GetFileName( relativePath ); mLastModified = source.GetLastWriteTimeUtc( relativePath ); mFileSize = source.GetFileSize( relativePath ); }
public override void DeleteRevision( VolumeSnapshotRevision revision ) { try { string revisionPath = RelativePathToOnDiskPath( revision, "" ); PWLib.Platform.Windows.Path.DeletePath( revisionPath, true ); PWLib.Platform.Windows.Directory.Remove( revisionPath, true ); } catch ( Exception ) { } }
private VolumeSnapshotFile( VolumeSnapshot snapshot, XmlNode node ) { mSnapshot = snapshot; mFileName = PWLib.XmlHelp.DirtyString( PWLib.XmlHelp.GetAttribute( node, VolumeSnapshotXml.XmlFilenameElement, "" ) ); mRelativePath = PWLib.XmlHelp.DirtyString( PWLib.XmlHelp.GetAttribute( node, VolumeSnapshotXml.XmlRelativePathElement, "" ) ); mRevision = VolumeSnapshotRevision.Create( PWLib.XmlHelp.GetAttribute( node, VolumeSnapshotXml.XmlRevisionElement, "" ) ); ulong.TryParse( PWLib.XmlHelp.GetAttribute( node, VolumeSnapshotXml.XmlSizeElement, "0" ), out mFileSize ); long ticks; if ( long.TryParse( PWLib.XmlHelp.GetAttribute( node, VolumeSnapshotXml.XmlLastModifiedElement, "0" ), out ticks ) ) mLastModified = new DateTime( ticks ); }
public void RestoreVolume(VolumeDescriptor vid, VolumeSnapshotRevision revision, string onDiskPath) { if (vid.ReadyForRestore) { Log.WriteLine(LogType.TextLogVerbose, "Adding QueuedRestore (" + vid.VolumeName + ")"); QueuedRestoreInfo restoreInfo = new QueuedRestoreInfo(); restoreInfo.mDescriptor = vid; restoreInfo.mVolumeRevision = revision; restoreInfo.mDiskPath = onDiskPath; mWorkerThread.RegisterOneShotTask(new PWLib.BackgroundWorkerThread.TaskPredicate(OnWorkerPredicate), new PWLib.BackgroundWorkerThread.Task(OnWorkerRestore), new PWLib.BackgroundWorkerThread.TaskError(OnWorkerError), restoreInfo); } }
public void Restore(VolumeSnapshotRevision revision, string onDiskPath) { try { mBusy = true; mEventController.InvokeRestoreStarted(this, null); mBackupRestoreObject.Restore(revision, onDiskPath); } finally { mBusy = false; mEventController.InvokeRestoreFinished(this, null); } }
public VolumeSnapshot LoadSnapshotRevision( VolumeSource source, VolumeSnapshotRevision revision ) { if ( mSnapshotDictionary.ContainsKey( revision ) ) return mSnapshotDictionary[ revision ]; else { if ( !mSnapshotXmlCache.ContainsKey( revision ) ) throw new Exception( "Could not locate snapshot revision '" + revision.ToString() + "' in database" ); string xmlFragment = mSnapshotXmlCache[ revision ]; XmlDocument doc = new XmlDocument(); doc.LoadXml( xmlFragment ); XmlNode snapshotXmlNode = PWLib.XmlHelp.GetFirstChildWithName( doc, VolumeSnapshotXml.XmlSnapshotElement ); VolumeSnapshot snapshot = VolumeSnapshot.BuildFromXml( source, snapshotXmlNode ); mSnapshotDictionary.Add( revision, snapshot ); return snapshot; } }
private VolumeSnapshotDirectory( VolumeSnapshot snapshot, XmlNode parentNode ) { mSnapshot = snapshot; mName = PWLib.XmlHelp.DirtyString( PWLib.XmlHelp.GetAttribute( parentNode, VolumeSnapshotXml.XmlNameElement, "" ) ); mRelativePath = PWLib.XmlHelp.DirtyString( PWLib.XmlHelp.GetAttribute( parentNode, VolumeSnapshotXml.XmlRelativePathElement, "" ) ); mRevision = VolumeSnapshotRevision.Create( PWLib.XmlHelp.GetAttribute( parentNode, VolumeSnapshotXml.XmlRevisionElement, "" ) ); long ticks; if ( long.TryParse( PWLib.XmlHelp.GetAttribute( parentNode, VolumeSnapshotXml.XmlLastModifiedElement, "0" ), out ticks ) ) mLastModified = new DateTime( ticks ); foreach ( XmlNode childNode in parentNode.ChildNodes ) { string lowerName = childNode.Name.ToLower(); if ( lowerName == VolumeSnapshotXml.XmlDirectoryElement ) // Sub directories { try { VolumeSnapshotDirectory subDirEntry = new VolumeSnapshotDirectory( mSnapshot, childNode ); mDirectories.Add( subDirEntry ); } catch ( System.Exception e ) { FileSync.__LogError( this, "VolumeSnapshotDirectory.BuildFromXml failed in directory '" + mName + "' '" + mRelativePath + "'", e ); } } else if ( lowerName == VolumeSnapshotXml.XmlFileElement ) // Files { try { VolumeSnapshotFile fileEntry = VolumeSnapshotFile.BuildFromXml( mSnapshot, childNode ); mFiles.Add( fileEntry ); } catch ( System.Exception e ) { FileSync.__LogError( this, "VolumeSnapshotDirectory.BuildFromXml failed in directory on a file '" + mName + "' '" + mRelativePath + "'", e ); } } } }
public abstract void CreateDirectory( VolumeSnapshotRevision revision, string relativePath );
public void Restore( VolumeSnapshotRevision revision, string onDiskPath ) { try { mBusy = true; mEventController.InvokeRestoreStarted( this, null ); mBackupRestoreObject.Restore( revision, onDiskPath ); } finally { mBusy = false; mEventController.InvokeRestoreFinished( this, null ); } }
public abstract void CopyFileFromRevision( VolumeSnapshotRevision sourceRevision, VolumeSnapshotRevision targetRevision, string fileRelativePath, ArchiveFileDelegate archiveFileDelegate, object userData );
public override void CopyFileFromRevision( VolumeSnapshotRevision sourceRevision, VolumeSnapshotRevision targetRevision, string fileRelativePath, ArchiveFileDelegate archiveFileDelegate, object userData ) { CopyFile( RelativePathToOnDiskPath( sourceRevision, fileRelativePath ), RelativePathToOnDiskPath( targetRevision, fileRelativePath ), archiveFileDelegate, userData ); }
public override void MoveFileFromRevision( VolumeSnapshotRevision sourceRevision, VolumeSnapshotRevision targetRevision, string fileRelativePath ) { PWLib.Platform.Windows.File.Move( RelativePathToOnDiskPath( sourceRevision, fileRelativePath ), RelativePathToOnDiskPath( targetRevision, fileRelativePath ) ); }
ulong mTotalStoredInThisRevision = 0; // Total unique file size stored in this revision's directory #endregion Fields #region Constructors private VolumeSnapshot( VolumeSource source ) { mRevision = VolumeSnapshotRevision.CreateNew(); mRoot = VolumeSnapshotDirectory.BuildFromSource( this, source, "" ); mFileCount = mRoot.CountAllFiles( ref mTotalFileSize ); }
public void RestoreVolume(VolumeDescriptor vid, VolumeSnapshotRevision revision, string onDiskPath) { mSpineThread.RestoreVolume(vid, revision, onDiskPath); }
public abstract void DeleteRevision( VolumeSnapshotRevision revision );
public abstract void RestoreFile( VolumeSnapshotRevision revision, string fileRelativePath, string onDiskOutputPath, ArchiveFileDelegate archiveFileDelegate, object userData );
public VolumeSnapshot LoadSnapshotRevision( VolumeSource source, VolumeSnapshotRevision revision ) { if ( mSnapshotDictionary.ContainsKey( revision ) ) return mSnapshotDictionary[ revision ]; else { XmlDocument doc = new XmlDocument(); doc.Load( GetRevisionFileName( revision ) ); XmlNode snapshotXmlNode = PWLib.XmlHelp.GetFirstChildWithName( doc, VolumeSnapshotXml.XmlSnapshotElement ); VolumeSnapshot snapshot = VolumeSnapshot.BuildFromXml( source, snapshotXmlNode ); mSnapshotDictionary.Add( revision, snapshot ); return snapshot; } }
public override void StoreFile( VolumeSnapshotRevision revision, string relativePath, string onDiskPath, ArchiveFileDelegate archiveFileDelegate, object userData ) { CopyFile( onDiskPath, RelativePathToOnDiskPath( revision, relativePath ), archiveFileDelegate, userData ); }
string GetRevisionFileName( VolumeSnapshotRevision revision ) { return mXmlRootDir + PWLib.Platform.Windows.Path.DirectorySeparatorChar + revision.Value.ToString() + ".xml"; }
public void RestoreVolume( VolumeDescriptor vid, VolumeSnapshotRevision revision, string onDiskPath ) { if ( vid.ReadyForRestore ) { Log.WriteLine( LogType.TextLogVerbose, "Adding QueuedRestore (" + vid.VolumeName + ")" ); QueuedRestoreInfo restoreInfo = new QueuedRestoreInfo(); restoreInfo.mDescriptor = vid; restoreInfo.mVolumeRevision = revision; restoreInfo.mDiskPath = onDiskPath; mWorkerThread.RegisterOneShotTask( new PWLib.BackgroundWorkerThread.TaskPredicate( OnWorkerPredicate ), new PWLib.BackgroundWorkerThread.Task( OnWorkerRestore ), new PWLib.BackgroundWorkerThread.TaskError( OnWorkerError ), restoreInfo ); } }
private string RelativePathToOnDiskPath( VolumeSnapshotRevision revision, string relativePath ) { string path = mStoragePath + PWLib.Platform.Windows.Path.DirectorySeparatorChar + revision.ToString() + relativePath; return path; }
public abstract void MoveFileFromRevision( VolumeSnapshotRevision sourceRevision, VolumeSnapshotRevision targetRevision, string fileRelativePath );
public override void RestoreFile( VolumeSnapshotRevision revision, string fileRelativePath, string onDiskOutputPath, ArchiveFileDelegate archiveFileDelegate, object userData ) { if ( onDiskOutputPath[ onDiskOutputPath.Length - 1 ] == PWLib.Platform.Windows.Path.DirectorySeparatorChar ) onDiskOutputPath = onDiskOutputPath.Substring( 0, onDiskOutputPath.Length - 1 ); CopyFile( RelativePathToOnDiskPath( revision, fileRelativePath ), onDiskOutputPath, archiveFileDelegate, userData ); }
public abstract void StoreFile( VolumeSnapshotRevision revision, string relativePath, string onDiskPath, ArchiveFileDelegate archiveFileDelegate, object userData );
void UpdateSnapshotToReflectBaselineRevision( VolumeSnapshot incrementalSnapshot, VolumeSnapshotRevision newRevision ) { UpdateSnapshotToReflectBaselineRevisionPrivate( incrementalSnapshot.Root, newRevision ); // save out .xml mDatabase.SaveSnapshotRevision( incrementalSnapshot ); }
public void RestoreVolume( VolumeDescriptor vid, VolumeSnapshotRevision revision, string onDiskPath ) { mSpineThread.RestoreVolume( vid, revision, onDiskPath ); }
void UpdateSnapshotToReflectBaselineRevisionPrivate( VolumeSnapshotDirectory parentDir, VolumeSnapshotRevision newRevision ) { foreach ( VolumeSnapshotFile file in parentDir.Files ) { if ( file.Revision.Value < newRevision.Value ) file.Revision = newRevision; } foreach ( VolumeSnapshotDirectory dir in parentDir.Directories ) { if ( dir.Revision.Value < newRevision.Value ) dir.Revision = newRevision; UpdateSnapshotToReflectBaselineRevisionPrivate( dir, newRevision ); } }
public RevisionListObject( VolumeSnapshotRevision revision ) { mRevision = revision; DateTime dt = mRevision.CreationTime; mDateString = dt.ToLongDateString() + " " + dt.ToLongTimeString(); mFuzzyString = PWLib.Platform.Windows.Misc.FormatFuzzyDateString( dt ); }
public override void CreateDirectory( VolumeSnapshotRevision revision, string relativePath ) { string absPath = RelativePathToOnDiskPath( revision, relativePath ); if ( !PWLib.Platform.Windows.Directory.Exists( absPath ) ) PWLib.Platform.Windows.Directory.CreateDirectory( absPath ); }