<div xmlns="http://www.w3.org/1999/xhtml">Hello, Maxim!</div><div xmlns="http://www.w3.org/1999/xhtml"> </div><div xmlns="http://www.w3.org/1999/xhtml">It takes me some time to express new parameter with words, but finally it is as simple as "start to delay after N requests". I agree it more suitable then nodelay= and there is no need to warn about delay>burst.</div><div xmlns="http://www.w3.org/1999/xhtml"> </div><div xmlns="http://www.w3.org/1999/xhtml">Thank you, I'll be very happy to see this feature in upstream.</div><div xmlns="http://www.w3.org/1999/xhtml"> </div><div xmlns="http://www.w3.org/1999/xhtml">PS</div><div xmlns="http://www.w3.org/1999/xhtml"> </div><div xmlns="http://www.w3.org/1999/xhtml"><div>There is now a small gotcha when trying to calculate delay (in seconds) based on excess value reported in log file, one should remember to subtract delay value from excess to get correct delay.</div><div> </div></div><div xmlns="http://www.w3.org/1999/xhtml"> </div><div xmlns="http://www.w3.org/1999/xhtml">I am attaching updated tests in case you found them useful:</div><div xmlns="http://www.w3.org/1999/xhtml"> </div><div xmlns="http://www.w3.org/1999/xhtml"><div>changeset:   1390:6ca33dd13079</div><div>tag:         tip</div><div>user:        Peter Shchuchkin <peters@yandex.ru></div><div>date:        Sun Oct 28 11:34:41 2018 +0300</div><div>summary:     Tests: testing limit_req with "burst=A delay=B" configuration</div><div> </div><div>diff -r 73a9504ae6fd -r 6ca33dd13079 limit_req.t</div><div>--- a/limit_req.t    Fri Oct 19 18:49:45 2018 +0300</div><div>+++ b/limit_req.t    Sun Oct 28 11:34:41 2018 +0300</div><div>@@ -21,7 +21,7 @@</div><div> select STDERR; $| = 1;</div><div> select STDOUT; $| = 1;</div><div> </div><div>-my $t = Test::Nginx->new()->has(qw/http limit_req/)->plan(6);</div><div>+my $t = Test::Nginx->new()->has(qw/http limit_req/)->plan(8);</div><div> </div><div> $t->write_file_expand('nginx.conf', <<'EOF');</div><div> </div><div>@@ -38,6 +38,7 @@</div><div>     limit_req_zone  $binary_remote_addr  zone=one:1m   rate=2r/s;</div><div>     limit_req_zone  $binary_remote_addr  zone=long:1m  rate=2r/s;</div><div>     limit_req_zone  $binary_remote_addr  zone=fast:1m  rate=1000r/s;</div><div>+    limit_req_zone  $binary_remote_addr  zone=mixed:1m  rate=10r/s;</div><div> </div><div>     server {</div><div>         listen       127.0.0.1:8080;</div><div>@@ -56,6 +57,12 @@</div><div>         location /fast {</div><div>             limit_req    zone=fast  burst=1;</div><div>         }</div><div>+        location /mixed {</div><div>+            limit_req    zone=mixed  burst=2 delay=1;</div><div>+        }</div><div>+        location /mixed-pass {</div><div>+            limit_req    zone=mixed  burst=2 nodelay;</div><div>+        }</div><div>     }</div><div> }</div><div> </div><div>@@ -64,6 +71,8 @@</div><div> $t->write_file('test1.html', 'XtestX');</div><div> $t->write_file('long.html', "1234567890\n" x (1 << 16));</div><div> $t->write_file('fast.html', 'XtestX');</div><div>+$t->write_file('mixed.html', 'XtestX');</div><div>+$t->write_file('mixed-pass.html', 'XtestX');</div><div> $t->run();</div><div> </div><div> ###############################################################################</div><div>@@ -94,4 +103,20 @@</div><div> select undef, undef, undef, 0.1;</div><div> like(http_get('/fast.html'), qr/^HTTP\/1.. 200 /m, 'negative excess');</div><div> </div><div>+# make sure requests are delayed when 0 < delay < burst</div><div>+# this test should fail when using nodelay or when delay>=burst</div><div>+</div><div>+http_get('/mixed.html');</div><div>+http_get('/mixed.html');</div><div>+http_get('/mixed.html');</div><div>+like(http_get('/mixed.html'), qr/^HTTP\/1.. 200 /m, 'mixed request is not rejected');</div><div>+</div><div>+# make sure it is possible to partially fill up excess through /mixed.html and get last request rejected</div><div>+# this test should fail when using "burst=A" with all delayed</div><div>+</div><div>+http_get('/mixed.html');</div><div>+http_get('/mixed.html');</div><div>+http_get('/mixed-pass.html');</div><div>+like(http_get('/mixed-pass.html'), qr/^HTTP\/1.. 503 /m, 'mixed request is rejected');</div><div>+</div><div> ###############################################################################</div><div> </div></div><div xmlns="http://www.w3.org/1999/xhtml"> </div><div xmlns="http://www.w3.org/1999/xhtml"> </div>