Search in sources :

Example 21 with WALPointer

use of org.apache.ignite.internal.processors.cache.persistence.wal.WALPointer in project ignite by apache.

the class RecordDataV1Serializer method plainSize.

/**
 * @param record Record to measure.
 * @return Plain(without encryption) size of serialized rec in bytes.
 * @throws IgniteCheckedException If failed.
 */
int plainSize(WALRecord record) throws IgniteCheckedException {
    switch(record.type()) {
        case PAGE_RECORD:
            assert record instanceof PageSnapshot;
            PageSnapshot pageRec = (PageSnapshot) record;
            return pageRec.pageDataSize() + 12;
        case CHECKPOINT_RECORD:
            CheckpointRecord cpRec = (CheckpointRecord) record;
            int cacheStatesSize = cacheStatesSize(cpRec.cacheGroupStates());
            WALPointer walPtr = cpRec.checkpointMark();
            return 18 + cacheStatesSize + (walPtr == null ? 0 : 16);
        case META_PAGE_INIT:
            return /*cache ID*/
            4 + /*page ID*/
            8 + /*ioType*/
            2 + /*ioVer*/
            2 + /*tree root*/
            8 + /*reuse root*/
            8;
        case INDEX_META_PAGE_DELTA_RECORD:
            return /*cache ID*/
            4 + /*page ID*/
            8 + /*encrypt page index*/
            4 + /*encrypt pages count*/
            4;
        case PARTITION_META_PAGE_UPDATE_COUNTERS:
            return /*cache ID*/
            4 + /*page ID*/
            8 + /*upd cntr*/
            8 + /*rmv id*/
            8 + /*part size*/
            4 + /*counters page id*/
            8 + /*state*/
            1 + /*allocatedIdxCandidate*/
            4;
        case PARTITION_META_PAGE_UPDATE_COUNTERS_V2:
            return /*cache ID*/
            4 + /*page ID*/
            8 + /*upd cntr*/
            8 + /*rmv id*/
            8 + /*part size*/
            4 + /*counters page id*/
            8 + /*state*/
            1 + /*allocatedIdxCandidate*/
            4 + /*link*/
            8;
        case PARTITION_META_PAGE_DELTA_RECORD_V3:
            return /*cache ID*/
            4 + /*page ID*/
            8 + /*upd cntr*/
            8 + /*rmv id*/
            8 + /*part size*/
            4 + /*counters page id*/
            8 + /*state*/
            1 + /*allocatedIdxCandidate*/
            4 + /*link*/
            8 + /*encrypt page index*/
            4 + /*encrypt pages count*/
            4;
        case MEMORY_RECOVERY:
            return 8;
        case PARTITION_DESTROY:
            return /*cacheId*/
            4 + /*partId*/
            4;
        case DATA_RECORD_V2:
            DataRecord dataRec = (DataRecord) record;
            return 4 + dataSize(dataRec);
        case METASTORE_DATA_RECORD:
            MetastoreDataRecord metastoreDataRec = (MetastoreDataRecord) record;
            return 4 + metastoreDataRec.key().getBytes().length + 4 + (metastoreDataRec.value() != null ? metastoreDataRec.value().length : 0);
        case HEADER_RECORD:
            return HEADER_RECORD_DATA_SIZE;
        case DATA_PAGE_INSERT_RECORD:
            DataPageInsertRecord diRec = (DataPageInsertRecord) record;
            return 4 + 8 + 2 + diRec.payload().length;
        case DATA_PAGE_UPDATE_RECORD:
            DataPageUpdateRecord uRec = (DataPageUpdateRecord) record;
            return 4 + 8 + 2 + 4 + uRec.payload().length;
        case DATA_PAGE_INSERT_FRAGMENT_RECORD:
            final DataPageInsertFragmentRecord difRec = (DataPageInsertFragmentRecord) record;
            return 4 + 8 + 8 + 4 + difRec.payloadSize();
        case DATA_PAGE_REMOVE_RECORD:
            return 4 + 8 + 1;
        case DATA_PAGE_SET_FREE_LIST_PAGE:
            return 4 + 8 + 8;
        case MVCC_DATA_PAGE_MARK_UPDATED_RECORD:
            return 4 + 8 + 4 + 8 + 8 + 4;
        case MVCC_DATA_PAGE_TX_STATE_HINT_UPDATED_RECORD:
            return 4 + 8 + 4 + 1;
        case MVCC_DATA_PAGE_NEW_TX_STATE_HINT_UPDATED_RECORD:
            return 4 + 8 + 4 + 1;
        case INIT_NEW_PAGE_RECORD:
            return 4 + 8 + 2 + 2 + 8;
        case BTREE_META_PAGE_INIT_ROOT:
            return 4 + 8 + 8;
        case BTREE_META_PAGE_INIT_ROOT2:
            return 4 + 8 + 8 + 2;
        case BTREE_META_PAGE_INIT_ROOT_V3:
            return 4 + 8 + 8 + 2 + 8 + IgniteProductVersion.SIZE_IN_BYTES;
        case BTREE_META_PAGE_ADD_ROOT:
            return 4 + 8 + 8;
        case BTREE_META_PAGE_CUT_ROOT:
            return 4 + 8;
        case BTREE_INIT_NEW_ROOT:
            NewRootInitRecord<?> riRec = (NewRootInitRecord<?>) record;
            return 4 + 8 + 8 + 2 + 2 + 8 + 8 + riRec.io().getItemSize();
        case BTREE_PAGE_RECYCLE:
            return 4 + 8 + 8;
        case BTREE_PAGE_INSERT:
            InsertRecord<?> inRec = (InsertRecord<?>) record;
            return 4 + 8 + 2 + 2 + 2 + 8 + inRec.io().getItemSize();
        case BTREE_FIX_LEFTMOST_CHILD:
            return 4 + 8 + 8;
        case BTREE_FIX_COUNT:
            return 4 + 8 + 2;
        case BTREE_PAGE_REPLACE:
            ReplaceRecord<?> rRec = (ReplaceRecord<?>) record;
            return 4 + 8 + 2 + 2 + 2 + rRec.io().getItemSize();
        case BTREE_PAGE_REMOVE:
            return 4 + 8 + 2 + 2;
        case BTREE_PAGE_INNER_REPLACE:
            return 4 + 8 + 2 + 8 + 2 + 8;
        case BTREE_FORWARD_PAGE_SPLIT:
            return 4 + 8 + 8 + 2 + 2 + 8 + 2 + 2;
        case BTREE_EXISTING_PAGE_SPLIT:
            return 4 + 8 + 2 + 8;
        case BTREE_PAGE_MERGE:
            return 4 + 8 + 8 + 2 + 8 + 1;
        case BTREE_FIX_REMOVE_ID:
            return 4 + 8 + 8;
        case PAGES_LIST_SET_NEXT:
            return 4 + 8 + 8;
        case PAGES_LIST_SET_PREVIOUS:
            return 4 + 8 + 8;
        case PAGES_LIST_INIT_NEW_PAGE:
            return 4 + 8 + 4 + 4 + 8 + 8 + 8;
        case PAGES_LIST_ADD_PAGE:
            return 4 + 8 + 8;
        case PAGES_LIST_REMOVE_PAGE:
            return 4 + 8 + 8;
        case TRACKING_PAGE_DELTA:
            return 4 + 8 + 8 + 8 + 8;
        case META_PAGE_UPDATE_LAST_SUCCESSFUL_SNAPSHOT_ID:
            return 4 + 8 + 8 + 8;
        case META_PAGE_UPDATE_LAST_SUCCESSFUL_FULL_SNAPSHOT_ID:
            return 4 + 8 + 8;
        case META_PAGE_UPDATE_NEXT_SNAPSHOT_ID:
            return 4 + 8 + 8;
        case META_PAGE_UPDATE_LAST_ALLOCATED_INDEX:
            return 4 + 8 + 4;
        case PART_META_UPDATE_STATE:
            return /*cacheId*/
            4 + /*partId*/
            4 + /*State*/
            1 + /*Update Counter*/
            8;
        case PAGE_LIST_META_RESET_COUNT_RECORD:
            return /*cacheId*/
            4 + /*pageId*/
            8;
        case ROTATED_ID_PART_RECORD:
            return 4 + 8 + 1;
        case SWITCH_SEGMENT_RECORD:
            return 0;
        case TX_RECORD:
            return txRecordSerializer.size((TxRecord) record);
        case MASTER_KEY_CHANGE_RECORD_V2:
            return ((MasterKeyChangeRecordV2) record).dataSize();
        case REENCRYPTION_START_RECORD:
            return ((ReencryptionStartRecord) record).dataSize();
        case INDEX_ROOT_PAGE_RENAME_RECORD:
            return ((IndexRenameRootPageRecord) record).dataSize();
        case PARTITION_CLEARING_START_RECORD:
            return 4 + 4 + 8;
        default:
            throw new UnsupportedOperationException("Type: " + record.type());
    }
}
Also used : DataPageInsertFragmentRecord(org.apache.ignite.internal.pagemem.wal.record.delta.DataPageInsertFragmentRecord) NewRootInitRecord(org.apache.ignite.internal.pagemem.wal.record.delta.NewRootInitRecord) DataPageInsertRecord(org.apache.ignite.internal.pagemem.wal.record.delta.DataPageInsertRecord) InsertRecord(org.apache.ignite.internal.pagemem.wal.record.delta.InsertRecord) DataPageUpdateRecord(org.apache.ignite.internal.pagemem.wal.record.delta.DataPageUpdateRecord) CheckpointRecord(org.apache.ignite.internal.pagemem.wal.record.CheckpointRecord) MasterKeyChangeRecordV2(org.apache.ignite.internal.pagemem.wal.record.MasterKeyChangeRecordV2) MetastoreDataRecord(org.apache.ignite.internal.pagemem.wal.record.MetastoreDataRecord) MetaPageUpdateIndexDataRecord(org.apache.ignite.internal.pagemem.wal.record.delta.MetaPageUpdateIndexDataRecord) DataRecord(org.apache.ignite.internal.pagemem.wal.record.DataRecord) MetastoreDataRecord(org.apache.ignite.internal.pagemem.wal.record.MetastoreDataRecord) MetaPageUpdatePartitionDataRecord(org.apache.ignite.internal.pagemem.wal.record.delta.MetaPageUpdatePartitionDataRecord) DataPageInsertRecord(org.apache.ignite.internal.pagemem.wal.record.delta.DataPageInsertRecord) ReencryptionStartRecord(org.apache.ignite.internal.pagemem.wal.record.ReencryptionStartRecord) WALPointer(org.apache.ignite.internal.processors.cache.persistence.wal.WALPointer) ReplaceRecord(org.apache.ignite.internal.pagemem.wal.record.delta.ReplaceRecord) InnerReplaceRecord(org.apache.ignite.internal.pagemem.wal.record.delta.InnerReplaceRecord) IndexRenameRootPageRecord(org.apache.ignite.internal.pagemem.wal.record.IndexRenameRootPageRecord) PageSnapshot(org.apache.ignite.internal.pagemem.wal.record.PageSnapshot)

Example 22 with WALPointer

use of org.apache.ignite.internal.processors.cache.persistence.wal.WALPointer in project ignite by apache.

the class RecordDataV1Serializer method readPlainRecord.

/**
 * Reads {@code WalRecord} of {@code type} from input.
 * Input should be plain(not encrypted).
 *
 * @param type Record type.
 * @param in Input
 * @param encrypted Record was encrypted.
 * @param recordSize Record size.
 * @return Deserialized record.
 * @throws IOException If failed.
 * @throws IgniteCheckedException If failed.
 */
WALRecord readPlainRecord(RecordType type, ByteBufferBackedDataInput in, boolean encrypted, int recordSize) throws IOException, IgniteCheckedException {
    WALRecord res;
    switch(type) {
        case PAGE_RECORD:
            byte[] arr = new byte[pageSize];
            int cacheId = in.readInt();
            long pageId = in.readLong();
            in.readFully(arr);
            res = new PageSnapshot(new FullPageId(pageId, cacheId), arr, encrypted ? realPageSize : pageSize);
            break;
        case CHECKPOINT_RECORD:
            long msb = in.readLong();
            long lsb = in.readLong();
            boolean hasPtr = in.readByte() != 0;
            long idx = hasPtr ? in.readLong() : 0;
            int off = hasPtr ? in.readInt() : 0;
            int len = hasPtr ? in.readInt() : 0;
            Map<Integer, CacheState> states = readPartitionStates(in);
            boolean end = in.readByte() != 0;
            WALPointer walPtr = hasPtr ? new WALPointer(idx, off, len) : null;
            CheckpointRecord cpRec = new CheckpointRecord(new UUID(msb, lsb), walPtr, end);
            cpRec.cacheGroupStates(states);
            res = cpRec;
            break;
        case META_PAGE_INIT:
            cacheId = in.readInt();
            pageId = in.readLong();
            int ioType = in.readUnsignedShort();
            int ioVer = in.readUnsignedShort();
            long treeRoot = in.readLong();
            long reuseListRoot = in.readLong();
            res = new MetaPageInitRecord(cacheId, pageId, ioType, ioVer, treeRoot, reuseListRoot, log);
            break;
        case INDEX_META_PAGE_DELTA_RECORD:
            res = new MetaPageUpdateIndexDataRecord(in);
            break;
        case PARTITION_META_PAGE_UPDATE_COUNTERS:
            res = new MetaPageUpdatePartitionDataRecord(in);
            break;
        case PARTITION_META_PAGE_UPDATE_COUNTERS_V2:
            res = new MetaPageUpdatePartitionDataRecordV2(in);
            break;
        case PARTITION_META_PAGE_DELTA_RECORD_V3:
            res = new MetaPageUpdatePartitionDataRecordV3(in);
            break;
        case MEMORY_RECOVERY:
            long ts = in.readLong();
            res = new MemoryRecoveryRecord(ts);
            break;
        case PARTITION_DESTROY:
            cacheId = in.readInt();
            int partId = in.readInt();
            res = new PartitionDestroyRecord(cacheId, partId);
            break;
        case DATA_RECORD:
        case DATA_RECORD_V2:
            int entryCnt = in.readInt();
            if (entryCnt == 1)
                res = new DataRecord(readPlainDataEntry(in, type), 0L);
            else {
                List<DataEntry> entries = new ArrayList<>(entryCnt);
                for (int i = 0; i < entryCnt; i++) entries.add(readPlainDataEntry(in, type));
                res = new DataRecord(entries, 0L);
            }
            break;
        case ENCRYPTED_DATA_RECORD:
        case ENCRYPTED_DATA_RECORD_V2:
        case ENCRYPTED_DATA_RECORD_V3:
            entryCnt = in.readInt();
            if (entryCnt == 1)
                res = new DataRecord(readEncryptedDataEntry(in, type), 0L);
            else {
                List<DataEntry> entries = new ArrayList<>(entryCnt);
                for (int i = 0; i < entryCnt; i++) entries.add(readEncryptedDataEntry(in, type));
                res = new DataRecord(entries, 0L);
            }
            break;
        case METASTORE_DATA_RECORD:
            int strLen = in.readInt();
            byte[] strBytes = new byte[strLen];
            in.readFully(strBytes);
            String key = new String(strBytes);
            int valLen = in.readInt();
            assert valLen >= 0;
            byte[] val;
            if (valLen > 0) {
                val = new byte[valLen];
                in.readFully(val);
            } else
                val = null;
            return new MetastoreDataRecord(key, val);
        case HEADER_RECORD:
            long magic = in.readLong();
            if (magic != HeaderRecord.REGULAR_MAGIC && magic != HeaderRecord.COMPACTED_MAGIC)
                throw new EOFException("Magic is corrupted [actual=" + U.hexLong(magic) + ']');
            int ver = in.readInt();
            res = new HeaderRecord(ver);
            break;
        case DATA_PAGE_INSERT_RECORD:
            {
                cacheId = in.readInt();
                pageId = in.readLong();
                int size = in.readUnsignedShort();
                in.ensure(size);
                byte[] payload = new byte[size];
                in.readFully(payload);
                res = new DataPageInsertRecord(cacheId, pageId, payload);
                break;
            }
        case DATA_PAGE_UPDATE_RECORD:
            {
                cacheId = in.readInt();
                pageId = in.readLong();
                int itemId = in.readInt();
                int size = in.readUnsignedShort();
                in.ensure(size);
                byte[] payload = new byte[size];
                in.readFully(payload);
                res = new DataPageUpdateRecord(cacheId, pageId, itemId, payload);
                break;
            }
        case DATA_PAGE_INSERT_FRAGMENT_RECORD:
            {
                cacheId = in.readInt();
                pageId = in.readLong();
                final long lastLink = in.readLong();
                final int payloadSize = in.readInt();
                final byte[] payload = new byte[payloadSize];
                in.readFully(payload);
                res = new DataPageInsertFragmentRecord(cacheId, pageId, payload, lastLink);
                break;
            }
        case DATA_PAGE_REMOVE_RECORD:
            cacheId = in.readInt();
            pageId = in.readLong();
            int itemId = in.readUnsignedByte();
            res = new DataPageRemoveRecord(cacheId, pageId, itemId);
            break;
        case DATA_PAGE_SET_FREE_LIST_PAGE:
            cacheId = in.readInt();
            pageId = in.readLong();
            long freeListPage = in.readLong();
            res = new DataPageSetFreeListPageRecord(cacheId, pageId, freeListPage);
            break;
        case MVCC_DATA_PAGE_MARK_UPDATED_RECORD:
            cacheId = in.readInt();
            pageId = in.readLong();
            itemId = in.readInt();
            long newMvccCrd = in.readLong();
            long newMvccCntr = in.readLong();
            int newMvccOpCntr = in.readInt();
            res = new DataPageMvccMarkUpdatedRecord(cacheId, pageId, itemId, newMvccCrd, newMvccCntr, newMvccOpCntr);
            break;
        case MVCC_DATA_PAGE_TX_STATE_HINT_UPDATED_RECORD:
            cacheId = in.readInt();
            pageId = in.readLong();
            itemId = in.readInt();
            byte txState = in.readByte();
            res = new DataPageMvccUpdateTxStateHintRecord(cacheId, pageId, itemId, txState);
            break;
        case MVCC_DATA_PAGE_NEW_TX_STATE_HINT_UPDATED_RECORD:
            cacheId = in.readInt();
            pageId = in.readLong();
            itemId = in.readInt();
            byte newTxState = in.readByte();
            res = new DataPageMvccUpdateNewTxStateHintRecord(cacheId, pageId, itemId, newTxState);
            break;
        case INIT_NEW_PAGE_RECORD:
            cacheId = in.readInt();
            pageId = in.readLong();
            ioType = in.readUnsignedShort();
            ioVer = in.readUnsignedShort();
            long virtualPageId = in.readLong();
            res = new InitNewPageRecord(cacheId, pageId, ioType, ioVer, virtualPageId, log);
            break;
        case BTREE_META_PAGE_INIT_ROOT:
            cacheId = in.readInt();
            pageId = in.readLong();
            long rootId = in.readLong();
            res = new MetaPageInitRootRecord(cacheId, pageId, rootId);
            break;
        case BTREE_META_PAGE_INIT_ROOT2:
            cacheId = in.readInt();
            pageId = in.readLong();
            long rootId2 = in.readLong();
            int inlineSize = in.readShort();
            res = new MetaPageInitRootInlineRecord(cacheId, pageId, rootId2, inlineSize);
            break;
        case BTREE_META_PAGE_INIT_ROOT_V3:
            cacheId = in.readInt();
            pageId = in.readLong();
            long rootId3 = in.readLong();
            int inlineSize3 = in.readShort();
            long flags = in.readLong();
            byte[] revHash = new byte[IgniteProductVersion.REV_HASH_SIZE];
            byte maj = in.readByte();
            byte min = in.readByte();
            byte maint = in.readByte();
            long verTs = in.readLong();
            in.readFully(revHash);
            IgniteProductVersion createdVer = new IgniteProductVersion(maj, min, maint, verTs, revHash);
            res = new MetaPageInitRootInlineFlagsCreatedVersionRecord(cacheId, pageId, rootId3, inlineSize3, flags, createdVer);
            break;
        case BTREE_META_PAGE_ADD_ROOT:
            cacheId = in.readInt();
            pageId = in.readLong();
            rootId = in.readLong();
            res = new MetaPageAddRootRecord(cacheId, pageId, rootId);
            break;
        case BTREE_META_PAGE_CUT_ROOT:
            cacheId = in.readInt();
            pageId = in.readLong();
            res = new MetaPageCutRootRecord(cacheId, pageId);
            break;
        case BTREE_INIT_NEW_ROOT:
            cacheId = in.readInt();
            pageId = in.readLong();
            rootId = in.readLong();
            ioType = in.readUnsignedShort();
            ioVer = in.readUnsignedShort();
            long leftId = in.readLong();
            long rightId = in.readLong();
            BPlusIO<?> io = BPlusIO.getBPlusIO(ioType, ioVer);
            byte[] rowBytes = new byte[io.getItemSize()];
            in.readFully(rowBytes);
            res = new NewRootInitRecord<>(cacheId, pageId, rootId, (BPlusInnerIO<?>) io, leftId, rowBytes, rightId);
            break;
        case BTREE_PAGE_RECYCLE:
            cacheId = in.readInt();
            pageId = in.readLong();
            long newPageId = in.readLong();
            res = new RecycleRecord(cacheId, pageId, newPageId);
            break;
        case BTREE_PAGE_INSERT:
            cacheId = in.readInt();
            pageId = in.readLong();
            ioType = in.readUnsignedShort();
            ioVer = in.readUnsignedShort();
            int itemIdx = in.readUnsignedShort();
            rightId = in.readLong();
            io = BPlusIO.getBPlusIO(ioType, ioVer);
            rowBytes = new byte[io.getItemSize()];
            in.readFully(rowBytes);
            res = new InsertRecord<>(cacheId, pageId, io, itemIdx, rowBytes, rightId);
            break;
        case BTREE_FIX_LEFTMOST_CHILD:
            cacheId = in.readInt();
            pageId = in.readLong();
            rightId = in.readLong();
            res = new FixLeftmostChildRecord(cacheId, pageId, rightId);
            break;
        case BTREE_FIX_COUNT:
            cacheId = in.readInt();
            pageId = in.readLong();
            int cnt = in.readUnsignedShort();
            res = new FixCountRecord(cacheId, pageId, cnt);
            break;
        case BTREE_PAGE_REPLACE:
            cacheId = in.readInt();
            pageId = in.readLong();
            ioType = in.readUnsignedShort();
            ioVer = in.readUnsignedShort();
            itemIdx = in.readUnsignedShort();
            io = BPlusIO.getBPlusIO(ioType, ioVer);
            rowBytes = new byte[io.getItemSize()];
            in.readFully(rowBytes);
            res = new ReplaceRecord<>(cacheId, pageId, io, rowBytes, itemIdx);
            break;
        case BTREE_PAGE_REMOVE:
            cacheId = in.readInt();
            pageId = in.readLong();
            itemIdx = in.readUnsignedShort();
            cnt = in.readUnsignedShort();
            res = new RemoveRecord(cacheId, pageId, itemIdx, cnt);
            break;
        case BTREE_PAGE_INNER_REPLACE:
            cacheId = in.readInt();
            pageId = in.readLong();
            int dstIdx = in.readUnsignedShort();
            long srcPageId = in.readLong();
            int srcIdx = in.readUnsignedShort();
            long rmvId = in.readLong();
            res = new InnerReplaceRecord<>(cacheId, pageId, dstIdx, srcPageId, srcIdx, rmvId);
            break;
        case BTREE_FORWARD_PAGE_SPLIT:
            cacheId = in.readInt();
            pageId = in.readLong();
            long fwdId = in.readLong();
            ioType = in.readUnsignedShort();
            ioVer = in.readUnsignedShort();
            srcPageId = in.readLong();
            int mid = in.readUnsignedShort();
            cnt = in.readUnsignedShort();
            res = new SplitForwardPageRecord(cacheId, pageId, fwdId, ioType, ioVer, srcPageId, mid, cnt);
            break;
        case BTREE_EXISTING_PAGE_SPLIT:
            cacheId = in.readInt();
            pageId = in.readLong();
            mid = in.readUnsignedShort();
            fwdId = in.readLong();
            res = new SplitExistingPageRecord(cacheId, pageId, mid, fwdId);
            break;
        case BTREE_PAGE_MERGE:
            cacheId = in.readInt();
            pageId = in.readLong();
            long prntId = in.readLong();
            int prntIdx = in.readUnsignedShort();
            rightId = in.readLong();
            boolean emptyBranch = in.readBoolean();
            res = new MergeRecord<>(cacheId, pageId, prntId, prntIdx, rightId, emptyBranch);
            break;
        case BTREE_FIX_REMOVE_ID:
            cacheId = in.readInt();
            pageId = in.readLong();
            rmvId = in.readLong();
            res = new FixRemoveId(cacheId, pageId, rmvId);
            break;
        case PAGES_LIST_SET_NEXT:
            cacheId = in.readInt();
            pageId = in.readLong();
            long nextPageId = in.readLong();
            res = new PagesListSetNextRecord(cacheId, pageId, nextPageId);
            break;
        case PAGES_LIST_SET_PREVIOUS:
            cacheId = in.readInt();
            pageId = in.readLong();
            long prevPageId = in.readLong();
            res = new PagesListSetPreviousRecord(cacheId, pageId, prevPageId);
            break;
        case PAGES_LIST_INIT_NEW_PAGE:
            cacheId = in.readInt();
            pageId = in.readLong();
            ioType = in.readInt();
            ioVer = in.readInt();
            newPageId = in.readLong();
            prevPageId = in.readLong();
            long addDataPageId = in.readLong();
            res = new PagesListInitNewPageRecord(cacheId, pageId, ioType, ioVer, newPageId, prevPageId, addDataPageId, log);
            break;
        case PAGES_LIST_ADD_PAGE:
            cacheId = in.readInt();
            pageId = in.readLong();
            long dataPageId = in.readLong();
            res = new PagesListAddPageRecord(cacheId, pageId, dataPageId);
            break;
        case PAGES_LIST_REMOVE_PAGE:
            cacheId = in.readInt();
            pageId = in.readLong();
            long rmvdPageId = in.readLong();
            res = new PagesListRemovePageRecord(cacheId, pageId, rmvdPageId);
            break;
        case TRACKING_PAGE_DELTA:
            cacheId = in.readInt();
            pageId = in.readLong();
            long pageIdToMark = in.readLong();
            long nextSnapshotId0 = in.readLong();
            long lastSuccessfulSnapshotId0 = in.readLong();
            res = new TrackingPageDeltaRecord(cacheId, pageId, pageIdToMark, nextSnapshotId0, lastSuccessfulSnapshotId0);
            break;
        case META_PAGE_UPDATE_NEXT_SNAPSHOT_ID:
            cacheId = in.readInt();
            pageId = in.readLong();
            long nextSnapshotId = in.readLong();
            res = new MetaPageUpdateNextSnapshotId(cacheId, pageId, nextSnapshotId);
            break;
        case META_PAGE_UPDATE_LAST_SUCCESSFUL_FULL_SNAPSHOT_ID:
            cacheId = in.readInt();
            pageId = in.readLong();
            long lastSuccessfulFullSnapshotId = in.readLong();
            res = new MetaPageUpdateLastSuccessfulFullSnapshotId(cacheId, pageId, lastSuccessfulFullSnapshotId);
            break;
        case META_PAGE_UPDATE_LAST_SUCCESSFUL_SNAPSHOT_ID:
            cacheId = in.readInt();
            pageId = in.readLong();
            long lastSuccessfulSnapshotId = in.readLong();
            long lastSuccessfulSnapshotTag = in.readLong();
            res = new MetaPageUpdateLastSuccessfulSnapshotId(cacheId, pageId, lastSuccessfulSnapshotId, lastSuccessfulSnapshotTag);
            break;
        case META_PAGE_UPDATE_LAST_ALLOCATED_INDEX:
            cacheId = in.readInt();
            pageId = in.readLong();
            int lastAllocatedIdx = in.readInt();
            res = new MetaPageUpdateLastAllocatedIndex(cacheId, pageId, lastAllocatedIdx);
            break;
        case PART_META_UPDATE_STATE:
            cacheId = in.readInt();
            partId = in.readInt();
            byte state = in.readByte();
            long updateCntr = in.readLong();
            GridDhtPartitionState partState = GridDhtPartitionState.fromOrdinal(state);
            res = new PartitionMetaStateRecord(cacheId, partId, partState, updateCntr);
            break;
        case PAGE_LIST_META_RESET_COUNT_RECORD:
            cacheId = in.readInt();
            pageId = in.readLong();
            res = new PageListMetaResetCountRecord(cacheId, pageId);
            break;
        case ROTATED_ID_PART_RECORD:
            cacheId = in.readInt();
            pageId = in.readLong();
            byte rotatedIdPart = in.readByte();
            res = new RotatedIdPartRecord(cacheId, pageId, rotatedIdPart);
            break;
        case SWITCH_SEGMENT_RECORD:
            throw new EOFException("END OF SEGMENT");
        case TX_RECORD:
            res = txRecordSerializer.readTx(in);
            break;
        case MASTER_KEY_CHANGE_RECORD:
        case MASTER_KEY_CHANGE_RECORD_V2:
            int keyNameLen = in.readInt();
            byte[] keyNameBytes = new byte[keyNameLen];
            in.readFully(keyNameBytes);
            String masterKeyName = new String(keyNameBytes);
            int keysCnt = in.readInt();
            List<T2<Integer, GroupKeyEncrypted>> grpKeys = new ArrayList<>(keysCnt);
            boolean readKeyId = type == MASTER_KEY_CHANGE_RECORD_V2;
            for (int i = 0; i < keysCnt; i++) {
                int grpId = in.readInt();
                int keyId = readKeyId ? in.readByte() & 0xff : 0;
                int grpKeySize = in.readInt();
                byte[] grpKey = new byte[grpKeySize];
                in.readFully(grpKey);
                grpKeys.add(new T2<>(grpId, new GroupKeyEncrypted(keyId, grpKey)));
            }
            res = new MasterKeyChangeRecordV2(masterKeyName, grpKeys);
            break;
        case REENCRYPTION_START_RECORD:
            int grpsCnt = in.readInt();
            Map<Integer, Byte> map = U.newHashMap(grpsCnt);
            for (int i = 0; i < grpsCnt; i++) {
                int grpId = in.readInt();
                byte keyId = in.readByte();
                map.put(grpId, keyId);
            }
            res = new ReencryptionStartRecord(map);
            break;
        case INDEX_ROOT_PAGE_RENAME_RECORD:
            res = new IndexRenameRootPageRecord(in);
            break;
        case PARTITION_CLEARING_START_RECORD:
            int partId0 = in.readInt();
            int grpId = in.readInt();
            long clearVer = in.readLong();
            res = new PartitionClearingStartRecord(partId0, grpId, clearVer);
            break;
        default:
            throw new UnsupportedOperationException("Type: " + type);
    }
    return res;
}
Also used : PagesListSetPreviousRecord(org.apache.ignite.internal.pagemem.wal.record.delta.PagesListSetPreviousRecord) DataPageRemoveRecord(org.apache.ignite.internal.pagemem.wal.record.delta.DataPageRemoveRecord) ArrayList(java.util.ArrayList) RecycleRecord(org.apache.ignite.internal.pagemem.wal.record.delta.RecycleRecord) MetaPageInitRecord(org.apache.ignite.internal.pagemem.wal.record.delta.MetaPageInitRecord) MetaPageUpdateLastSuccessfulFullSnapshotId(org.apache.ignite.internal.pagemem.wal.record.delta.MetaPageUpdateLastSuccessfulFullSnapshotId) DataPageMvccUpdateNewTxStateHintRecord(org.apache.ignite.internal.pagemem.wal.record.delta.DataPageMvccUpdateNewTxStateHintRecord) FixLeftmostChildRecord(org.apache.ignite.internal.pagemem.wal.record.delta.FixLeftmostChildRecord) DataEntry(org.apache.ignite.internal.pagemem.wal.record.DataEntry) MvccDataEntry(org.apache.ignite.internal.pagemem.wal.record.MvccDataEntry) LazyDataEntry(org.apache.ignite.internal.pagemem.wal.record.LazyDataEntry) SplitForwardPageRecord(org.apache.ignite.internal.pagemem.wal.record.delta.SplitForwardPageRecord) MetaPageUpdatePartitionDataRecordV3(org.apache.ignite.internal.pagemem.wal.record.delta.MetaPageUpdatePartitionDataRecordV3) HeaderRecord(org.apache.ignite.internal.processors.cache.persistence.wal.record.HeaderRecord) PagesListAddPageRecord(org.apache.ignite.internal.pagemem.wal.record.delta.PagesListAddPageRecord) MetaPageUpdatePartitionDataRecordV2(org.apache.ignite.internal.pagemem.wal.record.delta.MetaPageUpdatePartitionDataRecordV2) EOFException(java.io.EOFException) MetaPageUpdateNextSnapshotId(org.apache.ignite.internal.pagemem.wal.record.delta.MetaPageUpdateNextSnapshotId) UUID(java.util.UUID) WALPointer(org.apache.ignite.internal.processors.cache.persistence.wal.WALPointer) PageSnapshot(org.apache.ignite.internal.pagemem.wal.record.PageSnapshot) FullPageId(org.apache.ignite.internal.pagemem.FullPageId) DataPageSetFreeListPageRecord(org.apache.ignite.internal.pagemem.wal.record.delta.DataPageSetFreeListPageRecord) MetaPageUpdateLastAllocatedIndex(org.apache.ignite.internal.pagemem.wal.record.delta.MetaPageUpdateLastAllocatedIndex) PartitionMetaStateRecord(org.apache.ignite.internal.pagemem.wal.record.delta.PartitionMetaStateRecord) BPlusInnerIO(org.apache.ignite.internal.processors.cache.persistence.tree.io.BPlusInnerIO) GroupKeyEncrypted(org.apache.ignite.internal.managers.encryption.GroupKeyEncrypted) MetaPageCutRootRecord(org.apache.ignite.internal.pagemem.wal.record.delta.MetaPageCutRootRecord) CacheState(org.apache.ignite.internal.pagemem.wal.record.CacheState) MetaPageAddRootRecord(org.apache.ignite.internal.pagemem.wal.record.delta.MetaPageAddRootRecord) MetaPageInitRootInlineRecord(org.apache.ignite.internal.pagemem.wal.record.delta.MetaPageInitRootInlineRecord) MasterKeyChangeRecordV2(org.apache.ignite.internal.pagemem.wal.record.MasterKeyChangeRecordV2) DataPageMvccMarkUpdatedRecord(org.apache.ignite.internal.pagemem.wal.record.delta.DataPageMvccMarkUpdatedRecord) MetaPageUpdateIndexDataRecord(org.apache.ignite.internal.pagemem.wal.record.delta.MetaPageUpdateIndexDataRecord) MetastoreDataRecord(org.apache.ignite.internal.pagemem.wal.record.MetastoreDataRecord) GridDhtPartitionState(org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtPartitionState) WALRecord(org.apache.ignite.internal.pagemem.wal.record.WALRecord) MetaPageInitRootInlineFlagsCreatedVersionRecord(org.apache.ignite.internal.pagemem.wal.record.delta.MetaPageInitRootInlineFlagsCreatedVersionRecord) DataPageUpdateRecord(org.apache.ignite.internal.pagemem.wal.record.delta.DataPageUpdateRecord) PageListMetaResetCountRecord(org.apache.ignite.internal.pagemem.wal.record.delta.PageListMetaResetCountRecord) IgniteProductVersion(org.apache.ignite.lang.IgniteProductVersion) PagesListRemovePageRecord(org.apache.ignite.internal.pagemem.wal.record.delta.PagesListRemovePageRecord) TrackingPageDeltaRecord(org.apache.ignite.internal.pagemem.wal.record.delta.TrackingPageDeltaRecord) RemoveRecord(org.apache.ignite.internal.pagemem.wal.record.delta.RemoveRecord) DataPageRemoveRecord(org.apache.ignite.internal.pagemem.wal.record.delta.DataPageRemoveRecord) MemoryRecoveryRecord(org.apache.ignite.internal.pagemem.wal.record.MemoryRecoveryRecord) DataPageMvccUpdateTxStateHintRecord(org.apache.ignite.internal.pagemem.wal.record.delta.DataPageMvccUpdateTxStateHintRecord) FixRemoveId(org.apache.ignite.internal.pagemem.wal.record.delta.FixRemoveId) PartitionDestroyRecord(org.apache.ignite.internal.pagemem.wal.record.delta.PartitionDestroyRecord) PagesListInitNewPageRecord(org.apache.ignite.internal.pagemem.wal.record.delta.PagesListInitNewPageRecord) InitNewPageRecord(org.apache.ignite.internal.pagemem.wal.record.delta.InitNewPageRecord) RotatedIdPartRecord(org.apache.ignite.internal.pagemem.wal.record.delta.RotatedIdPartRecord) MetaPageUpdatePartitionDataRecord(org.apache.ignite.internal.pagemem.wal.record.delta.MetaPageUpdatePartitionDataRecord) MetaPageUpdateLastSuccessfulSnapshotId(org.apache.ignite.internal.pagemem.wal.record.delta.MetaPageUpdateLastSuccessfulSnapshotId) MetaPageUpdateIndexDataRecord(org.apache.ignite.internal.pagemem.wal.record.delta.MetaPageUpdateIndexDataRecord) DataRecord(org.apache.ignite.internal.pagemem.wal.record.DataRecord) MetastoreDataRecord(org.apache.ignite.internal.pagemem.wal.record.MetastoreDataRecord) MetaPageUpdatePartitionDataRecord(org.apache.ignite.internal.pagemem.wal.record.delta.MetaPageUpdatePartitionDataRecord) DataPageInsertRecord(org.apache.ignite.internal.pagemem.wal.record.delta.DataPageInsertRecord) PagesListInitNewPageRecord(org.apache.ignite.internal.pagemem.wal.record.delta.PagesListInitNewPageRecord) SplitExistingPageRecord(org.apache.ignite.internal.pagemem.wal.record.delta.SplitExistingPageRecord) T2(org.apache.ignite.internal.util.typedef.T2) DataPageInsertFragmentRecord(org.apache.ignite.internal.pagemem.wal.record.delta.DataPageInsertFragmentRecord) PagesListSetNextRecord(org.apache.ignite.internal.pagemem.wal.record.delta.PagesListSetNextRecord) CheckpointRecord(org.apache.ignite.internal.pagemem.wal.record.CheckpointRecord) FixCountRecord(org.apache.ignite.internal.pagemem.wal.record.delta.FixCountRecord) MetaPageInitRootRecord(org.apache.ignite.internal.pagemem.wal.record.delta.MetaPageInitRootRecord) PartitionClearingStartRecord(org.apache.ignite.internal.pagemem.wal.record.PartitionClearingStartRecord) ReencryptionStartRecord(org.apache.ignite.internal.pagemem.wal.record.ReencryptionStartRecord) IndexRenameRootPageRecord(org.apache.ignite.internal.pagemem.wal.record.IndexRenameRootPageRecord)

Example 23 with WALPointer

use of org.apache.ignite.internal.processors.cache.persistence.wal.WALPointer in project ignite by apache.

the class RecordV2Serializer method putPositionOfRecord.

/**
 * Writes rec file position to given {@code buf}.
 *
 * @param buf Buffer to write rec file position.
 * @param rec WAL rec.
 */
private static void putPositionOfRecord(ByteBuffer buf, WALRecord rec) {
    WALPointer p = rec.position();
    buf.putLong(p.index());
    buf.putInt(p.fileOffset());
    buf.putInt(rec.size());
}
Also used : WALPointer(org.apache.ignite.internal.processors.cache.persistence.wal.WALPointer)

Example 24 with WALPointer

use of org.apache.ignite.internal.processors.cache.persistence.wal.WALPointer in project ignite by apache.

the class RecordV2Serializer method readPositionAndCheckPoint.

/**
 * @param in Data input to read pointer from.
 * @param skipPositionCheck Flag for skipping position check.
 * @return Read file WAL pointer.
 * @throws IOException If failed to write.
 */
@SuppressWarnings("UnusedReturnValue")
private static WALPointer readPositionAndCheckPoint(DataInput in, WALPointer expPtr, boolean skipPositionCheck, WALRecord.RecordType type) throws IgniteCheckedException, IOException {
    long idx = in.readLong();
    int fileOff = in.readInt();
    int len = in.readInt();
    if (!F.eq(idx, expPtr.index()) || (!skipPositionCheck && !F.eq(fileOff, expPtr.fileOffset())))
        throw new WalSegmentTailReachedException("WAL segment tail reached. [ " + "Expected next state: {Index=" + expPtr.index() + ",Offset=" + expPtr.fileOffset() + "}, " + "Actual state : {Index=" + idx + ",Offset=" + fileOff + "} ] recordType=" + type, null);
    return new WALPointer(idx, fileOff, len);
}
Also used : WalSegmentTailReachedException(org.apache.ignite.internal.processors.cache.persistence.wal.WalSegmentTailReachedException) WALPointer(org.apache.ignite.internal.processors.cache.persistence.wal.WALPointer)

Example 25 with WALPointer

use of org.apache.ignite.internal.processors.cache.persistence.wal.WALPointer in project ignite by apache.

the class WalScanner method findAllRecordsFor.

/**
 * Finding all page physical records whose pageId is contained in given collection.
 *
 * @param groupAndPageIds Search pages.
 * @return Final step for execution some action on result.
 */
@NotNull
public WalScanner.ScanTerminateStep findAllRecordsFor(@NotNull Collection<T2<Integer, Long>> groupAndPageIds) {
    requireNonNull(groupAndPageIds);
    HashSet<T2<Integer, Long>> groupAndPageIds0 = new HashSet<>(groupAndPageIds);
    // Collect all (group, partition) partition pairs.
    Set<T2<Integer, Integer>> groupAndParts = groupAndPageIds0.stream().map((tup) -> new T2<>(tup.get1(), PageIdUtils.partId(tup.get2()))).collect(Collectors.toSet());
    // Build WAL filter. (Checkoint, Page, Partition meta)
    Predicate<IgniteBiTuple<WALPointer, WALRecord>> filter = checkpoint().or(pageOwner(groupAndPageIds0)).or(partitionMetaStateUpdate(groupAndParts));
    return new ScanTerminateStep(() -> new FilteredWalIterator(walIteratorSupplier.get(), filter));
}
Also used : WALIterator(org.apache.ignite.internal.pagemem.wal.WALIterator) PHYSICAL(org.apache.ignite.internal.pagemem.wal.record.WALRecord.RecordPurpose.PHYSICAL) MIXED(org.apache.ignite.internal.pagemem.wal.record.WALRecord.RecordPurpose.MIXED) Predicate(java.util.function.Predicate) Collection(java.util.Collection) IgniteCheckedException(org.apache.ignite.IgniteCheckedException) WALRecord(org.apache.ignite.internal.pagemem.wal.record.WALRecord) IgniteWalIteratorFactory(org.apache.ignite.internal.processors.cache.persistence.wal.reader.IgniteWalIteratorFactory) Set(java.util.Set) FilteredWalIterator(org.apache.ignite.internal.processors.cache.persistence.wal.reader.FilteredWalIterator) Collectors(java.util.stream.Collectors) WALPointer(org.apache.ignite.internal.processors.cache.persistence.wal.WALPointer) T2(org.apache.ignite.internal.util.typedef.T2) IgniteBiTuple(org.apache.ignite.lang.IgniteBiTuple) HashSet(java.util.HashSet) WalFilters.partitionMetaStateUpdate(org.apache.ignite.internal.processors.cache.persistence.wal.reader.WalFilters.partitionMetaStateUpdate) IgniteThrowableSupplier(org.apache.ignite.internal.util.lang.IgniteThrowableSupplier) IteratorParametersBuilder(org.apache.ignite.internal.processors.cache.persistence.wal.reader.IgniteWalIteratorFactory.IteratorParametersBuilder) PageIdUtils(org.apache.ignite.internal.pagemem.PageIdUtils) Objects.requireNonNull(java.util.Objects.requireNonNull) WalFilters.checkpoint(org.apache.ignite.internal.processors.cache.persistence.wal.reader.WalFilters.checkpoint) WalFilters.pageOwner(org.apache.ignite.internal.processors.cache.persistence.wal.reader.WalFilters.pageOwner) NotNull(org.jetbrains.annotations.NotNull) FilteredWalIterator(org.apache.ignite.internal.processors.cache.persistence.wal.reader.FilteredWalIterator) IgniteBiTuple(org.apache.ignite.lang.IgniteBiTuple) T2(org.apache.ignite.internal.util.typedef.T2) HashSet(java.util.HashSet) NotNull(org.jetbrains.annotations.NotNull)

Aggregations

WALPointer (org.apache.ignite.internal.processors.cache.persistence.wal.WALPointer)122 WALRecord (org.apache.ignite.internal.pagemem.wal.record.WALRecord)44 Test (org.junit.Test)41 IgniteEx (org.apache.ignite.internal.IgniteEx)38 WALIterator (org.apache.ignite.internal.pagemem.wal.WALIterator)36 GridCommonAbstractTest (org.apache.ignite.testframework.junits.common.GridCommonAbstractTest)30 IgniteCheckedException (org.apache.ignite.IgniteCheckedException)27 CheckpointRecord (org.apache.ignite.internal.pagemem.wal.record.CheckpointRecord)24 IgniteWriteAheadLogManager (org.apache.ignite.internal.pagemem.wal.IgniteWriteAheadLogManager)23 DataRecord (org.apache.ignite.internal.pagemem.wal.record.DataRecord)23 ArrayList (java.util.ArrayList)20 IgniteWalIteratorFactory (org.apache.ignite.internal.processors.cache.persistence.wal.reader.IgniteWalIteratorFactory)20 FullPageId (org.apache.ignite.internal.pagemem.FullPageId)19 DataEntry (org.apache.ignite.internal.pagemem.wal.record.DataEntry)19 PageSnapshot (org.apache.ignite.internal.pagemem.wal.record.PageSnapshot)19 File (java.io.File)18 T2 (org.apache.ignite.internal.util.typedef.T2)16 ByteBuffer (java.nio.ByteBuffer)15 UUID (java.util.UUID)15 IOException (java.io.IOException)14