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 2014/10/16 13:22:50 UTC
svn commit: r1632274 -
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
Author: reschke
Date: Thu Oct 16 11:22:50 2014
New Revision: 1632274
URL: http://svn.apache.org/r1632274
Log:
OAK-1941 - implement batched append update for update operations that do not require checking the current document state - improve _modified MAX handling
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java?rev=1632274&r1=1632273&r2=1632274&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java Thu Oct 16 11:22:50 2014
@@ -1255,13 +1255,14 @@ public class RDBDocumentStore implements
private boolean dbAppendingUpdate(Connection connection, String tableName, String id, Long modified, Boolean hasBinary, Long modcount, Long cmodcount, Long oldmodcount,
String appendData) throws SQLException {
- String t = "update " + tableName + " set MODIFIED = ?, HASBINARY = ?, MODCOUNT = ?, CMODCOUNT = ?, DSIZE = DSIZE + ?, ";
- t += (this.needsConcat ? "DATA = CONCAT(DATA, ?) " : "DATA = DATA || ? ");
- t += "where ID = ?";
+ StringBuilder t = new StringBuilder();
+ t.append("update " + tableName + " set MODIFIED = GREATEST(MODIFIED, ?), HASBINARY = ?, MODCOUNT = ?, CMODCOUNT = ?, DSIZE = DSIZE + ?, ");
+ t.append(this.needsConcat ? "DATA = CONCAT(DATA, ?) " : "DATA = DATA || ? ");
+ t.append("where ID = ?");
if (oldmodcount != null) {
- t += " and MODCOUNT = ?";
+ t.append(" and MODCOUNT = ?");
}
- PreparedStatement stmt = connection.prepareStatement(t);
+ PreparedStatement stmt = connection.prepareStatement(t.toString());
try {
int si = 1;
stmt.setObject(si++, modified, Types.BIGINT);
@@ -1287,7 +1288,7 @@ public class RDBDocumentStore implements
private boolean dbBatchedAppendingUpdate(Connection connection, String tableName, List<String> ids, Long modified, String appendData) throws SQLException {
StringBuilder t = new StringBuilder();
- t.append("update " + tableName + " set MODIFIED = ?, MODCOUNT = MODCOUNT + 1, DSIZE = DSIZE + ?, ");
+ t.append("update " + tableName + " set MODIFIED = GREATEST(MODIFIED, ?), MODCOUNT = MODCOUNT + 1, DSIZE = DSIZE + ?, ");
t.append(this.needsConcat ? "DATA = CONCAT(DATA, ?)" : "DATA = DATA || ? ");
t.append("where ID in (");
for (int i = 0; i < ids.size(); i++) {
@@ -1296,7 +1297,7 @@ public class RDBDocumentStore implements
}
t.append('?');
}
- t.append(") and MODIFIED <= ?");
+ t.append(")");
PreparedStatement stmt = connection.prepareStatement(t.toString());
try {
int si = 1;
@@ -1306,10 +1307,9 @@ public class RDBDocumentStore implements
for (String id : ids) {
stmt.setString(si++, id);
}
- stmt.setObject(si++, modified, Types.BIGINT);
int result = stmt.executeUpdate();
if (result != ids.size()) {
- LOG.debug("DB update failed for " + tableName + "/" + ids);
+ LOG.debug("DB update failed: only " + result + " of " + ids.size() + " updated. Table: " + tableName + ", IDs:" + ids);
}
return result == ids.size();
}