2010年2月9日 星期二

將UI精靈設定時若發生問題,RollBack 的原則(草稿)

此文件中有一假定,失敗後所有的動作一定會成功。且尚未考慮Insert成功但因其他因素回報失敗,(如斷線)而造成DB內有資料但GUI/MGC確認為失敗。
將UI的設定,轉成封包,要丟給MGC
DataFormItmToSocket()
{
m_DbConnectoer.ConnectToDB();
若失敗,跳訊息視窗,停住動作。

CheckeSet_Ud()
建立 UD LUN (若有需要)
Insert Into Lun….
若失敗,跳訊息視窗,停住動作。
取回UD LUN ID
Select LID From Lun
若失敗,跳訊息,Delete 剛剛建立的 LUN (以 LUN Name 來刪)
停住動作。
或,以迴圈連續取三次,若都無法取得,再做上述動作
建立 SS
Insert Into Snapshot…
若失敗,則Delete 剛剛建立的 LUN (以 LID 來刪)
跳訊息視窗,停住動作。

建立VMDK
丟封包給Target
若失敗,則跳訊息視窗,
Delete 剛剛建立的Snapshot(以 Path來刪)
Delete 剛剛建立的 LUN (以 LID 來刪)
Delete 剛剛建立的 LUN (以 LUN Name 來刪)
跳訊息視窗,停住動作。

}

// 判斷 Group, Pc 頁面的設定
CheckSet_GroupAnd Pc()
{
判斷是為新增或是更新
建立PC Group (新增)
Insert Into HBA_GRP (…. )
若失敗 先判斷剛才有無建立 UD LUN
若有 Delete 剛剛建立的Snapshot(以 Path來刪)
Delete 剛剛建立的 LUN (以 LID 來刪)
Delete 剛剛建立的 LUN (以 LUN Name 來刪)
若無 跳訊息視窗,停住動作。

取回 HG ID
若失敗,先判斷剛才有無建立 UD LUN
若有 Delete 剛剛建立的Snapshot(以 Path來刪)
Delete 剛剛建立的 LUN (以 LID 來刪)
Delete 剛剛建立的 LUN (以 LUN Name 來刪)
Delete 剛剛建立的 HG(以HG_NSME來刪)
若無 跳訊息視窗,停住動作。

將此PC異動,變成加入此 PC Group (若有需要)
Update HBA Set HG_ID= ……
若失敗,先判斷剛才有無建立 UD LUN
若有 Delete 剛剛建立的Snapshot(以 Path來刪)
Delete 剛剛建立的 LUN (以 LID 來刪)
Delete 剛剛建立的 LUN (以 LUN Name 來刪)
Delete 剛剛建立的 HG(以HG_NSME來刪)
若無 跳訊息視窗,停住動作。

更新
Update HBA_GRP Set ……
若失敗,先判斷剛才有無建立 UD LUN
若有 Delete 剛剛建立的Snapshot(以 Path來刪)
Delete 剛剛建立的 LUN (以 LID 來刪)
Delete 剛剛建立的 LUN (以 LUN Name 來刪)
若無 跳訊息視窗,停住動作。
}

判斷OS頁面的設定
CheckSet_Os()
(若有需要)
建立OS Lun
Insert Into Lun……
若失敗,先判斷剛才有無建立 UD LUN
若有
Delete 剛剛建立的Snapshot(以 Path來刪)
Delete 剛剛建立的 LUN (以 LID 來刪)
Delete 剛剛建立的 LUN (以 LUN Name 來刪)
再判斷 HG為新增或更新
若新增
Delete 剛剛建立的 HG(以HG_NSME來刪)
另判斷有無PC異動,加入 PC Group
若有
反Update HBA Set HG_ID= ……
若為更新
反Update HBA_GRP Set ……
跳訊息視窗,停住動作。

取回 OS LUN ID
Select LID From Lun……
若失敗,先判斷剛才有無建立 UD LUN
若有
Delete 剛剛建立的Snapshot(以 Path來刪)
Delete 剛剛建立的 LUN (以 LID 來刪)
Delete 剛剛建立的 LUN (以 LUN Name 來刪)
再判斷 HG為新增或更新
若新增
Delete 剛剛建立的 HG(以HG_NSME來刪)
另判斷有無PC異動,加入 PC Group
若有
反Update HBA Set HG_ID= ……
若為更新
反Update HBA_GRP Set ……
Delete 剛剛建立的OS Lun(以LName來刪)

建立SS
Insert Into Snapshot ……
若失敗,先判斷剛才有無建立 UD LUN
若有
Delete 剛剛建立的Snapshot(以 Path來刪)
Delete 剛剛建立的 LUN (以 LID 來刪)
Delete 剛剛建立的 LUN (以 LUN Name 來刪)
再判斷 HG為新增或更新
若新增
Delete 剛剛建立的 HG(以HG_NSME來刪)
另判斷有無PC異動,加入 PC Group
若有
反Update HBA Set HG_ID= ……
若為更新
反Update HBA_GRP Set ……
Delete 剛剛建立的OS Lun(以LName來刪)

將 OS 與 Group 建立關連 (此處有無需要要Roll back??)
Insert Into GRP_LUN…..
若失敗,先判斷剛才有無建立 UD LUN
若有
Delete 剛剛建立的Snapshot(以 Path來刪)
Delete 剛剛建立的 LUN (以 LID 來刪)
Delete 剛剛建立的 LUN (以 LUN Name 來刪)
再判斷 HG為新增或更新
若新增
Delete 剛剛建立的 HG(以HG_NSME來刪)
另判斷有無PC異動,加入 PC Group
若有
反Update HBA Set HG_ID= ……
若為更新
反Update HBA_GRP Set ……
Delete 剛剛建立的OS Lun(以LName來刪)
Delete 剛剛建立的SnapShot (以Path來刪)
現有OS
將OS與Group建立關連
Insert Into BRP_LUN……
若失敗,先判斷剛才有無建立 UD LUN
若有
Delete 剛剛建立的Snapshot(以 Path來刪)
Delete 剛剛建立的 LUN (以 LID 來刪)
Delete 剛剛建立的 LUN (以 LUN Name 來刪)
再判斷 HG為新增或更新
若新增
Delete 剛剛建立的 HG(以HG_NSME來刪)
另判斷有無PC異動,加入 PC Group
若有
反Update HBA Set HG_ID= ……
若為更新
反Update HBA_GRP Set ……
跳訊息視窗,停住動作。

送封包給 Target,建立VMDK
若失敗,先判斷剛才有無建立 UD LUN
若有
Delete 剛剛建立的Snapshot(以 Path來刪)
Delete 剛剛建立的 LUN (以 LID 來刪)
Delete 剛剛建立的 LUN (以 LUN Name 來刪)
再判斷 HG為新增或更新
若新增
Delete 剛剛建立的 HG(以HG_NSME來刪)
另判斷有無PC異動,加入 PC Group
若有
反Update HBA Set HG_ID= ……
若為更新
反Update HBA_GRP Set ……
再判斷OS為新增或現有
若新增
Delete 剛剛建立的
Delete 剛剛建立的OS Lun(以LName來刪)
Delete 剛剛建立的SnapShot (以Path來刪)
Delete 剛剛建立的關連(以HG_ID + LID來刪 ??)
若原有
Delete 剛剛建立的關連(以HG_ID + LID來刪 ??)
跳訊息視窗,停住動作。
}

沒有留言:

張貼留言