You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by rn...@apache.org on 2014/08/07 17:37:53 UTC

[31/50] couch commit: updated refs/heads/windsor-merge to 6e60cbe

Remember compacted_seq

BugzID: 22917


Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch/commit/5be71f77
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch/tree/5be71f77
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch/diff/5be71f77

Branch: refs/heads/windsor-merge
Commit: 5be71f77a9c58f195a16b2319de94ad64edb53a5
Parents: 1313221
Author: Robert Newson <ro...@cloudant.com>
Authored: Mon Sep 9 21:40:33 2013 +0100
Committer: Robert Newson <rn...@apache.org>
Committed: Wed Aug 6 11:57:41 2014 +0100

----------------------------------------------------------------------
 src/couch_db.erl         | 10 +++++++++-
 src/couch_db_header.erl  | 25 +++++++++++++++++++++----
 src/couch_db_updater.erl |  5 ++++-
 3 files changed, 34 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-couch/blob/5be71f77/src/couch_db.erl
----------------------------------------------------------------------
diff --git a/src/couch_db.erl b/src/couch_db.erl
index 4adb128..836b468 100644
--- a/src/couch_db.erl
+++ b/src/couch_db.erl
@@ -21,7 +21,7 @@
 -export([open_doc/2,open_doc/3,open_doc_revs/4]).
 -export([set_revs_limit/2,get_revs_limit/1]).
 -export([get_missing_revs/2,name/1,get_update_seq/1,get_committed_update_seq/1]).
--export([get_uuid/1, get_epochs/1]).
+-export([get_uuid/1, get_epochs/1, get_compacted_seq/1]).
 -export([enum_docs/4,enum_docs_since/5]).
 -export([enum_docs_since_reduce_to_count/1,enum_docs_reduce_to_count/1]).
 -export([increment_update_seq/1,get_purge_seq/1,purge_docs/2,get_last_purged/1]).
@@ -304,6 +304,9 @@ get_uuid(#db{}=Db) ->
 get_epochs(#db{}=Db) ->
     couch_db_header:epochs(Db#db.header).
 
+get_compacted_seq(#db{}=Db) ->
+    couch_db_header:compacted_seq(Db#db.header).
+
 get_db_info(Db) ->
     #db{fd=Fd,
         header=Header,
@@ -323,6 +326,10 @@ get_db_info(Db) ->
         undefined -> null;
         Uuid0 -> Uuid0
     end,
+    CompactedSeq = case get_compacted_seq(Db) of
+        undefined -> null;
+        Else1 -> Else1
+    end,
     InfoList = [
         {db_name, Name},
         {doc_count, element(1, DbReduction)},
@@ -335,6 +342,7 @@ get_db_info(Db) ->
         {instance_start_time, StartTime},
         {disk_format_version, DiskVersion},
         {committed_update_seq, CommittedUpdateSeq},
+        {compacted_seq, CompactedSeq},
         {uuid, Uuid}
         ],
     {ok, InfoList}.

http://git-wip-us.apache.org/repos/asf/couchdb-couch/blob/5be71f77/src/couch_db_header.erl
----------------------------------------------------------------------
diff --git a/src/couch_db_header.erl b/src/couch_db_header.erl
index c23cf38..b7c93d9 100644
--- a/src/couch_db_header.erl
+++ b/src/couch_db_header.erl
@@ -32,7 +32,8 @@
     security_ptr/1,
     revs_limit/1,
     uuid/1,
-    epochs/1
+    epochs/1,
+    compacted_seq/1
 ]).
 
 
@@ -60,7 +61,8 @@
     security_ptr = nil,
     revs_limit = 1000,
     uuid,
-    epochs
+    epochs,
+    compacted_seq
 }).
 
 
@@ -75,7 +77,8 @@ from(Header0) ->
     Header = upgrade(Header0),
     #db_header{
         uuid = Header#db_header.uuid,
-        epochs = Header#db_header.epochs
+        epochs = Header#db_header.epochs,
+        compacted_seq = Header#db_header.compacted_seq
     }.
 
 
@@ -93,7 +96,8 @@ upgrade(Header) ->
         fun upgrade_tuple/1,
         fun upgrade_disk_version/1,
         fun upgrade_uuid/1,
-        fun upgrade_epochs/1
+        fun upgrade_epochs/1,
+        fun upgrade_compacted_seq/1
     ],
     lists:foldl(fun(F, HdrAcc) ->
         F(HdrAcc)
@@ -154,6 +158,10 @@ epochs(Header) ->
     get_field(Header, epochs).
 
 
+compacted_seq(Header) ->
+    get_field(Header, compacted_seq).
+
+
 get_field(Header, Field) ->
     Idx = index(Field),
     case Idx > tuple_size(Header) of
@@ -267,6 +275,15 @@ remove_dup_epochs([{N1, S1}, {N2, S2} | Rest]) ->
     remove_dup_epochs([{N1, S1} | remove_dup_epochs([{N2, S2} | Rest])]).
 
 
+upgrade_compacted_seq(#db_header{}=Header) ->
+    case Header#db_header.compacted_seq of
+        undefined ->
+            Header#db_header{compacted_seq=0};
+        _ ->
+            Header
+    end.
+
+
 -ifdef(TEST).
 -include_lib("eunit/include/eunit.hrl").
 

http://git-wip-us.apache.org/repos/asf/couchdb-couch/blob/5be71f77/src/couch_db_updater.erl
----------------------------------------------------------------------
diff --git a/src/couch_db_updater.erl b/src/couch_db_updater.erl
index e01df83..6979256 100644
--- a/src/couch_db_updater.erl
+++ b/src/couch_db_updater.erl
@@ -212,7 +212,10 @@ handle_cast(start_compact, Db) ->
     end;
 handle_cast({compact_done, CompactFilepath}, #db{filepath=Filepath}=Db) ->
     {ok, NewFd} = couch_file:open(CompactFilepath),
-    {ok, NewHeader} = couch_file:read_header(NewFd),
+    {ok, NewHeader0} = couch_file:read_header(NewFd),
+    NewHeader = couch_db_header:set(NewHeader0, [
+        {compacted_seq, Db#db.update_seq}
+    ]),
     #db{update_seq=NewSeq} = NewDb =
         init_db(Db#db.name, Filepath, NewFd, NewHeader, Db#db.options),
     unlink(NewFd),