Merge commit '7cb94fd6cc9e1ad106964171023457ae3ff0a40b' into unstable

Former-commit-id: 7676f5b15f24a044257250b8891d23b14642da48
This commit is contained in:
John Sully 2020-05-21 17:36:53 -04:00
commit 4246199553
7 changed files with 25 additions and 9 deletions

View File

@ -38,9 +38,14 @@ jobs:
run: | run: |
sudo apt-get -y install tcl8.5 sudo apt-get -y install tcl8.5
./runtest --clients 2 --verbose ./runtest --clients 2 --verbose
<<<<<<< HEAD
- name: module tests - name: module tests
run: | run: |
./runtest-moduleapi ./runtest-moduleapi
=======
- name: module api test
run: ./runtest-moduleapi --clients 2 --verbose
>>>>>>> 024c380b9da02bc4112822c0f5f9ac1388b4205b
build-ubuntu-old: build-ubuntu-old:
runs-on: ubuntu-16.04 runs-on: ubuntu-16.04

View File

@ -314,7 +314,7 @@ int dbMerge(redisDb *db, robj *key, robj *val, int fReplace)
* unless 'keepttl' is true. * unless 'keepttl' is true.
* *
* All the new keys in the database should be created via this interface. */ * All the new keys in the database should be created via this interface. */
void genericSetKey(redisDb *db, robj *key, robj *val, int keepttl) { void genericSetKey(redisDb *db, robj *key, robj *val, int keepttl, int signal) {
dictEntry *de = dictFind(db->pdict, ptrFromObj(key)); dictEntry *de = dictFind(db->pdict, ptrFromObj(key));
if (de == NULL) { if (de == NULL) {
dbAdd(db,key,val); dbAdd(db,key,val);
@ -323,12 +323,12 @@ void genericSetKey(redisDb *db, robj *key, robj *val, int keepttl) {
dbOverwriteCore(db,de,key,val,!!g_pserver->fActiveReplica,!keepttl); dbOverwriteCore(db,de,key,val,!!g_pserver->fActiveReplica,!keepttl);
} }
incrRefCount(val); incrRefCount(val);
signalModifiedKey(db,key); if (signal) signalModifiedKey(db,key);
} }
/* Common case for genericSetKey() where the TTL is not retained. */ /* Common case for genericSetKey() where the TTL is not retained. */
void setKey(redisDb *db, robj *key, robj *val) { void setKey(redisDb *db, robj *key, robj *val) {
genericSetKey(db,key,val,0); genericSetKey(db,key,val,0,1);
} }
/* Return true if the specified key exists in the specified database. /* Return true if the specified key exists in the specified database.

View File

@ -2231,7 +2231,7 @@ RedisModuleString *RM_RandomKey(RedisModuleCtx *ctx) {
int RM_StringSet(RedisModuleKey *key, RedisModuleString *str) { int RM_StringSet(RedisModuleKey *key, RedisModuleString *str) {
if (!(key->mode & REDISMODULE_WRITE) || key->iter) return REDISMODULE_ERR; if (!(key->mode & REDISMODULE_WRITE) || key->iter) return REDISMODULE_ERR;
RM_DeleteKey(key); RM_DeleteKey(key);
setKey(key->db,key->key,str); genericSetKey(key->db,key->key,str,0,0);
key->value = str; key->value = str;
return REDISMODULE_OK; return REDISMODULE_OK;
} }
@ -2311,7 +2311,7 @@ int RM_StringTruncate(RedisModuleKey *key, size_t newlen) {
if (key->value == NULL) { if (key->value == NULL) {
/* Empty key: create it with the new size. */ /* Empty key: create it with the new size. */
robj *o = createObject(OBJ_STRING,sdsnewlen(NULL, newlen)); robj *o = createObject(OBJ_STRING,sdsnewlen(NULL, newlen));
setKey(key->db,key->key,o); genericSetKey(key->db,key->key,o,0,0);
key->value = o; key->value = o;
decrRefCount(o); decrRefCount(o);
} else { } else {
@ -3701,7 +3701,7 @@ int RM_ModuleTypeSetValue(RedisModuleKey *key, moduleType *mt, void *value) {
if (!(key->mode & REDISMODULE_WRITE) || key->iter) return REDISMODULE_ERR; if (!(key->mode & REDISMODULE_WRITE) || key->iter) return REDISMODULE_ERR;
RM_DeleteKey(key); RM_DeleteKey(key);
robj *o = createModuleObject(mt,value); robj *o = createModuleObject(mt,value);
setKey(key->db,key->key,o); genericSetKey(key->db,key->key,o,0,0);
decrRefCount(o); decrRefCount(o);
key->value = o; key->value = o;
return REDISMODULE_OK; return REDISMODULE_OK;
@ -6107,7 +6107,7 @@ sds modulesCollectInfo(sds info, const char *section, int for_crash_report, int
struct RedisModule *module = (RedisModule*)dictGetVal(de); struct RedisModule *module = (RedisModule*)dictGetVal(de);
if (!module->info_cb) if (!module->info_cb)
continue; continue;
RedisModuleInfoCtx info_ctx = {module, section, info, sections, 0}; RedisModuleInfoCtx info_ctx = {module, section, info, sections, 0, 0};
module->info_cb(&info_ctx, for_crash_report); module->info_cb(&info_ctx, for_crash_report);
/* Implicitly end dicts (no way to handle errors, and we must add the newline). */ /* Implicitly end dicts (no way to handle errors, and we must add the newline). */
if (info_ctx.in_dict_field) if (info_ctx.in_dict_field)

View File

@ -2646,7 +2646,7 @@ int objectSetLRUOrLFU(robj *val, long long lfu_freq, long long lru_idle,
void dbAdd(redisDb *db, robj *key, robj *val); void dbAdd(redisDb *db, robj *key, robj *val);
void dbOverwrite(redisDb *db, robj *key, robj *val); void dbOverwrite(redisDb *db, robj *key, robj *val);
int dbMerge(redisDb *db, robj *key, robj *val, int fReplace); int dbMerge(redisDb *db, robj *key, robj *val, int fReplace);
void genericSetKey(redisDb *db, robj *key, robj *val, int keepttl); void genericSetKey(redisDb *db, robj *key, robj *val, int keepttl, int signal);
void setKey(redisDb *db, robj *key, robj *val); void setKey(redisDb *db, robj *key, robj *val);
int dbExists(redisDb *db, robj *key); int dbExists(redisDb *db, robj *key);
robj *dbRandomKey(redisDb *db); robj *dbRandomKey(redisDb *db);

View File

@ -84,7 +84,7 @@ void setGenericCommand(client *c, int flags, robj *key, robj *val, robj *expire,
addReply(c, abort_reply ? abort_reply : shared.null[c->resp]); addReply(c, abort_reply ? abort_reply : shared.null[c->resp]);
return; return;
} }
genericSetKey(c->db,key,val,flags & OBJ_SET_KEEPTTL); genericSetKey(c->db,key,val,flags & OBJ_SET_KEEPTTL,1);
g_pserver->dirty++; g_pserver->dirty++;
if (expire) setExpire(c,c->db,key,nullptr,mstime()+milliseconds); if (expire) setExpire(c,c->db,key,nullptr,mstime()+milliseconds);
notifyKeyspaceEvent(NOTIFY_STRING,"set",key,c->db->id); notifyKeyspaceEvent(NOTIFY_STRING,"set",key,c->db->id);

View File

@ -602,6 +602,10 @@ int ld2string(char *buf, size_t len, long double value, ld2string_mode mode) {
} }
if (*p == '.') l--; if (*p == '.') l--;
} }
if (l == 2 && buf[0] == '-' && buf[1] == '0') {
buf[0] = '0';
l = 1;
}
break; break;
default: return 0; /* Invalid mode. */ default: return 0; /* Invalid mode. */
} }

View File

@ -151,4 +151,11 @@ start_server {tags {"incr"}} {
catch {r incrbyfloat foo 1} err catch {r incrbyfloat foo 1} err
format $err format $err
} {ERR*valid*} } {ERR*valid*}
test {No negative zero} {
r del foo
r incrbyfloat foo [expr double(1)/41]
r incrbyfloat foo [expr double(-1)/41]
r get foo
} {0}
} }