Tars和Dcache使用中的問題及注意事項

2021-10-07 15:44:06 字數 2762 閱讀 5775

簡介

但由於使用人數及場景還不是很充分,仍有一些隱藏的問題,使用中要評估到該風險。

注:權威資訊請以官方為主。

win部署tarsnode發布服務失敗

自v2.4.2以來,tars開始提供了較好地支援windows系統功能。

但在windows部署tarsnode後,發布服務總是失敗,顯示的錯誤原因如下:

剛開始找了一圈沒找到原因,我還查了原始碼把原始碼改了:

注釋了如圖中的替換字串的行,結果,上面的問題是解決了,但又來了個新問題:

tars_path\\tarsnode\util\busybox.exe tar xzfv c:\windows\system32\tars_path\tarsnode\data\tmp\download\batchpatchingload\demo\demo.tgz -c c:\windows\system32\tars_path\tarsnode\data\tmp\download\batchpatching\demo, error!

由此注意到,這問題的根本原因可能在於路徑。

為什麼是c:/windows/system32呢?

而且也沒有理由建立乙個tars_path的目錄。

檢視了tarsnode原始碼,對於win系統,它會讀取basepath.win等相關配置。

又諮詢了tars開發人員,最終通過增加win配置解決了這個問題,步驟如下:

進入web介面-運維管理-模板管理

basepath.win=c:\tars-install\tars\tarsnode\data # 根據tarsnode實際安裝路徑填寫,下同 

datapath.win=c:\tars-install\tars\tarsnode\data

重啟win節點機tarsnode即可

此時,服務的路徑就是c:/tars-install/tars/tarsnode/data了。

另外,如果win發布的應用依賴動態庫的話,也需要把庫提前放到對應路徑下,如:c:/windows/system32/

登入web後看不到服務

假期歸來,開始工作,開啟web,登入後發現了奇怪的一幕:

趕緊執行一系列操作:

結論:

重啟裝置後dcache服務啟動失敗

在dcache正常執行時,如果突然掉電或其他原因導致裝置重啟,在重啟dcache服務時,都可能發現以下資訊:

這是因為dcahce在首次執行時建立了shmkey相關的dat檔案,而突然重啟時,該檔案沒有刪除,再次啟動就會失敗。

這時,需要先關閉dcache服務,然後刪除dat檔案,最後再重啟服務就可以了。

啟動dcache服務時提示shmkey已經存在

如果已經建立過該key,就會出現這個錯誤。

可以通過ipcs命令檢視所有的shmkey:

確認已經存在的key沒有使用,可以使用ipcrm -m把它刪除:

然後再重啟dcache服務即可。

win下tars服務發布失敗

一般情況下,是不會有問題的。

這裡單獨寫win下發布失敗,是因為在linux下,是可以直接替換乙個正在執行的程序的。但是windows下這樣的操作會失敗,因為檔案忙。

所以在發布win下服務時,可以先把正在執行的服務關閉,再發布即可。

dcache呼叫getmkvbatch介面失敗

服務程式中呼叫getmkvbatch介面查詢mkv模組的批量資料時,可能會遇到返回的錯誤碼為-25的錯誤,檢視模組的日誌,如下:

2020-11-02 16:42:18|139942734829312|debug|mkcacheimp::getmkvbatch recv : 1|333333|*|status!=2&status!=3

2020-11-02 16:42:18|139942734829312|debug|get value size = 2, ret = 12

2020-11-02 16:42:18|139942734829312|error|mkcacheimp::getmkvbatch exception: require field not exist, tag: 11 headtype: 1, headtag: 1, mainkey = 333333

提示,查詢的字段不存在。

這時,很可能是建立mkv時建立的資料結構與**中要查詢的資料結構不一致造成的。建議檢視**,把查詢請求的所有欄位與模組的所有字段對比。

如果確認無誤,仍然報錯,可以嘗試重啟mkv模組。

Tars框架執行緒TC Thread的使用

開源庫tars,本文參考官方示例對封裝的執行緒tc thread進行實踐。封裝類 testthread 標頭檔案 pragma once include tars util include util tc thread.h using namespace tars namespace leslief...

Python 中 and 和 or 的使用

and python 中的and 從左到右計算表示式,若所有值均為真,則返回最後乙個值,若存在假,返回第乙個假值。or or 也是從左到有計算表示式,返回第乙個為真的值。文字可能有些繞,可以看下面這張圖 也就是說 x or y 的值 只可能是x或y x為真就是x,x為假就是y x and y 的值 ...

shell中的 , 和 的使用

假設我們定義了乙個變數為 file dir1 dir2 dir3 my.file.txt 可以用 分別替換得到不同的值 刪掉第乙個 及其左邊的字串 dir1 dir2 dir3 my.file.txt 刪掉最後乙個 及其左邊的字串 my.file.txt 刪掉第乙個 及其左邊的字串 file.txt...