[
https://issues.apache.org/jira/browse/COUCHDB-487?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12748362#action_12748362
]
Adam Kocoloski commented on COUCHDB-487:
----------------------------------------
I don't think we want to be that aggressive about blocking incoming writes.
This algorithm would cause a large DB to be unavailable for writes for several
minutes, even if the write load is not so large as to prevent compaction from
finishing without blocking. The reason is that each compaction iteration works
with a single MVCC snapshot; any updates to the DB that occur during that
iteration are compacted in the next pass.
I've seen several cases where compaction finishes in 3-4 passes, with the first
one taking several hours, the next one several minutes, the next one several
seconds, and then it's done.
I think if we're going to block writes we should only do it when we have some
expectation that the non-blocking approach isn't working; e.g. we could track
(update_seq - compact_update_seq) and if that difference grows between
iterations, block until compaction is finished.
Thanks for kicking off this ticket with some code, though!
> Pause write requests to allow compaction to complete
> ----------------------------------------------------
>
> Key: COUCHDB-487
> URL: https://issues.apache.org/jira/browse/COUCHDB-487
> Project: CouchDB
> Issue Type: Improvement
> Components: Database Core
> Reporter: Robert Newson
> Attachments: block_writes_after_end_of_compaction.patch
>
>
> Continuous writes will currently indefinitely prevent the compaction process
> from flipping over to the .compact file.
> Here's a small patch that adds a new db flag called 'write_available' which
> becomes false the first time compaction completes but fails to flip over
> because of concurrent writes. Subsequent calls to update_docs then sleep for
> 1/2 a second and throw retry.
> I ran 'ab -p json -n 1000000 http://localhost:5984/db1' in one window.
> Without this patch, I get a long sequence of;
> [info] [<0.64.0>] Compaction file still behind main file (update seq=1848.
> compact update seq=1845). Retrying.
> and compaction never completes.
> With the patch, I get this;
> [info] [<0.369.0>] 127.0.0.1 - - 'POST' /db1 201
> [info] [<0.65.0>] Compaction file still behind main file (update seq=2140.
> compact update seq=2092). Retrying.
> [info] [<0.65.0>] Blocking writes to complete compaction.
> [info] [<0.65.0>] Compaction for db "db1" completed.
> [info] [<0.370.0>] 127.0.0.1 - - 'POST' /db1 201
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.