Skip to content
This repository was archived by the owner on Mar 14, 2025. It is now read-only.

Commit 61b5901

Browse files
committed
make certain parameters configurable
1 parent ea5674b commit 61b5901

File tree

5 files changed

+66
-39
lines changed

5 files changed

+66
-39
lines changed

src/main/java/org/cryptomator/cloudaccess/CloudAccess.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.nio.file.Path;
2525
import java.security.NoSuchAlgorithmException;
2626
import java.security.SecureRandom;
27+
import java.time.Duration;
2728

2829
public class CloudAccess {
2930

@@ -59,7 +60,7 @@ public static CloudProvider vaultFormat8GCMCloudAccess(CloudProvider cloudProvid
5960

6061
VaultFormat8ProviderDecorator provider = new VaultFormat8ProviderDecorator(cloudProvider, pathToVault.resolve("d"), cryptor);
6162
provider.initialize();
62-
return new MetadataCachingProviderDecorator(provider);
63+
return new MetadataCachingProviderDecorator(provider, Duration.ofSeconds(Long.getLong("org.cryptomator.cloudaccess.cryptometadatatimeout", 10L)));
6364
} catch (NoSuchAlgorithmException e) {
6465
throw new IllegalStateException("JVM doesn't supply a CSPRNG", e);
6566
} catch (InterruptedException e) {

src/main/java/org/cryptomator/cloudaccess/MetadataCachingProviderDecorator.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,14 @@
1919

2020
public class MetadataCachingProviderDecorator implements CloudProvider {
2121

22+
private final static int DEFAULT_CACHE_TIMEOUT_SECONDS = 10;
23+
2224
final Cache<CloudPath, Optional<CloudItemMetadata>> itemMetadataCache;
2325
final Cache<CloudPath, Optional<Quota>> quotaCache;
2426
private final CloudProvider delegate;
2527

2628
public MetadataCachingProviderDecorator(CloudProvider delegate) {
27-
this(delegate, Duration.ofSeconds(10));
29+
this(delegate, Duration.ofSeconds(DEFAULT_CACHE_TIMEOUT_SECONDS));
2830
}
2931

3032
public MetadataCachingProviderDecorator(CloudProvider delegate, Duration cacheEntryMaxAge) {

src/main/java/org/cryptomator/cloudaccess/api/NetworkTimeout.java

Lines changed: 0 additions & 32 deletions
This file was deleted.
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package org.cryptomator.cloudaccess.api;
2+
3+
import java.util.concurrent.TimeUnit;
4+
5+
public class NetworkTimeouts {
6+
7+
private final Timeout connection;
8+
private final Timeout read;
9+
private final Timeout write;
10+
11+
NetworkTimeouts() {
12+
this.connection = new Timeout(Long.getLong("org.cryptomator.cloudaccess.timeout.connection", 30L), TimeUnit.SECONDS);
13+
this.read = new Timeout(Long.getLong("org.cryptomator.cloudaccess.timeout.read", 30L), TimeUnit.SECONDS);
14+
this.write = new Timeout(Long.getLong("org.cryptomator.cloudaccess.timeout.write", 30L), TimeUnit.SECONDS);
15+
}
16+
17+
public static NetworkTimeouts createBySystemPropertiesOrDefaults() {
18+
return new NetworkTimeouts();
19+
}
20+
21+
public Timeout connection() {
22+
return connection;
23+
}
24+
25+
public Timeout read() {
26+
return read;
27+
}
28+
29+
public Timeout write() {
30+
return write;
31+
}
32+
33+
public static class Timeout {
34+
35+
private final long timeout;
36+
private final TimeUnit unit;
37+
38+
Timeout(final long timeout, final TimeUnit unit) {
39+
this.timeout = timeout;
40+
this.unit = unit;
41+
}
42+
43+
public long getTimeout() {
44+
return timeout;
45+
}
46+
47+
public TimeUnit getUnit() {
48+
return unit;
49+
}
50+
51+
public long asMilliseconds() {
52+
return unit.toMillis(timeout);
53+
}
54+
55+
}
56+
}

src/main/java/org/cryptomator/cloudaccess/webdav/WebDavCompatibleHttpClient.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import okhttp3.OkHttpClient;
1212
import okhttp3.Request;
1313
import okhttp3.Response;
14-
import org.cryptomator.cloudaccess.api.NetworkTimeout;
14+
import org.cryptomator.cloudaccess.api.NetworkTimeouts;
1515
import org.slf4j.Logger;
1616
import org.slf4j.LoggerFactory;
1717

@@ -32,12 +32,12 @@ class WebDavCompatibleHttpClient {
3232

3333
private static OkHttpClient httpClientFor(final WebDavCredential webDavCredential) {
3434
final Map<String, CachingAuthenticator> authCache = new ConcurrentHashMap<>();
35-
35+
var networkTimeouts = NetworkTimeouts.createBySystemPropertiesOrDefaults();
3636
final var builder = new OkHttpClient()
3737
.newBuilder()
38-
.connectTimeout(NetworkTimeout.CONNECTION.getTimeout(), NetworkTimeout.CONNECTION.getUnit())
39-
.readTimeout(NetworkTimeout.READ.getTimeout(), NetworkTimeout.READ.getUnit())
40-
.writeTimeout(NetworkTimeout.WRITE.getTimeout(), NetworkTimeout.WRITE.getUnit())
38+
.connectTimeout(networkTimeouts.connection().getTimeout(), networkTimeouts.connection().getUnit())
39+
.readTimeout(networkTimeouts.read().getTimeout(), networkTimeouts.read().getUnit())
40+
.writeTimeout(networkTimeouts.write().getTimeout(), networkTimeouts.write().getUnit())
4141
.followRedirects(false)
4242
.addInterceptor(new HttpLoggingInterceptor(LOG::trace))
4343
.authenticator(httpAuthenticator(webDavCredential.getUsername(), webDavCredential.getPassword(), authCache))

0 commit comments

Comments
 (0)