This is an automated email from the ASF dual-hosted git repository.
trohrmann pushed a commit to branch release-1.13
in repository https://gitbox.apache.org/repos/asf/flink.git
The following commit(s) were added to refs/heads/release-1.13 by this push:
new eace77b [FLINK-25468] Copy SST files if they cannot be hard linked in
RocksDBHandle.restoreInstanceDirectoryFromPath
eace77b is described below
commit eace77b224e8981f12361b1eae3ec647f0fffdf2
Author: Till Rohrmann <[email protected]>
AuthorDate: Tue Oct 19 23:27:10 2021 +0200
[FLINK-25468] Copy SST files if they cannot be hard linked in
RocksDBHandle.restoreInstanceDirectoryFromPath
The RocksDBHandle.restoreInstanceDirectoryFromPath hard links SST files. If
this operation does not
work because the source directory is on a different file system then it
will now copy the file over.
This closes #18222.
---
.../streaming/state/restore/RocksDBHandle.java | 25 +++++++++++++++++-----
1 file changed, 20 insertions(+), 5 deletions(-)
diff --git
a/flink-state-backends/flink-statebackend-rocksdb/src/main/java/org/apache/flink/contrib/streaming/state/restore/RocksDBHandle.java
b/flink-state-backends/flink-statebackend-rocksdb/src/main/java/org/apache/flink/contrib/streaming/state/restore/RocksDBHandle.java
index 5a37db0..9e9a12d 100644
---
a/flink-state-backends/flink-statebackend-rocksdb/src/main/java/org/apache/flink/contrib/streaming/state/restore/RocksDBHandle.java
+++
b/flink-state-backends/flink-statebackend-rocksdb/src/main/java/org/apache/flink/contrib/streaming/state/restore/RocksDBHandle.java
@@ -202,12 +202,27 @@ class RocksDBHandle implements AutoCloseable {
final String fileName = file.getFileName().toString();
final Path targetFile = instanceRocksDBDirectory.resolve(fileName);
if (fileName.endsWith(SST_FILE_SUFFIX)) {
- // hardlink'ing the immutable sst-files.
- Files.createLink(targetFile, file);
- } else {
- // true copy for all other files.
- Files.copy(file, targetFile,
StandardCopyOption.REPLACE_EXISTING);
+ try {
+ // hardlink'ing the immutable sst-files.
+ Files.createLink(targetFile, file);
+ continue;
+ } catch (IOException ioe) {
+ final String logMessage =
+ String.format(
+ "Could not hard link sst file %s. Trying
to copy it over. This might "
+ + "increase the recovery time. In
order to avoid this, configure "
+ + "RocksDB's working directory and
the local state directory to be on the same volume.",
+ fileName);
+ if (logger.isDebugEnabled()) {
+ logger.debug(logMessage, ioe);
+ } else {
+ logger.info(logMessage);
+ }
+ }
}
+
+ // true copy for all other files and files that could not be hard
linked.
+ Files.copy(file, targetFile, StandardCopyOption.REPLACE_EXISTING);
}
}