[MarkLogic Dev General] (no subject)

Wayne Feick wayne.feick at marklogic.com
Mon Oct 27 11:04:01 PST 2008


Yes, because the two evals are now two distinct, serialized
transactions, the first will always complete before the second.

Wayne.


On Mon, 2008-10-27 at 13:52 -0500, Strawn, Shane wrote:

> Thanks guys - I tried Wayne's way and it appears to be working.  Since the inserts go into separate dbs, I didn't see any way to dispose of the eval, so I end up with:
> 
> 	xdmp:eval('xdmp:document-insert( "process-me.xml", <data>...</data>)', different-transaction )
> 	...
> 	xdmp:eval('xdmp:document-insert( "cpf-init.xml", <target-uri>process-me.xml</target-uri>)', different-database )
> 
> So with this method will the sequence always be top down, completing the first eval before the second one? 
> 
> Thanks again,
> Shane
> 
> 
> -----Original Message-----
> From: general-bounces at developer.marklogic.com [mailto:general-bounces at developer.marklogic.com] On Behalf Of Danny Sokolsky
> Sent: Monday, October 27, 2008 2:39 PM
> To: General Mark Logic Developer Discussion
> Subject: RE: [MarkLogic Dev General] (no subject)
> 
> Another possibility is, if this code is in the body of a main module, you can separate them into separate transactions by putting a semi-colon after the first document-insert.  This might also eliminate the need for the eval (depending on what else you are doing in the query).  For example:
> 
> xdmp:document-insert( "process-me.xml", <data>...</data>) ;
> 
> xdmp:document-insert( "cpf-init.xml",
>                 <target-uri>process-me.xml</target-uri>)', $options (: setting db to content :) )
> 
> -Danny
> 
> From: general-bounces at developer.marklogic.com [mailto:general-bounces at developer.marklogic.com] On Behalf Of Wayne Feick
> Sent: Monday, October 27, 2008 11:01 AM
> To: General Mark Logic Developer Discussion
> Subject: Re: [MarkLogic Dev General] (no subject)
> 
> Have you considered inserting process-me.xml in a separate eval with an option of <isolation>different-transaction</isolation> to ensure it is available before when inserting cpf-init.xml?
> 
> Wayne.
> 
> 
> On Mon, 2008-10-27 at 11:29 -0500, Strawn, Shane wrote:
> 
> Hello,
> 
> I have a somewhat convoluted issue to describe so I'll try to make sense:
> 
> I have a Content Processing Framework process which watches a directory for a file to be dropped on it.  This is a different database than my main content database.
> 
> I have an xquery module which at the same time inserts a document into the content database, and the above file into the CPF database in an eval, like so:
> 
>         xdmp:document-insert( "process-me.xml", <data>...</data>)
>         ...
>         xdmp:eval('xdmp:document-insert( "cpf-init.xml",
>                 <target-uri>process-me.xml</target-uri>)', $options (: setting db to content :) )
> 
> Now, since these are in different dbs, it sometimes occurs where the CPF process will look for "process-me.xml" on the content db but not find it, because it is not finished document-inserting.  I thought it should complete the doc-insert before moving on to the eval in the module, but it apparently doesn't due to the separate-transaction nature of the situation?
> 
> I would like to find a way to loop or wait until my doc is fully inserted within xquery, rather than the more complex tasks of modifying the CPF pipeline or changing the interface to add another click-through after the doc is inserted, if possible.  But I'm not sure how to accomplish this or if it's realistic.
> 
> I've tried some (probably) stupid things such as:
> 
> Killing a set amount of time with a statement like
>         let $timekill := for $a in (1 to 10000000) return () ...but this seems unreliable, and a waste of time if it doesn't need it;
> 
> Or a recursive function like
>         define function check-doc-exists($uri as xs:string) {
>         if ( fn:exists(fn:doc($uri)) ) then fn:true() else check-doc-exists($uri) } ...but this gives me Stack Overflow within seconds, or if I put my timekiller in it, it never finds the doc even if it inserts while it is running.
> 
> Is there something I can do here to create a loop which runs until it can find the document?  Am I misunderstanding what is happening with the transaction?  Just how wrong are my above ideas?
> 
> Thanks in advance for any guidance.
> 
> Shane Strawn
> Wolters Kluwer Health
> 
> _______________________________________________
> General mailing list
> General at developer.marklogic.com
> http://xqzone.com/mailman/listinfo/general
> _______________________________________________
> General mailing list
> General at developer.marklogic.com
> http://xqzone.com/mailman/listinfo/general
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://xqzone.marklogic.com/pipermail/general/attachments/20081027/0ad4c0b6/attachment.html


More information about the General mailing list