Search in sources :

Example 1 with ProcedureIterator

use of org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureIterator in project hbase by apache.

the class TestWALProcedureStore method testWalReplayOrder_ABC_BAD.

@Test(timeout = 60000)
public void testWalReplayOrder_ABC_BAD() throws Exception {
    /*
     * | A B C | -> | B A D |
     */
    TestProcedure a = new TestProcedure(1, 0);
    TestProcedure b = new TestProcedure(2, 1);
    TestProcedure c = new TestProcedure(3, 2);
    TestProcedure d = new TestProcedure(4, 0);
    procStore.insert(a, null);
    a.addStackId(0);
    procStore.update(a);
    procStore.insert(a, new Procedure[] { b });
    b.addStackId(1);
    procStore.update(b);
    procStore.insert(b, new Procedure[] { c });
    b.addStackId(2);
    procStore.update(b);
    procStore.rollWriterForTesting();
    b.addStackId(3);
    procStore.update(b);
    a.addStackId(4);
    procStore.update(a);
    procStore.insert(d, null);
    d.addStackId(0);
    procStore.update(d);
    storeRestart(new ProcedureStore.ProcedureLoader() {

        @Override
        public void setMaxProcId(long maxProcId) {
            assertEquals(4, maxProcId);
        }

        @Override
        public void load(ProcedureIterator procIter) throws IOException {
            assertTrue(procIter.hasNext());
            assertEquals(4, procIter.nextAsProcedureInfo().getProcId());
            // TODO: This will be multiple call once we do fast-start
            //assertFalse(procIter.hasNext());
            assertTrue(procIter.hasNext());
            assertEquals(1, procIter.nextAsProcedureInfo().getProcId());
            assertTrue(procIter.hasNext());
            assertEquals(2, procIter.nextAsProcedureInfo().getProcId());
            assertTrue(procIter.hasNext());
            assertEquals(3, procIter.nextAsProcedureInfo().getProcId());
            assertFalse(procIter.hasNext());
        }

        @Override
        public void handleCorrupted(ProcedureIterator procIter) throws IOException {
            assertFalse(procIter.hasNext());
        }
    });
}
Also used : TestProcedure(org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility.TestProcedure) ProcedureStore(org.apache.hadoop.hbase.procedure2.store.ProcedureStore) ProcedureIterator(org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureIterator) IOException(java.io.IOException) Test(org.junit.Test)

Example 2 with ProcedureIterator

use of org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureIterator in project hbase by apache.

the class TestWALProcedureStore method testWalReplayOrder_AB_A.

@Test(timeout = 60000)
public void testWalReplayOrder_AB_A() throws Exception {
    /*
     * | A B | -> | A |
     */
    TestProcedure a = new TestProcedure(1, 0);
    TestProcedure b = new TestProcedure(2, 1);
    procStore.insert(a, null);
    a.addStackId(0);
    procStore.update(a);
    procStore.insert(a, new Procedure[] { b });
    b.addStackId(1);
    procStore.update(b);
    procStore.rollWriterForTesting();
    a.addStackId(2);
    procStore.update(a);
    storeRestart(new ProcedureStore.ProcedureLoader() {

        @Override
        public void setMaxProcId(long maxProcId) {
            assertEquals(2, maxProcId);
        }

        @Override
        public void load(ProcedureIterator procIter) throws IOException {
            assertTrue(procIter.hasNext());
            assertEquals(1, procIter.nextAsProcedureInfo().getProcId());
            assertTrue(procIter.hasNext());
            assertEquals(2, procIter.nextAsProcedureInfo().getProcId());
            assertFalse(procIter.hasNext());
        }

        @Override
        public void handleCorrupted(ProcedureIterator procIter) throws IOException {
            assertFalse(procIter.hasNext());
        }
    });
}
Also used : TestProcedure(org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility.TestProcedure) ProcedureStore(org.apache.hadoop.hbase.procedure2.store.ProcedureStore) ProcedureIterator(org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureIterator) IOException(java.io.IOException) Test(org.junit.Test)

Example 3 with ProcedureIterator

use of org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureIterator in project hbase by apache.

the class ProcedureExecutor method load.

private void load(final boolean abortOnCorruption) throws IOException {
    Preconditions.checkArgument(completed.isEmpty(), "completed not empty");
    Preconditions.checkArgument(rollbackStack.isEmpty(), "rollback state not empty");
    Preconditions.checkArgument(procedures.isEmpty(), "procedure map not empty");
    Preconditions.checkArgument(scheduler.size() == 0, "run queue not empty");
    store.load(new ProcedureStore.ProcedureLoader() {

        @Override
        public void setMaxProcId(long maxProcId) {
            assert lastProcId.get() < 0 : "expected only one call to setMaxProcId()";
            LOG.debug("Load maxProcId=" + maxProcId);
            lastProcId.set(maxProcId);
        }

        @Override
        public void load(ProcedureIterator procIter) throws IOException {
            loadProcedures(procIter, abortOnCorruption);
        }

        @Override
        public void handleCorrupted(ProcedureIterator procIter) throws IOException {
            int corruptedCount = 0;
            while (procIter.hasNext()) {
                ProcedureInfo proc = procIter.nextAsProcedureInfo();
                LOG.error("Corrupt " + proc);
                corruptedCount++;
            }
            if (abortOnCorruption && corruptedCount > 0) {
                throw new IOException("found " + corruptedCount + " corrupted procedure(s) on replay");
            }
        }
    });
}
Also used : ProcedureInfo(org.apache.hadoop.hbase.ProcedureInfo) ProcedureStore(org.apache.hadoop.hbase.procedure2.store.ProcedureStore) ProcedureIterator(org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureIterator) IllegalArgumentIOException(org.apache.hadoop.hbase.exceptions.IllegalArgumentIOException) IOException(java.io.IOException)

Example 4 with ProcedureIterator

use of org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureIterator in project hbase by apache.

the class ProcedureWALFormatReader method finish.

public void finish() throws IOException {
    // notify the loader about the max proc ID
    loader.setMaxProcId(maxProcId);
    // fetch the procedure ready to run.
    ProcedureIterator procIter = procedureMap.fetchReady();
    if (procIter != null)
        loader.load(procIter);
    // remaining procedures have missing link or dependencies
    // consider them as corrupted, manual fix is probably required.
    procIter = procedureMap.fetchAll();
    if (procIter != null)
        loader.handleCorrupted(procIter);
}
Also used : ProcedureIterator(org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureIterator)

Aggregations

ProcedureIterator (org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureIterator)4 IOException (java.io.IOException)3 ProcedureStore (org.apache.hadoop.hbase.procedure2.store.ProcedureStore)3 TestProcedure (org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility.TestProcedure)2 Test (org.junit.Test)2 ProcedureInfo (org.apache.hadoop.hbase.ProcedureInfo)1 IllegalArgumentIOException (org.apache.hadoop.hbase.exceptions.IllegalArgumentIOException)1