Slight tweak to the public api of PlacementTransitionPlan

This commit is contained in:
Sam Tunnicliffe 2024-04-19 10:21:29 +01:00
parent 19c433431e
commit 5eed708dcb
6 changed files with 28 additions and 22 deletions

View File

@ -23,6 +23,7 @@ import java.util.Map;
import java.util.Set;
import javax.annotation.Nullable;
import com.google.common.annotations.VisibleForTesting;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -159,17 +160,14 @@ public class PlacementTransitionPlan
* @return null if everything is good, otherwise a Transformation.Result rejection containing information about the bad replica
*/
@Nullable
public static void assertPreExistingWriteReplica(DataPlacements placements, PlacementTransitionPlan transitionPlan)
public void assertPreExistingWriteReplica(DataPlacements placements)
{
assertPreExistingWriteReplica(placements,
transitionPlan.toSplit,
transitionPlan.addToWrites(),
transitionPlan.moveReads(),
transitionPlan.removeFromWrites());
assertPreExistingWriteReplica(placements, toSplit, addToWrites(), moveReads(), removeFromWrites());
}
@Nullable
public static void assertPreExistingWriteReplica(DataPlacements placements, PlacementDeltas ... deltasInOrder)
@VisibleForTesting
protected void assertPreExistingWriteReplica(DataPlacements placements, PlacementDeltas... deltasInOrder)
{
for (PlacementDeltas deltas : deltasInOrder)
{

View File

@ -167,7 +167,7 @@ public class PrepareJoin implements Transformation
void assertPreExistingWriteReplica(DataPlacements placements, PlacementTransitionPlan transitionPlan)
{
PlacementTransitionPlan.assertPreExistingWriteReplica(placements, transitionPlan);
transitionPlan.assertPreExistingWriteReplica(placements);
}
public static abstract class Serializer<T extends PrepareJoin> implements AsymmetricMetadataSerializer<Transformation, T>

View File

@ -115,7 +115,7 @@ public class PrepareLeave implements Transformation
PlacementDeltas startDelta = transitionPlan.addToWrites();
PlacementDeltas midDelta = transitionPlan.moveReads();
PlacementDeltas finishDelta = transitionPlan.removeFromWrites();
PlacementTransitionPlan.assertPreExistingWriteReplica(prev.placements, transitionPlan);
transitionPlan.assertPreExistingWriteReplica(prev.placements);
LockedRanges.Key unlockKey = LockedRanges.keyFor(proposed.epoch);

View File

@ -109,7 +109,7 @@ public class PrepareMove implements Transformation
StartMove startMove = new StartMove(nodeId, transitionPlan.addToWrites(), lockKey);
MidMove midMove = new MidMove(nodeId, transitionPlan.moveReads(), lockKey);
FinishMove finishMove = new FinishMove(nodeId, tokens, transitionPlan.removeFromWrites(), lockKey);
PlacementTransitionPlan.assertPreExistingWriteReplica(prev.placements, transitionPlan);
transitionPlan.assertPreExistingWriteReplica(prev.placements);
Move sequence = Move.newSequence(prev.nextEpoch(),
lockKey,

View File

@ -109,7 +109,7 @@ public class PrepareReplace implements Transformation
StartReplace start = new StartReplace(replaced, replacement, transitionPlan.addToWrites(), unlockKey);
MidReplace mid = new MidReplace(replaced, replacement, transitionPlan.moveReads(), unlockKey);
FinishReplace finish = new FinishReplace(replaced, replacement, transitionPlan.removeFromWrites(), unlockKey);
PlacementTransitionPlan.assertPreExistingWriteReplica(prev.placements, start.delta, mid.delta, finish.delta);
transitionPlan.assertPreExistingWriteReplica(prev.placements);
Set<Token> tokens = new HashSet<>(prev.tokenMap.tokens(replaced));
BootstrapAndReplace plan = BootstrapAndReplace.newSequence(prev.nextEpoch(),

View File

@ -44,7 +44,7 @@ public class PlacementTransitionPlanTest
PlacementDeltas addRead = PlacementDeltas.builder()
.put(params,
addReadDelta(newReads)).build();
PlacementTransitionPlan.assertPreExistingWriteReplica(startPlacements, addRead);
assertPreExistingWriteReplica(startPlacements, addRead);
}
@Test
@ -59,7 +59,7 @@ public class PlacementTransitionPlanTest
PlacementDeltas addRead = PlacementDeltas.builder()
.put(params,
addReadDelta(newReplica)).build();
PlacementTransitionPlan.assertPreExistingWriteReplica(startPlacements, addWrite, addRead);
assertPreExistingWriteReplica(startPlacements, addWrite, addRead);
}
@Test
@ -74,7 +74,7 @@ public class PlacementTransitionPlanTest
PlacementDeltas addRead = PlacementDeltas.builder()
.put(params,
addReadDelta(readReplicas)).build();
PlacementTransitionPlan.assertPreExistingWriteReplica(startPlacements, addWrite, addRead);
assertPreExistingWriteReplica(startPlacements, addWrite, addRead);
}
@Test
public void testAddSplitReadReplica()
@ -88,7 +88,7 @@ public class PlacementTransitionPlanTest
PlacementDeltas addRead = PlacementDeltas.builder()
.put(params,
addReadDelta(readReplicas)).build();
PlacementTransitionPlan.assertPreExistingWriteReplica(startPlacements, addWrite, addRead);
assertPreExistingWriteReplica(startPlacements, addWrite, addRead);
}
@Test
@ -103,7 +103,7 @@ public class PlacementTransitionPlanTest
PlacementDeltas addRead = PlacementDeltas.builder()
.put(params,
addReadDelta(readReplicas)).build();
PlacementTransitionPlan.assertPreExistingWriteReplica(startPlacements, addWrite, addRead);
assertPreExistingWriteReplica(startPlacements, addWrite, addRead);
}
@Test(expected = Transformation.RejectedTransformationException.class)
@ -118,7 +118,7 @@ public class PlacementTransitionPlanTest
PlacementDeltas addRead = PlacementDeltas.builder()
.put(params,
addReadDelta(readReplicas)).build();
PlacementTransitionPlan.assertPreExistingWriteReplica(startPlacements, addWrite, addRead);
assertPreExistingWriteReplica(startPlacements, addWrite, addRead);
}
@Test
@ -138,7 +138,7 @@ public class PlacementTransitionPlanTest
.put(params,
addReadDelta(readReplicas)).build();
// first delta adds (0, 20] as write, second (20, 40] - make sure both are in placements when adding the read replica;
PlacementTransitionPlan.assertPreExistingWriteReplica(startPlacements, addWrite1, addWrite2, addRead);
assertPreExistingWriteReplica(startPlacements, addWrite1, addWrite2, addRead);
}
@Test(expected = Transformation.RejectedTransformationException.class)
@ -154,7 +154,7 @@ public class PlacementTransitionPlanTest
PlacementDeltas addRead = PlacementDeltas.builder()
.put(params,
addReadDelta(fullRead)).build();
PlacementTransitionPlan.assertPreExistingWriteReplica(startPlacements, addWrite, addRead);
assertPreExistingWriteReplica(startPlacements, addWrite, addRead);
}
@Test
@ -170,7 +170,7 @@ public class PlacementTransitionPlanTest
PlacementDeltas addRead = PlacementDeltas.builder()
.put(params,
addReadDelta(transientRead)).build();
PlacementTransitionPlan.assertPreExistingWriteReplica(startPlacements, addWrite, addRead);
assertPreExistingWriteReplica(startPlacements, addWrite, addRead);
}
@Test
@ -186,7 +186,7 @@ public class PlacementTransitionPlanTest
PlacementDeltas addRead = PlacementDeltas.builder()
.put(params,
addReadDelta(transientRead)).build();
PlacementTransitionPlan.assertPreExistingWriteReplica(startPlacements, addWrite, addRead);
assertPreExistingWriteReplica(startPlacements, addWrite, addRead);
}
@Test(expected = Transformation.RejectedTransformationException.class)
@ -206,7 +206,15 @@ public class PlacementTransitionPlanTest
PlacementDeltas addRead = PlacementDeltas.builder()
.put(params,
addReadDelta(readReplicas)).build();
PlacementTransitionPlan.assertPreExistingWriteReplica(startPlacements, addWriteFull, addWriteTransient, addRead);
assertPreExistingWriteReplica(startPlacements, addWriteFull, addWriteTransient, addRead);
}
private void assertPreExistingWriteReplica(DataPlacements start, PlacementDeltas ... deltasInOrder)
{
new PlacementTransitionPlan(PlacementDeltas.empty(),
PlacementDeltas.empty(),
PlacementDeltas.empty(),
PlacementDeltas.empty()).assertPreExistingWriteReplica(start, deltasInOrder);
}
private PlacementDeltas.PlacementDelta addReadDelta(RangesByEndpoint replica)