You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jackrabbit.apache.org by "Thomas Mueller (JIRA)" <ji...@apache.org> on 2013/08/21 15:53:52 UTC

[jira] [Commented] (JCR-3652) Bundle serialization broken due to missing byte for boolean property

    [ https://issues.apache.org/jira/browse/JCR-3652?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13746050#comment-13746050 ] 

Thomas Mueller commented on JCR-3652:
-------------------------------------

Additional change to help verify the patch is installed:

{code}
#P jackrabbit-core-r-1372412
Index: src/main/java/org/apache/jackrabbit/core/persistence/util/BundleBinding.java
===================================================================
--- src/main/java/org/apache/jackrabbit/core/persistence/util/BundleBinding.java	(revision 1372412)
+++ src/main/java/org/apache/jackrabbit/core/persistence/util/BundleBinding.java	(working copy)
@@ -23,11 +25,21 @@
 import org.apache.jackrabbit.core.data.DataStore;
 import org.apache.jackrabbit.core.id.NodeId;
 import org.apache.jackrabbit.core.util.StringIndex;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * This Class implements efficient serialization methods for item states.
  */
 public class BundleBinding {
+    
+    private static boolean ALLOW_BROKEN_BUNDLES = Boolean.getBoolean("jackrabbit.allowBrokenBundleWrites");
+    
+    private static Logger log = LoggerFactory.getLogger(BundleBinding.class);
+    
+    static {
+        log.warn("Please note this is a patched version of Jackrabbit which is slightly slower. See JCR-3652.");
+    }
{code}

                
> Bundle serialization broken due to missing byte for boolean property
> --------------------------------------------------------------------
>
>                 Key: JCR-3652
>                 URL: https://issues.apache.org/jira/browse/JCR-3652
>             Project: Jackrabbit Content Repository
>          Issue Type: New Feature
>          Components: jackrabbit-core
>         Environment: Windows
> java version "1.6.0_38"
> Java(TM) SE Runtime Environment (build 1.6.0_38-b05)
> Java HotSpot(TM) 64-Bit Server VM (build 20.13-b02, mixed mode)
>            Reporter: Thomas Mueller
>            Assignee: Thomas Mueller
>            Priority: Minor
>         Attachments: JCR-3652.patch
>
>
> I have got a strange case where some node bundle is broken, seemingly because a byte is missing. I can't explain the missing byte, but it is reproducible, meaning that writing the bundles again will break them again. There are 11 broken bundles, 10 of them have the size 480 bytes and one is slightly larger. It is always a boolean property value that is missing, always the value for the property jcr:isCheckedOut.
> As a (temporary) solution, and to help analyze what the problem might be, I will create a patch that does the following:
> * When serializing a bundle, check if the byte array can be de-serialized. If not, then try again. Starting with the 3th try, use a slower variant where before and after writing the boolean value the buffer is flushed. I'm aware that ByteArrayOutputStream.flush doesn't do much, but maybe it solves the problem (let's see) if the problem is related to a JVM issue.
> * If de-serializing a bundle fails, check if it's because of a missing boolean property value. If yes, insert the missing byte.
> I have also added some log messages (warning / error) to help analyze the problem.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira