public List<Topic> listTopics(String groupName) { return topicRepository.listTopics(groupName); }
public Topic getTopicDetails(TopicName topicName) { return topicRepository.getTopicDetails(topicName); }
private void ensureTopicDoesNotExist(Topic topic) { if (topicRepository.topicExists(topic.getName())) { throw new TopicAlreadyExistsException(topic.getName()); } }
public List<String> listQualifiedTopicNames(String groupName) { return topicRepository.listTopicNames(groupName).stream() .map(topicName -> new TopicName(groupName, topicName).qualifiedName()) .collect(toList()); }
public TopicMetrics getTopicMetrics(TopicName topicName) { return topicRepository.topicExists(topicName) ? metricRepository.loadMetrics(topicName) : TopicMetrics.unavailable(); }
private void createTopic(Topic topic, String createdBy) { topicRepository.createTopic(topic); if (!multiDCAwareService.topicExists(topic)) { createTopicInBrokers(topic); auditor.objectCreated(createdBy, topic); topicOwnerCache.onCreatedTopic(topic); } else { logger.info("Skipping creation of topic {} on brokers, topic already exists", topic.getQualifiedName()); } }
private void createTopicInBrokers(Topic topic) { try { multiDCAwareService.manageTopic(brokerTopicManagement -> brokerTopicManagement.createTopic(topic) ); } catch (Exception exception) { logger.error( String.format("Could not create topic %s, rollback topic creation.", topic.getQualifiedName()), exception ); topicRepository.removeTopic(topic.getName()); } }
public List<Topic> listForOwnerId(OwnerId ownerId) { Collection<TopicName> topicNames = topicOwnerCache.get(ownerId); return topicRepository.getTopicsDetails(topicNames); } }
@Override public void ensureTopicExists(TopicName topicName) { if (!topicExists(topicName)) { throw new TopicNotExistsException(topicName); } }
private void touchTopic(TopicName topicName) { logger.info("Touching topic {}", topicName.qualifiedName()); topicRepository.touchTopic(topicName); }
private void ensureTopicIsEmpty(TopicName topicName) { List<String> children = childrenOf(paths.subscriptionsPath(topicName)); boolean anyNodeNotEmpty = children.stream() .anyMatch(sub -> !isEmpty(paths.subscriptionsPath(topicName) + "/" + sub)); if (!children.isEmpty() && anyNodeNotEmpty) { throw new TopicNotEmptyException(topicName); } }
public boolean isUserAllowedToCreateSubscription(Subscription subscription, ContainerRequestContext requestContext) { return !topicRepository.isSubscribingRestricted(subscription.getTopicName()) || isAdmin(requestContext) || isTopicOwner(subscription, requestContext); }
@Override public void createSubscription(Subscription subscription) { ensureConnected(); topicRepository.ensureTopicExists(subscription.getTopicName()); String subscriptionPath = paths.subscriptionPath(subscription); logger.info("Creating subscription {}", subscription.getQualifiedName()); try { zookeeper.create().forPath(subscriptionPath, mapper.writeValueAsBytes(subscription)); } catch (KeeperException.NodeExistsException ex) { throw new SubscriptionAlreadyExistsException(subscription, ex); } catch (Exception ex) { throw new InternalProcessingException(ex); } }
@Override public void onTopicUnblacklisted(String qualifiedTopicName) { Optional<Topic> topic = Optional.ofNullable( Optional.ofNullable( topicCache.get(qualifiedTopicName)).map(CachedTopic::getTopic).orElseGet(() -> topicRepository.getTopicDetails(TopicName.fromQualifiedName(qualifiedTopicName)))); topic.ifPresent(t -> topicCache.put(qualifiedTopicName, cachedTopic(t))); }
@Override public void start() { for(String groupName : groupRepository.listGroupNames()) { for(String topicName : topicRepository.listTopicNames(groupName)) { for(Subscription subscription : subscriptionRepository.listSubscriptions(new TopicName(groupName, topicName))) { subscriptions.put(subscription.getQualifiedName(), subscription); } } } } }
@Override public void start() { for(String groupName : groupRepository.listGroupNames()) { for(Topic topic : topicRepository.listTopics(groupName)) { topicCache.put(topic.getQualifiedName(), cachedTopic(topic)); } } }
private void removeTopic(Topic topic, String removedBy) { topicRepository.removeTopic(topic.getName()); multiDCAwareService.manageTopic(brokerTopicManagement -> brokerTopicManagement.removeTopic(topic)); auditor.objectRemoved(removedBy, Topic.class.getSimpleName(), topic.getQualifiedName()); topicOwnerCache.onRemovedTopic(topic); }
@Override public void onTopicBlacklisted(String qualifiedTopicName) { Optional<Topic> topic = Optional.ofNullable( Optional.ofNullable( topicCache.get(qualifiedTopicName)).map(CachedTopic::getTopic).orElseGet(() -> topicRepository.getTopicDetails(TopicName.fromQualifiedName(qualifiedTopicName)))); topic.ifPresent(t -> topicCache.put(qualifiedTopicName, bannedTopic(t))); }
@Override public void start() { for(String groupName : groupRepository.listGroupNames()) { for(String topicName : topicRepository.listTopicNames(groupName)) { for(Subscription subscription : subscriptionRepository.listSubscriptions(new TopicName(groupName, topicName))) { subscriptions.put(subscription.getQualifiedName(), subscription); } } } } }
private boolean isTopicOwner(Subscription subscription, ContainerRequestContext requestContext) { return getOwnershipResolver(requestContext).isUserAnOwner(topicRepository.getTopicDetails(subscription.getTopicName()).getOwner()); }