class org.apache.cassandra.service.StorageService$RangeRelocator
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: org.apache.cassandra.service.StorageService$RangeRelocator
  super_class: java.lang.Object
{
  private final org.apache.cassandra.streaming.StreamPlan streamPlan;
    descriptor: Lorg/apache/cassandra/streaming/StreamPlan;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  final org.apache.cassandra.service.StorageService this$0;
    descriptor: Lorg/apache/cassandra/service/StorageService;
    flags: (0x1010) ACC_FINAL, ACC_SYNTHETIC

  static final boolean $assertionsDisabled;
    descriptor: Z
    flags: (0x1018) ACC_STATIC, ACC_FINAL, ACC_SYNTHETIC

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 4247
            ldc Lorg/apache/cassandra/service/StorageService;
            invokevirtual java.lang.Class.desiredAssertionStatus:()Z
            ifne 1
            iconst_1
            goto 2
      StackMap locals:
      StackMap stack:
         1: iconst_0
      StackMap locals:
      StackMap stack: int
         2: putstatic org.apache.cassandra.service.StorageService$RangeRelocator.$assertionsDisabled:Z
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  private void <init>(java.util.Collection<org.apache.cassandra.dht.Token>, java.util.List<java.lang.String>);
    descriptor: (Lorg/apache/cassandra/service/StorageService;Ljava/util/Collection;Ljava/util/List;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // org.apache.cassandra.service.StorageService$RangeRelocator this
        start local 2 // java.util.Collection tokens
        start local 3 // java.util.List keyspaceNames
         0: .line 4252
            aload 0 /* this */
            aload 1
            putfield org.apache.cassandra.service.StorageService$RangeRelocator.this$0:Lorg/apache/cassandra/service/StorageService;
         1: .line 4251
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         2: .line 4249
            aload 0 /* this */
            new org.apache.cassandra.streaming.StreamPlan
            dup
            ldc "Relocation"
            invokespecial org.apache.cassandra.streaming.StreamPlan.<init>:(Ljava/lang/String;)V
            putfield org.apache.cassandra.service.StorageService$RangeRelocator.streamPlan:Lorg/apache/cassandra/streaming/StreamPlan;
         3: .line 4253
            aload 0 /* this */
            aload 2 /* tokens */
            aload 3 /* keyspaceNames */
            invokevirtual org.apache.cassandra.service.StorageService$RangeRelocator.calculateToFromStreams:(Ljava/util/Collection;Ljava/util/List;)V
         4: .line 4254
            return
        end local 3 // java.util.List keyspaceNames
        end local 2 // java.util.Collection tokens
        end local 0 // org.apache.cassandra.service.StorageService$RangeRelocator this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    5     0           this  Lorg/apache/cassandra/service/StorageService$RangeRelocator;
            0    5     2         tokens  Ljava/util/Collection<Lorg/apache/cassandra/dht/Token;>;
            0    5     3  keyspaceNames  Ljava/util/List<Ljava/lang/String;>;
    Signature: (Ljava/util/Collection<Lorg/apache/cassandra/dht/Token;>;Ljava/util/List<Ljava/lang/String;>;)V
    MethodParameters:
               Name  Flags
      this$0         final
      tokens         
      keyspaceNames  

  private void calculateToFromStreams(java.util.Collection<org.apache.cassandra.dht.Token>, java.util.List<java.lang.String>);
    descriptor: (Ljava/util/Collection;Ljava/util/List;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=25, args_size=3
        start local 0 // org.apache.cassandra.service.StorageService$RangeRelocator this
        start local 1 // java.util.Collection newTokens
        start local 2 // java.util.List keyspaceNames
         0: .line 4258
            invokestatic org.apache.cassandra.utils.FBUtilities.getBroadcastAddress:()Ljava/net/InetAddress;
            astore 3 /* localAddress */
        start local 3 // java.net.InetAddress localAddress
         1: .line 4259
            invokestatic org.apache.cassandra.config.DatabaseDescriptor.getEndpointSnitch:()Lorg/apache/cassandra/locator/IEndpointSnitch;
            astore 4 /* snitch */
        start local 4 // org.apache.cassandra.locator.IEndpointSnitch snitch
         2: .line 4260
            aload 0 /* this */
            getfield org.apache.cassandra.service.StorageService$RangeRelocator.this$0:Lorg/apache/cassandra/service/StorageService;
            getfield org.apache.cassandra.service.StorageService.tokenMetadata:Lorg/apache/cassandra/locator/TokenMetadata;
            invokevirtual org.apache.cassandra.locator.TokenMetadata.cloneAfterAllSettled:()Lorg/apache/cassandra/locator/TokenMetadata;
            astore 5 /* tokenMetaCloneAllSettled */
        start local 5 // org.apache.cassandra.locator.TokenMetadata tokenMetaCloneAllSettled
         3: .line 4262
            aload 0 /* this */
            getfield org.apache.cassandra.service.StorageService$RangeRelocator.this$0:Lorg/apache/cassandra/service/StorageService;
            getfield org.apache.cassandra.service.StorageService.tokenMetadata:Lorg/apache/cassandra/locator/TokenMetadata;
            invokevirtual org.apache.cassandra.locator.TokenMetadata.cloneOnlyTokenMap:()Lorg/apache/cassandra/locator/TokenMetadata;
            astore 6 /* tokenMetaClone */
        start local 6 // org.apache.cassandra.locator.TokenMetadata tokenMetaClone
         4: .line 4264
            aload 2 /* keyspaceNames */
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 8
            goto 72
      StackMap locals: org.apache.cassandra.service.StorageService$RangeRelocator java.util.Collection java.util.List java.net.InetAddress org.apache.cassandra.locator.IEndpointSnitch org.apache.cassandra.locator.TokenMetadata org.apache.cassandra.locator.TokenMetadata top java.util.Iterator
      StackMap stack:
         5: aload 8
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.String
            astore 7 /* keyspace */
        start local 7 // java.lang.String keyspace
         6: .line 4267
            aload 7 /* keyspace */
            invokestatic org.apache.cassandra.db.Keyspace.open:(Ljava/lang/String;)Lorg/apache/cassandra/db/Keyspace;
            invokevirtual org.apache.cassandra.db.Keyspace.getReplicationStrategy:()Lorg/apache/cassandra/locator/AbstractReplicationStrategy;
            astore 9 /* strategy */
        start local 9 // org.apache.cassandra.locator.AbstractReplicationStrategy strategy
         7: .line 4268
            aload 9 /* strategy */
            invokevirtual org.apache.cassandra.locator.AbstractReplicationStrategy.getAddressRanges:()Lcom/google/common/collect/Multimap;
            astore 10 /* endpointToRanges */
        start local 10 // com.google.common.collect.Multimap endpointToRanges
         8: .line 4270
            getstatic org.apache.cassandra.service.StorageService.logger:Lorg/slf4j/Logger;
            ldc "Calculating ranges to stream and request for keyspace {}"
            aload 7 /* keyspace */
            invokeinterface org.slf4j.Logger.debug:(Ljava/lang/String;Ljava/lang/Object;)V
         9: .line 4271
            aload 1 /* newTokens */
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 12
            goto 71
      StackMap locals: org.apache.cassandra.service.StorageService$RangeRelocator java.util.Collection java.util.List java.net.InetAddress org.apache.cassandra.locator.IEndpointSnitch org.apache.cassandra.locator.TokenMetadata org.apache.cassandra.locator.TokenMetadata java.lang.String java.util.Iterator org.apache.cassandra.locator.AbstractReplicationStrategy com.google.common.collect.Multimap top java.util.Iterator
      StackMap stack:
        10: aload 12
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.apache.cassandra.dht.Token
            astore 11 /* newToken */
        start local 11 // org.apache.cassandra.dht.Token newToken
        11: .line 4274
            aload 10 /* endpointToRanges */
            aload 3 /* localAddress */
            invokeinterface com.google.common.collect.Multimap.get:(Ljava/lang/Object;)Ljava/util/Collection;
            astore 13 /* currentRanges */
        start local 13 // java.util.Collection currentRanges
        12: .line 4276
            aload 9 /* strategy */
            aload 6 /* tokenMetaClone */
            aload 11 /* newToken */
            aload 3 /* localAddress */
            invokevirtual org.apache.cassandra.locator.AbstractReplicationStrategy.getPendingAddressRanges:(Lorg/apache/cassandra/locator/TokenMetadata;Lorg/apache/cassandra/dht/Token;Ljava/net/InetAddress;)Ljava/util/Collection;
            astore 14 /* updatedRanges */
        start local 14 // java.util.Collection updatedRanges
        13: .line 4280
            aload 9 /* strategy */
            aload 6 /* tokenMetaClone */
            invokevirtual org.apache.cassandra.locator.AbstractReplicationStrategy.getRangeAddresses:(Lorg/apache/cassandra/locator/TokenMetadata;)Lcom/google/common/collect/Multimap;
            astore 15 /* rangeAddresses */
        start local 15 // com.google.common.collect.Multimap rangeAddresses
        14: .line 4283
            aload 0 /* this */
            getfield org.apache.cassandra.service.StorageService$RangeRelocator.this$0:Lorg/apache/cassandra/service/StorageService;
            aload 13 /* currentRanges */
            aload 14 /* updatedRanges */
            invokevirtual org.apache.cassandra.service.StorageService.calculateStreamAndFetchRanges:(Ljava/util/Collection;Ljava/util/Collection;)Lorg/apache/cassandra/utils/Pair;
            astore 16 /* rangesPerKeyspace */
        start local 16 // org.apache.cassandra.utils.Pair rangesPerKeyspace
        15: .line 4289
            invokestatic com.google.common.collect.ArrayListMultimap.create:()Lcom/google/common/collect/ArrayListMultimap;
            astore 17 /* rangesToFetchWithPreferredEndpoints */
        start local 17 // com.google.common.collect.Multimap rangesToFetchWithPreferredEndpoints
        16: .line 4290
            aload 16 /* rangesPerKeyspace */
            getfield org.apache.cassandra.utils.Pair.right:Ljava/lang/Object;
            checkcast java.util.Set
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 19
            goto 44
      StackMap locals: org.apache.cassandra.service.StorageService$RangeRelocator java.util.Collection java.util.List java.net.InetAddress org.apache.cassandra.locator.IEndpointSnitch org.apache.cassandra.locator.TokenMetadata org.apache.cassandra.locator.TokenMetadata java.lang.String java.util.Iterator org.apache.cassandra.locator.AbstractReplicationStrategy com.google.common.collect.Multimap org.apache.cassandra.dht.Token java.util.Iterator java.util.Collection java.util.Collection com.google.common.collect.Multimap org.apache.cassandra.utils.Pair com.google.common.collect.Multimap top java.util.Iterator
      StackMap stack:
        17: aload 19
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.apache.cassandra.dht.Range
            astore 18 /* toFetch */
        start local 18 // org.apache.cassandra.dht.Range toFetch
        18: .line 4292
            aload 15 /* rangeAddresses */
            invokeinterface com.google.common.collect.Multimap.keySet:()Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 21
            goto 34
      StackMap locals: org.apache.cassandra.service.StorageService$RangeRelocator java.util.Collection java.util.List java.net.InetAddress org.apache.cassandra.locator.IEndpointSnitch org.apache.cassandra.locator.TokenMetadata org.apache.cassandra.locator.TokenMetadata java.lang.String java.util.Iterator org.apache.cassandra.locator.AbstractReplicationStrategy com.google.common.collect.Multimap org.apache.cassandra.dht.Token java.util.Iterator java.util.Collection java.util.Collection com.google.common.collect.Multimap org.apache.cassandra.utils.Pair com.google.common.collect.Multimap org.apache.cassandra.dht.Range java.util.Iterator top java.util.Iterator
      StackMap stack:
        19: aload 21
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.apache.cassandra.dht.Range
            astore 20 /* range */
        start local 20 // org.apache.cassandra.dht.Range range
        20: .line 4294
            aload 20 /* range */
            aload 18 /* toFetch */
            invokevirtual org.apache.cassandra.dht.Range.contains:(Lorg/apache/cassandra/dht/Range;)Z
            ifeq 34
        21: .line 4296
            aconst_null
            astore 22 /* endpoints */
        start local 22 // java.util.List endpoints
        22: .line 4298
            getstatic org.apache.cassandra.service.StorageService.useStrictConsistency:Z
            ifeq 32
        23: .line 4300
            aload 15 /* rangeAddresses */
            aload 20 /* range */
            invokeinterface com.google.common.collect.Multimap.get:(Ljava/lang/Object;)Ljava/util/Collection;
            invokestatic com.google.common.collect.Sets.newHashSet:(Ljava/lang/Iterable;)Ljava/util/HashSet;
            astore 23 /* oldEndpoints */
        start local 23 // java.util.Set oldEndpoints
        24: .line 4301
            aload 9 /* strategy */
            aload 18 /* toFetch */
            getfield org.apache.cassandra.dht.Range.right:Lorg/apache/cassandra/dht/RingPosition;
            checkcast org.apache.cassandra.dht.Token
            aload 5 /* tokenMetaCloneAllSettled */
            invokevirtual org.apache.cassandra.locator.AbstractReplicationStrategy.calculateNaturalEndpoints:(Lorg/apache/cassandra/dht/Token;Lorg/apache/cassandra/locator/TokenMetadata;)Ljava/util/List;
            invokestatic com.google.common.collect.Sets.newHashSet:(Ljava/lang/Iterable;)Ljava/util/HashSet;
            astore 24 /* newEndpoints */
        start local 24 // java.util.Set newEndpoints
        25: .line 4305
            aload 23 /* oldEndpoints */
            invokeinterface java.util.Set.size:()I
            aload 9 /* strategy */
            invokevirtual org.apache.cassandra.locator.AbstractReplicationStrategy.getReplicationFactor:()I
            if_icmpne 30
        26: .line 4307
            aload 23 /* oldEndpoints */
            aload 24 /* newEndpoints */
            invokeinterface java.util.Set.removeAll:(Ljava/util/Collection;)Z
            pop
        27: .line 4310
            aload 23 /* oldEndpoints */
            invokeinterface java.util.Set.isEmpty:()Z
            ifeq 29
        28: .line 4311
            goto 34
        29: .line 4313
      StackMap locals: org.apache.cassandra.service.StorageService$RangeRelocator java.util.Collection java.util.List java.net.InetAddress org.apache.cassandra.locator.IEndpointSnitch org.apache.cassandra.locator.TokenMetadata org.apache.cassandra.locator.TokenMetadata java.lang.String java.util.Iterator org.apache.cassandra.locator.AbstractReplicationStrategy com.google.common.collect.Multimap org.apache.cassandra.dht.Token java.util.Iterator java.util.Collection java.util.Collection com.google.common.collect.Multimap org.apache.cassandra.utils.Pair com.google.common.collect.Multimap org.apache.cassandra.dht.Range java.util.Iterator org.apache.cassandra.dht.Range java.util.Iterator java.util.List java.util.Set java.util.Set
      StackMap stack:
            getstatic org.apache.cassandra.service.StorageService$RangeRelocator.$assertionsDisabled:Z
            ifne 30
            aload 23 /* oldEndpoints */
            invokeinterface java.util.Set.size:()I
            iconst_1
            if_icmpeq 30
            new java.lang.AssertionError
            dup
            new java.lang.StringBuilder
            dup
            ldc "Expected 1 endpoint but found "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 23 /* oldEndpoints */
            invokeinterface java.util.Set.size:()I
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
        30: .line 4316
      StackMap locals:
      StackMap stack:
            iconst_1
            anewarray java.net.InetAddress
            dup
            iconst_0
            aload 23 /* oldEndpoints */
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.net.InetAddress
            aastore
            invokestatic com.google.common.collect.Lists.newArrayList:([Ljava/lang/Object;)Ljava/util/ArrayList;
            astore 22 /* endpoints */
        end local 24 // java.util.Set newEndpoints
        end local 23 // java.util.Set oldEndpoints
        31: .line 4317
            goto 33
        32: .line 4320
      StackMap locals:
      StackMap stack:
            aload 4 /* snitch */
            aload 3 /* localAddress */
            aload 15 /* rangeAddresses */
            aload 20 /* range */
            invokeinterface com.google.common.collect.Multimap.get:(Ljava/lang/Object;)Ljava/util/Collection;
            invokeinterface org.apache.cassandra.locator.IEndpointSnitch.getSortedListByProximity:(Ljava/net/InetAddress;Ljava/util/Collection;)Ljava/util/List;
            astore 22 /* endpoints */
        33: .line 4324
      StackMap locals:
      StackMap stack:
            aload 17 /* rangesToFetchWithPreferredEndpoints */
            aload 18 /* toFetch */
            aload 22 /* endpoints */
            invokeinterface com.google.common.collect.Multimap.putAll:(Ljava/lang/Object;Ljava/lang/Iterable;)Z
            pop
        end local 22 // java.util.List endpoints
        end local 20 // org.apache.cassandra.dht.Range range
        34: .line 4292
      StackMap locals: org.apache.cassandra.service.StorageService$RangeRelocator java.util.Collection java.util.List java.net.InetAddress org.apache.cassandra.locator.IEndpointSnitch org.apache.cassandra.locator.TokenMetadata org.apache.cassandra.locator.TokenMetadata java.lang.String java.util.Iterator org.apache.cassandra.locator.AbstractReplicationStrategy com.google.common.collect.Multimap org.apache.cassandra.dht.Token java.util.Iterator java.util.Collection java.util.Collection com.google.common.collect.Multimap org.apache.cassandra.utils.Pair com.google.common.collect.Multimap org.apache.cassandra.dht.Range java.util.Iterator top java.util.Iterator
      StackMap stack:
            aload 21
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 19
        35: .line 4328
            aload 17 /* rangesToFetchWithPreferredEndpoints */
            aload 18 /* toFetch */
            invokeinterface com.google.common.collect.Multimap.get:(Ljava/lang/Object;)Ljava/util/Collection;
            astore 20 /* addressList */
        start local 20 // java.util.Collection addressList
        36: .line 4329
            aload 20 /* addressList */
            ifnull 44
            aload 20 /* addressList */
            invokeinterface java.util.Collection.isEmpty:()Z
            ifeq 38
        37: .line 4330
            goto 44
        38: .line 4332
      StackMap locals: org.apache.cassandra.service.StorageService$RangeRelocator java.util.Collection java.util.List java.net.InetAddress org.apache.cassandra.locator.IEndpointSnitch org.apache.cassandra.locator.TokenMetadata org.apache.cassandra.locator.TokenMetadata java.lang.String java.util.Iterator org.apache.cassandra.locator.AbstractReplicationStrategy com.google.common.collect.Multimap org.apache.cassandra.dht.Token java.util.Iterator java.util.Collection java.util.Collection com.google.common.collect.Multimap org.apache.cassandra.utils.Pair com.google.common.collect.Multimap org.apache.cassandra.dht.Range java.util.Iterator java.util.Collection
      StackMap stack:
            getstatic org.apache.cassandra.service.StorageService.useStrictConsistency:Z
            ifeq 44
        39: .line 4334
            aload 20 /* addressList */
            invokeinterface java.util.Collection.size:()I
            iconst_1
            if_icmple 41
        40: .line 4335
            new java.lang.IllegalStateException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Multiple strict sources found for "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 18 /* toFetch */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
        41: .line 4337
      StackMap locals:
      StackMap stack:
            aload 20 /* addressList */
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.net.InetAddress
            astore 21 /* sourceIp */
        start local 21 // java.net.InetAddress sourceIp
        42: .line 4338
            getstatic org.apache.cassandra.gms.Gossiper.instance:Lorg/apache/cassandra/gms/Gossiper;
            invokevirtual org.apache.cassandra.gms.Gossiper.isEnabled:()Z
            ifeq 44
            getstatic org.apache.cassandra.gms.Gossiper.instance:Lorg/apache/cassandra/gms/Gossiper;
            aload 21 /* sourceIp */
            invokevirtual org.apache.cassandra.gms.Gossiper.getEndpointStateForEndpoint:(Ljava/net/InetAddress;)Lorg/apache/cassandra/gms/EndpointState;
            invokevirtual org.apache.cassandra.gms.EndpointState.isAlive:()Z
            ifne 44
        43: .line 4339
            new java.lang.RuntimeException
            dup
            new java.lang.StringBuilder
            dup
            ldc "A node required to move the data consistently is down ("
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 21 /* sourceIp */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc ").  If you wish to move the data from a potentially inconsistent replica, restart the node with -Dcassandra.consistent.rangemovement=false"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
            athrow
        end local 21 // java.net.InetAddress sourceIp
        end local 20 // java.util.Collection addressList
        end local 18 // org.apache.cassandra.dht.Range toFetch
        44: .line 4290
      StackMap locals: org.apache.cassandra.service.StorageService$RangeRelocator java.util.Collection java.util.List java.net.InetAddress org.apache.cassandra.locator.IEndpointSnitch org.apache.cassandra.locator.TokenMetadata org.apache.cassandra.locator.TokenMetadata java.lang.String java.util.Iterator org.apache.cassandra.locator.AbstractReplicationStrategy com.google.common.collect.Multimap org.apache.cassandra.dht.Token java.util.Iterator java.util.Collection java.util.Collection com.google.common.collect.Multimap org.apache.cassandra.utils.Pair com.google.common.collect.Multimap top java.util.Iterator
      StackMap stack:
            aload 19
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 17
        45: .line 4345
            invokestatic com.google.common.collect.HashMultimap.create:()Lcom/google/common/collect/HashMultimap;
            astore 18 /* endpointRanges */
        start local 18 // com.google.common.collect.Multimap endpointRanges
        46: .line 4346
            aload 16 /* rangesPerKeyspace */
            getfield org.apache.cassandra.utils.Pair.left:Ljava/lang/Object;
            checkcast java.util.Set
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 20
            goto 56
      StackMap locals: org.apache.cassandra.service.StorageService$RangeRelocator java.util.Collection java.util.List java.net.InetAddress org.apache.cassandra.locator.IEndpointSnitch org.apache.cassandra.locator.TokenMetadata org.apache.cassandra.locator.TokenMetadata java.lang.String java.util.Iterator org.apache.cassandra.locator.AbstractReplicationStrategy com.google.common.collect.Multimap org.apache.cassandra.dht.Token java.util.Iterator java.util.Collection java.util.Collection com.google.common.collect.Multimap org.apache.cassandra.utils.Pair com.google.common.collect.Multimap com.google.common.collect.Multimap top java.util.Iterator
      StackMap stack:
        47: aload 20
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.apache.cassandra.dht.Range
            astore 19 /* toStream */
        start local 19 // org.apache.cassandra.dht.Range toStream
        48: .line 4348
            aload 9 /* strategy */
            aload 19 /* toStream */
            getfield org.apache.cassandra.dht.Range.right:Lorg/apache/cassandra/dht/RingPosition;
            checkcast org.apache.cassandra.dht.Token
            aload 6 /* tokenMetaClone */
            invokevirtual org.apache.cassandra.locator.AbstractReplicationStrategy.calculateNaturalEndpoints:(Lorg/apache/cassandra/dht/Token;Lorg/apache/cassandra/locator/TokenMetadata;)Ljava/util/List;
            invokestatic com.google.common.collect.ImmutableSet.copyOf:(Ljava/util/Collection;)Lcom/google/common/collect/ImmutableSet;
            astore 21 /* currentEndpoints */
        start local 21 // java.util.Set currentEndpoints
        49: .line 4349
            aload 9 /* strategy */
            aload 19 /* toStream */
            getfield org.apache.cassandra.dht.Range.right:Lorg/apache/cassandra/dht/RingPosition;
            checkcast org.apache.cassandra.dht.Token
            aload 5 /* tokenMetaCloneAllSettled */
            invokevirtual org.apache.cassandra.locator.AbstractReplicationStrategy.calculateNaturalEndpoints:(Lorg/apache/cassandra/dht/Token;Lorg/apache/cassandra/locator/TokenMetadata;)Ljava/util/List;
            invokestatic com.google.common.collect.ImmutableSet.copyOf:(Ljava/util/Collection;)Lcom/google/common/collect/ImmutableSet;
            astore 22 /* newEndpoints */
        start local 22 // java.util.Set newEndpoints
        50: .line 4350
            getstatic org.apache.cassandra.service.StorageService.logger:Lorg/slf4j/Logger;
            ldc "Range: {} Current endpoints: {} New endpoints: {}"
            iconst_3
            anewarray java.lang.Object
            dup
            iconst_0
            aload 19 /* toStream */
            aastore
            dup
            iconst_1
            aload 21 /* currentEndpoints */
            aastore
            dup
            iconst_2
            aload 22 /* newEndpoints */
            aastore
            invokeinterface org.slf4j.Logger.debug:(Ljava/lang/String;[Ljava/lang/Object;)V
        51: .line 4351
            aload 22 /* newEndpoints */
            aload 21 /* currentEndpoints */
            invokestatic com.google.common.collect.Sets.difference:(Ljava/util/Set;Ljava/util/Set;)Lcom/google/common/collect/Sets$SetView;
            invokevirtual com.google.common.collect.Sets$SetView.iterator:()Ljava/util/Iterator;
            astore 24
            goto 55
      StackMap locals: org.apache.cassandra.service.StorageService$RangeRelocator java.util.Collection java.util.List java.net.InetAddress org.apache.cassandra.locator.IEndpointSnitch org.apache.cassandra.locator.TokenMetadata org.apache.cassandra.locator.TokenMetadata java.lang.String java.util.Iterator org.apache.cassandra.locator.AbstractReplicationStrategy com.google.common.collect.Multimap org.apache.cassandra.dht.Token java.util.Iterator java.util.Collection java.util.Collection com.google.common.collect.Multimap org.apache.cassandra.utils.Pair com.google.common.collect.Multimap com.google.common.collect.Multimap org.apache.cassandra.dht.Range java.util.Iterator java.util.Set java.util.Set top java.util.Iterator
      StackMap stack:
        52: aload 24
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.net.InetAddress
            astore 23 /* address */
        start local 23 // java.net.InetAddress address
        53: .line 4353
            getstatic org.apache.cassandra.service.StorageService.logger:Lorg/slf4j/Logger;
            ldc "Range {} has new owner {}"
            aload 19 /* toStream */
            aload 23 /* address */
            invokeinterface org.slf4j.Logger.debug:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
        54: .line 4354
            aload 18 /* endpointRanges */
            aload 23 /* address */
            aload 19 /* toStream */
            invokeinterface com.google.common.collect.Multimap.put:(Ljava/lang/Object;Ljava/lang/Object;)Z
            pop
        end local 23 // java.net.InetAddress address
        55: .line 4351
      StackMap locals:
      StackMap stack:
            aload 24
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 52
        end local 22 // java.util.Set newEndpoints
        end local 21 // java.util.Set currentEndpoints
        end local 19 // org.apache.cassandra.dht.Range toStream
        56: .line 4346
      StackMap locals: org.apache.cassandra.service.StorageService$RangeRelocator java.util.Collection java.util.List java.net.InetAddress org.apache.cassandra.locator.IEndpointSnitch org.apache.cassandra.locator.TokenMetadata org.apache.cassandra.locator.TokenMetadata java.lang.String java.util.Iterator org.apache.cassandra.locator.AbstractReplicationStrategy com.google.common.collect.Multimap org.apache.cassandra.dht.Token java.util.Iterator java.util.Collection java.util.Collection com.google.common.collect.Multimap org.apache.cassandra.utils.Pair com.google.common.collect.Multimap com.google.common.collect.Multimap top java.util.Iterator
      StackMap stack:
            aload 20
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 47
        57: .line 4359
            aload 18 /* endpointRanges */
            invokeinterface com.google.common.collect.Multimap.keySet:()Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 20
            goto 62
      StackMap locals:
      StackMap stack:
        58: aload 20
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.net.InetAddress
            astore 19 /* address */
        start local 19 // java.net.InetAddress address
        59: .line 4361
            getstatic org.apache.cassandra.service.StorageService.logger:Lorg/slf4j/Logger;
            ldc "Will stream range {} of keyspace {} to endpoint {}"
            iconst_3
            anewarray java.lang.Object
            dup
            iconst_0
            aload 18 /* endpointRanges */
            aload 19 /* address */
            invokeinterface com.google.common.collect.Multimap.get:(Ljava/lang/Object;)Ljava/util/Collection;
            aastore
            dup
            iconst_1
            aload 7 /* keyspace */
            aastore
            dup
            iconst_2
            aload 19 /* address */
            aastore
            invokeinterface org.slf4j.Logger.debug:(Ljava/lang/String;[Ljava/lang/Object;)V
        60: .line 4362
            aload 19 /* address */
            invokestatic org.apache.cassandra.db.SystemKeyspace.getPreferredIP:(Ljava/net/InetAddress;)Ljava/net/InetAddress;
            astore 21 /* preferred */
        start local 21 // java.net.InetAddress preferred
        61: .line 4363
            aload 0 /* this */
            getfield org.apache.cassandra.service.StorageService$RangeRelocator.streamPlan:Lorg/apache/cassandra/streaming/StreamPlan;
            aload 19 /* address */
            aload 21 /* preferred */
            aload 7 /* keyspace */
            aload 18 /* endpointRanges */
            aload 19 /* address */
            invokeinterface com.google.common.collect.Multimap.get:(Ljava/lang/Object;)Ljava/util/Collection;
            invokevirtual org.apache.cassandra.streaming.StreamPlan.transferRanges:(Ljava/net/InetAddress;Ljava/net/InetAddress;Ljava/lang/String;Ljava/util/Collection;)Lorg/apache/cassandra/streaming/StreamPlan;
            pop
        end local 21 // java.net.InetAddress preferred
        end local 19 // java.net.InetAddress address
        62: .line 4359
      StackMap locals:
      StackMap stack:
            aload 20
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 58
        63: .line 4367
            aload 17 /* rangesToFetchWithPreferredEndpoints */
            aload 7 /* keyspace */
            getstatic org.apache.cassandra.gms.FailureDetector.instance:Lorg/apache/cassandra/gms/IFailureDetector;
            getstatic org.apache.cassandra.service.StorageService.useStrictConsistency:Z
            invokestatic org.apache.cassandra.dht.RangeStreamer.getWorkMap:(Lcom/google/common/collect/Multimap;Ljava/lang/String;Lorg/apache/cassandra/gms/IFailureDetector;Z)Lcom/google/common/collect/Multimap;
            astore 19 /* workMap */
        start local 19 // com.google.common.collect.Multimap workMap
        64: .line 4368
            aload 19 /* workMap */
            invokeinterface com.google.common.collect.Multimap.keySet:()Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 21
            goto 69
      StackMap locals: org.apache.cassandra.service.StorageService$RangeRelocator java.util.Collection java.util.List java.net.InetAddress org.apache.cassandra.locator.IEndpointSnitch org.apache.cassandra.locator.TokenMetadata org.apache.cassandra.locator.TokenMetadata java.lang.String java.util.Iterator org.apache.cassandra.locator.AbstractReplicationStrategy com.google.common.collect.Multimap org.apache.cassandra.dht.Token java.util.Iterator java.util.Collection java.util.Collection com.google.common.collect.Multimap org.apache.cassandra.utils.Pair com.google.common.collect.Multimap com.google.common.collect.Multimap com.google.common.collect.Multimap top java.util.Iterator
      StackMap stack:
        65: aload 21
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.net.InetAddress
            astore 20 /* address */
        start local 20 // java.net.InetAddress address
        66: .line 4370
            getstatic org.apache.cassandra.service.StorageService.logger:Lorg/slf4j/Logger;
            ldc "Will request range {} of keyspace {} from endpoint {}"
            iconst_3
            anewarray java.lang.Object
            dup
            iconst_0
            aload 19 /* workMap */
            aload 20 /* address */
            invokeinterface com.google.common.collect.Multimap.get:(Ljava/lang/Object;)Ljava/util/Collection;
            aastore
            dup
            iconst_1
            aload 7 /* keyspace */
            aastore
            dup
            iconst_2
            aload 20 /* address */
            aastore
            invokeinterface org.slf4j.Logger.debug:(Ljava/lang/String;[Ljava/lang/Object;)V
        67: .line 4371
            aload 20 /* address */
            invokestatic org.apache.cassandra.db.SystemKeyspace.getPreferredIP:(Ljava/net/InetAddress;)Ljava/net/InetAddress;
            astore 22 /* preferred */
        start local 22 // java.net.InetAddress preferred
        68: .line 4372
            aload 0 /* this */
            getfield org.apache.cassandra.service.StorageService$RangeRelocator.streamPlan:Lorg/apache/cassandra/streaming/StreamPlan;
            aload 20 /* address */
            aload 22 /* preferred */
            aload 7 /* keyspace */
            aload 19 /* workMap */
            aload 20 /* address */
            invokeinterface com.google.common.collect.Multimap.get:(Ljava/lang/Object;)Ljava/util/Collection;
            invokevirtual org.apache.cassandra.streaming.StreamPlan.requestRanges:(Ljava/net/InetAddress;Ljava/net/InetAddress;Ljava/lang/String;Ljava/util/Collection;)Lorg/apache/cassandra/streaming/StreamPlan;
            pop
        end local 22 // java.net.InetAddress preferred
        end local 20 // java.net.InetAddress address
        69: .line 4368
      StackMap locals:
      StackMap stack:
            aload 21
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 65
        70: .line 4375
            getstatic org.apache.cassandra.service.StorageService.logger:Lorg/slf4j/Logger;
            ldc "Keyspace {}: work map {}."
            aload 7 /* keyspace */
            aload 19 /* workMap */
            invokeinterface org.slf4j.Logger.debug:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
        end local 19 // com.google.common.collect.Multimap workMap
        end local 18 // com.google.common.collect.Multimap endpointRanges
        end local 17 // com.google.common.collect.Multimap rangesToFetchWithPreferredEndpoints
        end local 16 // org.apache.cassandra.utils.Pair rangesPerKeyspace
        end local 15 // com.google.common.collect.Multimap rangeAddresses
        end local 14 // java.util.Collection updatedRanges
        end local 13 // java.util.Collection currentRanges
        end local 11 // org.apache.cassandra.dht.Token newToken
        71: .line 4271
      StackMap locals: org.apache.cassandra.service.StorageService$RangeRelocator java.util.Collection java.util.List java.net.InetAddress org.apache.cassandra.locator.IEndpointSnitch org.apache.cassandra.locator.TokenMetadata org.apache.cassandra.locator.TokenMetadata java.lang.String java.util.Iterator org.apache.cassandra.locator.AbstractReplicationStrategy com.google.common.collect.Multimap top java.util.Iterator
      StackMap stack:
            aload 12
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 10
        end local 10 // com.google.common.collect.Multimap endpointToRanges
        end local 9 // org.apache.cassandra.locator.AbstractReplicationStrategy strategy
        end local 7 // java.lang.String keyspace
        72: .line 4264
      StackMap locals: org.apache.cassandra.service.StorageService$RangeRelocator java.util.Collection java.util.List java.net.InetAddress org.apache.cassandra.locator.IEndpointSnitch org.apache.cassandra.locator.TokenMetadata org.apache.cassandra.locator.TokenMetadata top java.util.Iterator
      StackMap stack:
            aload 8
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 5
        73: .line 4378
            return
        end local 6 // org.apache.cassandra.locator.TokenMetadata tokenMetaClone
        end local 5 // org.apache.cassandra.locator.TokenMetadata tokenMetaCloneAllSettled
        end local 4 // org.apache.cassandra.locator.IEndpointSnitch snitch
        end local 3 // java.net.InetAddress localAddress
        end local 2 // java.util.List keyspaceNames
        end local 1 // java.util.Collection newTokens
        end local 0 // org.apache.cassandra.service.StorageService$RangeRelocator this
      LocalVariableTable:
        Start  End  Slot                                 Name  Signature
            0   74     0                                 this  Lorg/apache/cassandra/service/StorageService$RangeRelocator;
            0   74     1                            newTokens  Ljava/util/Collection<Lorg/apache/cassandra/dht/Token;>;
            0   74     2                        keyspaceNames  Ljava/util/List<Ljava/lang/String;>;
            1   74     3                         localAddress  Ljava/net/InetAddress;
            2   74     4                               snitch  Lorg/apache/cassandra/locator/IEndpointSnitch;
            3   74     5             tokenMetaCloneAllSettled  Lorg/apache/cassandra/locator/TokenMetadata;
            4   74     6                       tokenMetaClone  Lorg/apache/cassandra/locator/TokenMetadata;
            6   72     7                             keyspace  Ljava/lang/String;
            7   72     9                             strategy  Lorg/apache/cassandra/locator/AbstractReplicationStrategy;
            8   72    10                     endpointToRanges  Lcom/google/common/collect/Multimap<Ljava/net/InetAddress;Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;>;
           11   71    11                             newToken  Lorg/apache/cassandra/dht/Token;
           12   71    13                        currentRanges  Ljava/util/Collection<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;>;
           13   71    14                        updatedRanges  Ljava/util/Collection<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;>;
           14   71    15                       rangeAddresses  Lcom/google/common/collect/Multimap<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;Ljava/net/InetAddress;>;
           15   71    16                    rangesPerKeyspace  Lorg/apache/cassandra/utils/Pair<Ljava/util/Set<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;>;Ljava/util/Set<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;>;>;
           16   71    17  rangesToFetchWithPreferredEndpoints  Lcom/google/common/collect/Multimap<Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;Ljava/net/InetAddress;>;
           18   44    18                              toFetch  Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;
           20   34    20                                range  Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;
           22   34    22                            endpoints  Ljava/util/List<Ljava/net/InetAddress;>;
           24   31    23                         oldEndpoints  Ljava/util/Set<Ljava/net/InetAddress;>;
           25   31    24                         newEndpoints  Ljava/util/Set<Ljava/net/InetAddress;>;
           36   44    20                          addressList  Ljava/util/Collection<Ljava/net/InetAddress;>;
           42   44    21                             sourceIp  Ljava/net/InetAddress;
           46   71    18                       endpointRanges  Lcom/google/common/collect/Multimap<Ljava/net/InetAddress;Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;>;
           48   56    19                             toStream  Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;
           49   56    21                     currentEndpoints  Ljava/util/Set<Ljava/net/InetAddress;>;
           50   56    22                         newEndpoints  Ljava/util/Set<Ljava/net/InetAddress;>;
           53   55    23                              address  Ljava/net/InetAddress;
           59   62    19                              address  Ljava/net/InetAddress;
           61   62    21                            preferred  Ljava/net/InetAddress;
           64   71    19                              workMap  Lcom/google/common/collect/Multimap<Ljava/net/InetAddress;Lorg/apache/cassandra/dht/Range<Lorg/apache/cassandra/dht/Token;>;>;
           66   69    20                              address  Ljava/net/InetAddress;
           68   69    22                            preferred  Ljava/net/InetAddress;
    Signature: (Ljava/util/Collection<Lorg/apache/cassandra/dht/Token;>;Ljava/util/List<Ljava/lang/String;>;)V
    MethodParameters:
               Name  Flags
      newTokens      
      keyspaceNames  

  public java.util.concurrent.Future<org.apache.cassandra.streaming.StreamState> stream();
    descriptor: ()Ljava/util/concurrent/Future;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.cassandra.service.StorageService$RangeRelocator this
         0: .line 4382
            aload 0 /* this */
            getfield org.apache.cassandra.service.StorageService$RangeRelocator.streamPlan:Lorg/apache/cassandra/streaming/StreamPlan;
            invokevirtual org.apache.cassandra.streaming.StreamPlan.execute:()Lorg/apache/cassandra/streaming/StreamResultFuture;
            areturn
        end local 0 // org.apache.cassandra.service.StorageService$RangeRelocator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/cassandra/service/StorageService$RangeRelocator;
    Signature: ()Ljava/util/concurrent/Future<Lorg/apache/cassandra/streaming/StreamState;>;

  public boolean streamsNeeded();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.cassandra.service.StorageService$RangeRelocator this
         0: .line 4387
            aload 0 /* this */
            getfield org.apache.cassandra.service.StorageService$RangeRelocator.streamPlan:Lorg/apache/cassandra/streaming/StreamPlan;
            invokevirtual org.apache.cassandra.streaming.StreamPlan.isEmpty:()Z
            ifeq 1
            iconst_0
            goto 2
      StackMap locals:
      StackMap stack:
         1: iconst_1
      StackMap locals:
      StackMap stack: int
         2: ireturn
        end local 0 // org.apache.cassandra.service.StorageService$RangeRelocator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/apache/cassandra/service/StorageService$RangeRelocator;
}
SourceFile: "StorageService.java"
NestHost: org.apache.cassandra.service.StorageService
InnerClasses:
  public abstract SetView = com.google.common.collect.Sets$SetView of com.google.common.collect.Sets
  private RangeRelocator = org.apache.cassandra.service.StorageService$RangeRelocator of org.apache.cassandra.service.StorageService