Forum: NGINX nginx eval with memc set command very slowly

Posted by yaoxinming (Guest)
on 2010-03-08 09:30
(Received via mailing list)
when use eval with memc  set(all dev by agentzh ) ,I feel the response 
is
very slowly,but get is very quickly,below is the configue

location /myset {
    eval &var1{
          set $memc_cmd 'set';
          set $memc_key 'test1';
          set $memc_flags 12345;
          set $memc_exptime 24;
          set $memc_value 'my_value';

          memc_pass 127.0.0.1:11211;
      }
  }

does any one has meet this problem,any advice is welcome
thanks very much
Posted by agentzh (Guest)
on 2010-03-08 09:44
(Received via mailing list)
On Mon, Mar 8, 2010 at 4:30 PM, yaoxinming <yaoxinming@gmail.com> wrote:
> when use eval with memc  set(all dev by agentzh ) ,I feel the response is
> very slowly,but get is very quickly,below is the configue
>

Which version of ngx_memc, ngx_eval, and memcached are you using? And 
which OS?

Cheers,
-agentzh
Posted by agentzh (Guest)
on 2010-03-09 03:53
(Received via mailing list)
On Mon, Mar 8, 2010 at 4:30 PM, yaoxinming <yaoxinming@gmail.com> wrote:
> when use eval with memc  set(all dev by agentzh ) ,I feel the response is
> very slowly,but get is very quickly,below is the configue
>

I'm guessing that it's caused by the "201 Created" status returned by
the ngx_memc set command. According to the source of ngx_eval, it only
accepts "200 OK". So in case of 201, it simply returns NGX_DECLINED,
which *may* produce that hang.

I'm currently in the Hangzhou city and far from my laptop in Beijing.
So I can't confirm this right now. I'll look into this and hopefully
do a fix in my branch of ngx_eval if it's indeed the case.

Thanks for the report!
-agentzh
Posted by agentzh (Guest)
on 2010-03-12 04:05
(Received via mailing list)
On Tue, Mar 9, 2010 at 10:52 AM, agentzh <agentzh@gmail.com> wrote:
> On Mon, Mar 8, 2010 at 4:30 PM, yaoxinming <yaoxinming@gmail.com> wrote:
>> when use eval with memc  set(all dev by agentzh ) ,I feel the response is
>> very slowly,but get is very quickly,below is the configue
>>
>
> I'm guessing that it's caused by the "201 Created" status returned by
> the ngx_memc set command. According to the source of ngx_eval, it only
> accepts "200 OK". So in case of 201, it simply returns NGX_DECLINED,
> which *may* produce that hang.
>

I've reproduced this hang on my side and spent half of my day tracking
this issue. But it looked deeper than I had expected.

Using subrequests issued by echo_location and echo_location_async does
not trigger this hang, but "eval" does. I'm now guessing it has
something to do with subrequests issued from the rewrite phase because
the ngx_echo module starts subrequests in content handlers only.

I don't have enough time to track this further for now. Will get back
to this issue some time later. Sorry.

Cheers,
-agentzh
Posted by agentzh (Guest)
on 2010-03-12 04:10
(Received via mailing list)
On Fri, Mar 12, 2010 at 11:05 AM, agentzh <agentzh@gmail.com> wrote:
> I've reproduced this hang on my side and spent half of my day tracking
> this issue. But it looked deeper than I had expected.
>

Forgot to mention that the "post subrequest" handler does not get
called in this case. It seems ngx_http_upstream does not call
finalize_request. Most likely an issue in ngx_memc's input filters.

If others can take a look at the ngx_http_memc_empty_filter_init and
ngx_http_memc_empty_filter functions in ngx_memc below, I'll really
appreciate that:

    http://github.com/agentzh/memc-nginx-module/blob/master/src/ngx_http_memc_response.rl

Thanks!
-agentzh
Posted by agentzh (Guest)
on 2010-04-10 16:41
(Received via mailing list)
On Fri, Mar 12, 2010 at 11:09 AM, agentzh <agentzh@gmail.com> wrote:
> On Fri, Mar 12, 2010 at 11:05 AM, agentzh <agentzh@gmail.com> wrote:
>> I've reproduced this hang on my side and spent half of my day tracking
>> this issue. But it looked deeper than I had expected.
>>
>
> Forgot to mention that the "post subrequest" handler does not get
> called in this case. It seems ngx_http_upstream does not call
> finalize_request. Most likely an issue in ngx_memc's input filters.

I've fixed this bug in ngx_memc v0.08:

    http://wiki.nginx.org/NginxHttpMemcModule#v0.08

ngx_memc didn't support subrequests in memory for memcached commands
other than "get" in earlier versions. Now it's finally fixed by
setting r->upstream->buffer's .pos and .last pointers properly in the
upstream input filters.

Also I've fixed a nasty bug in the discard_bufs function in my fork of
ngx_eval. It used to produce random hanging or segfaults when
eval_subrequest_in_memory was turned off.

Thanks!
-agentzh
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.