Skip to content

Commit

Permalink
0003118: Only sync pro tables to professional target nodes.
Browse files Browse the repository at this point in the history
  • Loading branch information
mmichalek committed May 22, 2017
1 parent 2fb68e3 commit e246575
Show file tree
Hide file tree
Showing 5 changed files with 84 additions and 24 deletions.
12 changes: 12 additions & 0 deletions symmetric-core/src/main/java/org/jumpmind/symmetric/Version.java
Expand Up @@ -27,6 +27,10 @@
* href="http://apr.apache.org/versioning.html">here</a>.
*/
final public class Version {

public static final int[] VERSION_3_7_0 = new int[] {3,7,0};
public static final int[] VERSION_3_8_0 = new int[] {3,8,0};
public static final int[] VERSION_3_8_18 = new int[] {3,8,18};

private static AbstractVersion version = new AbstractVersion() {
@Override
Expand Down Expand Up @@ -54,6 +58,10 @@ public static boolean isOlderVersion(String version) {
public static boolean isOlderThanVersion(String checkVersion, String targetVersion) {
return version.isOlderThanVersion(checkVersion, targetVersion);
}

public static boolean isOlderThanVersion(int[] checkVersion, int[] targetVersion) {
return version.isOlderThanVersion(checkVersion, targetVersion);
}

public static boolean isOlderMinorVersion(String version) {
return isOlderMinorVersion(version, version());
Expand All @@ -62,6 +70,10 @@ public static boolean isOlderMinorVersion(String version) {
public static boolean isOlderMinorVersion(String checkVersion, String targetVersion) {
return version.isOlderMinorVersion(checkVersion, targetVersion);
}

public static boolean isOlderMinorVersion(int[] checkVersion, int[] targetVersion) {
return version.isOlderMinorVersion(checkVersion, targetVersion);
}

public static long getBuildTime() {
return version.getBuildTime();
Expand Down
Expand Up @@ -81,7 +81,9 @@ public class Node implements Serializable, Comparable<Node> {

private int batchInErrorCount;

private String deploymentType;
private String deploymentType;

private int[] symmetricVersionParts;

public Node() {
}
Expand Down Expand Up @@ -200,9 +202,21 @@ public void setNodeGroupId(String domainName) {
public String getSymmetricVersion() {
return symmetricVersion;
}

public int[] getSymmetricVersionParts() {
if (symmetricVersionParts == null) {
if (StringUtils.isEmpty(symmetricVersion) || symmetricVersion.equals("development")) {
symmetricVersionParts = new int[]{};
} else {
symmetricVersionParts = Version.parseVersion(symmetricVersion);
}
}
return symmetricVersionParts;
}

public void setSymmetricVersion(String symmetricVersion) {
this.symmetricVersion = symmetricVersion;
this.symmetricVersionParts = null;
}

public String toString() {
Expand Down Expand Up @@ -247,7 +261,7 @@ public boolean requires13Compatiblity() {
return false;
}
try {
int[] currentVersion = Version.parseVersion(symmetricVersion);
int[] currentVersion = getSymmetricVersionParts();
return currentVersion != null && currentVersion.length > 0 && currentVersion[0] <= 1;
} catch (Exception ex) {
log.warn(
Expand All @@ -264,7 +278,7 @@ public boolean isVersionGreaterThanOrEqualTo(int... targetVersion) {
if (symmetricVersion.equals("development")) {
return true;
}
int[] currentVersion = Version.parseVersion(symmetricVersion);
int[] currentVersion = getSymmetricVersionParts();
for (int i = 0; i < currentVersion.length; i++) {
int j = currentVersion[i];
if (targetVersion.length > i) {
Expand Down
Expand Up @@ -113,6 +113,7 @@ public Set<String> routeToNodes(SimpleRouterContext routingContext, DataMetaData
TriggerRouter triggerRouter) {

possibleTargetNodes = filterOutOlderNodes(dataMetaData, possibleTargetNodes);
possibleTargetNodes = filterOutNodesByDeploymentType(dataMetaData, possibleTargetNodes);

// the list of nodeIds that we will return
Set<String> nodeIds = new HashSet<String>();
Expand Down Expand Up @@ -244,11 +245,28 @@ public Set<String> routeToNodes(SimpleRouterContext routingContext, DataMetaData
return nodeIds;
}

protected Set<Node> filterOutNodesByDeploymentType(DataMetaData dataMetaData, Set<Node> possibleTargetNodes) {
if (tableMatches(dataMetaData, TableConstants.SYM_CONSOLE_USER)
|| tableMatches(dataMetaData, TableConstants.SYM_CONSOLE_USER_HIST)) {
Set<Node> targetNodes = new HashSet<Node>(possibleTargetNodes.size());
for (Node nodeThatMayBeRoutedTo : possibleTargetNodes) {
boolean isTargetProfessional = StringUtils.equals(nodeThatMayBeRoutedTo.getDeploymentType(),
Constants.DEPLOYMENT_TYPE_PROFESSIONAL);
if (isTargetProfessional) {
targetNodes.add(nodeThatMayBeRoutedTo);
}
}
return targetNodes;
} else {
return possibleTargetNodes;
}
}

protected Set<Node> filterOutOlderNodes(DataMetaData dataMetaData, Set<Node> possibleTargetNodes) {
if (tableMatches(dataMetaData, TableConstants.SYM_MONITOR)
|| tableMatches(dataMetaData, TableConstants.SYM_MONITOR_EVENT)
|| tableMatches(dataMetaData, TableConstants.SYM_NOTIFICATION)) {
Set<Node> targetNodes = new HashSet<Node>();
Set<Node> targetNodes = new HashSet<Node>(possibleTargetNodes.size());
for (Node nodeThatMayBeRoutedTo : possibleTargetNodes) {
if (nodeThatMayBeRoutedTo.isVersionGreaterThanOrEqualTo(3, 8, 0)) {
targetNodes.add(nodeThatMayBeRoutedTo);
Expand Down
Expand Up @@ -213,24 +213,28 @@ public void extractConfigurationStandalone(Node node, OutputStream out) {

protected boolean filter(Node targetNode, String tableName) {

boolean pre37 = Version.isOlderThanVersion(targetNode.getSymmetricVersion(), "3.7.0");
boolean pre38 = Version.isOlderThanVersion(targetNode.getSymmetricVersion(), "3.8.0");

boolean pre3818 = Version.isOlderThanVersion(targetNode.getSymmetricVersion(), "3.8.18");
boolean pre37 = Version.isOlderThanVersion(targetNode.getSymmetricVersionParts(), Version.VERSION_3_7_0);
boolean pre38 = Version.isOlderThanVersion(targetNode.getSymmetricVersionParts(), Version.VERSION_3_8_0);
boolean pre3818 = Version.isOlderThanVersion(targetNode.getSymmetricVersionParts(), Version.VERSION_3_8_18);

tableName = tableName.toLowerCase();
boolean include = true;
if (pre37 && tableName.contains(TableConstants.SYM_EXTENSION)) {
include = false;
}
if (pre38 && (tableName.contains(TableConstants.SYM_MONITOR) ||
} else if (pre38 && (tableName.contains(TableConstants.SYM_MONITOR) ||
tableName.contains(TableConstants.SYM_NOTIFICATION))) {
include = false;
}

if (pre3818 && tableName.contains(TableConstants.SYM_CONSOLE_USER_HIST)) {
} else if (pre3818 && tableName.contains(TableConstants.SYM_CONSOLE_USER_HIST)) {
include = false;
} else if (tableName.contains(TableConstants.SYM_CONSOLE_USER)
|| tableName.contains(TableConstants.SYM_CONSOLE_USER_HIST)) {
boolean isTargetProfessional = StringUtils.equals(targetNode.getDeploymentType(),
Constants.DEPLOYMENT_TYPE_PROFESSIONAL);
if (!isTargetProfessional) {
include = false;
}
}

return include;
}

Expand Down
34 changes: 23 additions & 11 deletions symmetric-util/src/main/java/org/jumpmind/util/AbstractVersion.java
Expand Up @@ -153,18 +153,26 @@ public boolean isOlderThanVersion(String checkVersion, String targetVersion) {
if (noVersion(targetVersion) || noVersion(checkVersion)) {
return false;
}

int[] checkVersions = parseVersion(checkVersion);
int[] targetVersions = parseVersion(targetVersion);

if (checkVersions[MAJOR_INDEX] < targetVersions[MAJOR_INDEX]) {
return isOlderThanVersion(checkVersions, targetVersions);
}

public boolean isOlderThanVersion(int[] checkVersion, int[] targetVersion) {
if (checkVersion == null || targetVersion == null) {
return false;
}

if (checkVersion[MAJOR_INDEX] < targetVersion[MAJOR_INDEX]) {
return true;
} else if (checkVersions[MAJOR_INDEX] == targetVersions[MAJOR_INDEX]
&& checkVersions[MINOR_INDEX] < targetVersions[MINOR_INDEX]) {
} else if (checkVersion[MAJOR_INDEX] == targetVersion[MAJOR_INDEX]
&& checkVersion[MINOR_INDEX] < targetVersion[MINOR_INDEX]) {
return true;
} else if (checkVersions[MAJOR_INDEX] == targetVersions[MAJOR_INDEX]
&& checkVersions[MINOR_INDEX] == targetVersions[MINOR_INDEX]
&& checkVersions[PATCH_INDEX] < targetVersions[PATCH_INDEX]) {
} else if (checkVersion[MAJOR_INDEX] == targetVersion[MAJOR_INDEX]
&& checkVersion[MINOR_INDEX] == targetVersion[MINOR_INDEX]
&& checkVersion[PATCH_INDEX] < targetVersion[PATCH_INDEX]) {
return true;
}
return false;
Expand All @@ -187,13 +195,17 @@ public boolean isOlderMinorVersion(String checkVersion, String targetVersion) {
int[] checkVersions = parseVersion(checkVersion);
int[] targetVersions = parseVersion(targetVersion);

if (checkVersions[MAJOR_INDEX] < targetVersions[MAJOR_INDEX]) {
return isOlderMinorVersion(checkVersions, targetVersions);
}

public boolean isOlderMinorVersion(int[] checkVersion, int[] targetVersion) {
if (checkVersion[MAJOR_INDEX] < targetVersion[MAJOR_INDEX]) {
return true;
} else if (checkVersions[MAJOR_INDEX] == targetVersions[MAJOR_INDEX]
&& checkVersions[MINOR_INDEX] < targetVersions[MINOR_INDEX]) {
} else if (checkVersion[MAJOR_INDEX] == targetVersion[MAJOR_INDEX]
&& checkVersion[MINOR_INDEX] < targetVersion[MINOR_INDEX]) {
return true;
}
return false;
return false;
}

}

0 comments on commit e246575

Please sign in to comment.