@@ -29,6 +29,7 @@ extern "C" {
29
29
#include " base/logging.h"
30
30
#include " core/bloom.h"
31
31
#include " core/json/json_object.h"
32
+ #include " core/qlist.h"
32
33
#include " core/size_tracking_channel.h"
33
34
#include " core/sorted_map.h"
34
35
#include " core/string_map.h"
@@ -168,12 +169,10 @@ uint8_t RdbObjectType(const PrimeValue& pv) {
168
169
case OBJ_STRING:
169
170
return RDB_TYPE_STRING;
170
171
case OBJ_LIST:
171
- if (compact_enc == OBJ_ENCODING_QUICKLIST) {
172
- if (absl::GetFlag (FLAGS_list_rdb_encode_v2))
173
- return RDB_TYPE_LIST_QUICKLIST_2;
174
- return RDB_TYPE_LIST_QUICKLIST;
172
+ if (compact_enc == OBJ_ENCODING_QUICKLIST || compact_enc == kEncodingQL2 ) {
173
+ return absl::GetFlag (FLAGS_list_rdb_encode_v2) ? RDB_TYPE_LIST_QUICKLIST_2
174
+ : RDB_TYPE_LIST_QUICKLIST;
175
175
}
176
-
177
176
break ;
178
177
case OBJ_SET:
179
178
if (compact_enc == kEncodingIntSet )
@@ -436,12 +435,21 @@ error_code RdbSerializer::SaveObject(const PrimeValue& pv) {
436
435
437
436
error_code RdbSerializer::SaveListObject (const PrimeValue& pv) {
438
437
/* Save a list value */
439
- DCHECK_EQ (OBJ_ENCODING_QUICKLIST, pv.Encoding ());
440
- const quicklist* ql = reinterpret_cast <const quicklist*>(pv.RObjPtr ());
441
- quicklistNode* node = ql->head ;
442
- DVLOG (2 ) << " Saving list of length " << ql->len ;
443
-
444
- RETURN_ON_ERR (SaveLen (ql->len ));
438
+ size_t len = 0 ;
439
+ const quicklistNode* node = nullptr ;
440
+
441
+ if (pv.Encoding () == OBJ_ENCODING_QUICKLIST) {
442
+ const quicklist* ql = reinterpret_cast <const quicklist*>(pv.RObjPtr ());
443
+ node = ql->head ;
444
+ DVLOG (2 ) << " Saving list of length " << ql->len ;
445
+ len = ql->len ;
446
+ } else {
447
+ DCHECK_EQ (pv.Encoding (), kEncodingQL2 );
448
+ QList* ql = reinterpret_cast <QList*>(pv.RObjPtr ());
449
+ node = ql->Head ();
450
+ len = ql->noded_count ();
451
+ }
452
+ RETURN_ON_ERR (SaveLen (len));
445
453
446
454
while (node) {
447
455
DVLOG (3 ) << " QL node (encoding/container/sz): " << node->encoding << " /" << node->container
@@ -759,7 +767,7 @@ error_code RdbSerializer::SaveListPackAsZiplist(uint8_t* lp) {
759
767
return ec;
760
768
}
761
769
762
- error_code RdbSerializer::SavePlainNodeAsZiplist (quicklistNode* node) {
770
+ error_code RdbSerializer::SavePlainNodeAsZiplist (const quicklistNode* node) {
763
771
uint8_t * zl = ziplistNew ();
764
772
zl = ziplistPush (zl, node->entry , node->sz , ZIPLIST_TAIL);
765
773
0 commit comments