You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hbase.apache.org by "LN (JIRA)" <ji...@apache.org> on 2008/06/14 10:17:45 UTC
[jira] Commented: (HBASE-686) memcache.getScanner didn't return the
first row(if it exists), cause HScannerInterface's output incorrect
[ https://issues.apache.org/jira/browse/HBASE-686?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12605048#action_12605048 ]
LN commented on HBASE-686:
--------------------------
a testcase for this issue, i add this to TestHMemcache.java for reproduce and validating my patch.
/**
* Test memcache scanner scanning cached rows, see HBASE-686
* @throws IOException
*/
public void testScanner_686() throws IOException
{
addRows(this.hmemcache);
long timestamp = System.currentTimeMillis();
Text[] cols = new Text[COLUMNS_COUNT * ROW_COUNT];
for (int i = 0; i < ROW_COUNT; i++)
{
for (int ii = 0; ii < COLUMNS_COUNT; ii++)
{
cols[(ii + (i * COLUMNS_COUNT))] = getColumnName(i, ii);
}
}
//starting from each row, validate results should contain the starting row
for (int startRowId = 0; startRowId < ROW_COUNT; startRowId++)
{
HInternalScannerInterface scanner =
this.hmemcache.getScanner(timestamp, cols
, new Text(getRowName(startRowId)));
HStoreKey key = new HStoreKey();
TreeMap<Text, byte[]> results = new TreeMap<Text, byte[]>();
for (int i = 0; scanner.next(key, results); i++)
{
int rowId = startRowId + i;
assertTrue("Row name",
key.toString().startsWith(getRowName(rowId).toString()));
assertEquals("Count of columns", COLUMNS_COUNT,
results.size());
TreeMap<Text, byte[]> row = new TreeMap<Text, byte[]>();
for (Map.Entry<Text, byte[]> e : results.entrySet())
{
row.put(e.getKey(), e.getValue());
}
isExpectedRow(rowId, row);
// Clear out set. Otherwise row results accumulate.
results.clear();
}
}
}
> memcache.getScanner didn't return the first row(if it exists), cause HScannerInterface's output incorrect
> ---------------------------------------------------------------------------------------------------------
>
> Key: HBASE-686
> URL: https://issues.apache.org/jira/browse/HBASE-686
> Project: Hadoop HBase
> Issue Type: Bug
> Affects Versions: 0.1.2
> Reporter: LN
>
> HTable.obtainScanner methods should return the start row if it exists, although HTable's javadoc didn't clearly desc. but i found the result of htable scanners sometimes contain the start row, sometimes not.
> after more testing and code review, i found it should be a bug in HStore.Memcache.MemcacheScanner. in the constructor it set this.currentRow = firstRow, but when doing next(), there's a this.currentRow = getNextRow(this.currentRow) before fetch result.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.