You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@ignite.apache.org by Kobe <rk...@mailcity.com> on 2015/12/04 20:26:47 UTC

How is igfs:// URL resolved?

I am using IGFS to store large data files. The content is not fed to Hadoop
(I have no Hadoop in my system now). IGFS runs in my tomcat container and
exposes the IGFS files as URL to the web client.

Without IGFS, I would put my content on local file system ad have Tomcat
make it visible so:

  { Tomcat [ ( file ./data/foo ) ] } <=======> Browser
(http://tomcat/myapp/data/foo)


With IGFS, I assume I do this:

  { Tomcat [ IGFS myigfs ( file /data/foo ) ] } <=======> Browser
(http://myserver/myapp/data/foo)

That is, the client still access the content at URL /myapp/data/foo
but somehow Tomcat must be able to map this URL to the IGFS URL

    igfs://myigfs@myserver:12345/ 

How do I map the incoming URL to the IGFS URL?

thanx,

/Kobe

    



--
View this message in context: http://apache-ignite-users.70518.x6.nabble.com/How-is-igfs-URL-resolved-tp2142.html
Sent from the Apache Ignite Users mailing list archive at Nabble.com.

Re: How is igfs:// URL resolved?

Posted by Denis Magda <dm...@gridgain.com>.
Kobe,

In my understanding everything looks fine in your approach.

Summarizing the execution flow will look like this:
- client sends a request "http:/some.host.com/get/myigfs/data/content.gif";
- server receives the request and gets IGFS file system name (myigfs) 
and a path to a file to return (data/content.gif) from it;
- server code gets a reference to IgniteFIleSystem named "myigfs" and 
opens IgfsInputStream to the content path;
- reads data from IgfsInputStream and writes it back to response's 
OutputStream


--
Denis

On 1/13/2016 7:31 PM, Kobe wrote:
> Denis,
>
> I am afraid I do not understand how I can convert the two elements:
>
>
>>               IgniteFileSystem fs = ignite.fileSystem("myigfs");
>>
>>              // Image path.
>>              IgfsPath workDir = new IgfsPath("/data/content.gif");
> into a URL that the client can consume.
>
> The only thought I have is that I could  open IgfsInputStream and stream it
> into HttpConnection OutputStream after setting the appropriate content-type
> like so:
>
>
>> // Open input stream to the image in IGFS ...
>>       IgniteFileSystem fs = ignite.fileSystem("myigfs");
>>              IgfsPath myImage = new IgfsPath("/data/content.gif");
>>    IgfsInputStream inps = fs.open(myImage);
>>
>> byte[] buf = new byte[4096];
>> int len = -1;
>>
>> // Read from IGFS input stream and stuff into servlet response output
>> stream
>> while ((len = inStream.read(buf)) != -1) {
>>      outStream.write(buf, 0, len);
>> }
>>
>> outStream.flush();
>> outStream.close();
> Is there a better way?
>
> thanks again for your assistance.
>
> /Kobe
>
>
>
>
>
> --
> View this message in context: http://apache-ignite-users.70518.x6.nabble.com/How-is-igfs-URL-resolved-tp2142p2545.html
> Sent from the Apache Ignite Users mailing list archive at Nabble.com.


Re: How is igfs:// URL resolved?

Posted by Kobe <rk...@mailcity.com>.
Denis,

I am afraid I do not understand how I can convert the two elements:


>              IgniteFileSystem fs = ignite.fileSystem("myigfs"); 
> 
>             // Image path. 
>             IgfsPath workDir = new IgfsPath("/data/content.gif");

into a URL that the client can consume.

The only thought I have is that I could  open IgfsInputStream and stream it
into HttpConnection OutputStream after setting the appropriate content-type
like so:


> // Open input stream to the image in IGFS ...
>      IgniteFileSystem fs = ignite.fileSystem("myigfs"); 
>             IgfsPath myImage = new IgfsPath("/data/content.gif");
>   IgfsInputStream inps = fs.open(myImage);
> 
> byte[] buf = new byte[4096];
> int len = -1;
> 
> // Read from IGFS input stream and stuff into servlet response output
> stream
> while ((len = inStream.read(buf)) != -1) {
>     outStream.write(buf, 0, len);
> }
> 
> outStream.flush();
> outStream.close();

Is there a better way?

thanks again for your assistance.

/Kobe





--
View this message in context: http://apache-ignite-users.70518.x6.nabble.com/How-is-igfs-URL-resolved-tp2142p2545.html
Sent from the Apache Ignite Users mailing list archive at Nabble.com.

Re: How is igfs:// URL resolved?

Posted by Denis Magda <dm...@gridgain.com>.
Hi Kobe,

There is no an example for your specific use case.
However your understanding is correct on how this should be implemented.

This is exactly what I had in mind when was going the suggestions in the 
previous reply

            IgniteFileSystem fs = ignite.fileSystem("myigfs");

             // Image path.
             IgfsPath workDir = new IgfsPath("/data/content.gif");

--
Denis


On 1/13/2016 3:11 AM, Kobe wrote:
> Denis Magda wrote
>> Hi Kobe,
>>
>> If I understood you task properly you want to map a path portion of an
>> HTTP request to an IGFS path.
>>
>> If this is your case then I would suggest doing the following:
>> - create a Web application that is running in a Tomcat container;
>> - the application will use Ignite in the embedded mode (start an Ignite
>> node from the app code);
>> - process incoming HTTP requests as usual extracting the path part from a
>> request;
>> - take instance of Igfs from previously started Ignite node and pass the
>> path and content to it. Refer to IgfsExample that is a part of Ignite
>> bundle/sources for more details.
>>
>> Regards,
>> Denis
> Denis,
>
> I went through the IGFS examples and did not quite see what I wanted. My
> problem is simply this:
> I am generating content into a file in IGFS that needs to be displayed on
> the browser. If the content (on the server) were in file
> webapps/myapp/content.gif I would return the URL
>        http://<server>/myapp/content.gif
> to the browser to the content may be rendered on the browser.
>
> Since my content is in IGFS, what would be the file:// URL of a file in
> (embedded) IGFS instance
> "myigfs" in path /data/content.gif as shown below?
>
>>             IgniteFileSystem fs = ignite.fileSystem("myigfs");
>>
>>              // Image path.
>>              IgfsPath workDir = new IgfsPath("/data/content.gif");
> Thanx,
>
> kobe
>
>
>
>
> --
> View this message in context: http://apache-ignite-users.70518.x6.nabble.com/How-is-igfs-URL-resolved-tp2142p2523.html
> Sent from the Apache Ignite Users mailing list archive at Nabble.com.


Re: How is igfs:// URL resolved?

Posted by Kobe <rk...@mailcity.com>.
Denis Magda wrote
> Hi Kobe,
> 
> If I understood you task properly you want to map a path portion of an
> HTTP request to an IGFS path.
> 
> If this is your case then I would suggest doing the following:
> - create a Web application that is running in a Tomcat container;
> - the application will use Ignite in the embedded mode (start an Ignite
> node from the app code);
> - process incoming HTTP requests as usual extracting the path part from a
> request;
> - take instance of Igfs from previously started Ignite node and pass the
> path and content to it. Refer to IgfsExample that is a part of Ignite
> bundle/sources for more details.
> 
> Regards,
> Denis

Denis,

I went through the IGFS examples and did not quite see what I wanted. My
problem is simply this: 
I am generating content into a file in IGFS that needs to be displayed on
the browser. If the content (on the server) were in file
webapps/myapp/content.gif I would return the URL
      http://<server>/myapp/content.gif
to the browser to the content may be rendered on the browser.

Since my content is in IGFS, what would be the file:// URL of a file in
(embedded) IGFS instance
"myigfs" in path /data/content.gif as shown below?

>            IgniteFileSystem fs = ignite.fileSystem("myigfs");
> 
>             // Image path.
>             IgfsPath workDir = new IgfsPath("/data/content.gif");

Thanx,

kobe




--
View this message in context: http://apache-ignite-users.70518.x6.nabble.com/How-is-igfs-URL-resolved-tp2142p2523.html
Sent from the Apache Ignite Users mailing list archive at Nabble.com.

Re: How is igfs:// URL resolved?

Posted by Denis Magda <dm...@gridgain.com>.
Hi Kobe,

If I understood you task properly you want to map a path portion of an HTTP
request to an IGFS path.

If this is your case then I would suggest doing the following:
- create a Web application that is running in a Tomcat container;
- the application will use Ignite in the embedded mode (start an Ignite node
from the app code);
- process incoming HTTP requests as usual extracting the path part from a
request;
- take instance of Igfs from previously started Ignite node and pass the
path and content to it. Refer to IgfsExample that is a part of Ignite
bundle/sources for more details.

Regards,
Denis 



--
View this message in context: http://apache-ignite-users.70518.x6.nabble.com/How-is-igfs-URL-resolved-tp2142p2158.html
Sent from the Apache Ignite Users mailing list archive at Nabble.com.