[ 
https://issues.apache.org/jira/browse/ARTEMIS-2224?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16738727#comment-16738727
 ] 

ASF GitHub Bot commented on ARTEMIS-2224:
-----------------------------------------

Github user michaelandrepearce commented on a diff in the pull request:

    https://github.com/apache/activemq-artemis/pull/2494#discussion_r246568579
  
    --- Diff: 
artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/cursor/impl/LivePageCacheImpl.java
 ---
    @@ -48,54 +82,228 @@ public long getPageId() {
        }
     
        @Override
    -   public synchronized int getNumberOfMessages() {
    -      return messages.size();
    +   public int getNumberOfMessages() {
    +      while (true) {
    +         final long size = producerIndex;
    +         if (size == RESIZING) {
    +            Thread.yield();
    +            continue;
    +         }
    +         return (int) Math.min(size, Integer.MAX_VALUE);
    +      }
        }
     
        @Override
    -   public synchronized void setMessages(PagedMessage[] messages) {
    +   public void setMessages(PagedMessage[] messages) {
           // This method shouldn't be called on liveCache, but we will provide 
the implementation for it anyway
           for (PagedMessage msg : messages) {
              addLiveMessage(msg);
           }
        }
     
        @Override
    -   public synchronized PagedMessage getMessage(int messageNumber) {
    -      if (messageNumber < messages.size()) {
    -         return messages.get(messageNumber);
    -      } else {
    +   public PagedMessage getMessage(int messageNumber) {
    +      if (messageNumber < 0) {
              return null;
           }
    +      //it allow to perform less cache invalidations vs producerIndex if 
there are bursts of appends
    +      long size = lastSeenProducerIndex;
    --- End diff --
    
    naming of fields is missaligned, some places its called size, some others 
you call it index, this is hard to follow.


> Reduce contention on LivePageCacheImpl
> --------------------------------------
>
>                 Key: ARTEMIS-2224
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-2224
>             Project: ActiveMQ Artemis
>          Issue Type: Improvement
>          Components: Broker
>    Affects Versions: 2.7.0
>            Reporter: Francesco Nigro
>            Assignee: Francesco Nigro
>            Priority: Major
>
> Has been measured that LIvePageCacheImpl operations are a source of 
> contention on producer side while paging. 
> This contention decrease the scalability of the broker in an evident way 
> while using topics, because the page cache is been accessed concurrently by 
> several producers to ack transactions while the messages are being appended.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to