/** * @param addr Write address. * @param type Object type. * @param valBytes Value bytes array. * @param valOff Value bytes array offset. * @return Offset shift compared to initial address. */ public static int putValue(long addr, byte type, byte[] valBytes, int valOff) { int off = 0; PageUtils.putInt(addr, off, valBytes.length); off += 4; PageUtils.putByte(addr, off, type); off++; PageUtils.putBytes(addr, off, valBytes, valOff); off += valBytes.length - valOff; return off; }
/** * @param pageAddr Page address. */ public byte getPartitionState(long pageAddr) { return PageUtils.getByte(pageAddr, PARTITION_STATE_OFF); }
/** {@inheritDoc} */ @Override public void store(long dstPageAddr, int dstIdx, BPlusIO<MetastorageSearchRow> srcIo, long srcPageAddr, int srcIdx) { int srcOff = srcIo.offset(srcIdx); int dstOff = offset(dstIdx); long link = ((DataLinkIO)srcIo).getLink(srcPageAddr, srcIdx); short len = ((DataLinkIO)srcIo).getKeySize(srcPageAddr, srcIdx); byte[] payload = PageUtils.getBytes(srcPageAddr, srcOff + 10, len); PageUtils.putLong(dstPageAddr, dstOff, link); PageUtils.putShort(dstPageAddr, dstOff + 8, len); PageUtils.putBytes(dstPageAddr, dstOff + 10, payload); }
/** {@inheritDoc} */ @Override public final void store(long dstPageAddr, int dstIdx, BPlusIO<GridH2SearchRow> srcIo, long srcPageAddr, int srcIdx) { int srcOff = srcIo.offset(srcIdx); byte[] payload = PageUtils.getBytes(srcPageAddr, srcOff, payloadSize); long link = PageUtils.getLong(srcPageAddr, srcOff + payloadSize); assert link != 0; int dstOff = offset(dstIdx); PageUtils.putBytes(dstPageAddr, dstOff, payload); H2IOUtils.store(dstPageAddr, dstOff + payloadSize, srcIo, srcPageAddr, srcIdx, storeMvccInfo()); }
/** {@inheritDoc} */ @Override public void storeByOffset(long pageAddr, int off, MetastorageSearchRow row) { assert row.link() != 0; PageUtils.putLong(pageAddr, off, row.link()); byte[] bytes = row.key().getBytes(); assert bytes.length <= MAX_KEY_LEN; PageUtils.putShort(pageAddr, off + 8, (short)bytes.length); PageUtils.putBytes(pageAddr, off + 10, bytes); }
/** {@inheritDoc} */ @Override protected void writeRowData( long pageAddr, int dataOff, int payloadSize, MetastorageDataRow row, boolean newRow ) throws IgniteCheckedException { long addr = pageAddr + dataOff; if (newRow) PageUtils.putShort(addr, 0, (short)payloadSize); PageUtils.putInt(addr, 2, row.value().length); PageUtils.putBytes(addr, 6, row.value()); }
byte protoVer = checkProtocolVersion(PageUtils.getByte(pageAddr, 0), allowNull); int topVer = PageUtils.getInt(pageAddr, 1); int nodeOrderDrId = PageUtils.getInt(pageAddr, 5); long order = PageUtils.getLong(pageAddr, 9); int topVer = PageUtils.getInt(pageAddr, 1); int nodeOrderDrId = PageUtils.getInt(pageAddr, 5); long order = PageUtils.getLong(pageAddr, 9); int conflictTop = PageUtils.getInt(pageAddr, 17); int conflictNodeOrderDrId = PageUtils.getInt(pageAddr, 21); long conflictOrder = PageUtils.getLong(pageAddr, 25);
/** * Returns MVCC operation counter value. * * @param pageAddr Page address. * @param dataOff Data offset. * @return MVCC counter value. */ public int mvccOperationCounter(long pageAddr, int dataOff) { long addr = pageAddr + dataOff; return PageUtils.getInt(addr, 16); }
/** * @param pageAddr Page address. * @return Next page ID. */ public long getNextId(long pageAddr) { return PageUtils.getLong(pageAddr, NEXT_PAGE_ID_OFF); }
/** * @param pageAddr Page address. * @param last Last. */ private void setLastFlag(long pageAddr, boolean last) { PageUtils.putByte(pageAddr, LAST_FLAG_OFF, last ? LAST_FLAG : ~LAST_FLAG); }
/** * @param addr Write address. * @param ver Version to write. * @param allowNull Is {@code null} version allowed. */ public static void write(long addr, GridCacheVersion ver, boolean allowNull) { if (ver == null) { if (allowNull) PageUtils.putByte(addr, 0, NULL_PROTO_VER); else throw new IllegalStateException("Cache version is null"); } else if (ver instanceof GridCacheVersionEx) { byte protoVer = 2; // Version of serialization protocol. PageUtils.putByte(addr, 0, protoVer); PageUtils.putInt(addr, 1, ver.topologyVersion()); PageUtils.putInt(addr, 5, ver.nodeOrderAndDrIdRaw()); PageUtils.putLong(addr, 9, ver.order()); PageUtils.putInt(addr, 17, ver.conflictVersion().topologyVersion()); PageUtils.putInt(addr, 21, ver.conflictVersion().nodeOrderAndDrIdRaw()); PageUtils.putLong(addr, 25, ver.conflictVersion().order()); } else { byte protoVer = 1; // Version of serialization protocol. PageUtils.putByte(addr, 0, protoVer); PageUtils.putInt(addr, 1, ver.topologyVersion()); PageUtils.putInt(addr, 5, ver.nodeOrderAndDrIdRaw()); PageUtils.putLong(addr, 9, ver.order()); } }
/** * @param pageAddr Page address. * @param dataOff Entry data offset. * @param pageSize Page size. */ private void setFirstEntryOffset(long pageAddr, int dataOff, int pageSize) { assert dataOff >= ITEMS_OFF + ITEM_SIZE && dataOff <= pageSize : dataOff; PageUtils.putShort(pageAddr, FIRST_ENTRY_OFF, (short)dataOff); }
/** * @param pageAddr Page address. * @param pos Position in page. * @param bytes Bytes. */ private static void putBytes(long pageAddr, int pos, byte[] bytes) { PageUtils.putBytes(pageAddr, pos, bytes); }
/** * @param pageAddr Page address. * @param off Offset. * @return Full size in page. */ public int fullSize(long pageAddr, int off) { int type = PageUtils.getByte(pageAddr, off); if (type == Value.NULL) return 1; if (size > 0) return size + 1; else return PageUtils.getShort(pageAddr, off + 1) + 3; }
/** * @param pageAddr Page address. * @param off Offset. * @param v Value to compare. * @param type Highest value type. * @return Compare result ({@code Integer.MIN_VALUE} means unsupported operation. */ private int compareAsUUID(long pageAddr, int off, Value v, int type) { // only compatible types are supported now. if(PageUtils.getByte(pageAddr, off) == type) { assert type == Value.UUID; ValueUuid uuid = (ValueUuid)v.convertTo(Value.UUID); long long1 = PageUtils.getLong(pageAddr, off + 1); int c = Long.compare(long1, uuid.getHigh()); if(c != 0) return fixSort(c, sortType()); long1 = PageUtils.getLong(pageAddr, off + 9); c = Long.compare(long1, uuid.getLow()); return fixSort(c, sortType()); } return Integer.MIN_VALUE; }