+1 on Vladimir’s suggestion. Let’s remember to document it whenever we make
the change.

I also think that we should have an out-of-the-box implementation of the
file-system-factory with a fix for Kerberos.

D.

On Thu, Dec 17, 2015 at 12:01 PM, Vladimir Ozerov <voze...@gridgain.com>
wrote:

> + 1 for idea in general, but I have several concerns:
>
> 1) SecondaryFileSystemProvider is internal class and cannot be exposed. We
> need some other interface here.
> 2) I would avoid setting properties through constructor because it is
> error-prone when Spring is used. Instead, I would create setters as in
> almost all other components.
> 3) Ideally we should not break existing interfaces.
>
> To summarize, it could looks as follows:
>
> class IgniteHadoopIgfsSecondaryFileSystem {
>     /** These properties already exist. */
>     void setUri(String fileSystemUri);
>     void setConfig(String pathToConfig);
>     void setUserName(String userName);
>
>     /** This is a new property. */
>     void setFileSystemFactory(HadoopFileSystemFactory factory);
> }
>
> interface HadoopFileSystemFactory {
>     FileSystem create(String uri, String configPath, String userName);
> }
>
> Vladimir.
>
> On Thu, Dec 17, 2015 at 10:34 PM, Ivan V. <iveselovs...@gridgain.com>
> wrote:
>
> > To summarize suggested change in short: we add constructor
> >
> >
> org.apache.ignite.hadoop.fs.IgniteHadoopIgfsSecondaryFileSystem#IgniteHadoopIgfsSecondaryFileSystem(java.lang.String,
> >
> org.apache.ignite.internal.processors.hadoop.SecondaryFileSystemProvider) ,
> > allowing to plug an arbitrary SecondaryFileSystemProvider bean when
> > constructing IgniteHadoopIgfsSecondaryFileSystem , e.g:
> >
> >                        <bean
> > class="org.apache.ignite.hadoop.fs.IgniteHadoopIgfsSecondaryFileSystem">
> >                             <constructor-arg name="userName"
> value="ivan"/>
> >                             <constructor-arg name="provider">
> >                                 <bean class="
> > *com.foo.MySuperSecondaryFileSystemProvider*">
> >                                         <constructor-arg name="secUri"
> > value="hdfs://localhost:9000"/>
> >                                         <constructor-arg
> > name="secConfPath"><null/></constructor-arg>
> >                                 </bean>
> >                             </constructor-arg>
> >                         </bean>
> >
> >
> > On Thu, Dec 17, 2015 at 10:14 PM, Ivan V. <iveselovs...@gridgain.com>
> > wrote:
> >
> > > Hi, dev,
> > > one of Ignite users discovered that IGFS does not correctly work with
> > > secondary HDFS file system if that HDFS is "kerberised". The issue is
> > > described in https://issues.apache.org/jira/browse/IGNITE-2195 (This
> may
> > > also be close to this issue:
> > >
> >
> http://apache-ignite-users.70518.x6.nabble.com/Exception-in-Kerberos-Yarn-cluster-td1950.html
> > > ). The user suggests a fix that creates SecondaryFileSystem using some
> > > proxy UserGroupInformation, and that workaround works for him.
> > > However, we're not sure this fix is generic enough and will work well
> in
> > > all possible configurations.
> > > So, there is an idea to make SecondaryFileSystemProvider pluggable to
> > > allow users to write own code for specific configurations. An example
> can
> > > be seen in this pull request:
> > > https://github.com/apache/ignite/pull/350 .
> > > Pros, cons, other thoughts?
> > > Thanks in advance.
> > > --
> > > ivan
> > >
> >
>

Reply via email to