@@ -437,7 +437,7 @@ ebuckets *estoreGetBucket(estore *es, int slot) {
437
437
size_t estoreMemUsage (estore * es ) {
438
438
if (es == NULL ) return 0 ;
439
439
440
- size_t mem = sizeof (* es );
440
+ size_t mem = sizeof (estore ); /* Size of the estore structure */
441
441
mem += sizeof (ebuckets ) * es -> num_buckets ; /* Buckets array */
442
442
if (!server .cluster_enabled ) {
443
443
mem += ebMemUsage (es -> buckets + 0 , es -> bucket_type );
@@ -1482,7 +1482,7 @@ int expireTest(int argc, char **argv, int flags) {
1482
1482
TEST ("estoreGetStats returns correct stats in non-clustered mode" ) {
1483
1483
server .cluster_enabled = 0 ;
1484
1484
1485
- estore * es = estoreCreate (& testEbType , 1 ); /* only one bucket */
1485
+ estore * es = estoreCreate (& testEbType , 0 ); /* only one bucket */
1486
1486
1487
1487
TestKVObj * kv1 = zmalloc (sizeof (TestKVObj ));
1488
1488
estoreAdd (es , (kvobj * )kv1 , 0 , 1 );
@@ -1512,7 +1512,7 @@ int expireTest(int argc, char **argv, int flags) {
1512
1512
TEST ("estoreGetStats returns combined stats in clustered mode" ) {
1513
1513
server .cluster_enabled = 1 ;
1514
1514
1515
- estore * es = estoreCreate (& testEbType , 2 ); /* two buckets */
1515
+ estore * es = estoreCreate (& testEbType , 1 ); /* two buckets */
1516
1516
1517
1517
/* Add objects to different buckets */
1518
1518
TestKVObj * kv1 = zmalloc (sizeof (TestKVObj ));
@@ -1546,6 +1546,59 @@ int expireTest(int argc, char **argv, int flags) {
1546
1546
estoreRelease (es );
1547
1547
}
1548
1548
1549
+ TEST ("estoreMemUsage computes memory correctly in non-cluster mode" ) {
1550
+ server .cluster_enabled = 0 ;
1551
+
1552
+ estore * es = estoreCreate (& testEbType , 1 ); /* 2 buckets */
1553
+
1554
+ TestKVObj * kv1 = zmalloc (sizeof (TestKVObj ));
1555
+ TestKVObj * kv2 = zmalloc (sizeof (TestKVObj ));
1556
+
1557
+ estoreAdd (es , (kvobj * )kv1 , 0 , 1 );
1558
+ estoreAdd (es , (kvobj * )kv2 , 0 , 2 );
1559
+
1560
+ size_t expected = sizeof (estore ) + sizeof (ebuckets ) * 2 ; /* Size of the estore structure + buckets array */
1561
+ expected += ebMemUsage (es -> buckets + 0 , es -> bucket_type ); /* Only one bucket considered */
1562
+
1563
+ size_t actual = estoreMemUsage (es );
1564
+ assert (actual == expected );
1565
+
1566
+ zfree (kv1 );
1567
+ zfree (kv2 );
1568
+ estoreRelease (es );
1569
+ }
1570
+
1571
+ TEST ("estoreMemUsage computes memory correctly in cluster mode" ) {
1572
+ server .cluster_enabled = 1 ;
1573
+
1574
+ estore * es = estoreCreate (& testEbType , 2 ); /* 4 buckets */
1575
+
1576
+ TestKVObj * kv1 = zmalloc (sizeof (TestKVObj ));
1577
+ TestKVObj * kv2 = zmalloc (sizeof (TestKVObj ));
1578
+ TestKVObj * kv3 = zmalloc (sizeof (TestKVObj ));
1579
+ TestKVObj * kv4 = zmalloc (sizeof (TestKVObj ));
1580
+
1581
+ estoreAdd (es , (kvobj * )kv1 , 0 , 3 );
1582
+ estoreAdd (es , (kvobj * )kv2 , 1 , 4 );
1583
+ estoreAdd (es , (kvobj * )kv3 , 2 , 5 );
1584
+ estoreAdd (es , (kvobj * )kv4 , 3 , 6 );
1585
+
1586
+ size_t expected = sizeof (estore ) + sizeof (ebuckets ) * 4 ;
1587
+ for (int i = 0 ; i < 4 ; i ++ ) {
1588
+ expected += ebMemUsage (es -> buckets + i , es -> bucket_type );
1589
+ }
1590
+
1591
+ size_t actual = estoreMemUsage (es );
1592
+ assert (actual == expected );
1593
+
1594
+ zfree (kv1 );
1595
+ zfree (kv2 );
1596
+ zfree (kv3 );
1597
+ zfree (kv4 );
1598
+ estoreRelease (es );
1599
+ }
1600
+
1601
+
1549
1602
return 0 ;
1550
1603
}
1551
1604
#endif
0 commit comments