k-wall commented on a change in pull request #2847: ARTEMIS-2494: [AMQP] Allow 
Modified disposition to be used signal address full to a sending peer
URL: https://github.com/apache/activemq-artemis/pull/2847#discussion_r327716000
 
 

 ##########
 File path: 
artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/ProtonServerReceiverContext.java
 ##########
 @@ -326,6 +325,37 @@ private void actualDelivery(Delivery delivery, Receiver 
receiver, ReadableBuffer
       }
    }
 
+   private DeliveryState determineDeliveryState(final Source source, final 
boolean useModified, final Exception e) {
+      Outcome defaultOutcome = getEffectiveDefaultOutcome(source);
+      if (e instanceof ActiveMQAddressFullException && useModified &&
+          (outcomeSupported(source, Modified.DESCRIPTOR_SYMBOL) || 
defaultOutcome instanceof Modified)) {
+         Modified modified = new Modified();
+         modified.setDeliveryFailed(true);
+         modified.setUndeliverableHere(false);
+         return modified;
+      } else {
+         if (outcomeSupported(source, Rejected.DESCRIPTOR_SYMBOL) || 
defaultOutcome instanceof Rejected) {
+            ErrorCondition condition = new ErrorCondition();
+
+            // Set condition
+            if (e instanceof ActiveMQSecurityException) {
+               condition.setCondition(AmqpError.UNAUTHORIZED_ACCESS);
+            } else {
+               condition.setCondition(Symbol.valueOf("failed"));
+            }
+            condition.setDescription(e.getMessage());
+
+            Rejected rejected = new Rejected();
+            rejected.setError(condition);
+            return rejected;
+         } else if (source.getDefaultOutcome() instanceof DeliveryState) {
+            return ((DeliveryState) source.getDefaultOutcome());
+         } else {
+            return Accepted.getInstance();
 
 Review comment:
   @gemmellr good spot, I hadn't realised that.  I agree that we should make 
sure that issues are raised against the relevant projects to we move to a spec 
compliant population.  Which are they?
   
   For this patch, for now, I need to change the else clause of line 354 to 
return a Rejected to maintain the existing behaviour for peers that specify 
neither outcomes or defaultOutcome. 

----------------------------------------------------------------
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.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to