@@ -1470,32 +1470,56 @@ TEST_F(RdbTest, LoadTwoChunks) {
14701470}
14711471
14721472TEST_F (RdbTest, InterleavedLoad) {
1473+ // must have >1 shards for non inlined path check. find a key that lands in shard 1 by hashing, to
1474+ // test non inlined obj. creation
1475+ ASSERT_GT (shard_set->size (), 1u );
1476+ std::string key;
1477+ for (unsigned i = 0 ; i < 1000 ; ++i) {
1478+ key = StrCat (" x" , i);
1479+ if (Shard (key, shard_set->size ()) == 1 )
1480+ break ;
1481+ }
1482+ ASSERT_EQ (Shard (key, shard_set->size ()), 1u );
1483+
14731484 std::string a1;
1485+ // hash chunk 1
14741486 a1.push_back (RDB_TYPE_HASH);
1475- AppendString (&a1, " a " );
1487+ AppendString (&a1, key );
14761488 AppendLen (&a1, 2 );
14771489 AddKV (&a1, " f1" , " v1" );
14781490
1491+ // string
14791492 std::string b;
14801493 b.push_back (RDB_TYPE_STRING);
14811494 AppendString (&b, " b" );
14821495 AppendString (&b, " plain" );
14831496
1497+ // hash chunk 2
14841498 std::string a2;
14851499 AddKV (&a2, " f2" , " v2" );
14861500
14871501 std::string body;
1488- // interleave - one tag, one plain, then one tag for the same id=1
1502+ // chunk for db 0
14891503 body += MakeTaggedChunk (1 , a1);
1504+ // simple string b=plain
14901505 body += b;
1506+ body.push_back (static_cast <char >(RDB_OPCODE_SELECTDB));
1507+ // switch to db 1
1508+ AppendLen (&body, 1 );
1509+ // back to chunk for db 0
14911510 body += MakeTaggedChunk (1 , a2);
14921511
14931512 auto ec = pp_->at (0 )->Await ([&] { return LoadRdbData (service_.get (), WrapInRdb (body)); });
14941513 ASSERT_FALSE (ec) << ec.message ();
14951514
1496- EXPECT_EQ (Run ({" HGET" , " a" , " f1" }), " v1" );
1497- EXPECT_EQ (Run ({" HGET" , " a" , " f2" }), " v2" );
1515+ EXPECT_EQ (Run ({" SELECT" , " 0" }), " OK" );
1516+ EXPECT_EQ (Run ({" HGET" , key, " f1" }), " v1" );
1517+ EXPECT_EQ (Run ({" HGET" , key, " f2" }), " v2" );
14981518 EXPECT_EQ (Run ({" GET" , " b" }), " plain" );
1519+
1520+ EXPECT_EQ (Run ({" SELECT" , " 1" }), " OK" );
1521+ EXPECT_THAT (Run ({" EXISTS" , key}), IntArg (0 ));
1522+ EXPECT_EQ (Run ({" SELECT" , " 0" }), " OK" );
14991523}
15001524
15011525TEST_F (RdbTest, ChunksAroundJournalOffset) {
0 commit comments