Search in sources :

Example 1 with BadKey

use of voldemort.utils.ConsistencyFix.BadKey in project voldemort by voldemort.

the class ConsistencyFixTest method testBadKeyWriter.

@Test
public void testBadKeyWriter() {
    String tmpDir = TestUtils.createTempDir().getAbsolutePath();
    String fileName = tmpDir + "BadKeyFile";
    // Set up bad key writer
    BlockingQueue<BadKeyStatus> bq = new ArrayBlockingQueue<BadKeyStatus>(5);
    ExecutorService badKeyWriterService = Executors.newSingleThreadExecutor();
    BadKeyWriter badKeyWriter = new BadKeyWriter(fileName, bq);
    badKeyWriterService.submit(badKeyWriter);
    // Enqueue stuff for bad key writer to write
    try {
        for (int i = 0; i < 100; ++i) {
            BadKey badKey = new BadKey(Integer.toHexString(i), Integer.toHexString(i) + "\n");
            bq.put(new BadKeyStatus(badKey, ConsistencyFix.Status.REPAIR_EXCEPTION));
        }
        // Poison bad key writer
        bq.put(new BadKeyStatus());
    } catch (InterruptedException e) {
        e.printStackTrace();
        fail("Unexpected exception");
    }
    // wait for bad key writer to shutdown
    badKeyWriterService.shutdown();
    try {
        badKeyWriterService.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
    } catch (InterruptedException e) {
        e.printStackTrace();
        fail("Unexpected exception");
    }
    assertFalse(badKeyWriter.hasException());
    // Read output file & verify.
    try {
        BufferedReader fileReader = new BufferedReader(new FileReader(fileName));
        int i = 0;
        for (String keyLine = fileReader.readLine(); keyLine != null; keyLine = fileReader.readLine()) {
            assertEquals(keyLine, Integer.toHexString(i));
            i++;
        }
    } catch (FileNotFoundException fnfe) {
        fnfe.printStackTrace();
        fail("Unexpected exception");
    } catch (IOException ioe) {
        ioe.printStackTrace();
        fail("Unexpected exception");
    }
}
Also used : BadKeyStatus(voldemort.utils.ConsistencyFix.BadKeyStatus) FileNotFoundException(java.io.FileNotFoundException) BadKeyWriter(voldemort.utils.ConsistencyFix.BadKeyWriter) IOException(java.io.IOException) ArrayBlockingQueue(java.util.concurrent.ArrayBlockingQueue) ExecutorService(java.util.concurrent.ExecutorService) BufferedReader(java.io.BufferedReader) FileReader(java.io.FileReader) BadKey(voldemort.utils.ConsistencyFix.BadKey) Test(org.junit.Test)

Example 2 with BadKey

use of voldemort.utils.ConsistencyFix.BadKey in project voldemort by voldemort.

the class ConsistencyFixTest method testBadKeyResult.

@Test
public void testBadKeyResult() {
    BadKey badKey = new BadKey("0101", "0101\n");
    ConsistencyFix.BadKeyStatus bkr1 = new BadKeyStatus(badKey, ConsistencyFix.Status.SUCCESS);
    assertFalse(bkr1.isPoison());
    assertEquals(bkr1.getBadKey().getKeyInHexFormat(), "0101");
    assertEquals(bkr1.getBadKey().getReaderInput(), "0101\n");
    assertEquals(bkr1.getStatus(), ConsistencyFix.Status.SUCCESS);
    ConsistencyFix.BadKeyStatus bkr2 = new BadKeyStatus();
    assertTrue(bkr2.isPoison());
    assertEquals(bkr2.getBadKey(), null);
    assertEquals(bkr2.getStatus(), null);
}
Also used : BadKeyStatus(voldemort.utils.ConsistencyFix.BadKeyStatus) BadKeyStatus(voldemort.utils.ConsistencyFix.BadKeyStatus) BadKey(voldemort.utils.ConsistencyFix.BadKey) Test(org.junit.Test)

Example 3 with BadKey

use of voldemort.utils.ConsistencyFix.BadKey in project voldemort by voldemort.

the class ConsistencyFixWorkerTest method testRepair.

public void testRepair(int[] putNodes, boolean orphan) {
    byte[] bKey = TestUtils.randomBytes(10);
    String hexKey = ByteUtils.toHexString(bKey);
    ByteArray baKey = new ByteArray(bKey);
    BadKey badKey;
    QueryKeyResult queryKeyResult;
    if (!orphan) {
        badKey = new BadKey(hexKey, hexKey + "\n");
        queryKeyResult = null;
    } else {
        StringBuilder orphanInput = new StringBuilder();
        orphanInput.append(hexKey + "," + "1\n");
        List<Versioned<byte[]>> values = new ArrayList<Versioned<byte[]>>(0);
        int arbitraryNodeId = 2;
        Versioned<byte[]> versioned = TestUtils.getVersioned(TestUtils.randomBytes(25), arbitraryNodeId);
        orphanInput.append(ByteUtils.toHexString(versioned.getValue()));
        orphanInput.append("," + versioned.toString() + "\n");
        values.add(versioned);
        badKey = new BadKey(hexKey, orphanInput.toString());
        queryKeyResult = new QueryKeyResult(baKey, values);
    }
    Versioned<byte[]> value = TestUtils.getVersioned(TestUtils.randomBytes(25), 0);
    String url = ConsistencyFixTest.setUpCluster();
    ConsistencyFix consistencyFix = new ConsistencyFix(url, ConsistencyFixTest.STORE_NAME, 100, 100, false, false);
    AdminClient adminClient = consistencyFix.getAdminClient();
    System.out.println("Initial get");
    for (int i = 0; i < 4; ++i) {
        List<Versioned<byte[]>> results;
        results = adminClient.storeOps.getNodeKey(ConsistencyFixTest.STORE_NAME, i, baKey);
        assertTrue(results.size() == 0);
    }
    System.out.println("Puts");
    for (int putNode : putNodes) {
        NodeValue<ByteArray, byte[]> nodeKeyValue;
        nodeKeyValue = new NodeValue<ByteArray, byte[]>(putNode, baKey, value);
        adminClient.storeOps.putNodeKeyValue(ConsistencyFixTest.STORE_NAME, nodeKeyValue);
    }
    // Construct normal consistency fix worker
    ConsistencyFixWorker consistencyFixWorker = null;
    if (!orphan) {
        consistencyFixWorker = new ConsistencyFixWorker(badKey, consistencyFix, null);
    } else {
        consistencyFixWorker = new ConsistencyFixWorker(badKey, consistencyFix, null, queryKeyResult);
    }
    consistencyFixWorker.run();
    System.out.println("Second get");
    int expectedNumVersions = 0;
    if (putNodes.length > 0) {
        expectedNumVersions++;
    }
    if (orphan) {
        expectedNumVersions++;
    }
    for (int i = 0; i < 4; ++i) {
        System.out.println("Node : " + i);
        List<Versioned<byte[]>> results;
        results = adminClient.storeOps.getNodeKey(ConsistencyFixTest.STORE_NAME, i, baKey);
        for (Versioned<byte[]> v : results) {
            System.out.println("\t" + v.getVersion());
        }
        assertTrue(results.size() == expectedNumVersions);
    }
}
Also used : Versioned(voldemort.versioning.Versioned) ArrayList(java.util.ArrayList) QueryKeyResult(voldemort.client.protocol.admin.QueryKeyResult) BadKey(voldemort.utils.ConsistencyFix.BadKey) AdminClient(voldemort.client.protocol.admin.AdminClient)

Aggregations

BadKey (voldemort.utils.ConsistencyFix.BadKey)3 Test (org.junit.Test)2 BadKeyStatus (voldemort.utils.ConsistencyFix.BadKeyStatus)2 BufferedReader (java.io.BufferedReader)1 FileNotFoundException (java.io.FileNotFoundException)1 FileReader (java.io.FileReader)1 IOException (java.io.IOException)1 ArrayList (java.util.ArrayList)1 ArrayBlockingQueue (java.util.concurrent.ArrayBlockingQueue)1 ExecutorService (java.util.concurrent.ExecutorService)1 AdminClient (voldemort.client.protocol.admin.AdminClient)1 QueryKeyResult (voldemort.client.protocol.admin.QueryKeyResult)1 BadKeyWriter (voldemort.utils.ConsistencyFix.BadKeyWriter)1 Versioned (voldemort.versioning.Versioned)1