[
https://issues.apache.org/activemq/browse/AMQ-1786?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Rob Davies resolved AMQ-1786.
-----------------------------
Resolution: Fixed
Fix Version/s: (was: 5.2.0)
5.3.0
With https://issues.apache.org/activemq/browse/AMQ-1112 now resolved - to
actively purge expired messages from the store - this is issue is resolved
> Journal files don't get cleaned up
> ----------------------------------
>
> Key: AMQ-1786
> URL: https://issues.apache.org/activemq/browse/AMQ-1786
> Project: ActiveMQ
> Issue Type: Bug
> Components: Broker
> Affects Versions: 5.1.0
> Environment: Linux server
> Sun JDK 1.6.0
> Reporter: Brian Desai
> Assignee: Rob Davies
> Priority: Critical
> Fix For: 5.3.0
>
> Attachments: activemq.xml, PersistentStorageCleanup.java
>
>
> I'm running ActiveMQ 5.1.0 with the AMQ persistence adapter, and it appears
> that not all of the journal files get cleaned up. My setup is a little
> abnormal, as I'm trying to test out ActiveMQ's ability to handle queue
> messaging with consumers that may become inactive for periods of time.
>
> So for this test, I have a single publisher pushing messages out to 21
> queues. These are persistent messages with an expiration time. I have a
> message listener reading from all queues (reading from '>'). So, as soon as
> the message is sent to the queues, it's read by the message listener, taking
> it off the queue. So far, so good.
>
> I have a 2 MB max file length set on the AMQ persistence adapter. So, I
> would expect to see for the journal, 2 MB files that get cleaned up after the
> file rolls over. However, the journal files don't always get cleaned up, as
> shown in the file listing below. Out of 181 rollovers, 30 of the files did
> not get cleaned up. The message listener showed no errors, and as far as I
> can tell, it didn't drop any messages.
> {noformat}
> -rw-r--r-- 1 root root 2096753 2008-05-30 20:30 data/journal/data-13
> -rw-r--r-- 1 root root 2096967 2008-05-30 20:31 data/journal/data-14
> -rw-r--r-- 1 root root 2096899 2008-05-30 20:45 data/journal/data-25
> -rw-r--r-- 1 root root 2097057 2008-05-30 21:20 data/journal/data-52
> -rw-r--r-- 1 root root 2096916 2008-05-30 21:22 data/journal/data-54
> -rw-r--r-- 1 root root 2096536 2008-05-30 21:45 data/journal/data-72
> -rw-r--r-- 1 root root 2096894 2008-05-30 21:47 data/journal/data-73
> -rw-r--r-- 1 root root 2097129 2008-05-30 21:49 data/journal/data-75
> -rw-r--r-- 1 root root 2097101 2008-05-30 21:58 data/journal/data-82
> -rw-r--r-- 1 root root 2097026 2008-05-30 21:59 data/journal/data-83
> -rw-r--r-- 1 root root 2096906 2008-05-30 22:02 data/journal/data-85
> -rw-r--r-- 1 root root 2096973 2008-05-30 22:13 data/journal/data-94
> -rw-r--r-- 1 root root 2097105 2008-05-30 22:24 data/journal/data-102
> -rw-r--r-- 1 root root 2097033 2008-05-30 22:41 data/journal/data-113
> -rw-r--r-- 1 root root 2096730 2008-05-30 22:42 data/journal/data-114
> -rw-r--r-- 1 root root 2096569 2008-05-30 22:45 data/journal/data-116
> -rw-r--r-- 1 root root 2096870 2008-05-30 22:50 data/journal/data-118
> -rw-r--r-- 1 root root 2096567 2008-05-30 22:52 data/journal/data-119
> -rw-r--r-- 1 root root 2096766 2008-05-30 23:03 data/journal/data-128
> -rw-r--r-- 1 root root 2096877 2008-05-30 23:06 data/journal/data-130
> -rw-r--r-- 1 root root 2096888 2008-05-30 23:18 data/journal/data-140
> -rw-r--r-- 1 root root 2096699 2008-05-30 23:20 data/journal/data-141
> -rw-r--r-- 1 root root 2096973 2008-05-30 23:22 data/journal/data-143
> -rw-r--r-- 1 root root 2096924 2008-05-30 23:31 data/journal/data-150
> -rw-r--r-- 1 root root 2096936 2008-05-30 23:45 data/journal/data-161
> -rw-r--r-- 1 root root 2096527 2008-05-30 23:57 data/journal/data-170
> -rw-r--r-- 1 root root 2097151 2008-05-30 23:58 data/journal/data-171
> -rw-r--r-- 1 root root 2096972 2008-05-31 00:11 data/journal/data-179
> -rw-r--r-- 1 root root 2096703 2008-05-31 00:13 data/journal/data-180
> -rw-r--r-- 1 root root 2097069 2008-05-31 00:14 data/journal/data-181
> {noformat}
> I've also tried taking out the wildcard '>' on a single consumer, and instead
> used separate consumers for each queue, and I get the same result.
> I haven't even gotten to the test yet where the listener is not running. So,
> in this "normal" operation, all messages are consumed. Yet, not all journal
> files get cleaned up. These left-over files don't ever get cleaned up. They
> will eventually start filling the hard drive. I can understand files being
> left behind when there's no consumer, but there is a consumer the whole time.
>
> What I'm basically looking for is a persistence layer for messaging to
> multiple clients, so that consumers can get messages retroactively when they
> start up. I could try to use topics with durable clients, but I thought the
> queues would be easier to setup, as messages in queues are persisted by
> default. However, I don't want the consumer to process "stale" messages,
> which is why I set an expiration time. So, I would think that, with a
> constant rate of messages, the persistent disk store utilization would
> eventually level out as the messages started to expire. I realize that if
> there's no consumer for a queue, expired messages won't get cleaned up (am
> currently trying to figure out a work-around for that - periodically checking
> the queues with a QueueBrowser seems to trigger the removal of expired
> messages). However, even when all consumers are active, the journal keeps
> growing, as it's not always cleaning up it's files!
> I've attached my configuration to this ticket.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.