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