Looks good to me.

-Damien


On May 17, 2009, at 2:43 PM, Adam Kocoloski wrote:

Hi devs, Dan Larkin brought up a problem on IRC today. Deleting a DB during compaction orphans a .compact file, and subsequent requests for that DB will try to recover the DB using the .compact.

There's a good reason for the recovery procedure (it prevents data loss if the server crashes during a switch to the new .compact file), but it seems to me that when we delete a database we ought to make sure it's really deleted by explicitly removing the .compact file too. Here's my proposed patch; Paul and figured it made sense to run this by the list before committing. Best,

Adam

diff --git a/src/couchdb/couch_server.erl b/src/couchdb/ couch_server.erl
index c190862..3bf5972 100644
--- a/src/couchdb/couch_server.erl
+++ b/src/couchdb/couch_server.erl
@@ -303,6 +303,11 @@ handle_call({delete, DbName, _Options}, _From, Server) ->
            true = ets:delete(couch_dbs_by_lru, LruTime),
            Server#server{dbs_open=Server#server.dbs_open - 1}
        end,
+
+ %% Delete any leftover .compact file. If we don't do this a subsequent + %% request for this DB will try to open the .compact file and use it.
+        file:delete(FullFilepath ++ ".compact"),
+
        case file:delete(FullFilepath) of
        ok ->
            couch_db_update_notifier:notify({deleted, DbName}),


Reply via email to