SnapshotService 查询快照下所有索引 queryIndicesByRepoAndSnapshotWithIndices分析
好的,根据您提供的 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
,记录错误日志并抛出异常。 - 返回响应对象:返回包含查询结果的响应对象。