public SubscriptionMetrics getSubscriptionMetrics(TopicName topicName, String subscriptionName) { subscriptionRepository.ensureSubscriptionExists(topicName, subscriptionName); return metricsRepository.loadMetrics(topicName, subscriptionName); }
@Override public void setSubscriptionDeliveredCounter(TopicName topicName, String subscriptionName, long count) { try { subscriptionRepository.ensureSubscriptionExists(topicName, subscriptionName); incrementSharedCounter(subscriptionDeliveredCounter(topicName, subscriptionName), count); } catch (SubscriptionNotExistsException e) { LOGGER.debug("Trying to report metric on not existing subscription {} {}", topicName, subscriptionName); } }
@Override public void setSubscriptionDiscardedCounter(TopicName topicName, String subscriptionName, long count) { try { subscriptionRepository.ensureSubscriptionExists(topicName, subscriptionName); incrementSharedCounter(subscriptionDiscardedCounter(topicName, subscriptionName), count); } catch (SubscriptionNotExistsException e) { LOGGER.debug("Trying to report metric on not existing subscription {} {}", topicName, subscriptionName); } }
@Override public PartitionOffsets getSubscriptionOffsets(TopicName topic, String subscriptionName, String brokersClusterName) { subscriptionRepository.ensureSubscriptionExists(topic, subscriptionName); String kafkaTopicsPath = paths.subscribedKafkaTopicsPath(topic, subscriptionName); PartitionOffsets allOffsets = new PartitionOffsets(); getZookeeperChildrenForPath(kafkaTopicsPath).stream().map(KafkaTopicName::valueOf).forEach(kafkaTopic -> allOffsets.addAll(getOffsetsForKafkaTopic(topic, kafkaTopic, subscriptionName, brokersClusterName)) ); return allOffsets; }
@Override public void setSubscriptionOffset(TopicName topicName, String subscriptionName, String brokersClusterName, PartitionOffset partitionOffset) { subscriptionRepository.ensureSubscriptionExists(topicName, subscriptionName); String offsetPath = paths.offsetPath(topicName, subscriptionName, partitionOffset.getTopic(), brokersClusterName, partitionOffset.getPartition()); try { byte[] offset = String.valueOf(partitionOffset.getOffset()).getBytes(StandardCharsets.UTF_8); if (zookeeper.checkExists().forPath(offsetPath) == null) { zookeeper.create() .creatingParentsIfNeeded() .forPath(offsetPath, offset); } else { zookeeper.setData().forPath(offsetPath, offset); } } catch (Exception e) { throw new InternalProcessingException(e); } }
@Override public void setInflightCounter(TopicName topicName, String subscriptionName, long count) { try { subscriptionRepository.ensureSubscriptionExists(topicName, subscriptionName); distributedCounter.setCounterValue( pathsCompiler.compile(appendRootPath(SUBSCRIPTION_INFLIGHT_FULL_PATH), subscriptionPathContext(topicName, subscriptionName)), count); } catch (SubscriptionNotExistsException e) { LOGGER.debug("Trying to report metric on not existing subscription {} {}", topicName, subscriptionName); } }
@Test public void shouldNotIncrementSharedCounterForNonExistingSubscription() { //given TopicName topicName = TopicName.fromQualifiedName("test.topic"); String subscriptionName = "sub"; doThrow(new SubscriptionNotExistsException(topicName, subscriptionName)) .when(subscriptionRepository).ensureSubscriptionExists(topicName, subscriptionName); //when storage.setSubscriptionDeliveredCounter(topicName, subscriptionName, 1L); //then verifyZeroInteractions(sharedCounter); }
@Test public void shouldNotIncrementInflightCounterForNonExistingSubscription() { //given TopicName topicName = TopicName.fromQualifiedName("test.topic"); String subscriptionName = "sub"; doThrow(new SubscriptionNotExistsException(topicName, subscriptionName)) .when(subscriptionRepository).ensureSubscriptionExists(topicName, subscriptionName); //when storage.setInflightCounter(topicName, subscriptionName, 1L); //then verifyZeroInteractions(sharedCounter); } }