diff --git a/tempto-core/src/main/java/io/trino/tempto/hadoop/hdfs/HdfsClient.java b/tempto-core/src/main/java/io/trino/tempto/hadoop/hdfs/HdfsClient.java index 59024154..6e5a6be3 100644 --- a/tempto-core/src/main/java/io/trino/tempto/hadoop/hdfs/HdfsClient.java +++ b/tempto-core/src/main/java/io/trino/tempto/hadoop/hdfs/HdfsClient.java @@ -45,6 +45,8 @@ InputStream getInputStream() void createDirectory(String path); + void rename(String sourcePath, String destinationPath); + void delete(String path); void saveFile(String path, InputStream input); diff --git a/tempto-core/src/main/java/io/trino/tempto/internal/hadoop/hdfs/WebHdfsClient.java b/tempto-core/src/main/java/io/trino/tempto/internal/hadoop/hdfs/WebHdfsClient.java index 2c00f46c..0d7153c6 100644 --- a/tempto-core/src/main/java/io/trino/tempto/internal/hadoop/hdfs/WebHdfsClient.java +++ b/tempto-core/src/main/java/io/trino/tempto/internal/hadoop/hdfs/WebHdfsClient.java @@ -16,7 +16,6 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.inject.Inject; import com.google.inject.name.Named; @@ -106,6 +105,21 @@ public void createDirectory(String path) } } + @Override + public void rename(String sourcePath, String destinationPath) + { + HttpPut renameRequest = new HttpPut(buildUri(sourcePath, "RENAME", ImmutableMap.of("destination", destinationPath))); + try (CloseableHttpResponse response = httpRequestsExecutor.execute(renameRequest)) { + if (response.getStatusLine().getStatusCode() != SC_OK) { + throw invalidStatusException("RENAME", sourcePath, renameRequest, response); + } + logger.debug("Renamed file/directory {} to {} - username: {}", sourcePath, destinationPath, username); + } + catch (IOException e) { + throw new RuntimeException("Could not rename file/directory " + sourcePath + " to " + destinationPath + " in hdfs, user: " + username, e); + } + } + @Override public void delete(String path) { diff --git a/tempto-examples/src/main/java/io/trino/tempto/examples/HdfsClientTest.java b/tempto-examples/src/main/java/io/trino/tempto/examples/HdfsClientTest.java index dd77b350..c0b7afee 100644 --- a/tempto-examples/src/main/java/io/trino/tempto/examples/HdfsClientTest.java +++ b/tempto-examples/src/main/java/io/trino/tempto/examples/HdfsClientTest.java @@ -60,5 +60,10 @@ public void testMetadataOperations() { hdfsClient.createDirectory(testPath + "/b"); hdfsClient.createDirectory(testPath + "/c"); assertThat(hdfsClient.listDirectory(testPath)).containsAll(ImmutableList.of("a", "b", "c")); + + hdfsClient.createDirectory(testPath + "/rename"); + hdfsClient.createDirectory(testPath + "/rename/src"); + hdfsClient.rename(testPath + "/rename/src", testPath + "/rename/dest"); + assertThat(hdfsClient.listDirectory(testPath + "/rename")).containsAll(ImmutableList.of("dest")); } }