Merge branch 'cassandra-1.2' into trunk Conflicts: src/java/org/apache/cassandra/service/StorageService.java
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/ee85c8ea Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/ee85c8ea Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/ee85c8ea Branch: refs/heads/trunk Commit: ee85c8ea980942bdd8b767fffc7ac6b9bc25d6ee Parents: c4c04e7 76ad645 Author: Brandon Williams <brandonwilli...@apache.org> Authored: Thu Jul 18 16:17:15 2013 -0500 Committer: Brandon Williams <brandonwilli...@apache.org> Committed: Thu Jul 18 16:17:15 2013 -0500 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../cassandra/gms/GossipDigestAckVerbHandler.java | 2 ++ .../cassandra/gms/GossipDigestSynVerbHandler.java | 1 + src/java/org/apache/cassandra/gms/Gossiper.java | 14 ++++++++++++++ .../org/apache/cassandra/service/StorageService.java | 2 ++ 5 files changed, 20 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/ee85c8ea/CHANGES.txt ---------------------------------------------------------------------- diff --cc CHANGES.txt index 6d72309,80b73f4..00abb86 --- a/CHANGES.txt +++ b/CHANGES.txt @@@ -1,93 -1,5 +1,94 @@@ +2.0.0-beta2 + * Replace countPendingHints with Hints Created metric (CASSANDRA-5746) + * Allow nodetool with no args, and with help to run without a server (CASSANDRA-5734) + * Cleanup AbstractType/TypeSerializer classes (CASSANDRA-5744) + * Remove unimplemented cli option schema-mwt (CASSANDRA-5754) + * Support range tombstones in thrift (CASSANDRA-5435) + * Normalize table-manipulating CQL3 statements' class names (CASSANDRA-5759) + * cqlsh: add missing table options to DESCRIBE output (CASSANDRA-5749) + * Fix assertion error during repair (CASSANDRA-5757) + * Fix bulkloader (CASSANDRA-5542) + + +2.0.0-beta1 + * Removed on-heap row cache (CASSANDRA-5348) + * use nanotime consistently for node-local timeouts (CASSANDRA-5581) + * Avoid unnecessary second pass on name-based queries (CASSANDRA-5577) + * Experimental triggers (CASSANDRA-1311) + * JEMalloc support for off-heap allocation (CASSANDRA-3997) + * Single-pass compaction (CASSANDRA-4180) + * Removed token range bisection (CASSANDRA-5518) + * Removed compatibility with pre-1.2.5 sstables and network messages + (CASSANDRA-5511) + * removed PBSPredictor (CASSANDRA-5455) + * CAS support (CASSANDRA-5062, 5441, 5442, 5443, 5619, 5667) + * Leveled compaction performs size-tiered compactions in L0 + (CASSANDRA-5371, 5439) + * Add yaml network topology snitch for mixed ec2/other envs (CASSANDRA-5339) + * Log when a node is down longer than the hint window (CASSANDRA-4554) + * Optimize tombstone creation for ExpiringColumns (CASSANDRA-4917) + * Improve LeveledScanner work estimation (CASSANDRA-5250, 5407) + * Replace compaction lock with runWithCompactionsDisabled (CASSANDRA-3430) + * Change Message IDs to ints (CASSANDRA-5307) + * Move sstable level information into the Stats component, removing the + need for a separate Manifest file (CASSANDRA-4872) + * avoid serializing to byte[] on commitlog append (CASSANDRA-5199) + * make index_interval configurable per columnfamily (CASSANDRA-3961, CASSANDRA-5650) + * add default_time_to_live (CASSANDRA-3974) + * add memtable_flush_period_in_ms (CASSANDRA-4237) + * replace supercolumns internally by composites (CASSANDRA-3237, 5123) + * upgrade thrift to 0.9.0 (CASSANDRA-3719) + * drop unnecessary keyspace parameter from user-defined compaction API + (CASSANDRA-5139) + * more robust solution to incomplete compactions + counters (CASSANDRA-5151) + * Change order of directory searching for c*.in.sh (CASSANDRA-3983) + * Add tool to reset SSTable compaction level for LCS (CASSANDRA-5271) + * Allow custom configuration loader (CASSANDRA-5045) + * Remove memory emergency pressure valve logic (CASSANDRA-3534) + * Reduce request latency with eager retry (CASSANDRA-4705) + * cqlsh: Remove ASSUME command (CASSANDRA-5331) + * Rebuild BF when loading sstables if bloom_filter_fp_chance + has changed since compaction (CASSANDRA-5015) + * remove row-level bloom filters (CASSANDRA-4885) + * Change Kernel Page Cache skipping into row preheating (disabled by default) + (CASSANDRA-4937) + * Improve repair by deciding on a gcBefore before sending + out TreeRequests (CASSANDRA-4932) + * Add an official way to disable compactions (CASSANDRA-5074) + * Reenable ALTER TABLE DROP with new semantics (CASSANDRA-3919) + * Add binary protocol versioning (CASSANDRA-5436) + * Swap THshaServer for TThreadedSelectorServer (CASSANDRA-5530) + * Add alias support to SELECT statement (CASSANDRA-5075) + * Don't create empty RowMutations in CommitLogReplayer (CASSANDRA-5541) + * Use range tombstones when dropping cfs/columns from schema (CASSANDRA-5579) + * cqlsh: drop CQL2/CQL3-beta support (CASSANDRA-5585) + * Track max/min column names in sstables to be able to optimize slice + queries (CASSANDRA-5514, CASSANDRA-5595, CASSANDRA-5600) + * Binary protocol: allow batching already prepared statements (CASSANDRA-4693) + * Allow preparing timestamp, ttl and limit in CQL3 queries (CASSANDRA-4450) + * Support native link w/o JNA in Java7 (CASSANDRA-3734) + * Use SASL authentication in binary protocol v2 (CASSANDRA-5545) + * Replace Thrift HsHa with LMAX Disruptor based implementation (CASSANDRA-5582) + * cqlsh: Add row count to SELECT output (CASSANDRA-5636) + * Include a timestamp with all read commands to determine column expiration + (CASSANDRA-5149) + * Streaming 2.0 (CASSANDRA-5286, 5699) + * Conditional create/drop ks/table/index statements in CQL3 (CASSANDRA-2737) + * more pre-table creation property validation (CASSANDRA-5693) + * Redesign repair messages (CASSANDRA-5426) + * Fix ALTER RENAME post-5125 (CASSANDRA-5702) + * Disallow renaming a 2ndary indexed column (CASSANDRA-5705) + * Rename Table to Keyspace (CASSANDRA-5613) + * Ensure changing column_index_size_in_kb on different nodes don't corrupt the + sstable (CASSANDRA-5454) + * Move resultset type information into prepare, not execute (CASSANDRA-5649) + * Auto paging in binary protocol (CASSANDRA-4415, 5714) + * Don't tie client side use of AbstractType to JDBC (CASSANDRA-4495) + * Adds new TimestampType to replace DateType (CASSANDRA-5723, CASSANDRA-5729) + + 1.2.7 + * if no seeds can be a reached a node won't start in a ring by itself (CASSANDRA-5768) * add cassandra.unsafesystem property (CASSANDRA-5704) * (Hadoop) quote identifiers in CqlPagingRecordReader (CASSANDRA-5763) * Add replace_node functionality for vnodes (CASSANDRA-5337) http://git-wip-us.apache.org/repos/asf/cassandra/blob/ee85c8ea/src/java/org/apache/cassandra/gms/GossipDigestAckVerbHandler.java ---------------------------------------------------------------------- diff --cc src/java/org/apache/cassandra/gms/GossipDigestAckVerbHandler.java index 6152395,2a03ff2..57863ae --- a/src/java/org/apache/cassandra/gms/GossipDigestAckVerbHandler.java +++ b/src/java/org/apache/cassandra/gms/GossipDigestAckVerbHandler.java @@@ -57,9 -57,11 +57,11 @@@ public class GossipDigestAckVerbHandle Gossiper.instance.applyStateLocally(epStateMap); } + Gossiper.instance.checkSeedContact(from); + /* Get the state required to send to this gossipee - construct GossipDigestAck2Message */ Map<InetAddress, EndpointState> deltaEpStateMap = new HashMap<InetAddress, EndpointState>(); - for( GossipDigest gDigest : gDigestList ) + for (GossipDigest gDigest : gDigestList) { InetAddress addr = gDigest.getEndpoint(); EndpointState localEpStatePtr = Gossiper.instance.getStateForVersionBiggerThan(addr, gDigest.getMaxVersion()); http://git-wip-us.apache.org/repos/asf/cassandra/blob/ee85c8ea/src/java/org/apache/cassandra/gms/GossipDigestSynVerbHandler.java ---------------------------------------------------------------------- diff --cc src/java/org/apache/cassandra/gms/GossipDigestSynVerbHandler.java index ee23656,61d21ed..4b1564d --- a/src/java/org/apache/cassandra/gms/GossipDigestSynVerbHandler.java +++ b/src/java/org/apache/cassandra/gms/GossipDigestSynVerbHandler.java @@@ -78,10 -78,11 +78,11 @@@ public class GossipDigestSynVerbHandle Gossiper.instance.examineGossiper(gDigestList, deltaGossipDigestList, deltaEpStateMap); MessageOut<GossipDigestAck> gDigestAckMessage = new MessageOut<GossipDigestAck>(MessagingService.Verb.GOSSIP_DIGEST_ACK, - new GossipDigestAck(deltaGossipDigestList, deltaEpStateMap), - GossipDigestAck.serializer); + new GossipDigestAck(deltaGossipDigestList, deltaEpStateMap), + GossipDigestAck.serializer); if (logger.isTraceEnabled()) logger.trace("Sending a GossipDigestAckMessage to {}", from); + Gossiper.instance.checkSeedContact(from); MessagingService.instance().sendOneWay(gDigestAckMessage, from); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/ee85c8ea/src/java/org/apache/cassandra/gms/Gossiper.java ---------------------------------------------------------------------- diff --cc src/java/org/apache/cassandra/gms/Gossiper.java index a74da02,b0284c1..3893a93 --- a/src/java/org/apache/cassandra/gms/Gossiper.java +++ b/src/java/org/apache/cassandra/gms/Gossiper.java @@@ -186,9 -184,19 +189,20 @@@ public class Gossiper implements IFailu } } + protected void checkSeedContact(InetAddress ep) + { + if (!seedContacted && seeds.contains(ep)) + seedContacted = true; + } + + public boolean seenAnySeed() + { + return seedContacted; + } + /** * Register for interesting state changes. + * * @param subscriber module which implements the IEndpointStateChangeSubscriber */ public void register(IEndpointStateChangeSubscriber subscriber) http://git-wip-us.apache.org/repos/asf/cassandra/blob/ee85c8ea/src/java/org/apache/cassandra/service/StorageService.java ---------------------------------------------------------------------- diff --cc src/java/org/apache/cassandra/service/StorageService.java index 6e12e9d,c4ceee5..9d2e89a --- a/src/java/org/apache/cassandra/service/StorageService.java +++ b/src/java/org/apache/cassandra/service/StorageService.java @@@ -893,6 -942,9 +893,8 @@@ public class StorageService extends Not // Dont set any state for the node which is bootstrapping the existing token... tokenMetadata.updateNormalTokens(tokens, FBUtilities.getBroadcastAddress()); } - Tracing.instance(); + if (!Gossiper.instance.seenAnySeed()) + throw new IllegalStateException("Unable to contact any seeds!") setMode(Mode.JOINING, "Starting to bootstrap...", true); new BootStrapper(FBUtilities.getBroadcastAddress(), tokens, tokenMetadata).bootstrap(); // handles token update logger.info("Bootstrap completed! for the tokens {}", tokens);