Search in sources :

Example 21 with RequestProcessingException

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);
    }
}
Also used : DatabusRegistration(com.linkedin.databus.client.pub.DatabusRegistration) RegistrationStatsInfo(com.linkedin.databus.client.monitoring.RegistrationStatsInfo) DatabusV3Registration(com.linkedin.databus.client.pub.DatabusV3Registration) RequestProcessingException(com.linkedin.databus2.core.container.request.RequestProcessingException) DatabusSourcesConnection(com.linkedin.databus.client.DatabusSourcesConnection)

Example 22 with RequestProcessingException

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);
}
Also used : DatabusRegistration(com.linkedin.databus.client.pub.DatabusRegistration) DatabusV3Registration(com.linkedin.databus.client.pub.DatabusV3Registration) RegistrationId(com.linkedin.databus.client.pub.RegistrationId) RequestProcessingException(com.linkedin.databus2.core.container.request.RequestProcessingException)

Example 23 with RequestProcessingException

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;
}
Also used : InvalidRequestParamValueException(com.linkedin.databus2.core.container.request.InvalidRequestParamValueException)

Example 24 with RequestProcessingException

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);
}
Also used : RequestProcessingException(com.linkedin.databus2.core.container.request.RequestProcessingException)

Example 25 with RequestProcessingException

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);
    }
}
Also used : DbusEventsTotalStats(com.linkedin.databus.core.monitoring.mbean.DbusEventsTotalStats) InvalidRequestParamValueException(com.linkedin.databus2.core.container.request.InvalidRequestParamValueException)

Aggregations

RequestProcessingException (com.linkedin.databus2.core.container.request.RequestProcessingException)20 InvalidRequestParamValueException (com.linkedin.databus2.core.container.request.InvalidRequestParamValueException)18 ArrayList (java.util.ArrayList)8 IOException (java.io.IOException)7 ObjectMapper (org.codehaus.jackson.map.ObjectMapper)6 DatabusRegistration (com.linkedin.databus.client.pub.DatabusRegistration)5 LogicalSource (com.linkedin.databus.core.data_model.LogicalSource)5 DatabusException (com.linkedin.databus2.core.DatabusException)5 HttpStatisticsCollector (com.linkedin.databus2.core.container.monitoring.mbean.HttpStatisticsCollector)5 DbusPartitionInfo (com.linkedin.databus.client.pub.DbusPartitionInfo)4 RegistrationId (com.linkedin.databus.client.pub.RegistrationId)4 Checkpoint (com.linkedin.databus.core.Checkpoint)4 PhysicalPartition (com.linkedin.databus.core.data_model.PhysicalPartition)4 DbusHttpTotalStats (com.linkedin.databus2.core.container.monitoring.mbean.DbusHttpTotalStats)4 StringWriter (java.io.StringWriter)4 SQLException (java.sql.SQLException)4 BootstrapHttpStatsCollector (com.linkedin.databus.bootstrap.common.BootstrapHttpStatsCollector)3 DatabusV3Registration (com.linkedin.databus.client.pub.DatabusV3Registration)3 DbusEventsStatisticsCollector (com.linkedin.databus.core.monitoring.mbean.DbusEventsStatisticsCollector)3 BootstrapDatabaseTooOldException (com.linkedin.databus2.core.container.request.BootstrapDatabaseTooOldException)3