diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/AbstractSymmetricEngine.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/AbstractSymmetricEngine.java index 86112605cb..7e2ad59282 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/AbstractSymmetricEngine.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/AbstractSymmetricEngine.java @@ -451,7 +451,7 @@ protected void autoConfigRegistrationServer() { nodeService.insertNodeIdentity(nodeId); node = nodeService.findIdentity(); nodeService.insertNodeGroup(node.getNodeGroupId(), null); - NodeSecurity nodeSecurity = nodeService.findNodeSecurity(nodeId, true); + NodeSecurity nodeSecurity = nodeService.findOrCreateNodeSecurity(nodeId); nodeSecurity.setInitialLoadTime(new Date()); nodeSecurity.setRegistrationTime(new Date()); nodeSecurity.setInitialLoadEnabled(false); diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/load/ConfigurationChangedDatabaseWriterFilter.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/load/ConfigurationChangedDatabaseWriterFilter.java index f5bda514a8..a77ce330ac 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/load/ConfigurationChangedDatabaseWriterFilter.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/load/ConfigurationChangedDatabaseWriterFilter.java @@ -78,6 +78,9 @@ public class ConfigurationChangedDatabaseWriterFilter extends DatabaseWriterFilt final String CTX_KEY_FLUSH_CONFLICTS_NEEDED = "FlushConflicts." + ConfigurationChangedDatabaseWriterFilter.class.getSimpleName() + hashCode(); + final String CTX_KEY_FLUSH_NODE_SECURITY_NEEDED = "FlushNodeSecurity." + + ConfigurationChangedDatabaseWriterFilter.class.getSimpleName() + hashCode(); + final String CTX_KEY_RESTART_JOBMANAGER_NEEDED = "RestartJobManager." + ConfigurationChangedDatabaseWriterFilter.class.getSimpleName() + hashCode(); @@ -118,6 +121,7 @@ public void afterWrite(DataContext context, Table table, CsvData data) { recordParametersFlushNeeded(context, table); recordJobManagerRestartNeeded(context, table, data); recordConflictFlushNeeded(context, table); + recordNodeSecurityFlushNeeded(context, table); } private void recordGroupletFlushNeeded(DataContext context, Table table) { @@ -192,6 +196,12 @@ private void recordTransformFlushNeeded(DataContext context, Table table) { } } + private void recordNodeSecurityFlushNeeded(DataContext context, Table table) { + if (matchesTable(table, TableConstants.SYM_NODE_SECURITY)) { + context.put(CTX_KEY_FLUSH_NODE_SECURITY_NEEDED, true); + } + } + private boolean isSyncTriggersNeeded(DataContext context, Table table) { boolean autoSync = engine.getParameterService().is(ParameterConstants.AUTO_SYNC_TRIGGERS_AFTER_CONFIG_LOADED) || context.getBatch().getBatchId() == Constants.VIRTUAL_BATCH_FOR_REGISTRATION; @@ -332,7 +342,13 @@ public void batchCommitted(DataContext context) { parameterService.rereadParameters(); context.remove(CTX_KEY_FLUSH_PARAMETERS_NEEDED); } - + + if (context.get(CTX_KEY_FLUSH_NODE_SECURITY_NEEDED) != null) { + log.info("About to refresh the cache of node security because new configuration came through the data loader"); + nodeService.flushNodeAuthorizedCache(); + context.remove(CTX_KEY_FLUSH_NODE_SECURITY_NEEDED); + } + if (context.get(CTX_KEY_RESYNC_TABLE_NEEDED) != null && parameterService.is(ParameterConstants.AUTO_SYNC_TRIGGERS)) { @SuppressWarnings("unchecked") diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/INodeService.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/INodeService.java index 04ce2c9ce2..72f7eb41be 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/INodeService.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/INodeService.java @@ -73,8 +73,10 @@ public interface INodeService { public NodeSecurity findNodeSecurity(String nodeId); - public NodeSecurity findNodeSecurity(String nodeId, boolean createIfNotFound); - + public NodeSecurity findNodeSecurity(String nodeId, boolean useCache); + + public NodeSecurity findOrCreateNodeSecurity(String nodeId); + public void deleteNodeHost(String nodeId); public void deleteNodeSecurity(String nodeId); diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataLoaderService.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataLoaderService.java index 58916e6e96..69358c4d14 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataLoaderService.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataLoaderService.java @@ -254,8 +254,9 @@ public void loadDataFromPull(Node remote, RemoteNodeStatus status) throws IOExce local = new Node(this.parameterService, symmetricDialect); } try { - NodeSecurity localSecurity = nodeService.findNodeSecurity(local.getNodeId()); + NodeSecurity localSecurity = nodeService.findNodeSecurity(local.getNodeId(), true); IIncomingTransport transport = null; + boolean isRegisterTransport = false; if (remote != null && localSecurity != null) { Map requestProperties = new HashMap(); ChannelMap suspendIgnoreChannels = configurationService @@ -274,6 +275,7 @@ public void loadDataFromPull(Node remote, RemoteNodeStatus status) throws IOExce log.info("Using registration URL of {}", transport.getUrl()); remote = new Node(); remote.setSyncUrl(parameterService.getRegistrationUrl()); + isRegisterTransport = true; } ProcessInfo processInfo = statisticManager.newProcessInfo(new ProcessInfoKey(remote @@ -285,7 +287,7 @@ public void loadDataFromPull(Node remote, RemoteNodeStatus status) throws IOExce status.updateIncomingStatus(list); local = nodeService.findIdentity(); if (local != null) { - localSecurity = nodeService.findNodeSecurity(local.getNodeId()); + localSecurity = nodeService.findNodeSecurity(local.getNodeId(), !isRegisterTransport); if (StringUtils.isNotBlank(transport.getRedirectionUrl())) { /* * We were redirected for the pull, we need to diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/FileSyncService.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/FileSyncService.java index bbe657475a..9603287350 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/FileSyncService.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/FileSyncService.java @@ -629,7 +629,7 @@ public void loadFilesFromPush(String nodeId, InputStream in, OutputStream out) { ProcessInfoKey.ProcessType.FILE_SYNC_PUSH_HANDLER)); try { List list = processZip(in, nodeId, processInfo); - NodeSecurity security = nodeService.findNodeSecurity(local.getNodeId()); + NodeSecurity security = nodeService.findNodeSecurity(local.getNodeId(), true); processInfo.setStatus(ProcessInfo.Status.ACKING); engine.getTransportManager().writeAcknowledgement(out, sourceNode, list, local, security != null ? security.getNodePassword() : null); @@ -652,7 +652,7 @@ public void loadFilesFromPush(String nodeId, InputStream in, OutputStream out) { public void execute(NodeCommunication nodeCommunication, RemoteNodeStatus status) { Node identity = engine.getNodeService().findIdentity(); if (identity != null) { - NodeSecurity security = engine.getNodeService().findNodeSecurity(identity.getNodeId()); + NodeSecurity security = engine.getNodeService().findNodeSecurity(identity.getNodeId(), true); if (security != null) { if (nodeCommunication.getCommunicationType() == CommunicationType.FILE_PULL) { pullFilesFromNode(nodeCommunication, status, identity, security); diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/NodeService.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/NodeService.java index 4002690754..1217a7fbc1 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/NodeService.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/NodeService.java @@ -156,22 +156,6 @@ public void ignoreNodeChannelForExternalId(boolean enabled, String channelId, } } - public boolean isRegistrationEnabled(String nodeId) { - NodeSecurity nodeSecurity = findNodeSecurity(nodeId); - if (nodeSecurity != null) { - return nodeSecurity.isRegistrationEnabled(); - } - return false; - } - - /** - * Lookup a node_security in the database, which contains private - * information used to authenticate. - */ - public NodeSecurity findNodeSecurity(String id) { - return findNodeSecurity(id, false); - } - public List findNodeHosts(String nodeId) { return sqlTemplate.query(getSql("selectNodeHostPrefixSql", "selectNodeHostByNodeIdSql"), new NodeHostRowMapper(), nodeId); @@ -213,34 +197,6 @@ public void updateNodeHostForCurrentNode() { updateNodeHost(nodeHostForCurrentNode); } - public NodeSecurity findNodeSecurity(String nodeId, boolean createIfNotFound) { - try { - if (nodeId != null) { - List list = sqlTemplate.query(getSql("findNodeSecuritySql"), - new NodeSecurityRowMapper(), new Object[] { nodeId }, - new int[] { Types.VARCHAR }); - NodeSecurity security = (NodeSecurity) getFirstEntry(list); - if (security == null && createIfNotFound) { - insertNodeSecurity(nodeId); - security = findNodeSecurity(nodeId, false); - } - return security; - } else { - log.debug("A 'null' node id was passed into findNodeSecurity"); - return null; - } - } catch (UniqueKeyException ex) { - log.error( - "Could not find a node security row for '{}'", - nodeId); - throw ex; - } - } - - public void deleteNodeSecurity(String nodeId) { - sqlTemplate.update(getSql("deleteNodeSecuritySql"), new Object[] { nodeId }); - } - public void deleteNode(String nodeId, boolean syncChange) { ISqlTransaction transaction = null; try { @@ -282,14 +238,6 @@ public void deleteNode(String nodeId, boolean syncChange) { } } - public void insertNodeSecurity(String id) { - flushNodeAuthorizedCache(); - String password = extensionService.getExtensionPoint(INodeIdCreator.class).generatePassword(new Node(id, null, null)); - password = filterPasswordOnSaveIfNeeded(password); - sqlTemplate.update(getSql("insertNodeSecuritySql"), new Object[] { id, password, - null }); - } - public void insertNodeIdentity(String nodeId) { sqlTemplate.update(getSql("insertNodeIdentitySql"), nodeId); } @@ -353,47 +301,6 @@ protected T getFirstEntry(List list) { return null; } - public List findNodeSecurityWithLoadEnabled() { - return sqlTemplate.query( - getSql("findNodeSecurityWithLoadEnabledSql"), new NodeSecurityRowMapper()); - } - - - public Map findAllNodeSecurity(boolean useCache) { - long maxSecurityCacheTime = parameterService - .getLong(ParameterConstants.CACHE_TIMEOUT_NODE_SECURITY_IN_MS); - Map all = securityCache; - if (all == null || System.currentTimeMillis() - securityCacheTime >= maxSecurityCacheTime - || securityCacheTime == 0 || !useCache) { - all = (Map) sqlTemplate.queryForMap( - getSql("findAllNodeSecuritySql"), new NodeSecurityRowMapper(), "node_id"); - securityCache = all; - securityCacheTime = System.currentTimeMillis(); - } - return all; - } - - /** - * Check that the given node and password match in the node_security table. - * A node must authenticate before it's allowed to sync data. - */ - public boolean isNodeAuthorized(String nodeId, String password) { - Map nodeSecurities = findAllNodeSecurity(true); - NodeSecurity nodeSecurity = nodeSecurities.get(nodeId); - if (nodeSecurity != null - && !nodeId.equals(findIdentityNodeId()) && ((nodeSecurity.getNodePassword() != null - && !nodeSecurity.getNodePassword().equals("") && nodeSecurity - .getNodePassword().equals(password)) || nodeSecurity - .isRegistrationEnabled())) { - return true; - } - return false; - } - - public void flushNodeAuthorizedCache() { - securityCacheTime = 0; - } - public Node getCachedIdentity() { return cachedNodeIdentity; } @@ -491,6 +398,117 @@ public NetworkedNode getRootNetworkedNode() { } } + /** + * Lookup a node_security in the database, which contains private + * information used to authenticate. + */ + public NodeSecurity findNodeSecurity(String id) { + return findNodeSecurity(id, false); + } + + public NodeSecurity findNodeSecurity(String nodeId, boolean useCache) { + if (useCache) { + Map nodeSecurities = findAllNodeSecurity(true); + return nodeSecurities.get(nodeId); + } else { + List list = sqlTemplate.query(getSql("findNodeSecuritySql"), + new NodeSecurityRowMapper(), new Object[] { nodeId }, + new int[] { Types.VARCHAR }); + return getFirstEntry(list); + } + } + + public NodeSecurity findOrCreateNodeSecurity(String nodeId) { + try { + if (nodeId != null) { + NodeSecurity security = findNodeSecurity(nodeId, false); + if (security == null) { + insertNodeSecurity(nodeId); + security = findNodeSecurity(nodeId, true); + } + return security; + } else { + log.debug("A 'null' node id was passed into findNodeSecurity"); + return null; + } + } catch (UniqueKeyException ex) { + log.error( + "Could not find a node security row for '{}'", + nodeId); + throw ex; + } + } + + public boolean isRegistrationEnabled(String nodeId) { + NodeSecurity nodeSecurity = findNodeSecurity(nodeId); + if (nodeSecurity != null) { + return nodeSecurity.isRegistrationEnabled(); + } + return false; + } + + public void insertNodeSecurity(String id) { + flushNodeAuthorizedCache(); + String password = extensionService.getExtensionPoint(INodeIdCreator.class).generatePassword(new Node(id, null, null)); + password = filterPasswordOnSaveIfNeeded(password); + sqlTemplate.update(getSql("insertNodeSecuritySql"), new Object[] { id, password, + null }); + } + + public void deleteNodeSecurity(String nodeId) { + sqlTemplate.update(getSql("deleteNodeSecuritySql"), new Object[] { nodeId }); + } + + public List findNodeSecurityWithLoadEnabled() { + if (parameterService.is(ParameterConstants.CLUSTER_LOCKING_ENABLED)) { + return sqlTemplate.query( + getSql("findNodeSecurityWithLoadEnabledSql"), new NodeSecurityRowMapper()); + } else { + List list = new ArrayList(); + for (NodeSecurity nodeSecurity : findAllNodeSecurity(true).values()) { + if (nodeSecurity.isInitialLoadEnabled() || nodeSecurity.isRevInitialLoadEnabled()) { + list.add(nodeSecurity); + } + } + return list; + } + } + + public Map findAllNodeSecurity(boolean useCache) { + long maxSecurityCacheTime = parameterService + .getLong(ParameterConstants.CACHE_TIMEOUT_NODE_SECURITY_IN_MS); + Map all = securityCache; + if (all == null || System.currentTimeMillis() - securityCacheTime >= maxSecurityCacheTime + || securityCacheTime == 0 || !useCache) { + all = (Map) sqlTemplate.queryForMap( + getSql("findAllNodeSecuritySql"), new NodeSecurityRowMapper(), "node_id"); + securityCache = all; + securityCacheTime = System.currentTimeMillis(); + } + return all; + } + + /** + * Check that the given node and password match in the node_security table. + * A node must authenticate before it's allowed to sync data. + */ + public boolean isNodeAuthorized(String nodeId, String password) { + Map nodeSecurities = findAllNodeSecurity(true); + NodeSecurity nodeSecurity = nodeSecurities.get(nodeId); + if (nodeSecurity != null + && !nodeId.equals(findIdentityNodeId()) && ((nodeSecurity.getNodePassword() != null + && !nodeSecurity.getNodePassword().equals("") && nodeSecurity + .getNodePassword().equals(password)) || nodeSecurity + .isRegistrationEnabled())) { + return true; + } + return false; + } + + public void flushNodeAuthorizedCache() { + securityCacheTime = 0; + } + public boolean updateNodeSecurity(NodeSecurity security) { ISqlTransaction transaction = null; try { @@ -542,7 +560,7 @@ public boolean setInitialLoadEnabled(ISqlTransaction transaction, String nodeId, if (!syncChange) { symmetricDialect.disableSyncTriggers(transaction, nodeId); } - NodeSecurity nodeSecurity = findNodeSecurity(nodeId, true); + NodeSecurity nodeSecurity = findOrCreateNodeSecurity(nodeId); if (nodeSecurity != null) { nodeSecurity.setInitialLoadEnabled(initialLoadEnabled); nodeSecurity.setInitialLoadId(loadId); @@ -591,7 +609,7 @@ public boolean setReverseInitialLoadEnabled(ISqlTransaction transaction, String symmetricDialect.disableSyncTriggers(transaction, nodeId); } - NodeSecurity nodeSecurity = findNodeSecurity(nodeId, true); + NodeSecurity nodeSecurity = findOrCreateNodeSecurity(nodeId); if (nodeSecurity != null) { nodeSecurity.setRevInitialLoadEnabled(initialLoadEnabled); nodeSecurity.setRevInitialLoadId(loadId); @@ -653,26 +671,11 @@ public boolean isRegistrationServer() { public NodeStatus getNodeStatus() { long ts = System.currentTimeMillis(); try { - class DataLoadStatus { - int initialLoadEnabled; - Date initialLoadTime; - } - - List results = sqlTemplate.query(getSql("getDataLoadStatusSql"), - new ISqlRowMapper() { - public DataLoadStatus mapRow(Row rs) { - DataLoadStatus status = new DataLoadStatus(); - status.initialLoadEnabled = rs.getInt("initial_load_enabled"); - status.initialLoadTime = rs.getDateTime("initial_load_time"); - return status; - } - }); - - if (results.size() > 0) { - DataLoadStatus status = results.get(0); - if (status.initialLoadEnabled == 1) { + NodeSecurity nodeSecurity = findNodeSecurity(findIdentityNodeId(), true); + if (nodeSecurity != null) { + if (nodeSecurity.isInitialLoadEnabled()) { return NodeStatus.DATA_LOAD_STARTED; - } else if (status.initialLoadTime != null) { + } else if (nodeSecurity.getInitialLoadTime() != null) { return NodeStatus.DATA_LOAD_COMPLETED; } } diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/NodeServiceSqlMap.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/NodeServiceSqlMap.java index d16c154cd2..40f063cd79 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/NodeServiceSqlMap.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/NodeServiceSqlMap.java @@ -166,10 +166,6 @@ public NodeServiceSqlMap(IDatabasePlatform platform, Map replace "" + "insert into $(node_security) (node_id, node_password, created_at_node_id) values (?, ?, ?) "); - putSql("getDataLoadStatusSql", "" - + "select initial_load_enabled, initial_load_time from $(node_security) ns, " - + " $(node_identity) ni where ns.node_id=ni.node_id "); - putSql("insertNodeHostSql", "insert into $(node_host) " + " (ip_address, os_user, os_name, os_arch, os_version, available_processors, free_memory_bytes, total_memory_bytes, max_memory_bytes, java_version, java_vendor, jdbc_version, symmetric_version, timezone_offset, heartbeat_time, last_restart_time, create_time, node_id, host_name) " diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/PushService.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/PushService.java index 3dce663c52..121d285fc6 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/PushService.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/PushService.java @@ -110,8 +110,7 @@ synchronized public RemoteNodeStatuses pushData(boolean force) { List nodes = nodeCommunicationService .list(CommunicationType.PUSH); if (nodes.size() > 0) { - NodeSecurity identitySecurity = nodeService.findNodeSecurity(identity - .getNodeId()); + NodeSecurity identitySecurity = nodeService.findNodeSecurity(identity.getNodeId(), true); if (identitySecurity != null) { int availableThreads = nodeCommunicationService .getAvailableThreads(CommunicationType.PUSH); @@ -187,7 +186,7 @@ public void execute(NodeCommunication nodeCommunication, RemoteNodeStatus status private void pushToNode(Node remote, RemoteNodeStatus status) { Node identity = nodeService.findIdentity(); - NodeSecurity identitySecurity = nodeService.findNodeSecurity(identity.getNodeId()); + NodeSecurity identitySecurity = nodeService.findNodeSecurity(identity.getNodeId(), true); IOutgoingWithResponseTransport transport = null; ProcessInfo processInfo = statisticManager.newProcessInfo(new ProcessInfoKey(identity .getNodeId(), status.getChannelId(), remote.getNodeId(), ProcessType.PUSH_JOB)); diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/RouterService.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/RouterService.java index bdcd785c9d..edfb9d2f82 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/RouterService.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/RouterService.java @@ -226,7 +226,8 @@ protected void insertInitialLoadEvents() { INodeService nodeService = engine.getNodeService(); Node identity = nodeService.findIdentity(); if (identity != null) { - NodeSecurity identitySecurity = nodeService.findNodeSecurity(identity.getNodeId()); + boolean isClusteringEnabled = parameterService.is(ParameterConstants.CLUSTER_LOCKING_ENABLED); + NodeSecurity identitySecurity = nodeService.findNodeSecurity(identity.getNodeId(), !isClusteringEnabled); if (engine.getParameterService().isRegistrationServer() || (identitySecurity != null && !identitySecurity.isRegistrationEnabled() && identitySecurity .getRegistrationTime() != null)) { diff --git a/symmetric-core/src/main/resources/symmetric-default.properties b/symmetric-core/src/main/resources/symmetric-default.properties index 049285daea..45969d2ae6 100644 --- a/symmetric-core/src/main/resources/symmetric-default.properties +++ b/symmetric-core/src/main/resources/symmetric-default.properties @@ -1129,8 +1129,7 @@ parameter.reload.timeout.ms=600000 # # DatabaseOverridable: true # Tags: other -cache.node.security.time.ms=0 - +cache.node.security.time.ms=600000 # This is the amount of time node group links entries will be cached before re-reading them from the database. # diff --git a/symmetric-core/src/test/java/org/jumpmind/symmetric/service/impl/MockNodeService.java b/symmetric-core/src/test/java/org/jumpmind/symmetric/service/impl/MockNodeService.java index 6a92dc6ace..26c1f3ae39 100644 --- a/symmetric-core/src/test/java/org/jumpmind/symmetric/service/impl/MockNodeService.java +++ b/symmetric-core/src/test/java/org/jumpmind/symmetric/service/impl/MockNodeService.java @@ -276,7 +276,11 @@ public boolean setReverseInitialLoadEnabled(String nodeId, boolean initialLoadEn public List findNodeSecurityWithLoadEnabled() { return null; } - + + public NodeSecurity findOrCreateNodeSecurity(String nodeId) { + return null; + } + public Node findIdentity(boolean useCache, boolean logSqlError) { return null; } diff --git a/symmetric-server/src/main/java/org/jumpmind/symmetric/web/PullUriHandler.java b/symmetric-server/src/main/java/org/jumpmind/symmetric/web/PullUriHandler.java index dd051b4416..e0ad450ff6 100644 --- a/symmetric-server/src/main/java/org/jumpmind/symmetric/web/PullUriHandler.java +++ b/symmetric-server/src/main/java/org/jumpmind/symmetric/web/PullUriHandler.java @@ -29,7 +29,6 @@ import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringUtils; -import org.bouncycastle.ocsp.RespData; import org.jumpmind.symmetric.model.ChannelMap; import org.jumpmind.symmetric.model.Node; import org.jumpmind.symmetric.model.NodeSecurity; @@ -99,7 +98,7 @@ public void handleWithCompression(HttpServletRequest req, HttpServletResponse re public void pull(String nodeId, String remoteHost, String remoteAddress, OutputStream outputStream, String encoding, ChannelMap map) throws IOException { - NodeSecurity nodeSecurity = nodeService.findNodeSecurity(nodeId); + NodeSecurity nodeSecurity = nodeService.findNodeSecurity(nodeId, true); long ts = System.currentTimeMillis(); try { ChannelMap remoteSuspendIgnoreChannelsList = configurationService