Postgres State Store: Add Support for First-Write concurrency
Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com>
This commit is contained in:
parent
973ff8f94c
commit
3af0953516
|
@ -143,7 +143,11 @@ func (p *postgresDBAccess) setValue(req *state.SetRequest) error {
|
|||
|
||||
// Sprintf is required for table name because sql.DB does not substitute parameters for table names.
|
||||
// Other parameters use sql.DB parameter substitution.
|
||||
if req.ETag == nil {
|
||||
if req.Options.Concurrency == state.FirstWrite && (req.ETag == nil || *req.ETag == "") {
|
||||
result, err = p.db.Exec(fmt.Sprintf(
|
||||
`INSERT INTO %s (key, value, isbinary) VALUES ($1, $2, $3);`,
|
||||
defaultTableName), req.Key, value, isBinary)
|
||||
} else if req.ETag == nil {
|
||||
result, err = p.db.Exec(fmt.Sprintf(
|
||||
`INSERT INTO %s (key, value, isbinary) VALUES ($1, $2, $3)
|
||||
ON CONFLICT (key) DO UPDATE SET value = $2, isbinary = $3, updatedate = NOW();`,
|
||||
|
|
|
@ -21,7 +21,7 @@ components:
|
|||
operations: [ "set", "get", "delete", "bulkset", "bulkdelete", "transaction", "etag", "first-write" ]
|
||||
- component: postgresql
|
||||
allOperations: false
|
||||
operations: [ "set", "get", "delete", "bulkset", "bulkdelete", "transaction", "etag", "query" ]
|
||||
operations: [ "set", "get", "delete", "bulkset", "bulkdelete", "transaction", "etag", "query", "first-write" ]
|
||||
- component: mysql.mysql
|
||||
allOperations: false
|
||||
operations: [ "set", "get", "delete", "bulkset", "bulkdelete", "transaction", "etag", "first-write" ]
|
||||
|
@ -42,4 +42,4 @@ components:
|
|||
operations: [ "set", "get", "delete", "bulkset", "bulkdelete", "transaction", "etag", "query" ]
|
||||
- component: rethinkdb
|
||||
allOperations: false
|
||||
operations: [ "set", "get", "delete", "bulkset", "bulkdelete"]
|
||||
operations: [ "set", "get", "delete", "bulkset", "bulkdelete"]
|
||||
|
|
Loading…
Reference in New Issue