use of org.apache.ignite.internal.binary.BinaryRawWriterEx in project ignite by apache.
the class PlatformAbstractTask method result.
/**
* {@inheritDoc}
*/
@Override
public ComputeJobResultPolicy result(ComputeJobResult res, List<ComputeJobResult> rcvd) {
assert rcvd.isEmpty() : "Should not cache result in Java for interop task";
lock.readLock().lock();
try {
assert !done;
PlatformAbstractJob job = res.getJob();
assert job.pointer() != 0;
Object res0bj = res.getData();
int plc;
if (res0bj == PlatformAbstractJob.LOC_JOB_RES)
// Processing local job execution result.
plc = ctx.gateway().computeTaskLocalJobResult(taskPtr, job.pointer());
else {
// Processing remote job execution result or exception.
try (PlatformMemory mem = ctx.memory().allocate()) {
PlatformOutputStream out = mem.output();
BinaryRawWriterEx writer = ctx.writer(out);
writer.writeLong(taskPtr);
writer.writeLong(job.pointer());
writer.writeUuid(res.getNode().id());
writer.writeBoolean(res.isCancelled());
IgniteException err = res.getException();
PlatformUtils.writeInvocationResult(writer, res0bj, err);
out.synchronize();
plc = ctx.gateway().computeTaskJobResult(mem.pointer());
}
}
ComputeJobResultPolicy plc0 = ComputeJobResultPolicy.fromOrdinal((byte) plc);
assert plc0 != null : plc;
return plc0;
} finally {
lock.readLock().unlock();
}
}
use of org.apache.ignite.internal.binary.BinaryRawWriterEx in project ignite by apache.
the class PlatformTransactions method processOutStream.
/**
* {@inheritDoc}
*/
@Override
public void processOutStream(int type, BinaryRawWriterEx writer) throws IgniteCheckedException {
switch(type) {
case OP_CACHE_CONFIG_PARAMETERS:
TransactionConfiguration txCfg = platformCtx.kernalContext().config().getTransactionConfiguration();
writer.writeInt(txCfg.getDefaultTxConcurrency().ordinal());
writer.writeInt(txCfg.getDefaultTxIsolation().ordinal());
writer.writeLong(txCfg.getDefaultTxTimeout());
writer.writeLong(txCfg.getTxTimeoutOnPartitionMapExchange());
break;
case OP_METRICS:
TransactionMetrics metrics = txs.metrics();
writer.writeTimestamp(new Timestamp(metrics.commitTime()));
writer.writeTimestamp(new Timestamp(metrics.rollbackTime()));
writer.writeInt(metrics.txCommits());
writer.writeInt(metrics.txRollbacks());
break;
case OP_LOCAL_ACTIVE_TX:
Collection<Transaction> activeTxs = txs.localActiveTransactions();
PlatformUtils.writeCollection(writer, activeTxs, new PlatformWriterClosure<Transaction>() {
@Override
public void write(BinaryRawWriterEx writer, Transaction tx) {
writer.writeLong(registerTx(tx));
writer.writeInt(tx.concurrency().ordinal());
writer.writeInt(tx.isolation().ordinal());
writer.writeLong(tx.timeout());
writer.writeString(tx.label());
}
});
break;
default:
super.processOutStream(type, writer);
}
}
use of org.apache.ignite.internal.binary.BinaryRawWriterEx in project ignite by apache.
the class PlatformFutureUtils method writeFutureError.
/**
* Write future error.
*
* @param ctx Context.
* @param futPtr Future pointer.
* @param err Error.
*/
private static void writeFutureError(final PlatformContext ctx, long futPtr, Throwable err) {
try (PlatformMemory mem = ctx.memory().allocate()) {
PlatformOutputStream out = mem.output();
BinaryRawWriterEx outWriter = ctx.writer(out);
PlatformUtils.writeError(err, outWriter);
PlatformUtils.writeErrorData(err, outWriter);
out.synchronize();
ctx.gateway().futureError(futPtr, mem.pointer());
}
}
use of org.apache.ignite.internal.binary.BinaryRawWriterEx in project ignite by apache.
the class PlatformFutureUtils method writeToWriter.
/**
* Write result to a custom writer
*
* @param obj Object to write.
* @param err Error to write.
* @param ctx Context.
* @param writer Writer.
* @param futPtr Future pointer.
* @return Value indicating whether custom write was performed. When false, default write will be used.
*/
private static boolean writeToWriter(Object obj, Throwable err, PlatformContext ctx, Writer writer, long futPtr) {
boolean canWrite = writer.canWrite(obj, err);
if (!canWrite)
return false;
try (PlatformMemory mem = ctx.memory().allocate()) {
PlatformOutputStream out = mem.output();
BinaryRawWriterEx outWriter = ctx.writer(out);
writer.write(outWriter, obj, err);
out.synchronize();
ctx.gateway().futureObjectResult(futPtr, mem.pointer());
}
return true;
}
use of org.apache.ignite.internal.binary.BinaryRawWriterEx in project ignite by apache.
the class PlatformFutureUtils method listen.
/**
* Listen future.
*
* @param ctx Context.
* @param listenable Listenable entry.
* @param futPtr Native future pointer.
* @param typ Expected return type.
* @param writer Optional writer.
*/
public static void listen(final PlatformContext ctx, PlatformListenable listenable, final long futPtr, final int typ, @Nullable final Writer writer, final PlatformTarget target) {
final PlatformCallbackGateway gate = ctx.gateway();
listenable.listen(new IgniteBiInClosure<Object, Throwable>() {
private static final long serialVersionUID = 0L;
@Override
public void apply(Object res, Throwable err) {
if (err instanceof Exception)
err = target.convertException((Exception) err);
if (writer != null && writeToWriter(res, err, ctx, writer, futPtr))
return;
if (err != null) {
writeFutureError(ctx, futPtr, err);
return;
}
try {
if (typ == TYP_OBJ) {
if (res == null)
gate.futureNullResult(futPtr);
else {
try (PlatformMemory mem = ctx.memory().allocate()) {
PlatformOutputStream out = mem.output();
BinaryRawWriterEx outWriter = ctx.writer(out);
outWriter.writeObjectDetached(res);
out.synchronize();
gate.futureObjectResult(futPtr, mem.pointer());
}
}
} else if (res == null)
gate.futureNullResult(futPtr);
else {
switch(typ) {
case TYP_BYTE:
gate.futureByteResult(futPtr, (byte) res);
break;
case TYP_BOOL:
gate.futureBoolResult(futPtr, (boolean) res ? 1 : 0);
break;
case TYP_SHORT:
gate.futureShortResult(futPtr, (short) res);
break;
case TYP_CHAR:
gate.futureCharResult(futPtr, (char) res);
break;
case TYP_INT:
gate.futureIntResult(futPtr, (int) res);
break;
case TYP_FLOAT:
gate.futureFloatResult(futPtr, Float.floatToIntBits((float) res));
break;
case TYP_LONG:
gate.futureLongResult(futPtr, (long) res);
break;
case TYP_DOUBLE:
gate.futureDoubleResult(futPtr, Double.doubleToLongBits((double) res));
break;
default:
assert false : "Should not reach this: " + typ;
}
}
} catch (Throwable t) {
writeFutureError(ctx, futPtr, t);
if (t instanceof Error)
throw t;
}
}
});
}
Aggregations