Skip to content

Commit d93cb1c

Browse files
committed
Added atomic type opperations to shmdict
- Added cas(compare and swap) to shdict - Added get_if_not_eq to shdict
1 parent ce8405c commit d93cb1c

File tree

5 files changed

+1243
-30
lines changed

5 files changed

+1243
-30
lines changed

README.markdown

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3581,10 +3581,12 @@ Nginx API for Lua
35813581
* [ngx.shared.DICT](#ngxshareddict)
35823582
* [ngx.shared.DICT.get](#ngxshareddictget)
35833583
* [ngx.shared.DICT.get_stale](#ngxshareddictget_stale)
3584+
* [ngx.shared.DICT](#ngxshareddict)
35843585
* [ngx.shared.DICT.set](#ngxshareddictset)
35853586
* [ngx.shared.DICT.safe_set](#ngxshareddictsafe_set)
35863587
* [ngx.shared.DICT.add](#ngxshareddictadd)
35873588
* [ngx.shared.DICT.safe_add](#ngxshareddictsafe_add)
3589+
* [ngx.shared.DICT.cas](#ngxshareddictcas)
35883590
* [ngx.shared.DICT.replace](#ngxshareddictreplace)
35893591
* [ngx.shared.DICT.delete](#ngxshareddictdelete)
35903592
* [ngx.shared.DICT.incr](#ngxshareddictincr)
@@ -6784,10 +6786,12 @@ The resulting object `dict` has the following methods:
67846786

67856787
* [get](#ngxshareddictget)
67866788
* [get_stale](#ngxshareddictget_stale)
6789+
* [get_if_not_eq](#ngxshareddictget_if_not_eq)
67876790
* [set](#ngxshareddictset)
67886791
* [safe_set](#ngxshareddictsafe_set)
67896792
* [add](#ngxshareddictadd)
67906793
* [safe_add](#ngxshareddictsafe_add)
6794+
* [cas](#ngxshareddictcas)
67916795
* [replace](#ngxshareddictreplace)
67926796
* [delete](#ngxshareddictdelete)
67936797
* [incr](#ngxshareddictincr)
@@ -6912,6 +6916,26 @@ See also [ngx.shared.DICT](#ngxshareddict).
69126916

69136917
[Back to TOC](#nginx-api-for-lua)
69146918

6919+
ngx.shared.DICT
6920+
---------------
6921+
**syntax:** *value, flags = ngx.shared.DICT:get_if_not_eq(key, old_value?, old_flags?)*
6922+
6923+
**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**
6924+
6925+
Similar to the [get](#ngxshareddictget) method, but only returns if
6926+
`old_value` or `old_flags` do not match.
6927+
6928+
If `old_value` or `old_flags` is `nil`
6929+
it will be ignored when comparing.
6930+
6931+
In case of match, `nil, false` will be returned.
6932+
6933+
This method was first introduced in the `0.10.21` release.
6934+
6935+
See also [ngx.shared.DICT](#ngxshareddict).
6936+
6937+
[Back to TOC](#nginx-api-for-lua)
6938+
69156939
ngx.shared.DICT.set
69166940
-------------------
69176941

@@ -7012,6 +7036,28 @@ See also [ngx.shared.DICT](#ngxshareddict).
70127036

70137037
[Back to TOC](#nginx-api-for-lua)
70147038

7039+
ngx.shared.DICT.cas
7040+
-------------------
7041+
**syntax:** *success, err, forcible = ngx.shared.DICT:cas(key, old_value?, old_flags?, value?, flags?, exptime?)*
7042+
7043+
**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**
7044+
7045+
Conditionally sets key-value pair in shm.
7046+
7047+
If `old_value` or `old_flags` is `nil` it will
7048+
be ignored.
7049+
7050+
If either `value` or `flags` is `nil` it will
7051+
remain unchanged. If both are `nil`, key-value pair will be deleted.
7052+
7053+
In case of mismatch, `false, false` will be returned.
7054+
7055+
This method was first introduced in the `0.10.21` release.
7056+
7057+
See also [ngx.shared.DICT](#ngxshareddict).
7058+
7059+
[Back to TOC](#nginx-api-for-lua)
7060+
70157061
ngx.shared.DICT.replace
70167062
-----------------------
70177063

doc/HttpLuaModule.wiki

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5739,10 +5739,12 @@ The resulting object <code>dict</code> has the following methods:
57395739
57405740
* [[#ngx.shared.DICT.get|get]]
57415741
* [[#ngx.shared.DICT.get_stale|get_stale]]
5742+
* [[#ngx.shared.DICT.get_if_not_eq|get_if_not_eq]]
57425743
* [[#ngx.shared.DICT.set|set]]
57435744
* [[#ngx.shared.DICT.safe_set|safe_set]]
57445745
* [[#ngx.shared.DICT.add|add]]
57455746
* [[#ngx.shared.DICT.safe_add|safe_add]]
5747+
* [[#ngx.shared.DICT.cas|cas]]
57465748
* [[#ngx.shared.DICT.replace|replace]]
57475749
* [[#ngx.shared.DICT.delete|delete]]
57485750
* [[#ngx.shared.DICT.incr|incr]]
@@ -5855,6 +5857,23 @@ This method was first introduced in the <code>0.8.6</code> release.
58555857
58565858
See also [[#ngx.shared.DICT|ngx.shared.DICT]].
58575859
5860+
== ngx.shared.DICT ==
5861+
'''syntax:''' ''value, flags = ngx.shared.DICT:get_if_not_eq(key, old_value?, old_flags?)''
5862+
5863+
'''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*''
5864+
5865+
Similar to the [[#ngx.shared.DICT.get|get]] method, but only returns if
5866+
<code>old_value</code> or <code>old_flags</code> do not match.
5867+
5868+
If <code>old_value</code> or <code>old_flags</code> is <code>nil</code>
5869+
it will be ignored when comparing.
5870+
5871+
In case of match, <code>nil, false</code> will be returned.
5872+
5873+
This method was first introduced in the <code>0.10.21</code> release.
5874+
5875+
See also [[#ngx.shared.DICT|ngx.shared.DICT]].
5876+
58585877
== ngx.shared.DICT.set ==
58595878
58605879
'''syntax:''' ''success, err, forcible = ngx.shared.DICT:set(key, value, exptime?, flags?)''
@@ -5941,6 +5960,25 @@ This feature was first introduced in the <code>v0.7.18</code> release.
59415960
59425961
See also [[#ngx.shared.DICT|ngx.shared.DICT]].
59435962
5963+
== ngx.shared.DICT.cas ==
5964+
'''syntax:''' ''success, err, forcible = ngx.shared.DICT:cas(key, old_value?, old_flags?, value?, flags?, exptime?)''
5965+
5966+
'''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*''
5967+
5968+
Conditionally sets key-value pair in shm.
5969+
5970+
If <code>old_value</code> or <code>old_flags</code> is <code>nil</code> it will
5971+
be ignored.
5972+
5973+
If either <code>value</code> or <code>flags</code> is <code>nil</code> it will
5974+
remain unchanged. If both are <code>nil</code>, key-value pair will be deleted.
5975+
5976+
In case of mismatch, <code>false, false</code> will be returned.
5977+
5978+
This method was first introduced in the <code>0.10.21</code> release.
5979+
5980+
See also [[#ngx.shared.DICT|ngx.shared.DICT]].
5981+
59445982
== ngx.shared.DICT.replace ==
59455983
59465984
'''syntax:''' ''success, err, forcible = ngx.shared.DICT:replace(key, value, exptime?, flags?)''

0 commit comments

Comments
 (0)