protected PhastPackingStage(GraphManager graphManager, Pipe<PhastCodecSchema> input1, Pipe<RawDataSchema> input2, Pipe<RawDataSchema> output) { super(graphManager, join(input1,input2), output); this.input1 = input1; this.input2 = input2; this.output = output; //Does not need batching to be done by producer or consumer this.supportsBatchedPublish = false; this.supportsBatchedRelease = false; }
private int writePackedFields(int localSum, Pipe<PhastCodecSchema> localInput1, DataOutputBlobWriter<RawDataSchema> localWriter, int msgIdx, int localFieldCount) { int i = localFieldCount; //System.err.println("field count "+i); while (--i >= 0) { packField(localWriter, Pipe.takeLong(localInput1)); } localSum += localFieldCount; return localSum; }
@Override public void run() { pump(input1, input2, output, lengthLookup, writer, input2Reader); }
Pipe<RawDataSchema> encodedValuesToValidate = new Pipe<RawDataSchema>(new PipeConfig<RawDataSchema>(RawDataSchema.instance, 100, 4000)); PhastPackingStage stage = new PhastPackingStage(gm, testValuesToEncode, testValuesToEncode2, encodedValuesToValidate); stage.startup(); stage.run(); Pipe.publishAllBatchedWrites(encodedValuesToValidate);
private void combineContentForSingleMessage(Pipe<PhastCodecSchema> localInput1, Pipe<RawDataSchema> localInput2, Pipe<RawDataSchema> localOutput, short[] lookup, DataOutputBlobWriter<RawDataSchema> localWriter, int size, int maxPerMsg, int outputMaxLen, boolean holdingReleaseReadLock, DataOutputBlobWriter<RawDataSchema> writer) { int localSum = 0; int avail = 0; while ( ( (avail = (outputMaxLen - writer.length())) >= maxPerMsg) && Pipe.hasContentToRead(localInput1)) { if (holdingReleaseReadLock) { Pipe.releaseReadLock(localInput1); holdingReleaseReadLock = false; } int msgIdx = Pipe.takeMsgIdx(localInput1); if (PhastCodecSchema.MSG_BLOBCHUNK_1000 != msgIdx) { localSum = writePackedFields(localSum, localInput1, localWriter, msgIdx, (int) lookup[msgIdx]); } else { localSum = writeByteData(localSum, localInput2, avail); } Pipe.confirmLowLevelRead(localInput1, Pipe.sizeOf(localInput1, msgIdx)); holdingReleaseReadLock = true; } assert(holdingReleaseReadLock); totalLongs += localSum; }
LongDataGenStage genStage = new LongDataGenStage(gm, new Pipe[]{inputPipe1, inputPipe2}, iterations); PhastPackingStage encodeStage1 = new PhastPackingStage(gm, inputPipe1, inputPipe1B, packedDataPipe1); PhastPackingStage encodeStage2 = new PhastPackingStage(gm, inputPipe2, inputPipe2B, packedDataPipe2);
combineContentForSingleMessage( localInput1, localInput2, localOutput, lookup, localWriter, size, maxBytesPerMessage, localOutput.maxVarLen,
PhastPackingStage packStage = new PhastPackingStage(gm, inputPipe, inputPipe2, packedDataPipe); PhastUnpackingStage unPackStage = new PhastUnpackingStage(gm, packedDataPipe, outputPipe1, outputPipe2 ); PipeCleanerStage<PhastCodecSchema> dumpStage1 = new PipeCleanerStage<PhastCodecSchema>(gm, outputPipe1);