You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by re...@apache.org on 2016/04/13 16:33:04 UTC
svn commit: r1738950 - in
/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document:
blob/RDBBlobStoreTest.java rdb/RDBBlobStoreFriend.java
Author: reschke
Date: Wed Apr 13 14:33:04 2016
New Revision: 1738950
URL: http://svn.apache.org/viewvc?rev=1738950&view=rev
Log:
OAK-4199: RDBBlobStore: garbage collection fails to delete DATA records when there was subsequent blobstore activity
Add (ignored) test case.
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/blob/RDBBlobStoreTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStoreFriend.java
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/blob/RDBBlobStoreTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/blob/RDBBlobStoreTest.java?rev=1738950&r1=1738949&r2=1738950&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/blob/RDBBlobStoreTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/blob/RDBBlobStoreTest.java Wed Apr 13 14:33:04 2016
@@ -36,6 +36,7 @@ import org.apache.jackrabbit.oak.spi.blo
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -191,6 +192,35 @@ public class RDBBlobStoreTest extends Ab
Assert.assertNotNull(RDBBlobStoreFriend.readBlockFromBackend(blobStore, digest));
}
+ @Ignore("OAK-4199")
+ @Test
+ public void testDeleteChunks() throws Exception {
+ byte[] data1 = new byte[256];
+ Random r = new Random(0);
+ r.nextBytes(data1);
+ byte[] digest1 = getDigest(data1);
+ RDBBlobStoreFriend.storeBlock(blobStore, digest1, 0, data1);
+ String id1 = StringUtils.convertBytesToHex(digest1);
+
+ long now = System.currentTimeMillis();
+
+ long until = System.currentTimeMillis() + 10;
+ while (System.currentTimeMillis() < until) {
+ try {
+ Thread.sleep(5);
+ } catch (InterruptedException e) {
+ }
+ }
+
+ byte[] data2 = new byte[256];
+ r.nextBytes(data2);
+ byte[] digest2 = getDigest(data2);
+ RDBBlobStoreFriend.storeBlock(blobStore, digest2, 0, data2);
+
+ Assert.assertEquals("meta entry was not removed", 1, blobStore.countDeleteChunks(ImmutableList.of(id1), now));
+ Assert.assertFalse("data entry was not removed", RDBBlobStoreFriend.isDataEntryPresent(blobStore, digest1));
+ }
+
@Test
public void testResilienceMissingMetaEntry() throws Exception {
int test = 1024 * 1024;
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStoreFriend.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStoreFriend.java?rev=1738950&r1=1738949&r2=1738950&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStoreFriend.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStoreFriend.java Wed Apr 13 14:33:04 2016
@@ -21,6 +21,7 @@ import static org.apache.jackrabbit.oak.
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
+import java.sql.ResultSet;
import java.util.List;
import org.apache.jackrabbit.oak.commons.StringUtils;
@@ -48,6 +49,22 @@ public class RDBBlobStoreFriend {
con.commit();
ds.ch.closeConnection(con);
}
+ }
+
+ public static boolean isDataEntryPresent(RDBBlobStore ds, byte[] digest) throws Exception {
+ String id = StringUtils.convertBytesToHex(digest);
+ Connection con = ds.ch.getROConnection();
+ PreparedStatement prep = null;
+ try {
+ prep = con.prepareStatement("select ID from " + ds.tnData + " where ID = ?");
+ prep.setString(1, id);
+ ResultSet rs = prep.executeQuery();
+ return rs.next();
+ } finally {
+ closeStatement(prep);
+ con.commit();
+ ds.ch.closeConnection(con);
+ }
}
public static void deleteChunks(RDBBlobStore ds, List<String> chunkIds, long maxLastModifiedTime) throws Exception {