Skip to content

Commit aa54655

Browse files
Carl-Zhou-CNyao.zhou
and
yao.zhou
authored
[HUDI-2451] On windows client with hdfs server for wrong file separator (apache#3687)
Co-authored-by: yao.zhou <[email protected]>
1 parent bc4966e commit aa54655

File tree

12 files changed

+27
-36
lines changed

12 files changed

+27
-36
lines changed

hudi-cli/src/main/java/org/apache/hudi/cli/commands/ExportCommand.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ private int copyNonArchivedInstants(List<HoodieInstant> instants, int limit, Str
181181
final HoodieTableMetaClient metaClient = HoodieCLI.getTableMetaClient();
182182
final HoodieActiveTimeline timeline = metaClient.getActiveTimeline();
183183
for (HoodieInstant instant : instants) {
184-
String localPath = localFolder + File.separator + instant.getFileName();
184+
String localPath = localFolder + Path.SEPARATOR + instant.getFileName();
185185

186186
byte[] data = null;
187187
switch (instant.getAction()) {

hudi-cli/src/test/java/org/apache/hudi/cli/commands/TestHoodieLogFileCommand.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@
5353
import org.junit.jupiter.api.Test;
5454
import org.springframework.shell.core.CommandResult;
5555

56-
import java.io.File;
5756
import java.io.IOException;
5857
import java.net.URISyntaxException;
5958
import java.nio.file.Files;
@@ -174,7 +173,7 @@ public void testShowLogFileRecordsWithMerge() throws IOException, InterruptedExc
174173

175174
// write to path '2015/03/16'.
176175
Schema schema = HoodieAvroUtils.addMetadataFields(getSimpleSchema());
177-
partitionPath = tablePath + File.separator + HoodieTestCommitMetadataGenerator.DEFAULT_SECOND_PARTITION_PATH;
176+
partitionPath = tablePath + Path.SEPARATOR + HoodieTestCommitMetadataGenerator.DEFAULT_SECOND_PARTITION_PATH;
178177
Files.createDirectories(Paths.get(partitionPath));
179178

180179
HoodieLogFormat.Writer writer = null;

hudi-cli/src/test/java/org/apache/hudi/cli/commands/TestTableCommand.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ public void testCreateWithSpecifiedValues() {
142142
assertTrue(cr.isSuccess());
143143
assertEquals("Metadata for table " + tableName + " loaded", cr.getResult().toString());
144144
HoodieTableMetaClient client = HoodieCLI.getTableMetaClient();
145-
assertEquals(metaPath + File.separator + "archive", client.getArchivePath());
145+
assertEquals(metaPath + Path.SEPARATOR + "archive", client.getArchivePath());
146146
assertEquals(tablePath, client.getBasePath());
147147
assertEquals(metaPath, client.getMetaPath());
148148
assertEquals(HoodieTableType.MERGE_ON_READ, client.getTableType());
@@ -181,7 +181,7 @@ public void testRefresh() throws IOException {
181181
private void testRefreshCommand(String command) throws IOException {
182182
// clean table matedata
183183
FileSystem fs = FileSystem.get(hadoopConf());
184-
fs.delete(new Path(tablePath + File.separator + HoodieTableMetaClient.METAFOLDER_NAME), true);
184+
fs.delete(new Path(tablePath + Path.SEPARATOR + HoodieTableMetaClient.METAFOLDER_NAME), true);
185185

186186
// Create table
187187
assertTrue(prepareTable());

hudi-cli/src/test/java/org/apache/hudi/cli/integ/ITTestBootstrapCommand.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
package org.apache.hudi.cli.integ;
2020

21+
import org.apache.hadoop.fs.Path;
2122
import org.apache.hudi.cli.HoodieCLI;
2223
import org.apache.hudi.cli.HoodiePrintHelper;
2324
import org.apache.hudi.cli.commands.TableCommand;
@@ -32,7 +33,6 @@
3233
import org.junit.jupiter.api.Test;
3334
import org.springframework.shell.core.CommandResult;
3435

35-
import java.io.File;
3636
import java.io.IOException;
3737
import java.time.Instant;
3838
import java.util.Arrays;
@@ -59,16 +59,16 @@ public class ITTestBootstrapCommand extends AbstractShellIntegrationTest {
5959
public void init() {
6060
String srcName = "source";
6161
tableName = "test-table";
62-
sourcePath = basePath + File.separator + srcName;
63-
tablePath = basePath + File.separator + tableName;
62+
sourcePath = basePath + Path.SEPARATOR + srcName;
63+
tablePath = basePath + Path.SEPARATOR + tableName;
6464

6565
// generate test data
6666
partitions = Arrays.asList("2018", "2019", "2020");
6767
long timestamp = Instant.now().toEpochMilli();
6868
for (int i = 0; i < partitions.size(); i++) {
6969
Dataset<Row> df = TestBootstrap.generateTestRawTripDataset(timestamp,
7070
i * NUM_OF_RECORDS, i * NUM_OF_RECORDS + NUM_OF_RECORDS, null, jsc, sqlContext);
71-
df.write().parquet(sourcePath + File.separator + PARTITION_FIELD + "=" + partitions.get(i));
71+
df.write().parquet(sourcePath + Path.SEPARATOR + PARTITION_FIELD + "=" + partitions.get(i));
7272
}
7373
}
7474

hudi-cli/src/test/java/org/apache/hudi/cli/integ/ITTestHDFSParquetImportCommand.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
import org.junit.jupiter.api.Test;
4141
import org.springframework.shell.core.CommandResult;
4242

43-
import java.io.File;
4443
import java.io.IOException;
4544
import java.nio.file.Files;
4645
import java.nio.file.Paths;
@@ -70,7 +69,7 @@ public class ITTestHDFSParquetImportCommand extends AbstractShellIntegrationTest
7069
@BeforeEach
7170
public void init() throws IOException, ParseException {
7271
tableName = "test_table";
73-
tablePath = basePath + File.separator + tableName;
72+
tablePath = basePath + Path.SEPARATOR + tableName;
7473
sourcePath = new Path(basePath, "source");
7574
targetPath = new Path(tablePath);
7675
schemaFile = new Path(basePath, "file.schema").toString();
@@ -101,7 +100,7 @@ public void testConvertWithInsert() throws IOException {
101100
() -> assertEquals("Table imported to hoodie format", cr.getResult().toString()));
102101

103102
// Check hudi table exist
104-
String metaPath = targetPath + File.separator + HoodieTableMetaClient.METAFOLDER_NAME;
103+
String metaPath = targetPath + Path.SEPARATOR + HoodieTableMetaClient.METAFOLDER_NAME;
105104
assertTrue(Files.exists(Paths.get(metaPath)), "Hoodie table not exist.");
106105

107106
// Load meta data

hudi-cli/src/test/java/org/apache/hudi/cli/integ/ITTestSavepointsCommand.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
package org.apache.hudi.cli.integ;
2020

21+
import org.apache.hadoop.fs.Path;
2122
import org.apache.hudi.cli.HoodieCLI;
2223
import org.apache.hudi.cli.commands.TableCommand;
2324
import org.apache.hudi.cli.testutils.AbstractShellIntegrationTest;
@@ -32,7 +33,6 @@
3233
import org.junit.jupiter.api.Test;
3334
import org.springframework.shell.core.CommandResult;
3435

35-
import java.io.File;
3636
import java.io.IOException;
3737

3838
import static org.junit.jupiter.api.Assertions.assertAll;
@@ -53,7 +53,7 @@ public class ITTestSavepointsCommand extends AbstractShellIntegrationTest {
5353
@BeforeEach
5454
public void init() throws IOException {
5555
String tableName = "test_table";
56-
tablePath = basePath + File.separator + tableName;
56+
tablePath = basePath + Path.SEPARATOR + tableName;
5757

5858
// Create table and connect
5959
new TableCommand().createTable(

hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/heartbeat/HeartbeatUtils.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import org.apache.log4j.LogManager;
3030
import org.apache.log4j.Logger;
3131

32-
import java.io.File;
3332
import java.io.IOException;
3433
import java.util.List;
3534
import java.util.Set;
@@ -53,7 +52,7 @@ public static boolean deleteHeartbeatFile(FileSystem fs, String basePath, String
5352
boolean deleted = false;
5453
try {
5554
String heartbeatFolderPath = HoodieTableMetaClient.getHeartbeatFolderPath(basePath);
56-
deleted = fs.delete(new Path(heartbeatFolderPath + File.separator + instantTime), false);
55+
deleted = fs.delete(new Path(heartbeatFolderPath + Path.SEPARATOR + instantTime), false);
5756
if (!deleted) {
5857
LOG.error("Failed to delete heartbeat for instant " + instantTime);
5958
}

hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/heartbeat/HoodieHeartbeatClient.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import org.apache.log4j.Logger;
3030

3131
import javax.annotation.concurrent.NotThreadSafe;
32-
import java.io.File;
3332
import java.io.IOException;
3433
import java.io.OutputStream;
3534
import java.io.Serializable;
@@ -207,7 +206,7 @@ public void stop() throws HoodieException {
207206
}
208207

209208
public static Long getLastHeartbeatTime(FileSystem fs, String basePath, String instantTime) throws IOException {
210-
Path heartbeatFilePath = new Path(HoodieTableMetaClient.getHeartbeatFolderPath(basePath) + File.separator + instantTime);
209+
Path heartbeatFilePath = new Path(HoodieTableMetaClient.getHeartbeatFolderPath(basePath) + Path.SEPARATOR + instantTime);
211210
if (fs.exists(heartbeatFilePath)) {
212211
return fs.getFileStatus(heartbeatFilePath).getModificationTime();
213212
} else {
@@ -217,7 +216,7 @@ public static Long getLastHeartbeatTime(FileSystem fs, String basePath, String i
217216
}
218217

219218
public static Boolean heartbeatExists(FileSystem fs, String basePath, String instantTime) throws IOException {
220-
Path heartbeatFilePath = new Path(HoodieTableMetaClient.getHeartbeatFolderPath(basePath) + File.separator + instantTime);
219+
Path heartbeatFilePath = new Path(HoodieTableMetaClient.getHeartbeatFolderPath(basePath) + Path.SEPARATOR + instantTime);
221220
if (fs.exists(heartbeatFilePath)) {
222221
return true;
223222
}
@@ -255,7 +254,7 @@ private void updateHeartbeat(String instantTime) throws HoodieHeartbeatException
255254
try {
256255
Long newHeartbeatTime = System.currentTimeMillis();
257256
OutputStream outputStream =
258-
this.fs.create(new Path(heartbeatFolderPath + File.separator + instantTime), true);
257+
this.fs.create(new Path(heartbeatFolderPath + Path.SEPARATOR + instantTime), true);
259258
outputStream.close();
260259
Heartbeat heartbeat = instantToHeartbeatMap.get(instantTime);
261260
if (heartbeat.getLastHeartbeatTime() != null && isHeartbeatExpired(instantTime)) {

hudi-common/src/main/java/org/apache/hudi/common/table/HoodieTableMetaClient.java

+6-7
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@
4949
import org.apache.log4j.LogManager;
5050
import org.apache.log4j.Logger;
5151

52-
import java.io.File;
5352
import java.io.IOException;
5453
import java.io.Serializable;
5554
import java.util.Arrays;
@@ -76,10 +75,10 @@ public class HoodieTableMetaClient implements Serializable {
7675
private static final long serialVersionUID = 1L;
7776
private static final Logger LOG = LogManager.getLogger(HoodieTableMetaClient.class);
7877
public static final String METAFOLDER_NAME = ".hoodie";
79-
public static final String TEMPFOLDER_NAME = METAFOLDER_NAME + File.separator + ".temp";
80-
public static final String AUXILIARYFOLDER_NAME = METAFOLDER_NAME + File.separator + ".aux";
81-
public static final String BOOTSTRAP_INDEX_ROOT_FOLDER_PATH = AUXILIARYFOLDER_NAME + File.separator + ".bootstrap";
82-
public static final String HEARTBEAT_FOLDER_NAME = METAFOLDER_NAME + File.separator + ".heartbeat";
78+
public static final String TEMPFOLDER_NAME = METAFOLDER_NAME + Path.SEPARATOR + ".temp";
79+
public static final String AUXILIARYFOLDER_NAME = METAFOLDER_NAME + Path.SEPARATOR + ".aux";
80+
public static final String BOOTSTRAP_INDEX_ROOT_FOLDER_PATH = AUXILIARYFOLDER_NAME + Path.SEPARATOR + ".bootstrap";
81+
public static final String HEARTBEAT_FOLDER_NAME = METAFOLDER_NAME + Path.SEPARATOR + ".heartbeat";
8382
public static final String BOOTSTRAP_INDEX_BY_PARTITION_FOLDER_PATH = BOOTSTRAP_INDEX_ROOT_FOLDER_PATH
8483
+ Path.SEPARATOR + ".partitions";
8584
public static final String BOOTSTRAP_INDEX_BY_FILE_ID_FOLDER_PATH = BOOTSTRAP_INDEX_ROOT_FOLDER_PATH + Path.SEPARATOR
@@ -205,7 +204,7 @@ public String getMetaAuxiliaryPath() {
205204
* @return Heartbeat folder path.
206205
*/
207206
public static String getHeartbeatFolderPath(String basePath) {
208-
return String.format("%s%s%s", basePath, File.separator, HEARTBEAT_FOLDER_NAME);
207+
return String.format("%s%s%s", basePath, Path.SEPARATOR, HEARTBEAT_FOLDER_NAME);
209208
}
210209

211210
/**
@@ -227,7 +226,7 @@ public String getBootstrapIndexByFileIdFolderNameFolderPath() {
227226
*/
228227
public String getArchivePath() {
229228
String archiveFolder = tableConfig.getArchivelogFolder();
230-
return getMetaPath() + "/" + archiveFolder;
229+
return getMetaPath() + Path.SEPARATOR + archiveFolder;
231230
}
232231

233232
/**

hudi-flink/src/main/java/org/apache/hudi/source/FileIndex.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030

3131
import javax.annotation.Nullable;
3232

33-
import java.io.File;
3433
import java.util.ArrayList;
3534
import java.util.Arrays;
3635
import java.util.Collections;
@@ -89,7 +88,7 @@ public List<Map<String, String>> getPartitions(
8988
}
9089
List<Map<String, String>> partitions = new ArrayList<>();
9190
for (String partitionPath : partitionPaths) {
92-
String[] paths = partitionPath.split(File.separator);
91+
String[] paths = partitionPath.split(Path.SEPARATOR);
9392
Map<String, String> partitionMapping = new LinkedHashMap<>();
9493
if (hivePartition) {
9594
Arrays.stream(paths).forEach(p -> {

hudi-flink/src/main/java/org/apache/hudi/table/format/FilePathUtils.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import org.apache.hadoop.fs.FileSystem;
2929
import org.apache.hadoop.fs.Path;
3030

31-
import java.io.File;
3231
import java.io.IOException;
3332
import java.util.ArrayList;
3433
import java.util.Arrays;
@@ -83,7 +82,7 @@ private static boolean needsEscaping(char c) {
8382
* @param partitionKVs The partition key value mapping
8483
* @param hivePartition Whether the partition path is with Hive style,
8584
* e.g. {partition key} = {partition value}
86-
* @param sepSuffix Whether to append the file separator as suffix
85+
* @param sepSuffix Whether to append the path separator as suffix
8786
* @return an escaped, valid partition name
8887
*/
8988
public static String generatePartitionPath(
@@ -97,7 +96,7 @@ public static String generatePartitionPath(
9796
int i = 0;
9897
for (Map.Entry<String, String> e : partitionKVs.entrySet()) {
9998
if (i > 0) {
100-
suffixBuf.append(File.separator);
99+
suffixBuf.append(Path.SEPARATOR);
101100
}
102101
if (hivePartition) {
103102
suffixBuf.append(escapePathName(e.getKey()));
@@ -107,7 +106,7 @@ public static String generatePartitionPath(
107106
i++;
108107
}
109108
if (sepSuffix) {
110-
suffixBuf.append(File.separator);
109+
suffixBuf.append(Path.SEPARATOR);
111110
}
112111
return suffixBuf.toString();
113112
}

hudi-flink/src/test/java/org/apache/hudi/utils/TestUtils.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@
2727
import org.apache.flink.configuration.Configuration;
2828
import org.apache.flink.core.fs.Path;
2929

30-
import java.io.File;
31-
3230
import static org.junit.jupiter.api.Assertions.assertTrue;
3331

3432
/**
@@ -51,7 +49,7 @@ public static String getFirstCommit(String basePath) {
5149
public static String getSplitPartitionPath(MergeOnReadInputSplit split) {
5250
assertTrue(split.getLogPaths().isPresent());
5351
final String logPath = split.getLogPaths().get().get(0);
54-
String[] paths = logPath.split(File.separator);
52+
String[] paths = logPath.split(Path.SEPARATOR);
5553
return paths[paths.length - 2];
5654
}
5755

0 commit comments

Comments
 (0)