diff --git a/dynamometer-blockgen/src/main/java/com/linkedin/dynamometer/blockgenerator/XMLParser.java b/dynamometer-blockgen/src/main/java/com/linkedin/dynamometer/blockgenerator/XMLParser.java index 3b915c23b2..9c26f15048 100644 --- a/dynamometer-blockgen/src/main/java/com/linkedin/dynamometer/blockgenerator/XMLParser.java +++ b/dynamometer-blockgen/src/main/java/com/linkedin/dynamometer/blockgenerator/XMLParser.java @@ -38,8 +38,9 @@ */ class XMLParser { + // Legacy block IDs can be negative private static final Pattern BLOCK_PATTERN = - Pattern.compile("(\\d+)(\\d+)(\\d+)"); + Pattern.compile("(-?\\d+)(\\d+)(\\d+)"); private State currentState = State.DEFAULT; private short currentReplication; diff --git a/dynamometer-infra/src/main/java/com/linkedin/dynamometer/SimulatedMultiStorageFSDataset.java b/dynamometer-infra/src/main/java/com/linkedin/dynamometer/SimulatedMultiStorageFSDataset.java index 54cc38bf86..1642740744 100644 --- a/dynamometer-infra/src/main/java/com/linkedin/dynamometer/SimulatedMultiStorageFSDataset.java +++ b/dynamometer-infra/src/main/java/com/linkedin/dynamometer/SimulatedMultiStorageFSDataset.java @@ -581,14 +581,14 @@ public synchronized void injectBlocks(String bpid, for (Block b: injectBlocks) { BInfo binfo = new BInfo(bpid, b, false); - blockMaps.get((int) (b.getBlockId() % storages.size())).put(binfo.theBlock, binfo); + blockMaps.get((int) Math.floorMod(b.getBlockId(), storages.size())).put(binfo.theBlock, binfo); } } } /** Get the storage that a given block lives within. */ private SimulatedStorage getStorage(Block b) { - return storages.get((int) (b.getBlockId() % storages.size())); + return storages.get((int) Math.floorMod(b.getBlockId(), storages.size())); } /**