use of com.linkedin.databus2.core.container.request.RequestProcessingException in project databus by linkedin.
the class ClientStateRequestProcessor method processRegistrationInfo.
/**
* Provides an individual registrations details. The individual registration can be
* either that of V2/V3 and top-level or child. Top-level registrations are those that
* were created as a result of one of "registerXXX()" calls on databus-client. In the
* case of multi-partition registrations (like MPRegistration, V2/V3 CLB), only the
* parent registration is considered the top-level registration. Per-partition (child)
* registrations which were created as part of partition migration are NOT top-level
* registrations. The output format can be different depending on whether it is a V2/V3
* as we are dumping the entire Registration in the case of V2. In the case of V3, we
* create an intermediate objects. These are legacy formats which when changed could
* cause the integ-tests to fail.
*
* @param request
* DatabusRequest corresponding to the REST call.
* @throws IOException
* if unable to write to output channel.
* @throws RequestProcessingException
* when registration could not be located.
*/
private void processRegistrationInfo(DatabusRequest request) throws IOException, RequestProcessingException {
boolean found = true;
// V2 Registration lookup first
RegistrationStatsInfo regStatsInfo = null;
try {
DatabusRegistration r = findV2Registration(request, REGISTRATION_KEY_PREFIX);
writeJsonObjectToResponse(r, request);
} catch (RequestProcessingException ex) {
found = false;
}
// V3 Registration lookup if not found
if (!found) {
// if
DatabusV3Registration reg = findV3Registration(request, REGISTRATION_KEY_PREFIX);
// reg
// is
// null,
// the
// callee
// throws
// an
// exception.
DatabusSourcesConnection sourcesConn = _client.getDatabusSourcesConnection(reg.getRegistrationId().getId());
regStatsInfo = new RegistrationStatsInfo(reg, sourcesConn);
writeJsonObjectToResponse(regStatsInfo, request);
}
}
use of com.linkedin.databus2.core.container.request.RequestProcessingException in project databus by linkedin.
the class ClientStateRequestProcessor method pauseResumeRegistration.
/**
* Pause or resume a V2 or V3 registration. The registration can be a top-level or
* child-level registration Top-level registrations are those that were created as a
* result of one of "registerXXX()" calls on databus-client. In the case of
* multi-partition registrations (like MPRegistration, V2/V3 CLB), only the parent
* registration is considered the top-level registration. Per-partition (child)
* registrations which were created as part of partition migration are NOT top-level
* registrations.
*
* @param request
* Databus request corresponding to the REST call.
* @param doPause
* true if wanted to pause, false if to be resumed
* @throws IOException
* if unable to write output to channel
* @throws RequestProcessingException
* when registration could not be found.
*/
private void pauseResumeRegistration(DatabusRequest request, boolean doPause) throws IOException, RequestProcessingException {
DatabusRegistration r = null;
DatabusV3Registration r2 = null;
boolean found = true;
boolean isRunning = false;
boolean isPaused = false;
boolean isSuspended = false;
RegistrationId regId = null;
RequestProcessingException rEx = null;
RegStatePair regStatePair = null;
try {
r = findV2Registration(request, PAUSE_REGISTRATION);
isRunning = r.getState().isRunning();
isPaused = (r.getState() == DatabusRegistration.RegistrationState.PAUSED);
isSuspended = (r.getState() == DatabusRegistration.RegistrationState.SUSPENDED_ON_ERROR);
regId = r.getRegistrationId();
} catch (RequestProcessingException ex) {
found = false;
rEx = ex;
}
if (!found) {
try {
r2 = findV3Registration(request, PAUSE_REGISTRATION);
found = true;
isRunning = r2.getState().isRunning();
isPaused = (r2.getState() == RegistrationState.PAUSED);
isSuspended = (r2.getState() == RegistrationState.SUSPENDED_ON_ERROR);
regId = r.getRegistrationId();
} catch (RequestProcessingException ex) {
found = false;
rEx = ex;
}
}
if (!found)
throw rEx;
LOG.info("REST call to pause registration : " + regId);
if (isRunning) {
if (doPause) {
if (!isPaused) {
if (null != r) {
r.pause();
regStatePair = new RegStatePair(r.getState(), r.getRegistrationId());
} else {
r2.pause();
regStatePair = new RegStatePair(r2.getState().name(), r2.getRegistrationId());
}
}
} else {
if (isPaused || isSuspended) {
if (null != r) {
r.resume();
regStatePair = new RegStatePair(r.getState(), r.getRegistrationId());
} else {
r2.resume();
regStatePair = new RegStatePair(r2.getState().name(), r2.getRegistrationId());
}
}
}
}
writeJsonObjectToResponse(regStatePair, request);
}
use of com.linkedin.databus2.core.container.request.RequestProcessingException in project databus by linkedin.
the class ConsumerPauseRequestProcessor method process.
@Override
public DatabusRequest process(DatabusRequest request) throws IOException, RequestProcessingException {
String action = request.getParams().getProperty(DatabusRequest.PATH_PARAM_NAME, "");
if (action.equals("pause")) {
_pauseConsumer.pause();
request.getResponseContent().write(ByteBuffer.wrap("{\"pauseConsumer\":\"set-pause\"}".getBytes(Charset.defaultCharset())));
} else if (action.equals("resume")) {
_pauseConsumer.resume();
request.getResponseContent().write(ByteBuffer.wrap("{\"pauseConsumer\":\"set-resume\"}".getBytes(Charset.defaultCharset())));
} else {
throw new InvalidRequestParamValueException(COMMAND_NAME, "request path", action);
}
return request;
}
use of com.linkedin.databus2.core.container.request.RequestProcessingException in project databus by linkedin.
the class ClientStateRequestProcessor method processPartition.
/**
* Provide a partition information belonging to a V2/V3 client cluster and hosted in
* this client instance
*
* @param request
* DatabusRequest corresponding to the REST call.
* @throws IOException
* when unable to write to output channel.
* @throws RequestProcessingException
* when cluster not found or when partition is not hosted in this instance
*/
private void processPartition(DatabusRequest request) throws IOException, RequestProcessingException {
String category = request.getParams().getProperty(DatabusRequest.PATH_PARAM_NAME);
String clusterPartitionName = category.substring(CLIENT_CLUSTER_PARTITION_REG_KEY.length());
/**
* API: curl
* http://<HOST>:<PORT>/clientState/clientPartition/<CLUSTER_NAME>/<PARTITION> curl
* http://<HOST>:<PORT>/clientState/clientPartition/<CLUSTER_NAME>:<PARTITION>
*/
String[] toks = clusterPartitionName.split("[:/]");
if (toks.length != 2)
throw new RequestProcessingException("Cluster and partition info are expected to be in pattern = <cluster>[/:]<partition> but was " + clusterPartitionName);
RegInfo reg = null;
boolean found = true;
// Try as a V2 Partition
try {
reg = getV2PartitionRegistration(toks[0], new Long(toks[1]));
} catch (RequestProcessingException ex) {
found = false;
}
// If not found, try as V3
if (!found) {
reg = getV3PartitionRegistration(toks[0], new Long(toks[1]));
}
writeJsonObjectToResponse(reg, request);
}
use of com.linkedin.databus2.core.container.request.RequestProcessingException in project databus by linkedin.
the class ClientStatsRequestProcessor method processEventsPeerStats.
private void processEventsPeerStats(DbusEventsStatisticsCollector statsCollector, String prefix, DatabusRequest request) throws IOException, RequestProcessingException {
if (null == statsCollector)
return;
String category = request.getParams().getProperty(DatabusRequest.PATH_PARAM_NAME);
String client = category.substring(prefix.length());
DbusEventsTotalStats clientStats = statsCollector.getPeerStats(client);
if (null == clientStats) {
throw new InvalidRequestParamValueException(request.getName(), prefix, client);
}
writeJsonObjectToResponse(clientStats, request);
if (request.getRequestType() == HttpMethod.PUT || request.getRequestType() == HttpMethod.POST) {
enableOrResetStatsMBean(clientStats, request);
}
}
Aggregations