Skip to content

Commit 0cde2ab

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 617cb5d commit 0cde2ab

File tree

5 files changed

+1122
-1
lines changed

5 files changed

+1122
-1
lines changed

README.markdown

Lines changed: 40 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,23 @@ 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` and/or `old_flags` does not match shm.
6899+
6900+
if `old_value` or `old_flags` is `nil` it will be ignored when comparing.
6901+
6902+
This method was first introduced in the `0.XX.X` release.
6903+
6904+
See also [ngx.shared.DICT](#ngxshareddict).
6905+
6906+
[Back to TOC](#nginx-api-for-lua)
6907+
68876908
ngx.shared.DICT.set
68886909
-------------------
68896910

@@ -6984,6 +7005,25 @@ See also [ngx.shared.DICT](#ngxshareddict).
69847005

69857006
[Back to TOC](#nginx-api-for-lua)
69867007

7008+
ngx.shared.DICT.cas
7009+
-------------------
7010+
**syntax:** *success, err, forcible = ngx.shared.DICT:cas(key, value, exptime?, flags?, old_value?, old_flags?)*
7011+
7012+
**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**
7013+
7014+
If `old_value` is not `nil` value will only be set if `old_value` is equal to the
7015+
value in shm.
7016+
7017+
If `old_flags` is not `nil` value will only be set if `old_flags` is equal to the
7018+
flags in shm.
7019+
7020+
7021+
This method was first introduced in the `0.XX.X` release.
7022+
7023+
See also [ngx.shared.DICT](#ngxshareddict).
7024+
7025+
[Back to TOC](#nginx-api-for-lua)
7026+
69877027
ngx.shared.DICT.replace
69887028
-----------------------
69897029

doc/HttpLuaModule.wiki

Lines changed: 32 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,20 @@ 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> and/or <code>old_flags</code> does not match shm.
5840+
5841+
if <code>old_value</code> or <code>old_flags</code> is <code>nil</code> it will be ignored when comparing.
5842+
5843+
This method was first introduced in the <code>0.XX.X</code> release.
5844+
5845+
See also [[#ngx.shared.DICT|ngx.shared.DICT]].
5846+
58315847
== ngx.shared.DICT.set ==
58325848
58335849
'''syntax:''' ''success, err, forcible = ngx.shared.DICT:set(key, value, exptime?, flags?)''
@@ -5914,6 +5930,22 @@ This feature was first introduced in the <code>v0.7.18</code> release.
59145930
59155931
See also [[#ngx.shared.DICT|ngx.shared.DICT]].
59165932
5933+
== ngx.shared.DICT.cas ==
5934+
'''syntax:''' ''success, err, forcible = ngx.shared.DICT:cas(key, value, exptime?, flags?, old_value?, old_flags?)''
5935+
5936+
'''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*''
5937+
5938+
If <code>old_value</code> is not <code>nil</code> value will only be set if <code>old_value</code> is equal to the
5939+
value in shm.
5940+
5941+
If <code>old_flags</code> is not <code>nil</code> value will only be set if <code>old_flags</code> is equal to the
5942+
flags in shm.
5943+
5944+
5945+
This method was first introduced in the <code>0.XX.X</code> release.
5946+
5947+
See also [[#ngx.shared.DICT|ngx.shared.DICT]].
5948+
59175949
== ngx.shared.DICT.replace ==
59185950
59195951
'''syntax:''' ''success, err, forcible = ngx.shared.DICT:replace(key, value, exptime?, flags?)''

0 commit comments

Comments
 (0)