All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.xiaomi.infra.galaxy.talos.admin.TalosAdmin Maven / Gradle / Ivy

/**
 * Copyright 2015, Xiaomi.
 * All rights reserved.
 * Author: [email protected]
 */

package com.xiaomi.infra.galaxy.talos.admin;

import java.util.List;
import java.util.Map;

import com.google.common.base.Preconditions;
import libthrift091.TException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.xiaomi.infra.galaxy.rpc.thrift.Credential;
import com.xiaomi.infra.galaxy.talos.client.TalosClientConfig;
import com.xiaomi.infra.galaxy.talos.client.TalosClientFactory;
import com.xiaomi.infra.galaxy.talos.client.Utils;
import com.xiaomi.infra.galaxy.talos.thrift.AddSubResourceNameRequest;
import com.xiaomi.infra.galaxy.talos.thrift.ChangeTopicAttributeRequest;
import com.xiaomi.infra.galaxy.talos.thrift.CreateTopicRequest;
import com.xiaomi.infra.galaxy.talos.thrift.CreateTopicResponse;
import com.xiaomi.infra.galaxy.talos.thrift.DeleteTopicQuotaRequest;
import com.xiaomi.infra.galaxy.talos.thrift.DeleteTopicRequest;
import com.xiaomi.infra.galaxy.talos.thrift.DeleteUserQuotaRequest;
import com.xiaomi.infra.galaxy.talos.thrift.DescribeTopicRequest;
import com.xiaomi.infra.galaxy.talos.thrift.DescribeTopicResponse;
import com.xiaomi.infra.galaxy.talos.thrift.GalaxyTalosException;
import com.xiaomi.infra.galaxy.talos.thrift.GetPartitionOffsetRequest;
import com.xiaomi.infra.galaxy.talos.thrift.GetPartitionOffsetResponse;
import com.xiaomi.infra.galaxy.talos.thrift.GetPermissionRequest;
import com.xiaomi.infra.galaxy.talos.thrift.GetPermissionResponse;
import com.xiaomi.infra.galaxy.talos.thrift.GetTopicOffsetRequest;
import com.xiaomi.infra.galaxy.talos.thrift.GetTopicOffsetResponse;
import com.xiaomi.infra.galaxy.talos.thrift.ListPermissionRequest;
import com.xiaomi.infra.galaxy.talos.thrift.ListPermissionResponse;
import com.xiaomi.infra.galaxy.talos.thrift.ListTopicsResponse;
import com.xiaomi.infra.galaxy.talos.thrift.MessageService;
import com.xiaomi.infra.galaxy.talos.thrift.OffsetInfo;
import com.xiaomi.infra.galaxy.talos.thrift.QueryTopicQuotaRequest;
import com.xiaomi.infra.galaxy.talos.thrift.QuotaService;
import com.xiaomi.infra.galaxy.talos.thrift.RevokePermissionRequest;
import com.xiaomi.infra.galaxy.talos.thrift.SetPermissionRequest;
import com.xiaomi.infra.galaxy.talos.thrift.SetTopicQuotaRequest;
import com.xiaomi.infra.galaxy.talos.thrift.SetUserQuotaRequest;
import com.xiaomi.infra.galaxy.talos.thrift.Topic;
import com.xiaomi.infra.galaxy.talos.thrift.TopicAttribute;
import com.xiaomi.infra.galaxy.talos.thrift.TopicInfo;
import com.xiaomi.infra.galaxy.talos.thrift.TopicService;
import com.xiaomi.infra.galaxy.talos.thrift.TopicTalosResourceName;
import com.xiaomi.infra.galaxy.talos.thrift.UserQuota;

import static com.xiaomi.infra.galaxy.talos.client.Constants.TALOS_CLOUD_AK_PREFIX;

public class TalosAdmin {
  private static final Logger LOG = LoggerFactory.getLogger(TalosAdmin.class);
  private TopicService.Iface topicClient;
  private MessageService.Iface messageClient;
  private QuotaService.Iface quotaClient;
  private Credential credential;

  // used by guest
  public TalosAdmin(TalosClientConfig talosClientConfig) {
    this(talosClientConfig, new Credential());
  }

  // used by user/admin
  public TalosAdmin(TalosClientConfig talosClientConfig, Credential credential) {
    this(new TalosClientFactory(talosClientConfig, credential));
  }

  // used by producer/consumer
  public TalosAdmin(TalosClientFactory talosClientFactory) {
    topicClient = talosClientFactory.newTopicClient();
    messageClient = talosClientFactory.newMessageClient();
    quotaClient = talosClientFactory.newQuotaClient();
    credential = talosClientFactory.getCredential();
  }

  // topicAttribute for partitionNumber required
  public CreateTopicResponse createTopic(CreateTopicRequest request)
      throws GalaxyTalosException, TException {
    if (credential.getSecretKeyId().startsWith(TALOS_CLOUD_AK_PREFIX)) {
      Utils.checkCloudTopicNameValidity(request.getTopicName());
    } else {
      Utils.checkNameValidity(request.getTopicName());
    }
    return topicClient.createTopic(request);
  }

  public Topic describeTopic(DescribeTopicRequest request)
      throws GalaxyTalosException, TException {
    DescribeTopicResponse describeTopicResponse =
        topicClient.describeTopic(request);
    return new Topic(describeTopicResponse.getTopicInfo(),
        describeTopicResponse.getTopicAttribute(),
        describeTopicResponse.getTopicState())
        .setTopicQuota(describeTopicResponse.getTopicQuota())
        .setTopicAcl(describeTopicResponse.getAclMap());
  }

  public void deleteTopic(DeleteTopicRequest request)
      throws GalaxyTalosException, TException {
    topicClient.deleteTopic(request);
  }

  public void changeTopicAttribute(ChangeTopicAttributeRequest request)
      throws GalaxyTalosException, TException {
    topicClient.changeTopicAttribute(request);
  }

  // add partitionNumber, an example of using changeTopicAttribute
  public void addTopicPartitionNumber(
      TopicTalosResourceName topicTalosResourceName, int partitionNumber)
      throws GalaxyTalosException, TException {
    Preconditions.checkNotNull(topicTalosResourceName);
    Topic topic = describeTopic(new DescribeTopicRequest(
        Utils.getTopicNameByResourceName(
            topicTalosResourceName.getTopicTalosResourceName())));
    if (partitionNumber <= topic.getTopicAttribute().getPartitionNumber()) {
      // TODO: using specific GalaxyTalosException
      throw new IllegalArgumentException(
          "The partitionNumber to change must be more than the original number, got: " +
              partitionNumber + " the original: " +
              topic.getTopicAttribute().getPartitionNumber());
    }
    TopicAttribute topicAttribute = topic.getTopicAttribute();
    topicAttribute.setPartitionNumber(partitionNumber);
    changeTopicAttribute(new ChangeTopicAttributeRequest(
        topicTalosResourceName, topicAttribute));
  }

  public List listTopic() throws GalaxyTalosException, TException {
    ListTopicsResponse listTopicsResponse = topicClient.listTopics();
    return listTopicsResponse.getTopicInfos();
  }

  public List getTopicOffset(GetTopicOffsetRequest request)
      throws GalaxyTalosException, TException {
    GetTopicOffsetResponse response = messageClient.getTopicOffset(request);
    return response.getOffsetInfoList();
  }

  public OffsetInfo getPartitionOffset(GetPartitionOffsetRequest request)
      throws TException {
    GetPartitionOffsetResponse response = messageClient.getPartitionOffset(request);
    return response.getOffsetInfo();
  }

  public void setPermission(SetPermissionRequest request)
      throws GalaxyTalosException, TException {
    Preconditions.checkArgument(request.getPermission().getValue() > 0);
    topicClient.setPermission(request);
  }

  public void revokePermission(RevokePermissionRequest request)
      throws GalaxyTalosException, TException {
    topicClient.revokePermission(request);
  }

  public Map listPermission(ListPermissionRequest request)
      throws GalaxyTalosException, TException {
    ListPermissionResponse listPermissionResponse =
        topicClient.listPermission(request);
    return listPermissionResponse.getPermissions();
  }

  public int queryPermission(GetPermissionRequest request)
      throws GalaxyTalosException, TException {
    GetPermissionResponse queryPermissionResponse =
        topicClient.getPermission(request);
    return queryPermissionResponse.getPermission();
  }

  public void setUserQuota(SetUserQuotaRequest request)
      throws GalaxyTalosException, TException {
    quotaClient.setUserQuota(request);
  }

  public Map listAllUserQuota()
      throws GalaxyTalosException, TException {
    return quotaClient.listUserQuota().getUserQuotaList();
  }

  public void deleteUserQuota(DeleteUserQuotaRequest request)
      throws GalaxyTalosException, TException {
    quotaClient.deleteUserQuota(request);
  }

  public UserQuota queryUserQuota() throws GalaxyTalosException, TException {
    return quotaClient.queryUserQuota().getUserQuota();
  }

  public void setTopicQuota(SetTopicQuotaRequest request)
      throws GalaxyTalosException, TException {
    topicClient.setTopicQuota(request);
  }

  public void queryTopicQuota(QueryTopicQuotaRequest request)
      throws GalaxyTalosException, TException {
    topicClient.queryTopicQuota(request);
  }

  public void deleteTopicQuota(DeleteTopicQuotaRequest request)
      throws GalaxyTalosException, TException {
    topicClient.deleteTopicQuota(request);
  }

  public void addSubResourceName(AddSubResourceNameRequest request)
      throws GalaxyTalosException, TException {
    Utils.checkAddSubResourceNameRequest(credential, request);
    topicClient.addSubResourceName(request);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy