diff options
author | Robert Newson <rnewson@apache.org> | 2018-07-13 20:41:15 +0100 |
---|---|---|
committer | Robert Newson <rnewson@apache.org> | 2018-07-13 20:41:15 +0100 |
commit | a66493de89e04cfe73e03330327486ccca89d175 (patch) | |
tree | 5e32f8bf3470f146b72c35fdbe355c92c292a6ee | |
parent | 70b7c9bd675564d7c10f0b380f0ebdd6ebe36227 (diff) | |
download | couchdb-a66493de89e04cfe73e03330327486ccca89d175.tar.gz |
add persistent 'partitioned' flag
-rw-r--r-- | src/couch/src/couch_bt_engine.erl | 14 | ||||
-rw-r--r-- | src/couch/src/couch_bt_engine_header.erl | 24 | ||||
-rw-r--r-- | src/couch/src/couch_db.erl | 11 | ||||
-rw-r--r-- | src/couch/src/couch_db_engine.erl | 11 |
4 files changed, 55 insertions, 5 deletions
diff --git a/src/couch/src/couch_bt_engine.erl b/src/couch/src/couch_bt_engine.erl index a42d116f8..9b68735ed 100644 --- a/src/couch/src/couch_bt_engine.erl +++ b/src/couch/src/couch_bt_engine.erl @@ -31,6 +31,7 @@ last_activity/1, get_compacted_seq/1, + get_partitioned/1, get_del_doc_count/1, get_disk_version/1, get_doc_count/1, @@ -199,6 +200,10 @@ get_compacted_seq(#st{header = Header}) -> couch_bt_engine_header:get(Header, compacted_seq). +get_partitioned(#st{header = Header}) -> + couch_bt_engine_header:get(Header, partitioned). + + get_del_doc_count(#st{} = St) -> {ok, Reds} = couch_btree:full_reduce(St#st.id_tree), element(2, Reds). @@ -682,7 +687,8 @@ init_state(FilePath, Fd, Header0, Options) -> Compression = couch_compress:get_compression_method(), Header1 = couch_bt_engine_header:upgrade(Header0), - Header = set_default_security_object(Fd, Header1, Compression, Options), + Header2 = set_default_security_object(Fd, Header1, Compression, Options), + Header = set_partitioned(Header2, Options), IdTreeState = couch_bt_engine_header:id_tree_state(Header), {ok, IdTree} = couch_btree:open(IdTreeState, Fd, [ @@ -763,6 +769,11 @@ set_default_security_object(Fd, Header, Compression, Options) -> end. +set_partitioned(Header, Options) -> + Partitioned = lists:member(partitioned, Options), + couch_bt_engine_header:set(Header, partitioned, true). + + delete_compaction_files(FilePath) -> RootDir = config:get("couchdb", "database_dir", "."), DelOpts = [{context, compaction}], @@ -933,6 +944,7 @@ finish_compaction_int(#st{} = OldSt, #st{} = NewSt1) -> {ok, NewSt2} = commit_data(NewSt1#st{ header = couch_bt_engine_header:set(Header, [ {compacted_seq, get_update_seq(OldSt)}, + {partitioned, get_partitioned(OldSt)}, {revs_limit, get_revs_limit(OldSt)} ]), local_tree = NewLocal2 diff --git a/src/couch/src/couch_bt_engine_header.erl b/src/couch/src/couch_bt_engine_header.erl index 3d24f3189..07dce509e 100644 --- a/src/couch/src/couch_bt_engine_header.erl +++ b/src/couch/src/couch_bt_engine_header.erl @@ -37,7 +37,8 @@ revs_limit/1, uuid/1, epochs/1, - compacted_seq/1 + compacted_seq/1, + partitioned/1 ]). @@ -66,7 +67,8 @@ revs_limit = 1000, uuid, epochs, - compacted_seq + compacted_seq, + partitioned }). @@ -82,7 +84,8 @@ from(Header0) -> #db_header{ uuid = Header#db_header.uuid, epochs = Header#db_header.epochs, - compacted_seq = Header#db_header.compacted_seq + compacted_seq = Header#db_header.compacted_seq, + partitioned = Header#db_header.partitioned }. @@ -101,7 +104,8 @@ upgrade(Header) -> fun upgrade_disk_version/1, fun upgrade_uuid/1, fun upgrade_epochs/1, - fun upgrade_compacted_seq/1 + fun upgrade_compacted_seq/1, + fun upgrade_partitioned/1 ], lists:foldl(fun(F, HdrAcc) -> F(HdrAcc) @@ -178,6 +182,10 @@ compacted_seq(Header) -> get_field(Header, compacted_seq). +partitioned(Header) -> + get_field(Header, partitioned). + + get_field(Header, Field) -> get_field(Header, Field, undefined). @@ -303,6 +311,14 @@ upgrade_compacted_seq(#db_header{}=Header) -> Header end. +upgrade_partitioned(#db_header{}=Header) -> + case Header#db_header.partitioned of + undefined -> + Header#db_header{partitioned=false}; + Partitioned when is_boolean(Partitioned) -> + Header + end. + latest(?LATEST_DISK_VERSION) -> true; latest(N) when is_integer(N), N < ?LATEST_DISK_VERSION -> diff --git a/src/couch/src/couch_db.erl b/src/couch/src/couch_db.erl index b47cc7ece..2b735fd4c 100644 --- a/src/couch/src/couch_db.erl +++ b/src/couch/src/couch_db.erl @@ -36,6 +36,7 @@ get_before_doc_update_fun/1, get_committed_update_seq/1, get_compacted_seq/1, + get_partitioned/1, get_compactor_pid/1, get_db_info/1, get_del_doc_count/1, @@ -418,6 +419,11 @@ get_instance_start_time(#db{instance_start_time = IST}) -> get_compacted_seq(#db{}=Db) -> couch_db_engine:get_compacted_seq(Db). + +get_partitioned(#db{}=Db) -> + couch_db_engine:get_partitioned(Db). + + get_compactor_pid(#db{compactor_pid = Pid}) -> Pid. @@ -443,6 +449,10 @@ get_db_info(Db) -> undefined -> null; Else1 -> Else1 end, + Partitioned = case get_partitioned(Db) of + undefined -> null; + Else2 -> Else2 + end, InfoList = [ {db_name, Name}, {engine, couch_db_engine:get_engine(Db)}, @@ -464,6 +474,7 @@ get_db_info(Db) -> {disk_format_version, DiskVersion}, {committed_update_seq, CommittedUpdateSeq}, {compacted_seq, CompactedSeq}, + {partitioned, Partitioned}, {uuid, Uuid} ], {ok, InfoList}. diff --git a/src/couch/src/couch_db_engine.erl b/src/couch/src/couch_db_engine.erl index 502faa7ee..efd221f0d 100644 --- a/src/couch/src/couch_db_engine.erl +++ b/src/couch/src/couch_db_engine.erl @@ -180,6 +180,11 @@ -callback get_compacted_seq(DbHandle::db_handle()) -> CompactedSeq::non_neg_integer(). +% Whether the database is partitioned by the user's choice of +% document id +-callback get_partitioned(DbHAndle::db_handle()) -> + Partitioned::boolean(). + % The number of documents in the database which have all leaf % revisions marked as deleted. @@ -593,6 +598,7 @@ get_engine/1, get_compacted_seq/1, + get_partitioned/1, get_del_doc_count/1, get_disk_version/1, get_doc_count/1, @@ -717,6 +723,11 @@ get_compacted_seq(#db{} = Db) -> Engine:get_compacted_seq(EngineState). +get_partitioned(#db{} = Db) -> + #db{engine = {Engine, EngineState}} = Db, + Engine:get_partitioned(EngineState). + + get_del_doc_count(#db{} = Db) -> #db{engine = {Engine, EngineState}} = Db, Engine:get_del_doc_count(EngineState). |