[ 
https://issues.apache.org/activemq/browse/AMQ-1798?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Rob Davies resolved AMQ-1798.
-----------------------------

    Fix Version/s: 5.2.0
       Resolution: Fixed

Fixed bu SVN revision 669265

> store checkpoint repeatidly writes the same checkpoint record - results in 
> unnecessary writes
> ---------------------------------------------------------------------------------------------
>
>                 Key: AMQ-1798
>                 URL: https://issues.apache.org/activemq/browse/AMQ-1798
>             Project: ActiveMQ
>          Issue Type: Improvement
>          Components: Message Store
>    Affects Versions: 5.1.0
>         Environment: all - default config
>            Reporter: Gary Tully
>            Assignee: Rob Davies
>            Priority: Minor
>             Fix For: 5.2.0
>
>
> I left a simple test running over night to find that the data file index was 
> incrementing, it turns out that the checkpoint functionality does not 
> remember its last mark and will always write a mark, even if it is the same 
> as the last written mark, with a small dataFileSize I found that the current 
> data file index was not as expected.
> This is really just odd behaviour rather than bug as I don't think it has any 
> really adverse effects unless there is a cap on the file id. (which there is 
> not!)
> the following change ensures that checkpoint will only write a record if 
> there is a change to the last recorded mark.
> Index: src/main/java/org/apache/activemq/store/amq/AMQPersistenceAdapter.java
> ===================================================================
> --- src/main/java/org/apache/activemq/store/amq/AMQPersistenceAdapter.java    
>   (revision 667120)
> +++ src/main/java/org/apache/activemq/store/amq/AMQPersistenceAdapter.java    
>   (working copy)
> @@ -375,12 +375,13 @@
>                  LOG.debug("Checkpoint started.");
>              }
>  
> -            Location newMark = null;
> +            Location currentMark = asyncDataManager.getMark();
> +            Location newMark = currentMark;
>              Iterator<AMQMessageStore> queueIterator = 
> queues.values().iterator();
>              while (queueIterator.hasNext()) {
>                  final AMQMessageStore ms = queueIterator.next();
>                  Location mark = (Location)ms.getMark();
> -                if (mark != null && (newMark == null || 
> newMark.compareTo(mark) < 0)) {
> +                if (mark != null && mark.compareTo(newMark) > 0) {
>                      newMark = mark;
>                  }
>              }
> @@ -388,12 +389,12 @@
>              while (topicIterator.hasNext()) {
>                  final AMQTopicMessageStore ms = topicIterator.next();
>                  Location mark = (Location)ms.getMark();
> -                if (mark != null && (newMark == null || 
> newMark.compareTo(mark) < 0)) {
> +                if (mark != null && mark.compareTo(newMark) > 0) {
>                      newMark = mark;
>                  }
>              }
>              try {
> -                if (newMark != null) {
> +                if (newMark != currentMark) {
>                      if (LOG.isDebugEnabled()) {
>                          LOG.debug("Marking journal at: " + newMark);

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to