Sounds exactly like 'lazy evaluation' to me ... but I won't quibble definitions, only features :)
---------------------------------------- David A. Lee Senior Principal Software Engineer Epocrates, Inc. d...@epocrates.com<mailto:d...@epocrates.com> 812-482-5224 From: general-boun...@developer.marklogic.com [mailto:general-boun...@developer.marklogic.com] On Behalf Of Geert Josten Sent: Monday, July 18, 2011 11:25 AM To: General MarkLogic Developer Discussion Subject: Re: [MarkLogic Dev General] Async behavior of HTTP request Hi David, Well, one of the ML experts (Kelly or Jason perhaps?) remarked that searchable expressions are treated rather differently. They are not evaluated before being passed into functions like cts:search. Instead, they are somehow passed in as-is, and evaluated directly against indexes. Variables require evaluation before being passed in, so that would null the benefit of being evaluated against indexes. It might still be possible to optimize this, but it is different from lazy evaluation.. Kind regards, Geert Van: general-boun...@developer.marklogic.com [mailto:general-boun...@developer.marklogic.com] Namens Lee, David Verzonden: maandag 18 juli 2011 17:15 Aan: General MarkLogic Developer Discussion Onderwerp: Re: [MarkLogic Dev General] Async behavior of HTTP request This is very interesting, and also a source of confusion for me. Apparently ( and please correct me if I'm wrong) ... the runtime can lazily reference some kinds of variables (e.g. the one returned by xdmp:http-get()) but not others (say xdmp:directory() ) ... Example, if I put an otherwise searchable expression into a variable it becomes non-searchable return xdmp:directory(...)//node (: searchable :) vs. let $files := xdmp:directory( ...) , return $files//node (: not searchable :) Yet xdmp:http-get results are differed until referenced. (sweet). I understand this is a subtlety of optimization implementations but it would be really really nice if it were consistent (in the good way :) That is, assigning a searchable expression to a variable shouldn't make it non-searchable. Waiting for this feature in N.M(+1) :) ---------------------------------------- David A. Lee Senior Principal Software Engineer Epocrates, Inc. d...@epocrates.com<mailto:d...@epocrates.com> 812-482-5224 From: general-boun...@developer.marklogic.com<mailto:general-boun...@developer.marklogic.com> [mailto:general-boun...@developer.marklogic.com]<mailto:[mailto:general-boun...@developer.marklogic.com]> On Behalf Of Abhishek53 S Sent: Friday, July 15, 2011 1:28 AM To: General MarkLogic Developer Discussion Subject: Re: [MarkLogic Dev General] Async behavior of HTTP request Thanks Danny ! Now the concept is much clear to me . Abhishek Srivastav Tata Consultancy Services Cell:- +91-9883389968 Mailto: abhishek5...@tcs.com<mailto:abhishek5...@tcs.com> Website: http://www.tcs.com<http://www.tcs.com/> ____________________________________________ Experience certainty. IT Services Business Solutions Outsourcing ____________________________________________ From: Danny Sokolsky <danny.sokol...@marklogic.com<mailto:danny.sokol...@marklogic.com>> To: General MarkLogic Developer Discussion <general@developer.marklogic.com<mailto:general@developer.marklogic.com>> Date: 07/14/2011 11:41 PM Subject: Re: [MarkLogic Dev General] Async behavior of HTTP request Sent by: general-boun...@developer.marklogic.com<mailto:general-boun...@developer.marklogic.com> ________________________________ Hi Abhishek, So it turns out the xdmp:http-gets will begin to evaluate asyncrounously. The sleeps that I put in that query forced them to block. They key is if you need to use the response or not. So this query does not wait for the http-gets to complete before logging in the return clause: xquery version "1.0-ml"; xdmp:log("Req # 1"), xdmp:sleep(1000), let $x := xdmp:http-get("http://marklogic.com<http://marklogic.com/>") let $y := xdmp:http-get("http://marklogic.com<http://marklogic.com/>") return xdmp:log("Process completed") I guess the question for you is do you need the query to use the output of the http-get. If so, then you have to wait for it to complete in order to complete the x-action. -Danny From: general-boun...@developer.marklogic.com<mailto:general-boun...@developer.marklogic.com> [mailto:general-boun...@developer.marklogic.com] On Behalf Of Abhishek53 S Sent: Thursday, July 14, 2011 12:45 AM To: General MarkLogic Developer Discussion Subject: Re: [MarkLogic Dev General] Async behavior of HTTP request Danny Thanks for reply . Referring the link (http://www.marklogicevents.com/file/presentations/Effective_XQuery_in_MarkLogic_Heitkamp_Koul.pdf) where on slide 36 it is mentioned that HTTP interfaces executes asynchronously. Let me know If I misunderstood. Can It be possible to run child some transaction asynchronously. I am thinking of one way to achieve it where the child module is written into separate xqy file and then use xdmp:spawn to invoke the module. In this case the parent transaction will not wait for the response from the spawned module. Let me know If I am wrong here. Any separate way to achieve the asynchronous child transaction? Thanks Abhishek Srivastav Tata Consultancy Services Cell:- +91-9883389968 Mailto: abhishek5...@tcs.com<mailto:abhishek5...@tcs.com> Website: http://www.tcs.com<http://www.tcs.com/> ____________________________________________ Experience certainty. IT Services Business Solutions Outsourcing ____________________________________________ From: Danny Sokolsky <danny.sokol...@marklogic.com<mailto:danny.sokol...@marklogic.com>> To: General MarkLogic Developer Discussion <general@developer.marklogic.com<mailto:general@developer.marklogic.com>> Date: 07/14/2011 06:27 AM Subject: Re: [MarkLogic Dev General] Async behavior of HTTP request Sent by: general-boun...@developer.marklogic.com<mailto:general-boun...@developer.marklogic.com> ________________________________ Hi Abhishek, I think the http-get requests are *synchronous*, not asynchronous; that is, they will wait until they get the results to move on to the next thing in the query. So I am not sure I understand your question. For example, if you run the following: let $x := (xdmp:http-get("http://marklogic.com<http://marklogic.com/>"), xdmp:log("Req # 1"), xdmp:sleep(1000)) let $y := (xdmp:http-get("http://marklogic.com<http://marklogic.com/>"), xdmp:log("Req # 1"), xdmp:sleep(1000)) return xdmp:log("Process completed") You will see 3 log messages in your log, and they will be about 1 second apart from each other. 2011-07-13 17:53:48.395 Info: danny: Req # 1 2011-07-13 17:53:49.462 Info: danny: Req # 1 2011-07-13 17:53:50.462 Info: danny: Process completed -Danny From: general-boun...@developer.marklogic.com<mailto:general-boun...@developer.marklogic.com> [mailto:general-boun...@developer.marklogic.com] On Behalf Of Abhishek53 S Sent: Wednesday, July 13, 2011 12:36 PM To: General MarkLogic Developer Discussion Subject: [MarkLogic Dev General] Async behavior of HTTP request Hi Folks, As per my understanding of HTTP request through Marklogic HTTP APIs is that they are asynchronous by nature.Between the HTTP service requests the behavior is asynchronous. Is the calling module execute asynchronously with invoked HTTP requests ie sample query let $x := xdmp:http-get($uri1,()) let $y := xdmp:http-get($uri2,()) return xdmp:log("Process completed") Can the logging be done irrespective to wait for the response from both the requests? Your suggestions will be appreciated. Thanks in advance Abhishek Srivastav Tata Consultancy Services Cell:- +91-9883389968 Mailto: abhishek5...@tcs.com<mailto:abhishek5...@tcs.com> Website: http://www.tcs.com<http://www.tcs.com/> ____________________________________________ Experience certainty. IT Services Business Solutions Outsourcing ____________________________________________ =====-----=====-----===== Notice: The information contained in this e-mail message and/or attachments to it may contain confidential or privileged information. If you are not the intended recipient, any dissemination, use, review, distribution, printing or copying of the information contained in this e-mail message and/or attachments to it are strictly prohibited. If you have received this communication in error, please notify us by reply e-mail or telephone and immediately and permanently delete the message and any attachments. Thank you _______________________________________________ General mailing list General@developer.marklogic.com<mailto:General@developer.marklogic.com> http://developer.marklogic.com/mailman/listinfo/general _______________________________________________ General mailing list General@developer.marklogic.com<mailto:General@developer.marklogic.com> http://developer.marklogic.com/mailman/listinfo/general
_______________________________________________ General mailing list General@developer.marklogic.com http://developer.marklogic.com/mailman/listinfo/general