/** * Check whether the return values of the given request satisfies * the return values of this method. * * @return true if the return values of the given request satisfies * the return values of this method * @param req a request **/ boolean checkReturnValues(Request req) { return req.returnValues().satisfies(returnTypes); }
private void dumpServices(Request req) { List<String> names = new ArrayList<>(); List<String> specs = new ArrayList<>(); for (Map.Entry<String,String> entry : services.entrySet()) { names.add(entry.getKey()); specs.add(entry.getValue()); } req.returnValues().add(new StringArray(names.toArray(new String[names.size()]))); req.returnValues().add(new StringArray(specs.toArray(new String[specs.size()]))); req.returnValues().add(new Int32Value(gencnt)); }
@SuppressWarnings({"UnusedDeclaration"}) public final void getActiveFileReferencesStatus(Request req) { Map<FileReference, Double> downloadStatus = downloader.downloadStatus(); String[] fileRefArray = new String[downloadStatus.keySet().size()]; fileRefArray = downloadStatus.keySet().stream() .map(FileReference::value) .collect(Collectors.toList()) .toArray(fileRefArray); double[] downloadStatusArray = new double[downloadStatus.values().size()]; int i = 0; for (Double d : downloadStatus.values()) { downloadStatusArray[i++] = d; } req.returnValues().add(new StringArray(fileRefArray)); req.returnValues().add(new DoubleArray(downloadStatusArray)); }
private synchronized void handleRpcList(Request req) { Values dst = req.returnValues(); dst.add(new StringArray(names.toArray(new String[names.size()]))); }
private void handleFetchMirrorTimeout(FetchMirror fetch) { pendingFetch.remove(fetch); fetch.req.returnValues().add(new StringArray(new String[0])); fetch.req.returnValues().add(new StringArray(new String[0])); fetch.req.returnValues().add(new Int32Value(gencnt)); fetch.req.returnRequest(); }
private boolean validateResponse(Request request) { if (request.isError()) { return false; } else if (request.returnValues().size() == 0) { return false; } else if (!request.checkReturnTypes("is")) { // TODO: Do not hard-code return type log.log(LogLevel.WARNING, "Invalid return types for response: " + request.errorMessage()); return false; } return true; }
public void getMethodList(Request req) { int cnt = parent.methodMap().size(); String[] ret0_names = new String[cnt]; String[] ret1_params = new String[cnt]; String[] ret2_return = new String[cnt]; int i = 0; Iterator<Method> itr = parent.methodMap().values().iterator(); while (itr.hasNext()) { Method m = itr.next(); ret0_names[i] = m.name(); ret1_params[i] = m.paramTypes(); ret2_return[i] = m.returnTypes(); i++; } req.returnValues().add(new StringArray(ret0_names)); req.returnValues().add(new StringArray(ret1_params)); req.returnValues().add(new StringArray(ret2_return)); }
void addBucketIdListResult(BucketIdListResult result, Request req) { addResult(result, req); long[] retVal = new long[result.getBuckets().size()]; for (int i = 0; i < retVal.length; ++i) { retVal[i] = result.getBuckets().get(i).getRawId(); } req.returnValues().add(new Int64Array(retVal)); }
@SuppressWarnings({"UnusedDeclaration"}) public final void setFileReferencesToDownload(Request req) { log.log(LogLevel.DEBUG, () -> "Received method call '" + req.methodName() + "' with parameters : " + req.parameters()); Arrays.stream(req.parameters().get(0).asStringArray()) .map(FileReference::new) .forEach(fileReference -> downloader.downloadIfNeeded(new FileReferenceDownload(fileReference))); req.returnValues().add(new Int32Value(0)); }
public void addResult(Result result, Request req) { req.returnValues().add(new Int8Value((byte) result.getErrorType().ordinal())); req.returnValues().add(new StringValue(result.getErrorMessage())); }
public void RPC_getPartitionStates(Request req) { PartitionStateListResult result = provider.getPartitionStates(); addResult(result, req); int[] states = new int[result.getPartitionStates().size()]; String[] reasons = new String[result.getPartitionStates().size()]; for (int i = 0; i < states.length; ++i) { states[i] = result.getPartitionStates().get(i).getState().ordinal(); reasons[i] = result.getPartitionStates().get(i).getReason(); } req.returnValues().add(new Int32Array(states)); req.returnValues().add(new StringArray(reasons)); }
@Override public void invoke(Request request) { request.returnValues().add(new StringValue(getVersion().toString())); }
public void addRemoveResult(RemoveResult result, Request req) { addResult(result, req); req.returnValues().add(new Int8Value(result.wasFound() ? (byte)1 : (byte)0)); }
public void RPC_getBucketInfo(Request req) { BucketInfoResult result = provider.getBucketInfo(getBucket(req, 0)); addResult(result, req); req.returnValues().add(new Int32Value(result.getBucketInfo().getChecksum())); req.returnValues().add(new Int32Value(result.getBucketInfo().getDocumentCount())); req.returnValues().add(new Int32Value(result.getBucketInfo().getDocumentSize())); req.returnValues().add(new Int32Value(result.getBucketInfo().getEntryCount())); req.returnValues().add(new Int32Value(result.getBucketInfo().getUsedSize())); req.returnValues().add(new Int8Value(result.getBucketInfo().isReady() ? (byte)1 : (byte)0)); req.returnValues().add(new Int8Value(result.getBucketInfo().isActive() ? (byte)1 : (byte)0)); }
private void rpc_fetchIncremental(Request req) { int gencnt = req.parameters().get(0).asInt32(); int timeout = req.parameters().get(1).asInt32(); // for now, always make "full diff" from generation 0 req.returnValues().add(new Int32Value(0)); req.returnValues().add(new StringArray(new String[0])); if (gencnt == this.gencnt) { pendingFetch.add(new FetchMirror(req, timeout)); } else { dumpServices(req); } }
private void downloadFile(Request req) { FileReference fileReference = new FileReference(req.parameters().get(0).asString()); log.log(LogLevel.DEBUG, () -> "getFile() called for file reference '" + fileReference.value() + "'"); Optional<File> pathToFile = downloader.getFile(fileReference); try { if (pathToFile.isPresent()) { req.returnValues().add(new StringValue(pathToFile.get().getAbsolutePath())); log.log(LogLevel.DEBUG, () -> "File reference '" + fileReference.value() + "' available at " + pathToFile.get()); } else { log.log(LogLevel.INFO, "File reference '" + fileReference.value() + "' not found, returning error"); req.setError(fileReferenceDoesNotExists, "File reference '" + fileReference.value() + "' not found"); } } catch (Throwable e) { log.log(LogLevel.WARNING, "File reference '" + fileReference.value() + "' got exception: " + e.getMessage()); req.setError(fileReferenceInternalError, "File reference '" + fileReference.value() + "' removed"); } req.returnRequest(); }
public void RPC_update(Request req) { try { GrowableByteBuffer buffer = new GrowableByteBuffer(ByteBuffer.wrap(req.parameters().get(3).asData())); DocumentUpdate update = new DocumentUpdate(DocumentDeserializerFactory.createHead(docTypeManager, buffer)); UpdateResult result = provider.update(getBucket(req, 0), req.parameters().get(2).asInt64(), update); addResult(result, req); req.returnValues().add(new Int64Value(result.getExistingTimestamp())); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } }
public void RPC_get(Request req) { GetResult result = provider.get(getBucket(req, 0), getFieldSet(req, 2), new DocumentId(req.parameters().get(3).asString())); addResult(result, req); req.returnValues().add(new Int64Value(result.getLastModifiedTimestamp())); req.returnValues().add(new DataValue(serializeDocument(result.getDocument()))); }
public void returnRequest() { if (!conn.completeRequest(done)) { throw new IllegalStateException("Request already returned"); } if (noReply) { return; } if (!request.isError() && !method.checkReturnValues(request)) { request.setError(ErrorCode.WRONG_RETURN, "Return values in " + request + " does not match " + method); } if (request.isError()) { conn.postPacket(new ErrorPacket(0, replyKey, request.errorCode(), request.errorMessage())); } else { conn.postPacket(new ReplyPacket(0, replyKey, request.returnValues())); } } }
@SuppressWarnings({"UnusedDeclaration"}) public final void receiveFileEof(Request req) { log.log(LogLevel.DEBUG, () -> "Received method call '" + req.methodName() + "' with parameters : " + req.parameters()); FileReference reference = new FileReference(req.parameters().get(0).asString()); int sessionId = req.parameters().get(1).asInt32(); long xxhash = req.parameters().get(2).asInt64(); Session session = getSession(sessionId); int retval = verifySession(session, sessionId, reference); File file = session.close(xxhash); downloader.completedDownloading(reference, file); synchronized (sessions) { sessions.remove(sessionId); } req.returnValues().add(new Int32Value(retval)); }