@Override @Nullable public RollbackDetail publish(StoreRequest request) throws TopicNotFoundException, IOException { return getMessagingService().publish(request); }
@Override public MessageFetcher prepareFetch(TopicId topicId) throws TopicNotFoundException, IOException { return getMessagingService().prepareFetch(topicId); }
@Override public void createTopic(TopicMetadata topicMetadata) throws TopicAlreadyExistsException, IOException { getMessagingService().createTopic(topicMetadata); }
@Test public void testDeletes() throws Exception { TopicId topicId = new NamespaceId("ns1").topic("del"); TopicMetadata metadata = new TopicMetadata(topicId, "ttl", "100"); for (int j = 0; j < 10; j++) { client.createTopic(metadata); String m1 = String.format("m%d", j); String m2 = String.format("m%d", j + 1); Assert.assertNull(client.publish(StoreRequestBuilder.of(topicId).addPayload(m1).addPayload(m2).build())); // Fetch messages non-transactionally List<RawMessage> messages = new ArrayList<>(); try (CloseableIterator<RawMessage> iterator = client.prepareFetch(topicId).fetch()) { Iterators.addAll(messages, iterator); } Assert.assertEquals(2, messages.size()); Set<String> receivedMessages = new HashSet<>(); for (RawMessage message : messages) { receivedMessages.add(Bytes.toString(message.getPayload())); } Assert.assertTrue(receivedMessages.contains(m1)); Assert.assertTrue(receivedMessages.contains(m2)); client.deleteTopic(topicId); } }
@Test public void testReuseRequest() throws IOException, TopicAlreadyExistsException, TopicNotFoundException { // This test a StoreRequest object can be reused. // This test is to verify storing transaction messages to the payload table TopicId topicId = new NamespaceId("ns1").topic("testReuseRequest"); client.createTopic(new TopicMetadata(topicId)); StoreRequest request = StoreRequestBuilder.of(topicId).addPayload("m1").addPayload("m2").build(); // Publish the request twice client.publish(request); client.publish(request); // Expects four messages List<RawMessage> messages = new ArrayList<>(); try (CloseableIterator<RawMessage> iterator = client.prepareFetch(topicId).setLimit(10).fetch()) { Iterators.addAll(messages, iterator); } Assert.assertEquals(4, messages.size()); List<String> expected = Arrays.asList("m1", "m2", "m1", "m2"); Assert.assertEquals(expected, messages.stream() .map(RawMessage::getPayload) .map(Bytes::toString).collect(Collectors.toList())); } }
client.getTopic(topic1); Assert.fail("Expected TopicNotFoundException"); } catch (TopicNotFoundException e) { client.createTopic(new TopicMetadata(topic1)); client.createTopic(new TopicMetadata(topic1)); Assert.fail("Expect TopicAlreadyExistsException"); } catch (TopicAlreadyExistsException e) { client.getTopic(topic1).getTTL()); client.updateTopic(new TopicMetadata(topic1, "ttl", "5")); Assert.assertEquals(5, client.getTopic(topic1).getTTL()); client.createTopic(new TopicMetadata(topic2, "ttl", "xyz")); Assert.fail("Expect BadRequestException"); } catch (IllegalArgumentException e) { client.createTopic(new TopicMetadata(topic2, "ttl", "5")); Assert.assertEquals(5, client.getTopic(topic2).getTTL()); List<TopicId> topics = client.listTopics(nsId); Assert.assertEquals(Arrays.asList(topic1, topic2), topics); client.deleteTopic(topic1); client.deleteTopic(topic2);
@Test public void testGeMetadata() throws Exception { TopicId topicId = new NamespaceId("ns2").topic("d"); TopicMetadata metadata = new TopicMetadata(topicId, "ttl", "100"); for (int i = 1; i <= 5; i++) { client.createTopic(metadata); TopicMetadata topicMetadata = client.getTopic(topicId); Assert.assertEquals(100, topicMetadata.getTTL()); Assert.assertEquals(i, topicMetadata.getGeneration()); client.deleteTopic(topicId); } }
firstService.publish(StoreRequestBuilder.of(topicId).addPayload("Testing1").build()); secondService.listTopics(NamespaceId.SYSTEM); Assert.fail("Expected service unavailable"); } catch (ServiceUnavailableException e) {
for (TopicId topicId : messagingService.listTopics(namespaceId)) { messagingService.deleteTopic(topicId);
@Override public void deleteTopic(String topic) throws TopicNotFoundException, IOException { messagingService.deleteTopic(namespace.topic(topic)); } }
@Override public List<TopicId> listTopics(NamespaceId namespaceId) throws IOException { return getMessagingService().listTopics(namespaceId); }
@Override public TopicMetadata getTopic(TopicId topicId) throws TopicNotFoundException, IOException { return getMessagingService().getTopic(topicId); }
@Override public boolean rollbackTx() throws Exception { try { for (Map.Entry<TopicId, RollbackDetail> entry : rollbackDetails.entrySet()) { messagingService.rollback(entry.getKey(), entry.getValue()); } return true; } finally { transaction = null; txPublishRequests.clear(); rollbackDetails.clear(); } }
@Override public void updateTopic(TopicMetadata topicMetadata) throws TopicNotFoundException, IOException { getMessagingService().updateTopic(topicMetadata); }
@Override public void storePayload(StoreRequest request) throws TopicNotFoundException, IOException { getMessagingService().storePayload(request); }
@Test public void testChunkConsume() throws Exception { // This test is to verify the message fetching body producer works correctly TopicId topicId = new NamespaceId("ns1").topic("testChunkConsume"); client.createTopic(new TopicMetadata(topicId)); // Publish 10 messages, each payload is half the size of the chunk size int payloadSize = cConf.getInt(Constants.MessagingSystem.HTTP_SERVER_CONSUME_CHUNK_SIZE) / 2; for (int i = 0; i < 10; i++) { String payload = Strings.repeat(Integer.toString(i), payloadSize); client.publish(StoreRequestBuilder.of(topicId).addPayload(payload).build()); } // Fetch messages. All of them should be fetched correctly List<RawMessage> messages = new ArrayList<>(); try (CloseableIterator<RawMessage> iterator = client.prepareFetch(topicId).fetch()) { Iterators.addAll(messages, iterator); } Assert.assertEquals(10, messages.size()); for (int i = 0; i < 10; i++) { RawMessage message = messages.get(i); Assert.assertEquals(payloadSize, message.getPayload().length); String payload = Strings.repeat(Integer.toString(i), payloadSize); Assert.assertEquals(payload, Bytes.toString(message.getPayload())); } client.deleteTopic(topicId); }
for (TopicId topicId : messagingService.listTopics(namespaceId)) { messagingService.deleteTopic(topicId);
@Override public void deleteTopic(String topic) throws TopicNotFoundException, IOException { messagingService.deleteTopic(namespace.topic(topic)); } }
@Override public List<TopicId> listTopics(NamespaceId namespaceId) throws IOException { return getMessagingService().listTopics(namespaceId); }
@Override public TopicMetadata getTopic(TopicId topicId) throws TopicNotFoundException, IOException { return getMessagingService().getTopic(topicId); }