@GET @Path("/topics/{topic}") public void getTopic(HttpRequest request, HttpResponder responder, @PathParam("namespace") String namespace, @PathParam("topic") String topic) throws Exception { TopicId topicId = new NamespaceId(namespace).topic(topic); TopicMetadata metadata = messagingService.getTopic(topicId); responder.sendJson(HttpResponseStatus.OK, GSON.toJson(metadata.getProperties(), TOPIC_PROPERTY_TYPE)); }
@GET @Path("/topics/{topic}") public void getTopic(HttpRequest request, HttpResponder responder, @PathParam("namespace") String namespace, @PathParam("topic") String topic) throws Exception { TopicId topicId = new NamespaceId(namespace).topic(topic); TopicMetadata metadata = messagingService.getTopic(topicId); responder.sendJson(HttpResponseStatus.OK, GSON.toJson(metadata.getProperties(), TOPIC_PROPERTY_TYPE)); }
@Override public Map<String, String> getTopicProperties(String topic) throws TopicNotFoundException, IOException { return messagingService.getTopic(namespace.topic(topic)).getProperties(); }
@Override public Map<String, String> getTopicProperties(String topic) throws TopicNotFoundException, IOException { return messagingService.getTopic(namespace.topic(topic)).getProperties(); }
@Override public void deleteTopic(TopicId topicId) throws TopicNotFoundException, IOException { byte[] rowKey = MessagingUtils.toMetadataRowKey(topicId); boolean completed = false; try { // Keep trying to delete while (!completed) { TopicMetadata oldMetadata = getMetadata(topicId); TreeMap<String, String> newProperties = new TreeMap<>(oldMetadata.getProperties()); newProperties.put(TopicMetadata.GENERATION_KEY, Integer.toString(oldMetadata.getGeneration() * -1)); Put put = tableUtil.buildPut(rowKey) .add(columnFamily, COL, Bytes.toBytes(GSON.toJson(newProperties, MAP_TYPE))) .build(); byte[] oldValue = Bytes.toBytes(GSON.toJson(new TreeMap<>(oldMetadata.getProperties()), MAP_TYPE)); completed = hTable.checkAndPut(rowKey, columnFamily, COL, oldValue, put); } } catch (IOException e) { throw exceptionHandler.handle(e); } }
@Override public void updateTopic(TopicMetadata topicMetadata) throws TopicNotFoundException, IOException { try (MetadataTable metadataTable = createMetadataTable()) { Map<String, String> properties = createDefaultProperties(); properties.putAll(topicMetadata.getProperties()); metadataTable.updateTopic(new TopicMetadata(topicMetadata.getTopicId(), properties, true)); topicCache.invalidate(topicMetadata.getTopicId()); } }
@Override public void updateTopic(TopicMetadata topicMetadata) throws TopicNotFoundException, IOException { try (MetadataTable metadataTable = createMetadataTable()) { Map<String, String> properties = createDefaultProperties(); properties.putAll(topicMetadata.getProperties()); metadataTable.updateTopic(new TopicMetadata(topicMetadata.getTopicId(), properties, true)); topicCache.invalidate(topicMetadata.getTopicId()); } }
@Override public void deleteTopic(TopicId topicId) throws TopicNotFoundException, IOException { byte[] rowKey = MessagingUtils.toMetadataRowKey(topicId); boolean completed = false; try { // Keep trying to delete while (!completed) { TopicMetadata oldMetadata = getMetadata(topicId); TreeMap<String, String> newProperties = new TreeMap<>(oldMetadata.getProperties()); newProperties.put(TopicMetadata.GENERATION_KEY, Integer.toString(oldMetadata.getGeneration() * -1)); Put put = tableUtil.buildPut(rowKey) .add(columnFamily, COL, Bytes.toBytes(GSON.toJson(newProperties, MAP_TYPE))) .build(); byte[] oldValue = Bytes.toBytes(GSON.toJson(new TreeMap<>(oldMetadata.getProperties()), MAP_TYPE)); completed = hTable.checkAndPut(rowKey, columnFamily, COL, oldValue, put); } } catch (IOException e) { throw exceptionHandler.handle(e); } }
@Override public void createTopic(TopicMetadata topicMetadata) throws TopicAlreadyExistsException, IOException { try (MetadataTable metadataTable = createMetadataTable()) { Map<String, String> properties = createDefaultProperties(); properties.putAll(topicMetadata.getProperties()); metadataTable.createTopic(new TopicMetadata(topicMetadata.getTopicId(), properties, true)); } }
@Override public void createTopic(TopicMetadata topicMetadata) throws TopicAlreadyExistsException, IOException { try (MetadataTable metadataTable = createMetadataTable()) { Map<String, String> properties = createDefaultProperties(); properties.putAll(topicMetadata.getProperties()); metadataTable.createTopic(new TopicMetadata(topicMetadata.getTopicId(), properties, true)); } }
@Override public void updateTopic(TopicMetadata topicMetadata) throws TopicNotFoundException, IOException { byte[] rowKey = MessagingUtils.toMetadataRowKey(topicMetadata.getTopicId()); boolean completed = false; try { // Keep trying to update while (!completed) { TopicMetadata oldMetadata = getMetadata(topicMetadata.getTopicId()); TreeMap<String, String> newProperties = new TreeMap<>(topicMetadata.getProperties()); newProperties.put(TopicMetadata.GENERATION_KEY, Integer.toString(oldMetadata.getGeneration())); Put put = tableUtil.buildPut(rowKey) .add(columnFamily, COL, Bytes.toBytes(GSON.toJson(newProperties, MAP_TYPE))) .build(); byte[] oldValue = Bytes.toBytes(GSON.toJson(new TreeMap<>(oldMetadata.getProperties()), MAP_TYPE)); completed = hTable.checkAndPut(rowKey, columnFamily, COL, oldValue, put); } } catch (IOException e) { throw exceptionHandler.handle(e); } }
@Override public void updateTopic(TopicMetadata topicMetadata) throws TopicNotFoundException, IOException { byte[] rowKey = MessagingUtils.toMetadataRowKey(topicMetadata.getTopicId()); boolean completed = false; try { // Keep trying to update while (!completed) { TopicMetadata oldMetadata = getMetadata(topicMetadata.getTopicId()); TreeMap<String, String> newProperties = new TreeMap<>(topicMetadata.getProperties()); newProperties.put(TopicMetadata.GENERATION_KEY, Integer.toString(oldMetadata.getGeneration())); Put put = tableUtil.buildPut(rowKey) .add(columnFamily, COL, Bytes.toBytes(GSON.toJson(newProperties, MAP_TYPE))) .build(); byte[] oldValue = Bytes.toBytes(GSON.toJson(new TreeMap<>(oldMetadata.getProperties()), MAP_TYPE)); completed = hTable.checkAndPut(rowKey, columnFamily, COL, oldValue, put); } } catch (IOException e) { throw exceptionHandler.handle(e); } }
@Override public void deleteTopic(TopicId topicId) throws TopicNotFoundException, IOException { byte[] rowKey = MessagingUtils.toMetadataRowKey(topicId); try { synchronized (this) { byte[] tableValue = levelDB.get(rowKey); if (tableValue == null) { throw new TopicNotFoundException(topicId.getNamespace(), topicId.getTopic()); } Map<String, String> oldProperties = GSON.fromJson(Bytes.toString(tableValue), MAP_TYPE); TopicMetadata metadata = new TopicMetadata(topicId, oldProperties); if (!metadata.exists()) { throw new TopicNotFoundException(topicId.getNamespace(), topicId.getTopic()); } // Mark the topic as deleted TreeMap<String, String> newProperties = new TreeMap<>(metadata.getProperties()); newProperties.put(TopicMetadata.GENERATION_KEY, Integer.toString(-1 * metadata.getGeneration())); levelDB.put(rowKey, Bytes.toBytes(GSON.toJson(newProperties, MAP_TYPE)), WRITE_OPTIONS); } } catch (DBException e) { throw new IOException(e); } }
@Override public void deleteTopic(TopicId topicId) throws TopicNotFoundException, IOException { byte[] rowKey = MessagingUtils.toMetadataRowKey(topicId); try { synchronized (this) { byte[] tableValue = levelDB.get(rowKey); if (tableValue == null) { throw new TopicNotFoundException(topicId.getNamespace(), topicId.getTopic()); } Map<String, String> oldProperties = GSON.fromJson(Bytes.toString(tableValue), MAP_TYPE); TopicMetadata metadata = new TopicMetadata(topicId, oldProperties); if (!metadata.exists()) { throw new TopicNotFoundException(topicId.getNamespace(), topicId.getTopic()); } // Mark the topic as deleted TreeMap<String, String> newProperties = new TreeMap<>(metadata.getProperties()); newProperties.put(TopicMetadata.GENERATION_KEY, Integer.toString(-1 * metadata.getGeneration())); levelDB.put(rowKey, Bytes.toBytes(GSON.toJson(newProperties, MAP_TYPE)), WRITE_OPTIONS); } } catch (DBException e) { throw new IOException(e); } }
@Override public void updateTopic(TopicMetadata topicMetadata) throws TopicNotFoundException, IOException { try { TopicId topicId = topicMetadata.getTopicId(); byte[] key = MessagingUtils.toMetadataRowKey(topicId); synchronized (this) { byte[] tableValue = levelDB.get(key); if (tableValue == null) { throw new TopicNotFoundException(topicId.getNamespace(), topicId.getTopic()); } Map<String, String> oldProperties = GSON.fromJson(Bytes.toString(tableValue), MAP_TYPE); TopicMetadata oldMetadata = new TopicMetadata(topicId, oldProperties); if (!oldMetadata.exists()) { throw new TopicNotFoundException(topicId.getNamespace(), topicId.getTopic()); } TreeMap<String, String> newProperties = new TreeMap<>(topicMetadata.getProperties()); newProperties.put(TopicMetadata.GENERATION_KEY, Integer.toString(oldMetadata.getGeneration())); levelDB.put(key, Bytes.toBytes(GSON.toJson(newProperties, MAP_TYPE)), WRITE_OPTIONS); } } catch (DBException e) { throw new IOException(e); } }
@Override public void updateTopic(TopicMetadata topicMetadata) throws TopicNotFoundException, IOException { try { TopicId topicId = topicMetadata.getTopicId(); byte[] key = MessagingUtils.toMetadataRowKey(topicId); synchronized (this) { byte[] tableValue = levelDB.get(key); if (tableValue == null) { throw new TopicNotFoundException(topicId.getNamespace(), topicId.getTopic()); } Map<String, String> oldProperties = GSON.fromJson(Bytes.toString(tableValue), MAP_TYPE); TopicMetadata oldMetadata = new TopicMetadata(topicId, oldProperties); if (!oldMetadata.exists()) { throw new TopicNotFoundException(topicId.getNamespace(), topicId.getTopic()); } TreeMap<String, String> newProperties = new TreeMap<>(topicMetadata.getProperties()); newProperties.put(TopicMetadata.GENERATION_KEY, Integer.toString(oldMetadata.getGeneration())); levelDB.put(key, Bytes.toBytes(GSON.toJson(newProperties, MAP_TYPE)), WRITE_OPTIONS); } } catch (DBException e) { throw new IOException(e); } }
@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 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 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); }