Author: brandonwilliams Date: Fri Aug 27 19:41:12 2010 New Revision: 990241
URL: http://svn.apache.org/viewvc?rev=990241&view=rev Log: Always use UTF-8 for hint keys. Patch by brandonwilliams, reviewed by jbellis for CASSANDRA-1439 Modified: cassandra/trunk/CHANGES.txt cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManager.java cassandra/trunk/src/java/org/apache/cassandra/db/RowMutationVerbHandler.java cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java Modified: cassandra/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/cassandra/trunk/CHANGES.txt?rev=990241&r1=990240&r2=990241&view=diff ============================================================================== --- cassandra/trunk/CHANGES.txt (original) +++ cassandra/trunk/CHANGES.txt Fri Aug 27 19:41:12 2010 @@ -1,4 +1,5 @@ dev + * always use UTF-8 for hint keys (CASSANDRA-1439) * remove cassandra.yaml dependency from Hadoop and Pig (CASSADRA-1322) * expose CfDef metadata in describe_keyspaces (CASSANDRA-1633) * restore use of mmap_index_only option (CASSANDRA-1241) Modified: cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManager.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManager.java?rev=990241&r1=990240&r2=990241&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManager.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManager.java Fri Aug 27 19:41:12 2010 @@ -202,7 +202,7 @@ public class HintedHandOffManager // 3. Delete the subcolumn if the write was successful // 4. Force a flush // 5. Do major compaction to clean up all deletes etc. - DecoratedKey epkey = StorageService.getPartitioner().decorateKey(endpoint.getAddress()); + DecoratedKey epkey = StorageService.getPartitioner().decorateKey(endpoint.getHostAddress().getBytes(UTF_8)); int rowsReplayed = 0; ColumnFamilyStore hintStore = Table.open(Table.SYSTEM_TABLE).getColumnFamilyStore(HINTS_CF); byte[] startColumn = ArrayUtils.EMPTY_BYTE_ARRAY; @@ -223,7 +223,7 @@ public class HintedHandOffManager String[] parts = getTableAndCFNames(tableCF.name()); if (sendMessage(endpoint, parts[0], parts[1], keyColumn.name())) { - deleteHintKey(endpoint.getAddress(), keyColumn.name(), tableCF.name(), tableCF.clock()); + deleteHintKey(endpoint.getHostAddress().getBytes(UTF_8), keyColumn.name(), tableCF.name(), tableCF.clock()); rowsReplayed++; } else Modified: cassandra/trunk/src/java/org/apache/cassandra/db/RowMutationVerbHandler.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/RowMutationVerbHandler.java?rev=990241&r1=990240&r2=990241&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/db/RowMutationVerbHandler.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/db/RowMutationVerbHandler.java Fri Aug 27 19:41:12 2010 @@ -32,6 +32,9 @@ import org.slf4j.LoggerFactory; import org.apache.cassandra.net.*; import org.apache.cassandra.utils.FBUtilities; +import static com.google.common.base.Charsets.UTF_8; + + public class RowMutationVerbHandler implements IVerbHandler { private static Logger logger_ = LoggerFactory.getLogger(RowMutationVerbHandler.class); @@ -53,7 +56,7 @@ public class RowMutationVerbHandler impl { assert hintedBytes.length > 0; ByteBuffer bb = ByteBuffer.wrap(hintedBytes); - byte[] addressBytes = new byte[FBUtilities.getLocalAddress().getAddress().length]; + byte[] addressBytes = new byte[FBUtilities.getLocalAddress().getHostAddress().getBytes(UTF_8).length]; while (bb.remaining() > 0) { bb.get(addressBytes); Modified: cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java?rev=990241&r1=990240&r2=990241&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java Fri Aug 27 19:41:12 2010 @@ -30,6 +30,7 @@ import javax.management.ObjectName; import com.google.common.collect.AbstractIterator; import com.google.common.collect.Multimap; +import static com.google.common.base.Charsets.UTF_8; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; @@ -179,7 +180,8 @@ public class StorageProxy implements Sto private static void addHintHeader(Message message, InetAddress target) { byte[] oldHint = message.getHeader(RowMutation.HINT); - byte[] hint = oldHint == null ? target.getAddress() : ArrayUtils.addAll(oldHint, target.getAddress()); + byte[] address = target.getHostAddress().getBytes(UTF_8); + byte[] hint = oldHint == null ? address : ArrayUtils.addAll(oldHint, address); message.setHeader(RowMutation.HINT, hint); }
