Skip to content

Commit 4b891df

Browse files
committed
Cache preloaded distributions.
1 parent 8c714b8 commit 4b891df

File tree

2 files changed

+32
-7
lines changed

2 files changed

+32
-7
lines changed

core/src/main/java/ch/cyberduck/core/features/Scheduler.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717

1818
import ch.cyberduck.core.PasswordCallback;
1919

20+
import org.apache.commons.lang3.concurrent.ConcurrentUtils;
21+
2022
import java.util.concurrent.Future;
2123

2224
@Optional
@@ -35,4 +37,21 @@ public interface Scheduler<R> {
3537
* Shutdown thread pool
3638
*/
3739
void shutdown(boolean gracefully);
40+
41+
Scheduler noop = new Scheduler() {
42+
@Override
43+
public Future repeat(final PasswordCallback callback) {
44+
return ConcurrentUtils.constantFuture(null);
45+
}
46+
47+
@Override
48+
public Future execute(final PasswordCallback callback) {
49+
return ConcurrentUtils.constantFuture(null);
50+
}
51+
52+
@Override
53+
public void shutdown(final boolean gracefully) {
54+
//
55+
}
56+
};
3857
}

openstack/src/main/java/ch/cyberduck/core/openstack/SwiftSession.java

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -66,19 +66,28 @@ public class SwiftSession extends HttpSession<Client> {
6666
= new SwiftRegionService(this);
6767

6868
private final Map<Region, AccountInfo> accounts = new ConcurrentHashMap<>();
69+
private final Map<Path, Set<Distribution>> distributions = new ConcurrentHashMap<>();
6970

7071
private final DelegatingSchedulerFeature scheduler = new DelegatingSchedulerFeature(
71-
new SwiftAccountLoader(this) {
72+
new HostPreferences(host).getBoolean("openstack.account.preload") ? new SwiftAccountLoader(this) {
7273
@Override
7374
protected Map<Region, AccountInfo> operate(final PasswordCallback callback) throws BackgroundException {
7475
final Map<Region, AccountInfo> result = super.operate(callback);
7576
// Only executed single time
7677
accounts.putAll(result);
7778
return result;
7879
}
79-
}, new SwiftDistributionConfigurationLoader(this)
80+
} : Scheduler.noop,
81+
new HostPreferences(host).getBoolean("openstack.cdn.preload") ? new SwiftDistributionConfigurationLoader(this) {
82+
@Override
83+
protected Map<Path, Set<Distribution>> operate(final PasswordCallback callback) throws BackgroundException {
84+
final Map<Path, Set<Distribution>> result = super.operate(callback);
85+
// Only executed single time
86+
distributions.putAll(result);
87+
return result;
88+
}
89+
} : Scheduler.noop
8090
);
81-
private final Map<Path, Set<Distribution>> distributions = new ConcurrentHashMap<>();
8291

8392
public SwiftSession(final Host host, final X509TrustManager trust, final X509KeyManager key) {
8493
super(host, trust, key);
@@ -210,10 +219,7 @@ public Distribution read(final Path container, final Distribution.Method method,
210219
return (T) new SwiftAttributesFinderFeature(this, regionService);
211220
}
212221
if(type == Scheduler.class) {
213-
if(new HostPreferences(host).getBoolean("openstack.accounts.preload")) {
214-
return (T) scheduler;
215-
}
216-
return null;
222+
return (T) scheduler;
217223
}
218224
return super._getFeature(type);
219225
}

0 commit comments

Comments
 (0)