in hadoop-ozone/freon/src/main/java/org/apache/hadoop/ozone/freon/OmMetadataGenerator.java [303:415]
private void applyOperation(long counter) throws Exception {
OmKeyArgs keyArgs;
final long threadSeqId = getThreadSequenceId();
String startKeyName;
if (mixedOperation) {
operation = operations[(int)threadSeqId];
}
if (randomOp) {
counter = ThreadLocalRandom.current().nextLong(getTestNo());
}
final String keyName = getPath(counter);
switch (operation) {
case CREATE_KEY:
getMetrics().timer(operation.name()).time(() -> performWriteOperation(() ->
bucket.createKey(keyName, dataSize.toBytes(), replicationConfig, emptyMap()), contentGenerator));
break;
case CREATE_STREAM_KEY:
getMetrics().timer(operation.name()).time(() -> performWriteOperation(() ->
bucket.createStreamKey(keyName, dataSize.toBytes(), replicationConfig, emptyMap()), contentGenerator));
break;
case LOOKUP_KEY:
keyArgs = omKeyArgsBuilder.get().setKeyName(keyName).build();
getMetrics().timer(operation.name()).time(() -> ozoneManagerClient.lookupKey(keyArgs));
break;
case GET_KEYINFO:
keyArgs = omKeyArgsBuilder.get().setKeyName(keyName).build();
getMetrics().timer(operation.name()).time(() -> ozoneManagerClient.getKeyInfo(keyArgs, false));
break;
case HEAD_KEY:
keyArgs = omKeyArgsBuilder.get()
.setKeyName(keyName).setHeadOp(true).build();
getMetrics().timer(operation.name()).time(() -> ozoneManagerClient.getKeyInfo(keyArgs, false));
break;
case READ_KEY:
getMetrics().timer(operation.name()).time(() -> performReadOperation(() -> bucket.readKey(keyName), readBuffer));
break;
case READ_FILE:
getMetrics().timer(operation.name()).time(() -> performReadOperation(() -> bucket.readFile(keyName), readBuffer));
break;
case CREATE_FILE:
getMetrics().timer(operation.name()).time(() -> performWriteOperation(() ->
bucket.createFile(keyName, dataSize.toBytes(), replicationConfig, true, false), contentGenerator));
break;
case CREATE_STREAM_FILE:
getMetrics().timer(operation.name()).time(() -> performWriteOperation(() ->
bucket.createStreamFile(keyName, dataSize.toBytes(), replicationConfig, true, false), contentGenerator));
break;
case LOOKUP_FILE:
keyArgs = omKeyArgsBuilder.get().setKeyName(keyName).build();
getMetrics().timer(operation.name()).time(() -> ozoneManagerClient.lookupFile(keyArgs));
break;
case LIST_KEYS:
startKeyName = getPath(threadSeqId * batchSize);
getMetrics().timer(operation.name()).time(() -> {
List<OmKeyInfo> keyInfoList =
ozoneManagerClient.listKeys(volumeName, bucketName, startKeyName, "", batchSize).getKeys();
if (keyInfoList.size() + 1 < batchSize) {
throw new NoSuchFileException("There are not enough keys for testing you should use "
+ "CREATE_KEY to create at least batch-size * threads = " + batchSize * getThreadNo());
}
return null;
});
break;
case LIST_KEYS_LIGHT:
startKeyName = getPath(threadSeqId * batchSize);
getMetrics().timer(operation.name()).time(() -> {
List<BasicOmKeyInfo> keyInfoList =
ozoneManagerClient.listKeysLight(volumeName, bucketName, startKeyName, "", batchSize).getKeys();
if (keyInfoList.size() + 1 < batchSize) {
throw new NoSuchFileException("There are not enough keys for testing you should use "
+ "CREATE_KEY to create at least batch-size * threads = " + batchSize * getThreadNo());
}
return null;
});
break;
case LIST_STATUS:
startKeyName = getPath(threadSeqId * batchSize);
keyArgs = omKeyArgsBuilder.get().setKeyName("").build();
getMetrics().timer(operation.name()).time(() -> {
List<OzoneFileStatus> fileStatusList = ozoneManagerClient.listStatus(
keyArgs, false, startKeyName, batchSize);
if (fileStatusList.size() + 1 < batchSize) {
throw new NoSuchFileException("There are not enough files for testing you should use "
+ "CREATE_FILE to create at least batch-size * threads = " + batchSize * getThreadNo());
}
return null;
});
break;
case LIST_STATUS_LIGHT:
startKeyName = getPath(threadSeqId * batchSize);
keyArgs = omKeyArgsBuilder.get().setKeyName("").build();
getMetrics().timer(operation.name()).time(() -> {
List<OzoneFileStatusLight> fileStatusList = ozoneManagerClient.listStatusLight(
keyArgs, false, startKeyName, batchSize, false);
if (fileStatusList.size() + 1 < batchSize) {
throw new NoSuchFileException("There are not enough files for testing you should use "
+ "CREATE_FILE to create at least batch-size * threads = " + batchSize * getThreadNo());
}
return null;
});
break;
case INFO_BUCKET:
getMetrics().timer(operation.name()).time(() -> ozoneManagerClient.getBucketInfo(volumeName, bucketName)
);
break;
case INFO_VOLUME:
getMetrics().timer(operation.name()).time(() -> ozoneManagerClient.getVolumeInfo(volumeName));
break;
default:
throw new IllegalStateException("Unrecognized write command " +
"type request " + operation);
}
}