package org.teiid.test.bufferservice;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import org.teiid.common.buffer.CacheEntry;
import org.teiid.common.buffer.FileStore;
import org.teiid.common.buffer.Serializer;
import org.teiid.common.buffer.StorageManager;
import org.teiid.common.buffer.impl.BufferFrontedFileStoreCache;
import org.teiid.common.buffer.impl.MemoryStorageManager;
import org.teiid.common.buffer.impl.OutOfDiskException;
import org.teiid.common.buffer.impl.SplittableStorageManager;
import org.teiid.core.TeiidComponentException;
public class BufferFrontedFileStoreCacheTest {
private static BufferFrontedFileStoreCache cache;
public static void main(String[] args) throws TeiidComponentException {
testAddGetMultiBlock();
}
static void testAddGetMultiBlock() throws TeiidComponentException {
cache = createLayeredCache(1 << 26, 1 << 26, true, true);
CacheEntry entry = new CacheEntry(2l);
Serializer<Integer> s = new SimpleSerializer();
cache.createCacheGroup(s.getId());
Integer cacheObject = Integer.valueOf(2);
entry.setObject(cacheObject);
cache.addToCacheGroup(s.getId(), entry.getId());
cache.add(entry, s);
// entry =
//
// System.out.println(cache);
}
private static BufferFrontedFileStoreCache createLayeredCache(int bufferSpace, int objectSize, boolean memStorage, boolean allocate) throws TeiidComponentException {
BufferFrontedFileStoreCache fsc = new BufferFrontedFileStoreCache();
fsc.setMemoryBufferSpace(bufferSpace);
fsc.setMaxStorageObjectSize(objectSize);
fsc.setDirect(false);
if (memStorage) {
SplittableStorageManager ssm = new SplittableStorageManager(new MemoryStorageManager());
ssm.setMaxFileSizeDirect(MemoryStorageManager.MAX_FILE_SIZE);
fsc.setStorageManager(ssm);
} else {
StorageManager sm = new StorageManager() {
@Override
public void initialize() throws TeiidComponentException {
}
@Override
public FileStore createFileStore(String name) {
return new FileStore() {
@Override
public void setLength(long length) throws IOException {
throw new OutOfDiskException(null);
}
@Override
protected void removeDirect() {
}
@Override
protected int readWrite(long fileOffset, byte[] b, int offSet, int length,
boolean write) throws IOException {
return 0;
}
@Override
public long getLength() {
return 0;
}
};
}
};
fsc.setStorageManager(sm);
}
fsc.initialize();
return fsc;
}
private final static class SimpleSerializer implements Serializer<Integer> {
@Override
public Integer deserialize(ObjectInput ois)
throws IOException, ClassNotFoundException {
Integer result = ois.readInt();
for (int i = 0; i < result; i++) {
System.out.println(ois.readInt());
}
return result;
}
@Override
public Long getId() {
return 1l;
}
@Override
public void serialize(Integer obj, ObjectOutput oos)
throws IOException {
oos.writeInt(obj);
for (int i = 0; i < obj; i++) {
oos.writeInt(i);
}
}
@Override
public boolean useSoftCache() {
return false;
}
}
}