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

Reply via email to