好的,根據您提供的 snapshot.docx
文件內容,我提取了 queryIndicesByRepoAndSnapshotWithIndices
方法,並對其進行詳細分析。以下是提取的方法及其相關部分:
提取的 queryIndicesByRepoAndSnapshotWithIndices
方法
@Override
public QueryIndicesByRepoAndSnapshotWithIndicesResponse queryIndicesByRepoAndSnapshotWithIndices(QueryIndicesByRepoAndSnapshotWithIndicesRequest request) {
QueryIndicesByRepoAndSnapshotWithIndicesResponse response = new QueryIndicesByRepoAndSnapshotWithIndicesResponse();
if (request == null || StringUtils.isBlank(request.getRepositoryName()) || StringUtils.isBlank(request.getSnapshotName()) || request.getIndicesNameList() == null || request.getIndicesNameList().isEmpty()) {
throw new TitanException("傳入引數不可為空");
}
try {
List<SnapshotInfo> snapshotInfoList = queryIndicesByRepoAndSnapshot(request.getRepositoryName(), request.getSnapshotName());
List<String> indices = new ArrayList<>();
List<String> indicesList = new ArrayList<>();
request.getIndicesNameList().forEach(indicesName -> {
indicesList.add(indicesName.replace("*", ""));
});
List<String> snapIndexList = snapshotInfoList.get(0).indices();
for (String indicesName : snapIndexList) {
for (String nIndicesName : indicesList) {
if (indicesName.contains(nIndicesName)) {
indices.add(indicesName);
break;
}
}
}
response.setIndicesList(indices);
log.info("查詢索引快照成功{}", indices);
} catch (IOException e) {
log.error("查詢索引快照異常 [repository:{}] [snapshot:{}]", request.getRepositoryName(), request.getSnapshotName(), e);
throw new TitanException("查詢索引快照異常!");
}
return response;
}
方法分析
輸入引數
QueryIndicesByRepoAndSnapshotWithIndicesRequest request
:包含請求引數,主要包括repositoryName
(倉庫名稱)、snapshotName
(快照名稱)和indicesNameList
(索引名稱列表)。
輸出引數
QueryIndicesByRepoAndSnapshotWithIndicesResponse response
:包含查詢結果的響應物件,主要欄位有indicesList
(匹配的索引列表)。
方法步驟
-
建立響應物件:
QueryIndicesByRepoAndSnapshotWithIndicesResponse response = new QueryIndicesByRepoAndSnapshotWithIndicesResponse();
-
引數校驗:
if (request == null || StringUtils.isBlank(request.getRepositoryName()) || StringUtils.isBlank(request.getSnapshotName()) || request.getIndicesNameList() == null || request.getIndicesNameList().isEmpty()) { throw new TitanException("傳入引數不可為空"); }
- 檢查請求物件
request
是否為空。 - 檢查
repositoryName
和snapshotName
是否為空字串。 - 檢查
indicesNameList
是否為空或為空列表,如果為空則丟擲異常。
- 檢查請求物件
-
查詢索引快照資訊:
try { List<SnapshotInfo> snapshotInfoList = queryIndicesByRepoAndSnapshot(request.getRepositoryName(), request.getSnapshotName()); List<String> indices = new ArrayList<>(); List<String> indicesList = new ArrayList<>(); request.getIndicesNameList().forEach(indicesName -> { indicesList.add(indicesName.replace("*", "")); }); List<String> snapIndexList = snapshotInfoList.get(0).indices(); for (String indicesName : snapIndexList) { for (String nIndicesName : indicesList) { if (indicesName.contains(nIndicesName)) { indices.add(indicesName); break; } } } response.setIndicesList(indices); log.info("查詢索引快照成功{}", indices); } catch (IOException e) { log.error("查詢索引快照異常 [repository:{}] [snapshot:{}]", request.getRepositoryName(), request.getSnapshotName(), e); throw new TitanException("查詢索引快照異常!"); }
- 呼叫
queryIndicesByRepoAndSnapshot
方法查詢指定倉庫和快照的索引資訊。 - 建立兩個新的
List<String>
物件indices
和indicesList
,分別用於儲存匹配的索引名稱和處理後的索引名稱列表。 - 遍歷
request.getIndicesNameList()
,將每個索引名稱中的萬用字元*
替換為空字串,並新增到indicesList
中。 - 獲取快照資訊中的索引列表
snapIndexList
。 - 遍歷
snapIndexList
,檢查每個索引名稱是否包含indicesList
中的任何一個名稱,如果包含則將其新增到indices
列表中。 - 將
indices
列表設定到響應物件response
中。 - 記錄查詢成功的日誌。
- 呼叫
-
異常處理:
- 如果查詢過程中發生
IOException
,記錄錯誤日誌並丟擲異常。
- 如果查詢過程中發生
-
返回響應物件:
return response;
詳細分析
1. 引數校驗
- 請求物件校驗:確保
request
不為空。 - 倉庫名稱和快照名稱校驗:確保
repositoryName
和snapshotName
不為空字串。 - 索引名稱列表校驗:確保
indicesNameList
不為空且不為空列表。
2. 查詢索引快照資訊
- 呼叫查詢方法:呼叫
queryIndicesByRepoAndSnapshot
方法查詢指定倉庫和快照的索引資訊。 - 處理索引名稱列表:遍歷
request.getIndicesNameList()
,將每個索引名稱中的萬用字元*
替換為空字串,並新增到indicesList
中。 - 匹配索引名稱:遍歷快照資訊中的索引列表
snapIndexList
,檢查每個索引名稱是否包含indicesList
中的任何一個名稱,如果包含則將其新增到indices
列表中。 - 設定響應物件:將
indices
列表設定到響應物件response
中。 - 記錄日誌:記錄查詢成功的日誌。
3. 異常處理
- 捕獲
IOException
:如果查詢過程中發生IOException
,記錄錯誤日誌並丟擲異常。
4. 返回響應物件
- 返回結果:返回包含查詢結果的響應物件。
總結
queryIndicesByRepoAndSnapshotWithIndices
方法的主要功能是根據倉庫名稱、快照名稱和索引名稱列表查詢匹配的索引資訊,並將結果封裝在響應物件中返回。具體步驟包括:
- 引數校驗:確保請求物件和關鍵引數不為空。
- 查詢索引快照資訊:呼叫查詢方法獲取索引資訊,並處理索引名稱列表,匹配索引名稱。
- 設定響應物件:將匹配的索引名稱列表設定到響應物件中,並記錄成功日誌。
- 異常處理:捕獲查詢過程中可能發生的
IOException
,記錄錯誤日誌並丟擲異常。 - 返回響應物件:返回包含查詢結果的響應物件。