@Override public boolean nextFrame(IFrame frame) throws HyracksDataException { if (readPtr >= size) { return false; } frame.reset(); int readLength = ioManager.syncRead(handle, readPtr, frame.getBuffer()); if (readLength <= 0) { throw new HyracksDataException("Premature end of file"); } readPtr += readLength; frame.ensureFrameSize(frame.getMinSize() * FrameHelper.deserializeNumOfMinFrame(frame.getBuffer())); if (frame.getBuffer().hasRemaining()) { if (readPtr < size) { readLength = ioManager.syncRead(handle, readPtr, frame.getBuffer()); if (readLength < 0) { throw new HyracksDataException("Premature end of file"); } readPtr += readLength; } if (frame.getBuffer().hasRemaining()) { // file is vanished. FrameHelper.clearRemainingFrame(frame.getBuffer(), frame.getBuffer().position()); } } frame.getBuffer().flip(); return true; }
private void appendMessage(ByteBuffer message) { int messageLength = message.limit() - message.position(); System.arraycopy(message.array(), message.position(), array, tupleDataEndOffset, messageLength); tupleDataEndOffset += messageLength; IntSerDeUtils.putInt(getBuffer().array(), FrameHelper.getTupleCountOffset(frame.getFrameSize()) - 4 * (tupleCount + 1), tupleDataEndOffset); ++tupleCount; IntSerDeUtils.putInt(getBuffer().array(), FrameHelper.getTupleCountOffset(frame.getFrameSize()), tupleCount); }
protected boolean canHoldNewTuple(int fieldCount, int dataLength) throws HyracksDataException { if (hasEnoughSpace(fieldCount, dataLength)) { return true; } if (tupleCount == 0) { frame.ensureFrameSize(FrameHelper.calcAlignedFrameSizeToStore(fieldCount, dataLength, frame.getMinSize())); reset(frame.getBuffer(), true); return true; } return false; }
@Override public Object[] readData() throws HyracksDataException { while (true) { if (eos) { return null; } if (!first && !frameDeserializer.done()) { return frameDeserializer.deserializeRecord(); } frame.reset(); if (!frameReader.nextFrame(frame)) { eos = true; } else { frameDeserializer.reset(frame.getBuffer()); } first = false; } } }
@Override public ByteBuffer getBuffer() { return frame.getBuffer(); }
if (frameId != curFrameId) { int pos = frameBuffer.position(); curFrame.ensureFrameSize(frameBuffer.capacity()); FrameUtils.copyAndFlip(frameBuffer, curFrame.getBuffer()); frameBuffer.position(pos); curFrameId = frameId;
rPartbuff.reset(); while (bReader.nextFrame(rPartbuff)) { ByteBuffer copyBuffer = bufferManager.acquireFrame(rPartbuff.getFrameSize()); copyBuffer = bufferManager.acquireFrame(rPartbuff.getFrameSize()); FrameUtils.copyAndFlip(rPartbuff.getBuffer(), copyBuffer); joiner.build(copyBuffer); rPartbuff.reset(); rPartbuff.reset(); try { while (pReader.nextFrame(rPartbuff)) { joiner.join(rPartbuff.getBuffer(), writer); rPartbuff.reset();
@Override public void open() throws HyracksDataException { frameReader.open(); frame.reset(); eos = false; first = true; }
public static byte getMessageType(IFrame message) throws HyracksDataException { switch (message.getBuffer().array()[0]) { case NULL_FEED_MESSAGE: return NULL_FEED_MESSAGE; case ACK_REQ_FEED_MESSAGE: return ACK_REQ_FEED_MESSAGE; case MARKER_MESSAGE: return MARKER_MESSAGE; default: throw new HyracksDataException("Unknown message type"); } }
@Override public void nextFrame(ByteBuffer buffer) throws HyracksDataException { inFrameAccessor.reset(buffer); int nTuples = inFrameAccessor.getTupleCount(); if (nTuples != 0) { for (int i = 0; i < nTuples; ++i) { if (first) { tupleBuilder.reset(); for (int j = 0; j < groupFields.length; j++) { tupleBuilder.addField(inFrameAccessor, i, groupFields[j]); } aggregator.init(tupleBuilder, inFrameAccessor, i, aggregateState); first = false; } else { if (i == 0) { switchGroupIfRequired(copyFrameAccessor, copyFrameAccessor.getTupleCount() - 1, inFrameAccessor, i); } else { switchGroupIfRequired(inFrameAccessor, i - 1, inFrameAccessor, i); } } } copyFrame.ensureFrameSize(buffer.capacity()); FrameUtils.copyAndFlip(buffer, copyFrame.getBuffer()); copyFrameAccessor.reset(copyFrame.getBuffer()); } }
@Override protected boolean canHoldNewTuple(int fieldCount, int dataLength) throws HyracksDataException { if (hasEnoughSpace(fieldCount + 1, dataLength + NULL_MESSAGE_SIZE)) { return true; } if (tupleCount == 0) { frame.ensureFrameSize(FrameHelper.calcAlignedFrameSizeToStore(fieldCount + 1, dataLength + NULL_MESSAGE_SIZE, frame.getMinSize())); reset(frame.getBuffer(), true); return true; } return false; }
@Override public void nextFrame(ByteBuffer buffer) throws HyracksDataException { tAccess.reset(buffer); int nTuple = tAccess.getTupleCount(); for (int t = 0; t < nTuple; t++) { tRef.reset(tAccess, t); try { formLogRecord(buffer, t); logMgr.log(logRecord); if (!isSink) { appendTupleToFrame(t); } } catch (ACIDException e) { throw HyracksDataException.create(e); } } IFrame message = TaskUtil.get(HyracksConstants.KEY_MESSAGE, ctx); if (message != null && MessagingFrameTupleAppender.getMessageType(message) == MessagingFrameTupleAppender.MARKER_MESSAGE) { try { formMarkerLogRecords(message.getBuffer()); logMgr.log(logRecord); } catch (ACIDException e) { throw HyracksDataException.create(e); } message.reset(); message.getBuffer().put(MessagingFrameTupleAppender.NULL_FEED_MESSAGE); message.getBuffer().flip(); } }
@Override public boolean nextFrame(IFrame outFrame) throws HyracksDataException { IFrameReader currentSender; while (!senders.isEmpty()) { // process the sender at the beginning of the sequence currentSender = senders.getFirst(); outFrame.reset(); if (currentSender.nextFrame(outFrame)) { return true; } else { // done with the current sender, close it, remove it from the Q and process the next one in sequence currentSender.close(); senders.removeFirst(); } } // done with all senders return false; }
@Override public boolean nextFrame(IFrame frame) throws HyracksDataException { int index = channelReader.findNextSender(); if (index < 0) { return false; } frame.reset(); ByteBuffer srcFrame = channelReader.getNextBuffer(index); int nBlocks = FrameHelper.deserializeNumOfMinFrame(srcFrame); frame.ensureFrameSize(frame.getMinSize() * nBlocks); FrameUtils.copyWholeFrame(srcFrame, frame.getBuffer()); channelReader.recycleBuffer(index, srcFrame); for (int i = 1; i < nBlocks; ++i) { srcFrame = channelReader.getNextBuffer(index); frame.getBuffer().put(srcFrame); channelReader.recycleBuffer(index, srcFrame); } if (frame.getBuffer().hasRemaining()) { // bigger frame FrameHelper.clearRemainingFrame(frame.getBuffer(), frame.getBuffer().position()); } frame.getBuffer().flip(); return true; }
/** * Gets the next frame of the current result file. A caller should make sure that initResultRead() is called first. */ public ByteBuffer getNextFrame() throws HyracksDataException { ByteBuffer returnedBuffer = null; if (isInMemoryOpMode) { // In-memory mode for an intermediate search result returnedBuffer = buffers.get(currentReaderBufIdx); currentReaderBufIdx++; } else if (searchResultReader != null && searchResultReader.nextFrame(ioBufferFrame)) { // Disk-based mode for an intermediate search result returnedBuffer = ioBufferFrame.getBuffer(); } return returnedBuffer; }
writeBuffer.ensureFrameSize(buffer.capacity()); if (flushedPartialTuples) { flushPartialFrame(); } else { FrameUtils.copyAndFlip(buffer, writeBuffer.getBuffer()); FrameUtils.flushFrame(writeBuffer.getBuffer(), writer);
ByteBuffer buffer = message.getBuffer(); int messageSize = buffer.limit() - buffer.position(); if (hasEnoughSpace(0, messageSize)) { frame.ensureFrameSize(FrameHelper.calcAlignedFrameSizeToStore(1, messageSize, frame.getMinSize())); reset(frame.getBuffer(), true);
protected void reset(ByteBuffer buffer, boolean clear) { array = buffer.array(); if (clear) { IntSerDeUtils.putInt(array, FrameHelper.getTupleCountOffset(frame.getFrameSize()), 0); tupleCount = 0; tupleDataEndOffset = FrameConstants.TUPLE_START_OFFSET; } else { tupleCount = IntSerDeUtils.getInt(array, FrameHelper.getTupleCountOffset(frame.getFrameSize())); tupleDataEndOffset = tupleCount == 0 ? FrameConstants.TUPLE_START_OFFSET : IntSerDeUtils.getInt(array, FrameHelper.getTupleCountOffset(frame.getFrameSize()) - tupleCount * FrameConstants.SIZE_LEN); } }