Skip to content

Commit 1e38ff7

Browse files
garyrussellartembilan
authored andcommitted
Clear lock cache in NioFileLocker (#2998)
Fixes #2980 # Conflicts: # spring-integration-file/src/test/java/org/springframework/integration/file/locking/NioFileLockerTests.java
1 parent e161f64 commit 1e38ff7

File tree

3 files changed

+16
-6
lines changed

3 files changed

+16
-6
lines changed

spring-integration-file/src/main/java/org/springframework/integration/file/locking/FileChannelCache.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
*/
3535
final class FileChannelCache {
3636

37-
private static ConcurrentMap<File, FileChannel> channelCache = new ConcurrentHashMap<File, FileChannel>();
37+
private static ConcurrentMap<File, FileChannel> channelCache = new ConcurrentHashMap<>();
3838

3939

4040
private FileChannelCache() {

spring-integration-file/src/main/java/org/springframework/integration/file/locking/NioFileLocker.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
*/
4141
public class NioFileLocker extends AbstractFileLockerFilter {
4242

43-
private final ConcurrentMap<File, FileLock> lockCache = new ConcurrentHashMap<File, FileLock>();
43+
private final ConcurrentMap<File, FileLock> lockCache = new ConcurrentHashMap<>();
4444

4545
@Override
4646
public boolean lock(File fileToLock) {
@@ -68,7 +68,7 @@ public boolean isLockable(File file) {
6868

6969
@Override
7070
public void unlock(File fileToUnlock) {
71-
FileLock fileLock = this.lockCache.get(fileToUnlock);
71+
FileLock fileLock = this.lockCache.remove(fileToUnlock);
7272
try {
7373
if (fileLock != null) {
7474
fileLock.release();

spring-integration-file/src/test/java/org/springframework/integration/file/locking/NioFileLockerTests.java

+13-3
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,24 @@
1818

1919
import static org.hamcrest.CoreMatchers.is;
2020
import static org.junit.Assert.assertThat;
21+
import static org.junit.Assert.assertTrue;
2122

2223
import java.io.File;
2324
import java.io.IOException;
25+
import java.lang.reflect.Field;
2426
import java.util.ArrayList;
25-
import java.util.List;
27+
import java.util.Map;
2628

2729
import org.junit.Rule;
2830
import org.junit.Test;
2931
import org.junit.rules.TemporaryFolder;
3032

3133
import org.springframework.integration.file.filters.FileListFilter;
34+
import org.springframework.integration.test.util.TestUtils;
3235

3336
/**
3437
* @author Iwein Fuld
38+
* @author Gary Russell
3539
*/
3640
public class NioFileLockerTests {
3741

@@ -48,13 +52,18 @@ public void create() throws IOException {
4852
};
4953

5054
@Test
51-
public void fileListedByFirstFilter() throws IOException {
55+
public void fileListedByFirstFilter() throws Exception {
5256
NioFileLocker filter = new NioFileLocker();
5357
File testFile = new File(workdir, "test0");
5458
testFile.createNewFile();
5559
assertThat(filter.filterFiles(workdir.listFiles()).get(0), is(testFile));
5660
filter.lock(testFile);
5761
assertThat(filter.filterFiles(workdir.listFiles()).get(0), is(testFile));
62+
filter.unlock(testFile);
63+
Field channelCache = FileChannelCache.class.getDeclaredField("channelCache");
64+
channelCache.setAccessible(true);
65+
assertTrue(((Map<?, ?>) channelCache.get(null)).isEmpty());
66+
assertTrue(TestUtils.getPropertyValue(filter, "lockCache", Map.class).isEmpty());
5867
}
5968

6069
@Test
@@ -65,7 +74,8 @@ public void fileNotListedWhenLockedByOtherFilter() throws IOException {
6574
testFile.createNewFile();
6675
assertThat(filter1.filterFiles(workdir.listFiles()).get(0), is(testFile));
6776
filter1.lock(testFile);
68-
assertThat(filter2.filterFiles(workdir.listFiles()), is((List<File>) new ArrayList<File>()));
77+
assertThat(filter2.filterFiles(workdir.listFiles()), is(new ArrayList<File>()));
78+
filter1.unlock(testFile);
6979
}
7080

7181
}

0 commit comments

Comments
 (0)