Sure, but is the usage below correct in a multi-threaded context?

i.e. Can i return the table to the pool before using the Result (or
Scanner) ?

HTablePool pool = myPool;
Get get = myGet;
HTable table = pool.getTable(myTableName);;
Result result = null;
try {
     result = table.get(get);
} finally {
    pool.putTable(table);
}

// use Result now table has been returned to pool.
r.getValue(Bytes.toBytes("COL"), Bytes.toBytes("ID"))



On Tue, 2011-09-27 at 10:17 -0700, Jean-Daniel Cryans wrote:
> Like the doc says: http://hbase.apache.org/book.html#client.connections
> 
> "For applications which require high-end multithreaded access (e.g.,
> web-servers or application servers that may serve many application
> threads in a single JVM), see HTablePool."
> 
> J-D
> 
> On Tue, Sep 27, 2011 at 8:52 AM, Joel Halbert <j...@su3analytics.com> wrote:
> > But in a highly multi-threaded context?
> >
> > I guess my question is: is it thread-safe?
> >
> > On Tue, 2011-09-27 at 09:18 -0500, Michael Segel wrote:
> >> Outside of a M/R context, sure, why not?
> >>
> >>
> >> > Subject: Correct use of HTablePool
> >> > From: j...@su3analytics.com
> >> > To: user@hbase.apache.org
> >> > Date: Tue, 27 Sep 2011 10:19:04 +0100
> >> >
> >> > When using an HTablePool and calling get() or scan() can I return the
> >> > Table to the pool as soon as I have the Result of Scanner object?
> >> >
> >> > i.e. is this valid?
> >> >
> >> > HTablePool pool = myPool;
> >> > Get get = myGet;
> >> > HTable table = pool.getTable(myTableName);;
> >> > Result result = null;
> >> > try {
> >> >     result = table.get(get);
> >> > } finally {
> >> >     pool.putTable(table);
> >> > }
> >> >
> >> > // use Result now table has been returned to pool.
> >> > r.getValue(Bytes.toBytes("COL"), Bytes.toBytes("ID"))
> >> >
> >> >
> >> > and likewise with a Scanner
> >> >
> >> > Rgs
> >> > Joel
> >>
> >
> >
> >


Reply via email to