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(匹配的索引列表)。

方法步骤

  1. 创建响应对象

    QueryIndicesByRepoAndSnapshotWithIndicesResponse response = new QueryIndicesByRepoAndSnapshotWithIndicesResponse();
    
  2. 参数校验

    if (request == null || StringUtils.isBlank(request.getRepositoryName()) || StringUtils.isBlank(request.getSnapshotName()) || request.getIndicesNameList() == null || request.getIndicesNameList().isEmpty()) {
        throw new TitanException("传入参数不可为空");
    }
    
    • 检查请求对象 request 是否为空。
    • 检查 repositoryNamesnapshotName 是否为空字符串。
    • 检查 indicesNameList 是否为空或为空列表,如果为空则抛出异常。
  3. 查询索引快照信息

    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> 对象 indicesindicesList,分别用于存储匹配的索引名称和处理后的索引名称列表。
    • 遍历 request.getIndicesNameList(),将每个索引名称中的通配符 * 替换为空字符串,并添加到 indicesList 中。
    • 获取快照信息中的索引列表 snapIndexList
    • 遍历 snapIndexList,检查每个索引名称是否包含 indicesList 中的任何一个名称,如果包含则将其添加到 indices 列表中。
    • indices 列表设置到响应对象 response 中。
    • 记录查询成功的日志。
  4. 异常处理

    • 如果查询过程中发生 IOException,记录错误日志并抛出异常。
  5. 返回响应对象

    return response;
    

详细分析

1. 参数校验

  • 请求对象校验:确保 request 不为空。
  • 仓库名称和快照名称校验:确保 repositoryNamesnapshotName 不为空字符串。
  • 索引名称列表校验:确保 indicesNameList 不为空且不为空列表。

2. 查询索引快照信息

  • 调用查询方法:调用 queryIndicesByRepoAndSnapshot 方法查询指定仓库和快照的索引信息。
  • 处理索引名称列表:遍历 request.getIndicesNameList(),将每个索引名称中的通配符 * 替换为空字符串,并添加到 indicesList 中。
  • 匹配索引名称:遍历快照信息中的索引列表 snapIndexList,检查每个索引名称是否包含 indicesList 中的任何一个名称,如果包含则将其添加到 indices 列表中。
  • 设置响应对象:将 indices 列表设置到响应对象 response 中。
  • 记录日志:记录查询成功的日志。

3. 异常处理

  • 捕获 IOException:如果查询过程中发生 IOException,记录错误日志并抛出异常。

4. 返回响应对象

  • 返回结果:返回包含查询结果的响应对象。

总结

queryIndicesByRepoAndSnapshotWithIndices 方法的主要功能是根据仓库名称、快照名称和索引名称列表查询匹配的索引信息,并将结果封装在响应对象中返回。具体步骤包括:

  1. 参数校验:确保请求对象和关键参数不为空。
  2. 查询索引快照信息:调用查询方法获取索引信息,并处理索引名称列表,匹配索引名称。
  3. 设置响应对象:将匹配的索引名称列表设置到响应对象中,并记录成功日志。
  4. 异常处理:捕获查询过程中可能发生的 IOException,记录错误日志并抛出异常。
  5. 返回响应对象:返回包含查询结果的响应对象。
posted @ 2024-11-21 00:36  一曲微茫  阅读(2)  评论(0编辑  收藏  举报