Skip to content

Commit f8ab78a

Browse files
authored
SNOW-1965573 Fix file cache creation on windows (#2115)
1 parent 6593a5c commit f8ab78a

File tree

2 files changed

+48
-21
lines changed

2 files changed

+48
-21
lines changed

src/main/java/net/snowflake/client/core/FileCacheManager.java

+12-8
Original file line numberDiff line numberDiff line change
@@ -141,14 +141,18 @@ synchronized FileCacheManager build() {
141141
}
142142
if (!cacheDir.exists()) {
143143
try {
144-
Files.createDirectories(
145-
cacheDir.toPath(),
146-
PosixFilePermissions.asFileAttribute(
147-
Stream.of(
148-
PosixFilePermission.OWNER_READ,
149-
PosixFilePermission.OWNER_WRITE,
150-
PosixFilePermission.OWNER_EXECUTE)
151-
.collect(Collectors.toSet())));
144+
if (!isWindows() && onlyOwnerPermissions) {
145+
Files.createDirectories(
146+
cacheDir.toPath(),
147+
PosixFilePermissions.asFileAttribute(
148+
Stream.of(
149+
PosixFilePermission.OWNER_READ,
150+
PosixFilePermission.OWNER_WRITE,
151+
PosixFilePermission.OWNER_EXECUTE)
152+
.collect(Collectors.toSet())));
153+
} else {
154+
Files.createDirectories(cacheDir.toPath());
155+
}
152156
} catch (IOException e) {
153157
logger.info(
154158
"Failed to create the cache directory: {}. Ignored. {}",

src/test/java/net/snowflake/client/core/FileCacheManagerTest.java

+36-13
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
package net.snowflake.client.core;
66

77
import static net.snowflake.client.core.StmtUtil.mapper;
8+
import static net.snowflake.client.jdbc.SnowflakeUtil.isWindows;
89
import static net.snowflake.client.jdbc.SnowflakeUtil.systemGetProperty;
910
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
1011
import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -168,19 +169,28 @@ private File createCacheFile() {
168169
if (Files.exists(cacheFile.getParent())) {
169170
Files.delete(cacheFile.getParent());
170171
}
171-
Files.createDirectories(
172-
cacheFile.getParent(),
173-
PosixFilePermissions.asFileAttribute(
174-
Stream.of(
175-
PosixFilePermission.OWNER_READ,
176-
PosixFilePermission.OWNER_WRITE,
177-
PosixFilePermission.OWNER_EXECUTE)
178-
.collect(Collectors.toSet())));
179-
Files.createFile(
180-
cacheFile,
181-
PosixFilePermissions.asFileAttribute(
182-
Stream.of(PosixFilePermission.OWNER_READ, PosixFilePermission.OWNER_WRITE)
183-
.collect(Collectors.toSet())));
172+
if (!isWindows()) {
173+
Files.createDirectories(
174+
cacheFile.getParent(),
175+
PosixFilePermissions.asFileAttribute(
176+
Stream.of(
177+
PosixFilePermission.OWNER_READ,
178+
PosixFilePermission.OWNER_WRITE,
179+
PosixFilePermission.OWNER_EXECUTE)
180+
.collect(Collectors.toSet())));
181+
} else {
182+
Files.createDirectories(cacheFile.getParent());
183+
}
184+
185+
if (!isWindows()) {
186+
Files.createFile(
187+
cacheFile,
188+
PosixFilePermissions.asFileAttribute(
189+
Stream.of(PosixFilePermission.OWNER_READ, PosixFilePermission.OWNER_WRITE)
190+
.collect(Collectors.toSet())));
191+
} else {
192+
Files.createFile(cacheFile);
193+
}
184194
ObjectNode cacheContent = mapper.createObjectNode();
185195
cacheContent.put("token", "tokenValue");
186196
fileCacheManager.overrideCacheFile(cacheFile.toFile());
@@ -199,4 +209,17 @@ private Path createSymlink() throws IOException {
199209
}
200210
return Files.createSymbolicLink(link, cacheFile.toPath());
201211
}
212+
213+
@Test
214+
void shouldCreateDirAndFile() {
215+
String tmpDirPath = System.getProperty("java.io.tmpdir");
216+
String cacheDirPath = tmpDirPath + File.separator + "snowflake-cache-dir";
217+
System.setProperty("FILE_CACHE_MANAGER_SHOULD_CREATE_DIR_AND_FILE", cacheDirPath);
218+
FileCacheManager.builder()
219+
.setOnlyOwnerPermissions(false)
220+
.setCacheDirectorySystemProperty("FILE_CACHE_MANAGER_SHOULD_CREATE_DIR_AND_FILE")
221+
.setBaseCacheFileName("cache-file")
222+
.build();
223+
assertTrue(new File(tmpDirPath).exists());
224+
}
202225
}

0 commit comments

Comments
 (0)