Yes, I had just upgrade to 0.90.3 this moning and retest the split, and also
checked the code.
The split works fine.



On Wed, Jun 1, 2011 at 12:10 PM, Ted Yu <[email protected]> wrote:

> Schubert:
> Are you able to upgrade to 0.90.3 ?
>
> On Tue, May 31, 2011 at 7:06 PM, Schubert Zhang <[email protected]> wrote:
>
> > Another issue:
> >
> > in Store.compct()
> >
> >      if (!majorcompaction && !references &&
> >          (forceSplit || (filesToCompact.size() < compactionThreshold))) {
> >        return checkSplit(forceSplit);
> >      }
> >
> > In some cases, (filesToCompact.size() >= compactionThreshold), but the
> > following compaction logic still cannot compact to make number of
> > storefiles
> > lower, since the file-selection-policy of compaction is very complicated.
> >
> >
> >
> > On Wed, Jun 1, 2011 at 9:42 AM, Schubert Zhang <[email protected]>
> wrote:
> >
> > > Thanks Ted.
> > >
> > > We are using 0.90.1 now.
> > >
> > > It's good news that new 0.90.3 and trunk resolved this issue.
> > >
> > >
> > >
> > > On Wed, Jun 1, 2011 at 1:35 AM, Ted Yu <[email protected]> wrote:
> > >
> > >> Which version of HBase are you using ?
> > >> In 0.90.3, I see this in Store.compact():
> > >>    boolean forceSplit = this.region.shouldForceSplit();
> > >> For trunk, the code has been rewritten.
> > >>
> > >> Cheers
> > >>
> > >> On Mon, May 30, 2011 at 11:27 PM, Schubert Zhang <[email protected]>
> > >> wrote:
> > >>
> > >> > We found a issue of forceSplit.
> > >> >
> > >> > 1. My schema:
> > >> >    We have a table with multiple column families: A, B, C, D
> > >> >    After put many data, but there may be no data (no storeFile) for
> > some
> > >> > stores.
> > >> >    for example: store A and B is empty, but C and D have many data
> > now.
> > >> >
> > >> > 2. Then I request a split from hbase shell or the web GUI, but
> nothing
> > >> > happend.
> > >> >
> > >> > 3. Then we check the code, it may be a bug for multiple CFs.
> > >> >    (1) split request.
> > >> >         RegionServer:   region.shouldSplit(true)
> > >> >         and enqueue this request
> > >> >    (2) HRegion.compactStores(false)
> > >> >         for (Store store: stores.values()) {
> > >> >            final Store.StoreSize ss =
> store.compact(majorCompaction);
> > >> >            lastCompactSize += store.getLastCompactSize();
> > >> >            if (ss != null && ss.getSize() > maxSize) {
> > >> >              maxSize = ss.getSize();
> > >> >              splitRow = ss.getSplitRow();
> > >> >            }
> > >> >          }
> > >> >         but, for store A and store B, store.compact(false) returns
> > null.
> > >> >     (3) Store.compact(false)
> > >> >          boolean forceSplit = this.region.shouldSplit(false);
> > >> >          for the first store A and second store B, it set
> > >> > this.splitRequest=false. This is a bug.
> > >> >     (4) Then even for store C and D which have many data, forceSplit
> > is
> > >> > always false.
> > >> >
> > >> >
> > >> > btw: seems the current code of compaction/spliting is so disordered
> > and
> > >> > confused.
> > >> >
> > >> > Schubert
> > >> >
> > >>
> > >
> > >
> >
>

Reply via email to