use of com.cinchapi.concourse.thrift.AccessToken in project concourse by cinchapi.
the class ConcourseServer method selectKeysCclTimeOrder.
@Override
@TranslateClientExceptions
@VerifyAccessToken
@VerifyReadPermission
public Map<Long, Map<String, Set<TObject>>> selectKeysCclTimeOrder(List<String> keys, String ccl, long timestamp, TOrder order, AccessToken creds, TransactionToken transaction, String environment) throws TException {
try {
AbstractSyntaxTree ast = compiler.parse(ccl);
AtomicSupport store = getStore(transaction, environment);
SortableTable<Set<TObject>> result = emptySortableResultDataset();
AtomicOperations.executeWithRetry(store, atomic -> Operations.selectKeysAstAtomic(keys, ast, timestamp, result, null, $result -> $result.sort(Sorting.byValues(Orders.from(order), atomic), timestamp), atomic));
return result;
} catch (Exception e) {
throw new ParseException(e.getMessage());
}
}
use of com.cinchapi.concourse.thrift.AccessToken in project concourse by cinchapi.
the class ConcurrentMapsTest method testWaitAndRemove.
@Test
public void testWaitAndRemove() {
final ConcurrentMap<AccessToken, String> map = Maps.newConcurrentMap();
String username = Random.getString();
long salt = Random.getLong();
long timestamp = Time.now();
final AccessToken token0 = createAccessToken(username, salt, timestamp);
final AtomicReference<String> actual = new AtomicReference<String>(null);
final AtomicBoolean done = new AtomicBoolean(false);
Thread waiter = new Thread(new Runnable() {
@Override
public void run() {
actual.set(ConcurrentMaps.waitAndRemove(map, token0));
done.set(true);
}
});
waiter.start();
AccessToken token = createAccessToken(username, salt, timestamp);
Assert.assertNotSame(token0, token);
String expected = Random.getString();
ConcurrentMaps.putAndSignal(map, token, expected);
while (!done.get()) {
continue;
}
Assert.assertEquals(expected, actual.get());
}
use of com.cinchapi.concourse.thrift.AccessToken in project concourse by cinchapi.
the class ConcurrentMapsTest method createAccessToken.
/**
* Create an {@link AccessToken} based on all the input components.
*
* @param username
* @param salt
* @param timestamp
* @return a new {@link AccessToken}.
*/
private static AccessToken createAccessToken(String username, long salt, long timestamp) {
StringBuilder sb = new StringBuilder();
sb.append(username);
sb.append(salt);
sb.append(timestamp);
AccessToken token = new AccessToken(ByteBuffer.wrap(Hashing.sha256().hashUnencodedChars(sb.toString()).asBytes()));
return token;
}
use of com.cinchapi.concourse.thrift.AccessToken in project concourse by cinchapi.
the class ConcourseServer method findCriteria.
@Override
@TranslateClientExceptions
@VerifyAccessToken
@VerifyReadPermission
public Set<Long> findCriteria(TCriteria criteria, AccessToken creds, TransactionToken transaction, String environment) throws TException {
AbstractSyntaxTree ast = compiler.parse(criteria);
AtomicSupport store = getStore(transaction, environment);
Function<Store, Set<Long>> function = $store -> ast.accept(Finder.instance(), $store);
try {
return function.apply(store);
} catch (InsufficientAtomicityException e) {
return AtomicOperations.supplyWithRetry(store, atomic -> function.apply(atomic));
}
}
use of com.cinchapi.concourse.thrift.AccessToken in project concourse by cinchapi.
the class ConcourseServer method selectKeyRecord.
@Override
@TranslateClientExceptions
@VerifyAccessToken
@VerifyReadPermission
public Set<TObject> selectKeyRecord(String key, long record, AccessToken creds, TransactionToken transaction, String environment) throws TException {
AtomicSupport store = getStore(transaction, environment);
Function<Store, Set<TObject>> function = $store -> Stores.select($store, key, record);
try {
return function.apply(store);
} catch (InsufficientAtomicityException e) {
return AtomicOperations.supplyWithRetry(store, atomic -> function.apply(atomic));
}
}
Aggregations