/*
* @(#) SimpleReadResponseResolver.java
* Created Jan 31, 2012 by oleg
* (C) ONE, SIA
*/
package org.apache.cassandra.service;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.util.List;
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.db.ColumnFamily;
import org.apache.cassandra.db.ReadResponse;
import org.apache.cassandra.db.Row;
import org.apache.cassandra.net.Message;
import org.apache.log4j.Logger;
/**
* Fast and simple read resolver object when you dont need all those NBH.
*
* @author Oleg Anastasyev<oa@hq.one.lv>
*
*/
public class SimpleReadResponseResolver
{
protected static Logger logger_ = Logger.getLogger(ReadResponseResolver.class);
protected final String table;
protected final String key;
/**
*
*/
public SimpleReadResponseResolver(String table, String key)
{
this.table = table;
this.key = key;
}
public Row resolve(List<ColumnFamily> versions, List<InetAddress> endPoints)
{
ColumnFamily resolved;
if (versions.size() > 1)
{
resolved = ReadResponseResolver.resolveSuperset(versions);
if (logger_.isDebugEnabled())
logger_.debug("versions merged");
ReadResponseResolver.maybeScheduleRepairs(resolved, table, key, versions, endPoints);
}
else
{
resolved = versions.get(0);
}
return new Row(key, resolved);
}
public Row resolve(List<ColumnFamily> versions)
{
ColumnFamily resolved;
if (versions.size() > 1)
{
resolved = ReadResponseResolver.resolveSuperset(versions);
if (logger_.isDebugEnabled())
logger_.debug("versions merged");
}
else
{
resolved = versions.get(0);
}
return new Row(key, resolved);
}
public ReadResponse parseResponse(Message message) throws IOException
{
byte[] body = message.getMessageBody();
ByteArrayInputStream bufIn = new ByteArrayInputStream(body);
ReadResponse result = ReadResponse.serializer().deserialize(new DataInputStream(bufIn));
return result;
}
public void maybeScheduleRepairs(ColumnFamily resolved, List<ColumnFamily> versions, List<InetAddress> endPoints)
{
ReadResponseResolver.maybeScheduleRepairs(resolved, table, key, versions, endPoints);
}
}