Package voldemort.store

Source Code of voldemort.store.RandomlyFailingDelegatingStore

package voldemort.store;

import java.util.List;

import voldemort.VoldemortException;
import voldemort.server.storage.KeyLockHandle;
import voldemort.utils.ClosableIterator;
import voldemort.utils.Pair;
import voldemort.versioning.Versioned;

public class RandomlyFailingDelegatingStore<K, V, T> extends DelegatingStore<K, V, T> implements
        StorageEngine<K, V, T> {

    private static double FAIL_PROBABILITY = 0.60;
    private final StorageEngine<K, V, T> innerStorageEngine;

    public RandomlyFailingDelegatingStore(StorageEngine<K, V, T> innerStorageEngine) {
        super(innerStorageEngine);
        this.innerStorageEngine = innerStorageEngine;
    }

    @Override
    public ClosableIterator<Pair<K, Versioned<V>>> entries() {
        return new ClosableIterator<Pair<K, Versioned<V>>>() {

            ClosableIterator<Pair<K, Versioned<V>>> iterator = innerStorageEngine.entries();

            @Override
            public void close() {
                iterator.close();
            }

            @Override
            public boolean hasNext() {
                return iterator.hasNext();
            }

            @Override
            public Pair<K, Versioned<V>> next() {
                if(Math.random() > FAIL_PROBABILITY)
                    return iterator.next();

                throw new VoldemortException("Failing now !!");
            }

            @Override
            public void remove() {}
        };
    }

    @Override
    public ClosableIterator<K> keys() {
        return new ClosableIterator<K>() {

            ClosableIterator<K> iterator = innerStorageEngine.keys();

            @Override
            public void close() {
                iterator.close();
            }

            @Override
            public boolean hasNext() {
                return iterator.hasNext();
            }

            @Override
            public K next() {
                if(Math.random() > FAIL_PROBABILITY)
                    return iterator.next();

                throw new VoldemortException("Failing now !!");
            }

            @Override
            public void remove() {}
        };
    }

    @Override
    public ClosableIterator<Pair<K, Versioned<V>>> entries(final int partition) {
        return new ClosableIterator<Pair<K, Versioned<V>>>() {

            ClosableIterator<Pair<K, Versioned<V>>> iterator = innerStorageEngine.entries(partition);

            @Override
            public void close() {
                iterator.close();
            }

            @Override
            public boolean hasNext() {
                return iterator.hasNext();
            }

            @Override
            public Pair<K, Versioned<V>> next() {
                if(Math.random() > FAIL_PROBABILITY)
                    return iterator.next();

                throw new VoldemortException("Failing now !!");
            }

            @Override
            public void remove() {}
        };
    }

    @Override
    public ClosableIterator<K> keys(final int partition) {
        return new ClosableIterator<K>() {

            ClosableIterator<K> iterator = innerStorageEngine.keys(partition);

            @Override
            public void close() {
                iterator.close();
            }

            @Override
            public boolean hasNext() {
                return iterator.hasNext();
            }

            @Override
            public K next() {
                if(Math.random() > FAIL_PROBABILITY)
                    return iterator.next();

                throw new VoldemortException("Failing now !!");
            }

            @Override
            public void remove() {}
        };
    }

    @Override
    public void truncate() {
        if(Math.random() > FAIL_PROBABILITY) {
            innerStorageEngine.truncate();
        }

        throw new VoldemortException("Failing now !!");
    }

    @Override
    public boolean isPartitionAware() {
        return innerStorageEngine.isPartitionAware();
    }

    @Override
    public boolean isPartitionScanSupported() {
        return innerStorageEngine.isPartitionScanSupported();
    }

    @Override
    public boolean beginBatchModifications() {
        return false;
    }

    @Override
    public boolean endBatchModifications() {
        return false;
    }

    @Override
    public List<Versioned<V>> multiVersionPut(K key, List<Versioned<V>> values) {
        return innerStorageEngine.multiVersionPut(key, values);
    }

    @Override
    public KeyLockHandle<V> getAndLock(K key) {
        return innerStorageEngine.getAndLock(key);
    }

    @Override
    public void putAndUnlock(K key, KeyLockHandle<V> handle) {
        innerStorageEngine.putAndUnlock(key, handle);
    }

    @Override
    public void releaseLock(KeyLockHandle<V> handle) {
        innerStorageEngine.releaseLock(handle);
    }
}
TOP

Related Classes of voldemort.store.RandomlyFailingDelegatingStore

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.