@@ -1237,55 +1237,6 @@ func TestRevCacheOnDemand(t *testing.T) {
12371237 testCtx , testCtxCancel := context .WithCancel (base .TestCtx (t ))
12381238 defer testCtxCancel ()
12391239
1240- for i := 0 ; i < 2 ; i ++ {
1241- docID := fmt .Sprintf ("extraDoc%d" , i )
1242- revID , _ , err := collection .Put (ctx , docID , Body {"fake" : "body" })
1243- require .NoError (t , err )
1244- go func () {
1245- for {
1246- select {
1247- case <- testCtx .Done ():
1248- return
1249- default :
1250- _ , err = db .revisionCache .Get (ctx , docID , revID , collection .GetCollectionID (), RevCacheOmitDelta ) //nolint:errcheck
1251- }
1252- }
1253- }()
1254- }
1255- log .Printf ("Updating doc to trigger on-demand import" )
1256- err = collection .dataStore .Set (docID , 0 , nil , []byte (`{"ver": "2"}` ))
1257- require .NoError (t , err )
1258- log .Printf ("Calling getRev for %s, %s" , docID , revID )
1259- rev , err := collection .getRev (ctx , docID , revID , 0 , nil )
1260- require .Error (t , err )
1261- if base .IsEnterpriseEdition () {
1262- fmt .Println ("here" )
1263- }
1264- require .ErrorContains (t , err , "missing" )
1265- // returns empty doc rev
1266- assert .Equal (t , "" , rev .DocID )
1267- }
1268-
1269- func TestRevCacheOnDemandMemoryEviction (t * testing.T ) {
1270- base .SkipImportTestsIfNotEnabled (t )
1271-
1272- dbcOptions := DatabaseContextOptions {
1273- RevisionCacheOptions : & RevisionCacheOptions {
1274- MaxItemCount : 20 ,
1275- ShardCount : 1 ,
1276- MaxBytes : 112 , // equivalent to max size 2 items
1277- },
1278- }
1279- db , ctx := SetupTestDBWithOptions (t , dbcOptions )
1280- defer db .Close (ctx )
1281- collection , ctx := GetSingleDatabaseCollectionWithUser (ctx , t , db )
1282- docID := "doc1"
1283- revID , _ , err := collection .Put (ctx , docID , Body {"ver" : "1" })
1284- require .NoError (t , err )
1285-
1286- testCtx , testCtxCancel := context .WithCancel (base .TestCtx (t ))
1287- defer testCtxCancel ()
1288-
12891240 for i := 0 ; i < 2 ; i ++ {
12901241 docID := fmt .Sprintf ("extraDoc%d" , i )
12911242 revID , _ , err := collection .Put (ctx , docID , Body {"fake" : "body" })
@@ -1310,7 +1261,6 @@ func TestRevCacheOnDemandMemoryEviction(t *testing.T) {
13101261 require .ErrorContains (t , err , "missing" )
13111262 // returns empty doc rev
13121263 assert .Equal (t , "" , rev .DocID )
1313-
13141264}
13151265
13161266func TestLoadActiveDocFromBucketRevCacheChurn (t * testing.T ) {
@@ -1519,3 +1469,120 @@ func createDocAndReturnSizeAndRev(t *testing.T, ctx context.Context, docID strin
15191469
15201470 return expectedSize , rev
15211471}
1472+
1473+ func TestRevCacheOnDemandImport (t * testing.T ) {
1474+ base .SkipImportTestsIfNotEnabled (t )
1475+
1476+ dbcOptions := DatabaseContextOptions {
1477+ RevisionCacheOptions : & RevisionCacheOptions {
1478+ MaxItemCount : 2 ,
1479+ ShardCount : 1 ,
1480+ },
1481+ }
1482+ db , ctx := SetupTestDBWithOptions (t , dbcOptions )
1483+ defer db .Close (ctx )
1484+ collection , ctx := GetSingleDatabaseCollectionWithUser (ctx , t , db )
1485+ docID := "doc1"
1486+ revID , _ , err := collection .Put (ctx , docID , Body {"ver" : "1" })
1487+ require .NoError (t , err )
1488+
1489+ ctx , testCtxCancel := context .WithCancel (ctx )
1490+ defer testCtxCancel ()
1491+
1492+ for i := 0 ; i < 2 ; i ++ {
1493+ docID := fmt .Sprintf ("extraDoc%d" , i )
1494+ revID , _ , err := collection .Put (ctx , docID , Body {"fake" : "body" })
1495+ require .NoError (t , err )
1496+ go func () {
1497+ for {
1498+ select {
1499+ case <- ctx .Done ():
1500+ return
1501+ default :
1502+ _ , err = db .revisionCache .Get (ctx , docID , revID , collection .GetCollectionID (), RevCacheOmitDelta ) //nolint:errcheck
1503+ }
1504+ }
1505+ }()
1506+ }
1507+ err = collection .dataStore .Set (docID , 0 , nil , []byte (`{"ver": "2"}` ))
1508+ require .NoError (t , err )
1509+ rev , err := collection .getRev (ctx , docID , revID , 0 , nil )
1510+ require .Error (t , err )
1511+ require .ErrorContains (t , err , "missing" )
1512+ // returns empty doc rev
1513+ assert .Equal (t , "" , rev .DocID )
1514+ }
1515+
1516+ func TestRevCacheOnDemandMemoryEviction (t * testing.T ) {
1517+ base .SkipImportTestsIfNotEnabled (t )
1518+
1519+ dbcOptions := DatabaseContextOptions {
1520+ RevisionCacheOptions : & RevisionCacheOptions {
1521+ MaxItemCount : 20 ,
1522+ ShardCount : 1 ,
1523+ MaxBytes : 112 , // equivalent to max size 2 items
1524+ },
1525+ }
1526+ db , ctx := SetupTestDBWithOptions (t , dbcOptions )
1527+ defer db .Close (ctx )
1528+ collection , ctx := GetSingleDatabaseCollectionWithUser (ctx , t , db )
1529+ docID := "doc1"
1530+ revID , _ , err := collection .Put (ctx , docID , Body {"ver" : "1" })
1531+ require .NoError (t , err )
1532+
1533+ ctx , testCtxCancel := context .WithCancel (ctx )
1534+ defer testCtxCancel ()
1535+
1536+ for i := 0 ; i < 2 ; i ++ {
1537+ docID := fmt .Sprintf ("extraDoc%d" , i )
1538+ revID , _ , err := collection .Put (ctx , docID , Body {"fake" : "body" })
1539+ require .NoError (t , err )
1540+ go func () {
1541+ for {
1542+ select {
1543+ case <- ctx .Done ():
1544+ return
1545+ default :
1546+ _ , err = db .revisionCache .Get (ctx , docID , revID , collection .GetCollectionID (), RevCacheOmitDelta ) //nolint:errcheck
1547+ }
1548+ }
1549+ }()
1550+ }
1551+ err = collection .dataStore .Set (docID , 0 , nil , []byte (`{"ver": "2"}` ))
1552+ require .NoError (t , err )
1553+ rev , err := collection .getRev (ctx , docID , revID , 0 , nil )
1554+ require .Error (t , err )
1555+ require .ErrorContains (t , err , "missing" )
1556+ // returns empty doc rev
1557+ assert .Equal (t , "" , rev .DocID )
1558+
1559+ }
1560+
1561+ func TestRevCacheOnDemandImportNoCache (t * testing.T ) {
1562+ base .SkipImportTestsIfNotEnabled (t )
1563+
1564+ db , ctx := setupTestDB (t )
1565+ defer db .Close (ctx )
1566+ collection , ctx := GetSingleDatabaseCollectionWithUser (ctx , t , db )
1567+
1568+ docID := "doc1"
1569+ revID1 , _ , err := collection .Put (ctx , docID , Body {"foo" : "bar" })
1570+ require .NoError (t , err )
1571+
1572+ _ , exists := collection .revisionCache .Peek (ctx , docID , revID1 )
1573+ require .True (t , exists )
1574+
1575+ require .NoError (t , collection .dataStore .Set (docID , 0 , nil , []byte (`{"foo": "baz"}` )))
1576+
1577+ doc , err := collection .GetDocument (ctx , docID , DocUnmarshalSync )
1578+ require .NoError (t , err )
1579+ require .Equal (t , Body {"foo" : "baz" }, doc .Body (ctx ))
1580+
1581+ // rev1 still exists in cache but not on server
1582+ _ , exists = collection .revisionCache .Peek (ctx , docID , revID1 )
1583+ require .True (t , exists )
1584+
1585+ // rev2 is not in cache but is on server
1586+ _ , exists = collection .revisionCache .Peek (ctx , docID , doc .CurrentRev )
1587+ require .False (t , exists )
1588+ }
0 commit comments