chemistry-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gavin Cornwell <gavin.cornw...@alfresco.com>
Subject Re: CmisStorageException with OpenCMIS 0.10.0 - Alfresco Enterprise 4.2.3
Date Tue, 31 Mar 2015 07:54:16 GMT
Apologies, it was Mark that raised the issue so I’ll redirect that question to you Mark ;-)





On 31/03/2015 08:51, "Gavin Cornwell" <gavin.cornwell@alfresco.com> wrote:

>Hi Igor,
>
>Could you please let me know the ID of the support case you have opened with us (Alfresco)?
>
>Regards,
>
>Gavin
>
>
>
>
>On 30/03/2015 16:36, "Mark Streit" <mcs130@gmail.com> wrote:
>
>>Igor
>>
>>Thanks for your reply as well.  We DID confirm that we are creating the
>>ContentStream correctly (passing the size) and the resulting length is
>>checked and logged to the Console (temporarily) while we are trying to
>>determine the problem.  It appears to be correct.
>>
>>*We already have an open support case with Alfresco on this and have
>>included all such information.*
>>
>>
>>In fact, we checked the contentStream and bytes on each of 5 parallel calls
>>by Console logging the following:
>>
>>
>>    System.out.println("contentStream: " + contentStream.getStream());
>>    System.out.println("contentStream: " + contentStream.getLength());
>>
>>
>>document = folder.createDocument(docProps, contentStream, versioningState);
>>  // docProps is the HashMap of properties only
>>
>>
>>And the output we see is:  5 unique object id values each with the correct
>>length are reported.
>>
>>contentStream: java.io.ByteArrayInputStream@2a1a4763
>>contentStream: 65201
>>contentStream: java.io.ByteArrayInputStream@1fd226e2
>>contentStream: 65201
>>contentStream: java.io.ByteArrayInputStream@1df6cfc0
>>contentStream: 65201
>>contentStream: java.io.ByteArrayInputStream@79356271
>>contentStream: 65201
>>contentStream: java.io.ByteArrayInputStream@36c1559e
>>contentStream: 65201
>>
>>That output is reported just before making that call shown above using the
>>method:
>>
>>
>>Folder.*createDocument*(Map docProps, ContentStream contentStream,
>>VersioningState versioningState)
>>
>>
>>Mark
>>
>>On Mon, Mar 30, 2015 at 11:20 AM, Igor Blanco <iblanco@binovo.es> wrote:
>>
>>> Florian I'm not 100% sure if it does really use a temp file unless the
>>> file is bigger than a size. Anyway checking that Alfresco's temporary file
>>> partition is not full is a good starting point.
>>>
>>> Many times is worth checking how you create the content stream.
>>> Are you passing the file size when creating the content stream ?
>>>
>>> I had a customer that had some trouble due to the fact that they were
>>> using "-1" and letting the API guess the size. It did work under normal
>>> circunstances but it failed in high concurrency scenarios.
>>>
>>> Bye
>>>
>>>
>>>
>>> 2015-03-30 16:07 GMT+02:00 Florian Müller <fmui@apache.org>:
>>>
>>>> Hi Mark,
>>>>
>>>> I vaguely remember that this was a problem on the Alfresco side. There is
>>>> nothing you can do on the client side.
>>>> Alfresco 4 stores document content in a temp file (-> TempFileProvider).
>>>> If that fails, you get such an error message.
>>>> But you have to talk to Alfresco. It's not OpenCMIS client or server code.
>>>>
>>>>
>>>> - Florian
>>>>
>>>>
>>>>
>>>>
>>>>  *Chemistry experts *
>>>>>
>>>>>
>>>>>
>>>>> *We have a large CMIS implementation using Alfresco Enterprise 4.2.3
and
>>>>> Chemistry v0.10.0-RELEASE *
>>>>>
>>>>>
>>>>>
>>>>> *Everything has worked extremely well to date but we have now modified
>>>>> our
>>>>> UI page logic such that it is able to start uploading multiple documents
>>>>> in
>>>>> parallel - we now have custom built REST services layer that receives
the
>>>>> requests from the UI and then using the Chemistry client API makes the
>>>>> calls.*
>>>>>
>>>>>
>>>>> *We are running into the following issue... (occurs with both browser
and
>>>>> atom binding and we are using CMIS 1.1 URLs) *
>>>>>
>>>>>
>>>>>
>>>>> 2015-03-24 16:50:52,987 ERROR - [ID: ] -
>>>>> com.acmecompany.cmis.services.CmisServices.addDocument(): Expected 65201
>>>>> bytes but retrieved 0 bytes!
>>>>>
>>>>>
>>>>>
>>>>> *org.apache.chemistry.opencmis.commons.exceptions.CmisStorageException:
>>>>> Expected 65201 bytes but retrieved 0 bytes!*
>>>>>
>>>>>
>>>>>
>>>>> at
>>>>> org.apache.chemistry.opencmis.client.bindings.spi.browser.
>>>>> AbstractBrowserBindingService.convertStatusCode(
>>>>> AbstractBrowserBindingService.java:240)
>>>>>
>>>>> at
>>>>> org.apache.chemistry.opencmis.client.bindings.spi.browser.
>>>>> AbstractBrowserBindingService.post(AbstractBrowserBindingService.
>>>>> java:352)
>>>>>
>>>>> at
>>>>> org.apache.chemistry.opencmis.client.bindings.spi.browser.
>>>>> ObjectServiceImpl.createDocument(ObjectServiceImpl.java:83)
>>>>>
>>>>> at
>>>>> org.apache.chemistry.opencmis.client.runtime.SessionImpl.
>>>>> createDocument(SessionImpl.java:751)
>>>>>
>>>>> at
>>>>> org.apache.chemistry.opencmis.client.runtime.FolderImpl.
>>>>> createDocument(FolderImpl.java:95)
>>>>>
>>>>> at
>>>>> org.apache.chemistry.opencmis.client.runtime.FolderImpl.
>>>>> createDocument(FolderImpl.java:469)
>>>>>
>>>>>
>>>>>
>>>>> The line of code that triggers the error is this:
>>>>>
>>>>>
>>>>>
>>>>>        org.apache.chemistry.opencmis.client.api.*Document*
>>>>>  document = folder.createDocument(docProps, contentStream,
>>>>> versioningState);
>>>>>
>>>>>
>>>>> This has always worked where we were running createDocument() calls
>>>>>  SERIALLY  (we were throttling the pace such that only one call was made
>>>>> at
>>>>> a time)...
>>>>>
>>>>>
>>>>> As soon as we changed things to perhaps having 3 to 5 events running
in
>>>>> PARALLEL, the CmisStorageException is thrown above with only a couple
of
>>>>> uploads making it through...
>>>>>
>>>>>
>>>>>
>>>>> In fact, we checked the contentStream and bytes on each of 5 parallel
>>>>> calls
>>>>> by Console logging the following:
>>>>>
>>>>>
>>>>>
>>>>>          System.out.println("contentStream: " +
>>>>> contentStream.getStream());
>>>>>
>>>>>     System.out.println("contentStream: " + contentStream.getLength());
>>>>>
>>>>>
>>>>> document = folder.createDocument(docProps, contentStream,
>>>>> versioningState);
>>>>> // docProps is the HashMap of properties only
>>>>>
>>>>>
>>>>> And the output we see is:
>>>>>
>>>>>
>>>>>
>>>>> contentStream: java.io.ByteArrayInputStream@2a1a4763
>>>>>
>>>>> contentStream: 65201
>>>>>
>>>>> contentStream: java.io.ByteArrayInputStream@1fd226e2
>>>>>
>>>>> contentStream: 65201
>>>>>
>>>>> contentStream: java.io.ByteArrayInputStream@1df6cfc0
>>>>>
>>>>> contentStream: 65201
>>>>>
>>>>> contentStream: java.io.ByteArrayInputStream@79356271
>>>>>
>>>>> contentStream: 65201
>>>>>
>>>>> contentStream: java.io.ByteArrayInputStream@36c1559e
>>>>>
>>>>> contentStream: 65201
>>>>>
>>>>>
>>>>>
>>>>> *5 unique contentStream object IDs and the correct contentStream length
>>>>> for
>>>>> each is reported correctly on the client side... which is what was
>>>>> expected. *
>>>>>
>>>>>
>>>>>
>>>>> As seen above the "storage exception" aligns with the byte size but it
>>>>> complains the contentStream is "0" bytes?
>>>>>
>>>>>
>>>>> We have debugged (which of course disrupts and slows things and then
it
>>>>> appears to work but that's effectively forcing a serial pattern), and
in
>>>>> all cases, the Map of properties, the contentStream, and versioningState
>>>>> parameters are all correct for each on the *folder.createDocument()*
>>>>> method
>>>>> call.
>>>>>
>>>>>
>>>>> Has anyone seen this?
>>>>>
>>>>>
>>>>> We have already opened a ticket with Alfresco HOWEVER, we have also
>>>>> checked
>>>>> the Alfresco server side logs and because the failure is thrown by the
>>>>> Client API code, there is also evidence that the stream reaching the
>>>>> server
>>>>> is zero thus resulting in the exception.
>>>>>
>>>>>
>>>>> Perhaps we have to adjust how the Cmis Session is created or are we
>>>>> seeing
>>>>> thread safety problem? So multiple uploads are happening on different
>>>>> threads to Alfresco through one Session.   Could this be part of the
>>>>> issue
>>>>> we are seeing? Should we create a new Session for each request?  It's
our
>>>>> understanding that it's expensive to create Session objects each time
and
>>>>> that we shouldn't have to do that.
>>>>>
>>>>>
>>>>> Thought we'd ask here in case this has been seen before.
>>>>>
>>>>>
>>>>>
>>>>> Thanks
>>>>>
>>>>>
>>>>>
>>>>> Mark
>>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> Igor Blanco González
>>> Binovo IT Human Project
>>> e-mail: iblanco@binovo.es
>>> Telf. :   943493611
>>> Dirección:
>>>                          Astigarraga Bidea 2
>>>                           Planta 6. - Ofi. 3-2
>>>                     20180 Oiartzun ( Gipuzkoa )
>>>
Mime
View raw message