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}),