BewareMyPower commented on code in PR #19153:
URL: https://github.com/apache/pulsar/pull/19153#discussion_r1064155534


##########
pulsar-broker/src/main/java/org/apache/pulsar/broker/service/TopicEventsListener.java:
##########
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pulsar.broker.service;
+
+/**
+ * Listener for the Topic events.
+ */
+public interface TopicEventsListener {
+
+    /**
+     * Types of events currently supported.
+     *  create/load/unload/delete
+     */
+    enum TopicEvent {
+        // create events included into load events
+        CREATE,
+        LOAD,
+        UNLOAD,
+        DELETE,
+    }
+
+    /**
+     * Stages of events currently supported.
+     *  before starting the event/successful completion/failed completion
+     */
+    enum EventStage {
+        BEFORE,
+        SUCCESS,
+        FAILURE
+    }
+
+    /**
+     * Handle topic event.
+     * Choice of the thread / maintenance of the thread pool is up to the 
event handlers.
+     * @param topicName - name of the topic
+     * @param event - TopicEvent
+     * @param stage - EventStage
+     * @param t - exception in case of FAILURE, if present/known
+     */
+    void handleEvent(String topicName, TopicEvent event, EventStage stage, 
Throwable t);

Review Comment:
   > the protocol handler wants to prevent the deletion because the topic is a 
'system topic' (the same for 'create')
   
   Instead of allowing exceptions are thrown, I think we should better add a 
return value to allow the protocol handler to indicate how it expects the 
broker to do with some certain cases.
   
   It's similar to the discussions in 
https://github.com/apache/pulsar/pull/19147. Generally, a listener provided 
from users should not have side effects to the broker or other core components, 
so we can see nearly all exceptions are caught:
   - `NamespaceBundleOwnershipListener`
   - `ConsumerInterceptor`
   - `MessageListener`
   
   While #19147 fixes the inconsistent implementation of the 
`BrokerInterceptor`, which does not caught the exception.
   
   If we intend to allow the 3rd party extension to affect the broker, we 
should not make use of exceptions, which represents **errors**. Instead, we 
should allow that in the API itself.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to