public void checkGroupExists(String groupName) { if (!groupRepository.groupExists(groupName)) { throw new GroupNotExistsException(groupName); } }
public List<Group> listGroups() { return groupRepository.listGroups(); }
public List<String> listGroupNames() { return groupRepository.listGroupNames(); }
private SubscriptionName createSubscription(SubscriptionName subscriptionName) { Subscription subscription = subscription(subscriptionName).build(); Group group = Group.from(subscription.getTopicName().getGroupName()); if (!groupRepository.groupExists(group.getGroupName())) { groupRepository.createGroup(group); } if (!topicRepository.topicExists(subscription.getTopicName())) { topicRepository.createTopic(topic(subscription.getTopicName()).build()); } subscriptionRepository.createSubscription(subscription); await().atMost(adjust(ONE_SECOND)).until( () -> { subscriptionRepository.subscriptionExists(subscription.getTopicName(), subscription.getName()); subscriptionsCaches.forEach(subscriptionsCache -> subscriptionsCache.listActiveSubscriptionNames().contains(subscriptionName)); } ); return subscription.getQualifiedName(); }
@Override public void ensureGroupExists(String groupName) { if (!groupExists(groupName)) { throw new GroupNotExistsException(groupName); } }
public void createGroup(Group group, String createdBy) { groupRepository.createGroup(group); auditor.objectCreated(createdBy, group); }
public void updateGroup(String groupName, PatchData patch, String modifiedBy) { try { Group retrieved = groupRepository.getGroupDetails(groupName); Group modified = Patch.apply(retrieved, patch); groupRepository.updateGroup(modified); auditor.objectUpdated(modifiedBy, retrieved, modified); } catch (MalformedDataException exception) { logger.warn("Problem with reading details of group {}.", groupName); throw exception; } }
@Override public List<String> listTopicNames(String groupName) { groupRepository.ensureGroupExists(groupName); return childrenOf(paths.topicsPath(groupName)); }
public Group getGroupDetails(String groupName) { return groupRepository.getGroupDetails(groupName); }
public void removeGroup(String groupName, String removedBy) { groupRepository.removeGroup(groupName); auditor.objectRemoved(removedBy, Group.class.getSimpleName(), groupName); }
private void ensureGroupIsEmpty(String groupName) { if (!childrenOf(paths.topicsPath(groupName)).isEmpty()) { throw new GroupNotEmptyException(groupName); } }
@Override public void createGroup(Group group) { ensureConnected(); String groupPath = paths.groupPath(group.getGroupName()); logger.info("Creating group {} for path {}", group.getGroupName(), groupPath); try { zookeeper.inTransaction() .create().forPath(groupPath, mapper.writeValueAsBytes(group)) .and() .create().forPath(paths.topicsPath(group.getGroupName())) .and().commit(); } catch (KeeperException.NodeExistsException ex) { throw new GroupAlreadyExistsException(group.getGroupName(), ex); } catch (Exception ex) { throw new InternalProcessingException(ex); } }
@Override public void start() { for(String groupName : groupRepository.listGroupNames()) { for(Topic topic : topicRepository.listTopics(groupName)) { topicCache.put(topic.getQualifiedName(), cachedTopic(topic)); } } }
@Override public void createTopic(Topic topic) { groupRepository.ensureGroupExists(topic.getName().getGroupName()); String topicPath = paths.topicPath(topic.getName()); logger.info("Creating topic for path {}", topicPath); try { zookeeper.inTransaction() .create().forPath(topicPath, mapper.writeValueAsBytes(topic)) .and() .create().forPath(paths.subscriptionsPath(topic.getName())) .and().commit(); } catch (KeeperException.NodeExistsException ex) { throw new TopicAlreadyExistsException(topic.getName(), ex); } catch (Exception ex) { throw new InternalProcessingException(ex); } }
@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(String topicName : topicRepository.listTopicNames(groupName)) { for(Subscription subscription : subscriptionRepository.listSubscriptions(new TopicName(groupName, topicName))) { subscriptions.put(subscription.getQualifiedName(), subscription); } } } } }