Commit Graph

3941 Commits

Author SHA1 Message Date
Dvir Volk
dc7f3fefad added RM_Calloc implementation 2016-06-22 17:32:41 +03:00
antirez
4e10b08fb3 Modules doc: hint about replacing libc malloc calls. 2016-06-22 15:24:51 +02:00
Yossi Gottlieb
e22f3e40d5 Cleanup: remove zset reset function from RM_ZsetRangeStop(). 2016-06-22 07:34:14 +03:00
Yossi Gottlieb
a8e2034548 Fix occasional RM_OpenKey() crashes. 2016-06-21 10:22:19 +03:00
Yossi Gottlieb
8f3a4df775 Use const in Redis Module API where possible. 2016-06-20 23:08:06 +03:00
Salvatore Sanfilippo
0b4b7ebd95 Merge pull request #3252 from oranagra/config_fix
fix: config set list-max-ziplist-size didn't support negative values
2016-06-17 14:48:41 +02:00
Misha Nasledov
7a5538d3a9 Fix incorrect comment for checkForSentinelMode function 2016-06-16 16:50:53 -07:00
antirez
f7351f4c07 Fix Sentinel pending commands counting.
This bug most experienced effect was an inability of Redis to
reconfigure back old masters to slaves after they are reachable again
after a failover. This was due to failing to reset the count of the
pending commands properly, so the master appeared fovever down.

Was introduced in Redis 3.2 new Sentinel connection sharing feature
which is a lot more complex than the 3.0 code, but more scalable.

Many thanks to people reporting the issue, and especially to
@sskorgal for investigating the issue in depth.

Hopefully closes #3285.
2016-06-16 19:27:24 +02:00
antirez
7c8f275a24 redis-cli: really connect to the right server.
I recently introduced populating the autocomplete help array with the
COMMAND command if available. However this was performed before parsing
the arguments, defaulting to instance 6379. After the connection is
performed it remains stable.

The effect is that if there is an instance running on port 6339,
whatever port you specify is ignored and 6379 is connected to instead.
The right port will be selected only after a reconnection.

Close #3314.
2016-06-16 17:23:31 +02:00
antirez
a3f893b800 RESTORE: accept RDB dumps with older versions.
Reference issue #3218.

Checking the code I can't find a reason why the original RESTORE
code was so opinionated about restoring only the current version. The
code in to `rdb.c` appears to be capable as always to restore data from
older versions of Redis, and the only places where it is needed the
current version in order to correctly restore data, is while loading the
opcodes, not the values itself as it happens in the case of RESTORE.

For the above reasons, this commit enables RESTORE to accept older
versions of values payloads.
2016-06-16 15:53:57 +02:00
Salvatore Sanfilippo
8272ceadaa Merge pull request #3255 from oranagra/error_string
CLIENT error message was out of date
2016-06-16 12:59:05 +02:00
Salvatore Sanfilippo
64b834b8b2 Merge pull request #3256 from oranagra/georasius_neg
fix georadius returns multiple replies
2016-06-16 12:57:59 +02:00
antirez
2f2fd64c0d Minor aesthetic fixes to PR #3264.
Comment format fixed + local var modified from camel case to underscore
separators as Redis code base normally does (camel case is mostly used
for global symbols like structure names, function names, global vars,
...).
2016-06-16 12:54:33 +02:00
Salvatore Sanfilippo
33a9836fe3 Merge pull request #3264 from oranagra/bitfield_fix2
fix crash in BITFIELD GET on non existing key or wrong type see #3259
2016-06-16 12:52:36 +02:00
Salvatore Sanfilippo
5d83f6cfde Merge pull request #3274 from MOON-CLJ/fix_promoted_slave
Sentinel: fix check when can't send the command to the promoted slave
2016-06-15 17:24:11 +02:00
Salvatore Sanfilippo
226f679651 Merge pull request #3283 from ideal/unstable
fix mistake in comment in object.c
2016-06-15 15:53:19 +02:00
Salvatore Sanfilippo
bd2cd7059a Merge pull request #3281 from jamespedwards42/unstable
Fix modules intro typos.
2016-06-15 12:51:15 +02:00
antirez
2d86995273 GETRANGE: return empty string with negative, inverted start/end. 2016-06-15 12:48:58 +02:00
antirez
eb45e11496 Remove additional round brackets from fix for #3282. 2016-06-15 12:16:39 +02:00
Salvatore Sanfilippo
001cadc854 Merge pull request #3282 from wenduo/unstable
bitcount bug:return non-zero value when start > end (both negative)
2016-06-15 12:15:34 +02:00
zach shipko
b7b9aa6d9b BSDs don't have -ldl 2016-06-14 13:46:42 +00:00
antirez
41d804d9dc TTL and TYPE LRU access fixed. TOUCH implemented. 2016-06-14 15:33:59 +02:00
antirez
cd8e688226 redis-cli help.h updated. 2016-06-14 14:45:28 +02:00
antirez
5ba9bdec75 Modules: document how to pass config params to modules.
Related to #3293.
2016-06-13 10:05:28 +02:00
antirez
5831dd860a Fix example modules to have the right OnLoad() prototype.
Related to #3293.
2016-06-13 09:57:19 +02:00
antirez
a4bce77e92 Don't assume no padding or specific ordering in moduleLoadQueueEntry structure.
We need to be free to shuffle fields or add more fields in a structure
without breaking code.

Related to issue #3293.
2016-06-13 09:51:06 +02:00
antirez
9a02dac2e8 Free module context after loading.
Now that modules receive RedisModuleString objects on loading, they are
allowed to call the String API, so the context must be released
correctly.

Related to #3293.
2016-06-13 09:45:53 +02:00
antirez
b6cd008508 Make sure modules arguments are raw strings.
Related to PR #3293.
2016-06-13 09:40:28 +02:00
antirez
1ad5c22763 Minor changes to unifor C style to Redis code base for PR #3293. 2016-06-13 09:39:44 +02:00
Salvatore Sanfilippo
e8d5387a44 Merge pull request #3293 from yossigo/module_config
Allow passing arguments to modules on load.
2016-06-13 09:31:59 +02:00
antirez
e71f22f5f2 Fix typo: after -> before. 2016-06-10 10:39:38 +02:00
antirez
e4567f243b Explain why module type names are 9 chars. 2016-06-10 10:36:09 +02:00
Salvatore Sanfilippo
688996f415 Merge pull request #3295 from catwell/pr-1-warnings
fix some compiler warnings
2016-06-10 10:20:28 +02:00
Salvatore Sanfilippo
b4327ae5fe Merge pull request #3294 from yossigo/fix_unload
Fix MODULE UNLOAD crash and/or wrong error message.
2016-06-10 10:18:49 +02:00
antirez
a1684ff1bb Remove tryObjectEncoding() calls from list type.
All lists are now represented via quicklists.
Quicklists are never represented referencing robj structures, so trying
to compress their representation does not make sense. That the new way
is faster was experimentally verified with micro benchmarks in order to
prove that the intuition was correct.
2016-06-10 10:15:37 +02:00
antirez
5beec9743e Merge branch 'unstable' of github.com:/antirez/redis into unstable 2016-06-10 10:12:11 +02:00
Salvatore Sanfilippo
ab73544396 Merge pull request #3296 from catwell/pr-2-variadic-pushx
make RPUSHX and LPUSHX variadic
2016-06-10 10:10:08 +02:00
andyli
93a09877fe fix comment "b>a" to "a > b" 2016-06-10 09:15:26 +02:00
antirez
2a57ad5d90 Fixed typo in Sentinel compareSlavesForPromotion() comment. 2016-06-10 09:15:01 +02:00
antirez
5481336872 Merge branch 'unstable' of github.com:/antirez/redis into unstable 2016-06-10 09:00:02 +02:00
antirez
b664aebda1 Improve timer callback creation comment. 2016-06-08 16:07:32 +02:00
jspraul
4df95e8419 Include 'fd_set' type name
Fix an MSYS2-build-breaking error: unknown type name ‘fd_set’
2016-06-07 16:46:00 -04:00
Yossi Gottlieb
2fd6ca3cf8 Remove gcc warning when redismodule.h is included by a multi-file
module.
2016-06-07 13:31:33 +03:00
Pierre Chapuis
d88c3c77be make RPUSHX and LPUSHX variadic 2016-06-05 16:50:24 +02:00
Pierre Chapuis
b670a16282 remove unused variable 2016-06-05 16:50:17 +02:00
Pierre Chapuis
3e9c20f63b untangle LINSERT and {L,R}PUSHX implementations 2016-06-05 16:50:10 +02:00
Pierre Chapuis
188d90fc87 fix some compiler warnings 2016-06-05 16:48:45 +02:00
Yossi Gottlieb
87312ff781 Fix MODULE UNLOAD crash and/or wrong error message. 2016-06-05 13:27:38 +03:00
Yossi Gottlieb
cc58f11ccc Use RedisModuleString for OnLoad argv. 2016-06-05 13:18:24 +03:00
Yossi Gottlieb
2bd13cf0eb Allow passing arguments to modules on load. 2016-06-05 11:37:24 +03:00
antirez
550fa7e14f modules API.md updated. 2016-06-04 12:55:39 +02:00
antirez
c3f5b6ebf9 Modules: native types doc, 70% done. 2016-06-04 12:54:18 +02:00
antirez
5830d8821b Modules: pool allocator doc. 2016-06-03 18:32:35 +02:00
antirez
31eb8eccef Modules: top comments in helloworld.c and hellotype.c. 2016-06-03 18:19:31 +02:00
antirez
8ec28002be Modules: support for modules native data types. 2016-06-03 18:14:04 +02:00
antirez
27e5f385c1 RDB v8: fix rdbLoadLen() return value. 2016-06-01 20:18:28 +02:00
antirez
e6554bed92 RDB v8: new ZSET storage format with binary doubles. 2016-06-01 12:12:26 +02:00
antirez
4aae4f7d35 RDB v8: ability to save uint64_t lengths. 2016-06-01 11:35:47 +02:00
antirez
2503acfc83 Avoid undefined behavior in BITFIELD implementation.
Probably there is no compiler that will actaully break the code or raise
a signal for unsigned -> signed overflowing conversion, still it was
apparently possible to write it in a more correct way.

All tests passing.
2016-05-31 11:52:07 +02:00
ideal
4067132092 fix mistake comment in object.c 2016-05-30 16:57:36 +08:00
wenduo
41dacdbcbe bitcount bug:return non-zero value when start > end (both negative) 2016-05-30 16:21:08 +08:00
jamespedwards42
3432061cbb
Fix modules intro typos. 2016-05-29 15:53:24 -07:00
Itamar Haber
2866e023f8 Allow SPOP from Lua scripts
The existing `R` flag appears to be sufficient and there's no apparent reason why the command should be blocked.
2016-05-28 20:01:46 +03:00
MOON_CLJ
aa578446ba fix check when can't send the command to the promoted slave 2016-05-26 13:10:12 +08:00
oranagra
5d96b7ed4f check WRONGTYPE in BITFIELD before looping on the operations.
optimization: lookup key only once, and grow at once to the max need
fixes #3259 and #3221, and also an early return if wrongtype is discovered by SET
2016-05-24 23:31:36 +03:00
oranagra
c4433d2a6a fix crash in BITFIELD GET on non existing key or wrong type see #3259
this was a bug in the recent refactoring: bee963c445
2016-05-24 14:52:43 +03:00
oranagra
f3e81de176 fix georadius returns multiple replies 2016-05-23 13:58:50 +03:00
oranagra
8d9d8d16e4 CLIENT error message was out of date 2016-05-23 11:42:21 +03:00
oranagra
5fa711fa37 config set list-max-ziplist-size didn't support negative values, unlike config file 2016-05-22 20:35:14 +03:00
Jan-Erik Rediger
892565f924 Remove debug printing 2016-05-21 13:50:01 +02:00
Dvir Volk
137fd86a61 optimized amFree even further 2016-05-19 13:51:55 +03:00
Dvir Volk
46b07cbb5c Optimized autoMemoryFreed loop 2016-05-19 12:16:14 +03:00
antirez
b09a6b6a5d Fix modules compilation when libc malloc is used.
Compiling Redis worked as a side effect of jemalloc target specifying
-ldl as needed linker options, otherwise it is not provided during
linking and dlopen() API will remain unresolved symbols.
2016-05-18 17:48:06 +02:00
Salvatore Sanfilippo
bafed3ddd6 Merge pull request #3222 from oranagra/more_minir_fixes
minor fixes - mainly signalModifiedKey, and GEORADIUS
2016-05-18 07:50:53 -07:00
antirez
e3edae957b Modules: RM_HashSet() SDS ownership business clarified in comments.
Related to #3239.
2016-05-18 16:30:20 +02:00
Salvatore Sanfilippo
01a83d0a2a Merge pull request #3239 from dvirsky/fix_hashset_crash
fixed bad transfer of ownership in HashSet causing a potential crash
2016-05-18 07:15:15 -07:00
antirez
bee963c445 Code to access object string bytes repeated 3x refactored into 1 function. 2016-05-18 15:35:19 +02:00
antirez
ffd1600ccf Clarify that the LOG_STR_SIZE includes null term. 2016-05-18 15:23:35 +02:00
Salvatore Sanfilippo
4c9c9d726a Merge pull request #3221 from oranagra/bitfield_fix
fix crash in BITFIELD GET when key is integer encoded
2016-05-18 05:53:53 -07:00
Dvir Volk
cfaef8d5d4 fixed bad transfer of ownership in HashSet causing a potential crash 2016-05-17 16:47:36 +03:00
oranagra
283a8125cb reduce struct padding by reordering members 2016-05-16 20:12:11 +03:00
antirez
9aff564045 Modules: initial pool allocator and a LEFTPAD usage example. 2016-05-14 19:42:31 +02:00
antirez
646c958bbd Modules: doc layout improved. 2016-05-10 18:54:58 +02:00
antirez
745845df0a Modules doc: mention the functions not yet documented. 2016-05-10 15:50:21 +02:00
oranagra
77a9144245 fix crash in BITFIELD GET when key is integer encoded 2016-05-10 11:19:45 +03:00
antirez
5daece2ec6 RM_ZsetRangeNext()/Prev() typo in define name leading to crash fixed. 2016-05-10 06:40:11 +02:00
antirez
5f977c3f8b Modules: commandFlagsFromString() top comment back to 80 cols max. 2016-05-10 06:40:11 +02:00
antirez
ef2b4f6496 Trailing spaces removed from moduleCreateArgvFromUserFormat(). 2016-05-10 06:40:11 +02:00
antirez
6250a6b11f Modules: RM_GetClientId() implemented. 2016-05-10 06:40:11 +02:00
Dvir Volk
9a71df505c fixed crash when calling CreateStringFromCallReply on array elements 2016-05-10 06:40:11 +02:00
Itamar Haber
3816f16a53 Avoids reallocating and double String on truncate 2016-05-10 06:40:11 +02:00
Dvir Volk
d41bd233d5 fixed comment formatting in RM_CreateCommand 2016-05-10 06:40:10 +02:00
Ramon Snir
909a707b72 vector of strings is implemented now 2016-05-10 06:40:10 +02:00
Dvir Volk
a00e872560 another small comment fix 2016-05-10 06:40:10 +02:00
Dvir Volk
87de31f968 fixed comment 2016-05-10 06:40:10 +02:00
Dvir Volk
8fc67080a2 second attempt at vector formtting 2016-05-10 06:40:10 +02:00
antirez
7f5e1340f9 Modules: add ZADD_INCR flag to zset increment API. 2016-05-10 06:40:10 +02:00
Itamar Haber
1186f92b1b typo: %s/Emtpy/Empty/g 2016-05-10 06:40:10 +02:00
antirez
227d68094b Modules: command <-> core interface modified to get flags & keys. 2016-05-10 06:40:09 +02:00
Ramon Snir
676a6a4d19 tiny typo in Redis Modules API documentation 2016-05-10 06:40:09 +02:00
Dvir Volk
a1f8e22b79 fixed return value of HashGet (and a slight error in the documentation) 2016-05-10 06:40:09 +02:00
antirez
02c4a6c7f9 Modules: REDISMODULE_POSTPONED_ARRAY_LEN doc. 2016-05-10 06:40:09 +02:00
antirez
42f72210fd Modules: Hash API defines made more uniform. 2016-05-10 06:40:09 +02:00
antirez
9b0556cf10 Modules: Hash type API WIP #2. 2016-05-10 06:40:09 +02:00
antirez
10993ca0d5 Modules: Hash type API WIP #1. 2016-05-10 06:40:09 +02:00
antirez
5bf5fd24c6 Modules: a few fixes for the zset iterator. 2016-05-10 06:40:09 +02:00
antirez
33e1231e53 Modules: postponed array lengths. 2016-05-10 06:40:09 +02:00
antirez
00109e1113 Modules: zset lex iterator #3. 2016-05-10 06:40:09 +02:00
antirez
db3ade22eb Modules: zset lex iterator #2. 2016-05-10 06:40:09 +02:00
antirez
2b04f86ae5 Modules: zset lex iterator #1. 2016-05-10 06:40:08 +02:00
antirez
083f5277c5 Modules: zset iterator redesign #1. 2016-05-10 06:40:08 +02:00
antirez
d998170809 Simple Ruby script to generate reference doc added. 2016-05-10 06:40:08 +02:00
antirez
0fd6d548ca Modules: fix top comments to be user-facing doc quality. About 33% done. 2016-05-10 06:40:08 +02:00
antirez
f362f7a18a Modules: sorted set iterators WIP #3. 2016-05-10 06:40:08 +02:00
antirez
bdbb5a0253 Modules: put zset iterator current element in auto memory pool. 2016-05-10 06:40:08 +02:00
antirez
6eeeda39e9 Modules: sorted set iterators WIP #2. 2016-05-10 06:40:08 +02:00
antirez
eac5a13cb7 Modules: sorted set iterators WIP. 2016-05-10 06:40:08 +02:00
antirez
556d593d37 Remove useless space. 2016-05-10 06:40:08 +02:00
antirez
d5ecedd185 Modules: ZSET API WIP #4. 2016-05-10 06:40:07 +02:00
antirez
e1b34ecf98 Modules: ZSET API WIP #3. 2016-05-10 06:40:07 +02:00
antirez
4457e4acbe Modules: ZSET API WIP #2. 2016-05-10 06:40:07 +02:00
antirez
f199504ac9 Modules: ZSET API WIP. 2016-05-10 06:40:07 +02:00
antirez
11b3df24cb Modules: expire API and documentation. 2016-05-10 06:40:07 +02:00
antirez
f4e0129fa9 Modules: RedisModule_ReplyWithCallReply(). 2016-05-10 06:40:07 +02:00
Itamar Haber
6054089fa8 Stops SPLICE from accepting negative counts 2016-05-10 06:40:07 +02:00
Sun He
2e464bf0b1 modules/RM_StringTruncate: correct reallocate condition 2016-05-10 06:40:06 +02:00
Sun He
3a7b170205 modules/RM_OpenKey: avoid decrRefCount obj twice 2016-05-10 06:40:06 +02:00
Sun He
1868dee6f2 modules/RM_StringSet: set key->value 2016-05-10 06:40:06 +02:00
Sun He
fded8aa4e5 modules: correct protolen 2016-05-10 06:40:06 +02:00
antirez
4efe9e19c1 Add the last break for consistency in moduleCreateCallReplyFromProto. 2016-05-10 06:40:06 +02:00
Dvir Volk
e453d36e1e fixed case in moduleCreateCallReplyFromProto 2016-05-10 06:40:06 +02:00
Dvir Volk
ae5cb3f7d5 renamed RedisModule_ReplyWithNull to RM_ReplyWithNull to fix compilation 2016-05-10 06:40:06 +02:00
antirez
2967c00c2c Modules: RedisModule_ReplyWithNull() implemented. 2016-05-10 06:40:06 +02:00
Dvir Volk
e711a9ac45 fixed the doc with a right function name 2016-05-10 06:40:06 +02:00
Yossi Gottlieb
e443ad9c29 Log loadmodule dlopen() errors. 2016-05-10 06:40:06 +02:00
antirez
85919f80ed Modules: avoid conflict between modules func pointers and dynamic symbols.
In modules we fill a set of function pointers defined in redismodule.h,
populating a set of APIs that are callable from the module. We use this
manual process instead of resorting to dynamic linking so that we have
exact control on how we pass the API to the module, and we can even pass
different functions for the same name, depending on the API version
declared by the module.

However if the function pointers in redismodule.h and the functions
defined in module.c have the same name, they conflict since the core
exports the symbols to the module.

There is probably some compiler flags trick to avoid this, but in order
to be safer in the future and be more easily compatible with different
builidng systems, this commit changes the internal function prefix from
RedisModule_ to RM_, so for example:

    RM_StringSet() will be exported as RedisModule_StringSet()
2016-05-10 06:40:05 +02:00
antirez
6020469452 Modules: remove warnings due to void/function pointer conversion. 2016-05-10 06:40:05 +02:00
Dvir Volk
34f2fb7d8c fixed makefile for linux 2016-05-10 06:40:05 +02:00
antirez
6dead2cff5 Modules: first preview 31 March 2016. 2016-05-10 06:40:05 +02:00
oranagra
9682b616a2 minor fixes - mainly signalModifiedKey, and GEORADIUS 2016-05-09 12:05:33 +03:00
antirez
3b644e82b0 Merge branch 'unstable' of github.com:/antirez/redis into unstable 2016-05-08 18:04:53 +02:00
Salvatore Sanfilippo
b44ad302d2 Merge pull request #732 from evilpacket/remove_dofile
Removes dofile() from Lua
2016-05-08 18:04:41 +02:00
antirez
8eb43bf72c redis-cli: integrate help.h with COMMAND output.
Use the COMMAND output to fill with partial information the built-in
help. This makes redis-cli able to at least complete commands that are
exported by the Redis server it is connected to, but were not available
in the help.h file when the redis-cli binary was compiled.
2016-05-07 13:03:25 +02:00
antirez
2205c465ca Cluster: don't check scripts key slots during AOF loading. 2016-05-05 23:37:08 +02:00
antirez
94dc71ff08 redis-cli: remove debugging message. 2016-05-05 18:05:37 +02:00
antirez
bdbeb07a9e Merge branch 'unstable' of github.com:/antirez/redis into unstable 2016-05-05 17:39:40 +02:00
antirez
68dd1c9155 Revert "Fix commandCommand arity"
This reverts commit 1189a4eae6d009fc0da8d50fd542ba1391542165.

Actually this is wrong, the command can be called without args at all.
2016-05-05 17:36:05 +02:00
Salvatore Sanfilippo
f0fcc36ce1 Merge pull request #2956 from pkulchenko/global-protection-msg-typo
Update global protection error message
2016-05-05 17:26:35 +02:00
Ruben Bridgewater
efa0840707 Fix commandCommand arity 2016-05-05 17:20:14 +02:00
Salvatore Sanfilippo
f5ff91f675 Merge pull request #2998 from danielhtshih/unstable
Fix a possible race condition of sdown event detection if sentinel's connection to master/slave/sentinel became disconnected just after the last PONG and before the next PING.
2016-05-05 17:16:58 +02:00
Salvatore Sanfilippo
0c1f84f0ea Merge pull request #3006 from baishaofei/unstable
fix linux compile Error zmalloc.c:109: error: invalid lvalue in unary `&'
2016-05-05 16:23:47 +02:00
Salvatore Sanfilippo
7b90815fc3 Merge pull request #3008 from badboy/fix-2911
Fix nanosecond conversion
2016-05-05 16:21:21 +02:00
antirez
02db338a82 redis-cli: don't free historyfile, is used later. 2016-05-05 13:58:06 +02:00
antirez
971e3c51b6 Cluster: make getNodeByQuery() responsible of -CLUSTERDOWN errors.
This fixes a bug introduced by d827dbf, and makes the code consistent
with the logic of always allowing, while the cluster is down, commands
that don't target any key.

As a side effect the code is also simpler now.
2016-05-05 11:33:43 +02:00
Salvatore Sanfilippo
330715afd8 Merge pull request #3039 from itamarhaber/patch-3
Fixes a typo in the comments
2016-05-05 10:15:17 +02:00
Salvatore Sanfilippo
a4df156872 Merge pull request #3077 from Palethorn/ipv6-redirect-parse
Fix for #3076 Reverse redirect address parse
2016-05-05 10:13:00 +02:00
antirez
c77b95fd01 Bind both IPv4 and IPv6 or exit with an error by default.
Thanks to @tushar2708 for the PR. I applied a slightly different fix.
Thanks to @cespare for reporting.

Close #3024
Close #3020
2016-05-05 10:02:42 +02:00
Chris Thunes
d827dbfda7 Ensure slots are rechecked on EXEC.
Fixes #2515.
2016-05-05 09:35:20 +02:00
Salvatore Sanfilippo
91b4966783 Merge pull request #3188 from therealbill/unstable
maxmemory_policy fix for #3187
2016-05-05 09:02:25 +02:00
Salvatore Sanfilippo
09153b9127 Merge pull request #3152 from be-hase/fix/check_open_slots
Fix redis-trib.rb
2016-05-05 08:56:28 +02:00
antirez
b632f7846b Minor redis-cli wording change in --help output. 2016-05-04 22:34:26 +02:00
antirez
995b9ffe07 Allow CONFIG GET during loading.
Thanks to @oranagra for the idea of allowing CONFIG GET during loading.
2016-05-04 15:45:45 +02:00
antirez
5500c51083 Command "r" flag removed from commands not accessing the key space.
Thanks to @oranagra for the hint about misplaced 'r' flags.
2016-05-04 15:42:33 +02:00
antirez
840ac20855 DEBUG command self documentation. 2016-05-04 12:45:55 +02:00
Salvatore Sanfilippo
b5352eea51 Merge pull request #3191 from oranagra/minor_fix
Minor fixes found during merge and code review
2016-05-04 09:11:36 +02:00
antirez
2c22f59c3f Reply with error on negative geo radius.
Thanks to @tidwall for reporting.
Close #3194.
2016-05-04 09:00:32 +02:00
antirez
4fdde78c72 New masters with slots are now targets of migration if others are.
This fixes issue #3043.

Before this fix, after a complete resharding of a master slots
to other nodes, the master remains empty and the slaves migrate away
to other masters with non-zero nodes. However the old master now empty,
is no longer considered a target for migration, because the system has
no way to tell it had slaves in the past.

This fix leaves the algorithm used in the past untouched, but adds a
new rule. When a new or old master which is empty and without slaves,
are assigend with their first slot, if other masters in the cluster have
slaves, they are automatically considered to be targets for replicas
migration.
2016-05-02 18:37:30 +02:00
Oran Agra
5e3880a492 various cleanups and minor fixes 2016-04-25 16:49:57 +03:00
Oran Agra
6ed8c28230 dict.c minor optimization 2016-04-25 16:48:25 +03:00
Oran Agra
7b52ef1da2 networking.c minor optimization 2016-04-25 16:48:09 +03:00
Oran Agra
f8909a2579 add DEBUG JEMALLC PURGE and JEMALLOC INFO cleanup 2016-04-25 16:47:42 +03:00
Oran Agra
7ba90225a0 fix small issues in redis 3.2 2016-04-25 14:19:28 +03:00
Oran Agra
b554895715 additional fix to issue #2948 2016-04-25 14:18:40 +03:00
therealbill
14086a46ca fix for #3187
I've renamed maxmemoryToString to evictPolicyToString since that is
more accurate (and easier to mentally connect with the correct data), as
well as updated the function to user server.maxmemory_policy rather than
server.maxmemory. Now with a default config it is actually returning
the correct policy rather than volatile-lru.
2016-04-22 10:43:48 -05:00
Damian Janowski
0b4bb502a2 Fix ZINCRBY return value. 2016-04-18 00:35:54 -03:00
antirez
dda0f37f11 ZREM refactored into proper API. 2016-04-15 15:20:57 +02:00
antirez
6f926c3e83 ZRANK refactored into proper API. 2016-04-15 12:47:03 +02:00
antirez
b73c7af0f4 zsetAdd() API exposed into server.h. 2016-04-14 16:00:08 +02:00
antirez
b1f181a736 ZADD refactored into a proper API. 2016-04-14 12:49:40 +02:00
antirez
e0eb5f6bbf redis-cli preferences and rc file support. 2016-04-13 14:20:41 +02:00
antirez
70b3314141 redis-cli help.h updated. 2016-04-13 12:35:18 +02:00
antirez
d1ddf7e958 redis-cli hints. 2016-04-13 12:34:14 +02:00
antirez
b9feef9ae8 ae.c: Fix delay until next timer event.
This fix was written by Anthony LaTorre.
The old code mis-calculated the amount of time to wait till next event.
2016-04-04 14:13:46 +02:00
antirez
ace780c002 ae.c: comment to explain why we have a useless maxId check. 2016-04-04 12:24:13 +02:00
antirez
67b70a1813 Fix ae.c to avoid timers infinite loop.
This fix was suggested by Anthony LaTorre, that provided also a good
test case that was used to verify the fix.

The problem with the old implementation is that, the time returned by
a timer event (that is the time after it want to run again) is added
to the event *start time*. So if the event takes, in order to run, more
than the time it says it want to be scheduled again for running, an
infinite loop is triggered.
2016-04-04 08:50:58 +02:00
Ryosuke Hasebe
cad9ea5c68 fix variable 2016-03-30 23:09:36 +09:00
Ryosuke Hasebe
d5aa7e2abe fix check_open_slots 2016-03-30 21:56:22 +09:00
antirez
fc843784c3 BITFIELD: Farest bit set is offset+bits-1. Off by one error fixed. 2016-03-02 16:20:28 +01:00
antirez
fe64960ad5 More BITFIELD fixes. Overflow conditional simplified.
See issue #3114.
2016-03-02 15:13:45 +01:00
Salvatore Sanfilippo
235f55344b Merge pull request #3118 from sunheehnus/bitfield-fix-minor-bug
bitops/bitfield: fix length, overflow condition and *sign
2016-03-02 15:12:38 +01:00
Sun He
93cc8baf1a bitops/bitfield: fix length, overflow condition and *sign 2016-03-02 18:11:30 +08:00
antirez
e85d6f22cf Fix INFO commandstats reporting when argv is rewritten.
We want to report the original command in the stats, for example GEOADD,
even when what is actually executed is the ZADD implementation.
2016-03-02 08:56:50 +01:00
antirez
32289d5719 BITFIELD: refactoring & fix of retval on FAIL. 2016-02-29 09:08:46 +01:00
antirez
11745e0981 BITFIELD: Fix #<index> form parsing. 2016-02-26 15:53:29 +01:00
antirez
2800d090a7 BITFIELD: Support #<index> offsets form. 2016-02-26 15:16:24 +01:00
antirez
70af626d61 BITFIELD command initial implementation.
The new bitfield command is an extension to the Redis bit operations,
where not just single bit operations are performed, but the array of
bits composing a string, can be addressed at random, not aligned
offsets, with any width unsigned and signed integers like u8, s5, u10
(up to 64 bit signed integers and 63 bit unsigned integers).

The BITFIELD command supports subcommands that can SET, GET, or INCRBY
those arbitrary bit counters, with multiple overflow semantics.

Trivial and credits:

A similar command was imagined a few times in the past, but for
some reason looked a bit far fetched or not well specified.
Finally the command was proposed again in a clear form by
Yoav Steinberg from Redis Labs, that proposed a set of commands on
arbitrary sized integers stored at bit offsets.

Starting from this proposal I wrote an initial specification of a single
command with sub-commands similar to what Yoav envisioned, using short
names for types definitions, and adding control on the overflow.

This commit is the resulting implementation.

Examples:

    BITFIELD mykey OVERFLOW wrap INCRBY i2 10 -1 GET i2 10
2016-02-26 15:00:19 +01:00
Itamar Haber
b5149f0868 Eliminates engineers near the equator & prime meridian 2016-02-18 15:11:30 -08:00
Itamar Haber
41030ae2de Fixes a typo in a comment 2016-02-18 15:01:34 -08:00
Itamar Haber
4e9c3027b1 Adjusts accuracy for GEODIST 2016-02-18 15:00:39 -08:00
antirez
cf42c48adc addReplyHumanLongDouble() API added.
Send a long double or double as a bulk reply, in a human friendly
format.
2016-02-18 22:08:50 +01:00
antirez
bb75ecddfd New options for GEORADIUS: STORE and STOREDIST.
Related to issue #3019.
2016-02-18 10:24:16 +01:00
antirez
b0ec22f948 Include full paths on RDB/AOF files errors.
Close #3086.
2016-02-15 16:15:01 +01:00
David Cavar
c30ffaab05 Reverse redirect address parse
Fix issue in case the redirect address is in ipv6 format. Parse from behind to extract last part of the response which represents actual port.
2016-02-09 15:04:42 +01:00
Itamar Haber
31a70a8bcf Fixes a typo 2016-02-03 11:04:09 -08:00
Itamar Haber
68e779f34b Adds keyspace notifications for lrem 2016-02-02 09:58:19 -08:00
antirez
cbcffed907 Cluster: redis-trib: support @busport format in ClusterNode. 2016-02-02 08:27:36 +01:00
antirez
b841f3ad1a Cluster: store busport with different separator in CLUSTER NODES.
We need to be able to correctly parse the node address in the case of
IPv6 addresses.
2016-02-02 08:20:04 +01:00
antirez
92b9de2417 Cluster announce: WIP, allow building again. 2016-02-01 18:16:25 +01:00
antirez
e27b9b1cec Merge branch 'cluster-docker' into unstable 2016-02-01 18:01:22 +01:00
antirez
cdbe8a6ae1 Typo ASII -> ASCII fixed in comment. 2016-01-29 12:08:10 +01:00
antirez
c285862621 Cluster: include node IDs in SLOTS output.
CLUSTER SLOTS now includes IDs in the nodes description associated with
a given slot range. Certain client libraries implementations need a way
to reference a node in an unique way, so they were relying on CLUSTER
NODES, that is not a stable API and may change frequently depending on
Redis Cluster future requirements.
2016-01-29 12:00:40 +01:00
antirez
d0a8512eda Cluster anounce-ip/port WIP. 2016-01-29 09:06:37 +01:00
antirez
4abf486ca3 Cluster announce port: set port/bport for myself at startup. 2016-01-29 09:06:37 +01:00
antirez
1c038379f7 Cluster: persist bus port in nodes.conf. 2016-01-29 09:06:37 +01:00
antirez
dc98907e50 Cluster announce ip: take myself->ip always in sync. 2016-01-29 09:06:37 +01:00
antirez
11436b1449 Cluster announce ip / port initial implementation. 2016-01-29 09:06:37 +01:00
antirez
b0939303e6 Cluster announce ip / port configuration handling. 2016-01-29 09:06:37 +01:00
antirez
a455e4b948 Cluster: add announce ip field in messages header. 2016-01-29 09:06:36 +01:00
Itamar Haber
9e46bf22ed Fixes a typo 2016-01-28 21:47:18 +02:00
antirez
5bbb09ed2c Cluster: check packets length before accessing far fields. 2016-01-27 16:35:21 +01:00
antirez
751b5666fb Sentinel: improve handling of known Sentinel instances.
1. Bug #3035 is fixed (NULL pointer access). This was happening with the
   folling set of conditions:

* For some reason one of the Sentinels, let's call it Sentinel_A, changed ID (reconfigured from scratch), but is as the same address at which it used to be.

* Sentinel_A performs a failover and/or has a newer configuration compared to another Sentinel, that we call, Sentinel_B.

* Sentinel_B receives an HELLO message from Sentinel_A, where the address and/or ID is mismatched, but it is reporting a newer configuration for the master they are both monitoring.

2. Sentinels now must have an ID otherwise they are not loaded nor persisted in the configuration. This allows to have conflicting Sentinels with the same address since now the master->sentinels dictionary is indexed by Sentinel ID.

3. The code now detects if a Sentinel is annoucing itself with an IP/port pair already busy (of another Sentinel). The old Sentinel that had the same port/pair is set as having port 0, that means, the address is invalid. We may discover the right address later via HELLO messages.
2016-01-27 16:27:49 +01:00
antirez
5bc7e019e1 Use a smoother running average for avg_ttl in INFO.
Reported here:
https://www.reddit.com/r/redis/comments/42r0i0/avg_ttl_varies_a_lot/
2016-01-26 15:29:30 +01:00
antirez
fe44a7cb60 Cluster: mismatch sender ID log put back at DEBUG level. 2016-01-26 14:21:18 +01:00
antirez
d6c5922f75 Cluster: fix missing ntohs() call to access gossip section port. 2016-01-26 14:18:13 +01:00
antirez
592419b4ca Better address udpate strategy when processing gossip sections.
The change covers the case where:

1. There is a node we can't reach (in fail or pfail state).
2. We see a different address for this node, in the gossip section sent
to us by a node that, instead, is able to talk with the node we cannot
talk to.

In this case it's a good bet to switch to the address reported by this
node, since there was an address switch and it is able to talk with the
node and we are not.

However previosuly this was done in a dangerous way, by initiating an
handshake. The handshake, using the MEET packet, forces the receiver to
join our cluster, and this is not a good idea. If the node in question
really just switched address, but is the same node, it already knows about
us, so we just need to perform an address update and a reconnection.

So with this commit instead we just update the address of the node,
release the node link if any, and attempt to reconnect in the next
clusterCron() cycle.

The commit also improves debugging messages printed by Cluster during
address or ID switches.
2016-01-26 12:32:53 +01:00
antirez
22892ce043 Merge branch 'unstable' of github.com:/antirez/redis into unstable 2016-01-25 15:24:55 +01:00
antirez
bc1558622a Fix memory leak in masterauth config option loading. 2016-01-25 15:24:16 +01:00
Itamar Haber
57f8230234 Removes an extra space in protected mode message 2016-01-20 17:08:28 +02:00
antirez
83b862a30e Minor MIGRATE refactoring.
Centralize cleanup of newargv in a single place.
Add more comments to help a bit following a complex function.

Related to issue #3016.
2016-01-19 09:53:04 +01:00
antirez
f5a1e608cc More variadic MIGRATE fixes.
Another leak was fixed in the case of syntax error by restructuring the
allocation strategy for the two dynamic vectors.

We also make sure to always close the cached socket on I/O errors so that
all the I/O errors are handled the same, even if we had a previously
queued error of a different kind from the destination server.

Thanks to Kevin McGehee. Related to issue #3016.
2016-01-19 09:28:43 +01:00
antirez
00d3a40f82 Various fixes to MIGRATE with multiple keys.
In issue #3016 Kevin McGehee identified multiple very serious issues in
the new implementation of MIGRATE. This commit attempts to restructure
the code in oder to avoid mistakes, an analysis of the new
implementation is in progress in order to check for possible edge cases.
2016-01-18 16:49:21 +01:00
antirez
fc3ca8ff87 Cluster: fix setting nodes slaveof pointer to NULL on node release.
With this commit we preserve the list of nodes that have .slaveof set
to the node, even when the node is turned into a slave, and make sure to
fix the .slaveof pointers to NULL when a node is freed from memory,
regardless of the fact it's a slave or a master.

Basically we try to remember the logical master in the current
configuration even if the logical master advertised it as a slave
already. However we still remember the associations, so that when a node
is freed we can fix them.

This should fix issue #3002.
2016-01-14 17:34:49 +01:00
antirez
a411d557d4 Cluster: clarify node->slave may be NULL. 2016-01-14 11:58:31 +01:00
Jan-Erik Rediger
15dacfec6f Fix nanosecond conversion
1 microsecond = 1000 nanoseconds
1e3 = 1000
10e3 = 10000
2016-01-13 10:22:29 -07:00
antirez
f984cef217 Cluster: fix rebalancing to always empty nodes.
Because of rounding error even with weight=0 sometimes a node was left
with an assigned slot.

Close #3001.
2016-01-13 17:30:53 +01:00
root
28e80bf96d fix linux compile bug 2016-01-13 00:49:28 -08:00
antirez
152e9f67f8 Cluster: redis-trib move_to_slot: don't send SETSLOT to slaves. 2016-01-12 12:16:00 +01:00
Daniel Shih
e6d970534b Fix a possible race condition of sdown detection if the
connection to master/slave/sentinel decames disconnected just after the last PONG and before the next PING.
2016-01-12 17:06:47 +08:00
antirez
c6e508856a Cluster: fix redis-trib reference of variable in warning. 2016-01-11 16:37:51 +01:00
antirez
02c40c9dc2 CLUSTER BUMPEPOCH initial implementation fixed. 2016-01-11 15:39:11 +01:00
antirez
e4eb6c7a5d Cluster: implement redis-trib fix when slot is open without owners.
Still work to do.
2016-01-11 15:05:19 +01:00
antirez
04ae459bc2 Cluster: implement redis-trib fix for uncovered slots. 2016-01-11 15:04:35 +01:00
antirez
b58796f520 Cluster: CLUSTER BUMPEPOCH introduced to help redis-trib fix.
Sometimes during "fixes" we have to setup a new configuration and assign
slots to nodes. With BUMPEPOCH we can make sure the new configuration of
the node will win if there are conflicting configurations (for example
another node is *also* claiming the same slot because the cluster is
totally messed up).
2016-01-11 15:01:14 +01:00
antirez
524be1e465 Cluster: don't allow CLUSTER SETSLOT with slaves. 2016-01-11 15:00:45 +01:00
antirez
f43c794b0b Scripting: handle trailing comments.
This fix, provided by Paul Kulchenko (@pkulchenko), allows the Lua
scripting engine to evaluate statements with a trailing comment like the
following one:

    EVAL "print() --comment" 0

Lua can't parse the above if the string does not end with a newline, so
now a final newline is always added automatically. This does not change
the SHA1 of scripts since the SHA1 is computed on the body we pass to
EVAL, without the other code we add to register the function.

Close #2951.
2016-01-08 15:44:21 +01:00
antirez
e15e518a67 Allow MIGRATE to always be called on local keys for open slots.
Extend the MIGRATE extra freedom to be able to be called in the context
of the local slot, anytime there is a slot open in one or the other
direction (importing or migrating). This is useful for redis-trib to fix
the cluster when it has in an odd state.

Thix fix allows "redis-trib fix" to make its work in certain cases where
previously an error was reported.
2016-01-08 15:04:16 +01:00
antirez
36704d653b Fix typos & grammar in clusterBumpConfigEpochWithoutConsensus() comment. 2016-01-08 12:07:54 +01:00
antirez
7c1a5ff3ce Lua debugger: support direct calls to SCRIPT DEBUG in redis-cli.
Previously it was possible to activate a debugging session only using
the --ldb option in redis-cli. Now calling SCRIPT DEBUG can also
activate the debugging mode without putting the redis-cli in a
desynchronized state.

Related to #2952.
2016-01-08 09:43:16 +01:00
antirez
a75aa4bf92 Lua debugger: fix crash printing nested or deep objects.
Example of offending code:

> script debug yes
OK
> eval "local a = {1} a[1] = a\nprint(a)" 0
1) * Stopped at 1, stop reason = step over
2) -> 1   local a = {1} a[1] = a
> next
1) * Stopped at 2, stop reason = step over
2) -> 2   print(a)
> print

... server crash ...

Close #2955.
2016-01-08 09:14:13 +01:00
antirez
1e7a8f8221 Another typo in protected mode error message. 2016-01-07 22:42:43 +01:00