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 al...@apache.org on 2014/08/21 16:20:13 UTC
svn commit: r1619406 - in /jackrabbit/oak/branches/1.0: ./
oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Compactor.java
Author: alexparvulescu
Date: Thu Aug 21 14:20:13 2014
New Revision: 1619406
URL: http://svn.apache.org/r1619406
Log:
OAK-2042 TarMK CompactionMap should include more nodes
- merged rev 1619222
Modified:
jackrabbit/oak/branches/1.0/ (props changed)
jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Compactor.java
Propchange: jackrabbit/oak/branches/1.0/
------------------------------------------------------------------------------
Merged /jackrabbit/oak/trunk:r1619222
Modified: jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Compactor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Compactor.java?rev=1619406&r1=1619405&r2=1619406&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Compactor.java (original)
+++ jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Compactor.java Thu Aug 21 14:20:13 2014
@@ -52,6 +52,11 @@ public class Compactor {
private static final Logger log = LoggerFactory.getLogger(Compactor.class);
/**
+ * over 64K in size, not will be included in the compaction map
+ */
+ private static final long threshold = 65536;
+
+ /**
* Locks down the RecordId persistence structure
*/
static long[] recordAsKey(RecordId r) {
@@ -123,7 +128,7 @@ public class Compactor {
if (success) {
SegmentNodeState state = writer.writeNode(child.getNodeState());
builder.setChildNode(name, state);
- if (id != null && state.getChildNodeCount(2) > 1) {
+ if (id != null && includeInMap(state)) {
map.put(id, state.getRecordId());
}
}
@@ -131,6 +136,22 @@ public class Compactor {
return success;
}
+ private boolean includeInMap(SegmentNodeState state) {
+ if (state.getChildNodeCount(2) > 1) {
+ return true;
+ }
+ int count = 0;
+ for (PropertyState ps : state.getProperties()) {
+ for (int i = 0; i < ps.count(); i++) {
+ count += ps.size(i);
+ if (count >= threshold) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
@Override
public boolean childNodeChanged(
String name, NodeState before, NodeState after) {