コード例 #1
0
  @Override
  protected void masterOperation(
      final IndicesAliasesRequest request,
      final ClusterState state,
      final ActionListener<IndicesAliasesResponse> listener)
      throws ElasticsearchException {

    // Expand the indices names
    List<AliasActions> actions = request.aliasActions();
    List<AliasAction> finalActions = new ArrayList<>();
    boolean hasOnlyDeletesButNoneCanBeDone = true;
    Set<String> aliases = new HashSet<>();
    for (AliasActions action : actions) {
      // expand indices
      String[] concreteIndices =
          state.metaData().concreteIndices(request.indicesOptions(), action.indices());
      // collect the aliases
      Collections.addAll(aliases, action.aliases());
      for (String index : concreteIndices) {
        for (String alias : action.concreteAliases(state.metaData(), index)) {
          AliasAction finalAction = new AliasAction(action.aliasAction());
          finalAction.index(index);
          finalAction.alias(alias);
          finalActions.add(finalAction);
          // if there is only delete requests, none will be added if the types do not map to any
          // existing type
          hasOnlyDeletesButNoneCanBeDone = false;
        }
      }
    }
    if (hasOnlyDeletesButNoneCanBeDone && actions.size() != 0) {
      throw new AliasesMissingException(aliases.toArray(new String[aliases.size()]));
    }
    request.aliasActions().clear();
    IndicesAliasesClusterStateUpdateRequest updateRequest =
        new IndicesAliasesClusterStateUpdateRequest()
            .ackTimeout(request.timeout())
            .masterNodeTimeout(request.masterNodeTimeout())
            .actions(finalActions.toArray(new AliasAction[finalActions.size()]));

    indexAliasesService.indicesAliases(
        updateRequest,
        new ActionListener<ClusterStateUpdateResponse>() {
          @Override
          public void onResponse(ClusterStateUpdateResponse response) {
            listener.onResponse(new IndicesAliasesResponse(response.isAcknowledged()));
          }

          @Override
          public void onFailure(Throwable t) {
            logger.debug("failed to perform aliases", t);
            listener.onFailure(t);
          }
        });
  }
コード例 #2
0
  @Override
  protected void masterOperation(
      final IndicesAliasesRequest request,
      final ClusterState state,
      final ActionListener<IndicesAliasesResponse> listener) {

    // Expand the indices names
    List<AliasActions> actions = request.aliasActions();
    List<AliasAction> finalActions = new ArrayList<>();

    // Resolve all the AliasActions into AliasAction instances and gather all the aliases
    Set<String> aliases = new HashSet<>();
    for (AliasActions action : actions) {
      String[] concreteIndices =
          indexNameExpressionResolver.concreteIndexNames(
              state, request.indicesOptions(), action.indices());
      Collections.addAll(aliases, action.aliases());
      for (String index : concreteIndices) {
        switch (action.actionType()) {
          case ADD:
            for (String alias : action.concreteAliases(state.metaData(), index)) {
              finalActions.add(
                  new AliasAction.Add(
                      index,
                      alias,
                      action.filter(),
                      action.indexRouting(),
                      action.searchRouting()));
            }
            break;
          case REMOVE:
            for (String alias : action.concreteAliases(state.metaData(), index)) {
              finalActions.add(new AliasAction.Remove(index, alias));
            }
            break;
          case REMOVE_INDEX:
            finalActions.add(new AliasAction.RemoveIndex(index));
            break;
          default:
            throw new IllegalArgumentException("Unsupported action [" + action.actionType() + "]");
        }
      }
    }
    if (finalActions.isEmpty() && false == actions.isEmpty()) {
      throw new AliasesNotFoundException(aliases.toArray(new String[aliases.size()]));
    }
    request.aliasActions().clear();
    IndicesAliasesClusterStateUpdateRequest updateRequest =
        new IndicesAliasesClusterStateUpdateRequest(unmodifiableList(finalActions))
            .ackTimeout(request.timeout())
            .masterNodeTimeout(request.masterNodeTimeout());

    indexAliasesService.indicesAliases(
        updateRequest,
        new ActionListener<ClusterStateUpdateResponse>() {
          @Override
          public void onResponse(ClusterStateUpdateResponse response) {
            listener.onResponse(new IndicesAliasesResponse(response.isAcknowledged()));
          }

          @Override
          public void onFailure(Exception t) {
            logger.debug("failed to perform aliases", t);
            listener.onFailure(t);
          }
        });
  }