I don't see problem with deleteCachedLocation().
Maybe you were thinking about this line:
            tableLocations.remove(rl.getRegionInfo().getStartKey());
Looking at http://www.docjar.com/html/api/java/util/TreeMap.java.html, line
2467, isInRange() is called before the actual removal.

Cheers

On Thu, May 12, 2011 at 6:01 PM, Gaojinchao <[email protected]> wrote:

> Hi Ted, Thanks for your patch.
>
> I am not familiar with SoftValueSortedMap.
> Please check this function.
>
>  void deleteCachedLocation(final byte [] tableName, final byte [] row) {
>      synchronized (this.cachedRegionLocations) {
>        SoftValueSortedMap<byte [], HRegionLocation> tableLocations =
>            getTableLocations(tableName);
>        // start to examine the cache. we can only do cache actions
>        // if there's something in the cache for this table.
>        if (!tableLocations.isEmpty()) {
>          HRegionLocation rl = getCachedLocation(tableName, row);
>          if (rl != null) {
>            tableLocations.remove(rl.getRegionInfo().getStartKey());
>            if (LOG.isDebugEnabled()) {
>              LOG.debug("Removed " +
>                rl.getRegionInfo().getRegionNameAsString() +
>                " for tableName=" + Bytes.toString(tableName) +
>                " from cache " + "because of " + Bytes.toStringBinary(row));
>            }
>          }
>        }
>      }
>    }
>
>
> -----邮件原件-----
> 发件人: Ted Yu (JIRA) [mailto:[email protected]]
> 发送时间: 2011年5月12日 22:44
> 收件人: Gaojinchao
> 主题: [jira] [Updated] (HBASE-3878) Hbase client throws
> NoSuchElementException
>
>
>     [
> https://issues.apache.org/jira/browse/HBASE-3878?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel]
>
> Ted Yu updated HBASE-3878:
> --------------------------
>
>    Attachment: 3878.patch
>
> Added try/catch block to guard against NoSuchElementException.
>
> We already check possibleRegion not being null.
>
> > Hbase client throws NoSuchElementException
> > ------------------------------------------
> >
> >                 Key: HBASE-3878
> >                 URL: https://issues.apache.org/jira/browse/HBASE-3878
> >             Project: HBase
> >          Issue Type: Bug
> >          Components: client
> >    Affects Versions: 0.90.2
> >            Reporter: gaojinchao
> >             Fix For: 0.90.4
> >
> >         Attachments: 3878.patch
> >
> >
> > Soft reference objects, which are cleared at the discretion of the
> > garbage collector in response to memory demand.
> > I used ycsb to put data and threw exception.
> > >>>>
> > >>>>  Hbase Code:
> > >>>>     // Cut the cache so that we only get the part that could contain
> > >>>>     // regions that match our key
> > >>>>     SoftValueSortedMap<byte[], HRegionLocation> matchingRegions =
> > >>>>       tableLocations.headMap(row);
> > >>>>
> > >>>>     // if that portion of the map is empty, then we're done.
> otherwise,
> > >>>>     // we need to examine the cached location to verify that it is
> > >>>>     // a match by end key as well.
> > >>>>     if (!matchingRegions.isEmpty()) {
> > >>>>       HRegionLocation possibleRegion =
> > >>>>         matchingRegions.get(matchingRegions.lastKey());
> > >>>>
> > >>>>   ycsb client log:
> > >>>>
> > >>>>   [java] begin StatusThread run
> > >>>>    [java] java.util.NoSuchElementException
> > >>>>    [java]     at java.util.TreeMap.key(TreeMap.java:1206)
> > >>>>    [java]     at
> > >> java.util.TreeMap$NavigableSubMap.lastKey(TreeMap.java:1435)
> > >>>>    [java]     at
> > >> org.apache.hadoop.hbase.util.SoftValueSortedMap.lastKey(SoftValueSort
> > >> edMap.java:131)
> > >>>>    [java]     at
> > >> org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplemen
> > >> tation.getCachedLocation(HConnectionManager.java:841)
> > >>>>    [java]     at
> > >> org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplemen
> > >> tation.locateRegionInMeta(HConnectionManager.java:664)
> > >>>>    [java]     at
> > >> org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplemen
> > >> tation.locateRegion(HConnectionManager.java:590)
> > >>>>    [java]     at
> > >> org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplemen
> > >> tation.processBatch(HConnectionManager.java:1114)
> > >>>>    [java]     at
> > >> org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplemen
> > >> tation.processBatchOfPuts(HConnectionManager.java:1234)
> > >>>>    [java]     at
> > >> org.apache.hadoop.hbase.client.HTable.flushCommits(HTable.java:819)
> > >>>>    [java]     at
> > >> org.apache.hadoop.hbase.client.HTable.doPut(HTable.java:675)
> > >>>>    [java]     at
> > >> org.apache.hadoop.hbase.client.HTable.put(HTable.java:665)
> > >>>>    [java]     at com.yahoo.ycsb.db.HBaseClient.update(Unknown
> Source)
> > >>>>    [java]     at com.yahoo.ycsb.db.HBaseClient.insert(Unknown
> Source)
> > >>>>    [java]     at com.yahoo.ycsb.DBWrapper.insert(Unknown Source)
> > >>>>    [java]     at
> com.yahoo.ycsb.workloads.MyWorkload.doInsert(Unknown
> > >> Source)
> > >>>>    [java]     at com.yahoo.ycsb.ClientThread.run(Unknown Source)
>
> --
> This message is automatically generated by JIRA.
> For more information on JIRA, see: http://www.atlassian.com/software/jira
>

Reply via email to