![JAR search and dependency download from the Maven repository](/logo.png)
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