summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/couchdb/couch_db.erl23
-rw-r--r--src/couchdb/couch_db.hrl16
-rw-r--r--src/couchdb/couch_erl_driver.c99
-rw-r--r--src/couchdb/couch_file.erl8
-rw-r--r--src/couchdb/couch_httpd.erl28
-rw-r--r--src/couchdb/couch_log.erl34
-rw-r--r--src/couchdb/couch_query_servers.erl8
-rw-r--r--src/couchdb/couch_rep.erl6
-rw-r--r--src/couchdb/couch_server_sup.erl4
-rw-r--r--src/couchdb/couch_util.erl28
-rw-r--r--src/couchdb/couch_view.erl12
11 files changed, 144 insertions, 122 deletions
diff --git a/src/couchdb/couch_db.erl b/src/couchdb/couch_db.erl
index 60d951c9..289cc4f9 100644
--- a/src/couchdb/couch_db.erl
+++ b/src/couchdb/couch_db.erl
@@ -68,7 +68,7 @@ start_link0(DbName, Filepath, Options) ->
% crashed during the file switch.
case couch_file:open(Filepath ++ ".compact") of
{ok, Fd0} ->
- couch_log:info("Found ~s~s compaction file, using as primary storage.", [Filepath, ".compact"]),
+ ?LOG_INFO("Found ~s~s compaction file, using as primary storage.", [Filepath, ".compact"]),
ok = file:rename(Filepath ++ ".compact", Filepath),
Fd0;
{error, enoent} ->
@@ -85,7 +85,7 @@ start_link0(DbName, Filepath, Options) ->
% We successfully opened the db, delete old storage files if around
case file:delete(Filepath ++ ".old") of
ok ->
- couch_log:info("Deleted old storage file ~s~s", [Filepath, ".old"]);
+ ?LOG_INFO("Deleted old storage file ~s~s", [Filepath, ".old"]);
{error, enoent} ->
ok % normal result
end;
@@ -461,7 +461,7 @@ code_change(_OldVsn, State, _Extra) ->
{ok, State}.
handle_info(Msg, Db) ->
- couch_log:error("Bad message received for db ~s: ~p", [Db#db.name, Msg]),
+ ?LOG_ERROR("Bad message received for db ~s: ~p", [Db#db.name, Msg]),
exit({error, Msg}).
@@ -508,7 +508,7 @@ update_loop(#db{fd=Fd,name=Name,filepath=Filepath, main_pid=MainPid}=Db) ->
compact ->
case Db#db.compactor_pid of
nil ->
- couch_log:info("Starting compaction for db \"~s\"", [Name]),
+ ?LOG_INFO("Starting compaction for db \"~s\"", [Name]),
Pid = spawn_link(couch_db, start_copy_compact_int, [Db, true]),
Db2 = Db#db{compactor_pid=Pid},
ok = gen_server:call(MainPid, {db_updated, Db2}),
@@ -523,7 +523,7 @@ update_loop(#db{fd=Fd,name=Name,filepath=Filepath, main_pid=MainPid}=Db) ->
init_db(Name, CompactFilepath, NewFd, NewHeader),
case Db#db.update_seq == NewSeq of
true ->
- couch_log:debug("CouchDB swapping files ~s and ~s.", [Filepath, CompactFilepath]),
+ ?LOG_DEBUG("CouchDB swapping files ~s and ~s.", [Filepath, CompactFilepath]),
ok = file:rename(Filepath, Filepath ++ ".old"),
ok = file:rename(CompactFilepath, Filepath),
@@ -544,10 +544,10 @@ update_loop(#db{fd=Fd,name=Name,filepath=Filepath, main_pid=MainPid}=Db) ->
end),
ok = gen_server:call(MainPid, {db_updated, NewDb2}),
- couch_log:info("Compaction for db ~p completed.", [Name]),
+ ?LOG_INFO("Compaction for db ~p completed.", [Name]),
update_loop(NewDb2#db{compactor_pid=nil});
false ->
- couch_log:info("Compaction file still behind main file "
+ ?LOG_INFO("Compaction file still behind main file "
"(update seq=~p. compact update seq=~p). Retrying.",
[Db#db.update_seq, NewSeq]),
Pid = spawn_link(couch_db, start_copy_compact_int, [Db, false]),
@@ -555,7 +555,7 @@ update_loop(#db{fd=Fd,name=Name,filepath=Filepath, main_pid=MainPid}=Db) ->
update_loop(Db2)
end;
Else ->
- couch_log:error("Unknown message received in db ~s:~p", [Db#db.name, Else]),
+ ?LOG_ERROR("Unknown message received in db ~s:~p", [Db#db.name, Else]),
exit({error, Else})
end.
@@ -701,7 +701,7 @@ flush_trees(#db{fd=Fd}=Db, [Unflushed | RestUnflushed], AccFlushed) ->
_ ->
% BinFd must not equal our Fd. This can happen when a database
% is being updated during a compaction
- couch_log:debug("File where the attachments are written has changed. Possibly retrying."),
+ ?LOG_DEBUG("File where the attachments are written has changed. Possibly retrying.", []),
throw(retry)
end,
{ok, NewSummaryPointer} = couch_stream:write_term(Db#db.summary_stream, {Doc#doc.body, Bins}),
@@ -876,6 +876,7 @@ commit_data(#db{fd=Fd, header=Header} = Db) ->
if Header == Header2 ->
Db; % unchanged. nothing to do
true ->
+ %ok = couch_file:sync(Fd),
ok = couch_file:write_header(Fd, <<$g, $m, $k, 0>>, Header2),
Db#db{header = Header2}
end.
@@ -941,10 +942,10 @@ copy_compact_docs(Db, NewDb) ->
start_copy_compact_int(#db{name=Name,filepath=Filepath}=Db, CopyLocal) ->
CompactFile = Filepath ++ ".compact",
- couch_log:debug("Compaction process spawned for db \"~s\"", [Name]),
+ ?LOG_DEBUG("Compaction process spawned for db \"~s\"", [Name]),
case couch_file:open(CompactFile) of
{ok, Fd} ->
- couch_log:debug("Found existing compaction file for db \"~s\"", [Name]),
+ ?LOG_DEBUG("Found existing compaction file for db \"~s\"", [Name]),
{ok, Header} = couch_file:read_header(Fd, <<$g, $m, $k, 0>>);
{error, enoent} -> %
{ok, Fd} = couch_file:open(CompactFile, [create]),
diff --git a/src/couchdb/couch_db.hrl b/src/couchdb/couch_db.hrl
index 51ee7af2..e4cf00ea 100644
--- a/src/couchdb/couch_db.hrl
+++ b/src/couchdb/couch_db.hrl
@@ -15,6 +15,21 @@
-define(DESIGN_DOC_PREFIX, "_design/").
-define(DEFAULT_ATTACHMENT_CONTENT_TYPE, "application/octet-stream").
+
+-define(LOG_DEBUG(Format, Args),
+ case couch_log:debug_on() of
+ true -> error_logger:info_report(couch_debug, {Format, Args});
+ false -> ok
+ end).
+
+-define(LOG_INFO(Format, Args),
+ case couch_log:info_on() of
+ true -> error_logger:info_report(couch_info, {Format, Args});
+ false -> ok
+ end).
+
+-define(LOG_ERROR(Format, Args),
+ error_logger:info_report(couch_error, {Format, Args})).
-record(doc_info,
{
@@ -53,4 +68,3 @@
% couch_db:open_doc(Db, Id, Options).
meta = []
}).
-
diff --git a/src/couchdb/couch_erl_driver.c b/src/couchdb/couch_erl_driver.c
index b5703f09..550cff9e 100644
--- a/src/couchdb/couch_erl_driver.c
+++ b/src/couchdb/couch_erl_driver.c
@@ -23,6 +23,7 @@ specific language governing permissions and limitations under the License.
#ifndef WIN32
#include <string.h> // for memcpy
#endif
+#include <uuid/uuid.h>
typedef struct {
ErlDrvPort port;
@@ -92,51 +93,65 @@ static int couch_drv_control(ErlDrvData drv_data, unsigned int command, const ch
{
#define COLLATE 0
#define COLLATE_NO_CASE 1
+ #define UUID 2
couch_drv_data* pData = (couch_drv_data*)drv_data;
-
- UErrorCode status = U_ZERO_ERROR;
- int collResult;
- char response;
- UCharIterator iterA;
- UCharIterator iterB;
- int32_t length;
-
- // 2 strings are in the buffer, consecutively
- // The strings begin first with a 32 bit integer byte length, then the actual
- // string bytes follow.
-
- // first 32bits are the length
- memcpy(&length, pBuf, sizeof(length));
- pBuf += sizeof(length);
-
- // point the iterator at it.
- uiter_setUTF8(&iterA, pBuf, length);
-
- pBuf += length; // now on to string b
-
- // first 32bits are the length
- memcpy(&length, pBuf, sizeof(length));
- pBuf += sizeof(length);
-
- // point the iterator at it.
- uiter_setUTF8(&iterB, pBuf, length);
-
- if (command == COLLATE)
- collResult = ucol_strcollIter(pData->coll, &iterA, &iterB, &status);
- else if (command == COLLATE_NO_CASE)
- collResult = ucol_strcollIter(pData->collNoCase, &iterA, &iterB, &status);
- else
+ switch(command) {
+ case UUID:
+ {
+ uuid_t uuid;
+ uuid_generate(uuid);
+ return return_control_result(&uuid, sizeof(uuid), rbuf, rlen);
+ }
+
+ case COLLATE:
+ case COLLATE_NO_CASE:
+ {
+ UErrorCode status = U_ZERO_ERROR;
+ int collResult;
+ char response;
+ UCharIterator iterA;
+ UCharIterator iterB;
+ int32_t length;
+
+ // 2 strings are in the buffer, consecutively
+ // The strings begin first with a 32 bit integer byte length, then the actual
+ // string bytes follow.
+
+ // first 32bits are the length
+ memcpy(&length, pBuf, sizeof(length));
+ pBuf += sizeof(length);
+
+ // point the iterator at it.
+ uiter_setUTF8(&iterA, pBuf, length);
+
+ pBuf += length; // now on to string b
+
+ // first 32bits are the length
+ memcpy(&length, pBuf, sizeof(length));
+ pBuf += sizeof(length);
+
+ // point the iterator at it.
+ uiter_setUTF8(&iterB, pBuf, length);
+
+ if (command == COLLATE)
+ collResult = ucol_strcollIter(pData->coll, &iterA, &iterB, &status);
+ else if (command == COLLATE_NO_CASE)
+ collResult = ucol_strcollIter(pData->collNoCase, &iterA, &iterB, &status);
+
+ if (collResult < 0)
+ response = 0; //lt
+ else if (collResult > 0)
+ response = 1; //gt
+ else
+ response = 2; //eq
+
+ return return_control_result(&response, sizeof(response), rbuf, rlen);
+ }
+
+ default:
return -1;
-
- if (collResult < 0)
- response = 0; //lt
- else if (collResult > 0)
- response = 1; //gt
- else
- response = 2; //eq
-
- return return_control_result(&response, sizeof(response), rbuf, rlen);
+ }
}
ErlDrvEntry couch_driver_entry = {
diff --git a/src/couchdb/couch_file.erl b/src/couchdb/couch_file.erl
index 3a1a7af1..d42d0eb6 100644
--- a/src/couchdb/couch_file.erl
+++ b/src/couchdb/couch_file.erl
@@ -13,6 +13,8 @@
-module(couch_file).
-behaviour(gen_server).
+-include("couch_db.hrl").
+
-define(HEADER_SIZE, 2048). % size of each segment of the doubly written header
-export([open/1, open/2, close/1, pread/3, pwrite/3, expand/2, bytes/1, sync/1]).
@@ -178,12 +180,12 @@ read_header(Fd, Prefix) ->
false ->
% To get here we must have two different header versions with signatures intact.
% It's weird but possible (a commit failure right at the 2k boundary). Log it and take the first.
- couch_log:info("Header version differences.~nPrimary Header: ~p~nSecondary Header: ~p", [Header1, Header2]),
+ ?LOG_INFO("Header version differences.~nPrimary Header: ~p~nSecondary Header: ~p", [Header1, Header2]),
{ok, Header1}
end;
{error, Error} ->
% error reading second header. It's ok, but log it.
- couch_log:info("Secondary header corruption (error: ~p). Using primary header.", [Error]),
+ ?LOG_INFO("Secondary header corruption (error: ~p). Using primary header.", [Error]),
{ok, Header1}
end;
{error, Error} ->
@@ -191,7 +193,7 @@ read_header(Fd, Prefix) ->
case extract_header(Prefix, Bin2) of
{ok, Header2} ->
% log corrupt primary header. It's ok since the secondary is still good.
- couch_log:info("Primary header corruption (error: ~p). Using secondary header.", [Error]),
+ ?LOG_INFO("Primary header corruption (error: ~p). Using secondary header.", [Error]),
{ok, Header2};
_ ->
% error reading secondary header too
diff --git a/src/couchdb/couch_httpd.erl b/src/couchdb/couch_httpd.erl
index ad60d7ca..31bdd143 100644
--- a/src/couchdb/couch_httpd.erl
+++ b/src/couchdb/couch_httpd.erl
@@ -57,11 +57,11 @@ handle_request(Req, DocumentRoot) ->
% removed, but URL quoting left intact
{Path, _, _} = mochiweb_util:urlsplit_path(Req:get(raw_path)),
- couch_log:debug("Version: ~p", [Req:get(version)]),
- couch_log:debug("Method: ~p", [Method]),
- couch_log:debug("Request URI: ~p", [Path]),
- couch_log:debug("Headers: ~p", [mochiweb_headers:to_list(Req:get(headers))]),
-
+ ?LOG_DEBUG("Version: ~p", [Req:get(version)]),
+ ?LOG_DEBUG("Method: ~p", [Method]),
+ ?LOG_DEBUG("Request URI: ~p", [Path]),
+ ?LOG_DEBUG("Headers: ~p", [mochiweb_headers:to_list(Req:get(headers))]),
+
{ok, Resp} = case catch(handle_request(Req, DocumentRoot, Method, Path)) of
{ok, Resp0} ->
{ok, Resp0};
@@ -69,13 +69,19 @@ handle_request(Req, DocumentRoot) ->
send_error(Req, Error)
end,
- couch_log:info("~s - - ~p ~B", [
+ ?LOG_INFO("~s - - ~p ~B", [
Req:get(peer),
atom_to_list(Req:get(method)) ++ " " ++ Path,
Resp:get(code)
]).
handle_request(Req, DocumentRoot, Method, Path) ->
+ Start = erlang:now(),
+ X = handle_request0(Req, DocumentRoot, Method, Path),
+ io:format("now_diff:~p~n", [timer:now_diff(erlang:now(), Start)]),
+ X.
+
+handle_request0(Req, DocumentRoot, Method, Path) ->
case Path of
"/" ->
handle_welcome_request(Req, Method);
@@ -431,7 +437,7 @@ handle_doc_request(Req, 'GET', _DbName, Db, DocId) ->
JsonDoc = couch_doc:to_json_obj(Doc, Options),
AdditionalHeaders =
case Doc#doc.meta of
- [] -> [{"Etag", Etag}]; % output etag when we have no meta
+ [] -> [{"XEtag", Etag}]; % output etag when we have no meta
_ -> []
end,
send_json(Req, 200, AdditionalHeaders, JsonDoc);
@@ -498,7 +504,7 @@ handle_doc_request(Req, 'PUT', _DbName, Db, DocId) ->
Doc = couch_doc:from_json_obj(Json),
{ok, NewRev} = couch_db:update_doc(Db, Doc#doc{id=DocId, revs=Revs}, []),
- send_json(Req, 201, [{"Etag", "\"" ++ NewRev ++ "\""}], {obj, [
+ send_json(Req, 201, [{"XEtag", "\"" ++ NewRev ++ "\""}], {obj, [
{ok, true},
{id, DocId},
{rev, NewRev}
@@ -791,12 +797,12 @@ error_to_json0(Error) ->
send_error(Req, {method_not_allowed, Methods}) ->
{ok, Req:respond({405, [{"Allow", Methods}], <<>>})};
send_error(Req, {modified, Etag}) ->
- {ok, Req:respond({412, [{"Etag", Etag}], <<>>})};
+ {ok, Req:respond({412, [{"XEtag", Etag}], <<>>})};
send_error(Req, {not_modified, Etag}) ->
- {ok, Req:respond({304, [{"Etag", Etag}], <<>>})};
+ {ok, Req:respond({304, [{"XEtag", Etag}], <<>>})};
send_error(Req, Error) ->
{Code, Json} = error_to_json(Error),
- couch_log:info("HTTP Error (code ~w): ~p", [Code, Error]),
+ ?LOG_INFO("HTTP Error (code ~w): ~p", [Code, Error]),
send_error(Req, Code, Json).
send_error(Req, Code, Json) ->
diff --git a/src/couchdb/couch_log.erl b/src/couchdb/couch_log.erl
index 47e0114d..95ddc47f 100644
--- a/src/couchdb/couch_log.erl
+++ b/src/couchdb/couch_log.erl
@@ -14,7 +14,7 @@
-behaviour(gen_event).
-export([start_link/2,stop/0]).
--export([error/1,error/2,info/1,info/2,debug/1,debug/2,get_level/0,get_level_integer/0, set_level/1]).
+-export([debug_on/0,info_on/0,get_level/0,get_level_integer/0, set_level/1]).
-export([init/1, handle_event/2, terminate/2, code_change/3, handle_info/2, handle_call/2]).
-define(LEVEL_ERROR, 3).
@@ -44,33 +44,11 @@ init({Filename, Level}) ->
{ok, Fd} = file:open(Filename, [append]),
{ok, {Fd, level_integer(Level)}}.
-error(Msg) ->
- error("~s", [Msg]).
-
-error(Format, Args) ->
- error_logger:error_report(couch_error, {Format, Args}).
-
-info(Msg) ->
- info("~s", [Msg]).
-
-info(Format, Args) ->
- case get_level_integer() =< ?LEVEL_INFO of
- true ->
- error_logger:info_report(couch_info, {Format, Args});
- false ->
- ok
- end.
-
-debug(Msg) ->
- debug("~s", [Msg]).
-
-debug(Format, Args) ->
- case get_level_integer() =< ?LEVEL_DEBUG of
- true ->
- error_logger:info_report(couch_debug, {Format, Args});
- false ->
- ok
- end.
+debug_on() ->
+ get_level_integer() =< ?LEVEL_DEBUG.
+
+info_on() ->
+ get_level_integer() =< ?LEVEL_INFO.
set_level(LevelAtom) ->
set_level_integer(level_integer(LevelAtom)).
diff --git a/src/couchdb/couch_query_servers.erl b/src/couchdb/couch_query_servers.erl
index 33962705..a6e1750a 100644
--- a/src/couchdb/couch_query_servers.erl
+++ b/src/couchdb/couch_query_servers.erl
@@ -53,7 +53,7 @@ read_json(Port) ->
case cjson:decode(readline(Port)) of
{obj, [{"log", Msg}]} when is_list(Msg) ->
% we got a message to log. Log it and continue
- couch_log:info("Query Server Log Message: ~s", [Msg]),
+ ?LOG_INFO("Query Server Log Message: ~s", [Msg]),
read_json(Port);
Else ->
Else
@@ -75,7 +75,7 @@ start_doc_map(Lang, Functions) ->
link(Port0),
Port0;
{empty, Cmd} ->
- couch_log:info("Spawning new ~s instance.", [Lang]),
+ ?LOG_INFO("Spawning new ~s instance.", [Lang]),
open_port({spawn, Cmd}, [stream,
{line, 1000},
exit_status,
@@ -170,11 +170,11 @@ handle_info({Port, {exit_status, Status}}, {QueryServerList, LangPorts}) ->
{value, {Lang, _}} ->
case Status of
0 -> ok;
- _ -> couch_log:error("Abnormal shutdown of ~s query server process (exit_status: ~w).", [Lang, Status])
+ _ -> ?LOG_ERROR("Abnormal shutdown of ~s query server process (exit_status: ~w).", [Lang, Status])
end,
{noreply, {QueryServerList, lists:keydelete(Port, 2, LangPorts)}};
_ ->
- couch_log:error("Unknown linked port/process crash: ~p", [Port])
+ ?LOG_ERROR("Unknown linked port/process crash: ~p", [Port])
end;
handle_info(_Whatever, {Cmd, Ports}) ->
{noreply, {Cmd, Ports}}.
diff --git a/src/couchdb/couch_rep.erl b/src/couchdb/couch_rep.erl
index 3b338e6e..df0a4da1 100644
--- a/src/couchdb/couch_rep.erl
+++ b/src/couchdb/couch_rep.erl
@@ -151,9 +151,9 @@ do_http_request(Url, Action) ->
do_http_request(Url, Action, []).
do_http_request(Url, Action, JsonBody) ->
- couch_log:debug("couch_rep HTTP client request:"),
- couch_log:debug("\tAction: ~p", [Action]),
- couch_log:debug("\tUrl: ~p", [Url]),
+ ?LOG_DEBUG("couch_rep HTTP client request:", []),
+ ?LOG_DEBUG("\tAction: ~p", [Action]),
+ ?LOG_DEBUG("\tUrl: ~p", [Url]),
% ensure that the inets application is running
case application:start(inets) of
diff --git a/src/couchdb/couch_server_sup.erl b/src/couchdb/couch_server_sup.erl
index 9c751f9c..9117f5f8 100644
--- a/src/couchdb/couch_server_sup.erl
+++ b/src/couchdb/couch_server_sup.erl
@@ -17,6 +17,8 @@
-export([start_link/1,stop/0]).
+-include("couch_db.hrl").
+
%% supervisor callbacks
-export([init/1]).
@@ -169,7 +171,7 @@ start_server(InputIniFilename) ->
UpdateNotifierExes,
FtSearchQueryServer,
[lists:flatten(io_lib:format("\t~s=~s~n", [Lang, QueryExe])) || {Lang, QueryExe} <- QueryServers]]),
- couch_log:debug("~s", [ConfigInfo]),
+ ?LOG_DEBUG("~s", [ConfigInfo]),
case StartResult of
{ok,_} ->
diff --git a/src/couchdb/couch_util.erl b/src/couchdb/couch_util.erl
index f85cc834..504a675a 100644
--- a/src/couchdb/couch_util.erl
+++ b/src/couchdb/couch_util.erl
@@ -40,11 +40,25 @@ start_link(LibDir) ->
new_uuid() ->
- gen_server:call(couch_util, new_uuid).
+ to_hex(erlang:port_control(drv_port(), 2, <<>>)).
+
+to_hex([]) ->
+ [];
+to_hex([H|T]) ->
+ Digit1 = H div 16,
+ Digit2 = H rem 16,
+ [to_digit(Digit1), to_digit(Digit2) | to_hex(T)].
+
+to_digit(N) when N < 10 ->
+ $0 + N;
+to_digit(N) ->
+ $a + N-10.
+
% returns a random integer
rand32() ->
- gen_server:call(couch_util, rand32).
+ [A,B,C,D|_] = erlang:port_control(drv_port(), 2, <<>>),
+ (A bsl 24) + (B bsl 16) + (C bsl 8) + D.
% given a pathname "../foo/bar/" it gives back the fully qualified
% absolute pathname.
@@ -190,8 +204,6 @@ init([]) ->
terminate(_Reason, _Server) ->
ok.
-handle_call(new_uuid, _From, Server) ->
- {reply, new_uuid_int(), Server};
handle_call(rand32, _From, Server) ->
{reply, rand32_int(), Server}.
@@ -205,14 +217,6 @@ handle_info(_Info, State) ->
{noreply, State}.
-new_uuid_int() ->
- % eventually make this a C callout for a real guid (collisions are far less likely
- % when using a proper generation function). For now we just fake it.
- Num1 = random:uniform(16#FFFFFFFF + 1) - 1,
- Num2 = random:uniform(16#FFFFFFFF + 1) - 1,
- Num3 = random:uniform(16#FFFFFFFF + 1) - 1,
- Num4 = random:uniform(16#FFFFFFFF + 1) - 1,
- lists:flatten(io_lib:format("~8.16.0B~8.16.0B~8.16.0B~8.16.0B", [Num1, Num2, Num3, Num4])).
diff --git a/src/couchdb/couch_view.erl b/src/couchdb/couch_view.erl
index b9f6507f..d8006eba 100644
--- a/src/couchdb/couch_view.erl
+++ b/src/couchdb/couch_view.erl
@@ -141,7 +141,7 @@ handle_call({start_temp_updater, DbName, Lang, Query}, _From, #server{root_dir=R
[{_, Fd, Count}] ->
ok
end,
- couch_log:debug("Spawning new temp update process for db ~s.", [DbName]),
+ ?LOG_DEBUG("Spawning new temp update process for db ~s.", [DbName]),
NewPid = spawn_link(couch_view, start_temp_update_loop, [DbName, Fd, Lang, Query]),
true = ets:insert(couch_views_temp_fd_by_db, {DbName, Fd, Count + 1}),
add_to_ets(NewPid, DbName, Name),
@@ -154,7 +154,7 @@ handle_call({start_updater, DbName, GroupId}, _From, #server{root_dir=Root}=Serv
Pid =
case ets:lookup(couch_views_by_name, {DbName, GroupId}) of
[] ->
- couch_log:debug("Spawning new update process for view group ~s in database ~s.", [GroupId, DbName]),
+ ?LOG_DEBUG("Spawning new update process for view group ~s in database ~s.", [GroupId, DbName]),
NewPid = spawn_link(couch_view, start_update_loop, [Root, DbName, GroupId]),
add_to_ets(NewPid, DbName, GroupId),
NewPid;
@@ -168,7 +168,7 @@ handle_cast({reset_indexes, DbName}, #server{root_dir=Root}=Server) ->
Names = ets:lookup(couch_views_by_db, DbName),
lists:foreach(
fun({_DbName, GroupId}) ->
- couch_log:debug("Killing update process for view group ~s. in database ~s.", [GroupId, DbName]),
+ ?LOG_DEBUG("Killing update process for view group ~s. in database ~s.", [GroupId, DbName]),
[{_, Pid}] = ets:lookup(couch_views_by_name, {DbName, GroupId}),
exit(Pid, kill),
receive {'EXIT', Pid, _} ->
@@ -184,7 +184,7 @@ handle_info({'EXIT', _FromPid, normal}, Server) ->
handle_info({'EXIT', FromPid, Reason}, #server{root_dir=RootDir}=Server) ->
case ets:lookup(couch_views_by_updater, FromPid) of
[] -> % non-updater linked process must have died, we propagate the error
- couch_log:error("Exit on non-updater process: ~p", [Reason]),
+ ?LOG_ERROR("Exit on non-updater process: ~p", [Reason]),
exit(Reason);
[{_, {DbName, "_temp_" ++ _ = GroupId}}] ->
delete_from_ets(FromPid, DbName, GroupId),
@@ -202,7 +202,7 @@ handle_info({'EXIT', FromPid, Reason}, #server{root_dir=RootDir}=Server) ->
end,
{noreply, Server};
handle_info(Msg, _Server) ->
- couch_log:error("Bad message received for view module: ~p", [Msg]),
+ ?LOG_ERROR("Bad message received for view module: ~p", [Msg]),
exit({error, Msg}).
add_to_ets(Pid, DbName, GroupId) ->
@@ -294,7 +294,7 @@ get_notify_pids(Wait) ->
{Pid, get_updated} ->
[Pid | get_notify_pids()];
Else ->
- couch_log:error("Unexpected message in view updater: ~p", [Else]),
+ ?LOG_ERROR("Unexpected message in view updater: ~p", [Else]),
exit({error, Else})
after Wait ->
exit(wait_timeout)