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

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

The main problem seems to be that in PropertyState, the fields "multiValued" 
and "values" are set independently, even thought they depend on each other. To 
avoid problems, it would be better if the fields can not be changed 
independently. (Or if there is only one field, for example "Object x" which can 
be a Value or a Value[]).

There are also problems in the BundleWriter class, mainly dangerous assertions. 
For example, the assertion that the values array is one for single-value 
properties is only checked if assertions are enabled. Or, names with an empty 
local name break the bundle serialization. Also, the assert on the property 
type is only check if assertions are enabled, and the switch for property types 
doesn't throw an exception for an unknown property type. There are also not 
enough test cases. I am preparing a patch for this.
                
> Bundle serialization broken
> ---------------------------
>
>                 Key: JCR-3652
>                 URL: https://issues.apache.org/jira/browse/JCR-3652
>             Project: Jackrabbit Content Repository
>          Issue Type: New Feature
>          Components: jackrabbit-core
>            Reporter: Thomas Mueller
>            Assignee: Thomas Mueller
>            Priority: Minor
>             Fix For: 2.4.4, 2.7.1
>
>         Attachments: JCR-3652.patch, JCR-3652-test-case.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

Reply via email to