Uploaded image for project: 'Thrift'
  1. Thrift
  2. THRIFT-1236

Erlang Reconnecting Thrift Client

    XMLWordPrintableJSON

Details

    • New Feature
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 0.6.1
    • 0.7
    • Erlang - Library
    • None
    • Patch Available

    Description

      Anthony suggested I contribute this module. It's a reconnecting thrift client that I wrote for use at OpenX. I modified the source to remove some internal dependencies and added the Apache License. I also did some basic smoke testing on this version (the internal version has been in production for a while). This does not re-queue a failed request, it returns a failure with the underlying error - this allows applications to record the failure and define its own re-queue semantics.

      example.erl
      Erlang R14B03 (erts-5.8.4) [source] [64-bit] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]
      
      Eshell V5.8.4  (abort with ^G)
      1> %% Helper funs specific to the service
      1> MakeFreq = fun( IntCnt, IntMins, IntBits, Key ) -> { freqId, { freqType, IntCnt, IntMins, IntBits }, Key } end.
      #Fun<erl_eval.4.88154533>
      2> MakeRange = fun( FreqId, Duration ) -> { freqCountRange, FreqId, Duration } end.
      #Fun<erl_eval.12.107821302>
      3> FreqIncr( FreqConn1, [ Freq1 ] ).
      * 1: variable 'FreqIncr' is unbound
      4> FreqCount( FreqConn1, [ MakeRange( Freq1, 10 ) ] ).
      * 1: variable 'FreqCount' is unbound
      5> FreqDelete( FreqConn1, [ Freq1 ] ).
      * 1: variable 'FreqDelete' is unbound
      6> 
      6> %% Helper funs for calling the service
      6> FreqCount  = fun( Pid, Ranges  ) -> thrift_reconnecting_client:call( Pid, count_all, [ Ranges ] ) end.
      #Fun<erl_eval.12.107821302>
      7> FreqIncr   = fun( Pid, FreqIds ) -> thrift_reconnecting_client:call( Pid, increment_all, [ FreqIds ] ) end.
      #Fun<erl_eval.12.107821302>
      8> FreqDelete = fun( Pid, FreqIds ) -> thrift_reconnecting_client:call( Pid, delete_all, [ FreqIds ] ) end.
      #Fun<erl_eval.12.107821302>
      9> FreqStats  = fun( Pid )          -> thrift_reconnecting_client:get_stats( Pid ) end.
      #Fun<erl_eval.6.80247286>
      10> 
      10> { ok, FreqConn } = thrift_reconnecting_client:start_link( "qa-ox3-freq-xv-01.xv.dc.openx.org", 12422, frequencyService_thrift, [ { framed, true } ], 250, 60 * 1000 ).
      {ok,<0.42.0>}
      11> Freq1 = MakeFreq( 4, 5, 3, "delete_test1" ).
      {freqId,{freqType,4,5,3},"delete_test1"}
      12> FreqIncr( FreqConn, [ Freq1 ] ).
      {ok,ok}
      13> FreqCount( FreqConn, [ MakeRange( Freq1, 10 ) ] ).
      {ok,[{freqCount,1,21840142}]}
      14> FreqStats( FreqConn ).
      [{"frequencyService_thrift_increment_all_success",1,79048},
       {"frequencyService_thrift_count_all_success",1,77429}]
      15> FreqIncr( FreqConn, [ Freq1 ] ).
      {ok,ok}
      16> FreqCount( FreqConn, [ MakeRange( Freq1, 10 ) ] ).
      {ok,[{freqCount,2,21840142}]}
      17> FreqStats( FreqConn ).
      [{"frequencyService_thrift_increment_all_success",2,146781},
       {"frequencyService_thrift_count_all_success",2,145807}]
      18> %% Restart service
      18> 
      18> FreqIncr( FreqConn, [ Freq1 ] ).
      {'EXIT',{{case_clause,{error,closed}},
               [{thrift_client,read_result,3},
                {thrift_reconnecting_client,handle_call,3},
                {gen_server,handle_msg,5},
                {proc_lib,init_p_do_apply,3}]}}
      19> FreqCount( FreqConn, [ MakeRange( Freq1, 10 ) ] ).
      {ok,[{freqCount,0,0}]}
      20> FreqStats( FreqConn ).
      [{"frequencyService_thrift_increment_all_success",2,146781},
       {"frequencyService_thrift_count_all_success",3,272716},
       {"frequencyService_thrift_increment_all_error",1,375}]
      21>                                                   
      

      Attachments

        Activity

          People

            djnym Anthony Molinaro
            joelpm Joel Meyer
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: