Jesper,

I'd say fork master and submit a pull request. By the way, there's a committers 
call today (Thursday) from 9-9:30am Eastern (UTC-5) if you want to jump in. I 
think the agenda is mostly around the upcoming release of 3.6.2, but I'd 
welcome having either (or both) of you and Nicolas join if you're available.

https://wiki.duraspace.org/display/FCREPO/2012-11-08+-+Fedora+Committer+Meeting

Eddie

On Nov 7, 2012, at 11:12 PM, Jesper Damkjaer <j...@dbc.dk> wrote:

> I'll like to take a stab at this one.
> I'm not sure though if I can create a branch or if I should create a
> fork.
> Which do You prefer?
> 
> -Jesper 
> 
> On ons, 2012-11-07 at 12:09 +0100, Jesper Damkjaer wrote:
>> Yes, I think it would. The problem is that the PID cannot be determined
>> until just before the call to objectExists(). And moving the
>> pidLock.getWriteLock() up here would essentially do the same as You
>> suggest.
>> 
>> -Jesper
>> 
>> On ons, 2012-11-07 at 10:57 +0000, Nicolas Hervé wrote:
>>> A lock on a unique object representing the PID to be inserted would be 
>>> enough to prevent this, no ?
>>> ;ppvg usxd9ds=liiiiiiiiii 
>>> On 06/11/2012 23:51, Jesper Damkjaer wrote:
>>>> It might be possible to simply just move the call to
>>>> pidLock.getWriteLock() up before the call to objectExists().
>>>> Then the first thread will get the lock and the second thread will be
>>>> rejected. Even if the first thread have released the writelock, then it
>>>> will have registered the object and the second thread will be rejected
>>>> by objectExists().
>>>> 
>>>> This may of course give a false result if the first thread for some
>>>> reason fails to actually create the object. Then both threads are
>>>> rejected and no objects are created even though the second thread might
>>>> have succeeded (if it had won the race).
>>>> I believe we have another kind of locking mechanism which is a
>>>> stringLock. This lock doesnt reject the second thread - it just make it
>>>> wait until the first thread releases the lock. If this kind of lock is
>>>> used, then only one of the threads can enter the last part of
>>>> getIngestWriter (assuming the lock is before objectExists()) and if the
>>>> first thread succeeds the second thread will, upon release, get an
>>>> exception from objectExists(). If on the other hand, the first thread
>>>> fails to create an object then, when the lock is released, the second
>>>> thread can try to create the object.
>>>> 
>>>> -Jesper
>>>> 
>>>> 
>>>> On tir, 2012-11-06 at 17:17 -0500, aj...@virginia.edu wrote:
>>>>> It's starting to sound like we need a pattern that is less constrictive 
>>>>> of resources than the use of "synchronized", but still maintains some 
>>>>> kind of guard against the kind of collision Jesper describes. A 
>>>>> simpleminded thought: perhaps we could insert a lightweight check against 
>>>>> the registry before registerObject() with a line of execution that backs 
>>>>> out any changes if the check fails? Because it's an ingest, those changes 
>>>>> shouldn't be hard to describe or undo.
>>>>> 
>>>>> ---
>>>>> A. Soroka
>>>>> Software & Systems Engineering :: Online Library Environment
>>>>> the University of Virginia Library
>>>>> 
>>>>> On Nov 6, 2012, at 4:22 PM, Jesper Damkjaer wrote:
>>>>> 
>>>>>> I just had a quick look at the code. As far as I can see (and I may not
>>>>>> be right) one problem may be the following:
>>>>>> Assume both threads with same PID are inside the method getIngestWriter
>>>>>> and has passed the method-call objectExists(...). At this point neither
>>>>>> of the objects exists assuming none of the threads has yet reached
>>>>>> registerObject(...).
>>>>>> If one of the threads then get the writeLock, does what it needs to do
>>>>>> and releases the writeLock before the second thread reaches writeLock,
>>>>>> then the second thread will reach registerObject(...). As far as I can
>>>>>> tell, inside registerObject(...) an SQLException will be thrown since
>>>>>> the row already exists in the database, and the method
>>>>>> unregisterObject(...) will be called actually unregistering a legally
>>>>>> created object.
>>>>>> 
>>>>>> Someone with more insight into the code should verify if the above is
>>>>>> correct.
>>>>>> 
>>>>>> -Jesper
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> On tir, 2012-11-06 at 21:44 +0100, Jesper Damkjaer wrote:
>>>>>>> Hi.
>>>>>>> 
>>>>>>> I originally opened the https://jira.duraspace.org/browse/FCREPO-1024
>>>>>>> I tried back then to create tests in order to convince myself that there
>>>>>>> would be no problems in removing the synchronization, but that proved
>>>>>>> rather difficult.
>>>>>>> As far as I remember there seemed to be some problems associated with
>>>>>>> removing the synchronization, especially if two documents with the same
>>>>>>> PID were ingested at the same time.
>>>>>>> I'm still interested in looking in to this, and will be happy to look at
>>>>>>> my old branch.
>>>>>>> 
>>>>>>> -Jesper
>>>>>>> 
>>>>>>> 
>>>>>>> On tir, 2012-11-06 at 12:46 -0500, aj...@virginia.edu wrote:
>>>>>>>> There is a bit of history to this discussion:
>>>>>>>> 
>>>>>>>> https://jira.duraspace.org/browse/FCREPO-1024
>>>>>>>> 
>>>>>>>> ---
>>>>>>>> A. Soroka
>>>>>>>> Software & Systems Engineering :: Online Library Environment
>>>>>>>> the University of Virginia Library
>>>>>>>> 
>>>>>>>> On Nov 6, 2012, at 11:53 AM, Scott Prater wrote:
>>>>>>>> 
>>>>>>>>> Nicolas,
>>>>>>>>> 
>>>>>>>>> That's very encouraging... this problem has been on my radar for 
>>>>>>>>> years.
>>>>>>>>> 
>>>>>>>>> Not being very familiar with the details of the internals of 
>>>>>>>>> DefaultDOManager, I can't comment concretely on the merits of your 
>>>>>>>>> patch, but I would be especially interested in tests that provoke 
>>>>>>>>> race conditions and concurrent writes, and makes sure Fedora handles 
>>>>>>>>> those situations cleanly: even though PID generation is synchronized, 
>>>>>>>>> would it still be possible for Fedora to attempt to write the same 
>>>>>>>>> datastreams, provision identical values in the resource index, etc. 
>>>>>>>>> in different threads once the object has been created and the PID 
>>>>>>>>> assigned? As I dimly recall, I think the getIngestWriter method was 
>>>>>>>>> synchronized because there were some problems in the early days with 
>>>>>>>>> concurrent writes. That may be a non-issue now, though, if PID 
>>>>>>>>> generation is synchronized (the Akubra storage layer is designed to 
>>>>>>>>> handle writes more robustly).
>>>>>>>>> 
>>>>>>>>> Another potential issue: if you're creating a hierarchical tree of 
>>>>>>>>> objects in parallel, and the ingest of a parent object fails: you 
>>>>>>>>> could be left with orphaned children. But that's something that 
>>>>>>>>> should be checked and handled higher up the stack, with some 
>>>>>>>>> transaction/rollback logic.
>>>>>>>>> 
>>>>>>>>> -- Scott
>>>>>>>>> 
>>>>>>>>> On 11/06/12, Nicolas Hervé  wrote:
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> Hi,
>>>>>>>>>> 
>>>>>>>>>> I think I've found the main problem with massive parallel ingestion.
>>>>>>>>>> 
>>>>>>>>>> I'm working with the last github snapshot.
>>>>>>>>>> 
>>>>>>>>>> In org.fcrepo.server.storage.DefaultDOManager, the getIngestWriter 
>>>>>>>>>> method should not be synchronized as it seems there is only a single 
>>>>>>>>>> instance of that class for the server. The internal objects of this 
>>>>>>>>>> class seem to be correctly synchronized (pid generation) of new 
>>>>>>>>>> objects are recreated on each call (inside Translator, a new 
>>>>>>>>>> DODeserializer is created and the same happens inside the Validator).
>>>>>>>>>> 
>>>>>>>>>> I've tested with FOXML ingestion and now almost all the CPUs are 
>>>>>>>>>> used. I've not been deeper to check that every inserted object is 
>>>>>>>>>> not corrupted, but after a quick look, it seems OK. I guess the same 
>>>>>>>>>> kind of patch could also apply on object deletion.
>>>>>>>>>> 
>>>>>>>>>> If one of you that better understand that part could have a look, it 
>>>>>>>>>> seems it would be a nice patch, not too hard to test, with great 
>>>>>>>>>> performance improvements.
>>>>>>>>>> 
>>>>>>>>>> Regards,
>>>>>>>>>> 
>>>>>>>>>> Nicolas HERVE
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> On 28/09/2012 11:25, Nicolas Hervé wrote:
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>>> Hi,
>>>>>>>>>>> 
>>>>>>>>>>> indeed, it seems we are exactly in the same configuration (millions 
>>>>>>>>>>> of DO with some metadata and external content) with almost the same 
>>>>>>>>>>> hardware. I've not identified the bottleneck in the massive 
>>>>>>>>>>> parallel ingestion process right now, but I highly suspect a 
>>>>>>>>>>> synchronized portion of code somewhere in the chain. I hope Edwin 
>>>>>>>>>>> could say more about this :-)
>>>>>>>>>>> 
>>>>>>>>>>> For the querying of dc fields, index have to be created in the 
>>>>>>>>>>> Mysql schema and SQL queries are far from being optimal. Currently 
>>>>>>>>>>> I only patched for my own purposes (my datamodel / my queries) and 
>>>>>>>>>>> I bypass some code portions in the following classes :
>>>>>>>>>>> 
>>>>>>>>>>> org.fcrepo.server.search.FieldSearchSQLImpl
>>>>>>>>>>> org.fcrepo.server.search.FieldSearchResultSQLImpl
>>>>>>>>>>> 
>>>>>>>>>>> I'm really new to Fedora Commons but, from what I understand, these 
>>>>>>>>>>> SQL part is quite old. Changing them for optimizations purposes 
>>>>>>>>>>> could imply behaviour changes for other people. That's why I don't 
>>>>>>>>>>> think simple patches could do the job. It would need a complete 
>>>>>>>>>>> refactoring. That could only be done with a global point of view on 
>>>>>>>>>>> the different way this classes are used in the different contexts 
>>>>>>>>>>> where Fedora instances are running.
>>>>>>>>>>> 
>>>>>>>>>>> Feel free to contact me to discuss this more precisely.
>>>>>>>>>>> 
>>>>>>>>>>> Regards,
>>>>>>>>>>> 
>>>>>>>>>>> Nicolas HERVE
>>>>>>>>>>> &#43;33 1 49 83 21 66 (GMT &#43; 2)
>>>>>>>>>>> 
>>>>>>>>>>> On 27/09/2012 18:23, Jason V wrote:
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>>> Hi Nicolas,
>>>>>>>>>>>> 
>>>>>>>>>>>> My name is Jason Varghese and I'm a senior developer at the New 
>>>>>>>>>>>> York Public Library. I think you are doing work similar to what I 
>>>>>>>>>>>> am presently doing based on reading some of your posts.
>>>>>>>>>>>> 
>>>>>>>>>>>> We have a relatively large scale Fedora implementation here. We've 
>>>>>>>>>>>> had all the hardware in place for some time and are in the process 
>>>>>>>>>>>> of migrating from a large homegrown repository to a Fedora based 
>>>>>>>>>>>> platform. We have a single Fedora ingest machine and 3 Fedora 
>>>>>>>>>>>> readers. The ingest machine alone is 4 x 6 core processors w/ 
>>>>>>>>>>>> 128GB RAM. I'm in the process of generating about 1 million&#43; 
>>>>>>>>>>>> digital objects and attaching to each DO all the metadata (as 
>>>>>>>>>>>> managed content datastreams) and all the digital assets (as 
>>>>>>>>>>>> external content datastreams). The digital assets currently are 
>>>>>>>>>>>> about 183 TB of content (this is replicated at two sites). I have 
>>>>>>>>>>>> a multithreaded java client I wrote to accomplish the task for the 
>>>>>>>>>>>> Fedora ingest/DO generation and I use the Mediashelf REST API 
>>>>>>>>>>>> client for connectivity to Fedora. I was able to successfully 
>>>>>>>>>>>> ingest 10's of thousands of digital objects, but really need 
>>>>>>>>>>>> ensure this process performs optimally and scales for millions of 
>>>>>>>>>>>> objects. What bottlenecks were you able to identify when running 
>>>>>>>>>>>> your multithreaded ingest process? Look forward to 
>>>>>>>>>>>> learning/sharing experiences from this process with you and the 
>>>>>>>>>>>> community and possibly collaborating. Thanks
>>>>>>>>>>>> 
>>>>>>>>>>>> Jason Varghese
>>>>>>>>>>>> NYPL
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>>>  Got visibility? Most devs has no idea what their production app 
>>>>>>>>>>> looks like. Find out how fast your code is with AppDynamics Lite. 
>>>>>>>>>>> http://ad.doubleclick.net/clk;262219671;13503038;y? 
>>>>>>>>>>> http://info.appdynamics.com/FreeJavaPerformanceDownload.html
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> _______________________________________________ 
>>>>>>>>>>> Fedora-commons-users mailing list 
>>>>>>>>>>> fedora-commons-us...@lists.sourceforge.net 
>>>>>>>>>>> <fedora-commons-us...@lists.sourceforge.net> 
>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/fedora-commons-users
>>>>>>>>>>> 
>>>>>>>>> --
>>>>>>>>> -- 
>>>>>>>>> Scott Prater
>>>>>>>>> Library, Instructional, and Research Applications (LIRA)
>>>>>>>>> Division of Information Technology (DoIT)
>>>>>>>>> University of Wisconsin - Madison
>>>>>>>>> pra...@wisc.edu
>>>>>>>>> 
>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>> LogMeIn Central: Instant, anywhere, Remote PC access and management.
>>>>>>>>> Stay in control, update software, and manage PCs from one command 
>>>>>>>>> center
>>>>>>>>> Diagnose problems and improve visibility into emerging IT issues
>>>>>>>>> Automate, monitor and manage. Do more in less time with Central
>>>>>>>>> http://p.sf.net/sfu/logmein12331_d2d
>>>>>>>>> _______________________________________________
>>>>>>>>> Fedora-commons-developers mailing list
>>>>>>>>> Fedora-commons-developers@lists.sourceforge.net
>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/fedora-commons-developers
>>>>>>>> 
>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>> LogMeIn Central: Instant, anywhere, Remote PC access and management.
>>>>>>>> Stay in control, update software, and manage PCs from one command 
>>>>>>>> center
>>>>>>>> Diagnose problems and improve visibility into emerging IT issues
>>>>>>>> Automate, monitor and manage. Do more in less time with Central
>>>>>>>> http://p.sf.net/sfu/logmein12331_d2d
>>>>>>>> _______________________________________________
>>>>>>>> Fedora-commons-developers mailing list
>>>>>>>> Fedora-commons-developers@lists.sourceforge.net
>>>>>>>> https://lists.sourceforge.net/lists/listinfo/fedora-commons-developers
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> ------------------------------------------------------------------------------
>>>>>>> LogMeIn Central: Instant, anywhere, Remote PC access and management.
>>>>>>> Stay in control, update software, and manage PCs from one command center
>>>>>>> Diagnose problems and improve visibility into emerging IT issues
>>>>>>> Automate, monitor and manage. Do more in less time with Central
>>>>>>> http://p.sf.net/sfu/logmein12331_d2d
>>>>>>> _______________________________________________
>>>>>>> Fedora-commons-developers mailing list
>>>>>>> Fedora-commons-developers@lists.sourceforge.net
>>>>>>> https://lists.sourceforge.net/lists/listinfo/fedora-commons-developers
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> ------------------------------------------------------------------------------
>>>>>> LogMeIn Central: Instant, anywhere, Remote PC access and management.
>>>>>> Stay in control, update software, and manage PCs from one command center
>>>>>> Diagnose problems and improve visibility into emerging IT issues
>>>>>> Automate, monitor and manage. Do more in less time with Central
>>>>>> http://p.sf.net/sfu/logmein12331_d2d
>>>>>> _______________________________________________
>>>>>> Fedora-commons-developers mailing list
>>>>>> Fedora-commons-developers@lists.sourceforge.net
>>>>>> https://lists.sourceforge.net/lists/listinfo/fedora-commons-developers
>>>>> 
>>>>> ------------------------------------------------------------------------------
>>>>> LogMeIn Central: Instant, anywhere, Remote PC access and management.
>>>>> Stay in control, update software, and manage PCs from one command center
>>>>> Diagnose problems and improve visibility into emerging IT issues
>>>>> Automate, monitor and manage. Do more in less time with Central
>>>>> http://p.sf.net/sfu/logmein12331_d2d
>>>>> _______________________________________________
>>>>> Fedora-commons-developers mailing list
>>>>> Fedora-commons-developers@lists.sourceforge.net
>>>>> https://lists.sourceforge.net/lists/listinfo/fedora-commons-developers
>>>>> 
>>>>> 
>>>>> 
>>>> 
>>>> 
>>>> 
>>>> ------------------------------------------------------------------------------
>>>> LogMeIn Central: Instant, anywhere, Remote PC access and management.
>>>> Stay in control, update software, and manage PCs from one command center
>>>> Diagnose problems and improve visibility into emerging IT issues
>>>> Automate, monitor and manage. Do more in less time with Central
>>>> http://p.sf.net/sfu/logmein12331_d2d
>>>> _______________________________________________
>>>> Fedora-commons-developers mailing list
>>>> Fedora-commons-developers@lists.sourceforge.net
>>>> https://lists.sourceforge.net/lists/listinfo/fedora-commons-developers
>>> 
>>> ------------------------------------------------------------------------------
>>> LogMeIn Central: Instant, anywhere, Remote PC access and management.
>>> Stay in control, update software, and manage PCs from one command center
>>> Diagnose problems and improve visibility into emerging IT issues
>>> Automate, monitor and manage. Do more in less time with Central
>>> http://p.sf.net/sfu/logmein12331_d2d
>>> _______________________________________________
>>> Fedora-commons-developers mailing list
>>> Fedora-commons-developers@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/fedora-commons-developers
>> 
>> 
>> 
>> 
>> ------------------------------------------------------------------------------
>> LogMeIn Central: Instant, anywhere, Remote PC access and management.
>> Stay in control, update software, and manage PCs from one command center
>> Diagnose problems and improve visibility into emerging IT issues
>> Automate, monitor and manage. Do more in less time with Central
>> http://p.sf.net/sfu/logmein12331_d2d
>> _______________________________________________
>> Fedora-commons-developers mailing list
>> Fedora-commons-developers@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/fedora-commons-developers
> 
> 
> 
> 
> ------------------------------------------------------------------------------
> LogMeIn Central: Instant, anywhere, Remote PC access and management.
> Stay in control, update software, and manage PCs from one command center
> Diagnose problems and improve visibility into emerging IT issues
> Automate, monitor and manage. Do more in less time with Central
> http://p.sf.net/sfu/logmein12331_d2d
> _______________________________________________
> Fedora-commons-developers mailing list
> Fedora-commons-developers@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/fedora-commons-developers


------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_nov
_______________________________________________
Fedora-commons-developers mailing list
Fedora-commons-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/fedora-commons-developers

Reply via email to