Skip to content

Commit 7a5584b

Browse files
committed
Add test case and Address Ping Comment
Signed-off-by: hwware <[email protected]>
1 parent a01e683 commit 7a5584b

File tree

5 files changed

+25
-10
lines changed

5 files changed

+25
-10
lines changed

src/config.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2509,7 +2509,7 @@ static int updateMaxmemoryReserved(const char **err) {
25092509
server.maxmemory_reserved_scale = 60;
25102510
}
25112511
}
2512-
calculateMaxAvailableMemory();
2512+
updateMaxAvailableMemory();
25132513
return 1;
25142514
}
25152515

@@ -2524,7 +2524,7 @@ static int updateMaxmemory(const char **err) {
25242524
"depending on the maxmemory-policy.",
25252525
server.maxmemory, used);
25262526
}
2527-
calculateMaxAvailableMemory();
2527+
updateMaxAvailableMemory();
25282528
startEvictionTimeProc();
25292529
}
25302530
return 1;

src/evict.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -398,16 +398,12 @@ int getMaxmemoryState(size_t *total, size_t *logical, size_t *tofree, float *lev
398398
if (total) *total = mem_reported;
399399

400400
/* We may return ASAP if there is no need to compute the level. */
401-
if (!server.maxmemory) {
401+
if (!server.maxmemory_available) {
402402
if (level) *level = 0;
403403
return C_OK;
404404
}
405405

406-
if (server.maxmemory_reserved_scale) {
407-
if (mem_reported <= server.maxmemory_available && !level) return C_OK;
408-
} else if (mem_reported <= server.maxmemory && !level) {
409-
return C_OK;
410-
}
406+
if (mem_reported <= server.maxmemory_available && !level) return C_OK;
411407

412408
/* Remove the size of replicas output buffers and AOF buffer from the
413409
* count of used memory. */

src/server.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2622,7 +2622,7 @@ void initServer(void) {
26222622
resetReplicationBuffer();
26232623

26242624
if (server.maxmemory) {
2625-
calculateMaxAvailableMemory();
2625+
updateMaxAvailableMemory();
26262626
}
26272627

26282628
/* Make sure the locale is set on startup based on the config file. */

src/server.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3012,7 +3012,7 @@ void trimStringObjectIfNeeded(robj *o, int trim_small_values);
30123012
static inline int canUseSharedObject(void) {
30133013
return server.maxmemory == 0 || !(server.maxmemory_policy & MAXMEMORY_FLAG_NO_SHARED_INTEGERS);
30143014
}
3015-
static inline void calculateMaxAvailableMemory(void) {
3015+
static inline void updateMaxAvailableMemory(void) {
30163016
server.maxmemory_available = (unsigned long long)server.maxmemory / 100.0 * (100 - server.maxmemory_reserved_scale);
30173017
}
30183018
#define sdsEncodedObject(objptr) (objptr->encoding == OBJ_ENCODING_RAW || objptr->encoding == OBJ_ENCODING_EMBSTR)

tests/unit/maxmemory.tcl

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,25 @@ start_server {tags {"maxmemory" "external:skip"}} {
145145
}
146146

147147
start_server {tags {"maxmemory external:skip"}} {
148+
149+
test "maxmemory-reserved-scale" {
150+
r flushdb
151+
r config set maxmemory 10mb
152+
set current_dbsize 0
153+
154+
foreach scale_value {30 10 0} {
155+
r config set maxmemory-reserved-scale $scale_value
156+
# fill 20mb using 200 keys of 100kb
157+
catch { for {set j 0} {$j < 200} {incr j} {
158+
r setrange $j 100000 x
159+
}} e
160+
assert_match {*OOM*} $e
161+
assert_lessthan $current_dbsize [r dbsize]
162+
set current_dbsize [r dbsize]
163+
}
164+
r flushdb
165+
}
166+
148167
test "Without maxmemory small integers are shared" {
149168
r config set maxmemory 0
150169
r set a 1

0 commit comments

Comments
 (0)