Search in sources :

Example 1 with RegistrationRequest

use of org.jumpmind.symmetric.model.RegistrationRequest in project symmetric-ds by JumpMind.

the class RegistrationService method getRegistrationRequests.

public List<RegistrationRequest> getRegistrationRequests(boolean includeNodesWithOpenRegistrations) {
    List<RegistrationRequest> requests = sqlTemplate.query(getSql("selectRegistrationRequestSql"), new RegistrationRequestMapper());
    if (!includeNodesWithOpenRegistrations) {
        Collection<Node> nodes = nodeService.findNodesWithOpenRegistration();
        Iterator<RegistrationRequest> i = requests.iterator();
        while (i.hasNext()) {
            RegistrationRequest registrationRequest = (RegistrationRequest) i.next();
            for (Node node : nodes) {
                if (node.getNodeGroupId().equals(registrationRequest.getNodeGroupId()) && node.getExternalId().equals(registrationRequest.getExternalId())) {
                    i.remove();
                }
            }
        }
    }
    return requests;
}
Also used : Node(org.jumpmind.symmetric.model.Node) RegistrationRequest(org.jumpmind.symmetric.model.RegistrationRequest)

Example 2 with RegistrationRequest

use of org.jumpmind.symmetric.model.RegistrationRequest in project symmetric-ds by JumpMind.

the class RegistrationService method processRegistration.

protected Node processRegistration(Node nodePriorToRegistration, String remoteHost, String remoteAddress, boolean isRequestedRegistration, String deploymentType) throws IOException {
    Node processedNode = new Node();
    processedNode.setSyncEnabled(false);
    Node identity = nodeService.findIdentity();
    if (identity == null) {
        RegistrationRequest req = new RegistrationRequest(nodePriorToRegistration, RegistrationStatus.ER, remoteHost, remoteAddress);
        req.setErrorMessage("Cannot register a client node until this node is registered");
        saveRegistrationRequest(req);
        log.warn(req.getErrorMessage());
        return processedNode;
    }
    try {
        if (!nodeService.isRegistrationServer()) {
            /*
                 * registration is not allowed until this node has an identity
                 * and an initial load
                 */
            NodeSecurity security = nodeService.findNodeSecurity(identity.getNodeId());
            if (security == null || security.getInitialLoadTime() == null) {
                RegistrationRequest req = new RegistrationRequest(nodePriorToRegistration, RegistrationStatus.ER, remoteHost, remoteAddress);
                req.setErrorMessage("Cannot register a client node until this node has an initial load (ie. node_security.initial_load_time is a non null value)");
                saveRegistrationRequest(req);
                log.warn(req.getErrorMessage());
                return processedNode;
            }
        }
        String redirectUrl = getRedirectionUrlFor(nodePriorToRegistration.getExternalId());
        if (redirectUrl != null) {
            log.info("Redirecting {} to {} for registration.", nodePriorToRegistration.getExternalId(), redirectUrl);
            saveRegistrationRequest(new RegistrationRequest(nodePriorToRegistration, RegistrationStatus.RR, remoteHost, remoteAddress));
            throw new RegistrationRedirectException(redirectUrl);
        }
        /*
             * Check to see if there is a link that exists to service the node
             * that is requesting registration
             */
        NodeGroupLink link = configurationService.getNodeGroupLinkFor(identity.getNodeGroupId(), nodePriorToRegistration.getNodeGroupId(), false);
        if (link == null && parameterService.is(ParameterConstants.REGISTRATION_REQUIRE_NODE_GROUP_LINK, true)) {
            RegistrationRequest req = new RegistrationRequest(nodePriorToRegistration, RegistrationStatus.ER, remoteHost, remoteAddress);
            req.setErrorMessage(String.format("Cannot register a client node unless a node group link exists so the registering node can receive configuration updates.  Please add a group link where the source group id is %s and the target group id is %s", identity.getNodeGroupId(), nodePriorToRegistration.getNodeGroupId()));
            saveRegistrationRequest(req);
            log.warn(req.getErrorMessage());
            return processedNode;
        }
        String nodeId = StringUtils.isBlank(nodePriorToRegistration.getNodeId()) ? extensionService.getExtensionPoint(INodeIdCreator.class).selectNodeId(nodePriorToRegistration, remoteHost, remoteAddress) : nodePriorToRegistration.getNodeId();
        Node foundNode = nodeService.findNode(nodeId);
        NodeSecurity security = nodeService.findNodeSecurity(nodeId);
        if ((foundNode == null || security == null || !security.isRegistrationEnabled()) && parameterService.is(ParameterConstants.AUTO_REGISTER_ENABLED)) {
            openRegistration(nodePriorToRegistration, remoteHost, remoteAddress);
            nodeId = StringUtils.isBlank(nodePriorToRegistration.getNodeId()) ? extensionService.getExtensionPoint(INodeIdCreator.class).selectNodeId(nodePriorToRegistration, remoteHost, remoteAddress) : nodePriorToRegistration.getNodeId();
            security = nodeService.findNodeSecurity(nodeId);
            foundNode = nodeService.findNode(nodeId);
        } else if (foundNode == null || security == null || !security.isRegistrationEnabled()) {
            saveRegistrationRequest(new RegistrationRequest(nodePriorToRegistration, RegistrationStatus.RQ, remoteHost, remoteAddress));
            return processedNode;
        }
        foundNode.setSyncEnabled(true);
        if (Constants.DEPLOYMENT_TYPE_REST.equalsIgnoreCase(deploymentType)) {
            foundNode.setSymmetricVersion(null);
            foundNode.setDeploymentType(deploymentType);
        }
        foundNode.setSyncUrl(nodePriorToRegistration.getSyncUrl());
        foundNode.setDatabaseType(nodePriorToRegistration.getDatabaseType());
        foundNode.setDatabaseVersion(nodePriorToRegistration.getDatabaseVersion());
        foundNode.setSymmetricVersion(nodePriorToRegistration.getSymmetricVersion());
        nodeService.save(foundNode);
        /**
             * Only send automatic initial load once or if the client is really
             * re-registering
             */
        if ((security != null && security.getInitialLoadTime() == null) || isRequestedRegistration) {
            if (parameterService.is(ParameterConstants.AUTO_RELOAD_ENABLED)) {
                nodeService.setInitialLoadEnabled(nodeId, true, false, -1, "registration");
            }
            if (parameterService.is(ParameterConstants.AUTO_RELOAD_REVERSE_ENABLED)) {
                nodeService.setReverseInitialLoadEnabled(nodeId, true, false, -1, "registration");
            }
        }
        saveRegistrationRequest(new RegistrationRequest(foundNode, RegistrationStatus.OK, remoteHost, remoteAddress));
        statisticManager.incrementNodesRegistered(1);
        return foundNode;
    } catch (RegistrationNotOpenException ex) {
        if (StringUtils.isNotBlank(ex.getMessage())) {
            log.warn("Registration not allowed for {} because {}", nodePriorToRegistration.toString(), ex.getMessage());
        }
        return processedNode;
    }
}
Also used : RegistrationNotOpenException(org.jumpmind.symmetric.service.RegistrationNotOpenException) NodeSecurity(org.jumpmind.symmetric.model.NodeSecurity) INodeIdCreator(org.jumpmind.symmetric.config.INodeIdCreator) Node(org.jumpmind.symmetric.model.Node) NodeGroupLink(org.jumpmind.symmetric.model.NodeGroupLink) RegistrationRequest(org.jumpmind.symmetric.model.RegistrationRequest) RegistrationRedirectException(org.jumpmind.symmetric.service.RegistrationRedirectException)

Example 3 with RegistrationRequest

use of org.jumpmind.symmetric.model.RegistrationRequest in project symmetric-ds by JumpMind.

the class RegistrationService method saveRegistrationRequest.

public void saveRegistrationRequest(RegistrationRequest request) {
    /**
         * Lookup existing registration requests to update the attempt count.  We previously
         * did this in SQL on the update, but as400 v5 didn't like that
         */
    boolean foundOne = false;
    List<RegistrationRequest> requests = getRegistrationRequests(true);
    for (RegistrationRequest registrationRequest : requests) {
        if (registrationRequest.getNodeGroupId().equals(request.getNodeGroupId()) && registrationRequest.getExternalId().equals(request.getExternalId())) {
            request.setAttemptCount(registrationRequest.getAttemptCount() + 1);
            foundOne = true;
            break;
        }
    }
    String externalId = request.getExternalId() == null ? "" : request.getExternalId();
    String nodeGroupId = request.getNodeGroupId() == null ? "" : request.getNodeGroupId();
    int count = 0;
    if (foundOne) {
        count = sqlTemplate.update(getSql("updateRegistrationRequestSql"), new Object[] { request.getAttemptCount(), request.getLastUpdateBy(), request.getLastUpdateTime(), request.getRegisteredNodeId(), request.getStatus().name(), request.getErrorMessage(), nodeGroupId, externalId, request.getIpAddress(), request.getHostName() }, new int[] { Types.NUMERIC, Types.VARCHAR, Types.TIMESTAMP, Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, Types.VARCHAR });
    }
    if (count == 0) {
        sqlTemplate.update(getSql("insertRegistrationRequestSql"), new Object[] { request.getLastUpdateBy(), request.getLastUpdateTime(), request.getRegisteredNodeId(), request.getStatus().name(), nodeGroupId, externalId, request.getIpAddress(), request.getHostName(), request.getErrorMessage() }, new int[] { Types.VARCHAR, Types.TIMESTAMP, Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, Types.VARCHAR });
    }
}
Also used : RegistrationRequest(org.jumpmind.symmetric.model.RegistrationRequest)

Aggregations

RegistrationRequest (org.jumpmind.symmetric.model.RegistrationRequest)3 Node (org.jumpmind.symmetric.model.Node)2 INodeIdCreator (org.jumpmind.symmetric.config.INodeIdCreator)1 NodeGroupLink (org.jumpmind.symmetric.model.NodeGroupLink)1 NodeSecurity (org.jumpmind.symmetric.model.NodeSecurity)1 RegistrationNotOpenException (org.jumpmind.symmetric.service.RegistrationNotOpenException)1 RegistrationRedirectException (org.jumpmind.symmetric.service.RegistrationRedirectException)1