場景問題:
開發中常需要模擬各種異常來印證自己代碼邏輯處理沒有問題。最近接到一個需求,就是模擬Elasticsearch查詢正常,但寫入異常情景。有點同學會說這個不是很好模擬嗎?在你需要處理邏輯的地方手工拋出需要的指定異常,當程序中捕獲,是否按照預想的邏輯實現不就搞定了?這是研發自測的場景,但是如果要協助測試呢?這個怎麼拋?
解決方案:
- 一.使索引只有只讀權限
在講之前先說下索引的一個設置“read_only_allow_delete”,當read_only_allow_delete=true時說明該索引只有只讀權限但允許刪除,當read_only_allow_delete=false時說明該索引具有讀寫所有權限。當服務器磁盤空間不夠時,es爲了保護數據會自動將read_only_allow_delete改爲true,返回寫入異常給服務處理,且這個參數不會自動轉爲false,需得手工轉換。
根據這個思路可以通過修改該值模擬出讀正常,寫異常的情形。
一.讓某索引只讀指令
PUT 索引名/_settings
{
"index": {
"blocks": {
"read_only_allow_delete": "true"
}
}
}
二.讓某索引可讀可寫指令
PUT 索引名/_settings
{
"index": {
"blocks": {
"read_only_allow_delete": "false"
}
}
}
- 二.修改ES物理存儲目錄讀寫權限
注:這種方式比較簡單粗暴,會將所有索引改爲只讀方式,導致集羣異常,會觸發reassign,不建議使用,只是一種思路
查看elasticsearch.yml中物理存儲路徑:
使用chmod指令使改目錄只有只讀權限:
chmod 444 目錄名
當測試完畢記得改會權限值!
We are in the fight of our lives 我們都在生命中奮鬥着!