Skip to content

Commit 5953bc8

Browse files
committed
Cache SqlEngine
1 parent d7400fb commit 5953bc8

1 file changed

Lines changed: 41 additions & 3 deletions

File tree

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,64 @@
11
package com.cloudata.structured.sql;
22

3+
import static com.google.common.base.Preconditions.checkNotNull;
4+
5+
import java.util.concurrent.ExecutionException;
36
import java.util.concurrent.ExecutorService;
47
import java.util.concurrent.Executors;
58

9+
import javax.annotation.Nonnull;
10+
import javax.annotation.concurrent.Immutable;
611
import javax.inject.Inject;
712
import javax.inject.Singleton;
813

14+
import org.slf4j.Logger;
15+
import org.slf4j.LoggerFactory;
16+
917
import com.cloudata.structured.StructuredStateMachine;
1018
import com.cloudata.structured.StructuredStore;
19+
import com.google.common.base.Throwables;
20+
import com.google.common.cache.CacheBuilder;
21+
import com.google.common.cache.CacheLoader;
22+
import com.google.common.cache.LoadingCache;
1123

1224
@Singleton
1325
public class SqlEngineFactory {
26+
private static final Logger log = LoggerFactory.getLogger(SqlEngineFactory.class);
1427

1528
@Inject
1629
StructuredStateMachine stateMachine;
1730

1831
final ExecutorService executor = Executors.newCachedThreadPool();
1932

20-
public SqlEngine get(long storeId) {
21-
StructuredStore structuredStore = stateMachine.getStructuredStore(storeId);
33+
final LoadingCache<Long, SqlEngine> sqlEngineCache;
2234

23-
return new SqlEngine(structuredStore, executor);
35+
public SqlEngineFactory() {
36+
SqlEngineLoader loader = new SqlEngineLoader();
37+
this.sqlEngineCache = CacheBuilder.newBuilder().recordStats().build(loader);
2438
}
2539

40+
public SqlEngine get(long storeId) {
41+
try {
42+
return sqlEngineCache.get(storeId);
43+
} catch (ExecutionException e) {
44+
throw Throwables.propagate(e);
45+
}
46+
}
47+
48+
@Immutable
49+
final class SqlEngineLoader extends CacheLoader<Long, SqlEngine> {
50+
51+
@Override
52+
public SqlEngine load(@Nonnull Long id) throws Exception {
53+
checkNotNull(id);
54+
try {
55+
StructuredStore structuredStore = stateMachine.getStructuredStore(id);
56+
57+
return new SqlEngine(structuredStore, executor);
58+
} catch (Exception e) {
59+
log.warn("Error building SqlEngine", e);
60+
throw e;
61+
}
62+
}
63+
}
2664
}

0 commit comments

Comments
 (0)