/** * Creates the URL path for making HTTP requests for the given topic. */ private String createTopicPath(TopicId topicId) { return topicId.getNamespace() + "/topics/" + topicId.getTopic(); }
@Override protected void publish(TopicId topicId, Iterator<byte[]> payloads) throws IOException, TopicNotFoundException { if (NamespaceId.SYSTEM.equals(topicId.getNamespaceId())) { throw new IllegalArgumentException("Publish to '" + topicId.getNamespace() + "' namespace is not allowed"); } delegate.publish(topicId.getNamespace(), topicId.getTopic(), payloads); } }
/** * Creates the URL path for making HTTP requests for the given topic. */ private String createTopicPath(TopicId topicId) { return topicId.getNamespace() + "/topics/" + topicId.getTopic(); }
@Override protected void publish(TopicId topicId, Iterator<byte[]> payloads) throws IOException, TopicNotFoundException { if (NamespaceId.SYSTEM.equals(topicId.getNamespaceId())) { throw new IllegalArgumentException("Publish to '" + topicId.getNamespace() + "' namespace is not allowed"); } delegate.publish(topicId.getNamespace(), topicId.getTopic(), payloads); } }
private File getDataDBPath(String tableName, TopicId topicId, int generation, boolean ensureExists) throws IOException { String fileName = String.format("%s.%s.%s.%d", topicId.getNamespace(), tableName, topicId.getTopic(), generation); File file = new File(baseDir, fileName); if (ensureExists) { ensureDirExists(file); } return file; }
/** * Convert {@link TopicId} to byte array to be used a message tables row key prefix. * * @param topicId {@link TopicId} * @return byte array representation for the topic id */ public static byte[] toMetadataRowKey(TopicId topicId) { String topic = topicId.getNamespace() + ":" + topicId.getTopic() + ":"; return Bytes.toBytes(topic); }
/** * Convert {@link TopicId} to byte array to be used a message tables row key prefix. * * @param topicId {@link TopicId} * @return byte array representation for the topic id */ public static byte[] toMetadataRowKey(TopicId topicId) { String topic = topicId.getNamespace() + ":" + topicId.getTopic() + ":"; return Bytes.toBytes(topic); }
/** * Creates a {@link MetricsContext} for {@link MessageCache} to use for the given topic. */ private MetricsContext createMetricsContext(CConfiguration cConf, TopicId topicId, MetricsCollectionService metricsCollectionService) { return metricsCollectionService.getContext(ImmutableMap.of( Constants.Metrics.Tag.COMPONENT, Constants.Service.MESSAGING_SERVICE, Constants.Metrics.Tag.INSTANCE_ID, cConf.get(Constants.MessagingSystem.CONTAINER_INSTANCE_ID, "0"), Constants.Metrics.Tag.NAMESPACE, topicId.getNamespace(), Constants.Metrics.Tag.TOPIC, topicId.getTopic() )); } }
/** * Creates a {@link MetricsContext} for {@link MessageCache} to use for the given topic. */ private MetricsContext createMetricsContext(CConfiguration cConf, TopicId topicId, MetricsCollectionService metricsCollectionService) { return metricsCollectionService.getContext(ImmutableMap.of( Constants.Metrics.Tag.COMPONENT, Constants.Service.MESSAGING_SERVICE, Constants.Metrics.Tag.INSTANCE_ID, cConf.get(Constants.MessagingSystem.CONTAINER_INSTANCE_ID, "0"), Constants.Metrics.Tag.NAMESPACE, topicId.getNamespace(), Constants.Metrics.Tag.TOPIC, topicId.getTopic() )); } }
@Override public TopicMetadata getTopic(TopicId topicId) throws TopicNotFoundException, IOException { HttpRequest request = remoteClient.requestBuilder(HttpMethod.GET, createTopicPath(topicId)).build(); HttpResponse response = remoteClient.execute(request); if (response.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND) { throw new TopicNotFoundException(topicId.getNamespace(), topicId.getTopic()); } handleError(response, "Failed to update topic " + topicId); Map<String, String> properties = GSON.fromJson(response.getResponseBodyAsString(), TOPIC_PROPERTY_TYPE); return new TopicMetadata(topicId, properties); }
@Override public TopicMetadata getTopic(TopicId topicId) throws TopicNotFoundException, IOException { HttpRequest request = remoteClient.requestBuilder(HttpMethod.GET, createTopicPath(topicId)).build(); HttpResponse response = remoteClient.execute(request); if (response.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND) { throw new TopicNotFoundException(topicId.getNamespace(), topicId.getTopic()); } handleError(response, "Failed to update topic " + topicId); Map<String, String> properties = GSON.fromJson(response.getResponseBodyAsString(), TOPIC_PROPERTY_TYPE); return new TopicMetadata(topicId, properties); }
private byte[] getTopicKey(TopicId topicId) { return new MDSKey.Builder() .add(TOPIC_MARKER) .add(topicId.getNamespace()) .add(topicId.getTopic()).build().getKey(); }
private byte[] getTopicKey(TopicId topicId) { return new MDSKey.Builder() .add(TOPIC_MARKER) .add(topicId.getNamespace()) .add(topicId.getTopic()).build().getKey(); }
@Override public void createTopic(TopicMetadata topicMetadata) throws TopicAlreadyExistsException, IOException { TopicId topicId = topicMetadata.getTopicId(); HttpRequest request = remoteClient.requestBuilder(HttpMethod.PUT, createTopicPath(topicId)) .withBody(GSON.toJson(topicMetadata.getProperties())) .build(); HttpResponse response = remoteClient.execute(request); if (response.getResponseCode() == HttpURLConnection.HTTP_CONFLICT) { throw new TopicAlreadyExistsException(topicId.getNamespace(), topicId.getTopic()); } handleError(response, "Failed to create topic " + topicId); }
@Override public void deleteTopic(TopicId topicId) throws TopicNotFoundException, IOException { HttpRequest request = remoteClient.requestBuilder(HttpMethod.DELETE, createTopicPath(topicId)).build(); HttpResponse response = remoteClient.execute(request); if (response.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND) { throw new TopicNotFoundException(topicId.getNamespace(), topicId.getTopic()); } handleError(response, "Failed to update topic " + topicId); }
@Override public void createTopic(TopicMetadata topicMetadata) throws TopicAlreadyExistsException, IOException { TopicId topicId = topicMetadata.getTopicId(); HttpRequest request = remoteClient.requestBuilder(HttpMethod.PUT, createTopicPath(topicId)) .withBody(GSON.toJson(topicMetadata.getProperties())) .build(); HttpResponse response = remoteClient.execute(request); if (response.getResponseCode() == HttpURLConnection.HTTP_CONFLICT) { throw new TopicAlreadyExistsException(topicId.getNamespace(), topicId.getTopic()); } handleError(response, "Failed to create topic " + topicId); }
@Override public void updateTopic(TopicMetadata topicMetadata) throws TopicNotFoundException, IOException { TopicId topicId = topicMetadata.getTopicId(); HttpRequest request = remoteClient.requestBuilder(HttpMethod.PUT, createTopicPath(topicId) + "/properties") .withBody(GSON.toJson(topicMetadata.getProperties())) .build(); HttpResponse response = remoteClient.execute(request); if (response.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND) { throw new TopicNotFoundException(topicId.getNamespace(), topicId.getTopic()); } handleError(response, "Failed to update topic " + topicId); }
@Override public void deleteTopic(TopicId topicId) throws TopicNotFoundException, IOException { HttpRequest request = remoteClient.requestBuilder(HttpMethod.DELETE, createTopicPath(topicId)).build(); HttpResponse response = remoteClient.execute(request); if (response.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND) { throw new TopicNotFoundException(topicId.getNamespace(), topicId.getTopic()); } handleError(response, "Failed to update topic " + topicId); }
@Override public void updateTopic(TopicMetadata topicMetadata) throws TopicNotFoundException, IOException { TopicId topicId = topicMetadata.getTopicId(); HttpRequest request = remoteClient.requestBuilder(HttpMethod.PUT, createTopicPath(topicId) + "/properties") .withBody(GSON.toJson(topicMetadata.getProperties())) .build(); HttpResponse response = remoteClient.execute(request); if (response.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND) { throw new TopicNotFoundException(topicId.getNamespace(), topicId.getTopic()); } handleError(response, "Failed to update topic " + topicId); }
@Override public void rollback(TopicId topicId, RollbackDetail rollbackDetail) throws TopicNotFoundException, IOException { ByteBuffer requestBody = (rollbackDetail instanceof ClientRollbackDetail) ? ByteBuffer.wrap(((ClientRollbackDetail) rollbackDetail).getEncoded()) : encodeRollbackDetail(rollbackDetail); HttpRequest httpRequest = remoteClient.requestBuilder(HttpMethod.POST, createTopicPath(topicId) + "/rollback") .addHeader(HttpHeaders.CONTENT_TYPE, "avro/binary") .withBody(requestBody) .build(); HttpResponse response = remoteClient.execute(httpRequest); if (response.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND) { throw new TopicNotFoundException(topicId.getNamespace(), topicId.getTopic()); } handleError(response, "Failed to rollback message in topic " + topicId + " with rollback detail " + rollbackDetail); }