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;
}
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;
}
}
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 });
}
}
Aggregations