package com.dianping.puma.storage.cache; import com.dianping.puma.core.event.ChangedEvent; import com.dianping.puma.storage.Sequence; import com.dianping.puma.storage.data.GroupWriteDataManager; import com.dianping.puma.storage.data.WriteDataManager; import java.io.IOException; /** * Dozer @ 2015-12 * mail@dozer.cc * http://www.dozer.cc */ public class CachedGroupWriteDataManager implements WriteDataManager<Sequence, ChangedEvent> { private CachedDataStorage cachedDataStorage; private final GroupWriteDataManager groupWriteDataManager; private final String database; public CachedGroupWriteDataManager(String database) { this.database = database; this.groupWriteDataManager = new GroupWriteDataManager(database); } @Override public Sequence append(ChangedEvent binlogEvent) throws IOException { Sequence sequence = groupWriteDataManager.append(binlogEvent); cachedDataStorage.append(new ChangedEventWithSequence(binlogEvent, sequence)); return sequence; } @Override public void flush() throws IOException { groupWriteDataManager.flush(); } @Override public Sequence position() { return groupWriteDataManager.position(); } @Override public void start() { groupWriteDataManager.start(); this.cachedDataStorage = CachedDataStorageFactory.getInstance().getWriteCachedDataManager(database); } @Override public void stop() { this.cachedDataStorage = null; CachedDataStorageFactory.getInstance().releaseWriteCachedDataManager(database); groupWriteDataManager.stop(); } }