LoopbackBlobStore.java
package doss.net;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import org.apache.thrift.transport.TTransportException;
import doss.BlobStore;
import doss.core.WrappedBlobStore;
import doss.local.TempBlobStore;
public class LoopbackBlobStore extends WrappedBlobStore {
private final BlobStoreServer server;
private LoopbackBlobStore(BlobStoreServer server, RemoteBlobStore client) {
super(client);
this.server = server;
}
@Override
public void close() {
try {
super.close();
} finally {
server.close();
}
}
/**
* Creates a LoopbackBlobStore wrapping a TempBlobStore. For testing only.
*/
public static BlobStore open() throws IOException, TTransportException {
return open(TempBlobStore.open());
}
public static BlobStore open(BlobStore wrapped) throws IOException,
TTransportException {
ServerSocket serverSocket = new ServerSocket(0);
BlobStoreServer server = new BlobStoreServer(wrapped, serverSocket);
Thread serverThread = new Thread(server);
serverThread.start();
Socket clientSocket = new Socket("127.0.0.1",
serverSocket.getLocalPort());
RemoteBlobStore client = new RemoteBlobStore(clientSocket);
return new LoopbackBlobStore(server, client);
}
}