diff --git a/CHANGES.txt b/CHANGES.txt index 507945a393..2d2385b3c3 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -28,7 +28,7 @@ * use lazy initialization instead of class initialization in NodeId (CASSANDRA-2953) * add paging to get_count (CASSANDRA-2894) - * fix "short reads" in [multi]get (CASSANDRA-2643, 3157) + * fix "short reads" in [multi]get (CASSANDRA-2643, 3157, 3192) * add optional compression for sstables (CASSANDRA-47, 3001, 3128) * add scheduler JMX metrics (CASSANDRA-2962) * add block level checksum for compressed data (CASSANDRA-1717) @@ -48,7 +48,7 @@ Thrift<->Avro conversion methods (CASSANDRA-3032) * Add timeouts to client request schedulers (CASSANDRA-3079, 3096) * Cli to use hashes rather than array of hashes for strategy options (CASSANDRA-3081) - * LeveledCompactionStrategy (CASSANDRA-1608, 3085, 3110, 3087, 3145, 3154) + * LeveledCompactionStrategy (CASSANDRA-1608, 3085, 3110, 3087, 3145, 3154, 3182) * Improvements of the CLI `describe` command (CASSANDRA-2630) * reduce window where dropped CF sstables may not be deleted (CASSANDRA-2942) * Expose gossip/FD info to JMX (CASSANDRA-2806) @@ -77,6 +77,7 @@ * Make SerializingCacheProvider the default if JNA is available (CASSANDRA-3183) * Fix backwards compatibilty for CQL memtable properties (CASSANDRA-3190) + 0.8.6 * avoid trying to watch cassandra-topology.properties when loaded from jar (CASSANDRA-3138) @@ -86,8 +87,16 @@ (CASSANDRA-3129) * CustomTThreadPoolServer to log TTransportException at DEBUG level (CASSANDRA-3142) + * allow topology sort to work with non-unique rack names between + datacenters (CASSANDRA-3152) + * Improve caching of same-version Messages on digest and repair paths + (CASSANDRA-3158) * Randomize choice of first replica for counter increment (CASSANDRA-2890) * Fix using read_repair_chance instead of merge_shard_change (CASSANDRA-3202) + * Avoid streaming data to nodes that already have it, on move as well as + decommission (CASSANDRA-3041) + * Fix divide by zero error in GCInspector + * revert CASSANDRA-2388 0.8.5 @@ -112,7 +121,7 @@ * prune index scan resultset back to original request for lazy resultset expansion case (CASSANDRA-2964) * (Hadoop) fail jobs when Cassandra node has failed but TaskTracker - has not (CASSANDRA-2388) + has not (CASSANDRA-2388) * fix dynamic snitch ignoring nodes when read_repair_chance is zero (CASSANDRA-2662) * avoid retaining references to dropped CFS objects in diff --git a/NEWS.txt b/NEWS.txt index 4e84792ba6..3484b60288 100644 --- a/NEWS.txt +++ b/NEWS.txt @@ -56,10 +56,10 @@ Other - The old per-ColumnFamily memtable thresholds (memtable_throughput_in_mb, memtable_operations_in_millions, memtable_flush_after_mins) are ignored, in favor of the global - memtable_total_space_in_mb setting. This does not affect client - compatibility -- the old options are still allowed, but have no - effect. These options may be removed entirely in a future - release. + memtable_total_space_in_mb and commitlog_total_space_in_mb settings. + This does not affect client compatibility -- the old options are + still allowed, but have no effect. These options may be removed + entirely in a future release. 0.8.5 diff --git a/conf/cassandra.yaml b/conf/cassandra.yaml index 7a7c125205..9a1f8bcf0a 100644 --- a/conf/cassandra.yaml +++ b/conf/cassandra.yaml @@ -84,8 +84,8 @@ saved_caches_directory: /var/lib/cassandra/saved_caches commitlog_sync: periodic commitlog_sync_period_in_ms: 10000 -# any class that implements the SeedProvider interface and has a constructor that takes a Map of -# parameters will do. +# any class that implements the SeedProvider interface and has a +# constructor that takes a Map of parameters will do. seed_provider: # Addresses of hosts that are deemed contact points. # Cassandra nodes use this list of hosts to find each other and learn diff --git a/interface/cassandra.thrift b/interface/cassandra.thrift index 9426b3f7f8..93d1cdeeda 100644 --- a/interface/cassandra.thrift +++ b/interface/cassandra.thrift @@ -46,7 +46,7 @@ namespace rb CassandraThrift # for every edit that doesn't result in a change to major/minor. # # See the Semantic Versioning Specification (SemVer) http://semver.org. -const string VERSION = "19.15.0" +const string VERSION = "19.18.0" # @@ -348,11 +348,20 @@ struct EndpointDetails { 3: string datacenter } +/** + A TokenRange describes part of the Cassandra ring, it is a mapping from a range to + endpoints responsible for that range. + @param start_token The first token in the range + @param end_token The last token in the range + @param endpoints The endpoints responsible for the range (listed by their configured listen_address) + @param rpc_endpoints The endpoints responsible for the range (listed by their configured rpc_address) +*/ struct TokenRange { 1: required string start_token, 2: required string end_token, 3: required list endpoints, - 4: optional list endpoint_details, + 4: optional list rpc_endpoints + 5: optional list endpoint_details, } /** diff --git a/interface/thrift/gen-java/org/apache/cassandra/thrift/AuthenticationRequest.java b/interface/thrift/gen-java/org/apache/cassandra/thrift/AuthenticationRequest.java index 2aa2378905..7742297fde 100644 --- a/interface/thrift/gen-java/org/apache/cassandra/thrift/AuthenticationRequest.java +++ b/interface/thrift/gen-java/org/apache/cassandra/thrift/AuthenticationRequest.java @@ -308,15 +308,15 @@ public class AuthenticationRequest implements org.apache.thrift.TBase(2*_map28.size); - for (int _i29 = 0; _i29 < _map28.size; ++_i29) + org.apache.thrift.protocol.TMap _map32 = iprot.readMapBegin(); + this.credentials = new HashMap(2*_map32.size); + for (int _i33 = 0; _i33 < _map32.size; ++_i33) { - String _key30; - String _val31; - _key30 = iprot.readString(); - _val31 = iprot.readString(); - this.credentials.put(_key30, _val31); + String _key34; + String _val35; + _key34 = iprot.readString(); + _val35 = iprot.readString(); + this.credentials.put(_key34, _val35); } iprot.readMapEnd(); } @@ -343,10 +343,10 @@ public class AuthenticationRequest implements org.apache.thrift.TBase _iter32 : this.credentials.entrySet()) + for (Map.Entry _iter36 : this.credentials.entrySet()) { - oprot.writeString(_iter32.getKey()); - oprot.writeString(_iter32.getValue()); + oprot.writeString(_iter36.getKey()); + oprot.writeString(_iter36.getValue()); } oprot.writeMapEnd(); } diff --git a/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java b/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java index 87e2d1c27d..dc3114b0cb 100644 --- a/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java +++ b/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java @@ -7736,14 +7736,14 @@ public class Cassandra { case 0: // SUCCESS if (field.type == org.apache.thrift.protocol.TType.LIST) { { - org.apache.thrift.protocol.TList _list79 = iprot.readListBegin(); - this.success = new ArrayList(_list79.size); - for (int _i80 = 0; _i80 < _list79.size; ++_i80) + org.apache.thrift.protocol.TList _list83 = iprot.readListBegin(); + this.success = new ArrayList(_list83.size); + for (int _i84 = 0; _i84 < _list83.size; ++_i84) { - ColumnOrSuperColumn _elem81; - _elem81 = new ColumnOrSuperColumn(); - _elem81.read(iprot); - this.success.add(_elem81); + ColumnOrSuperColumn _elem85; + _elem85 = new ColumnOrSuperColumn(); + _elem85.read(iprot); + this.success.add(_elem85); } iprot.readListEnd(); } @@ -7793,9 +7793,9 @@ public class Cassandra { oprot.writeFieldBegin(SUCCESS_FIELD_DESC); { oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, this.success.size())); - for (ColumnOrSuperColumn _iter82 : this.success) + for (ColumnOrSuperColumn _iter86 : this.success) { - _iter82.write(oprot); + _iter86.write(oprot); } oprot.writeListEnd(); } @@ -9086,8 +9086,6 @@ public class Cassandra { private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException { try { - // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor. - __isset_bit_vector = new BitSet(1); read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in))); } catch (org.apache.thrift.TException te) { throw new java.io.IOException(te); @@ -9597,13 +9595,13 @@ public class Cassandra { case 1: // KEYS if (field.type == org.apache.thrift.protocol.TType.LIST) { { - org.apache.thrift.protocol.TList _list83 = iprot.readListBegin(); - this.keys = new ArrayList(_list83.size); - for (int _i84 = 0; _i84 < _list83.size; ++_i84) + org.apache.thrift.protocol.TList _list87 = iprot.readListBegin(); + this.keys = new ArrayList(_list87.size); + for (int _i88 = 0; _i88 < _list87.size; ++_i88) { - ByteBuffer _elem85; - _elem85 = iprot.readBinary(); - this.keys.add(_elem85); + ByteBuffer _elem89; + _elem89 = iprot.readBinary(); + this.keys.add(_elem89); } iprot.readListEnd(); } @@ -9653,9 +9651,9 @@ public class Cassandra { oprot.writeFieldBegin(KEYS_FIELD_DESC); { oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, this.keys.size())); - for (ByteBuffer _iter86 : this.keys) + for (ByteBuffer _iter90 : this.keys) { - oprot.writeBinary(_iter86); + oprot.writeBinary(_iter90); } oprot.writeListEnd(); } @@ -10244,26 +10242,26 @@ public class Cassandra { case 0: // SUCCESS if (field.type == org.apache.thrift.protocol.TType.MAP) { { - org.apache.thrift.protocol.TMap _map87 = iprot.readMapBegin(); - this.success = new HashMap>(2*_map87.size); - for (int _i88 = 0; _i88 < _map87.size; ++_i88) + org.apache.thrift.protocol.TMap _map91 = iprot.readMapBegin(); + this.success = new HashMap>(2*_map91.size); + for (int _i92 = 0; _i92 < _map91.size; ++_i92) { - ByteBuffer _key89; - List _val90; - _key89 = iprot.readBinary(); + ByteBuffer _key93; + List _val94; + _key93 = iprot.readBinary(); { - org.apache.thrift.protocol.TList _list91 = iprot.readListBegin(); - _val90 = new ArrayList(_list91.size); - for (int _i92 = 0; _i92 < _list91.size; ++_i92) + org.apache.thrift.protocol.TList _list95 = iprot.readListBegin(); + _val94 = new ArrayList(_list95.size); + for (int _i96 = 0; _i96 < _list95.size; ++_i96) { - ColumnOrSuperColumn _elem93; - _elem93 = new ColumnOrSuperColumn(); - _elem93.read(iprot); - _val90.add(_elem93); + ColumnOrSuperColumn _elem97; + _elem97 = new ColumnOrSuperColumn(); + _elem97.read(iprot); + _val94.add(_elem97); } iprot.readListEnd(); } - this.success.put(_key89, _val90); + this.success.put(_key93, _val94); } iprot.readMapEnd(); } @@ -10313,14 +10311,14 @@ public class Cassandra { oprot.writeFieldBegin(SUCCESS_FIELD_DESC); { oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.LIST, this.success.size())); - for (Map.Entry> _iter94 : this.success.entrySet()) + for (Map.Entry> _iter98 : this.success.entrySet()) { - oprot.writeBinary(_iter94.getKey()); + oprot.writeBinary(_iter98.getKey()); { - oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, _iter94.getValue().size())); - for (ColumnOrSuperColumn _iter95 : _iter94.getValue()) + oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, _iter98.getValue().size())); + for (ColumnOrSuperColumn _iter99 : _iter98.getValue()) { - _iter95.write(oprot); + _iter99.write(oprot); } oprot.writeListEnd(); } @@ -10908,13 +10906,13 @@ public class Cassandra { case 1: // KEYS if (field.type == org.apache.thrift.protocol.TType.LIST) { { - org.apache.thrift.protocol.TList _list96 = iprot.readListBegin(); - this.keys = new ArrayList(_list96.size); - for (int _i97 = 0; _i97 < _list96.size; ++_i97) + org.apache.thrift.protocol.TList _list100 = iprot.readListBegin(); + this.keys = new ArrayList(_list100.size); + for (int _i101 = 0; _i101 < _list100.size; ++_i101) { - ByteBuffer _elem98; - _elem98 = iprot.readBinary(); - this.keys.add(_elem98); + ByteBuffer _elem102; + _elem102 = iprot.readBinary(); + this.keys.add(_elem102); } iprot.readListEnd(); } @@ -10964,9 +10962,9 @@ public class Cassandra { oprot.writeFieldBegin(KEYS_FIELD_DESC); { oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, this.keys.size())); - for (ByteBuffer _iter99 : this.keys) + for (ByteBuffer _iter103 : this.keys) { - oprot.writeBinary(_iter99); + oprot.writeBinary(_iter103); } oprot.writeListEnd(); } @@ -11551,15 +11549,15 @@ public class Cassandra { case 0: // SUCCESS if (field.type == org.apache.thrift.protocol.TType.MAP) { { - org.apache.thrift.protocol.TMap _map100 = iprot.readMapBegin(); - this.success = new HashMap(2*_map100.size); - for (int _i101 = 0; _i101 < _map100.size; ++_i101) + org.apache.thrift.protocol.TMap _map104 = iprot.readMapBegin(); + this.success = new HashMap(2*_map104.size); + for (int _i105 = 0; _i105 < _map104.size; ++_i105) { - ByteBuffer _key102; - int _val103; - _key102 = iprot.readBinary(); - _val103 = iprot.readI32(); - this.success.put(_key102, _val103); + ByteBuffer _key106; + int _val107; + _key106 = iprot.readBinary(); + _val107 = iprot.readI32(); + this.success.put(_key106, _val107); } iprot.readMapEnd(); } @@ -11609,10 +11607,10 @@ public class Cassandra { oprot.writeFieldBegin(SUCCESS_FIELD_DESC); { oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.I32, this.success.size())); - for (Map.Entry _iter104 : this.success.entrySet()) + for (Map.Entry _iter108 : this.success.entrySet()) { - oprot.writeBinary(_iter104.getKey()); - oprot.writeI32(_iter104.getValue()); + oprot.writeBinary(_iter108.getKey()); + oprot.writeI32(_iter108.getValue()); } oprot.writeMapEnd(); } @@ -12796,14 +12794,14 @@ public class Cassandra { case 0: // SUCCESS if (field.type == org.apache.thrift.protocol.TType.LIST) { { - org.apache.thrift.protocol.TList _list105 = iprot.readListBegin(); - this.success = new ArrayList(_list105.size); - for (int _i106 = 0; _i106 < _list105.size; ++_i106) + org.apache.thrift.protocol.TList _list109 = iprot.readListBegin(); + this.success = new ArrayList(_list109.size); + for (int _i110 = 0; _i110 < _list109.size; ++_i110) { - KeySlice _elem107; - _elem107 = new KeySlice(); - _elem107.read(iprot); - this.success.add(_elem107); + KeySlice _elem111; + _elem111 = new KeySlice(); + _elem111.read(iprot); + this.success.add(_elem111); } iprot.readListEnd(); } @@ -12853,9 +12851,9 @@ public class Cassandra { oprot.writeFieldBegin(SUCCESS_FIELD_DESC); { oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, this.success.size())); - for (KeySlice _iter108 : this.success) + for (KeySlice _iter112 : this.success) { - _iter108.write(oprot); + _iter112.write(oprot); } oprot.writeListEnd(); } @@ -14039,14 +14037,14 @@ public class Cassandra { case 0: // SUCCESS if (field.type == org.apache.thrift.protocol.TType.LIST) { { - org.apache.thrift.protocol.TList _list109 = iprot.readListBegin(); - this.success = new ArrayList(_list109.size); - for (int _i110 = 0; _i110 < _list109.size; ++_i110) + org.apache.thrift.protocol.TList _list113 = iprot.readListBegin(); + this.success = new ArrayList(_list113.size); + for (int _i114 = 0; _i114 < _list113.size; ++_i114) { - KeySlice _elem111; - _elem111 = new KeySlice(); - _elem111.read(iprot); - this.success.add(_elem111); + KeySlice _elem115; + _elem115 = new KeySlice(); + _elem115.read(iprot); + this.success.add(_elem115); } iprot.readListEnd(); } @@ -14096,9 +14094,9 @@ public class Cassandra { oprot.writeFieldBegin(SUCCESS_FIELD_DESC); { oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, this.success.size())); - for (KeySlice _iter112 : this.success) + for (KeySlice _iter116 : this.success) { - _iter112.write(oprot); + _iter116.write(oprot); } oprot.writeListEnd(); } @@ -18943,38 +18941,38 @@ public class Cassandra { case 1: // MUTATION_MAP if (field.type == org.apache.thrift.protocol.TType.MAP) { { - org.apache.thrift.protocol.TMap _map113 = iprot.readMapBegin(); - this.mutation_map = new HashMap>>(2*_map113.size); - for (int _i114 = 0; _i114 < _map113.size; ++_i114) + org.apache.thrift.protocol.TMap _map117 = iprot.readMapBegin(); + this.mutation_map = new HashMap>>(2*_map117.size); + for (int _i118 = 0; _i118 < _map117.size; ++_i118) { - ByteBuffer _key115; - Map> _val116; - _key115 = iprot.readBinary(); + ByteBuffer _key119; + Map> _val120; + _key119 = iprot.readBinary(); { - org.apache.thrift.protocol.TMap _map117 = iprot.readMapBegin(); - _val116 = new HashMap>(2*_map117.size); - for (int _i118 = 0; _i118 < _map117.size; ++_i118) + org.apache.thrift.protocol.TMap _map121 = iprot.readMapBegin(); + _val120 = new HashMap>(2*_map121.size); + for (int _i122 = 0; _i122 < _map121.size; ++_i122) { - String _key119; - List _val120; - _key119 = iprot.readString(); + String _key123; + List _val124; + _key123 = iprot.readString(); { - org.apache.thrift.protocol.TList _list121 = iprot.readListBegin(); - _val120 = new ArrayList(_list121.size); - for (int _i122 = 0; _i122 < _list121.size; ++_i122) + org.apache.thrift.protocol.TList _list125 = iprot.readListBegin(); + _val124 = new ArrayList(_list125.size); + for (int _i126 = 0; _i126 < _list125.size; ++_i126) { - Mutation _elem123; - _elem123 = new Mutation(); - _elem123.read(iprot); - _val120.add(_elem123); + Mutation _elem127; + _elem127 = new Mutation(); + _elem127.read(iprot); + _val124.add(_elem127); } iprot.readListEnd(); } - _val116.put(_key119, _val120); + _val120.put(_key123, _val124); } iprot.readMapEnd(); } - this.mutation_map.put(_key115, _val116); + this.mutation_map.put(_key119, _val120); } iprot.readMapEnd(); } @@ -19008,19 +19006,19 @@ public class Cassandra { oprot.writeFieldBegin(MUTATION_MAP_FIELD_DESC); { oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.MAP, this.mutation_map.size())); - for (Map.Entry>> _iter124 : this.mutation_map.entrySet()) + for (Map.Entry>> _iter128 : this.mutation_map.entrySet()) { - oprot.writeBinary(_iter124.getKey()); + oprot.writeBinary(_iter128.getKey()); { - oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.LIST, _iter124.getValue().size())); - for (Map.Entry> _iter125 : _iter124.getValue().entrySet()) + oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.LIST, _iter128.getValue().size())); + for (Map.Entry> _iter129 : _iter128.getValue().entrySet()) { - oprot.writeString(_iter125.getKey()); + oprot.writeString(_iter129.getKey()); { - oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, _iter125.getValue().size())); - for (Mutation _iter126 : _iter125.getValue()) + oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, _iter129.getValue().size())); + for (Mutation _iter130 : _iter129.getValue()) { - _iter126.write(oprot); + _iter130.write(oprot); } oprot.writeListEnd(); } @@ -20835,25 +20833,25 @@ public class Cassandra { case 0: // SUCCESS if (field.type == org.apache.thrift.protocol.TType.MAP) { { - org.apache.thrift.protocol.TMap _map127 = iprot.readMapBegin(); - this.success = new HashMap>(2*_map127.size); - for (int _i128 = 0; _i128 < _map127.size; ++_i128) + org.apache.thrift.protocol.TMap _map131 = iprot.readMapBegin(); + this.success = new HashMap>(2*_map131.size); + for (int _i132 = 0; _i132 < _map131.size; ++_i132) { - String _key129; - List _val130; - _key129 = iprot.readString(); + String _key133; + List _val134; + _key133 = iprot.readString(); { - org.apache.thrift.protocol.TList _list131 = iprot.readListBegin(); - _val130 = new ArrayList(_list131.size); - for (int _i132 = 0; _i132 < _list131.size; ++_i132) + org.apache.thrift.protocol.TList _list135 = iprot.readListBegin(); + _val134 = new ArrayList(_list135.size); + for (int _i136 = 0; _i136 < _list135.size; ++_i136) { - String _elem133; - _elem133 = iprot.readString(); - _val130.add(_elem133); + String _elem137; + _elem137 = iprot.readString(); + _val134.add(_elem137); } iprot.readListEnd(); } - this.success.put(_key129, _val130); + this.success.put(_key133, _val134); } iprot.readMapEnd(); } @@ -20887,14 +20885,14 @@ public class Cassandra { oprot.writeFieldBegin(SUCCESS_FIELD_DESC); { oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.LIST, this.success.size())); - for (Map.Entry> _iter134 : this.success.entrySet()) + for (Map.Entry> _iter138 : this.success.entrySet()) { - oprot.writeString(_iter134.getKey()); + oprot.writeString(_iter138.getKey()); { - oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, _iter134.getValue().size())); - for (String _iter135 : _iter134.getValue()) + oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, _iter138.getValue().size())); + for (String _iter139 : _iter138.getValue()) { - oprot.writeString(_iter135); + oprot.writeString(_iter139); } oprot.writeListEnd(); } @@ -21493,14 +21491,14 @@ public class Cassandra { case 0: // SUCCESS if (field.type == org.apache.thrift.protocol.TType.LIST) { { - org.apache.thrift.protocol.TList _list136 = iprot.readListBegin(); - this.success = new ArrayList(_list136.size); - for (int _i137 = 0; _i137 < _list136.size; ++_i137) + org.apache.thrift.protocol.TList _list140 = iprot.readListBegin(); + this.success = new ArrayList(_list140.size); + for (int _i141 = 0; _i141 < _list140.size; ++_i141) { - KsDef _elem138; - _elem138 = new KsDef(); - _elem138.read(iprot); - this.success.add(_elem138); + KsDef _elem142; + _elem142 = new KsDef(); + _elem142.read(iprot); + this.success.add(_elem142); } iprot.readListEnd(); } @@ -21534,9 +21532,9 @@ public class Cassandra { oprot.writeFieldBegin(SUCCESS_FIELD_DESC); { oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, this.success.size())); - for (KsDef _iter139 : this.success) + for (KsDef _iter143 : this.success) { - _iter139.write(oprot); + _iter143.write(oprot); } oprot.writeListEnd(); } @@ -23249,14 +23247,14 @@ public class Cassandra { case 0: // SUCCESS if (field.type == org.apache.thrift.protocol.TType.LIST) { { - org.apache.thrift.protocol.TList _list140 = iprot.readListBegin(); - this.success = new ArrayList(_list140.size); - for (int _i141 = 0; _i141 < _list140.size; ++_i141) + org.apache.thrift.protocol.TList _list144 = iprot.readListBegin(); + this.success = new ArrayList(_list144.size); + for (int _i145 = 0; _i145 < _list144.size; ++_i145) { - TokenRange _elem142; - _elem142 = new TokenRange(); - _elem142.read(iprot); - this.success.add(_elem142); + TokenRange _elem146; + _elem146 = new TokenRange(); + _elem146.read(iprot); + this.success.add(_elem146); } iprot.readListEnd(); } @@ -23290,9 +23288,9 @@ public class Cassandra { oprot.writeFieldBegin(SUCCESS_FIELD_DESC); { oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, this.success.size())); - for (TokenRange _iter143 : this.success) + for (TokenRange _iter147 : this.success) { - _iter143.write(oprot); + _iter147.write(oprot); } oprot.writeListEnd(); } @@ -26094,13 +26092,13 @@ public class Cassandra { case 0: // SUCCESS if (field.type == org.apache.thrift.protocol.TType.LIST) { { - org.apache.thrift.protocol.TList _list144 = iprot.readListBegin(); - this.success = new ArrayList(_list144.size); - for (int _i145 = 0; _i145 < _list144.size; ++_i145) + org.apache.thrift.protocol.TList _list148 = iprot.readListBegin(); + this.success = new ArrayList(_list148.size); + for (int _i149 = 0; _i149 < _list148.size; ++_i149) { - String _elem146; - _elem146 = iprot.readString(); - this.success.add(_elem146); + String _elem150; + _elem150 = iprot.readString(); + this.success.add(_elem150); } iprot.readListEnd(); } @@ -26134,9 +26132,9 @@ public class Cassandra { oprot.writeFieldBegin(SUCCESS_FIELD_DESC); { oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, this.success.size())); - for (String _iter147 : this.success) + for (String _iter151 : this.success) { - oprot.writeString(_iter147); + oprot.writeString(_iter151); } oprot.writeListEnd(); } diff --git a/interface/thrift/gen-java/org/apache/cassandra/thrift/CfDef.java b/interface/thrift/gen-java/org/apache/cassandra/thrift/CfDef.java index fe8b965c5e..d05318e596 100644 --- a/interface/thrift/gen-java/org/apache/cassandra/thrift/CfDef.java +++ b/interface/thrift/gen-java/org/apache/cassandra/thrift/CfDef.java @@ -2232,14 +2232,14 @@ public class CfDef implements org.apache.thrift.TBase, jav case 13: // COLUMN_METADATA if (field.type == org.apache.thrift.protocol.TType.LIST) { { - org.apache.thrift.protocol.TList _list38 = iprot.readListBegin(); - this.column_metadata = new ArrayList(_list38.size); - for (int _i39 = 0; _i39 < _list38.size; ++_i39) + org.apache.thrift.protocol.TList _list42 = iprot.readListBegin(); + this.column_metadata = new ArrayList(_list42.size); + for (int _i43 = 0; _i43 < _list42.size; ++_i43) { - ColumnDef _elem40; - _elem40 = new ColumnDef(); - _elem40.read(iprot); - this.column_metadata.add(_elem40); + ColumnDef _elem44; + _elem44 = new ColumnDef(); + _elem44.read(iprot); + this.column_metadata.add(_elem44); } iprot.readListEnd(); } @@ -2349,15 +2349,15 @@ public class CfDef implements org.apache.thrift.TBase, jav case 30: // COMPACTION_STRATEGY_OPTIONS if (field.type == org.apache.thrift.protocol.TType.MAP) { { - org.apache.thrift.protocol.TMap _map41 = iprot.readMapBegin(); - this.compaction_strategy_options = new HashMap(2*_map41.size); - for (int _i42 = 0; _i42 < _map41.size; ++_i42) + org.apache.thrift.protocol.TMap _map45 = iprot.readMapBegin(); + this.compaction_strategy_options = new HashMap(2*_map45.size); + for (int _i46 = 0; _i46 < _map45.size; ++_i46) { - String _key43; - String _val44; - _key43 = iprot.readString(); - _val44 = iprot.readString(); - this.compaction_strategy_options.put(_key43, _val44); + String _key47; + String _val48; + _key47 = iprot.readString(); + _val48 = iprot.readString(); + this.compaction_strategy_options.put(_key47, _val48); } iprot.readMapEnd(); } @@ -2376,15 +2376,15 @@ public class CfDef implements org.apache.thrift.TBase, jav case 32: // COMPRESSION_OPTIONS if (field.type == org.apache.thrift.protocol.TType.MAP) { { - org.apache.thrift.protocol.TMap _map45 = iprot.readMapBegin(); - this.compression_options = new HashMap(2*_map45.size); - for (int _i46 = 0; _i46 < _map45.size; ++_i46) + org.apache.thrift.protocol.TMap _map49 = iprot.readMapBegin(); + this.compression_options = new HashMap(2*_map49.size); + for (int _i50 = 0; _i50 < _map49.size; ++_i50) { - String _key47; - String _val48; - _key47 = iprot.readString(); - _val48 = iprot.readString(); - this.compression_options.put(_key47, _val48); + String _key51; + String _val52; + _key51 = iprot.readString(); + _val52 = iprot.readString(); + this.compression_options.put(_key51, _val52); } iprot.readMapEnd(); } @@ -2465,9 +2465,9 @@ public class CfDef implements org.apache.thrift.TBase, jav oprot.writeFieldBegin(COLUMN_METADATA_FIELD_DESC); { oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, this.column_metadata.size())); - for (ColumnDef _iter49 : this.column_metadata) + for (ColumnDef _iter53 : this.column_metadata) { - _iter49.write(oprot); + _iter53.write(oprot); } oprot.writeListEnd(); } @@ -2554,10 +2554,10 @@ public class CfDef implements org.apache.thrift.TBase, jav oprot.writeFieldBegin(COMPACTION_STRATEGY_OPTIONS_FIELD_DESC); { oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRING, this.compaction_strategy_options.size())); - for (Map.Entry _iter50 : this.compaction_strategy_options.entrySet()) + for (Map.Entry _iter54 : this.compaction_strategy_options.entrySet()) { - oprot.writeString(_iter50.getKey()); - oprot.writeString(_iter50.getValue()); + oprot.writeString(_iter54.getKey()); + oprot.writeString(_iter54.getValue()); } oprot.writeMapEnd(); } @@ -2574,10 +2574,10 @@ public class CfDef implements org.apache.thrift.TBase, jav oprot.writeFieldBegin(COMPRESSION_OPTIONS_FIELD_DESC); { oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRING, this.compression_options.size())); - for (Map.Entry _iter51 : this.compression_options.entrySet()) + for (Map.Entry _iter55 : this.compression_options.entrySet()) { - oprot.writeString(_iter51.getKey()); - oprot.writeString(_iter51.getValue()); + oprot.writeString(_iter55.getKey()); + oprot.writeString(_iter55.getValue()); } oprot.writeMapEnd(); } diff --git a/interface/thrift/gen-java/org/apache/cassandra/thrift/ColumnDef.java b/interface/thrift/gen-java/org/apache/cassandra/thrift/ColumnDef.java index 10a70f02fd..d485fc1b9c 100644 --- a/interface/thrift/gen-java/org/apache/cassandra/thrift/ColumnDef.java +++ b/interface/thrift/gen-java/org/apache/cassandra/thrift/ColumnDef.java @@ -650,15 +650,15 @@ public class ColumnDef implements org.apache.thrift.TBase(2*_map33.size); - for (int _i34 = 0; _i34 < _map33.size; ++_i34) + org.apache.thrift.protocol.TMap _map37 = iprot.readMapBegin(); + this.index_options = new HashMap(2*_map37.size); + for (int _i38 = 0; _i38 < _map37.size; ++_i38) { - String _key35; - String _val36; - _key35 = iprot.readString(); - _val36 = iprot.readString(); - this.index_options.put(_key35, _val36); + String _key39; + String _val40; + _key39 = iprot.readString(); + _val40 = iprot.readString(); + this.index_options.put(_key39, _val40); } iprot.readMapEnd(); } @@ -710,10 +710,10 @@ public class ColumnDef implements org.apache.thrift.TBase _iter37 : this.index_options.entrySet()) + for (Map.Entry _iter41 : this.index_options.entrySet()) { - oprot.writeString(_iter37.getKey()); - oprot.writeString(_iter37.getValue()); + oprot.writeString(_iter41.getKey()); + oprot.writeString(_iter41.getValue()); } oprot.writeMapEnd(); } diff --git a/interface/thrift/gen-java/org/apache/cassandra/thrift/Constants.java b/interface/thrift/gen-java/org/apache/cassandra/thrift/Constants.java index 8dbd12b345..9ecf8c6a5d 100644 --- a/interface/thrift/gen-java/org/apache/cassandra/thrift/Constants.java +++ b/interface/thrift/gen-java/org/apache/cassandra/thrift/Constants.java @@ -44,6 +44,6 @@ import org.slf4j.LoggerFactory; public class Constants { - public static final String VERSION = "19.15.0"; + public static final String VERSION = "19.18.0"; } diff --git a/interface/thrift/gen-java/org/apache/cassandra/thrift/CqlMetadata.java b/interface/thrift/gen-java/org/apache/cassandra/thrift/CqlMetadata.java index e2f3256fea..f78ea29f37 100644 --- a/interface/thrift/gen-java/org/apache/cassandra/thrift/CqlMetadata.java +++ b/interface/thrift/gen-java/org/apache/cassandra/thrift/CqlMetadata.java @@ -554,15 +554,15 @@ public class CqlMetadata implements org.apache.thrift.TBase(2*_map65.size); - for (int _i66 = 0; _i66 < _map65.size; ++_i66) + org.apache.thrift.protocol.TMap _map69 = iprot.readMapBegin(); + this.name_types = new HashMap(2*_map69.size); + for (int _i70 = 0; _i70 < _map69.size; ++_i70) { - ByteBuffer _key67; - String _val68; - _key67 = iprot.readBinary(); - _val68 = iprot.readString(); - this.name_types.put(_key67, _val68); + ByteBuffer _key71; + String _val72; + _key71 = iprot.readBinary(); + _val72 = iprot.readString(); + this.name_types.put(_key71, _val72); } iprot.readMapEnd(); } @@ -573,15 +573,15 @@ public class CqlMetadata implements org.apache.thrift.TBase(2*_map69.size); - for (int _i70 = 0; _i70 < _map69.size; ++_i70) + org.apache.thrift.protocol.TMap _map73 = iprot.readMapBegin(); + this.value_types = new HashMap(2*_map73.size); + for (int _i74 = 0; _i74 < _map73.size; ++_i74) { - ByteBuffer _key71; - String _val72; - _key71 = iprot.readBinary(); - _val72 = iprot.readString(); - this.value_types.put(_key71, _val72); + ByteBuffer _key75; + String _val76; + _key75 = iprot.readBinary(); + _val76 = iprot.readString(); + this.value_types.put(_key75, _val76); } iprot.readMapEnd(); } @@ -622,10 +622,10 @@ public class CqlMetadata implements org.apache.thrift.TBase _iter73 : this.name_types.entrySet()) + for (Map.Entry _iter77 : this.name_types.entrySet()) { - oprot.writeBinary(_iter73.getKey()); - oprot.writeString(_iter73.getValue()); + oprot.writeBinary(_iter77.getKey()); + oprot.writeString(_iter77.getValue()); } oprot.writeMapEnd(); } @@ -635,10 +635,10 @@ public class CqlMetadata implements org.apache.thrift.TBase _iter74 : this.value_types.entrySet()) + for (Map.Entry _iter78 : this.value_types.entrySet()) { - oprot.writeBinary(_iter74.getKey()); - oprot.writeString(_iter74.getValue()); + oprot.writeBinary(_iter78.getKey()); + oprot.writeString(_iter78.getValue()); } oprot.writeMapEnd(); } diff --git a/interface/thrift/gen-java/org/apache/cassandra/thrift/CqlResult.java b/interface/thrift/gen-java/org/apache/cassandra/thrift/CqlResult.java index 8aae0ae477..8375bb1fbd 100644 --- a/interface/thrift/gen-java/org/apache/cassandra/thrift/CqlResult.java +++ b/interface/thrift/gen-java/org/apache/cassandra/thrift/CqlResult.java @@ -541,14 +541,14 @@ public class CqlResult implements org.apache.thrift.TBase(_list75.size); - for (int _i76 = 0; _i76 < _list75.size; ++_i76) + org.apache.thrift.protocol.TList _list79 = iprot.readListBegin(); + this.rows = new ArrayList(_list79.size); + for (int _i80 = 0; _i80 < _list79.size; ++_i80) { - CqlRow _elem77; - _elem77 = new CqlRow(); - _elem77.read(iprot); - this.rows.add(_elem77); + CqlRow _elem81; + _elem81 = new CqlRow(); + _elem81.read(iprot); + this.rows.add(_elem81); } iprot.readListEnd(); } @@ -597,9 +597,9 @@ public class CqlResult implements org.apache.thrift.TBase, case 2: // COLUMNS if (field.type == org.apache.thrift.protocol.TType.LIST) { { - org.apache.thrift.protocol.TList _list61 = iprot.readListBegin(); - this.columns = new ArrayList(_list61.size); - for (int _i62 = 0; _i62 < _list61.size; ++_i62) + org.apache.thrift.protocol.TList _list65 = iprot.readListBegin(); + this.columns = new ArrayList(_list65.size); + for (int _i66 = 0; _i66 < _list65.size; ++_i66) { - Column _elem63; - _elem63 = new Column(); - _elem63.read(iprot); - this.columns.add(_elem63); + Column _elem67; + _elem67 = new Column(); + _elem67.read(iprot); + this.columns.add(_elem67); } iprot.readListEnd(); } @@ -434,9 +434,9 @@ public class CqlRow implements org.apache.thrift.TBase, oprot.writeFieldBegin(COLUMNS_FIELD_DESC); { oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, this.columns.size())); - for (Column _iter64 : this.columns) + for (Column _iter68 : this.columns) { - _iter64.write(oprot); + _iter68.write(oprot); } oprot.writeListEnd(); } diff --git a/interface/thrift/gen-java/org/apache/cassandra/thrift/KsDef.java b/interface/thrift/gen-java/org/apache/cassandra/thrift/KsDef.java index 7d79bc4caf..813363b34c 100644 --- a/interface/thrift/gen-java/org/apache/cassandra/thrift/KsDef.java +++ b/interface/thrift/gen-java/org/apache/cassandra/thrift/KsDef.java @@ -718,15 +718,15 @@ public class KsDef implements org.apache.thrift.TBase, jav case 3: // STRATEGY_OPTIONS if (field.type == org.apache.thrift.protocol.TType.MAP) { { - org.apache.thrift.protocol.TMap _map52 = iprot.readMapBegin(); - this.strategy_options = new HashMap(2*_map52.size); - for (int _i53 = 0; _i53 < _map52.size; ++_i53) + org.apache.thrift.protocol.TMap _map56 = iprot.readMapBegin(); + this.strategy_options = new HashMap(2*_map56.size); + for (int _i57 = 0; _i57 < _map56.size; ++_i57) { - String _key54; - String _val55; - _key54 = iprot.readString(); - _val55 = iprot.readString(); - this.strategy_options.put(_key54, _val55); + String _key58; + String _val59; + _key58 = iprot.readString(); + _val59 = iprot.readString(); + this.strategy_options.put(_key58, _val59); } iprot.readMapEnd(); } @@ -745,14 +745,14 @@ public class KsDef implements org.apache.thrift.TBase, jav case 5: // CF_DEFS if (field.type == org.apache.thrift.protocol.TType.LIST) { { - org.apache.thrift.protocol.TList _list56 = iprot.readListBegin(); - this.cf_defs = new ArrayList(_list56.size); - for (int _i57 = 0; _i57 < _list56.size; ++_i57) + org.apache.thrift.protocol.TList _list60 = iprot.readListBegin(); + this.cf_defs = new ArrayList(_list60.size); + for (int _i61 = 0; _i61 < _list60.size; ++_i61) { - CfDef _elem58; - _elem58 = new CfDef(); - _elem58.read(iprot); - this.cf_defs.add(_elem58); + CfDef _elem62; + _elem62 = new CfDef(); + _elem62.read(iprot); + this.cf_defs.add(_elem62); } iprot.readListEnd(); } @@ -798,10 +798,10 @@ public class KsDef implements org.apache.thrift.TBase, jav oprot.writeFieldBegin(STRATEGY_OPTIONS_FIELD_DESC); { oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRING, this.strategy_options.size())); - for (Map.Entry _iter59 : this.strategy_options.entrySet()) + for (Map.Entry _iter63 : this.strategy_options.entrySet()) { - oprot.writeString(_iter59.getKey()); - oprot.writeString(_iter59.getValue()); + oprot.writeString(_iter63.getKey()); + oprot.writeString(_iter63.getValue()); } oprot.writeMapEnd(); } @@ -817,9 +817,9 @@ public class KsDef implements org.apache.thrift.TBase, jav oprot.writeFieldBegin(CF_DEFS_FIELD_DESC); { oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, this.cf_defs.size())); - for (CfDef _iter60 : this.cf_defs) + for (CfDef _iter64 : this.cf_defs) { - _iter60.write(oprot); + _iter64.write(oprot); } oprot.writeListEnd(); } diff --git a/interface/thrift/gen-java/org/apache/cassandra/thrift/TokenRange.java b/interface/thrift/gen-java/org/apache/cassandra/thrift/TokenRange.java index ad904d7d75..67eec830a6 100644 --- a/interface/thrift/gen-java/org/apache/cassandra/thrift/TokenRange.java +++ b/interface/thrift/gen-java/org/apache/cassandra/thrift/TokenRange.java @@ -42,17 +42,27 @@ import java.util.Arrays; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * A TokenRange describes part of the Cassandra ring, it is a mapping from a range to + * endpoints responsible for that range. + * @param start_token The first token in the range + * @param end_token The last token in the range + * @param endpoints The endpoints responsible for the range (listed by their configured listen_address) + * @param rpc_endpoints The endpoints responsible for the range (listed by their configured rpc_address) + */ public class TokenRange implements org.apache.thrift.TBase, java.io.Serializable, Cloneable { private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TokenRange"); private static final org.apache.thrift.protocol.TField START_TOKEN_FIELD_DESC = new org.apache.thrift.protocol.TField("start_token", org.apache.thrift.protocol.TType.STRING, (short)1); private static final org.apache.thrift.protocol.TField END_TOKEN_FIELD_DESC = new org.apache.thrift.protocol.TField("end_token", org.apache.thrift.protocol.TType.STRING, (short)2); private static final org.apache.thrift.protocol.TField ENDPOINTS_FIELD_DESC = new org.apache.thrift.protocol.TField("endpoints", org.apache.thrift.protocol.TType.LIST, (short)3); - private static final org.apache.thrift.protocol.TField ENDPOINT_DETAILS_FIELD_DESC = new org.apache.thrift.protocol.TField("endpoint_details", org.apache.thrift.protocol.TType.LIST, (short)4); + private static final org.apache.thrift.protocol.TField RPC_ENDPOINTS_FIELD_DESC = new org.apache.thrift.protocol.TField("rpc_endpoints", org.apache.thrift.protocol.TType.LIST, (short)4); + private static final org.apache.thrift.protocol.TField ENDPOINT_DETAILS_FIELD_DESC = new org.apache.thrift.protocol.TField("endpoint_details", org.apache.thrift.protocol.TType.LIST, (short)5); public String start_token; public String end_token; public List endpoints; + public List rpc_endpoints; public List endpoint_details; /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */ @@ -60,7 +70,8 @@ public class TokenRange implements org.apache.thrift.TBase byName = new HashMap(); @@ -81,7 +92,9 @@ public class TokenRange implements org.apache.thrift.TBase __this__rpc_endpoints = new ArrayList(); + for (String other_element : other.rpc_endpoints) { + __this__rpc_endpoints.add(other_element); + } + this.rpc_endpoints = __this__rpc_endpoints; + } if (other.isSetEndpoint_details()) { List __this__endpoint_details = new ArrayList(); for (EndpointDetails other_element : other.endpoint_details) { @@ -190,6 +213,7 @@ public class TokenRange implements org.apache.thrift.TBase getRpc_endpointsIterator() { + return (this.rpc_endpoints == null) ? null : this.rpc_endpoints.iterator(); + } + + public void addToRpc_endpoints(String elem) { + if (this.rpc_endpoints == null) { + this.rpc_endpoints = new ArrayList(); + } + this.rpc_endpoints.add(elem); + } + + public List getRpc_endpoints() { + return this.rpc_endpoints; + } + + public TokenRange setRpc_endpoints(List rpc_endpoints) { + this.rpc_endpoints = rpc_endpoints; + return this; + } + + public void unsetRpc_endpoints() { + this.rpc_endpoints = null; + } + + /** Returns true if field rpc_endpoints is set (has been assigned a value) and false otherwise */ + public boolean isSetRpc_endpoints() { + return this.rpc_endpoints != null; + } + + public void setRpc_endpointsIsSet(boolean value) { + if (!value) { + this.rpc_endpoints = null; + } + } + public int getEndpoint_detailsSize() { return (this.endpoint_details == null) ? 0 : this.endpoint_details.size(); } @@ -345,6 +408,14 @@ public class TokenRange implements org.apache.thrift.TBase)value); + } + break; + case ENDPOINT_DETAILS: if (value == null) { unsetEndpoint_details(); @@ -367,6 +438,9 @@ public class TokenRange implements org.apache.thrift.TBase(_list23.size); + this.rpc_endpoints = new ArrayList(_list23.size); for (int _i24 = 0; _i24 < _list23.size; ++_i24) { - EndpointDetails _elem25; - _elem25 = new EndpointDetails(); - _elem25.read(iprot); - this.endpoint_details.add(_elem25); + String _elem25; + _elem25 = iprot.readString(); + this.rpc_endpoints.add(_elem25); + } + iprot.readListEnd(); + } + } else { + org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type); + } + break; + case 5: // ENDPOINT_DETAILS + if (field.type == org.apache.thrift.protocol.TType.LIST) { + { + org.apache.thrift.protocol.TList _list26 = iprot.readListBegin(); + this.endpoint_details = new ArrayList(_list26.size); + for (int _i27 = 0; _i27 < _list26.size; ++_i27) + { + EndpointDetails _elem28; + _elem28 = new EndpointDetails(); + _elem28.read(iprot); + this.endpoint_details.add(_elem28); } iprot.readListEnd(); } @@ -615,22 +732,36 @@ public class TokenRange implements org.apache.thrift.TBase[] generations; private final DecoratedKey[] lastCompactedKeys; private final int maxSSTableSizeInMB; - private static int MAX_COMPACTING_L0 = 32; private LeveledManifest(ColumnFamilyStore cfs, int maxSSTableSizeInMB) { @@ -250,8 +249,6 @@ public class LeveledManifest { // pick a random sstable from L0, and any that overlap with it List L0 = overlapping(remaining.iterator().next(), remaining); - //but not too many, as we could run out of memory - L0 = L0.size() > MAX_COMPACTING_L0 ? L0.subList(0, MAX_COMPACTING_L0) : L0; // add the overlapping ones from L1 for (SSTableReader sstable : L0) { diff --git a/src/java/org/apache/cassandra/dht/BootStrapper.java b/src/java/org/apache/cassandra/dht/BootStrapper.java index d957146f69..90f4ee43b9 100644 --- a/src/java/org/apache/cassandra/dht/BootStrapper.java +++ b/src/java/org/apache/cassandra/dht/BootStrapper.java @@ -165,7 +165,12 @@ public class BootStrapper } if (endpoints.isEmpty()) - throw new RuntimeException("No other nodes seen! Unable to bootstrap"); + throw new RuntimeException("No other nodes seen! Unable to bootstrap." + + "If you intended to start a single-node cluster, you should make sure " + + "your broadcast_address (or listen_address) is listed as a seed. " + + "Otherwise, you need to determine why the seed being contacted " + + "has no knowledge of the rest of the cluster. Usually, this can be solved " + + "by giving all nodes the same seed list."); Collections.sort(endpoints, new Comparator() { public int compare(InetAddress ia1, InetAddress ia2) diff --git a/src/java/org/apache/cassandra/hadoop/ColumnFamilyRecordReader.java b/src/java/org/apache/cassandra/hadoop/ColumnFamilyRecordReader.java index 8424a21ead..588bc02e33 100644 --- a/src/java/org/apache/cassandra/hadoop/ColumnFamilyRecordReader.java +++ b/src/java/org/apache/cassandra/hadoop/ColumnFamilyRecordReader.java @@ -143,6 +143,8 @@ public class ColumnFamilyRecordReader extends RecordReader>> diff --git a/src/java/org/apache/cassandra/net/IncomingTcpConnection.java b/src/java/org/apache/cassandra/net/IncomingTcpConnection.java index 42c5d03ec6..556ee5dc2d 100644 --- a/src/java/org/apache/cassandra/net/IncomingTcpConnection.java +++ b/src/java/org/apache/cassandra/net/IncomingTcpConnection.java @@ -67,6 +67,8 @@ public class IncomingTcpConnection extends Thread int header = input.readInt(); isStream = MessagingService.getBits(header, 3, 1) == 1; version = MessagingService.getBits(header, 15, 8); + if (logger.isDebugEnabled()) + logger.debug("Version for " + socket.getInetAddress() + " is " + version); if (isStream) { if (version == MessagingService.version_) @@ -98,6 +100,7 @@ public class IncomingTcpConnection extends Thread else if (msg != null) { Gossiper.instance.setVersion(msg.getFrom(), version); + logger.debug("set version for {} to {}", socket.getInetAddress(), version); } // loop to get the next message. @@ -108,6 +111,7 @@ public class IncomingTcpConnection extends Thread header = input.readInt(); assert isStream == (MessagingService.getBits(header, 3, 1) == 1) : "Connections cannot change type: " + isStream; version = MessagingService.getBits(header, 15, 8); + logger.debug("Version is now {}", version); receiveMessage(input, version); } } @@ -153,7 +157,7 @@ public class IncomingTcpConnection extends Thread MessagingService.instance().receive(message, id); return message; } - logger.info("Received connection from newer protocol version. Ignorning message."); + logger.debug("Received connection from newer protocol version {}. Ignorning message", version); return null; } diff --git a/src/java/org/apache/cassandra/service/AbstractCassandraDaemon.java b/src/java/org/apache/cassandra/service/AbstractCassandraDaemon.java index 12e82e9974..09ad3d5c74 100644 --- a/src/java/org/apache/cassandra/service/AbstractCassandraDaemon.java +++ b/src/java/org/apache/cassandra/service/AbstractCassandraDaemon.java @@ -346,15 +346,15 @@ public abstract class AbstractCassandraDaemon implements CassandraDaemon } start(); - } catch (Throwable e) + } + catch (Throwable e) { - String msg = "Exception encountered during startup."; - logger.error(msg, e); + logger.error("Exception encountered during startup", e); // try to warn user on stdout too, if we haven't already detached - System.out.println(msg); e.printStackTrace(); - + System.out.println("Exception encountered during startup: " + e.getMessage()); + System.exit(3); } } diff --git a/src/java/org/apache/cassandra/service/GCInspector.java b/src/java/org/apache/cassandra/service/GCInspector.java index f7531c7b9f..70fd99b440 100644 --- a/src/java/org/apache/cassandra/service/GCInspector.java +++ b/src/java/org/apache/cassandra/service/GCInspector.java @@ -107,7 +107,7 @@ public class GCInspector if (previousCount == null) previousCount = 0L; - if (count == previousCount) + if (count.equals(previousCount)) continue; gccounts.put(gc.getName(), count); diff --git a/src/java/org/apache/cassandra/service/RowRepairResolver.java b/src/java/org/apache/cassandra/service/RowRepairResolver.java index 2bd5bec132..e1d9df0032 100644 --- a/src/java/org/apache/cassandra/service/RowRepairResolver.java +++ b/src/java/org/apache/cassandra/service/RowRepairResolver.java @@ -79,7 +79,7 @@ public class RowRepairResolver extends AbstractRowResolver endpoints.add(message.getFrom()); // compute maxLiveColumns to prevent short reads -- see https://issues.apache.org/jira/browse/CASSANDRA-2643 - int liveColumns = cf.getLiveColumnCount(); + int liveColumns = cf == null ? 0 : cf.getLiveColumnCount(); if (liveColumns > maxLiveColumns) maxLiveColumns = liveColumns; } diff --git a/src/java/org/apache/cassandra/service/StorageService.java b/src/java/org/apache/cassandra/service/StorageService.java index 895df29196..876566ae88 100644 --- a/src/java/org/apache/cassandra/service/StorageService.java +++ b/src/java/org/apache/cassandra/service/StorageService.java @@ -31,9 +31,7 @@ import javax.lang.model.type.TypeKind; import javax.management.MBeanServer; import javax.management.ObjectName; -import com.google.common.collect.ArrayListMultimap; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; +import com.google.common.collect.*; import org.apache.cassandra.config.*; import org.apache.log4j.Level; import org.apache.commons.lang.StringUtils; @@ -44,6 +42,7 @@ import org.apache.cassandra.concurrent.DebuggableScheduledThreadPoolExecutor; import org.apache.cassandra.concurrent.Stage; import org.apache.cassandra.concurrent.StageManager; import org.apache.cassandra.db.*; +import org.apache.cassandra.db.Table; import org.apache.cassandra.db.commitlog.CommitLog; import org.apache.cassandra.dht.*; import org.apache.cassandra.gms.*; @@ -641,11 +640,6 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe */ public Map> getRangeToEndpointMap(String keyspace) { - // some people just want to get a visual representation of things. Allow null and set it to the first - // non-system table. - if (keyspace == null) - keyspace = Schema.instance.getNonSystemTables().get(0); - /* All the ranges for the tokens */ Map> map = new HashMap>(); for (Map.Entry> entry : getRangeToAddressMap(keyspace).entrySet()) @@ -655,6 +649,21 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe return map; } + /** + * Return the rpc address associated with an endpoint as a string. + * @param endpoint The endpoint to get rpc address for + * @return + */ + public String getRpcaddress(InetAddress endpoint) + { + if (endpoint.equals(FBUtilities.getBroadcastAddress())) + return DatabaseDescriptor.getRpcAddress().getHostAddress(); + else if (Gossiper.instance.getEndpointStateForEndpoint(endpoint).getApplicationState(ApplicationState.RPC_ADDRESS) == null) + return endpoint.getHostAddress(); + else + return Gossiper.instance.getEndpointStateForEndpoint(endpoint).getApplicationState(ApplicationState.RPC_ADDRESS).value; + } + /** * for a keyspace, return the ranges and corresponding RPC addresses for a given keyspace. * @param keyspace @@ -662,11 +671,6 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe */ public Map> getRangeToRpcaddressMap(String keyspace) { - // some people just want to get a visual representation of things. Allow null and set it to the first - // non-system table. - if (keyspace == null) - keyspace = Schema.instance.getNonSystemTables().get(0); - /* All the ranges for the tokens */ Map> map = new HashMap>(); for (Map.Entry> entry : getRangeToAddressMap(keyspace).entrySet()) @@ -674,12 +678,7 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe List rpcaddrs = new ArrayList(); for (InetAddress endpoint: entry.getValue()) { - if (endpoint.equals(FBUtilities.getBroadcastAddress())) - rpcaddrs.add(DatabaseDescriptor.getRpcAddress().getHostAddress()); - else if (Gossiper.instance.getEndpointStateForEndpoint(endpoint).getApplicationState(ApplicationState.RPC_ADDRESS) == null) - rpcaddrs.add(endpoint.getHostAddress()); - else - rpcaddrs.add(Gossiper.instance.getEndpointStateForEndpoint(endpoint).getApplicationState(ApplicationState.RPC_ADDRESS).value); + rpcaddrs.add(getRpcaddress(endpoint)); } map.put(entry.getKey(), rpcaddrs); } @@ -704,6 +703,11 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe public Map> getRangeToAddressMap(String keyspace) { + // some people just want to get a visual representation of things. Allow null and set it to the first + // non-system table. + if (keyspace == null) + keyspace = Schema.instance.getNonSystemTables().get(0); + List ranges = getAllRanges(tokenMetadata_.sortedTokens()); return constructRangeToEndpointMap(keyspace, ranges); } @@ -1096,10 +1100,9 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe // all leaving nodes are gone. for (Range range : affectedRanges) { - Collection currentEndpoints = strategy.calculateNaturalEndpoints(range.right, tm); - Collection newEndpoints = strategy.calculateNaturalEndpoints(range.right, allLeftMetadata); - newEndpoints.removeAll(currentEndpoints); - pendingRanges.putAll(range, newEndpoints); + Set currentEndpoints = ImmutableSet.copyOf(strategy.calculateNaturalEndpoints(range.right, tm)); + Set newEndpoints = ImmutableSet.copyOf(strategy.calculateNaturalEndpoints(range.right, allLeftMetadata)); + pendingRanges.putAll(range, Sets.difference(newEndpoints, currentEndpoints)); } // At this stage pendingRanges has been updated according to leave operations. We can @@ -2086,8 +2089,9 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe for (Range toStream : rangesPerTable.left) { - List endpoints = strategy.calculateNaturalEndpoints(toStream.right, tokenMetaClone); - rangeWithEndpoints.putAll(toStream, endpoints); + Set currentEndpoints = ImmutableSet.copyOf(strategy.calculateNaturalEndpoints(toStream.right, tokenMetadata_)); + Set newEndpoints = ImmutableSet.copyOf(strategy.calculateNaturalEndpoints(toStream.right, tokenMetaClone)); + rangeWithEndpoints.putAll(toStream, Sets.difference(newEndpoints, currentEndpoints)); } // associating table with range-to-endpoints map diff --git a/src/java/org/apache/cassandra/thrift/CassandraServer.java b/src/java/org/apache/cassandra/thrift/CassandraServer.java index f682304c14..3d0b9f4d7e 100644 --- a/src/java/org/apache/cassandra/thrift/CassandraServer.java +++ b/src/java/org/apache/cassandra/thrift/CassandraServer.java @@ -798,6 +798,7 @@ public class CassandraServer implements Cassandra.Iface { Range range = entry.getKey(); List endpoints = new ArrayList(); + List rpc_endpoints = new ArrayList(); List epDetails = new ArrayList(); for (InetAddress endpoint : entry.getValue()) @@ -823,13 +824,16 @@ public class CassandraServer implements Cassandra.Iface details.datacenter = appStateDc.value; endpoints.add(details.host); + rpc_endpoints.add(StorageService.instance.getRpcaddress(endpoint)); if (details.port != -1 || details.datacenter != null) epDetails.add(details); } - ranges.add(new TokenRange(tf.toString(range.left), tf.toString(range.right), endpoints) - .setEndpoint_details(epDetails)); + TokenRange tr = new TokenRange(tf.toString(range.left), tf.toString(range.right), endpoints) + .setEndpoint_details(epDetails) + .setRpc_endpoints(rpc_endpoints); + ranges.add(tr); } return ranges;