專(zhuān)利名稱(chēng):一種計(jì)費(fèi)網(wǎng)關(guān)重啟恢復(fù)工作的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種用于移動(dòng)通信系統(tǒng)的分組數(shù)據(jù)業(yè)務(wù)計(jì)費(fèi)話單的處理技術(shù),確切地 說(shuō),涉及一種計(jì)費(fèi)網(wǎng)關(guān)CG重啟恢復(fù)工作的方法,屬于移動(dòng)通信的計(jì)費(fèi)技術(shù)領(lǐng)域。
背景技術(shù):
計(jì)費(fèi)網(wǎng)關(guān)CG (Charging Gateway)是TD-SCDMA和GPRS/WCDMA移動(dòng)通信網(wǎng)絡(luò)的一 個(gè)基礎(chǔ)網(wǎng)元,其功能是實(shí)現(xiàn)移動(dòng)通信網(wǎng)絡(luò)數(shù)據(jù)域的計(jì)費(fèi)數(shù)據(jù)采集,該網(wǎng)元在整個(gè)移動(dòng)通信 網(wǎng)絡(luò)中的位置如圖l所示。對(duì)于電信計(jì)費(fèi)網(wǎng)關(guān)而言,該網(wǎng)元的工作穩(wěn)定性和容災(zāi)性的設(shè)計(jì) 要求很高,通常采用雙機(jī)冗余備份機(jī)制,以提高該裝置的可靠性。盡管如此,電信運(yùn)營(yíng)商對(duì) 于單機(jī)的容災(zāi)性也提出了相應(yīng)的設(shè)計(jì)要求。在CG的設(shè)計(jì)規(guī)范中,電信運(yùn)營(yíng)商要求在單機(jī)情 況下,在遇到故障重啟后,CG應(yīng)該不丟失計(jì)費(fèi)話單,并能正常工作和正常合并計(jì)費(fèi)話單。例 如,在關(guān)閉CG的雙機(jī)功能情況下,當(dāng)CG接收計(jì)費(fèi)話單過(guò)程時(shí),直接終止CG話單服務(wù)器中的 任一進(jìn)程(或直接關(guān)閉話單服務(wù)器電源后,重新啟動(dòng)),話單服務(wù)器都能夠自動(dòng)重啟所有進(jìn) 程、并繼續(xù)工作,且所生成的話單文件不會(huì)出現(xiàn)重復(fù)或丟失等情況。 參見(jiàn)圖1,介紹CG的工作性能CG通過(guò)接口 Ga接收來(lái)自GPRS服務(wù)節(jié)點(diǎn)SGSN或 GPRS網(wǎng)關(guān)節(jié)點(diǎn)GGSN的原始話單信息,即GPRS隧道協(xié)議GTP數(shù)據(jù)包,并對(duì)原始話單信息進(jìn)行 解析和存儲(chǔ)后,給SGSN或GGSN回復(fù)應(yīng)答信息。然后對(duì)多個(gè)原始話單進(jìn)行合并處理,得到最 終的計(jì)費(fèi)話單,傳送給計(jì)費(fèi)系統(tǒng)BS (Billing System)。由BS對(duì)最終計(jì)費(fèi)話單進(jìn)行后續(xù)處 理,形成最終的用戶賬單。圖中虛線表示信令接口 ,實(shí)線表示信令和數(shù)據(jù)傳輸接口 。
目前,TD-SCDMA和GPRS/WCDMA標(biāo)準(zhǔn)化組織3GPP提出的技術(shù)規(guī)范中,依靠SGSN或 GGSN與CG共同實(shí)現(xiàn)了計(jì)費(fèi)話單的傳輸和容錯(cuò)機(jī)制。當(dāng)SGSN或GGSN發(fā)送一個(gè)原始話單給 CG后,若沒(méi)有接收到來(lái)自CG的應(yīng)答,則SGSN或GGSN將備份該原始話單,并一直等到得到 CG明確的應(yīng)答后,才丟棄該原始話單。而CG接收到來(lái)自SGSN或GGSN的原始話單后,就對(duì) 該原始話單進(jìn)行解析。若解析正確,則保存該原始話單,并返回給SGSN或GGSN —個(gè)回應(yīng), 通知其刪除該原始話單;否則,要求SGSN或GGSN重新發(fā)送該原始話單。
當(dāng)CG出現(xiàn)故障后,通常將按如下情況進(jìn)行處理 (1)當(dāng)SGSN或GGSN產(chǎn)生一個(gè)原始話單,并將其發(fā)給CG進(jìn)行處理時(shí),若此時(shí)CG出 現(xiàn)故障并啟動(dòng)重啟過(guò)程,則因SGSN或GGSN沒(méi)有收到來(lái)自CG的應(yīng)答,當(dāng)CG重啟恢復(fù)后,SGSN 或GGSN將重新把該原始話單發(fā)給CG進(jìn)行處理;SGSN或GGSN與CG將繼續(xù)進(jìn)行工作,不會(huì) 出現(xiàn)丟單情況。 (2)當(dāng)CG正確解析原始話單,并給SGSN或GGSN返回正確應(yīng)答后,CG開(kāi)始處理原 始話單,判斷是否需要進(jìn)行話單合并等操作。若需要合并,則進(jìn)行合并操作,得到最終話單 并加以保存;然后繼續(xù)接收來(lái)自SGSN或GGSN的原始話單。若在保存最終話單后,CG出現(xiàn) 了故障,由于此時(shí)已經(jīng)完成了一個(gè)計(jì)費(fèi)話單的處理周期,得到了最終話單,這樣當(dāng)CG重啟 恢復(fù)后,SGSN或GGSN與CG也將繼續(xù)工作,不會(huì)出現(xiàn)丟單。 但是,上述機(jī)制沒(méi)有對(duì)發(fā)生故障的全部情況考慮周全若在對(duì)原始話單合并處理過(guò)程中,也即CG在回復(fù)SGSN或GGSN響應(yīng)之后、完成最終話單保存之前時(shí)出現(xiàn)了故障,由于 SGSN或GGSN已經(jīng)丟棄了原始話單,CG要根據(jù)已經(jīng)保存的原始話單重新建立合并過(guò)程,再恢復(fù) 到故障前的工作狀態(tài)和繼續(xù)接收來(lái)自SGSN或GGSN的原始話單。但是,現(xiàn)有技術(shù)規(guī)范沒(méi)有明 確給出CG如何應(yīng)對(duì)這個(gè)時(shí)段的相應(yīng)處理方法,造成業(yè)務(wù)處理中的一個(gè)盲點(diǎn),這個(gè)問(wèn)題就自然 成為CG實(shí)現(xiàn)正常工作時(shí)必須解決的問(wèn)題;否則,此種情況一旦發(fā)生,將造成部分話單的丟失。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的目的是提供一種能夠解決上述現(xiàn)有技術(shù)盲點(diǎn)的計(jì)費(fèi)網(wǎng)關(guān)重啟 恢復(fù)工作的方法,本發(fā)明方法使得CG在其整個(gè)工作過(guò)程中,都能夠正確處理計(jì)費(fèi)話單,既 保證未處理完的原始話單不會(huì)出現(xiàn)丟單,又保證了已處理完、尚未保存的話單不會(huì)重復(fù)處 理而出現(xiàn)重單;同時(shí),通過(guò)對(duì)需要處理的原始話單的數(shù)量進(jìn)行合理選擇,避免了 CG性能出 現(xiàn)明顯下降。 為了達(dá)到上述目的,本發(fā)明提供了一種計(jì)費(fèi)網(wǎng)關(guān)重啟恢復(fù)工作的方法,其特征在
于在CG出現(xiàn)故障并重新啟動(dòng)后,CG根據(jù)故障發(fā)生前在工作區(qū)存儲(chǔ)的信息,判斷故障發(fā)生
時(shí)的不同狀況,并分別執(zhí)行相應(yīng)操作;在不能通過(guò)GPRS服務(wù)節(jié)點(diǎn)SGSN或GPRS網(wǎng)關(guān)節(jié)點(diǎn)
GGSN與CG之間容錯(cuò)機(jī)制恢復(fù)工作的情況下,先合理選定從故障發(fā)生的時(shí)間起始的回溯分
析時(shí)間,再對(duì)CG本地存儲(chǔ)的原始話單和最終話單進(jìn)行回溯對(duì)比分析,發(fā)現(xiàn)未合并的原始話
單和刪除已合并的原始話單,然后重新構(gòu)建原始話單哈希表,恢復(fù)CG的正常工作。 為滿足計(jì)費(fèi)網(wǎng)關(guān)CG出現(xiàn)故障后的恢復(fù)要求,本發(fā)明針對(duì)3GPP規(guī)范中未涵蓋的故
障情況,提出了一種能夠很好地恢復(fù)CG工作的故障重啟恢復(fù)工作的方法。該方法包括了 CG
出現(xiàn)故障后的重啟恢復(fù)步驟、部分話單和最終話單的存儲(chǔ)方法、哈希表的構(gòu)建和刪除,以及
回溯時(shí)間點(diǎn)的選擇等內(nèi)容,并具有以下特點(diǎn)彌補(bǔ)和完善了 CG在回復(fù)SGSN或GGSN響應(yīng)之
后、保存最終話單之前時(shí)出現(xiàn)故障的應(yīng)對(duì)、處理措施,保障了 CG對(duì)故障處理的完備性,使得
CG在任何時(shí)間、出現(xiàn)各種不同故障,都不會(huì)發(fā)生計(jì)費(fèi)話單的丟單或重單的情況,保證計(jì)費(fèi)話
單的準(zhǔn)確性。而且,該方法能夠使得CG出現(xiàn)任何故障時(shí),都能夠完成重啟并恢復(fù)先前的工
作,提高了工作可靠性;并確保整個(gè)計(jì)費(fèi)網(wǎng)關(guān)的工作性能不會(huì)產(chǎn)生明顯影響。 本發(fā)明方法的操作過(guò)程簡(jiǎn)單、明晰,容易掌控和實(shí)現(xiàn)。再者,本發(fā)明的思路具有通
用性,對(duì)于其它需要考慮重啟和恢復(fù)功能的類(lèi)似系統(tǒng)或設(shè)備,該方法具有借鑒意義,因此,
本發(fā)明具有很好的推廣應(yīng)用前景。
圖1是CG在移動(dòng)通信網(wǎng)絡(luò)中的位置示意圖。
圖2是部分話單的哈希表結(jié)構(gòu)圖。
圖3是部分話單刪除后的哈希表結(jié)構(gòu)圖。
圖4是時(shí)間點(diǎn)選擇示意圖。 圖5是本發(fā)明計(jì)費(fèi)網(wǎng)關(guān)CG重啟恢復(fù)工作方法的操作步驟流程圖。
具體實(shí)施例方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步的詳細(xì)描述。 根據(jù)3GPP的技術(shù)規(guī)范,在用戶使用數(shù)據(jù)業(yè)務(wù)的過(guò)程中,為保證計(jì)費(fèi)數(shù)據(jù)的安全, 對(duì)于每次會(huì)話連接時(shí)間較長(zhǎng)的業(yè)務(wù)過(guò)程,SGSN或GGSN都會(huì)定時(shí)產(chǎn)生多個(gè)部分話單,并將各 個(gè)部分話單依次發(fā)給CG進(jìn)行處理和合并。 對(duì)于用戶數(shù)據(jù)業(yè)務(wù)的每一次會(huì)話連接過(guò)程中所產(chǎn)生的多個(gè)部分話單(又稱(chēng)為原 始話單),CG在本地設(shè)有一個(gè)對(duì)應(yīng)的存儲(chǔ)單元,本發(fā)明用原始話單參數(shù)original—cdr表示 之。每個(gè)部分話單的內(nèi)容中包含多個(gè)域(即字段),其中唯一標(biāo)識(shí)該部分話單屬于哪個(gè)會(huì) 話連接的域是用域參數(shù)charging」d表示的。因此,在一段時(shí)間范圍內(nèi),域參數(shù)charging— id相同的部分話單被認(rèn)為屬于同一個(gè)會(huì)話連接,將參與最終的話單合并,產(chǎn)生最終話單并 存儲(chǔ)在CG本地,用最終話單參數(shù)final_cdr表示。合并完成后,由CG將最終話單入庫(kù),并 刪除最終話單參數(shù)final_Cdr中的數(shù)據(jù)。 本發(fā)明采用線性鏈表結(jié)構(gòu)將原始話單參數(shù)charging」d相同的部分話單鏈接起 來(lái),得到部分話單鏈表。同時(shí)采用哈希表結(jié)構(gòu)來(lái)存儲(chǔ)對(duì)應(yīng)于某個(gè)原始話單參數(shù)charging」d 的部分話單信息,也即對(duì)應(yīng)某個(gè)數(shù)據(jù)業(yè)務(wù)會(huì)話連接的部分話單。 哈希值hash—key的計(jì)算方式為hash_key = charging_id% 255,式中,%表示 取模操作,255是哈希表的長(zhǎng)度。對(duì)哈希表沖突采用鏈表式結(jié)構(gòu)進(jìn)行處理將hash—key相 同的部分話單采用鏈表形式鏈接起來(lái);若域參數(shù)charging」d不同的部分話單鏈表具有相 同的haSh_key值而發(fā)生沖突時(shí),將haSh_key相同的部分話單鏈表再用鏈表鏈接起來(lái),而訪 問(wèn)時(shí)通過(guò)原始話單參數(shù)charging」d區(qū)分部分話單的歸屬。 參見(jiàn)圖2,介紹CG正常工作過(guò)程中得到的哈希表結(jié)構(gòu)圖的情況此時(shí),CG正常接收 來(lái)自SGSN或GGSN的部分話單。完成解析后,將部分話單存入到原始話單參數(shù)original— cdr代表的CG本地存儲(chǔ)空間;同時(shí),將部分話單以哈希表節(jié)點(diǎn)的形式插入到相應(yīng)的部分話 單鏈表(用part_cdr參數(shù)表示)中。 當(dāng)某個(gè)數(shù)據(jù)業(yè)務(wù)的會(huì)話連接完成時(shí),將會(huì)觸發(fā)SGSN或GGSN發(fā)送最后一個(gè)部分話 單,表示正常業(yè)務(wù)的結(jié)束。當(dāng)CG收到標(biāo)識(shí)為最后一個(gè)部分話單的數(shù)據(jù)包后,就進(jìn)行話單的 合并,即將對(duì)應(yīng)這個(gè)會(huì)話連接的所有部分話單進(jìn)行合并而得到最終話單,并存入到最終話 單參數(shù)final—cdr代表的CG本地存儲(chǔ)空間。同時(shí),要將部分話單鏈表從哈希表和origina1— cdr中刪除。 假設(shè)對(duì)圖2所示的哈希表中hash_key值為hash_key0的part_cdr_il,part_cdr_ i2, . . . , part_cdr_in所對(duì)應(yīng)的某個(gè)原始話單參數(shù)charging」d的各個(gè)部分話單的合并完 成、并將其刪除后,得到的哈希表結(jié)構(gòu)如圖3所示。CG的工作狀態(tài)就是伴隨著哈希表結(jié)構(gòu)的 插入與刪除等操作進(jìn)行相應(yīng)變換。 當(dāng)CG出現(xiàn)故障而自動(dòng)(或強(qiáng)制)重啟后,保存在CG內(nèi)存中的哈希表結(jié)構(gòu)將不復(fù) 存在。此時(shí),若要CG恢復(fù)到故障前的正常工作狀態(tài),則首先要將哈希表結(jié)構(gòu)恢復(fù)到故障前 的狀態(tài)。如前所述,所有存儲(chǔ)在哈希表中的部分話單記錄,都已經(jīng)保存在original—cdr參 數(shù)代表的CG本地存儲(chǔ)空間。因此,要恢復(fù)哈希表結(jié)構(gòu),必須重新解析original_Cdr參數(shù)中 的部分話單,根據(jù)域參數(shù)charging」d值將其插入到哈希表中,完成哈希表的重建。
但是,通常不可能將CG開(kāi)始工作后的所有時(shí)間的部分話單都重新進(jìn)行解析,這 樣既沒(méi)有必要、工作量也太大,且會(huì)嚴(yán)重影響CG的工作性能。因?yàn)橐呀?jīng)產(chǎn)生并保存最終話單的原始話單就沒(méi)有必要再讀入哈希表中,只需對(duì)CG發(fā)生故障前的一小段時(shí)間內(nèi)的原 始話單進(jìn)行再解析,重新構(gòu)建哈希表,也即將沒(méi)有生成最終話單并存入f inal_Cdr參數(shù)的 original_cdr參數(shù)中的原始話單再讀入哈希表中。 因此,重新解析的原始話單的起始時(shí)間點(diǎn)的選擇非常關(guān)鍵,它既影響到CG的工作 性能,又可能影響話單的正確性,必須仔細(xì)考慮。系統(tǒng)重啟后,CG首先讀取當(dāng)前工作目錄的 文件時(shí)間,這里記錄的是最近的原始話單文件的生成時(shí)間,用時(shí)間參數(shù)cycle表示。
回溯時(shí)間的選擇是由人工通過(guò)管理系統(tǒng)預(yù)設(shè)的固定值,或者根據(jù)需要進(jìn)行動(dòng)態(tài) 調(diào)整。然而,為保證系統(tǒng)的健壯性,選擇固定的回溯時(shí)間(用參數(shù)redo—time表示)更加 合理、可取。本發(fā)明通過(guò)對(duì)網(wǎng)上數(shù)據(jù)的提取分析,設(shè)定對(duì)故障前1小時(shí)之內(nèi)的原始話單進(jìn) 行重新分析,即redo—time參數(shù)值為3600秒(S)。因此,當(dāng)CG重啟后,需要重新解析從 cycle-redo_time到cycle這段時(shí)間內(nèi)原始話單original_cdr參數(shù)中的所有話單,以及最 終話單final_cdr參數(shù)中的所有話單,并構(gòu)建相應(yīng)的哈希表結(jié)構(gòu)。 參見(jiàn)圖4,介紹本發(fā)明方法選擇的具體回溯時(shí)間點(diǎn)。圖中,cycle點(diǎn)為CG出現(xiàn)故障 時(shí)間,參數(shù)redo—success為CG重啟恢復(fù)成功的時(shí)間點(diǎn)。 本發(fā)明是一種計(jì)費(fèi)網(wǎng)關(guān)重啟恢復(fù)工作的方法在CG出現(xiàn)故障并重新啟動(dòng)后,CG根 據(jù)故障發(fā)生前在工作區(qū)存儲(chǔ)的信息,判斷故障發(fā)生時(shí)的不同狀況,并分別執(zhí)行相應(yīng)操作;在 不能通過(guò)SGSN或GGSN與CG之間容錯(cuò)機(jī)制恢復(fù)工作的情況下,先合理選定從故障發(fā)生的時(shí) 間起始的回溯分析時(shí)間,再對(duì)CG本地存儲(chǔ)的原始話單和最終話單進(jìn)行回溯對(duì)比分析,發(fā)現(xiàn) 未合并的原始話單和刪除已合并的原始話單,然后重新構(gòu)建原始話單哈希表,恢復(fù)CG的正 常工作。
參見(jiàn)圖5,介紹本發(fā)明方法的具體操作步驟 步驟1、故障重啟在故障重啟過(guò)程中,CG重新執(zhí)行初始化,內(nèi)存中的數(shù)據(jù)不予保 留,硬盤(pán)上存儲(chǔ)的工作區(qū)文件則維持原狀,以供后續(xù)處理。 這里的故障重啟過(guò)程包括系統(tǒng)自動(dòng)判斷重啟,或維護(hù)人員啟動(dòng)重啟。
步驟2、判斷故障類(lèi)型CG根據(jù)原始話單original_Cdr參數(shù)和最終話單final_ cdr參數(shù)的存儲(chǔ)信息內(nèi)容判斷不同故障類(lèi)型后,酌情執(zhí)行后續(xù)步驟或結(jié)束該流程。該步驟 中,CG根據(jù)判斷的三種故障類(lèi)型,分別執(zhí)行下列操作內(nèi)容 (21)original_cdr參數(shù)和final_cdr參數(shù)均為空,表明該故障發(fā)生時(shí),各個(gè)部分
話單都已完成合并與存儲(chǔ)操作,CG能直接繼續(xù)正常工作,結(jié)束該流程;或 (22) f inal_Cdr參數(shù)為空,表明該故障發(fā)生時(shí),部分話單還沒(méi)有完成合并,SGSN或
GGSN都還沒(méi)有接收到CG的確認(rèn);此時(shí),SGSN或GGSN會(huì)嘗試重發(fā)GTP數(shù)據(jù)包,CG也能直接
繼續(xù)工作,結(jié)束該流程;或 (23)在CG對(duì)原始話單合并處理過(guò)程中,即在CG回復(fù)SGSN或GGSN響應(yīng)之后、完成 最終話單保存之前出現(xiàn)的故障;此時(shí),CG執(zhí)行后續(xù)操作步驟。 步驟3、分析部分話單CG先通過(guò)對(duì)當(dāng)前工作目錄的文件分析,確定最近的原始話 單文件生成時(shí)間值cycle為故障發(fā)生時(shí)間點(diǎn),接著讀取故障發(fā)生時(shí)間點(diǎn)以前設(shè)定回溯時(shí)間 內(nèi)的所有最終話單文件并形成最終話單鏈表(用參數(shù)redo—final—cdrJist表示之),再讀 取設(shè)定回溯時(shí)間內(nèi)的所有部分話單文件,并將其與上述鏈表的內(nèi)容進(jìn)行對(duì)比分析,提取其 中未完成合并的部分話單和形成部分話單鏈表(用參數(shù)red0_part_Cdr_liSt表示之),以供后續(xù)處理,防止發(fā)生丟失話單和避免出現(xiàn)重復(fù)話單。該步驟進(jìn)一步包括下列操作內(nèi)容
(31)先設(shè)定回溯時(shí)間,并分析當(dāng)前工作目錄內(nèi)的文件,確定最近的原始話單文件 保存時(shí)間作為故障發(fā)生時(shí)間點(diǎn); (32)讀取距離該故障發(fā)生時(shí)間點(diǎn)為設(shè)定回溯時(shí)間內(nèi)的所有最終話單文件,形成參 數(shù)redo—final—cdr—list的最終話單鏈表; (33)讀取距離該故障發(fā)生時(shí)間點(diǎn)為設(shè)定回溯時(shí)間內(nèi)的所有原始話單文件,再重新 進(jìn)行解析提取其中未合并的部分話單形成參數(shù)red0_part_Cdr_liSt的部分話單鏈表。
在將部分話單插入?yún)?shù)red0_part_Cdr_liSt的部分話單鏈表時(shí),要將該部分話 單的域參數(shù)charging」d與參數(shù)redo—final—cdr—list的最終話單鏈表中最終話單的域參 數(shù)charging—id進(jìn)行比較; 若兩者相等,表明該部分話單已經(jīng)被合并形成了最終話單,不需再進(jìn)行合并處理, 即該部分話單不要插入到redo_part_cdr_list鏈表中; 若兩者不等,則將該部分話單插入到red0_part_Cdr_liSt鏈表中,供后續(xù)進(jìn)行合 并處理。 步驟4、重構(gòu)哈希表CG讀取部分話單鏈表中的部分話單,用線性鏈表將域參數(shù)相 同的部分話單鏈接起來(lái),再根據(jù)部分話單的域參數(shù)值得到其哈希值后,將該部分話單鏈表 插入到重新構(gòu)建的原始話單哈希表中;當(dāng)該部分話單都已讀取并插入于該原始話單哈希表 后,即完成哈希表的重構(gòu)。 該步驟中,將部分話單鏈表插入到重新構(gòu)建的原始話單哈希表中的操作包括下列 內(nèi)容 (41)設(shè)定哈希值hash_key的計(jì)算方式為hash_key = charging_id% 255,式 中,%表示取模操作,255為哈希表的長(zhǎng)度; (42)采用鏈表式結(jié)構(gòu)處理哈希表沖突CG按haSh_key將部分話單鏈表保存到原 始話單哈希表中;若域參數(shù)charging」d不同的部分話單鏈表具有相同的haSh_key值而發(fā) 生沖突時(shí),將haSh_key相同的部分話單鏈表再用鏈表鏈接起來(lái),而訪問(wèn)時(shí)通過(guò)cnarging_ id來(lái)區(qū)分該部分話單的歸屬; (43)當(dāng)CG讀取到標(biāo)識(shí)為最后一個(gè)部分話單的數(shù)據(jù)包后,執(zhí)行話單的合并,即將 對(duì)應(yīng)該會(huì)話連接的所有部分話單執(zhí)行合并處理,得到最終話單后,將其存入到最終話單 final_cdr參數(shù)的本地存儲(chǔ)空間;同時(shí),從哈希表和原始話單original_Cdr參數(shù)中刪除該 會(huì)話連接的所有部分話單鏈表。 步驟5、恢復(fù)正常工作CG通知SGSN或GGSN發(fā)送下一個(gè)GPRS隧道協(xié)議GTP數(shù)據(jù) 包,表明CG已完成重啟恢復(fù),重新開(kāi)始正常工作。 本發(fā)明方法已經(jīng)由申請(qǐng)人在其研發(fā)的CG設(shè)備中進(jìn)行了多次試驗(yàn)實(shí)施,試驗(yàn)的結(jié) 果是成功的,實(shí)現(xiàn)了發(fā)明目的,并通過(guò)了中國(guó)移動(dòng)GPRS網(wǎng)絡(luò)入網(wǎng)測(cè)試中關(guān)于單機(jī)情況下恢 復(fù)計(jì)費(fèi)的所有測(cè)試項(xiàng),這也證明了本發(fā)明方法的有效性。
權(quán)利要求
一種計(jì)費(fèi)網(wǎng)關(guān)CG重啟恢復(fù)工作的方法,其特征在于在CG出現(xiàn)故障并重新啟動(dòng)后,CG根據(jù)故障發(fā)生前在工作區(qū)存儲(chǔ)的信息,判斷故障發(fā)生時(shí)的不同狀況,并分別執(zhí)行相應(yīng)操作;在不能通過(guò)GPRS服務(wù)節(jié)點(diǎn)SGSN或GPRS網(wǎng)關(guān)節(jié)點(diǎn)GGSN與CG之間容錯(cuò)機(jī)制恢復(fù)工作的情況下,先合理選定從故障發(fā)生的時(shí)間起始的回溯分析時(shí)間,再對(duì)CG本地存儲(chǔ)的原始話單和最終話單進(jìn)行回溯對(duì)比分析,發(fā)現(xiàn)未合并的原始話單和刪除已合并的原始話單,然后重新構(gòu)建原始話單哈希表,恢復(fù)CG的正常工作。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法包括下列操作步驟(1) 故障重啟在故障重啟過(guò)程中,CG重新執(zhí)行初始化,內(nèi)存中的數(shù)據(jù)不予保留,硬盤(pán)上存儲(chǔ)的工作區(qū)文件則維持原狀,以供后續(xù)處理;(2) 判斷故障類(lèi)型CG根據(jù)原始話單original—cdr參數(shù)和最終話單f inal_cdr參數(shù)的存儲(chǔ)信息內(nèi)容判斷不同故障類(lèi)型后,酌情執(zhí)行后續(xù)步驟或結(jié)束該流程;(3) 分析部分話單CG先讀取故障發(fā)生時(shí)間點(diǎn)以前設(shè)定回溯時(shí)間內(nèi)的所有最終話單文件并形成鏈表,再讀取設(shè)定回溯時(shí)間內(nèi)的所有部分話單文件,并將其與所述鏈表的內(nèi)容進(jìn)行對(duì)比分析,提取其中未完成合并的部分話單和形成部分話單鏈表,以供后續(xù)處理,防止發(fā)生丟單和避免出現(xiàn)重復(fù)話單;(4) 重構(gòu)哈希表CG讀取部分話單鏈表中的部分話單,用線性鏈表將域參數(shù)相同的部分話單鏈接起來(lái),再根據(jù)部分話單的域參數(shù)值得到其哈希值后,將該部分話單鏈表插入到重新構(gòu)建的原始話單哈希表中;當(dāng)該部分話單都已讀取并插入于該原始話單哈希表后,即完成哈希表的重構(gòu);(5) 恢復(fù)正常工作CG通知SGSN或GGSN發(fā)送下一個(gè)GPRS隧道協(xié)議GTP數(shù)據(jù)包,表明CG已完成重啟恢復(fù),重新開(kāi)始正常工作。
3. 根據(jù)權(quán)利要求2所述的方法,其特征在于所述故障重啟過(guò)程包括系統(tǒng)自動(dòng)判斷重啟或維護(hù)人員啟動(dòng)重啟。
4. 根據(jù)權(quán)利要求2所述的方法,其特征在于所述步驟(2)中,CG根據(jù)判斷的三種故障類(lèi)型,分別執(zhí)行下列操作內(nèi)容(21) original_Cdr參數(shù)和final_cdr參數(shù)均為空,表明該故障發(fā)生時(shí),各個(gè)部分話單都已完成合并與存儲(chǔ)操作,CG能直接繼續(xù)正常工作,結(jié)束該流程;或(22) f inal_Cdr參數(shù)為空,表明該故障發(fā)生時(shí),部分話單還沒(méi)有完成合并,SGSN或GGSN都還沒(méi)有接收到CG的確認(rèn);此時(shí),SGSN或GGSN會(huì)嘗試重發(fā)GTP數(shù)據(jù)包,CG也能直接繼續(xù)工作,結(jié)束該流程;或(23) 在CG對(duì)原始話單合并處理過(guò)程中,即在CG回復(fù)SGSN或GGSN響應(yīng)之后、完成最終話單保存之前出現(xiàn)的故障;此時(shí),CG執(zhí)行后續(xù)操作步驟。
5. 根據(jù)權(quán)利要求2所述的方法,其特征在于所述步驟(3)進(jìn)一步包括下列操作內(nèi)容(31) 先設(shè)定回溯時(shí)間,并分析當(dāng)前工作目錄內(nèi)的文件,確定最近的原始話單文件保存時(shí)間作為故障發(fā)生時(shí)間點(diǎn);(32) 讀取距離該故障發(fā)生時(shí)間點(diǎn)為設(shè)定回溯時(shí)間內(nèi)的所有最終話單文件,形成參數(shù)redo_final_cdr_list的最終話單鏈表;(33) 讀取距離該故障發(fā)生時(shí)間點(diǎn)為設(shè)定回溯時(shí)間內(nèi)的所有原始話單文件,再重新進(jìn)行解析提取其中未合并的部分話單形成參數(shù)red0_part_Cdr_liSt的部分話單鏈表。
6. 根據(jù)權(quán)利要求5所述的方法,其特征在于所述步驟(33)包括下列操作內(nèi)容在將部分話單插入?yún)?shù)red0_part_Cdr_liSt的部分話單鏈表時(shí),要將該部分話單的域參數(shù)與參數(shù)charging」d與參數(shù)redo—final—cdr—list的最終話單鏈表中的最終話單的域參數(shù)charging_id進(jìn)行比較;若兩者相等,表明該部分話單已經(jīng)被合并形成了最終話單,不需再進(jìn)行合并處理,即該部分話單不要插入到redo_part_cdr_list鏈表中;若兩者不等,則將該部分話單插入到red0_part_Cdr_liSt鏈表中,供后續(xù)進(jìn)行合并處理。
7. 根據(jù)權(quán)利要求5所述的方法,其特征在于所述回溯時(shí)間是采用人為設(shè)定的固定值,或者根據(jù)需要進(jìn)行調(diào)整,當(dāng)前設(shè)定值為1小時(shí)。
8. 根據(jù)權(quán)利要求2所述的方法,其特征在于所述步驟(4)中,將部分話單鏈表插入到重新構(gòu)建的原始話單哈希表中的操作包括下列內(nèi)容(41) 設(shè)定哈希值hash_key的計(jì)算方式為hash_key = charging_id% 255,式中,%表示取模操作,255為哈希表的長(zhǎng)度;(42) 采用鏈表式結(jié)構(gòu)處理哈希表沖突CG按hash—key將部分話單鏈表保存到原始話單哈希表中;若域參數(shù)charging」d不同的部分話單鏈表具有相同的haSh_key值而發(fā)生沖突時(shí),將haSh_key相同的部分話單鏈表再用鏈表鏈接起來(lái),而訪問(wèn)時(shí)通過(guò)charging」d來(lái)區(qū)分該部分話單的歸屬;(43) 當(dāng)CG讀取到標(biāo)識(shí)為最后一個(gè)部分話單的數(shù)據(jù)包后,執(zhí)行話單的合并,即將對(duì)應(yīng)該會(huì)話連接的所有部分話單執(zhí)行合并處理,得到最終話單后,將其存入到最終話單final_Cdr參數(shù)的本地存儲(chǔ)空間;同時(shí),從哈希表和原始話單original—cdr參數(shù)中刪除該會(huì)話連接的所有部分話單鏈表。
全文摘要
一種計(jì)費(fèi)網(wǎng)關(guān)CG重啟恢復(fù)工作的方法,是在CG出現(xiàn)故障并重新啟動(dòng)后,CG根據(jù)故障發(fā)生前在工作區(qū)存儲(chǔ)的信息,判斷故障發(fā)生時(shí)的不同狀況,并分別執(zhí)行相應(yīng)操作;在不能通過(guò)SGSN或GGSN與CG之間容錯(cuò)機(jī)制恢復(fù)工作的情況下,先合理選定從故障發(fā)生的時(shí)間點(diǎn)起始的回溯分析時(shí)間,再對(duì)CG本地存儲(chǔ)的原始話單和最終話單進(jìn)行回溯對(duì)比分析,發(fā)現(xiàn)未合并的原始話單和刪除已合并的原始話單后,重新構(gòu)建原始話單哈希表,恢復(fù)CG的正常工作。該方法包括故障重啟、判斷故障類(lèi)型、分析部分話單、重構(gòu)哈希表和恢復(fù)正常工作五個(gè)操作步驟。該方法使得CG出現(xiàn)任何故障都能完成重啟并恢復(fù)先前工作,提高工作可靠性和計(jì)費(fèi)話單準(zhǔn)確性;并確保整個(gè)計(jì)費(fèi)網(wǎng)關(guān)的工作性能不會(huì)受到明顯影響。
文檔編號(hào)H04W4/24GK101778367SQ200910244139
公開(kāi)日2010年7月14日 申請(qǐng)日期2009年12月29日 優(yōu)先權(quán)日2009年12月29日
發(fā)明者李學(xué)春, 李振, 熊志勇 申請(qǐng)人:北京首信科技股份有限公司