Search in sources :

Example 6 with IteratorParametersBuilder

use of org.apache.ignite.internal.processors.cache.persistence.wal.reader.IgniteWalIteratorFactory.IteratorParametersBuilder in project ignite by apache.

the class IgniteWalReaderTest method testFillWalWithDifferentTypes.

/**
 * @throws Exception if failed.
 */
@Test
public void testFillWalWithDifferentTypes() throws Exception {
    Ignite ig = startGrid();
    ig.cluster().active(true);
    IgniteCache<Object, Object> addlCache = ig.getOrCreateCache(CACHE_ADDL_NAME);
    addlCache.put("1", "2");
    addlCache.put(1, 2);
    addlCache.put(1L, 2L);
    addlCache.put(TestEnum.A, "Enum_As_Key");
    addlCache.put("Enum_As_Value", TestEnum.B);
    addlCache.put(TestEnum.C, TestEnum.C);
    addlCache.put("Serializable", new TestSerializable(42));
    addlCache.put(new TestSerializable(42), "Serializable_As_Key");
    addlCache.put("Externalizable", new TestExternalizable(42));
    addlCache.put(new TestExternalizable(42), "Externalizable_As_Key");
    addlCache.put(292, new IndexedObject(292));
    String search1 = "SomeUnexpectedStringValueAsKeyToSearch";
    Collection<String> ctrlStringsToSearch = new HashSet<>();
    ctrlStringsToSearch.add(search1);
    Collection<String> ctrlStringsForBinaryObjSearch = new HashSet<>();
    ctrlStringsForBinaryObjSearch.add(search1);
    addlCache.put(search1, "SearchKey");
    String search2 = "SomeTestStringContainerToBePrintedLongLine";
    TestStringContainerToBePrinted val = new TestStringContainerToBePrinted(search2);
    // will validate original toString() was called
    ctrlStringsToSearch.add("v = [ " + val.getClass().getSimpleName() + "{data='" + search2 + "'}]");
    ctrlStringsForBinaryObjSearch.add(search2);
    addlCache.put("SearchValue", val);
    String search3 = "SomeTestStringContainerToBePrintedLongLine2";
    TestStringContainerToBePrinted key = new TestStringContainerToBePrinted(search3);
    // will validate original toString() was called
    ctrlStringsToSearch.add("k = " + key.getClass().getSimpleName() + "{data='" + search3 + "'}");
    // validate only string itself
    ctrlStringsForBinaryObjSearch.add(search3);
    addlCache.put(key, "SearchKey");
    int cntEntries = addlCache.size();
    Map<Object, Object> ctrlMap = new HashMap<>();
    for (Cache.Entry<Object, Object> next : addlCache) ctrlMap.put(next.getKey(), next.getValue());
    Map<Object, Object> ctrlMapForBinaryObjects = new HashMap<>();
    for (Cache.Entry<Object, Object> next : addlCache) ctrlMapForBinaryObjects.put(next.getKey(), next.getValue());
    String subfolderName = genDbSubfolderName(ig, 0);
    // Wait async allocation wal segment file by archiver.
    Thread.sleep(1000);
    stopGrid("node0", false);
    String workDir = U.defaultWorkDirectory();
    IgniteWalIteratorFactory factory = new IgniteWalIteratorFactory(log);
    IteratorParametersBuilder params0 = createIteratorParametersBuilder(workDir, subfolderName);
    params0.filesOrDirs(workDir);
    IgniteBiInClosure<Object, Object> objConsumer = (key12, val1) -> {
        log.info("K: [" + key12 + ", " + (key12 != null ? key12.getClass().getName() : "?") + "]" + " V: [" + val1 + ", " + (val1 != null ? val1.getClass().getName() : "?") + "]");
        boolean rmv = remove(ctrlMap, key12, val1);
        if (!rmv) {
            String msg = "Unable to remove pair from control map " + "K: [" + key12 + "] V: [" + val1 + "]";
            log.error(msg);
        }
        assertFalse(val1 instanceof BinaryObject);
    };
    IgniteInClosure<DataRecord> toStrChecker = record -> {
        String strRepresentation = record.toString();
        for (Iterator<String> iter = ctrlStringsToSearch.iterator(); iter.hasNext(); ) {
            final String next = iter.next();
            if (strRepresentation.contains(next)) {
                iter.remove();
                break;
            }
        }
    };
    scanIterateAndCount(factory, params0, cntEntries, 0, objConsumer, toStrChecker);
    assertTrue(" Control Map is not empty after reading entries: " + ctrlMap, ctrlMap.isEmpty());
    assertTrue(" Control Map for strings in entries is not empty after" + " reading records: " + ctrlStringsToSearch, ctrlStringsToSearch.isEmpty());
    IgniteBiInClosure<Object, Object> binObjConsumer = (key13, val12) -> {
        log.info("K(KeepBinary): [" + key13 + ", " + (key13 != null ? key13.getClass().getName() : "?") + "]" + " V(KeepBinary): [" + val12 + ", " + (val12 != null ? val12.getClass().getName() : "?") + "]");
        boolean rmv = remove(ctrlMapForBinaryObjects, key13, val12);
        if (!rmv) {
            if (key13 instanceof BinaryObject) {
                BinaryObject keyBinObj = (BinaryObject) key13;
                String binaryObjTypeName = keyBinObj.type().typeName();
                if (Objects.equals(TestStringContainerToBePrinted.class.getName(), binaryObjTypeName)) {
                    String data = keyBinObj.field("data");
                    rmv = ctrlMapForBinaryObjects.remove(new TestStringContainerToBePrinted(data)) != null;
                } else if (Objects.equals(TestSerializable.class.getName(), binaryObjTypeName)) {
                    Integer iVal = keyBinObj.field("iVal");
                    rmv = ctrlMapForBinaryObjects.remove(new TestSerializable(iVal)) != null;
                } else if (Objects.equals(TestEnum.class.getName(), binaryObjTypeName)) {
                    TestEnum key1 = TestEnum.values()[keyBinObj.enumOrdinal()];
                    rmv = ctrlMapForBinaryObjects.remove(key1) != null;
                }
            } else if (val12 instanceof BinaryObject) {
                // don't compare BO values, just remove by key
                rmv = ctrlMapForBinaryObjects.remove(key13) != null;
            }
        }
        if (!rmv)
            log.error("Unable to remove pair from control map " + "K: [" + key13 + "] V: [" + val12 + "]");
        if (val12 instanceof BinaryObject) {
            BinaryObject binaryObj = (BinaryObject) val12;
            String binaryObjTypeName = binaryObj.type().typeName();
            if (Objects.equals(IndexedObject.class.getName(), binaryObjTypeName)) {
                assertEquals(binaryObj.field("iVal").toString(), binaryObj.field("jVal").toString());
                byte[] data = binaryObj.field("data");
                for (byte datum : data) assertTrue(datum >= 'A' && datum <= 'A' + 10);
            }
        }
    };
    IgniteInClosure<DataRecord> binObjToStrChecker = record -> {
        String strRepresentation = record.toString();
        for (Iterator<String> iter = ctrlStringsForBinaryObjSearch.iterator(); iter.hasNext(); ) {
            final String next = iter.next();
            if (strRepresentation.contains(next)) {
                iter.remove();
                break;
            }
        }
    };
    IteratorParametersBuilder params1 = createIteratorParametersBuilder(workDir, subfolderName);
    params1.filesOrDirs(workDir).keepBinary(true);
    // Validate same WAL log with flag binary objects only
    IgniteWalIteratorFactory keepBinFactory = new IgniteWalIteratorFactory(log);
    scanIterateAndCount(keepBinFactory, params1, cntEntries, 0, binObjConsumer, binObjToStrChecker);
    assertTrue(" Control Map is not empty after reading entries: " + ctrlMapForBinaryObjects, ctrlMapForBinaryObjects.isEmpty());
    assertTrue(" Control Map for strings in entries is not empty after" + " reading records: " + ctrlStringsForBinaryObjSearch, ctrlStringsForBinaryObjSearch.isEmpty());
}
Also used : IgniteWalIteratorFactory(org.apache.ignite.internal.processors.cache.persistence.wal.reader.IgniteWalIteratorFactory) CacheAtomicityMode(org.apache.ignite.cache.CacheAtomicityMode) BinaryObject(org.apache.ignite.binary.BinaryObject) MVCC_DATA_RECORD(org.apache.ignite.internal.pagemem.wal.record.WALRecord.RecordType.MVCC_DATA_RECORD) ObjectOutput(java.io.ObjectOutput) Transaction(org.apache.ignite.transactions.Transaction) Random(java.util.Random) IgniteEx(org.apache.ignite.internal.IgniteEx) DATA_RECORD_V2(org.apache.ignite.internal.pagemem.wal.record.WALRecord.RecordType.DATA_RECORD_V2) CacheRebalanceMode(org.apache.ignite.cache.CacheRebalanceMode) WALPointer(org.apache.ignite.internal.processors.cache.persistence.wal.WALPointer) RendezvousAffinityFunction(org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction) IgniteSystemProperties(org.apache.ignite.IgniteSystemProperties) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) NullLogger(org.apache.ignite.logger.NullLogger) TxRecord(org.apache.ignite.internal.pagemem.wal.record.TxRecord) CREATE(org.apache.ignite.internal.processors.cache.GridCacheOperation.CREATE) Map(java.util.Map) Cache(javax.cache.Cache) DELETE(org.apache.ignite.internal.processors.cache.GridCacheOperation.DELETE) PdsFolderResolver.genNewStyleSubfolderName(org.apache.ignite.internal.processors.cache.persistence.filename.PdsFolderResolver.genNewStyleSubfolderName) WALMode(org.apache.ignite.configuration.WALMode) IgniteInClosure(org.apache.ignite.lang.IgniteInClosure) GridCommonAbstractTest(org.apache.ignite.testframework.junits.common.GridCommonAbstractTest) Externalizable(java.io.Externalizable) EnumMap(java.util.EnumMap) Collection(java.util.Collection) IgniteCheckedException(org.apache.ignite.IgniteCheckedException) WALRecord(org.apache.ignite.internal.pagemem.wal.record.WALRecord) UUID(java.util.UUID) CacheObject(org.apache.ignite.internal.processors.cache.CacheObject) DataRecord(org.apache.ignite.internal.pagemem.wal.record.DataRecord) DataEntry(org.apache.ignite.internal.pagemem.wal.record.DataEntry) IgniteCache(org.apache.ignite.IgniteCache) Serializable(java.io.Serializable) GridCacheOperation(org.apache.ignite.internal.processors.cache.GridCacheOperation) IgniteBiTuple(org.apache.ignite.lang.IgniteBiTuple) GridTestUtils(org.apache.ignite.testframework.GridTestUtils) Objects(java.util.Objects) CountDownLatch(java.util.concurrent.CountDownLatch) Nullable(org.jetbrains.annotations.Nullable) List(java.util.List) IgniteConfiguration(org.apache.ignite.configuration.IgniteConfiguration) IteratorParametersBuilder(org.apache.ignite.internal.processors.cache.persistence.wal.reader.IgniteWalIteratorFactory.IteratorParametersBuilder) EVT_WAL_SEGMENT_COMPACTED(org.apache.ignite.events.EventType.EVT_WAL_SEGMENT_COMPACTED) MvccFeatureChecker(org.apache.ignite.testframework.MvccFeatureChecker) DFLT_STORE_DIR(org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.DFLT_STORE_DIR) ObjectInput(java.io.ObjectInput) KeyCacheObject(org.apache.ignite.internal.processors.cache.KeyCacheObject) NotNull(org.jetbrains.annotations.NotNull) MarshalledDataEntry(org.apache.ignite.internal.pagemem.wal.record.MarshalledDataEntry) WALIterator(org.apache.ignite.internal.pagemem.wal.WALIterator) IgniteWalIteratorFactory(org.apache.ignite.internal.processors.cache.persistence.wal.reader.IgniteWalIteratorFactory) ClusterState(org.apache.ignite.cluster.ClusterState) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) GridCacheVersion(org.apache.ignite.internal.processors.cache.version.GridCacheVersion) U(org.apache.ignite.internal.util.typedef.internal.U) EVT_WAL_SEGMENT_ARCHIVED(org.apache.ignite.events.EventType.EVT_WAL_SEGMENT_ARCHIVED) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) UnwrappedDataEntry(org.apache.ignite.internal.pagemem.wal.record.UnwrappedDataEntry) UnwrapDataEntry(org.apache.ignite.internal.pagemem.wal.record.UnwrapDataEntry) IgniteBiInClosure(org.apache.ignite.lang.IgniteBiInClosure) DataStorageConfiguration(org.apache.ignite.configuration.DataStorageConfiguration) Assume(org.junit.Assume) IgniteEvents(org.apache.ignite.IgniteEvents) ACTIVE(org.apache.ignite.cluster.ClusterState.ACTIVE) Arrays.fill(java.util.Arrays.fill) Iterator(java.util.Iterator) IOException(java.io.IOException) Test(org.junit.Test) Ignite(org.apache.ignite.Ignite) File(java.io.File) T2(org.apache.ignite.internal.util.typedef.T2) TimeUnit(java.util.concurrent.TimeUnit) WithSystemProperty(org.apache.ignite.testframework.junits.WithSystemProperty) AtomicLong(java.util.concurrent.atomic.AtomicLong) TreeMap(java.util.TreeMap) CacheConfiguration(org.apache.ignite.configuration.CacheConfiguration) RecordUtils(org.apache.ignite.testframework.wal.record.RecordUtils) IgniteDataStreamer(org.apache.ignite.IgniteDataStreamer) WalSegmentArchivedEvent(org.apache.ignite.events.WalSegmentArchivedEvent) Assert(org.junit.Assert) DataRegionConfiguration(org.apache.ignite.configuration.DataRegionConfiguration) HashMap(java.util.HashMap) IteratorParametersBuilder(org.apache.ignite.internal.processors.cache.persistence.wal.reader.IgniteWalIteratorFactory.IteratorParametersBuilder) BinaryObject(org.apache.ignite.binary.BinaryObject) WALIterator(org.apache.ignite.internal.pagemem.wal.WALIterator) Iterator(java.util.Iterator) Ignite(org.apache.ignite.Ignite) DataRecord(org.apache.ignite.internal.pagemem.wal.record.DataRecord) HashSet(java.util.HashSet) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) BinaryObject(org.apache.ignite.binary.BinaryObject) CacheObject(org.apache.ignite.internal.processors.cache.CacheObject) KeyCacheObject(org.apache.ignite.internal.processors.cache.KeyCacheObject) Cache(javax.cache.Cache) IgniteCache(org.apache.ignite.IgniteCache) GridCommonAbstractTest(org.apache.ignite.testframework.junits.common.GridCommonAbstractTest) Test(org.junit.Test)

Example 7 with IteratorParametersBuilder

use of org.apache.ignite.internal.processors.cache.persistence.wal.reader.IgniteWalIteratorFactory.IteratorParametersBuilder in project ignite by apache.

the class IgniteWalReplayingAfterRestartTest method testWalRecordsAfterRestart.

/**
 * @throws Exception If failed.
 */
@Test
public void testWalRecordsAfterRestart() throws Exception {
    IgniteEx ignite = startGrid(0);
    ignite.cluster().active(true);
    IgniteCache<Integer, byte[]> cache = ignite.getOrCreateCache(CACHE_NAME);
    int key = 0;
    while (ignite.context().cache().context().wal().lastArchivedSegment() < SEGMENTS_CNT) cache.put(key++ % PART_NUM, new byte[1024]);
    ignite.context().cache().context().database().waitForCheckpoint("test-checkpoint");
    long lastArchived = ignite.context().cache().context().wal().lastArchivedSegment();
    while (ignite.context().cache().context().wal().lastArchivedSegment() < lastArchived + 1) cache.put(key++ % PART_NUM, new byte[1024]);
    stopGrid(0);
    // There are no exceptions should be thrown here.
    ignite = startGrid(0);
    ignite.cluster().active();
    // delta records should always follow PageSnapshot records.
    String workDir = U.defaultWorkDirectory();
    IteratorParametersBuilder builder = new IteratorParametersBuilder().filesOrDirs(workDir).filter((rec, ptr) -> rec.purpose() == PHYSICAL);
    Map<FullPageId, PageSnapshot> snapshots = new HashMap<>();
    try (WALIterator it = new IgniteWalIteratorFactory().iterator(builder)) {
        while (it.hasNext()) {
            IgniteBiTuple<WALPointer, WALRecord> tup = it.next();
            WALRecord rec = tup.get2();
            if (rec.type() == CHECKPOINT_RECORD)
                snapshots.clear();
            // let's check partition meta pages.
            if (rec instanceof PageSnapshot) {
                PageSnapshot snpRec = (PageSnapshot) rec;
                assertFalse(snapshots.containsKey(snpRec.fullPageId()));
                snapshots.put(snpRec.fullPageId(), snpRec);
            } else if (rec instanceof MetaPageUpdatePartitionDataRecord) {
                MetaPageUpdatePartitionDataRecord metaRec = (MetaPageUpdatePartitionDataRecord) rec;
                assertTrue(snapshots.containsKey(metaRec.fullPageId()));
            }
        }
    }
}
Also used : IgniteWalIteratorFactory(org.apache.ignite.internal.processors.cache.persistence.wal.reader.IgniteWalIteratorFactory) WALRecord(org.apache.ignite.internal.pagemem.wal.record.WALRecord) HashMap(java.util.HashMap) IteratorParametersBuilder(org.apache.ignite.internal.processors.cache.persistence.wal.reader.IgniteWalIteratorFactory.IteratorParametersBuilder) WALIterator(org.apache.ignite.internal.pagemem.wal.WALIterator) IgniteEx(org.apache.ignite.internal.IgniteEx) MetaPageUpdatePartitionDataRecord(org.apache.ignite.internal.pagemem.wal.record.delta.MetaPageUpdatePartitionDataRecord) WALPointer(org.apache.ignite.internal.processors.cache.persistence.wal.WALPointer) FullPageId(org.apache.ignite.internal.pagemem.FullPageId) PageSnapshot(org.apache.ignite.internal.pagemem.wal.record.PageSnapshot) GridCommonAbstractTest(org.apache.ignite.testframework.junits.common.GridCommonAbstractTest) Test(org.junit.Test)

Example 8 with IteratorParametersBuilder

use of org.apache.ignite.internal.processors.cache.persistence.wal.reader.IgniteWalIteratorFactory.IteratorParametersBuilder in project ignite by apache.

the class StandaloneWalRecordsIteratorTest method createWalIterator.

/**
 * Creates WALIterator associated with files inside walDir.
 *
 * @param walDir - path to WAL directory.
 * @return WALIterator associated with files inside walDir.
 * @throws IgniteCheckedException if error occur.
 */
private WALIterator createWalIterator(String walDir) throws IgniteCheckedException {
    IteratorParametersBuilder params = new IteratorParametersBuilder();
    params.ioFactory(new CountedFileIOFactory());
    return new IgniteWalIteratorFactory(log).iterator(params.filesOrDirs(walDir));
}
Also used : IteratorParametersBuilder(org.apache.ignite.internal.processors.cache.persistence.wal.reader.IgniteWalIteratorFactory.IteratorParametersBuilder)

Example 9 with IteratorParametersBuilder

use of org.apache.ignite.internal.processors.cache.persistence.wal.reader.IgniteWalIteratorFactory.IteratorParametersBuilder in project ignite by apache.

the class StandaloneWalRecordsIteratorTest method createWalIterator.

/**
 * @param walDir Wal directory.
 * @param lowBound Low bound.
 * @param highBound High bound.
 * @param strictCheck Strict check.
 */
private WALIterator createWalIterator(String walDir, WALPointer lowBound, WALPointer highBound, boolean strictCheck, IgniteBiPredicate<WALRecord.RecordType, WALPointer> filter) throws IgniteCheckedException {
    IteratorParametersBuilder params = new IteratorParametersBuilder();
    params.ioFactory(new RandomAccessFileIOFactory()).filesOrDirs(walDir).strictBoundsCheck(strictCheck);
    if (lowBound != null)
        params.from(lowBound);
    if (highBound != null)
        params.to(highBound);
    if (filter != null)
        params.filter(filter);
    return new IgniteWalIteratorFactory(log).iterator(params);
}
Also used : IteratorParametersBuilder(org.apache.ignite.internal.processors.cache.persistence.wal.reader.IgniteWalIteratorFactory.IteratorParametersBuilder) RandomAccessFileIOFactory(org.apache.ignite.internal.processors.cache.persistence.file.RandomAccessFileIOFactory)

Example 10 with IteratorParametersBuilder

use of org.apache.ignite.internal.processors.cache.persistence.wal.reader.IgniteWalIteratorFactory.IteratorParametersBuilder in project ignite by apache.

the class StandaloneWalRecordsIteratorTest method listWalFiles.

/**
 * @param walDir Wal directory.
 */
private List<FileDescriptor> listWalFiles(String walDir) throws IgniteCheckedException {
    IteratorParametersBuilder params = new IteratorParametersBuilder();
    params.ioFactory(new RandomAccessFileIOFactory());
    return new IgniteWalIteratorFactory(log).resolveWalFiles(params.filesOrDirs(walDir));
}
Also used : IteratorParametersBuilder(org.apache.ignite.internal.processors.cache.persistence.wal.reader.IgniteWalIteratorFactory.IteratorParametersBuilder) RandomAccessFileIOFactory(org.apache.ignite.internal.processors.cache.persistence.file.RandomAccessFileIOFactory)

Aggregations

IteratorParametersBuilder (org.apache.ignite.internal.processors.cache.persistence.wal.reader.IgniteWalIteratorFactory.IteratorParametersBuilder)17 IgniteWalIteratorFactory (org.apache.ignite.internal.processors.cache.persistence.wal.reader.IgniteWalIteratorFactory)13 GridCommonAbstractTest (org.apache.ignite.testframework.junits.common.GridCommonAbstractTest)11 Test (org.junit.Test)11 Ignite (org.apache.ignite.Ignite)10 WALIterator (org.apache.ignite.internal.pagemem.wal.WALIterator)8 WALRecord (org.apache.ignite.internal.pagemem.wal.record.WALRecord)8 WALPointer (org.apache.ignite.internal.processors.cache.persistence.wal.WALPointer)8 File (java.io.File)7 IgniteEx (org.apache.ignite.internal.IgniteEx)6 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)5 IgniteCheckedException (org.apache.ignite.IgniteCheckedException)5 Serializable (java.io.Serializable)4 ArrayList (java.util.ArrayList)4 EnumMap (java.util.EnumMap)4 HashMap (java.util.HashMap)4 DataEntry (org.apache.ignite.internal.pagemem.wal.record.DataEntry)4 GridCacheOperation (org.apache.ignite.internal.processors.cache.GridCacheOperation)4 Externalizable (java.io.Externalizable)3 IOException (java.io.IOException)3