package com.jivesoftware.os.amza.api.wal;
import com.jivesoftware.os.amza.api.scan.CompactionWALIndex;
import com.jivesoftware.os.amza.api.stream.KeyContainedStream;
import com.jivesoftware.os.amza.api.stream.KeyValuePointerStream;
import com.jivesoftware.os.amza.api.stream.KeyValues;
import com.jivesoftware.os.amza.api.stream.MergeTxKeyPointerStream;
import com.jivesoftware.os.amza.api.stream.TxFpStream;
import com.jivesoftware.os.amza.api.stream.TxKeyPointers;
import com.jivesoftware.os.amza.api.stream.UnprefixedWALKeys;
import com.jivesoftware.os.amza.api.stream.WALKeyPointerStream;
import com.jivesoftware.os.amza.api.stream.WALKeyPointers;
import com.jivesoftware.os.amza.api.stream.WALMergeKeyPointerStream;
import java.util.Map;
import java.util.concurrent.Callable;
/**
* @author jonathan.colt
*/
public class NoOpWALIndex implements WALIndex {
private final String providerName;
private volatile int currentStripe;
public NoOpWALIndex(String providerName, int currentStripe) {
this.providerName = providerName;
this.currentStripe = currentStripe;
}
@Override
public int getStripe() {
return currentStripe;
}
@Override
public String getProviderName() {
return providerName;
}
@Override
public boolean merge(TxKeyPointers pointers, MergeTxKeyPointerStream stream) throws Exception {
return pointers.consume((txId, prefix, key, value, timestamp, tombstoned, version, fp) -> {
if (stream != null) {
if (!stream.stream(WALMergeKeyPointerStream.ignored, txId, prefix, key, timestamp, tombstoned, version, fp)) {
return false;
}
}
return true;
});
}
@Override
public boolean getPointer(byte[] prefix, byte[] key, WALKeyPointerStream stream) throws Exception {
return stream.stream(prefix, key, -1, false, -1, -1, false, null);
}
@Override
public boolean getPointers(byte[] prefix, UnprefixedWALKeys keys, WALKeyPointerStream stream) throws Exception {
return keys.consume((key) -> stream.stream(prefix, key, -1, false, -1, -1, false, null));
}
@Override
public boolean getPointers(KeyValues keyValues, KeyValuePointerStream stream) throws Exception {
return keyValues.consume((prefix, key, value, valueTimestamp, valueTombstoned, valueVersion)
-> stream.stream(prefix, key, value, valueTimestamp, valueTombstoned, valueVersion, -1, false, -1, -1, false, null));
}
@Override
public boolean containsKeys(byte[] prefix, UnprefixedWALKeys keys, KeyContainedStream stream) throws Exception {
return keys.consume((key) -> stream.stream(prefix, key, false, -1, -1));
}
@Override
public boolean exists() throws Exception {
return true;
}
@Override
public long deltaCount(WALKeyPointers keyPointers) throws Exception {
long[] delta = new long[1];
boolean completed = keyPointers.consume((prefix, key, timestamp, tombstoned, version, fp, hasValue, value) -> {
if (!tombstoned) {
delta[0]++;
}
return true;
});
if (!completed) {
return -1;
}
return delta[0];
}
// @Override
// public long size() throws Exception {
// return 0;
// }
@Override
public void commit(boolean fsync) throws Exception {
}
@Override
public void close() throws Exception {
}
@Override
public CompactionWALIndex startCompaction(boolean hasActive, int compactionStripe) throws Exception {
return new CompactionWALIndex() {
@Override
public boolean merge(TxKeyPointers pointers) throws Exception {
return true;
}
@Override
public void commit(boolean fsync, Callable<Void> commit) throws Exception {
currentStripe = compactionStripe;
}
@Override
public void abort() throws Exception {
}
};
}
@Override
public boolean takePrefixUpdatesSince(byte[] prefix, long sinceTransactionId, TxFpStream txFpStream) throws Exception {
return true;
}
@Override
public boolean rowScan(WALKeyPointerStream stream, boolean hydrateValues) throws Exception {
return true;
}
@Override
public boolean rangeScan(byte[] fromPrefix,
byte[] fromKey,
byte[] toPrefix,
byte[] toKey,
WALKeyPointerStream stream,
boolean hydrateValues) throws Exception {
return true;
}
@Override
public void updatedProperties(Map<String, String> properties) {
}
@Override
public void delete() throws Exception {
}
}