You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@couchdb.apache.org by "Adam Kocoloski (JIRA)" <ji...@apache.org> on 2011/01/12 05:57:45 UTC
[jira] Resolved: (COUCHDB-1021) Compacting a database does not
preserve the purge_seq
[ https://issues.apache.org/jira/browse/COUCHDB-1021?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Adam Kocoloski resolved COUCHDB-1021.
-------------------------------------
Resolution: Fixed
Fix Version/s: 1.1
1.0.2
Applied to trunk, 1.1.x and 1.0.x. Extended the purge.js test to confirm that purge_seq is preserved across compactions.
> Compacting a database does not preserve the purge_seq
> -----------------------------------------------------
>
> Key: COUCHDB-1021
> URL: https://issues.apache.org/jira/browse/COUCHDB-1021
> Project: CouchDB
> Issue Type: Bug
> Components: Database Core
> Affects Versions: 1.0.1
> Environment: All platforms
> Reporter: Mike Leddy
> Priority: Minor
> Fix For: 1.0.2, 1.1
>
> Attachments: keep_purge_state_on_compaction.patch
>
>
> On compacting a database the purge_seq becomes zero. As a result subsequently accessing any view will cause the view to be rebuilt from scratch. I resolved the issue for me by patching start_copy_compact, but this only works if you can guarantee there will be no purging done during compaction:
> --- couchdb-1.0.1/src/couchdb/couch_db_updater.erl
> +++ couchdb-1.0.1.new/src/couchdb/couch_db_updater.erl
> @@ -857,7 +857,7 @@
>
> commit_data(NewDb4#db{update_seq=Db#db.update_seq}).
>
> -start_copy_compact(#db{name=Name,filepath=Filepath}=Db) ->
> +start_copy_compact(#db{name=Name,filepath=Filepath,header=#db_header{purge_seq=PurgeSeq}}=Db) ->
> CompactFile = Filepath ++ ".compact",
> ?LOG_DEBUG("Compaction process spawned for db \"~s\"", [Name]),
> case couch_file:open(CompactFile) of
> @@ -869,7 +869,7 @@
> couch_task_status:add_task(<<"Database Compaction">>, Name, <<"Starting">>),
> {ok, Fd} = couch_file:open(CompactFile, [create]),
> Retry = false,
> - ok = couch_file:write_header(Fd, Header=#db_header{})
> + ok = couch_file:write_header(Fd, Header=#db_header{purge_seq=PurgeSeq})
> end,
> NewDb = init_db(Name, CompactFile, Fd, Header),
> unlink(Fd),
> I am sure that there must be a better way of doing this.....
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.