diff --git a/stress/shell/src/main/java/alluxio/stress/cli/StressMasterBench.java b/stress/shell/src/main/java/alluxio/stress/cli/StressMasterBench.java index b203f4cb9935..98da05d34e73 100644 --- a/stress/shell/src/main/java/alluxio/stress/cli/StressMasterBench.java +++ b/stress/shell/src/main/java/alluxio/stress/cli/StressMasterBench.java @@ -272,7 +272,8 @@ private void runInternal() throws IOException, AlluxioException { break; } localCounter = mContext.getOperationCounter(0).getAndIncrement(); - if (mParameters.mOperation == Operation.CREATE_TREE && localCounter >= mTreeTotalCount) { + if (mParameters.mOperation == Operation.CREATE_TREE + && localCounter >= mTreeTotalNodeCount) { break; } if (mParameters.mOperation == Operation.LOAD_METADATA diff --git a/stress/shell/src/main/java/alluxio/stress/cli/StressMasterBenchBase.java b/stress/shell/src/main/java/alluxio/stress/cli/StressMasterBenchBase.java index 9eb0f711255e..93d5699219dd 100644 --- a/stress/shell/src/main/java/alluxio/stress/cli/StressMasterBenchBase.java +++ b/stress/shell/src/main/java/alluxio/stress/cli/StressMasterBenchBase.java @@ -16,6 +16,7 @@ import alluxio.client.file.FileOutStream; import alluxio.client.file.URIStatus; import alluxio.exception.AlluxioException; +import alluxio.exception.FileAlreadyExistsException; import alluxio.exception.UnexpectedAlluxioException; import alluxio.grpc.Bits; import alluxio.grpc.CreateDirectoryPOptions; @@ -79,9 +80,9 @@ public abstract class StressMasterBenchBase protected final String mFixedDir = "fixed"; // vars for createTestTree - protected int[] mPathRecord; - protected int[] mTreeLevelQuant; - protected int mTreeTotalCount; + protected int[] mPathNodeIds; + protected int[] mTreeLevelNodeCount; + protected int mTreeTotalNodeCount; /** * Creates instance. @@ -242,13 +243,14 @@ protected final class BenchContext { mBasePaths = new Path[operations.length]; mFixedBasePaths = new Path[operations.length]; - mPathRecord = new int[mParameters.mTreeDepth]; - mTreeLevelQuant = new int[mParameters.mTreeDepth]; - mTreeLevelQuant[mParameters.mTreeDepth - 1] = mParameters.mTreeWidth; - for (int i = mTreeLevelQuant.length - 2; i >= 0; i--) { - mTreeLevelQuant[i] = mTreeLevelQuant[i + 1] * mParameters.mTreeWidth; + mPathNodeIds = new int[mParameters.mTreeDepth]; + mTreeLevelNodeCount = new int[mParameters.mTreeDepth]; + mTreeLevelNodeCount[mParameters.mTreeDepth - 1] = mParameters.mTreeWidth; + for (int levelCount = mTreeLevelNodeCount.length - 2; levelCount >= 0; levelCount--) { + mTreeLevelNodeCount[levelCount] = + mTreeLevelNodeCount[levelCount + 1] * mParameters.mTreeWidth; } - mTreeTotalCount = mTreeLevelQuant[0] * mParameters.mTreeThreads; + mTreeTotalNodeCount = mTreeLevelNodeCount[0] * mParameters.mTreeThreads; for (int i = 0; i < operations.length; i++) { mOperationCounters[i] = new AtomicLong(); @@ -486,17 +488,22 @@ protected void applyNativeOperation( .setLoadMetadataOnly(true).build()); break; case CREATE_TREE: - String p = ""; - int redundent = (int) counter; - for (int i = 0; i < mParameters.mTreeWidth; i++) { - mPathRecord[i] = redundent / mTreeLevelQuant[i]; - redundent = redundent % mTreeLevelQuant[i]; - p += "/"; - p += mPathRecord[i]; + String nodePath = ""; + int nodeNumber = (int) counter; + for (int levelCount = 0; levelCount < mParameters.mTreeDepth; levelCount++) { + mPathNodeIds[levelCount] = nodeNumber / mTreeLevelNodeCount[levelCount]; + nodeNumber = nodeNumber % mTreeLevelNodeCount[levelCount]; + nodePath += "/"; + nodePath += mPathNodeIds[levelCount]; } - for (int i = 0; i < mParameters.mTreeFiles; i++) { - fs.createFile(new AlluxioURI((basePath + p + "/" + redundent + "/" + i + ".txt")), - CreateFilePOptions.newBuilder().setRecursive(true).build()).close(); + for (int fileNumber = 0; fileNumber < mParameters.mTreeFiles; fileNumber++) { + try { + fs.createFile(new AlluxioURI((basePath + nodePath + "/" + + nodeNumber + "/" + fileNumber + ".txt")), + CreateFilePOptions.newBuilder().setRecursive(true).build()).close(); + } catch (FileAlreadyExistsException e) { + break; + } } break; default: