Hi Till, image link is
https://www.dropbox.com/s/ywwa73cdf7vcseo/5ce493e4-9578-486f-8ef7-b0413bd39e2c.png?dl=0 Thanks *Best Regards.* *Dilanka Rathnayake,* *Department of Computer Engineering,* *Faculty of Engineering,**University of Peradeniya,* *Sri Lanka.* * <https://lk.linkedin.com/in/dilankamr> <https://www.facebook.com/Dilankamr> * On Thu, Mar 10, 2016 at 1:48 PM, Till Westmann <[email protected]> wrote: > Hi Dilanka, > > answers inline: > > On 7 Mar 2016, at 8:20, Dilanka Rathnayake wrote: > > Thank you for your reply. As you told I created a HTTP interface using >> tomcat and it starts cluster controller while executing the query. >> then as you told it is the point that I went wrong. >> >> So then, If we should not to start the cluster by HTTP interface then we >> have to use the cluster to start the HTTP interface. So do you mean we >> have >> to make a simple HTTP server to start it by cluster controller or start a >> server like Jetty from cluster controller? >> > > I think that we can start a server using an implementation of an > ICCApplicationEntryPoint. That is started by the ClusterController. > To get some inspiration you could look at the way this is done in > AsterixDB (incubating) [1]. However, I would seriously encourage you to > also look at netty [2]. > > [1] > https://github.com/apache/incubator-asterixdb/blob/master/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplicationEntryPoint.java > [2] http://netty.io/ > > I attached a diagram of architecture I guessed. So please look at >> this diagram. >> >> In present 'Vxquery CLI' the cluster controller starts by >>> startLocalHyracks() >>> >> method and it starts during query execution (please correct me if I am >> wrong). But the problem is we have to use a HTTP interface to send HTTP >> requests from the web interface to back end. So then we have to >> start cluster before sending HTTP requests to back end or we have to keep >> running the cluster controller while running the web app. Is it correct? >> If >> it is correct how we can do it. (any suggestions?) >> > > Starting a mini-cluster inside of the CLI is just a shortcut for testing. > The intended deployment is a separate cluster of one CC (cluster > controller) > and a few NCs (node controllers) that the CLI will talk to. > So the HTTP server should be started inside of the CC that itself can be > started with the shell scripts in vxquery-server. > Please see if the information on in vxquery-server and on the website makes > sense to you and tell us what is missing. > > . [image: Inline image 1] >> >> > Unfortunately, I can’t see this image. It might have been stripped out by > the > mailing list. Could you send a link? > > Also I went trough 'VXQUERY-180' [1] issue and its wiki page[2] . You are >>> >> discussing about a 'RESTful API' for 'CLI' there.That API >> is implementing using ' SwaggerIO' and is it makes HTTP interface in >> cluster controller as you told? I tried to run that and I got following >> Response for all examples. >> > > I think what we have so far is just a specification for the API and we’ve > used Swagger’s tooling to describe the API, nothing is expected to work .. > > There are also a few hand-written examples on the wiki page that show > requests > (using curl’s syntax) and the expected results from the HTTP API. > > > -d "statement=for $x in doc('books.xml')/bookstore/book/title return $x" >>> >> * Rebuilt URL to: http://localhost:/????/query >> * Trying 127.0.0.1... >> * Connected to localhost (127.0.0.1) port 80 (#0) >> >>> POST /????/query HTTP/1.1 >>> Host: localhost >>> User-Agent: curl/7.43.0 >>> Accept: */* >>> Content-Length: 63 >>> Content-Type: application/x-www-form-urlencoded >>> >>> * upload completely sent off: 63 out of 63 bytes >> < HTTP/1.1 200 OK >> < Date: Mon, 07 Mar 2016 16:06:28 GMT >> < Server: Apache/2.4.12 (Ubuntu) >> < Last-Modified: Fri, 05 Feb 2016 05:47:57 GMT >> < ETag: "208-52aff64a4d142" >> < Accept-Ranges: bytes >> < Content-Length: 520 >> < Vary: Accept-Encoding >> < Content-Type: text/html >> < >> <html> >> >> <head> >> <script type="text/javascript" src=" >> https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.0/jquery.js"></script> >> <script type="text/javascript" src="script.js"></script> >> </head> >> >> >> <body> >> <form method="post" action="save.php"> >> Name: >> <input id="name" name="name" type="text" /> >> <br> Password: >> <input id="Pass" name="pass" type="password" /> >> <br> >> <input type="submit" value="Done" /> >> </form> >> </body> >> >> * Connection #0 to host localhost left intact >> </html> >> >> what is that error going on? >> > > I’m surprised that you got a response at all. It seems that some HTTP > server is running on you machine. > > Also please be kind enough to suggest some works/jobs that I can do for get >> more familiar to this cluster controllers and HTTP interface that should >> implement. >> > > I think that it would be helpful if you would > a) try to start a mini VXQuery cluster outside of the CLI executable and > run a query against that (just to see if it works) and > b) create a very simple implementation of an ICCApplicationEntryPoint > (e.g. one that prints something to stderr) and deploy that so that it > will run while starting the cluster controller. > > Does this make sense? > If you try this, please tell us either how you did it or what information > is missing to enable you to do it (so that we could add it to the website). > > Does this help? > > Cheers, > Till > > > On Mon, Mar 7, 2016 at 2:45 AM, Till Westmann <[email protected]> wrote: >> >> Hi Dilanka, >>> >>> I took a brief look (sorry if I missed something) at the change and I do >>> have a question on the intended deployment model. It seems to me, that >>> you’ve created an HTTP interface that requires an additional servlet >>> container (Tomcat) that the HTTP interface is deployed into. >>> >>> Is that correct? >>> >>> If so, I think that this is not the deployment model that we envisioned >>> (and I hope that someone will correct me if that’s just me and not >>> everybody who though about this before). >>> >>> As VXQuery anyway runs at least one process/JVM (the cluster controller >>> of >>> the underlying Hyracks platform), the idea was to have this process also >>> serve HTTP requests. And the CLI and the WebUI would then talk to this >>> HTTP >>> API. That way we would ensure that >>> a) the HTTP API exposes all functionality of a VXQuery cluster and >>> b) we don’t require too may process to start VXQuery. >>> >>> So, specifically to the issue that you are seeing: the cluster should >>> start the HTTP interface and the container hosting the HTTP interface >>> should not start a cluster at all. >>> >>> To run an HTTP service inside of the Hyracks cluster controller another >>> project that’s based on Hyracks - Apache AsterixDB (incubating) [1] - >>> uses >>> Jetty [2]. However, another interesting option to do this that should be >>> considered is Netty [3]. >>> >>> To get some more information about the cluster architecture of VXQuery >>> you >>> could also take a look at 2 technical reports on VXQuery [4] and the >>> underlying Hyracks platform [5]. >>> >>> Does this help? >>> Till >>> >>> [1] http://asterixdb.incubator.apache.org/ >>> [2] https://eclipse.org/jetty/ >>> [3] http://netty.io/ >>> [4] http://arxiv.org/abs/1504.00331 >>> [5] https://asterix.ics.uci.edu/pub/Hyracks.pdf >>> >>> >>> On 2 Mar 2016, at 7:51, Dilanka Rathnayake wrote: >>> >>> I created a Restful API to get query result using vxquery CLI. >>> >>>> >>>> I implemented a new java class called vxquery.java and the controller of >>>> Rest service call the 'run()' method in vxquery.java. But, as soon as >>>> the >>>> 'run()' has been called an exception is thrown as follows. >>>> 'org.apache.hyracks.api.exceptions.HyracksDataException: >>>> org.apache.hyracks.api.exceptions.HyracksDataException: >>>> org.apache.hyracks.api.exceptions.HyracksDataException: >>>> org.apache.hyracks.algebricks.common.exceptions.AlgebricksException: >>>> org.apache.vxquery.exceptions.SystemException: SYSE0001:' >>>> >>>> If I run same method in same way through the main method in >>>> vxquery.java, >>>> then it runs normally and gives the expected result. >>>> When I was debugging, I have found out that the exception is throwing >>>> because of "request error" when calling the method >>>> 'deliverIncomingMessage()' in RPCInterface.class. >>>> >>>> I think the above mentioned error is occurred because the CLI is >>>> starting >>>> a >>>> cluster and run the query even if a cluster has not been defined. At >>>> that >>>> time we cant send requests to localhost by tomcat. >>>> Is this correct? Does anyone has an idea to solve this. Appreciate any >>>> help >>>> regarding this. I am trying to find a solution almost 2 days. Still no >>>> success. >>>> >>>> You can check my code here.. >>>> https://github.com/dilankamr/vxquery >>>> Please check "readme" for more info. >>>> >>>> *Best Regards.* >>>> >>>> *Dilanka Rathnayake,* >>>> *Department of Computer Engineering,* >>>> >>>> *Faculty of Engineering,**University of Peradeniya,* >>>> *Sri Lanka.* >>>> >>>> >>>> * <https://lk.linkedin.com/in/dilankamr> >>>> <https://www.facebook.com/Dilankamr> * >>>> >>>> >>>
