Author: jbellis Date: Thu Nov 18 07:19:16 2010 New Revision: 1036330 URL: http://svn.apache.org/viewvc?rev=1036330&view=rev Log: merge from 0.7
Modified: cassandra/trunk/ (props changed) cassandra/trunk/CHANGES.txt cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java (props changed) cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java (props changed) cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java (props changed) cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java (props changed) cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java (props changed) cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java cassandra/trunk/src/java/org/apache/cassandra/service/AntiEntropyService.java cassandra/trunk/src/java/org/apache/cassandra/streaming/PendingFile.java cassandra/trunk/src/java/org/apache/cassandra/streaming/StreamOut.java cassandra/trunk/src/java/org/apache/cassandra/tools/NodeCmd.java cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java cassandra/trunk/test/unit/org/apache/cassandra/service/AntiEntropyServiceTest.java cassandra/trunk/test/unit/org/apache/cassandra/streaming/BootstrapTest.java Propchange: cassandra/trunk/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Thu Nov 18 07:19:16 2010 @@ -1,5 +1,5 @@ -/cassandra/branches/cassandra-0.6:922689-1035020,1035656 -/cassandra/branches/cassandra-0.7:1026517-1035659 +/cassandra/branches/cassandra-0.6:922689-1036176 +/cassandra/branches/cassandra-0.7:1026517-1036329 /incubator/cassandra/branches/cassandra-0.3:774578-796573 /incubator/cassandra/branches/cassandra-0.4:810145-834239,834349-834350 /incubator/cassandra/branches/cassandra-0.5:888872-915439 Modified: cassandra/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/cassandra/trunk/CHANGES.txt?rev=1036330&r1=1036329&r2=1036330&view=diff ============================================================================== --- cassandra/trunk/CHANGES.txt (original) +++ cassandra/trunk/CHANGES.txt Thu Nov 18 07:19:16 2010 @@ -2,6 +2,11 @@ dev * add clustertool, config-converter, sstablekeys, and schematool Windows .bat files (CASSANDRA-1723) * reject range queries received during bootstrap (CASSANDRA-1739) + * fix wrapping-range queries on non-minimum token (CASSANDRA-1700) + * add nodetool cfhistogram (CASSANDRA-1698) + * limit repaired ranges to what the nodes have in common (CASSANDRA-1674) + * index scan treats missing columns as not matching secondary + expressions (CASSANDRA-1745) * Update windows .bat files to work outside of main Cassandra directory (CASSANDRA-1713) * log threshold causing memtable flush (CASSANDRA-1675) @@ -32,6 +37,8 @@ dev * fix tombstoning of supercolumns in range queries (CASSANDRA-1734) * clear endpoint cache after updating keyspace metadata (CASSANDRA-1741) * fix wrapping-range queries on non-minimum token (CASSANDRA-1700) + * truncate includes secondary indexes (CASSANDRA-1747) + * retain reference to PendingFile sstables (CASSANDRA-1749) 0.7.0-beta3 Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Thu Nov 18 07:19:16 2010 @@ -1,5 +1,5 @@ -/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:922689-1035020,1035656 -/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1026517-1035659 +/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:922689-1036176 +/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1026517-1036329 /incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/Cassandra.java:774578-796573 /incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/Cassandra.java:810145-834239,834349-834350 /incubator/cassandra/branches/cassandra-0.5/interface/gen-java/org/apache/cassandra/service/Cassandra.java:888872-903502 Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Thu Nov 18 07:19:16 2010 @@ -1,5 +1,5 @@ -/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:922689-1035020,1035656 -/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1026517-1035659 +/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:922689-1036176 +/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1026517-1036329 /incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/column_t.java:774578-792198 /incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/Column.java:810145-834239,834349-834350 /incubator/cassandra/branches/cassandra-0.5/interface/gen-java/org/apache/cassandra/service/Column.java:888872-903502 Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Thu Nov 18 07:19:16 2010 @@ -1,5 +1,5 @@ -/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:922689-1035020,1035656 -/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1026517-1035659 +/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:922689-1036176 +/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1026517-1036329 /incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/InvalidRequestException.java:774578-796573 /incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/InvalidRequestException.java:810145-834239,834349-834350 /incubator/cassandra/branches/cassandra-0.5/interface/gen-java/org/apache/cassandra/service/InvalidRequestException.java:888872-903502 Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Thu Nov 18 07:19:16 2010 @@ -1,5 +1,5 @@ -/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:922689-1035020,1035656 -/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1026517-1035659 +/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:922689-1036176 +/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1026517-1036329 /incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/NotFoundException.java:774578-796573 /incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/NotFoundException.java:810145-834239,834349-834350 /incubator/cassandra/branches/cassandra-0.5/interface/gen-java/org/apache/cassandra/service/NotFoundException.java:888872-903502 Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Thu Nov 18 07:19:16 2010 @@ -1,5 +1,5 @@ -/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:922689-1035020,1035656 -/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1026517-1035659 +/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:922689-1036176 +/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1026517-1036329 /incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/superColumn_t.java:774578-792198 /incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/SuperColumn.java:810145-834239,834349-834350 /incubator/cassandra/branches/cassandra-0.5/interface/gen-java/org/apache/cassandra/service/SuperColumn.java:888872-903502 Modified: cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=1036330&r1=1036329&r2=1036330&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java Thu Nov 18 07:19:16 2010 @@ -1435,7 +1435,7 @@ public class ColumnFamilyStore implement // check column data vs expression IColumn column = data.getColumn(expression.column_name); if (column == null) - continue; + return false; int v = data.getComparator().compare(column.value(), expression.value); if (!satisfies(v, expression.op)) return false; @@ -1640,13 +1640,16 @@ public class ColumnFamilyStore implement { // putting markCompacted on the commitlogUpdater thread ensures it will run // after any compactions that were in progress when truncate was called, are finished - List<SSTableReader> truncatedSSTables = new ArrayList<SSTableReader>(); - for (SSTableReader sstable : ssTables.getSSTables()) + for (ColumnFamilyStore cfs : Iterables.concat(indexedColumns.values(), Arrays.asList(ColumnFamilyStore.this))) { - if (!sstable.newSince(truncatedAt)) - truncatedSSTables.add(sstable); + List<SSTableReader> truncatedSSTables = new ArrayList<SSTableReader>(); + for (SSTableReader sstable : cfs.getSSTables()) + { + if (!sstable.newSince(truncatedAt)) + truncatedSSTables.add(sstable); + } + cfs.markCompacted(truncatedSSTables); } - markCompacted(truncatedSSTables); // Invalidate row cache invalidateRowCache(); @@ -1832,4 +1835,34 @@ public class ColumnFamilyStore implement { return ssTables.estimatedKeys(); } + + public long[] getEstimatedRowSizeHistogram() + { + long[] histogram = new long[90]; + + for (SSTableReader sstable : ssTables) + { + long[] rowSize = sstable.getEstimatedRowSize().get(false); + + for (int i = 0; i < histogram.length; i++) + histogram[i] += rowSize[i]; + } + + return histogram; + } + + public long[] getEstimatedColumnCountHistogram() + { + long[] histogram = new long[90]; + + for (SSTableReader sstable : ssTables) + { + long[] columnSize = sstable.getEstimatedColumnCount().get(false); + + for (int i = 0; i < histogram.length; i++) + histogram[i] += columnSize[i]; + } + + return histogram; + } } Modified: cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java?rev=1036330&r1=1036329&r2=1036330&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java Thu Nov 18 07:19:16 2010 @@ -212,4 +212,7 @@ public interface ColumnFamilyStoreMBean public void setMemtableOperationsInMillions(double ops); public long estimateKeys(); + + public long[] getEstimatedRowSizeHistogram(); + public long[] getEstimatedColumnCountHistogram(); } Modified: cassandra/trunk/src/java/org/apache/cassandra/service/AntiEntropyService.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/service/AntiEntropyService.java?rev=1036330&r1=1036329&r2=1036330&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/service/AntiEntropyService.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/service/AntiEntropyService.java Thu Nov 18 07:19:16 2010 @@ -433,14 +433,14 @@ public class AntiEntropyService public final TreeRequest request; public final MerkleTree ltree; public final MerkleTree rtree; - public final List<MerkleTree.TreeRange> differences; + public final List<Range> differences; public Differencer(TreeRequest request, MerkleTree ltree, MerkleTree rtree) { this.request = request; this.ltree = ltree; this.rtree = rtree; - differences = new ArrayList<MerkleTree.TreeRange>(); + differences = new ArrayList<Range>(); } /** @@ -461,31 +461,22 @@ public class AntiEntropyService Set<Range> interesting = new HashSet(ss.getRangesForEndpoint(request.cf.left, local)); interesting.retainAll(ss.getRangesForEndpoint(request.cf.left, request.endpoint)); - // compare trees, and filter out uninteresting differences + // compare trees, and collect interesting differences for (MerkleTree.TreeRange diff : MerkleTree.difference(ltree, rtree)) - { for (Range localrange: interesting) - { - if (diff.intersects(localrange)) - { - differences.add(diff); - break; // the inner loop - } - } - } + differences.addAll(diff.intersectionWith(localrange)); // choose a repair method based on the significance of the difference - float difference = differenceFraction(); - String format = "Endpoints " + local + " and " + request.endpoint + " are %s for " + request.cf; - if (difference == 0.0) + String format = "Endpoints " + local + " and " + request.endpoint + " %s for " + request.cf; + if (differences.isEmpty()) { - logger.info(String.format(format, "consistent")); + logger.info(String.format(format, "are consistent")); AntiEntropyService.instance.completedRequest(request); return; } // non-0 difference: perform streaming repair - logger.info(String.format(format, (difference * 100) + "% out of sync")); + logger.info(String.format(format, "have " + differences.size() + " range(s) out of sync")); try { performStreamingRepair(); @@ -497,18 +488,6 @@ public class AntiEntropyService } /** - * @return the fraction of the keyspace that is different, as represented by our - * list of different ranges. A range at depth 0 == 1.0, at depth 1 == 0.5, etc. - */ - float differenceFraction() - { - double fraction = 0.0; - for (MerkleTree.TreeRange diff : differences) - fraction += 1.0 / Math.pow(2, diff.depth); - return (float)fraction; - } - - /** * Starts sending/receiving our list of differences to/from the remote endpoint: creates a callback * that will be called out of band once the streams complete. */ Modified: cassandra/trunk/src/java/org/apache/cassandra/streaming/PendingFile.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/streaming/PendingFile.java?rev=1036330&r1=1036329&r2=1036330&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/streaming/PendingFile.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/streaming/PendingFile.java Thu Nov 18 07:19:16 2010 @@ -31,6 +31,7 @@ import org.apache.commons.lang.StringUti import org.apache.cassandra.io.ICompactSerializer; import org.apache.cassandra.io.sstable.Descriptor; +import org.apache.cassandra.io.sstable.SSTable; import org.apache.cassandra.utils.Pair; /** @@ -45,6 +46,9 @@ public class PendingFile return serializer_; } + // NB: this reference prevents garbage collection of the sstable on the source node + private final SSTable sstable; + public final Descriptor desc; public final String component; public final List<Pair<Long,Long>> sections; @@ -53,11 +57,12 @@ public class PendingFile public PendingFile(Descriptor desc, PendingFile pf) { - this(desc, pf.component, pf.sections); + this(null, desc, pf.component, pf.sections); } - public PendingFile(Descriptor desc, String component, List<Pair<Long,Long>> sections) + public PendingFile(SSTable sstable, Descriptor desc, String component, List<Pair<Long,Long>> sections) { + this.sstable = sstable; this.desc = desc; this.component = component; this.sections = sections; @@ -124,7 +129,7 @@ public class PendingFile List<Pair<Long,Long>> sections = new ArrayList<Pair<Long,Long>>(count); for (int i = 0; i < count; i++) sections.add(new Pair<Long,Long>(Long.valueOf(dis.readLong()), Long.valueOf(dis.readLong()))); - return new PendingFile(desc, component, sections); + return new PendingFile(null, desc, component, sections); } } } Modified: cassandra/trunk/src/java/org/apache/cassandra/streaming/StreamOut.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/streaming/StreamOut.java?rev=1036330&r1=1036329&r2=1036330&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/streaming/StreamOut.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/streaming/StreamOut.java Thu Nov 18 07:19:16 2010 @@ -166,7 +166,7 @@ public class StreamOut List<Pair<Long,Long>> sections = sstable.getPositionsForRanges(ranges); if (sections.isEmpty()) continue; - pending.add(new PendingFile(desc, SSTable.COMPONENT_DATA, sections)); + pending.add(new PendingFile(sstable, desc, SSTable.COMPONENT_DATA, sections)); } logger.info("Stream context metadata {}, {} sstables.", pending, sstables.size()); return pending; Modified: cassandra/trunk/src/java/org/apache/cassandra/tools/NodeCmd.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeCmd.java?rev=1036330&r1=1036329&r2=1036330&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/tools/NodeCmd.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/tools/NodeCmd.java Thu Nov 18 07:19:16 2010 @@ -29,6 +29,7 @@ import java.util.*; import java.util.Map.Entry; import java.util.concurrent.ExecutionException; +import org.apache.cassandra.utils.EstimatedHistogram; import org.apache.commons.cli.*; import org.apache.cassandra.cache.JMXInstrumentedCacheMBean; @@ -72,7 +73,7 @@ public class NodeCmd { "clearsnapshot, tpstats, flush, drain, repair, decommission, move, loadbalance, removetoken [status|force]|[token], " + "setcachecapacity [keyspace] [cfname] [keycachecapacity] [rowcachecapacity], " + "getcompactionthreshold [keyspace] [cfname], setcompactionthreshold [cfname] [minthreshold] [maxthreshold], " + - "netstats [host]"); + "netstats [host], cfhistograms <keyspace> <column_family>"); String usage = String.format("java %s --host <arg> <command>%n", NodeCmd.class.getName()); hf.printHelp(usage, "", options, header); } @@ -354,6 +355,36 @@ public class NodeCmd { outs.println("RemovalStatus: " + probe.getRemovalStatus()); } + private void printCfHistograms(String keySpace, String columnFamily, PrintStream output) + { + ColumnFamilyStoreMBean store = this.probe.getCfsProxy(keySpace, columnFamily); + + // default is 90 offsets + long[] offsets = new EstimatedHistogram(90).getBucketOffsets(); + + long[] rrlh = store.getRecentReadLatencyHistogramMicros(); + long[] rwlh = store.getRecentWriteLatencyHistogramMicros(); + long[] sprh = store.getRecentSSTablesPerReadHistogram(); + long[] ersh = store.getEstimatedRowSizeHistogram(); + long[] ecch = store.getEstimatedColumnCountHistogram(); + + output.println(String.format("%s/%s histograms", keySpace, columnFamily)); + + output.println(String.format("%-10s%10s%18s%18s%18s%18s", + "Offset", "SSTables", "Write Latency", "Read Latency", "Row Size", "Column Count")); + + for (int i = 0; i < offsets.length; i++) + { + output.println(String.format("%-10d%10s%18s%18s%18s%18s", + offsets[i], + (i < sprh.length ? sprh[i] : ""), + (i < rrlh.length ? rrlh[i] : ""), + (i < rwlh.length ? rwlh[i] : ""), + (i < ersh.length ? ersh[i] : ""), + (i < ecch.length ? ecch[i] : ""))); + } + } + public static void main(String[] args) throws IOException, InterruptedException, ParseException { CommandLineParser parser = new PosixParser(); @@ -610,6 +641,16 @@ public class NodeCmd { String otherHost = arguments.length > 1 ? arguments[1] : null; nodeCmd.printNetworkStats(otherHost == null ? null : InetAddress.getByName(otherHost), System.out); } + else if (cmdName.equals("cfhistograms")) + { + if (arguments.length < 3) + { + System.err.println("Usage of cfhistograms: <keyspace> <column_family>."); + System.exit(1); + } + + nodeCmd.printCfHistograms(arguments[1], arguments[2], System.out); + } else if (cmdName.equals("version")) { nodeCmd.printReleaseVersion(System.out); Modified: cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java?rev=1036330&r1=1036329&r2=1036330&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java Thu Nov 18 07:19:16 2010 @@ -452,17 +452,21 @@ public class NodeProbe } } - private ColumnFamilyStoreMBean getCfsProxy(String ks, String cf) { + public ColumnFamilyStoreMBean getCfsProxy(String ks, String cf) + { ColumnFamilyStoreMBean cfsProxy = null; - try { + try + { cfsProxy = JMX.newMBeanProxy(mbeanServerConn, new ObjectName("org.apache.cassandra.db:type=ColumnFamilies,keyspace="+ks+",columnfamily="+cf), ColumnFamilyStoreMBean.class); } - catch (MalformedObjectNameException mone) { + catch (MalformedObjectNameException mone) + { System.err.println("ColumnFamilyStore for " + ks + "/" + cf + " not found."); System.exit(1); } + return cfsProxy; } } Modified: cassandra/trunk/test/unit/org/apache/cassandra/service/AntiEntropyServiceTest.java URL: http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/service/AntiEntropyServiceTest.java?rev=1036330&r1=1036329&r2=1036330&view=diff ============================================================================== --- cassandra/trunk/test/unit/org/apache/cassandra/service/AntiEntropyServiceTest.java (original) +++ cassandra/trunk/test/unit/org/apache/cassandra/service/AntiEntropyServiceTest.java Thu Nov 18 07:19:16 2010 @@ -82,7 +82,7 @@ public class AntiEntropyServiceTest exte aes = AntiEntropyService.instance; TokenMetadata tmd = StorageService.instance.getTokenMetadata(); tmd.clearUnsafe(); - tmd.updateNormalToken(StorageService.getPartitioner().getRandomToken(), LOCAL); + StorageService.instance.setToken(StorageService.getPartitioner().getRandomToken()); tmd.updateNormalToken(StorageService.getPartitioner().getMinimumToken(), REMOTE); assert tmd.isMember(REMOTE); @@ -210,19 +210,23 @@ public class AntiEntropyServiceTest exte validator.complete(); MerkleTree rtree = validator.tree; - // change a range in one of the trees - Token min = StorageService.instance.getPartitioner().getMinimumToken(); - ltree.invalidate(min); - MerkleTree.TreeRange changed = ltree.invalids(new Range(min, min)).next(); + // change a range we own in one of the trees + Token ltoken = StorageService.instance.getLocalToken(); + ltree.invalidate(ltoken); + MerkleTree.TreeRange changed = ltree.invalids(StorageService.instance.getLocalPrimaryRange()).next(); changed.hash("non-empty hash!".getBytes()); + // the changed range has two halves, split on our local token: both will be repaired + // (since this keyspace has RF > N, so every node is responsible for the entire ring) + Set<Range> interesting = new HashSet<Range>(); + interesting.add(new Range(changed.left, ltoken)); + interesting.add(new Range(ltoken, changed.right)); // difference the trees Differencer diff = new Differencer(request, ltree, rtree); diff.run(); // ensure that the changed range was recorded - assertEquals("Wrong number of differing ranges", 1, diff.differences.size()); - assertEquals("Wrong differing range", changed, diff.differences.get(0)); + assertEquals("Wrong differing ranges", interesting, new HashSet<Range>(diff.differences)); } Set<InetAddress> addTokens(int max) throws Throwable Modified: cassandra/trunk/test/unit/org/apache/cassandra/streaming/BootstrapTest.java URL: http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/streaming/BootstrapTest.java?rev=1036330&r1=1036329&r2=1036330&view=diff ============================================================================== --- cassandra/trunk/test/unit/org/apache/cassandra/streaming/BootstrapTest.java (original) +++ cassandra/trunk/test/unit/org/apache/cassandra/streaming/BootstrapTest.java Thu Nov 18 07:19:16 2010 @@ -37,7 +37,7 @@ public class BootstrapTest extends Schem public void testGetNewNames() throws IOException { Descriptor desc = Descriptor.fromFilename(new File("Keyspace1", "Standard1-500-Data.db").toString()); - PendingFile inContext = new PendingFile(desc, "Data.db", Arrays.asList(new Pair<Long,Long>(0L, 1L))); + PendingFile inContext = new PendingFile(null, desc, "Data.db", Arrays.asList(new Pair<Long,Long>(0L, 1L))); PendingFile outContext = StreamIn.getContextMapping(inContext); // filename and generation are expected to have changed