gemmellr commented on code in PR #4183:
URL: https://github.com/apache/activemq-artemis/pull/4183#discussion_r1068355313


##########
artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerConsumerImpl.java:
##########
@@ -1513,7 +1524,137 @@ public String getConnectionRemoteAddress() {
       return 
this.session.getRemotingConnection().getTransportConnection().getRemoteAddress();
    }
 
+   @Override
+   public int getMessagesInTransitSize() {
+      return metrics.getMessagesInTransitSize();
+   }
+
+   @Override
+   public int getMessagesInTransit() {
+      return deliveringRefs.size();
+   }
+
+   @Override
+   public long getLastDeliveredTime() {
+      return metrics.getLastDeliveredTime();
+   }
+
+   @Override
+   public long getLastAcknowledgedTime() {
+      return metrics.getLastAcknowledgedTime();
+   }
+
+   @Override
+   public long getMessagesAcknowledged() {
+      return metrics.getMessagesAcknowledged();
+   }
+
+   @Override
+   public int getMessagesDeliveredSize() {
+      return metrics.getMessagesDeliveredSize();
+   }
+
+   @Override
+   public int getMessagesDelivered() {
+      return metrics.getMessagesDelivered();
+   }
+
+   @Override
+   public int getMessagesAcknowledgedAwaitingCommit() {
+      return metrics.getMessagesAcknowledgedAwaitingCommit();
+   }
+
    public SessionCallback getCallback() {
       return callback;
    }
+
+   static class ServerConsumerMetrics extends TransactionOperationAbstract {
+
+      /**
+       * Since messages can be delivered (incremented) and acknowledged 
(decremented) at the same time we have to protect
+       * the encode size and make it atomic. The other fields are ok since 
they are only accessed from a single thread.
+       */
+      private static final AtomicIntegerFieldUpdater<ServerConsumerMetrics> 
messagesInTransitSizeUpdater = 
AtomicIntegerFieldUpdater.newUpdater(ServerConsumerMetrics.class, 
"messagesInTransitSize");
+
+      private volatile int messagesInTransitSize = 0;
+
+      private static final    AtomicIntegerFieldUpdater<ServerConsumerMetrics> 
messagesAcknowledgedAwaitingCommitUpdater = 
AtomicIntegerFieldUpdater.newUpdater(ServerConsumerMetrics.class, 
"messagesAcknowledgedAwaitingCommit");
+
+      private volatile int messagesAcknowledgedAwaitingCommit = 0;
+
+      private int messagesDeliveredSize = 0;
+
+      private long lastDeliveredTime = 0;
+
+      private long lastAcknowledgedTime = 0;
+
+      private int messagesDelivered = 0;
+
+      private int messagesAcknowledged = 0;
+
+
+      public int getMessagesInTransitSize() {
+         return messagesInTransitSizeUpdater.get(this);
+      }
+
+      public int getMessagesDeliveredSize() {
+         return messagesDeliveredSize;
+      }
+
+      public long getLastDeliveredTime() {
+         return lastDeliveredTime;
+      }
+
+      public long getLastAcknowledgedTime() {
+         return lastAcknowledgedTime;
+      }
+
+      public int getMessagesDelivered() {
+         return messagesDelivered;
+      }
+
+      public int getMessagesAcknowledged() {
+         return messagesAcknowledged;
+      }
+
+      public int getMessagesAcknowledgedAwaitingCommit() {
+         return messagesAcknowledgedAwaitingCommitUpdater.get(this);
+      }
+
+      public void addMessage(int encodeSize) {
+         messagesInTransitSizeUpdater.addAndGet(this, encodeSize);
+         messagesDeliveredSize += encodeSize;
+         messagesDelivered++;
+         lastDeliveredTime = System.currentTimeMillis();
+      }
+
+      public void addAcknowledge(int encodeSize, Transaction tx) {
+         messagesInTransitSizeUpdater.addAndGet(this, -encodeSize);
+         messagesAcknowledged++;

Review Comment:
   Yes. The method seems like it can still be multi-threaded, so doing ++ isnt 
safe.



-- 
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