From 7aff9fca70b13fdc6b97500d6a36ab7325e42ad1 Mon Sep 17 00:00:00 2001 From: Scott Lystig Fritchie Date: Mon, 29 Jun 2015 16:42:05 +0900 Subject: [PATCH] WIP: giant hairball 12 --- src/machi.proto | 5 +++-- src/machi_flu1.erl | 11 ++++++++++- src/machi_flu1_client.erl | 7 ++++++- src/machi_pb_translate.erl | 20 ++++++++++++++------ 4 files changed, 33 insertions(+), 10 deletions(-) diff --git a/src/machi.proto b/src/machi.proto index fba64c4..8358a83 100644 --- a/src/machi.proto +++ b/src/machi.proto @@ -424,8 +424,9 @@ message Mpb_LL_WedgeStatusReq { } message Mpb_LL_WedgeStatusResp { - required Mpb_EpochID epoch_id = 1; - required uint32 wedged_flag = 2; + required Mpb_GeneralStatusCode status = 1; + optional Mpb_EpochID epoch_id = 2; + optional uint32 wedged_flag = 3; } // Low level API: delete_migration() diff --git a/src/machi_flu1.erl b/src/machi_flu1.erl index 3164e84..8bb22f7 100644 --- a/src/machi_flu1.erl +++ b/src/machi_flu1.erl @@ -327,6 +327,10 @@ do_pb_ll_request(PB_request, S) -> %% Skip wedge check for projection commands! {Rs, NewS} = do_pb_ll_request3(CMD, S), {RqID, CMD, Rs, NewS}; + {RqID, {low_wedge_status, _}=CMD} -> + %% Skip wedge check for low_wedge_status! + {Rs, NewS} = do_pb_ll_request3(CMD, S), + {RqID, CMD, Rs, NewS}; {RqID, CMD} -> EpochID = element(2, CMD), % by common convention {Rs, NewS} = do_pb_ll_request2(EpochID, CMD, S), @@ -642,7 +646,12 @@ do_pb_server_list_files(#state{data_dir=DataDir}=_S) -> end || File <- Files]}. do_pb_server_wedge_status(S) -> - {Wedged_p, CurrentEpochID} = ets:lookup_element(S#state.etstab, epoch, 2), + {Wedged_p, CurrentEpochID0} = ets:lookup_element(S#state.etstab, epoch, 2), + CurrentEpochID = if CurrentEpochID0 == undefined -> + ?DUMMY_PV1_EPOCH; + true -> + CurrentEpochID0 + end, {Wedged_p, CurrentEpochID}. do_pb_server_delete_migration(File, #state{data_dir=DataDir}=_S) -> diff --git a/src/machi_flu1_client.erl b/src/machi_flu1_client.erl index 6e18062..4e0cfa3 100644 --- a/src/machi_flu1_client.erl +++ b/src/machi_flu1_client.erl @@ -638,7 +638,7 @@ io:format(user, "\nCCC Req ~p\n", [Req]), catch throw:Error -> put(bad_sock, Sock), - Error; + filter_sock_error_result(Error); error:{case_clause,_}=Noo -> put(bad_sock, Sock), {error, {badmatch, Noo, erlang:get_stacktrace()}}; @@ -647,6 +647,11 @@ io:format(user, "\nCCC Req ~p\n", [Req]), {error, {badmatch, BadMatch, erlang:get_stacktrace()}} end. +filter_sock_error_result({error, closed}) -> + {error, partition}; +filter_sock_error_result(Error) -> + Error. + %%%%%%%%%%%%%%%%%%%%%%%%%%% w_connect(#p_srvr{proto_mod=?MODULE, address=Host, port=Port, props=Props})-> diff --git a/src/machi_pb_translate.erl b/src/machi_pb_translate.erl index 4e890fa..92a807e 100644 --- a/src/machi_pb_translate.erl +++ b/src/machi_pb_translate.erl @@ -480,12 +480,20 @@ to_pb_response(ReqID, {low_list_files, _EpochID}, Resp) -> make_ll_error_resp(ReqID, 66, io_lib:format("err ~p", [_Else])) end; to_pb_response(ReqID, {low_wedge_status, _BogusEpochID}, Resp) -> - {Wedged_p, EpochID} = Resp, - PB_Wedged = conv_from_boolean(Wedged_p), - PB_EpochID = conv_from_epoch_id(EpochID), - #mpb_ll_response{req_id=ReqID, - wedge_status=#mpb_ll_wedgestatusresp{epoch_id=PB_EpochID, - wedged_flag=PB_Wedged}}; + case Resp of + {error, _}=Error -> + Status = conv_from_status(Error), + #mpb_ll_response{req_id=ReqID, + wedge_status=#mpb_ll_wedgestatusresp{status=Error}}; + {Wedged_p, EpochID} -> + PB_Wedged = conv_from_boolean(Wedged_p), + PB_EpochID = conv_from_epoch_id(EpochID), + #mpb_ll_response{req_id=ReqID, + wedge_status=#mpb_ll_wedgestatusresp{ + status='OK', + epoch_id=PB_EpochID, + wedged_flag=PB_Wedged}} + end; to_pb_response(ReqID, {low_delete_migration, _EID, _Fl}, Resp)-> Status = conv_from_status(Resp), #mpb_ll_response{req_id=ReqID,