Hi guys, before I go ahead and open an enhancement bug for this, I just want to make sure it is valid. In HintedHandOffManager in the part where we deliver a message to the target node:
private static boolean sendMessage(InetAddress endPoint, String tableName, String key) throws IOException { if (!FailureDetector.instance().isAlive(endPoint)) { return false; } Table table = Table.open(tableName); RowMutation rm = new RowMutation(tableName, key); for (ColumnFamilyStore cfstore : table.getColumnFamilyStores().values()) { ColumnFamily cf = cfstore.getColumnFamily(new IdentityQueryFilter(key, new QueryPath(cfstore.getColumnFamilyName()))); if (cf != null) rm.add(cf); } Message message = rm.makeRowMutationMessage(); WriteResponseHandler responseHandler = new WriteResponseHandler(1); MessagingService.instance().sendRR(message, new InetAddress[] { endPoint }, responseHandler); ... It seems that we still send a row mutation even if the cf of the row is null. My question is, what is the point of sending a RowMutation with an empty cf. I don't believe this will break anything (if we handle a mutation message with an empty cf properly), but it seems to me like a redundant mutation message sent and processed. On a different note, I have a few questions about HHOM design. HintedHandOffManager seems to send the whole CF for a key, even if the only thing that changed was a value in 1 single column. Will this scale if I have a CF with 1000 columns, and why not only send that one column? And one last question about HHOM, since the node that is handling the Hint might not be (and is probably not) one of the replicas if I understood the code correctly, Will the data written to it ever be cleaned, if I issue a delete later on down the line? My 2 cents :) Ramzi