package org.dcache.oncrpc4j.rpcgen;
import com.google.common.io.BaseEncoding;
import org.dcache.xdr.RpcCall;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
public class BlobStoreServerImpl extends BlobStoreServer {
private final ConcurrentHashMap<String, byte[]> store = new ConcurrentHashMap<>();
private final AtomicInteger requestCounter = new AtomicInteger(0);
private volatile long sleepFor = 1L;
@Override
public void put_1(RpcCall call$, Key key, Value value) {
String hexKey = bytesToHex(key.data);
store.put(hexKey, value.data);
requestCounter.incrementAndGet();
if (sleepFor > 0) {
try {
Thread.sleep(sleepFor);
} catch (InterruptedException ignored) {}
}
}
@Override
public Value get_1(RpcCall call$, Key key) {
String hexKey = bytesToHex(key.data);
byte[] value = store.get(hexKey);
Value res = new Value();
if (value != null) {
res.notNull = true;
res.data = value;
}
requestCounter.incrementAndGet();
return res;
}
public long getSleepFor() {
return sleepFor;
}
public void setSleepFor(long sleepFor) {
this.sleepFor = sleepFor;
}
public int getNumRequestsProcessed() {
return requestCounter.get();
}
public static String bytesToHex(byte[] bytes) {
return BaseEncoding.base16().upperCase().encode(bytes);
}
}