Skip to content

Commit 4688acd

Browse files
committed
Added atomic type opperations to shmdict
- Added cas(compare and swap) to shdict - Added cog(compare or get) to shdict
1 parent 3f33dd8 commit 4688acd

File tree

5 files changed

+1337
-1
lines changed

5 files changed

+1337
-1
lines changed

README.markdown

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3560,10 +3560,12 @@ Nginx API for Lua
35603560
* [ngx.shared.DICT](#ngxshareddict)
35613561
* [ngx.shared.DICT.get](#ngxshareddictget)
35623562
* [ngx.shared.DICT.get_stale](#ngxshareddictget_stale)
3563+
* [ngx.shared.DICT.cog](#ngxshareddictcog)
35633564
* [ngx.shared.DICT.set](#ngxshareddictset)
35643565
* [ngx.shared.DICT.safe_set](#ngxshareddictsafe_set)
35653566
* [ngx.shared.DICT.add](#ngxshareddictadd)
35663567
* [ngx.shared.DICT.safe_add](#ngxshareddictsafe_add)
3568+
* [ngx.shared.DICT.cas](#ngxshareddictcas)
35673569
* [ngx.shared.DICT.replace](#ngxshareddictreplace)
35683570
* [ngx.shared.DICT.delete](#ngxshareddictdelete)
35693571
* [ngx.shared.DICT.incr](#ngxshareddictincr)
@@ -6756,10 +6758,12 @@ The resulting object `dict` has the following methods:
67566758

67576759
* [get](#ngxshareddictget)
67586760
* [get_stale](#ngxshareddictget_stale)
6761+
* [cog](#ngxshareddictcog)
67596762
* [set](#ngxshareddictset)
67606763
* [safe_set](#ngxshareddictsafe_set)
67616764
* [add](#ngxshareddictadd)
67626765
* [safe_add](#ngxshareddictsafe_add)
6766+
* [cas](#ngxshareddictcas)
67636767
* [replace](#ngxshareddictreplace)
67646768
* [delete](#ngxshareddictdelete)
67656769
* [incr](#ngxshareddictincr)
@@ -6884,6 +6888,26 @@ See also [ngx.shared.DICT](#ngxshareddict).
68846888

68856889
[Back to TOC](#nginx-api-for-lua)
68866890

6891+
ngx.shared.DICT.cog
6892+
-------------------
6893+
**syntax:** *value, flags = ngx.shared.DICT:cog(key, old_value?, old_flags?)*
6894+
6895+
**context:** *set_by_lua*, rewrite_by_lua*, access_by_lua*, content_by_lua*, header_filter_by_lua*, body_filter_by_lua*, log_by_lua*, ngx.timer.*, balancer_by_lua*, ssl_certificate_by_lua*, ssl_session_fetch_by_lua*, ssl_session_store_by_lua*, ssl_client_hello_by_lua**
6896+
6897+
Similar to the [get](#ngxshareddictget) method, but only returns if
6898+
`old_value` or `old_flags` do not match.
6899+
6900+
If `old_value` or `old_flags` is `nil`
6901+
it will be ignored when comparing.
6902+
6903+
In case of match, `nil, false` will be returned.
6904+
6905+
This method was first introduced in the `0.XX.X` release.
6906+
6907+
See also [ngx.shared.DICT](#ngxshareddict).
6908+
6909+
[Back to TOC](#nginx-api-for-lua)
6910+
68876911
ngx.shared.DICT.set
68886912
-------------------
68896913

@@ -6984,6 +7008,28 @@ See also [ngx.shared.DICT](#ngxshareddict).
69847008

69857009
[Back to TOC](#nginx-api-for-lua)
69867010

7011+
ngx.shared.DICT.cas
7012+
-------------------
7013+
**syntax:** *success, err, forcible = ngx.shared.DICT:cas(key, old_value?, old_flags?, value?, flags?, exptime?)*
7014+
7015+
**context:** *set_by_lua*, rewrite_by_lua*, access_by_lua*, content_by_lua*, header_filter_by_lua*, body_filter_by_lua*, log_by_lua*, ngx.timer.*, balancer_by_lua*, ssl_certificate_by_lua*, ssl_session_fetch_by_lua*, ssl_session_store_by_lua*, ssl_client_hello_by_lua**
7016+
7017+
Conditionally sets key-value pair in shm.
7018+
7019+
If `old_value` or `old_flags` is `nil` it will
7020+
be ignored.
7021+
7022+
If either `value` or `flags` is `nil` it will
7023+
remain unchanged. If both are `nil`, key-value pair will be deleted.
7024+
7025+
In case of mismatch, `false, false` will be returned.
7026+
7027+
This method was first introduced in the `0.XX.X` release.
7028+
7029+
See also [ngx.shared.DICT](#ngxshareddict).
7030+
7031+
[Back to TOC](#nginx-api-for-lua)
7032+
69877033
ngx.shared.DICT.replace
69887034
-----------------------
69897035

doc/HttpLuaModule.wiki

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5712,10 +5712,12 @@ The resulting object <code>dict</code> has the following methods:
57125712
57135713
* [[#ngx.shared.DICT.get|get]]
57145714
* [[#ngx.shared.DICT.get_stale|get_stale]]
5715+
* [[#ngx.shared.DICT.cog|cog]]
57155716
* [[#ngx.shared.DICT.set|set]]
57165717
* [[#ngx.shared.DICT.safe_set|safe_set]]
57175718
* [[#ngx.shared.DICT.add|add]]
57185719
* [[#ngx.shared.DICT.safe_add|safe_add]]
5720+
* [[#ngx.shared.DICT.cas|cas]]
57195721
* [[#ngx.shared.DICT.replace|replace]]
57205722
* [[#ngx.shared.DICT.delete|delete]]
57215723
* [[#ngx.shared.DICT.incr|incr]]
@@ -5828,6 +5830,23 @@ This method was first introduced in the <code>0.8.6</code> release.
58285830
58295831
See also [[#ngx.shared.DICT|ngx.shared.DICT]].
58305832
5833+
== ngx.shared.DICT.cog ==
5834+
'''syntax:''' ''value, flags = ngx.shared.DICT:cog(key, old_value?, old_flags?)''
5835+
5836+
'''context:''' ''set_by_lua*, rewrite_by_lua*, access_by_lua*, content_by_lua*, header_filter_by_lua*, body_filter_by_lua*, log_by_lua*, ngx.timer.*, balancer_by_lua*, ssl_certificate_by_lua*, ssl_session_fetch_by_lua*, ssl_session_store_by_lua*, ssl_client_hello_by_lua*''
5837+
5838+
Similar to the [[#ngx.shared.DICT.get|get]] method, but only returns if
5839+
<code>old_value</code> or <code>old_flags</code> do not match.
5840+
5841+
If <code>old_value</code> or <code>old_flags</code> is <code>nil</code>
5842+
it will be ignored when comparing.
5843+
5844+
In case of match, <code>nil, false</code> will be returned.
5845+
5846+
This method was first introduced in the <code>0.XX.X</code> release.
5847+
5848+
See also [[#ngx.shared.DICT|ngx.shared.DICT]].
5849+
58315850
== ngx.shared.DICT.set ==
58325851
58335852
'''syntax:''' ''success, err, forcible = ngx.shared.DICT:set(key, value, exptime?, flags?)''
@@ -5914,6 +5933,25 @@ This feature was first introduced in the <code>v0.7.18</code> release.
59145933
59155934
See also [[#ngx.shared.DICT|ngx.shared.DICT]].
59165935
5936+
== ngx.shared.DICT.cas ==
5937+
'''syntax:''' ''success, err, forcible = ngx.shared.DICT:cas(key, old_value?, old_flags?, value?, flags?, exptime?)''
5938+
5939+
'''context:''' ''set_by_lua*, rewrite_by_lua*, access_by_lua*, content_by_lua*, header_filter_by_lua*, body_filter_by_lua*, log_by_lua*, ngx.timer.*, balancer_by_lua*, ssl_certificate_by_lua*, ssl_session_fetch_by_lua*, ssl_session_store_by_lua*, ssl_client_hello_by_lua*''
5940+
5941+
Conditionally sets key-value pair in shm.
5942+
5943+
If <code>old_value</code> or <code>old_flags</code> is <code>nil</code> it will
5944+
be ignored.
5945+
5946+
If either <code>value</code> or <code>flags</code> is <code>nil</code> it will
5947+
remain unchanged. If both are <code>nil</code>, key-value pair will be deleted.
5948+
5949+
In case of mismatch, <code>false, false</code> will be returned.
5950+
5951+
This method was first introduced in the <code>0.XX.X</code> release.
5952+
5953+
See also [[#ngx.shared.DICT|ngx.shared.DICT]].
5954+
59175955
== ngx.shared.DICT.replace ==
59185956
59195957
'''syntax:''' ''success, err, forcible = ngx.shared.DICT:replace(key, value, exptime?, flags?)''

0 commit comments

Comments
 (0)