fix cassandra stress errors on reads with native protocol

patch by belliottsmith; reviewed by jasobrown for CASSANDRA-7033
This commit is contained in:
Jason Brown 2014-04-22 10:04:11 -07:00
parent 5045d3ea86
commit a16adba9b8
4 changed files with 22 additions and 28 deletions

View File

@ -48,6 +48,7 @@
* Clean up IndexInfo on keyspace/table drops (CASSANDRA-6924)
* Only snapshot relative SSTables when sequential repair (CASSANDRA-7024)
* Require nodetool rebuild_index to specify index names (CASSANDRA-7038)
* fix cassandra stress errors on reads with native protocol (CASANDRA-7033)
Merged from 2.0:
* Use LOCAL_QUORUM for data reads at LOCAL_SERIAL (CASSANDRA-6939)
* Log a warning for large batches (CASSANDRA-6487)

View File

@ -47,13 +47,8 @@ public class CqlIndexedRangeSlicer extends CqlOperation<byte[][]>
@Override
protected String buildQuery()
{
StringBuilder query = new StringBuilder("SELECT ");
if (state.isCql2())
query.append(state.settings.columns.maxColumnsPerKey).append(" ''..''");
else
query.append("*");
StringBuilder query = new StringBuilder("SELECT");
query.append(wrapInQuotesIfRequired("key"));
query.append(" FROM ");
query.append(wrapInQuotesIfRequired(state.type.table));

View File

@ -145,7 +145,7 @@ public abstract class CqlOperation<V> extends Operation
@Override
public boolean validate(Integer result)
{
return true;
return result > 0;
}
@Override
@ -195,12 +195,8 @@ public abstract class CqlOperation<V> extends Operation
if (result.length != expect.size())
return false;
for (int i = 0 ; i < result.length ; i++)
{
List<ByteBuffer> resultRow = Arrays.asList(result[i]);
resultRow = resultRow.subList(1, resultRow.size());
if (expect.get(i) != null && !expect.get(i).equals(resultRow))
if (expect.get(i) != null && !expect.get(i).equals(Arrays.asList(result[i])))
return false;
}
return true;
}
}
@ -510,9 +506,9 @@ public abstract class CqlOperation<V> extends Operation
for (int i = 0 ; i < r.length ; i++)
{
Row row = rows.get(i);
r[i] = new ByteBuffer[row.getColumnDefinitions().size() - 1];
for (int j = 1 ; j < row.getColumnDefinitions().size() ; j++)
r[i][j - 1] = row.getBytes(j);
r[i] = new ByteBuffer[row.getColumnDefinitions().size()];
for (int j = 0 ; j < row.getColumnDefinitions().size() ; j++)
r[i][j] = row.getBytes(j);
}
return r;
}

View File

@ -22,11 +22,14 @@ package org.apache.cassandra.stress.operations;
import java.nio.ByteBuffer;
import java.nio.charset.CharacterCodingException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.apache.cassandra.utils.ByteBufferUtil;
public class CqlReader extends CqlOperation<ByteBuffer[][]>
{
@ -49,11 +52,18 @@ public class CqlReader extends CqlOperation<ByteBuffer[][]>
}
else
{
for (int i = 0; i < state.settings.columns.names.size() ; i++)
try
{
if (i > 0)
query.append(",");
query.append('?');
for (int i = 0; i < state.settings.columns.names.size() ; i++)
{
if (i > 0)
query.append(",");
query.append(wrapInQuotesIfRequired(ByteBufferUtil.string(state.settings.columns.names.get(i))));
}
}
catch (CharacterCodingException e)
{
throw new IllegalStateException(e);
}
}
@ -68,14 +78,6 @@ public class CqlReader extends CqlOperation<ByteBuffer[][]>
@Override
protected List<Object> getQueryParameters(byte[] key)
{
if (state.settings.columns.names != null)
{
final List<Object> queryParams = new ArrayList<>();
for (ByteBuffer name : state.settings.columns.names)
queryParams.add(name);
queryParams.add(ByteBuffer.wrap(key));
return queryParams;
}
return Collections.<Object>singletonList(ByteBuffer.wrap(key));
}