gemmellr commented on code in PR #5220:
URL: https://github.com/apache/activemq-artemis/pull/5220#discussion_r1777398695
##########
artemis-server/src/main/java/org/apache/activemq/artemis/core/server/mirror/NoForwardMirrorController.java:
##########
@@ -0,0 +1,5 @@
+package org.apache.activemq.artemis.core.server.mirror;
Review Comment:
Needs the license header added
##########
artemis-server/src/main/resources/schema/artemis-configuration.xsd:
##########
@@ -2306,6 +2306,14 @@
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
+ <xsd:attribute name="no-forwarding" type="xsd:boolean" use="optional"
default="false">
+ <xsd:annotation>
+ <xsd:documentation>
+ If this is true, the mirror at the opposite end of the link
will not forward data coming from that link to any other mirrors down the line.
Review Comment:
"the mirror at the opposite end of the link will not forward data coming
from that link..." might be clearer as something like "the broker at the
opposite end of the mirror link will not forward messages or instructions
coming from this broker..."
##########
artemis-server/src/main/java/org/apache/activemq/artemis/core/server/mirror/NoForwardMirrorController.java:
##########
@@ -0,0 +1,5 @@
+package org.apache.activemq.artemis.core.server.mirror;
+
+public interface NoForwardMirrorController extends MirrorController{
Review Comment:
I would go with e.g MirrorControllerTarget or TargetMirrorController, and
then only the AMQPMirrorControllerTarget (and the substitute inside AckManager)
would implement it, not the AMQPMirrorControllerSource. We can use the same
interface for other Target-specific detail later without renaming it or adding
others, and more easily follow target-specific functionality around the broker.
In the usage we only care if the message is being operated on via a mirror
target, by a mirror source. The mirror source doesnt need to implement this
method.
EDIT: later bit already fixed.
##########
artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/mirror/AMQPMirrorControllerSource.java:
##########
@@ -236,6 +238,10 @@ public void deleteAddress(AddressInfo addressInfo) throws
Exception {
if (ignoreAddress(addressInfo.getName())) {
return;
}
+ if (isBlockedByNoForward()) {
+ return;
+ }
+
Review Comment:
I would do this earlier; no point checking the specific address is permitted
(the bit above) if we aren't allowed to forward it _anywhere_.
Same for other bits futher down
##########
artemis-server/src/main/java/org/apache/activemq/artemis/core/config/amqpBrokerConnectivity/AMQPMirrorBrokerConnectionElement.java:
##########
@@ -75,6 +77,15 @@ public AMQPMirrorBrokerConnectionElement
setQueueCreation(boolean queueCreation)
return this;
}
+ public boolean getNoForward() {
+ return noForward;
+ }
+
+ public AMQPMirrorBrokerConnectionElement setNoForward(boolean noForward) {
Review Comment:
The naming here influences the namign needed for Broker Properties
.properties / .yaml based configs. Here the property name is "NoForward", but
in the xml config the wording "no-forwarding". They should probably be
consistent in the wording i.e the _forward_, or _forwarding_) if there isn't a
significant reason for them to differ.
##########
artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/mirror/AMQPMirrorControllerSource.java:
##########
@@ -559,6 +587,10 @@ public void preAcknowledge(final Transaction tx, final
MessageReference ref, fin
return;
}
+ if (isBlockedByNoForward()) {
+ return;
+ }
+
Review Comment:
I suspect a different check will be needed here, inspecting the specific
message; this is ultimately called by the queue, which I expect usually wont
have a mirror target controller set. It will also want to accommodate not
sending acks for no-forward messages [that it didnt send to begin with] even
across broker restarts, due to expiry, etc etc.
I expect the test-peer based testing I know you are working on will
demonstrate this.
##########
artemis-server/src/main/java/org/apache/activemq/artemis/core/server/mirror/NoForwardMirrorController.java:
##########
@@ -0,0 +1,5 @@
+package org.apache.activemq.artemis.core.server.mirror;
+
+public interface NoForwardMirrorController extends MirrorController{
+ public boolean getNoForward();
Review Comment:
As a boolean, isNoForward would be more typical.
##########
artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/mirror/AMQPMirrorControllerSource.java:
##########
@@ -60,7 +61,7 @@
import static
org.apache.activemq.artemis.protocol.amqp.connect.mirror.AMQPMirrorControllerTarget.getControllerInUse;
-public class AMQPMirrorControllerSource extends BasicMirrorController<Sender>
implements MirrorController, ActiveMQComponent {
+public class AMQPMirrorControllerSource extends BasicMirrorController<Sender>
implements ActiveMQComponent, NoForwardMirrorController {
Review Comment:
Per other comments, feels like this should still just implement the base
MirrorController interface only?
--
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]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information, visit: https://activemq.apache.org/contact