@@ -275,7 +275,7 @@ func TestPebbleStore_SnapshotRestoreLargeValues(t *testing.T) {
275275
276276 s2 , err := NewPebbleStore (dir2 )
277277 require .NoError (t , err )
278- defer s2 .Close ()
278+ defer func () { assert . NoError ( t , s2 .Close ()) } ()
279279
280280 require .NoError (t , s2 .Restore (bytes .NewReader (raw .Bytes ())))
281281
@@ -594,3 +594,44 @@ func TestMVCCStore_ApplyMutations_ValueTooLarge(t *testing.T) {
594594 require .Error (t , err )
595595 assert .ErrorIs (t , err , ErrValueTooLarge )
596596}
597+
598+ // TestPebbleStore_SnapshotRestore_MaxSizeKey verifies that a key of exactly
599+ // maxSnapshotKeySize bytes survives a Snapshot()+Restore() round-trip.
600+ // The encoded on-disk Pebble key is maxSnapshotKeySize+timestampSize bytes;
601+ // previously the restore path used maxSnapshotKeySize as the limit and would
602+ // reject this key.
603+ func TestPebbleStore_SnapshotRestore_MaxSizeKey (t * testing.T ) {
604+ dir , err := os .MkdirTemp ("" , "pebble-maxkey-snap-*" )
605+ require .NoError (t , err )
606+ defer os .RemoveAll (dir )
607+
608+ s , err := NewPebbleStore (dir )
609+ require .NoError (t , err )
610+ defer func () { assert .NoError (t , s .Close ()) }()
611+
612+ ctx := context .Background ()
613+ bigKey := bytes .Repeat ([]byte ("k" ), maxSnapshotKeySize )
614+ require .NoError (t , s .PutAt (ctx , bigKey , []byte ("val" ), 1 , 0 ))
615+
616+ snap , err := s .Snapshot ()
617+ require .NoError (t , err )
618+ defer func () { assert .NoError (t , snap .Close ()) }()
619+
620+ var buf bytes.Buffer
621+ _ , err = snap .WriteTo (& buf )
622+ require .NoError (t , err )
623+
624+ dir2 , err := os .MkdirTemp ("" , "pebble-maxkey-restore-*" )
625+ require .NoError (t , err )
626+ defer os .RemoveAll (dir2 )
627+
628+ s2 , err := NewPebbleStore (dir2 )
629+ require .NoError (t , err )
630+ defer func () { assert .NoError (t , s2 .Close ()) }()
631+
632+ require .NoError (t , s2 .Restore (bytes .NewReader (buf .Bytes ())))
633+
634+ got , err := s2 .GetAt (ctx , bigKey , 1 )
635+ require .NoError (t , err )
636+ assert .Equal (t , []byte ("val" ), got )
637+ }
0 commit comments