private void CoverSiteThread(WebSiteServer ServObj) { string name = this.SiteObj.SiteBaseInfo.NAME; int count = this.SiteObj.SiteBaseInfo.SERVLIST.Count; foreach (TaskFileInfo filePair in this.SiteObj.FilePairList) { if (!this.hasError) { if (this.CoverServ(ServObj, filePair, name, new FtpAtomOperation(this.dbLog))) { this.dbLog.Trace("[覆盖]单个服务器", name, "[成功]___服务器名:" + ServObj.NAME + "文件路径:" + filePair.AimFile); UploadTrace.AddLog(filePair, this.block, "覆盖文件:" + filePair.FileName + "到:" + ServObj.NAME + "成功."); ++this.successnum; UploadTrace.FileCoverSuccess(filePair, this.block, ""); } else { UploadTrace.FileCoverFail(filePair, this.block, ServObj.NAME, ""); this._coverErrorFile = filePair; this._coverErrorServer = ServObj; UploadTrace.AddLog(filePair, this.block, "覆盖文件:" + filePair.FileName + "到:" + ServObj.NAME + "出错.准备回滚"); this.dbLog.Trace("[覆盖]单个服务器", name, "[失败]___服务器名:" + ServObj.NAME + "文件路径:" + filePair.AimFile); this.hasError = true; break; } } } }
/// <summary> /// 任务控制:覆盖 /// </summary> /// <returns></returns> private bool CoverSite() { if (!this.multiCover) { string name = this.SiteObj.SiteBaseInfo.NAME; int count = this.SiteObj.SiteBaseInfo.SERVLIST.Count; int num = 0; foreach (WebSiteServer ServObj in this.SiteObj.SiteBaseInfo.SERVLIST) { string coverStatus = num.ToString() + (object)"/" + (string)(object)count; foreach (TaskFileInfo filePair in this.SiteObj.FilePairList) { if (this.CoverServ(ServObj, filePair, name, new FtpAtomOperation(this.dbLog))) { this.dbLog.Trace("[覆盖]单个服务器", name, "[成功]___服务器名:" + ServObj.NAME + "文件路径:" + filePair.AimFile); UploadTrace.FileCoverSuccess(filePair, this.block, coverStatus); } else { UploadTrace.FileCoverFail(filePair, this.block, ServObj.NAME, coverStatus); this._coverErrorFile = filePair; this._coverErrorServer = ServObj; UploadTrace.AddLog(filePair, this.block, "覆盖文件:" + filePair.FileName + "到:" + ServObj.NAME + "出错.准备回滚"); this.dbLog.Trace("[覆盖]单个服务器", name, "[失败]___服务器名:" + ServObj.NAME + "文件路径:" + filePair.AimFile); return(false); } } ++num; } return(true); } else { this.successnum = 0; if (UploadTrace.IsTaskCancel(this.block)) { return(false); } try { foreach (WebSiteServer serv in this.SiteObj.SiteBaseInfo.SERVLIST) { TaskWorker.doCover doCover = new TaskWorker.doCover(this.CoverSiteThread); doCover.BeginInvoke(serv, new AsyncCallback(this.doCoverCallBack), (object)doCover); } } catch { return(false); } while (!this.hasError && this.successnum != this.SiteObj.FilePairList.Count * this.SiteObj.SiteBaseInfo.SERVLIST.Count) { Thread.Sleep(100); } return(!this.hasError); } }
private void BackSiteThread(int threadid) { string name = this.SiteObj.SiteBaseInfo.NAME; foreach (TaskFileInfo filePair in this.file[threadid]) { if (filePair != null && !this.hasError) { if (UploadTrace.IsTaskCancel(this.block)) { this.hasError = true; break; } else { try { string fileName = filePair.FileName; byte[] backFileBytes = this.GetBackFileBytes(this.SiteObj.SiteBaseInfo.SERVLIST[0], filePair, this.SiteObj.SiteBaseInfo.LOCALBAKTRANSFOLDER, this.SiteObj.SiteBaseInfo.NAME); if (backFileBytes != null) { foreach (WebSiteServer ServObj in this.SiteObj.SiteBaseInfo.SERVLIST) { if (UploadTrace.IsTaskCancel(this.block)) { this.hasError = true; return; } else if (this.BackupServ(ServObj, backFileBytes, name, filePair, this._BackupBlock, new FtpAtomOperation(this.dbLog))) { this.LogRollBack(ServObj, filePair, name, this._BackupBlock, "COVER"); this.dbLog.Trace("[备份]单个服务器", name, "[成功]___服务器名:" + ServObj.NAME + ",文件名:" + fileName); } else { UploadTrace.FileBackupFail(filePair, this.block, ServObj.NAME); UploadTrace.AddLog(filePair, this.block, "文件备份:" + filePair.FileName + "到:" + ServObj.NAME + "出错."); this.dbLog.Trace("[备份]单个服务器", name, "[失败]___服务器名:" + ServObj.NAME + ",文件名:" + fileName); this.hasError = true; } } } } catch (Exception ex) { UploadTrace.AddLog(filePair, this.block, "文件备份:" + filePair.FileName + "出错.出错原因:" + ex.Message + ex.StackTrace); UploadTrace.FileUploadFail(filePair, this.block, ""); this.hasError = true; break; } UploadTrace.FileBackupSuccess(filePair, this.block); ++this.successnum; } } } }
/// <summary> /// 任务控制:线程上传 /// </summary> /// <param name="threadid"></param> private void UploadSiteThread(int threadid) { foreach (TaskFileInfo filePair in this.file[threadid]) { if (filePair != null && !this.hasError) { if (UploadTrace.IsTaskCancel(this.block)) { this.hasError = true; break; } else { try { FileStream fileStream = File.Open(filePair.SrcFile, FileMode.Open, FileAccess.Read, FileShare.Read); byte[] numArray = new byte[fileStream.Length]; fileStream.Read(numArray, 0, numArray.Length); fileStream.Close(); fileStream.Dispose(); string name = this.SiteObj.SiteBaseInfo.NAME; foreach (WebSiteServer ServObj in this.SiteObj.SiteBaseInfo.SERVLIST) { if (UploadTrace.IsTaskCancel(this.block)) { this.hasError = true; return; } else if (!this.UploadServ(ServObj, numArray, name, filePair, new FtpAtomOperation(this.dbLog))) { this.hasError = true; return; } } } catch (Exception ex) { UploadTrace.AddLog(filePair, this.block, "文件上传:" + filePair.FileName + "出错.出错原因:" + ex.Message); UploadTrace.FileUploadFail(filePair, this.block, ""); this.hasError = true; break; } UploadTrace.FileUploadSuccess(filePair, this.block); ++this.successnum; } } } }
private bool RollbackServ(WebSiteServer ServObj, TaskFileInfo FileObj, string SiteName, string block, string serverstatus) { string SrcUriStr = ""; //如果_BackupBlock不为空,则为同步任务失败的回滚,否则为延后回滚 if (!string.IsNullOrEmpty(this._BackupBlock)) { SrcUriStr = this.PreBakAimFile(ServObj, FileObj, this._BackupBlock).Replace("//", "/"); } else { SrcUriStr = this.PreBakAimFile(ServObj, FileObj, this.block).Replace("//", "/"); } string AimUriStr = this.PreCoverAimFile(ServObj, FileObj); try { this.dbLog.Trace("[级联检查/回滚]覆盖目标目录", SiteName, "[成功]___服务器名:" + ServObj.NAME + ",路径:" + FileObj.RelAimFolder); if (this.ftpcmd.RenameFtpFile(ServObj.BaseUri, SrcUriStr, AimUriStr, ServObj.USER, ServObj.PASS)) { UploadTrace.FileRollBackSuccess(FileObj, block, serverstatus); this.AutoRollBackSuccess(ServObj, FileObj, SiteName, this._BackupBlock, "COVER", block); this.dbLog.Trace("[文件回滚]单个服务器", SiteName, "[成功]___服务器名:" + ServObj.NAME + ",文件源位置:" + SrcUriStr + ",文件目标位置:" + AimUriStr); return(true); } else { UploadTrace.FileRollBackFail(FileObj, block, ServObj.NAME, serverstatus); UploadTrace.AddLog(FileObj, block, "文件回滚:" + FileObj.FileName + "到:" + ServObj.NAME + "出错."); this.dbLog.Trace("[文件回滚]单个服务器", SiteName, "[失败]___服务器名:" + ServObj.NAME + ",文件源位置:" + SrcUriStr + ",文件目标位置:" + AimUriStr); this._coverErrorServer = ServObj; this._coverErrorFile = FileObj; return(false); } } catch { UploadTrace.FileRollBackFail(FileObj, block, ServObj.NAME, serverstatus); UploadTrace.AddLog(FileObj, block, "文件回滚:" + FileObj.FileName + "到:" + ServObj.NAME + "出错."); this.dbLog.Trace("[文件回滚]单个服务器", SiteName, "[失败]___服务器名:" + ServObj.NAME + ",文件源位置:" + SrcUriStr + ",文件目标位置:" + AimUriStr); return(false); } }