@Override public long size( final LocalDB.DB db ) throws LocalDBException { checkStatus( false ); return environment.computeInReadonlyTransaction( transaction -> { final Store store = getStore( db ); return store.count( transaction ); } ); }
@Override public Map<Day, Map<String, Integer>> getLineIncrements(Project project) { Environment env = getEnv(project.getId().toString()); Store store = getStore(env, DEFAULT_STORE); return env.computeInReadonlyTransaction(new TransactionalComputable<Map<Day, Map<String, Integer>>>() { @Override public Map<Day, Map<String, Integer>> compute(Transaction txn) { Map<Day, Map<String, Integer>> lineIncrements = new HashMap<>(); byte[] bytes = readBytes(store, txn, LINE_STATS_KEY); if (bytes != null) { @SuppressWarnings("unchecked") Map<Integer, Map<String, Integer>> storedMap = (Map<Integer, Map<String, Integer>>) SerializationUtils.deserialize(bytes); for (Map.Entry<Integer, Map<String, Integer>> entry: storedMap.entrySet()) lineIncrements.put(new Day(entry.getKey()), entry.getValue()); } return lineIncrements; } }); }
@SuppressWarnings("CheckReturnValue") synchronized <T> T searchInTransaction(final Supplier<T> fn) { return this.environment.computeInReadonlyTransaction( txn -> { try { final IndexReader indexReader = DocumentSearcher.createIndexReader(this.directory); IndexSearcher searcher = this.createIndexSearcher(indexReader); return fn.get(); } catch (IOException ex) { txn.abort(); throw new UncheckedIOException(ex); } finally { this.closeIndexSearcher(); } }); }
@Sessional @Override public int getCommitCount(Project project) { Integer commitCount = commitCountCache.get(project.getId()); if (commitCount == null) { Environment env = getEnv(project.getId().toString()); Store store = getStore(env, DEFAULT_STORE); commitCount = env.computeInReadonlyTransaction(new TransactionalComputable<Integer>() { @Override public Integer compute(Transaction txn) { return readInt(store, txn, COMMIT_COUNT_KEY, 0); } }); commitCountCache.put(project.getId(), commitCount); } return commitCount; }
@Sessional @Override public Map<Day, Contribution> getOverallContributions(Project project) { Environment env = getEnv(project.getId().toString()); Store store = getStore(env, DEFAULT_STORE); return env.computeInReadonlyTransaction(new TransactionalComputable<Map<Day, Contribution>>() { @Override public Map<Day, Contribution> compute(Transaction txn) { Map<Day, Contribution> overallContributions = new HashMap<>(); for (Map.Entry<Integer, Contribution> entry: deserializeContributions(readBytes(store, txn, OVERALL_CONTRIBUTIONS_KEY)).entrySet()) { overallContributions.put(new Day(entry.getKey()), entry.getValue()); } return overallContributions; } }); }
@Override public List<NameAndEmail> getUsers(Project project) { List<NameAndEmail> users = usersCache.get(project.getId()); if (users == null) { Environment env = getEnv(project.getId().toString()); Store store = getStore(env, DEFAULT_STORE); users = env.computeInReadonlyTransaction(new TransactionalComputable<List<NameAndEmail>>() { @SuppressWarnings("unchecked") @Override public List<NameAndEmail> compute(Transaction txn) { byte[] bytes = readBytes(store, txn, USERS_KEY); if (bytes != null) { List<NameAndEmail> users = new ArrayList<>((Set<NameAndEmail>) SerializationUtils.deserialize(bytes)); Collections.sort(users); return users; } else { return new ArrayList<>(); } } }); usersCache.put(project.getId(), users); } return users; }
final Store store = getStore(env, COMMITS_STORE); return env.computeInReadonlyTransaction(new TransactionalComputable<Set<ObjectId>>() {
final Store store = getStore(env, DEFAULT_STORE); files = env.computeInReadonlyTransaction(new TransactionalComputable<List<String>>() {
@Override public String get( final LocalDB.DB db, final String key ) throws LocalDBException { checkStatus( false ); return environment.computeInReadonlyTransaction( transaction -> { final Store store = getStore( db ); final ByteIterable returnValue = store.get( transaction, bindMachine.keyToEntry( key ) ); if ( returnValue != null ) { return bindMachine.entryToValue( returnValue ); } return null; } ); }
@Override public int getEdits(ProjectFacade project, UserFacade user, String path) { if (user.getEmail() != null) { Environment env = getEnv(project.getId().toString()); Store emailToIndexStore = getStore(env, EMAIL_TO_INDEX_STORE); Store pathToIndexStore = getStore(env, PATH_TO_INDEX_STORE); Store editsStore = getStore(env, EDITS_STORE); return env.computeInReadonlyTransaction(new TransactionalComputable<Integer>() { @Override public Integer compute(Transaction txn) { int userIndex = readInt(emailToIndexStore, txn, new StringByteIterable(user.getEmail()), -1); if (userIndex != -1) { int pathIndex = readInt(pathToIndexStore, txn, new StringByteIterable(path), -1); if (pathIndex != -1) { long editsKey = (userIndex<<32)|pathIndex; return readInt(editsStore, txn, new LongByteIterable(editsKey), 0); } } return 0; } }); } else { return 0; } }
Store indexToPathStore = getStore(env, INDEX_TO_PATH_STORE); return env.computeInReadonlyTransaction(new TransactionalComputable<Collection<String>>() {
Store dailyContributionsStore = getStore(env, DAILY_CONTRIBUTIONS_STORE); return env.computeInReadonlyTransaction(new TransactionalComputable<List<Contributor>>() {
env.computeInReadonlyTransaction(new TransactionalComputable<ObjectId>() {