diff --git a/wbackup/BackupStreamBase.cs b/wbackup/BackupStreamBase.cs index 6cfd4f3..f32f5e5 100644 --- a/wbackup/BackupStreamBase.cs +++ b/wbackup/BackupStreamBase.cs @@ -91,7 +91,7 @@ /// /// Threadを開始する /// - public void Start() + public virtual void Start() { threadInstance.Start(); @@ -101,7 +101,7 @@ } } - public void Wait() + public virtual void Wait() { while (threadInstance.IsAlive) { @@ -118,7 +118,7 @@ /// public void DoWork(object data) { - if (log.IsDebugEnabled) log.Error("begin thread"); + if (log.IsDebugEnabled) log.Debug("begin thread"); working = true; while (true) @@ -134,8 +134,9 @@ // これ以上処理するデータが無いことを示す if (sourceFileName == "") { - AddNextSource(""); if (log.IsDebugEnabled) log.Error("detect end of queue"); + AddNextSource(""); + OnEndStream(); break; } @@ -151,7 +152,7 @@ } working = false; - if (log.IsDebugEnabled) log.Error("finish thread"); + if (log.IsDebugEnabled) log.Debug("finish thread"); } /// @@ -162,5 +163,10 @@ { } + + protected virtual void OnEndStream() + { + + } } } diff --git a/wbackup/ParallelBackup.cs b/wbackup/ParallelBackup.cs new file mode 100644 index 0000000..721cdcb --- /dev/null +++ b/wbackup/ParallelBackup.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Threading; + +namespace wbackup +{ + class ParallelBackup : BackupStreamBase + { + int archiveCount = 0; + List nextParallelStream = new List(); + + public ParallelBackup() : base(null) + { + } + + public ParallelBackup(BackupStreamBase[] streamList) : base(null) + { + foreach(var stream in streamList) + { + AddNextStream(stream); + } + } + + public void AddNextStream(BackupStreamBase stream) + { + nextParallelStream.Add(stream); + } + + protected override void DoWork(string sourceFileName) + { + int archiveCountTemp = Interlocked.Increment(ref archiveCount); + if (log.IsDebugEnabled) log.DebugFormat("Clear {0}, {1}", archiveCountTemp, sourceFileName); + int parallelIndex = archiveCountTemp % nextParallelStream.Count; + nextParallelStream[parallelIndex].AddSource(sourceFileName); + } + + public override void Start() + { + base.Start(); + + foreach (var next in nextParallelStream) + { + next.Start(); + } + } + + public override void Wait() + { + base.Wait(); + + foreach (var next in nextParallelStream) + { + next.Wait(); + } + } + + protected override void OnEndStream() + { + foreach (var next in nextParallelStream) + { + next.AddSource(""); + } + } + } +} diff --git a/wbackup/Program.cs b/wbackup/Program.cs index 4976f73..b72688e 100644 --- a/wbackup/Program.cs +++ b/wbackup/Program.cs @@ -22,7 +22,7 @@ { static void Main(string[] args) { - log4net.Config.XmlConfigurator.Configure(new FileInfo(@"config\log4net.config")); + log4net.Config.XmlConfigurator.Configure(new FileInfo(@"log4net.config")); ILog log = LogManager.GetLogger(typeof(Program)); if (log.IsInfoEnabled) log.Info("Application [wbackup] Start"); @@ -33,7 +33,15 @@ if (param.backupMode == BackupMopde.Full) { - backupEngine = new ListingAllSourceFile(new ArchiveTarFile(param.destinationDir, new ClearArchiveFlag())); + //backupEngine = new ListingAllSourceFile(new ArchiveTarFile(param.destinationDir, new ClearArchiveFlag())); + ParallelBackup parallel = new ParallelBackup(); + parallel.AddNextStream(new ArchiveTarFile(param.destinationDir + "-01-", new ClearArchiveFlag())); + parallel.AddNextStream(new ArchiveTarFile(param.destinationDir + "-02-", new ClearArchiveFlag())); + parallel.AddNextStream(new ArchiveTarFile(param.destinationDir + "-03-", new ClearArchiveFlag())); + parallel.AddNextStream(new ArchiveTarFile(param.destinationDir + "-04-", new ClearArchiveFlag())); + parallel.AddNextStream(new ArchiveTarFile(param.destinationDir + "-05-", new ClearArchiveFlag())); + parallel.AddNextStream(new ArchiveTarFile(param.destinationDir + "-06-", new ClearArchiveFlag())); + backupEngine = new ListingAllSourceFile(parallel); } if (param.backupMode == BackupMopde.Incremental) { diff --git a/wbackup/config/log4net.config b/wbackup/config/log4net.config deleted file mode 100644 index dbbb39b..0000000 --- a/wbackup/config/log4net.config +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - - - - - - - -
-