You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by si...@apache.org on 2019/01/13 01:26:41 UTC
[pulsar] branch master updated: issues #3264 fix partitioned-stats
reporting errors not match (#3339)
This is an automated email from the ASF dual-hosted git repository.
sijie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/master by this push:
new 221e5c7 issues #3264 fix partitioned-stats reporting errors not match (#3339)
221e5c7 is described below
commit 221e5c72ec8e72b8f4e39c38c6a75790dec1217f
Author: wpl <12...@qq.com>
AuthorDate: Sun Jan 13 09:26:36 2019 +0800
issues #3264 fix partitioned-stats reporting errors not match (#3339)
fixes #3264
---
.../org/apache/pulsar/broker/admin/AdminResource.java | 9 +++++++++
.../pulsar/broker/admin/impl/PersistentTopicsBase.java | 14 +++++++++++++-
.../java/org/apache/pulsar/broker/admin/AdminApiTest.java | 15 ++++++---------
3 files changed, 28 insertions(+), 10 deletions(-)
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/AdminResource.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/AdminResource.java
index 6dc2e40..b47fda8 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/AdminResource.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/AdminResource.java
@@ -70,6 +70,7 @@ import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.ZooKeeper.States;
+import org.apache.zookeeper.data.Stat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -109,6 +110,14 @@ public abstract class AdminResource extends PulsarWebResource {
ZkUtils.createFullPathOptimistic(globalZk(), path, content, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
}
+ protected boolean zkPathExists(String path) throws KeeperException, InterruptedException {
+ Stat stat = globalZk().exists(path, false);
+ if (null != stat) {
+ return true;
+ }
+ return false;
+ }
+
/**
* Get the domain of the topic (whether it's persistent or non-persistent)
*/
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java
index aea5a16..e6df76d 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java
@@ -643,7 +643,19 @@ public class PersistentTopicsBase extends AdminResource {
}
} catch (PulsarAdminException e) {
if (e.getStatusCode() == Status.NOT_FOUND.getStatusCode()) {
- throw new RestException(Status.NOT_FOUND, "Internal topics have not been generated yet");
+
+ String path = ZkAdminPaths.partitionedTopicPath(topicName);
+ try {
+ boolean zkPathExists = zkPathExists(path);
+ if (zkPathExists) {
+ stats.partitions.put(topicName.toString(), new TopicStats());
+ } else {
+ throw new RestException(Status.NOT_FOUND, "Internal topics have not been generated yet");
+ }
+ } catch (KeeperException | InterruptedException exception) {
+ throw new RestException(e);
+ }
+
} else {
throw new RestException(e);
}
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest.java
index 7a65089..837db22 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest.java
@@ -796,15 +796,12 @@ public class AdminApiTest extends MockedPulsarServiceBaseTest {
assertEquals(admin.topics().getPartitionedTopicMetadata("persistent://prop-xyz/ns1/ds2").partitions,
0);
- try {
- admin.topics().getPartitionedStats(partitionedTopicName, false);
- fail("should have failed");
- } catch (PulsarAdminException e) {
- // ok
- assertEquals(e.getStatusCode(), Status.NOT_FOUND.getStatusCode());
- } catch (Exception e) {
- fail(e.getMessage());
- }
+ // check the getPartitionedStats for PartitionedTopic returns only partitions metadata, and no partitions info
+ assertEquals(admin.topics().getPartitionedTopicMetadata(partitionedTopicName).partitions,
+ admin.topics().getPartitionedStats(partitionedTopicName,false).metadata.partitions);
+
+ assertEquals(admin.topics().getPartitionedStats(partitionedTopicName, false).partitions.size(),
+ 0);
try {
admin.topics().getSubscriptions(partitionedTopicName);