Search in sources :

Example 11 with RegistrationId

use of com.linkedin.databus.client.pub.RegistrationId 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 12 with RegistrationId

use of com.linkedin.databus.client.pub.RegistrationId in project databus by linkedin.

the class ClientStateRequestProcessor method resumeAllRegistrations.

/**
 * Resume all registrations paused or suspended (both V2 and V3 in this client instance)
 *
 * @param request
 *          DatabusRequest corresponding to the REST call.
 * @throws IOException
 *           when unable to write the output.
 */
private void resumeAllRegistrations(DatabusRequest request) throws IOException {
    LOG.info("REST call to resume all registrations");
    /**
     * Get the top-level V2 registrations and pause them. The child-level registrations by
     * the top-level registrations that aggregates them.
     */
    Collection<DatabusRegistration> regs = _client.getAllRegistrations();
    if (null != regs) {
        for (DatabusRegistration r : regs) {
            if (r.getState().isRunning()) {
                if ((r.getState() == DatabusRegistration.RegistrationState.PAUSED) || (r.getState() == DatabusRegistration.RegistrationState.SUSPENDED_ON_ERROR))
                    r.resume();
            }
        }
    }
    /**
     * Get the top-level V3 registrations and pause them. The child-level registrations by
     * the top-level registrations that aggregates them.
     */
    Map<RegistrationId, DatabusV3Registration> regMap = _client.getRegistrationIdMap();
    Collection<RegInfo> topLevelRegs = getAllTopLevelV3Registrations();
    /**
     * Important Note: There is an important implementation difference on which
     * registrations are stored in the global registration data-structure maintained by
     * the client (DatabusHttp[V3]ClientImpls) between V2 and V3.
     *
     * 1. In the case of V2, only top-level registrations are stored in the global
     * data-structure (DatabusHttpClientImpl.regList 2. In the case of V3, all
     * registrations are stored in the global data-structure.
     *
     * In the case of V3, this is needed so that all registrations can act on the relay
     * external view change. This can be refactored in the future by moving the
     * relay-external view change to registration impl ( reduce the complexity in
     * ClientImpl ). The V2 implementation did not have this logic and was following a
     * more intuitive structure of preserving the hierarchy.
     */
    if ((null != regMap) && (null != topLevelRegs)) {
        for (RegInfo reg : topLevelRegs) {
            DatabusV3Registration r = regMap.get(reg.getRegId());
            if (r.getState().isRunning()) {
                if ((r.getState() == RegistrationState.PAUSED) || (r.getState() == RegistrationState.SUSPENDED_ON_ERROR))
                    r.resume();
            }
        }
    }
    writeJsonObjectToResponse(getAllTopLevelRegStates(), request);
}
Also used : DatabusRegistration(com.linkedin.databus.client.pub.DatabusRegistration) RegistrationId(com.linkedin.databus.client.pub.RegistrationId) DatabusV3Registration(com.linkedin.databus.client.pub.DatabusV3Registration)

Example 13 with RegistrationId

use of com.linkedin.databus.client.pub.RegistrationId in project databus by linkedin.

the class ClientStateRequestProcessor method pauseAllRegistrations.

/**
 * Pause all registrations (both V2 and V3 in this client instance) which are in running
 * state.
 *
 * @param request
 *          DatabusRequest corresponding to the REST call.
 * @throws IOException
 *           when unable to write the output.
 */
private void pauseAllRegistrations(DatabusRequest request) throws IOException {
    LOG.info("REST call to pause all registrations");
    /**
     * Get the top-level V2 registrations and pause them. The child-level registrations by
     * the top-level registrations that aggregates them.
     */
    Collection<DatabusRegistration> regs = _client.getAllRegistrations();
    if (null != regs) {
        for (DatabusRegistration r : regs) {
            if (r.getState().isRunning()) {
                if (r.getState() != DatabusRegistration.RegistrationState.PAUSED)
                    r.pause();
            }
        }
    }
    /**
     * Get the top-level V3 registrations and pause them. The child-level registrations by
     * the top-level registrations that aggregates them.
     */
    Map<RegistrationId, DatabusV3Registration> regMap = _client.getRegistrationIdMap();
    Collection<RegInfo> topLevelRegs = getAllTopLevelV3Registrations();
    /**
     * Important Note: There is an important implementation difference on which
     * registrations are stored in the global registration data-structure maintained by
     * the client (DatabusHttp[V3]ClientImpls) between V2 and V3.
     *
     * 1. In the case of V2, only top-level registrations are stored in the global
     * data-structure (DatabusHttpClientImpl.regList 2. In the case of V3, all
     * registrations are stored in the global data-structure.
     *
     * In the case of V3, this is needed so that all registrations can act on the relay
     * external view change. This can be refactored in the future by moving the
     * relay-external view change to registration impl ( reduce the complexity in
     * ClientImpl ). The V2 implementation did not have this logic and was following a
     * more intuitive structure of preserving the hierarchy.
     */
    if ((null != regMap) && (null != topLevelRegs)) {
        for (RegInfo reg : topLevelRegs) {
            DatabusV3Registration r = regMap.get(reg.getRegId());
            if (r.getState().isRunning()) {
                if (r.getState() != RegistrationState.PAUSED)
                    r.pause();
            }
        }
    }
    writeJsonObjectToResponse(getAllTopLevelRegStates(), request);
}
Also used : DatabusRegistration(com.linkedin.databus.client.pub.DatabusRegistration) RegistrationId(com.linkedin.databus.client.pub.RegistrationId) DatabusV3Registration(com.linkedin.databus.client.pub.DatabusV3Registration)

Example 14 with RegistrationId

use of com.linkedin.databus.client.pub.RegistrationId in project databus by linkedin.

the class ClientStateRequestProcessor method getAllTopLevelV3Registrations.

/**
 * Returns all the top-level V3 registrations. 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, 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.
 *
 * @return collection of top-level registrations (V3)
 */
private Collection<RegInfo> getAllTopLevelV3Registrations() {
    /**
     * Important Note: There is an important implementation difference on which
     * registrations are stored in the global registration data-structure maintained by
     * the client (DatabusHttp[V3]ClientImpls) between V2 and V3.
     *
     * 1. In the case of V2, only top-level registrations are stored in the global
     * data-structure (DatabusHttpClientImpl.regList 2. In the case of V3, all
     * registrations are stored in the global data-structure.
     *
     * In the case of V3, this is needed so that all registrations can act on the relay
     * external view change. This can be refactored in the future by moving the
     * relay-external view change to registration impl ( reduce the complexity in
     * ClientImpl ). The V2 implementation did not have this logic and was following a
     * more intuitive structure of preserving the hierarchy.
     */
    Map<RegistrationId, RegInfo> regListMap = new HashMap<RegistrationId, RegInfo>();
    /**
     * The _client.getRegistrationIdMap() has all registrations in one place. Top-Level
     * Registrations = Only those registrations whose getParent() == null.
     */
    Map<RegistrationId, DatabusV3Registration> regMap = _client.getRegistrationIdMap();
    for (Entry<RegistrationId, DatabusV3Registration> e : regMap.entrySet()) {
        RegInfo regInfo = null;
        DatabusV3Registration r = e.getValue();
        // If not top-level, skip
        if (null != r.getParentRegistration()) {
            continue;
        }
        Map<DbusPartitionInfo, RegInfo> childR = null;
        if (r instanceof DatabusV3MultiPartitionRegistration) {
            // ass the children regs to parent.
            Map<PhysicalPartition, DatabusV3Registration> childRegs = ((DatabusV3MultiPartitionRegistration) r).getPartionRegs();
            childR = new HashMap<DbusPartitionInfo, RegInfo>();
            for (Entry<PhysicalPartition, DatabusV3Registration> e2 : childRegs.entrySet()) {
                childR.put(new DbusPartitionInfoImpl(e2.getKey().getId()), new RegInfo(e.getValue().getState().name(), e.getValue().getRegistrationId(), e.getValue().getStatus(), null, e.getValue().getSubscriptions()));
            }
        }
        regInfo = new RegInfo(r.getState().name(), r.getRegistrationId(), r.getStatus(), null, r.getSubscriptions(), true, childR);
        regListMap.put(e.getKey(), regInfo);
    }
    return regListMap.values();
}
Also used : DatabusV3MultiPartitionRegistration(com.linkedin.databus.client.pub.DatabusV3MultiPartitionRegistration) HashMap(java.util.HashMap) RegistrationId(com.linkedin.databus.client.pub.RegistrationId) DatabusV3Registration(com.linkedin.databus.client.pub.DatabusV3Registration) DbusPartitionInfoImpl(com.linkedin.databus.client.DbusPartitionInfoImpl) DbusPartitionInfo(com.linkedin.databus.client.pub.DbusPartitionInfo) PhysicalPartition(com.linkedin.databus.core.data_model.PhysicalPartition)

Example 15 with RegistrationId

use of com.linkedin.databus.client.pub.RegistrationId in project databus by linkedin.

the class ClientStateRequestProcessor method findV3Registration.

private DatabusV3Registration findV3Registration(DatabusRequest request, String prefix) throws RequestProcessingException {
    String category = request.getParams().getProperty(DatabusRequest.PATH_PARAM_NAME);
    String regIdStr = category.substring(prefix.length());
    RegistrationId regId = new RegistrationId(regIdStr);
    return findV3Registration(regId, request);
}
Also used : RegistrationId(com.linkedin.databus.client.pub.RegistrationId)

Aggregations

RegistrationId (com.linkedin.databus.client.pub.RegistrationId)17 DatabusV3Registration (com.linkedin.databus.client.pub.DatabusV3Registration)7 DatabusRegistration (com.linkedin.databus.client.pub.DatabusRegistration)5 DatabusClientException (com.linkedin.databus.client.pub.DatabusClientException)4 HashMap (java.util.HashMap)4 DbusPartitionInfo (com.linkedin.databus.client.pub.DbusPartitionInfo)3 DatabusMultiPartitionRegistration (com.linkedin.databus.client.registration.DatabusMultiPartitionRegistration)3 RequestProcessingException (com.linkedin.databus2.core.container.request.RequestProcessingException)3 ClusterCheckpointPersistenceProvider (com.linkedin.databus.client.pub.ClusterCheckpointPersistenceProvider)2 DatabusCombinedConsumer (com.linkedin.databus.client.pub.DatabusCombinedConsumer)2 DatabusV3MultiPartitionRegistration (com.linkedin.databus.client.pub.DatabusV3MultiPartitionRegistration)2 DbusClusterInfo (com.linkedin.databus.client.pub.DbusClusterInfo)2 DatabusV2ClusterRegistrationImpl (com.linkedin.databus.client.registration.DatabusV2ClusterRegistrationImpl)2 DatabusV2RegistrationImpl (com.linkedin.databus.client.registration.DatabusV2RegistrationImpl)2 DatabusSubscription (com.linkedin.databus.core.data_model.DatabusSubscription)2 InvalidRequestParamValueException (com.linkedin.databus2.core.container.request.InvalidRequestParamValueException)2 ArrayList (java.util.ArrayList)2 Map (java.util.Map)2 TreeMap (java.util.TreeMap)2 DbusPartitionInfoImpl (com.linkedin.databus.client.DbusPartitionInfoImpl)1