This is an automated email from the ASF dual-hosted git repository.
cstamas pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-resolver.git
The following commit(s) were added to refs/heads/master by this push:
new 3cc03b63 [MRESOLVER-371] Fix getMutex method noise (#300)
3cc03b63 is described below
commit 3cc03b633eec869a9d01668c3b8ea97e8abf345e
Author: Tamas Cservenak <[email protected]>
AuthorDate: Fri Jun 16 15:21:08 2023 +0200
[MRESOLVER-371] Fix getMutex method noise (#300)
Just go back to good ol' File and return old (proven) code as is.
---
https://issues.apache.org/jira/browse/MRESOLVER-371
---
.../internal/impl/DefaultTrackingFileManager.java | 26 +++++++++++-----------
1 file changed, 13 insertions(+), 13 deletions(-)
diff --git
a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultTrackingFileManager.java
b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultTrackingFileManager.java
index f3a89062..8bef789a 100644
---
a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultTrackingFileManager.java
+++
b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultTrackingFileManager.java
@@ -32,7 +32,6 @@ import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
import java.nio.channels.OverlappingFileLockException;
import java.nio.file.Files;
-import java.nio.file.Path;
import java.util.Map;
import java.util.Properties;
@@ -54,10 +53,9 @@ public final class DefaultTrackingFileManager implements
TrackingFileManager {
@Override
public Properties read(File file) {
- Path filePath = file.toPath();
- if (Files.isReadable(filePath)) {
- synchronized (getMutex(filePath)) {
- try (FileInputStream stream = new
FileInputStream(filePath.toFile());
+ if (Files.isReadable(file.toPath())) {
+ synchronized (getMutex(file)) {
+ try (FileInputStream stream = new FileInputStream(file);
FileLock unused = fileLock(stream.getChannel(),
Math.max(1, file.length()), true)) {
Properties props = new Properties();
props.load(stream);
@@ -73,18 +71,17 @@ public final class DefaultTrackingFileManager implements
TrackingFileManager {
@Override
public Properties update(File file, Map<String, String> updates) {
- Path filePath = file.toPath();
Properties props = new Properties();
try {
- Files.createDirectories(filePath.getParent());
+ Files.createDirectories(file.getParentFile().toPath());
} catch (IOException e) {
LOGGER.warn("Failed to create tracking file parent '{}'", file, e);
throw new UncheckedIOException(e);
}
- synchronized (getMutex(filePath)) {
- try (RandomAccessFile raf = new
RandomAccessFile(filePath.toFile(), "rw");
+ synchronized (getMutex(file)) {
+ try (RandomAccessFile raf = new RandomAccessFile(file, "rw");
FileLock unused = fileLock(raf.getChannel(), Math.max(1,
raf.length()), false)) {
if (raf.length() > 0) {
byte[] buffer = new byte[(int) raf.length()];
@@ -118,17 +115,20 @@ public final class DefaultTrackingFileManager implements
TrackingFileManager {
return props;
}
- private Object getMutex(Path file) {
+ private Object getMutex(File file) {
+ // The interned string of path is (mis)used as mutex, to exclude
different threads going for same file,
+ // as JVM file locking happens on JVM not on Thread level. This is how
original code did it ¯\_(ツ)_/¯
/*
* NOTE: Locks held by one JVM must not overlap and using the
canonical path is our best bet, still another
* piece of code might have locked the same file (unlikely though) or
the canonical path fails to capture file
* identity sufficiently as is the case with Java 1.6 and symlinks on
Windows.
*/
try {
- return file.toRealPath().toString().intern();
+ return file.getCanonicalPath().intern();
} catch (IOException e) {
- LOGGER.warn("Failed to get real path {}", file, e);
- return file.toAbsolutePath().toString().intern();
+ LOGGER.warn("Failed to canonicalize path {}", file, e);
+ // TODO This is code smell and deprecated
+ return file.getAbsolutePath().intern();
}
}