5956 Commits

Author SHA1 Message Date
antirez
cc88e14c87 dict.c: fix dictGenericDelete() return ASAP condition.
Recently we moved the "return ASAP" condition for the Delete() function
from checking .size to checking .used, which is smarter, however while
testing the first table alone always works to ensure the dict is totally
emtpy, when we test the .size field, testing .used requires testing both
T0 and T1, since a rehashing could be in progress.
2016-09-20 17:22:30 +02:00
antirez
de5aa838dd Clear child data when opening the pipes.
This is important both to reset the magic to 0, so that it will not
match if the structure is not explicitly set, and to initialize other
things we may add like counters and such.
2016-09-19 14:11:17 +02:00
antirez
5ac4559da3 Child -> Parent pipe for COW info transferring. 2016-09-19 13:45:20 +02:00
antirez
477d5e0c70 zmalloc: Make fp var non local to fix build. 2016-09-19 10:34:39 +02:00
antirez
1525b7380f zmalloc: zmalloc_get_smap_bytes_by_field() modified to work for any PID.
The goal is to get copy-on-write amount of the child from the parent.
2016-09-19 10:28:42 +02:00
antirez
f8eb871244 redis-cli: "allocator-stats" -> "malloc-stats".
It was changed in Redis but not in redis-cli.
Thanks to @oranagra for signaling.
2016-09-19 09:47:35 +02:00
antirez
0bbc678616 Typo fixed from MEMORY DOCTOR output. 2016-09-16 16:52:00 +02:00
antirez
18a863b911 Surround allocator name with quotes in MEMORY DOCTOR output. 2016-09-16 16:40:25 +02:00
antirez
e31078c7b1 MEMORY DOCTOR initial implementation. 2016-09-16 16:36:53 +02:00
antirez
29a75e3d62 Provide percentage of memory peak used info. 2016-09-16 10:43:19 +02:00
oranagra
00c0c40ba5 add zmalloc used mem to DEBUG SDSLEN 2016-09-16 10:29:27 +02:00
antirez
03c1271cf2 Memory related subcommands of DEBUG moved to MEMORY. 2016-09-16 10:26:23 +02:00
antirez
d28b77b15f Group MEMORY command related APIs together in the source code. 2016-09-16 10:12:04 +02:00
antirez
65281a94a5 objectComputeSize(): skiplist nodes have different sizes.
The size of the node depends on the node level, however it is not stored
into the node itself, is an implicit information, so we use
zmalloc_size() in order to compute the sorted set size.
2016-09-15 17:43:13 +02:00
antirez
a08f8acfc4 MEMORY command: HELP + dataset percentage (like in INFO). 2016-09-15 17:33:16 +02:00
antirez
033a49e23d MEMORY USAGE: SAMPLES option added + fixes to size computation.
The new SAMPLES option is added, defaulting to 5, and with 0 being a
special value to scan the whole set of elements.

Fixes to the object size computation were made since the original PR
assumed data structures still contaning robj structures, while now after
the lazyfree changes, are all SDS strings.
2016-09-15 15:25:14 +02:00
antirez
a427affe30 INFO: new memory reporting fields added. 2016-09-15 10:33:23 +02:00
antirez
2eeedfe97f C struct memoh renamed redisMemOverhead. API prototypes added. 2016-09-15 09:44:07 +02:00
antirez
8a81227859 MEMORY OVERHEAD refactored into a generic API. 2016-09-15 09:37:55 +02:00
antirez
42acf62e5f dict.c: dictReplaceRaw() -> dictAddOrFind().
What they say about "naming things" in programming?
2016-09-14 16:43:38 +02:00
antirez
28942ddac7 Trim comment to 80 cols. 2016-09-14 16:41:05 +02:00
antirez
e027e9e85d Apply the new dictUnlink() where possible.
Optimizations suggested and originally implemented by @oranagra.
Re-applied by @antirez using the modified API.
2016-09-14 16:37:53 +02:00
oranagra
40cf4d9a0a dict.c: introduce dictUnlink().
Notes by @antirez:

This patch was picked from a larger commit by Oran and adapted to change
the API a bit. The basic idea is to avoid double lookups when there is
to use the value of the deleted entry.

BEFORE:

    entry = dictFind( ... ); /* 1st lookup. */
    /* Do somethjing with the entry. */
    dictDelete(...);         /* 2nd lookup. */

AFTER:

    entry = dictUnlink( ... ); /* 1st lookup. */
    /* Do somethjing with the entry. */
    dictFreeUnlinkedEntry(entry); /* No lookups!. */
2016-09-14 12:18:59 +02:00
antirez
a114054182 MEMORY OVERHEAD implemented (using Oran Agra initial implementation).
This code was extracted from @oranagra PR #3223 and modified in order
to provide only certain amounts of information compared to the original
code. It was also moved from DEBUG to the newly introduced MEMORY
command. Thanks to Oran for the implementation and the PR.

It implements detailed memory usage stats that can be useful in both
provisioning and troubleshooting memory usage in Redis.
2016-09-13 17:39:25 +02:00
antirez
33ed0a71cd objectComputeSize(): estimate collections sampling N elements.
For most tasks, we need the memory estimation to be O(1) by default.
This commit also implements an initial MEMORY command.
Note that objectComputeSize() takes the number of samples to check as
argument, so MEMORY should be able to get the sample size as option
to make precision VS CPU tradeoff tunable.

Related to: PR #3223.
2016-09-13 10:28:23 +02:00
oranagra
d028418790 Adding objectComputeSize() function. 2016-09-12 16:36:59 +02:00
oranagra
1ef16debfb Optimize repeated keyname hashing.
(Change cherry-picked and modified by @antirez from a larger commit
provided by @oranagra in PR #3223).
2016-09-12 13:19:05 +02:00
Salvatore Sanfilippo
53530e09c5 Merge pull request #3492 from wyxustcsa09/fix-memory
fix memory error on module unload
2016-09-09 16:05:06 +02:00
antirez
6a47311dfc Merge branch 'unstable' of github.com:antirez/redis into unstable 2016-09-09 16:01:43 +02:00
antirez
c72557349a Example modules: Add C99 standard to cflags. 2016-09-09 16:01:29 +02:00
antirez
125deba083 Merge branch 'aofrdb' into unstable 2016-09-09 15:03:21 +02:00
antirez
9edd074a1d fix the fix for the TCP binding.
This commit attempts to fix a problem with PR #3467.
2016-09-09 14:59:48 +02:00
oranagra
c7dbd7d6c5 fix tcp binding when IPv6 is unsupported 2016-09-09 14:59:21 +02:00
antirez
fef4253c31 debug.c: no need to define _GNU_SOURCE, is defined in fmacros.h. 2016-09-09 11:15:10 +02:00
antirez
de5ac38179 crash log - improve code dump with more info and called symbols. 2016-09-09 11:00:19 +02:00
wyx
3e4e2fd08a fix memory error on module unload 2016-09-09 10:22:57 +08:00
oranagra
7698b97ca5 crash log - add hex dump of function code 2016-09-08 14:14:57 +02:00
antirez
229466fdf1 dict.c benchmark minor improvements. 2016-09-07 15:28:40 +02:00
antirez
259a909168 dict.c benchmark: mixed del/insert benchmark. 2016-09-07 12:34:53 +02:00
antirez
a65fd55d3f dict.c benchmark: finish rehashing before testing lookups. 2016-09-07 11:06:03 +02:00
antirez
b97146827d dict.c benchmark improvements. 2016-09-07 10:53:47 +02:00
antirez
bd8a490194 dict.c benchmark: take optional count argument. 2016-09-07 10:44:29 +02:00
antirez
ab03414ea5 dict.c benchmark. 2016-09-07 10:33:15 +02:00
antirez
b462b22e59 Fix rdb.c var types when calling rdbLoadLen().
Technically as soon as Redis 64 bit gets proper support for loading
collections and/or DBs with more than 2^32 elements, the 32 bit version
should be modified in order to check if what we read from rdbLoadLen()
overflows. This would only apply to huge RDB files created with a 64 bit
instance and later loaded into a 32 bit instance.
2016-09-01 11:08:44 +02:00
antirez
982a34d067 sds: don't check for impossible string size in 32 bit systems. 2016-09-01 11:04:22 +02:00
antirez
cf5154f72e RDB AOF preamble: test it in the aofrw unit. 2016-08-24 15:39:39 +02:00
antirez
cfe0810936 Document RDB preamble in AOF rewrites in redis.conf. 2016-08-24 15:33:44 +02:00
antirez
02a360eca0 Sentinel example config: warn about protected mode. 2016-08-11 19:53:12 +02:00
antirez
982df150f8 RDB AOF preamble: WIP 4 (Mixed RDB/AOF loading). 2016-08-11 15:42:28 +02:00
antirez
96d57f8d55 RDB AOF preamble: WIP 3 (RDB loading refactoring). 2016-08-11 15:27:29 +02:00