Improve Lua script for versioned cache
This commit is contained in:
parent
3c526529b9
commit
dc1e2f94c6
@ -392,7 +392,7 @@ public abstract class BaseController {
|
||||
return new ThingsboardException("Database error", ThingsboardErrorCode.GENERAL);
|
||||
}
|
||||
} else if (exception instanceof EntityVersionMismatchException) {
|
||||
return new ThingsboardException(exception.getMessage(), exception, ThingsboardErrorCode.CONFLICT);
|
||||
return new ThingsboardException(exception.getMessage(), exception, ThingsboardErrorCode.VERSION_CONFLICT);
|
||||
}
|
||||
return new ThingsboardException(exception.getMessage(), exception, ThingsboardErrorCode.GENERAL);
|
||||
}
|
||||
|
||||
@ -92,7 +92,7 @@ public class ThingsboardErrorResponseHandler extends ResponseEntityExceptionHand
|
||||
errorCodeToStatusMap.put(ThingsboardErrorCode.TOO_MANY_REQUESTS, HttpStatus.TOO_MANY_REQUESTS);
|
||||
errorCodeToStatusMap.put(ThingsboardErrorCode.TOO_MANY_UPDATES, HttpStatus.TOO_MANY_REQUESTS);
|
||||
errorCodeToStatusMap.put(ThingsboardErrorCode.SUBSCRIPTION_VIOLATION, HttpStatus.FORBIDDEN);
|
||||
errorCodeToStatusMap.put(ThingsboardErrorCode.CONFLICT, HttpStatus.CONFLICT);
|
||||
errorCodeToStatusMap.put(ThingsboardErrorCode.VERSION_CONFLICT, HttpStatus.CONFLICT);
|
||||
}
|
||||
|
||||
private static ThingsboardErrorCode statusToErrorCode(HttpStatus status) {
|
||||
|
||||
@ -46,20 +46,11 @@ public abstract class VersionedRedisTbCache<K extends Serializable, V extends Se
|
||||
redis.call('SET', key, newValueWithVersion, 'EX', expiration)
|
||||
end
|
||||
|
||||
local function bytes_to_number(bytes)
|
||||
local n = 0
|
||||
for i = 1, 8 do
|
||||
n = n * 256 + string.byte(bytes, i)
|
||||
end
|
||||
return n
|
||||
end
|
||||
|
||||
-- Get the current version (first 8 bytes) of the current value
|
||||
local currentVersionBytes = redis.call('GETRANGE', key, 0, 7)
|
||||
|
||||
if currentVersionBytes and #currentVersionBytes == 8 then
|
||||
local currentVersion = bytes_to_number(currentVersionBytes)
|
||||
|
||||
local currentVersion = struct.unpack(">I8", currentVersionBytes)
|
||||
if newVersion > currentVersion then
|
||||
setNewValue()
|
||||
end
|
||||
@ -68,7 +59,7 @@ public abstract class VersionedRedisTbCache<K extends Serializable, V extends Se
|
||||
setNewValue()
|
||||
end
|
||||
""");
|
||||
static final byte[] SET_VERSIONED_VALUE_SHA = StringRedisSerializer.UTF_8.serialize("80e56cbbbb4bd9cb150d6537f1e7d8df4fddb252");
|
||||
static final byte[] SET_VERSIONED_VALUE_SHA = StringRedisSerializer.UTF_8.serialize("0453cb1814135b706b4198b09a09f43c9f67bbfe");
|
||||
|
||||
public VersionedRedisTbCache(String cacheName, CacheSpecsMap cacheSpecsMap, RedisConnectionFactory connectionFactory, TBRedisCacheConfiguration configuration, TbRedisSerializer<K, V> valueSerializer) {
|
||||
super(cacheName, cacheSpecsMap, connectionFactory, configuration, valueSerializer);
|
||||
|
||||
@ -29,7 +29,7 @@ public enum ThingsboardErrorCode {
|
||||
ITEM_NOT_FOUND(32),
|
||||
TOO_MANY_REQUESTS(33),
|
||||
TOO_MANY_UPDATES(34),
|
||||
CONFLICT(35),
|
||||
VERSION_CONFLICT(35),
|
||||
SUBSCRIPTION_VIOLATION(40),
|
||||
PASSWORD_VIOLATION(45);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user