2010年2月26日 星期五

發佈的可能BUG

如果已經有VER0與1
在發佈的時候,會發佈VER2
但是在DVT那邊發現有時候會有重複的VER0或VER1存在
但是不太確定,因為並非每次都發生
之後再回來確認這問題

2010年2月25日 星期四

進階畫面-Adv- OS-等待補上的防呆與錯誤判斷-

Adv-OS之 OS新增
◆ 如果沒有輸入NAME、選Storage、設定Size...的防呆
◆ TabIndex的設定確認
◆ Storage沒有預設選擇把OS放在怎樣的(Raid ? )硬碟裡
◆ 關閉按鈕之實作


Adv-OS之 OS修改
◆TabIndex的設定確認
◆修改資料之後,DataGrid會跳回第一筆,試著停留在原本那一筆
◆ 關閉按鈕之實作


Adv-OS之 OS搜尋
◆TabIndex的設定確認
◆如果沒打勾,OK按鈕不能按,如果沒打勾,後面的選擇輸入要Disable
◆ 關閉按鈕之實作


Adv-OS之 OS刪除
◆要連同SnapShot都刪除,所以要以迴圈丟封包請Target做,目前只有刪除Base
◆需要先進行條件判斷:
1.OS在DB是否存在
2.OS所使用的Storage是否存在,也是否狀態為下線
3.OS有無Online的使用者,有則不允許刪除
4.OS是否有屬於某個群組,有則提示


Adv-OS之共通需求
◆顯示的資訊當中,也要包含這個OS的快照的詳細資訊,快照的版本,以及快照的使用者清單






Adv-PC之 PC刪除
◆需要先進行條件判斷:
1.PC在DB是否存在
2.PC所使用的Storage是否存在,也是否狀態為下線
3.PC本身是否Online中或有無Online的使用者,有則不允許刪除



Qlution2.1升級2.2時會碰到的問題

在 2.1 時就存在的 OS,因為機制不同,並不會有相對應的 VMDK,在升級2.2後,會因此造成錯誤。此問題需要大家討論來訂定處理方法。

2010年2月24日 星期三

如何處理提示訊息的視窗?

如果訊息視窗以ShowDialog的強制回應方式,程式會停在這行,想要進行的程序只能在對話框被關掉之後才會作,這樣不行

如果訊息不以強制回應呈現,視窗可能被使用者其他視窗遮到,或是忽略不去按,會有一堆視窗殘存在畫面上

所以用MaskPanel的方式來做。

2010年2月22日 星期一

訪客模式精靈待解決問題

1. 若使用現有群組,且將群組名稱更改,則會另外新增一個新名稱的群組,應該將 DB 中原來的群組名稱改過來

2010年2月21日 星期日

關於Storage的移除、替換以及關於User與HBA會把UD跟PSD建立在哪個Storage上

User與HBA會把UD跟PSD建立在哪個Storage上這個屬性不可拿掉,因為ISNS會根據這個欄位來選取Target

而GUI在顯示畫面上,也會讓管理者設定與看到User或HBA的US跟PSD建立在哪個Storage上,之前已經設定過,則不可變更,之前沒設定過,則可以變更。

當管理者要移除Storage的話,會先檢查有無OS或UD或HD在其上,如果有,則提示有資料在,不給砍,但是也允許他強力砍,就是要求他輸入確認密碼,然後將其上所有的OS跟UD跟USER跟HD跟HBA都刪除,然後Storage清除掉。

而替換的話,則是
1.不用動到GUI,直接放上一顆新的Storage,建立一個新的.sys檔案,裡面填妥想替換的Storage的ID跟Name就可以把舊的拔除,上新的。

2.把上述的動作透過程式自動作掉,讓管理者從UI選擇要替換的Storage以及新的Storage,然後將.sys替換掉。這個替換或建立.sys檔案的動作,應該是由IO完成,試看看能否透過[ Add Storage ]指令來達成。

2010年2月11日 星期四

選擇現有電腦群組 UD 不可變動

在精靈中,若使用者選擇使用"現有電腦群組"則,在指派 UD 的步驟有以下規則

1. 若此電腦群組中的所有電腦皆沒有 UD,則,是否讓群組內的電腦擁有可存放資料的 Radio Button 預設為"否"。反之若群組中有一部以上的電腦有 UD,則預設為"是"。

2. 在是否讓群組內的電腦擁有可存放資料的 Radio Button 下方顯示紅字"因使用現有電腦群組, 故,此功能不開放。"等字樣

3. 該頁面其它文字及選項皆不顯示

進階GUI 切出群組內容編輯模組

感謝史帝夫大力相助...

群組內容的編輯大小為:

Size = ( 528, 622 )

2010年2月10日 星期三

Q2.2 「 PSD LUN的LTYPE值 」與「 PSD 的 VMDK 檔案個數 」與「PSD命名規則簡述」

PSD改名為 SD


PC的SD LUN:
(1) ADMIN權限的PC:不需要建立PSD,他會用Normal PC的SD
(2) Normal PC:LTYPE=24


USER的SD LUN:
(1) ADMIN權限的USER:LTYPE=14
(2) Normal USER:LTYPE=100






---------------------------------------------------------------------------------------------
每個PC都會僅有一個SD,對應幾個OS都是用這個SD進去,用過就忘,而PC以Admin來進入的話,也會用這個SD。


每個User則都會對應到每個OS有一個SD,比方某個User屬於某個User Group,然而這個User Group有分配了5個OS,則要建立五個SD的資料在DB裡。(因為只需要最新發佈的OS才需要建立SD,不用每個發佈都建立SD)


如果User的身份是Administrator則,他也是僅有一個SD,是用來讓他進入「已發佈」的OS用的暫存SD,一樣是用過就忘。


PS.在GUI或MGC這邊,僅需要在DB建立資料就好了,不需要建立實際的SD的VMDK檔案




---------------------------------------------------------------------------------------------
SD的命名分成兩個部分:


1.SD LUN LNAME 的命名:
由於UD的LNAME命名採用:UID(10碼)_ UD0
所以SD的命名方式為:


User : 
UID(10碼) _ USD _ OSID(10碼) _ OS版本號(4碼)


User Admin: 
UID(10碼) _ USD


PC : 
HID(10碼) _ HSD 




2.SD的VMDK檔案命名:


User : 
目錄:\User\UID\OS_USD\
UID(10碼) _ USD _ OSID(10碼) _ OS版本號(4碼)  _ 個人時光回溯版本號(4碼).vmdk


User Admin: 




目錄:\User\UID\OS_USD\
UID(10碼) _ USD.vmdk


PC : 
目錄:\Computer\HID\OS_HSD\
HID(10碼) _ HSD .vmdk





---------------------------------------------------------------------------------------------
備註:
UD的LNAME與VMDK檔案路徑:





User : 
LNAME:UID(10碼) _ UD0 ( 0 ~ 3 )
目錄:\User\UID\UD\
UID(10碼) _ UD0 .vmdk ( 0 ~ 3 )





PC : 

LNAME:HID(10碼) _ HD0 ( 0 ~ 3 )
目錄:\Computer\HID\HD\
HID(10碼) _ HD0 .vmdk( 0 ~ 3 )

第一次審核會議的意見

To Honda:

Clement建議Snapshot是否可以有Description,方便使用者註記這個版本有安裝了什麼軟體

DB之LUN TABLE新增欄位:SD_OS_VERID

DB之LUN TABLE新增欄位:SD_OS_VERID

精靈A訪客模式之建立資料流程補充PSD部分

當使用者或電腦換群組
需要考慮必須查他們的新群組的OS,以及舊的群組的OS
將他們舊的PSD(對照到舊的群組的OS)給砍掉,然後建立新的PSDD(對照到舊的群組的OS)
而上述所指的都是DB的LUN,而非vmdk檔案,而其中要思考如果舊的群組的OS跟新的群組的OS有重疊,則不要刪除那些PSD

所以在DataStore也要寫好對應的Function,讓外部呼叫



而如果OS從群組異動,比方從A群組移到B群組,則,A群組所有的USER或PC的「對應到此OS之PSD」要被清除,然後建立B群組所有USER或PC的「對應到此OS之PSD」

所以在DataStore也要寫好對應的Function,讓外部呼叫

2010年2月9日 星期二

進階GUI 切出元件編輯模組

根據討論結果 (討論參與人有Crystal,Foxy,David)
將GUI進階設定的元件(OS,PC,USER)放大編輯的部份
採用以UserControl的方式編輯:

Size = ( 904, 553 )

因背景可能會採陰影方式 (使整個編輯框有突顯的效果 )
故編輯時,可以預留一點邊,不要太貼就可以了

OS未發佈、PSD不需建實體vmdk(GUI部份)

(1) OS未發佈,亦可配置給PcGroup及UserGroup
(2) PSD建置的部份,在GUI僅需建立出對應之DB資料
  實際建立出vmdk檔案的部份,Target會自動偵測,如果沒有PSD,會自行建立

將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來刪 ??)
跳訊息視窗,停住動作。
}

2010年2月8日 星期一

關於PSD,需要討論的議題

(1) PSD的建立點
-(a) OS發佈時:將關連至該OS的各個Group下的每個成員,建立對應該OS之PSD
-(b) Group新增成員時:針對該成員,建立與Group關連之各個OS之PSD
-(c) ...

(2) PSD的刪除點
-(a) OS被移除關連時:將移除關連之Group,其中的每個成員對應至該OS的PSD刪除
 *延伸問題:OS被移除關連後,若還有被其他Group關連,那該OS的SnapShot不更動是應該的,但如果該OS已經沒有被任何Group關連,已發佈過的SnapShot版本亦不可能再發佈,此時是否自動回溯或合併?
-(b) PSD控制項:將該USER(or PC)的PSD設為必忘
-(c) ...

2010年2月7日 星期日

"發佈"成功 XD

已可使用”發佈”功能成功建立出下一個SnapShot版本的vmdk檔!
在測試過程中發現一個問題:
 若前一個SnapShot版本的vmdk檔不存在
 (即SourcePath的檔案並不存在)
 則發佈無法建立成功,但Target仍回傳 0 (成功)
 (已告知Joya)

排除掉這個問題,已可成功發佈,並產生下一個版本的OS SnapShot!
真是...值得慶祝!^0^
( 剛好今天RD尾牙 )

----------------------------------
補充一件值得慶祝的事!
那就是PSD的建置也沒問題了!>"<..真是感動到要流眼淚...
最復雜的PSD LNAME及檔案目錄結構
規劃了將近兩天( + 程式架構規劃 )
終於...沒有白規劃
一試就給它成功
(當然我是很小心的試啦 ..而且有小修小改~環節太多了 ` )

總之 一整個HAPPY
這時候就算叫我導QLUTION我也願意 XD

Q2.1 的 MGC之LUN沒有BLOCK,會導致SQL Syntax Error

在Q2.0或2.1的MGC當中
如果LUN沒有BLOCK,會導致SQL Syntax Error
為了避免一直出現這個錯誤,要把這段邏輯改成「忽略此Syntax Error,讓程式繼續執行下去不中斷」

當然,之後仍需要解決這種不完全動作留下的垃圾資料

Block Mode的Storage 與 File Mode的Storage

若使用Qlution 2.2的精靈A
在操作過程中選擇了Q2.1或之前的Storage
  (即 Block Mode的Storage)
   * 因為Storage選單是從DB的Storage Table取出
   Block Mode的Storage也在DB中
則無法建立出對應之VMDK檔案
但也沒回傳任何錯誤

這個錯誤是否需被定義清楚?

相容或不容
不容的話,在Storage選單就擋掉?
相容的話,又該怎麼處理或顯示?

二月份任務規劃

封包GUI與MGC定義(FOXY、DAVID)
GUI送指令給MGC,給TARGET之底層實作。(FOXY、DAVID)

UI精靈之底層運作。(DAVID)
進階畫面設定(Crystal)

MGC撰寫(FOXY)


大家在思考一下,需要多少時間比較恰當吧


附註:封包定義MGC與Target之Target回傳碼請JOYA幫忙補充。

一月份 For 測試之工作安排回顧


一月份 For 測試之工作安排回顧:

GU美工整合與精靈D調整。(Crystal)--------------------Crystal完成GUI美工整合,與部分精靈D之調整,David完成後續精靈D之調整。
封包MGC與TARGET與UI之定義(DAVID)----------------DAVID已完成定。
GUI撈資料庫、精靈操作過程記錄於DB(FOXY)----------------FOXY已完成精靈A

再者1/30之前
發佈SS的UI設計(Crystal)----------------Crystal即將完成
MGC的建立流程指令撰寫,包含發佈SS(FOXY)----------------FOXY寫在GUI端,發佈SS也請Crystal先寫在GU端
GUI送封包指令給MGC(DAVID)----------------FOXY寫在GUI端

2010年2月6日 星期六

DataStore要補的資料

OsData, PgData, UserData ....這些Class當中,有些需要加上 Action Code ,為了讓MGC與GUI封包溝通時所指定的Action Code有地方儲存的關係。



UserData的Private OS個數,在封包擴充保留到3個OS,目的只是為了跟UD個數一樣,比較好記

Profile Index 的欄位,在2.2當中不需要了

MGC與GUI的溝通封包當中,有個Profile Index 的欄位,在GUI當中也會有這個設定,在2.2當中,是不是就不需要了?就放在PSD的VMDK就好了呢?目前應該是「是」,之後在會議上提出來請大家確認一下

”發佈”要製作的功能

按下"發佈"會執行的動作:

(1) create new os snapshot
(2) tell target to create vmdk of new os verion
(3.1) if target create success , update db data accord to (1)
(3.2) if target creat failed, delete (1) create record
(3.1.1) follow (3.1) success :
create psd lun and snapshot with every pc and user that relate with be published os
(3.1.2) tell target to create PSD vmdk
(3.1.3.1) if target create success, do nothing
(3.1.3.2) if target create failed, delete (3.1.1) create record

2010年2月5日 星期五

MGC2.2在撈資料的部分,還需要支援哪些封包呢?

Alien:

Login
HeartBeat
ListHBA
ListHG



AD同步
GetItemUser
Cmd_UgNa
Cmd_UserNa

2010年2月4日 星期四

Q2.2 DB之LUN.LNAME命名規則

LNAME的命名規則

分為三種類型:

<OS>(原命名方式)
  LNAME可由使用者自行命名
<UD>
  UserDisk : UID_UDx
       (UID為10碼;x指序號,由0開始編,目前最多三個UD,序號即0、1、2)
       ex--> 0000000001_UD0
  PcDisk(HbaDisk) : HID_HDx
       (HID為10碼;x為序號,由0開始編,目前最多三個HD,序號即0、1、2)
       ex--> 0000000002_HD1
<PSD>
  UserPsd : OsLid_OsSsVerid_UID_USD
       ( UID為10碼;OsLid為對應OS的LID,亦為10碼 ;OsSsVerid為4碼)
       ex--> 0000000012_0000_0000224503_USD
  PcPsd: OsLid_OsSsVerid_HID_HSD
      ( HID為10碼;OsLid為對應OS的LID,亦為10碼;OsSsVerid為4碼 )
      ex--> 0000000005_0000_0000036985_HSD
  PcAdminPsd : OsLid_OsSsVerid_UID_HSD_ADMIN
         (OsLid為對應OS的LID,為10碼;OsSsVerid為4碼;PcGroup之管理帳號為User帳號,故有UID,亦填入10碼)
         ex-->0000000025_0002_0000000001_HSD_ADMIN

作業系統發佈UI出現偶發問題(偶發機率偏高)

當前的作業系統發佈UI出現了一個問題 :

在選擇OS目前狀態時,若在"未配置"及"專屬作業系統"此兩個選項之間切換
會有一定機率出現錯誤
且C#會出現ERROR : NullReferenceException
程式停在Program.cs裡的 Main()裡的 "Application.Run( new Frm_Intro() );" 此行

此問題為偶發性
機率約為75% 算高

須找時間盡快解決

麻煩DAVID幫忙進行思考,指令失敗要怎麼處理?

比方在精靈A當中

會Create Group,會把PC加到這個Group
也會建立UD
最後建立OS


過程當中,也會跟Target進行封包的溝通
那如果中間有封包失敗了,或是某SQL失敗了
我們要怎麼作?後續要不要進行,前面建立的資料要不要刪掉