Author: reschke
Date: Mon Jan 18 14:48:07 2016
New Revision: 1725281
URL: http://svn.apache.org/viewvc?rev=1725281&view=rev
Log:
OAK-3872: RDBBlobStore - fix problem when cleaning up data rows (ported to 1.0)
Thanks to Amit Jain for the report and the repro test case; used the fix
proposed by Thomas Mueller, added diagnostics and tuned test case.
(Also refactored a bit to minimize differences from current branches;
discovered a bug while doing so)
Modified:
jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java
Modified:
jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java?rev=1725281&r1=1725280&r2=1725281&view=diff
==============================================================================
---
jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java
(original)
+++
jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java
Mon Jan 18 14:48:07 2016
@@ -486,11 +486,15 @@ public class RDBBlobStore extends Cachin
@Override
public boolean deleteChunks(List<String> chunkIds, long
maxLastModifiedTime) throws Exception {
+ return (chunkIds.size() == countDeleteChunks(chunkIds,
maxLastModifiedTime));
+ }
+ // @Override OAK-2973
+ public long countDeleteChunks(List<String> chunkIds, long
maxLastModifiedTime) throws Exception {
// sanity check
if (chunkIds.isEmpty()) {
// sanity check, nothing to do
- return true;
+ return 0;
}
Connection con = this.ch.getRWConnection();
@@ -509,7 +513,7 @@ public class RDBBlobStore extends Cachin
// delete only if the last modified is OLDER than x
metaStatement.append(" and LASTMOD <= ?");
// delete if there is NO entry where the last modified of the
meta is YOUNGER than x
- dataStatement.append(" and not exists(select * from " +
this.tnMeta + " m where ID = m.ID and m.LASTMOD >= ?)");
+ dataStatement.append(" and not exists(select * from " +
this.tnMeta + " m where ID = m.ID and m.LASTMOD > ?)");
}
prepMeta = con.prepareStatement(metaStatement.toString());
@@ -531,10 +535,10 @@ public class RDBBlobStore extends Cachin
String message = String.format(
"chunk deletion affected different numbers of DATA
records (%s) and META records (%s)", deletedMeta,
deletedData);
- System.err.println(message);
LOG.info(message);
}
- return deletedMeta == chunkIds.size();
+
+ return deletedMeta;
} finally {
closeStatement(prepMeta);
closeStatement(prepData);