in protosimplestore/src/main/java/com/uber/simplestore/proto/impl/SimpleProtoStoreImpl.java [41:69]
public <T extends MessageLite> ListenableFuture<T> get(String key, Parser<T> parser) {
return Futures.transformAsync(
simpleStore.get(key),
(bytes) -> {
T parsed;
if (bytes == null || bytes.length == 0) {
try {
parsed = parser.parseFrom(ByteString.EMPTY);
} catch (InvalidProtocolBufferException e) {
// Has required fields, so we will pass this error forward.
return Futures.immediateFailedFuture(e);
}
} else {
try {
parsed = parser.parseFrom(bytes);
} catch (InvalidProtocolBufferException e) {
if (config.equals(NamespaceConfig.CACHE)) {
// A cache is allowed to be cleared whenever and we will try and give you a default
// instance instead.
return Futures.immediateFuture(parser.parseFrom(ByteString.EMPTY));
} else {
return Futures.immediateFailedFuture(e);
}
}
}
return Futures.immediateFuture(parsed);
},
SimpleStoreConfig.getComputationExecutor());
}