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