package com.jivesoftware.os.amza.service;
import com.google.common.collect.Maps;
import com.jivesoftware.os.amza.api.wal.MemoryWALIndexProvider;
import com.jivesoftware.os.amza.api.wal.NoOpWALIndexProvider;
import com.jivesoftware.os.amza.api.wal.WALIndexProvider;
import com.jivesoftware.os.amza.service.storage.binary.BinaryRowIOProvider;
import com.jivesoftware.os.amza.service.storage.binary.MemoryBackedRowIOProvider;
import com.jivesoftware.os.amza.service.storage.binary.RowIOProvider;
import java.util.Map;
/**
* @author jonathan.colt
*/
public class WALIndexProviderRegistry {
private final Map<String, WALIndexProvider<?>> indexRegistry = Maps.newConcurrentMap();
private final Map<String, RowIOProvider> rowIORegistry = Maps.newConcurrentMap();
public WALIndexProviderRegistry(MemoryBackedRowIOProvider ephemeralRowIOProvider, BinaryRowIOProvider persistentRowIOProvider) {
//public WALIndexProviderRegistry(String[] workingDirectories, IoStats ioStats, int corruptionParanoiaFactor, boolean useMemMap) {
register(new MemoryWALIndexProvider("memory_ephemeral"), ephemeralRowIOProvider);
register(new MemoryWALIndexProvider("memory_persistent"), persistentRowIOProvider);
register(new NoOpWALIndexProvider("noop_persistent"), persistentRowIOProvider);
}
public WALIndexProvider<?> getWALIndexProvider(String name) throws Exception {
// TODO figure out how to get storageDescriptor into WALIndexProvider
// TODO add loading of WALIndexProvider based on classForName crap! (We love plugins)
return indexRegistry.get(name);
}
public RowIOProvider getRowIOProvider(String name) throws Exception {
return rowIORegistry.get(name);
}
final public void register(WALIndexProvider<?> indexProvider, RowIOProvider rowIOProvider) {
indexRegistry.put(indexProvider.getName(), indexProvider);
rowIORegistry.put(indexProvider.getName(), rowIOProvider);
}
public void start() {
for (WALIndexProvider<?> provider : indexRegistry.values()) {
provider.start();
}
}
public void stop() {
for (WALIndexProvider<?> provider : indexRegistry.values()) {
provider.stop();
}
}
}