package voldemort.server.protocol;
import voldemort.VoldemortException;
import voldemort.client.protocol.RequestFormatType;
import voldemort.common.service.SchedulerService;
import voldemort.server.StoreRepository;
import voldemort.server.VoldemortConfig;
import voldemort.server.VoldemortServer;
import voldemort.server.protocol.admin.AdminServiceRequestHandler;
import voldemort.server.protocol.admin.AsyncOperationService;
import voldemort.server.rebalance.Rebalancer;
import voldemort.server.storage.StorageService;
import voldemort.store.ErrorCodeMapper;
import voldemort.store.metadata.MetadataStore;
/**
* A factory that gets the appropriate request handler for a given
* {@link voldemort.client.protocol.RequestFormatType}.
*
*
*/
public class SocketRequestHandlerFactory implements RequestHandlerFactory {
private final ClientRequestHandlerFactory clientFactory;
private final StorageService storage;
private final StoreRepository repository;
private final MetadataStore metadata;
private final VoldemortConfig voldemortConfig;
private final AsyncOperationService asyncService;
private final SchedulerService scheduler;
private final Rebalancer rebalancer;
private final VoldemortServer server;
public SocketRequestHandlerFactory(StorageService storageService,
StoreRepository repository,
MetadataStore metadata,
VoldemortConfig voldemortConfig,
AsyncOperationService asyncService,
SchedulerService scheduler,
Rebalancer rebalancer,
VoldemortServer server) {
this.clientFactory = new ClientRequestHandlerFactory(repository);
this.storage = storageService;
this.repository = repository;
this.metadata = metadata;
this.voldemortConfig = voldemortConfig;
this.asyncService = asyncService;
this.scheduler = scheduler;
this.rebalancer = rebalancer;
this.server = server;
}
@Override
public boolean shareReadWriteBuffer() {
return false;
}
@Override
public RequestHandler getRequestHandler(RequestFormatType type) {
if(type == RequestFormatType.ADMIN_PROTOCOL_BUFFERS) {
return new AdminServiceRequestHandler(new ErrorCodeMapper(),
storage,
repository,
metadata,
voldemortConfig,
asyncService,
scheduler,
rebalancer,
server);
}
try {
return clientFactory.getRequestHandler(type);
} catch(VoldemortException e) {
}
throw new VoldemortException("Unknown wire format in " + this.getClass().getName()
+ " Type : " + type);
}
}