Commit Graph

5945 Commits

Author SHA1 Message Date
antirez 78f35f8d2c Memory related subcommands of DEBUG moved to MEMORY. 2016-09-16 10:26:23 +02:00
antirez 123891dbbf Group MEMORY command related APIs together in the source code. 2016-09-16 10:12:04 +02:00
antirez adcfb77b5b 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 e9629e148b MEMORY command: HELP + dataset percentage (like in INFO). 2016-09-15 17:33:16 +02:00
antirez 5443726d4d 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 7229af3898 INFO: new memory reporting fields added. 2016-09-15 10:33:23 +02:00
antirez bf2624ea99 C struct memoh renamed redisMemOverhead. API prototypes added. 2016-09-15 09:44:07 +02:00
antirez be5439bde3 MEMORY OVERHEAD refactored into a generic API. 2016-09-15 09:37:55 +02:00
antirez 09a50d34a2 dict.c: dictReplaceRaw() -> dictAddOrFind().
What they say about "naming things" in programming?
2016-09-14 16:43:38 +02:00
antirez 041ab04419 Trim comment to 80 cols. 2016-09-14 16:41:05 +02:00
antirez a636aeac07 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 afcbcc0e58 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 8c84c962cf 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 89dec6921d 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 8c24325f8f Adding objectComputeSize() function. 2016-09-12 16:36:59 +02:00
oranagra 68bf45fa1e 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 d680eb6dbd Merge pull request #3492 from wyxustcsa09/fix-memory
fix memory error on module unload
2016-09-09 16:05:06 +02:00
antirez c6dc8d5288 Merge branch 'unstable' of github.com:antirez/redis into unstable 2016-09-09 16:01:43 +02:00
antirez 56dba3adcc Example modules: Add C99 standard to cflags. 2016-09-09 16:01:29 +02:00
antirez 3793afa0ba Merge branch 'aofrdb' into unstable 2016-09-09 15:03:21 +02:00
antirez f9624813af 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 92038286e8 fix tcp binding when IPv6 is unsupported 2016-09-09 14:59:21 +02:00
antirez d35deb2327 debug.c: no need to define _GNU_SOURCE, is defined in fmacros.h. 2016-09-09 11:15:10 +02:00
antirez 6211e77ab6 crash log - improve code dump with more info and called symbols. 2016-09-09 11:00:19 +02:00
wyx f9c9b4bf4c fix memory error on module unload 2016-09-09 10:22:57 +08:00
oranagra 24811fcb1b crash log - add hex dump of function code 2016-09-08 14:14:57 +02:00
antirez 0d179d17ba dict.c benchmark minor improvements. 2016-09-07 15:28:40 +02:00
antirez bd6c4cade6 dict.c benchmark: mixed del/insert benchmark. 2016-09-07 12:34:53 +02:00
antirez 0f708ab2a9 dict.c benchmark: finish rehashing before testing lookups. 2016-09-07 11:06:03 +02:00
antirez ed6a4517f5 dict.c benchmark improvements. 2016-09-07 10:53:47 +02:00
antirez 1074f73629 dict.c benchmark: take optional count argument. 2016-09-07 10:44:29 +02:00
antirez 91a59e03a8 dict.c benchmark. 2016-09-07 10:33:15 +02:00
antirez 57a0db9495 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 9f76d82689 sds: don't check for impossible string size in 32 bit systems. 2016-09-01 11:04:22 +02:00
antirez dacb69ed00 RDB AOF preamble: test it in the aofrw unit. 2016-08-24 15:39:39 +02:00
antirez 764cc69e2b Document RDB preamble in AOF rewrites in redis.conf. 2016-08-24 15:33:44 +02:00
antirez e0d4146620 Sentinel example config: warn about protected mode. 2016-08-11 19:53:12 +02:00
antirez 543e25efa6 RDB AOF preamble: WIP 4 (Mixed RDB/AOF loading). 2016-08-11 15:42:28 +02:00
antirez f1c32f0dcb RDB AOF preamble: WIP 3 (RDB loading refactoring). 2016-08-11 15:27:29 +02:00
antirez feda52381d RDB AOF preamble: WIP 2. 2016-08-09 16:41:40 +02:00
antirez 4426cb11e2 RDB AOF preamble: WIP 1. 2016-08-09 11:07:32 +02:00
Salvatore Sanfilippo 9f779b33b5 Merge pull request #3340 from rojingeorge/unstable
Display the nodes' proper summary once the cluster is created using redis-trib
2016-08-05 15:10:41 +02:00
Salvatore Sanfilippo c5414cef71 Merge pull request #3429 from guoxiao/warning
Use the standard predefined identifier __func__ (since C99)
2016-08-04 10:25:53 +02:00
Guo Xiao 4bd72ab729 Use the standard predefined identifier __func__ (since C99)
Fix warning: ISO C does not support '__FUNCTION__' predefined identifier
[-Wpedantic]
2016-08-04 15:12:12 +08:00
antirez e7f1798179 Modules: basic call/reply tests in test module. 2016-08-03 18:10:11 +02:00
antirez 13f18d2b17 Modules: handle NULL replies more gracefully.
After all crashing at every API misuse makes everybody's life more
complex.
2016-08-03 18:09:36 +02:00
antirez a81a92ca2c Security: Cross Protocol Scripting protection.
This is an attempt at mitigating problems due to cross protocol
scripting, an attack targeting services using line oriented protocols
like Redis that can accept HTTP requests as valid protocol, by
discarding the invalid parts and accepting the payloads sent, for
example, via a POST request.

For this to be effective, when we detect POST and Host: and terminate
the connection asynchronously, the networking code was modified in order
to never process further input. It was later verified that in a
pipelined request containing a POST command, the successive commands are
not executed.
2016-08-03 11:12:32 +02:00
antirez ede6e22cd3 Fix comment over 80 cols. 2016-08-03 10:56:26 +02:00
antirez 04340e1ff1 Modules: initial draft for a testing module. 2016-08-03 10:23:03 +02:00
antirez 7829e4ed2c Modules: StringAppendBuffer() and ability to retain strings.
RedisModule_StringRetain() allows, when automatic memory management is
on, to keep string objects living after the callback returns. Can also
be used in order to use Redis reference counting of objects inside
modules.

The reason why this is useful is that sometimes when implementing new
data types we want to reference RedisModuleString objects inside the
module private data structures, so those string objects must be valid
after the callback returns even if not referenced inside the Redis key
space.
2016-08-02 15:29:04 +02:00