@Override public void offerAddresses(List<NetworkAddress> nodes) { cleanUp(); nodes.stream() .filter(node -> node.getTime() < now(+2 * MINUTE) && node.getTime() > now(-28 * DAY)) .forEach(node -> { synchronized (this) { NetworkAddress existing = loadExisting(node); if (existing == null) { insert(node); } else if (node.getTime() > existing.getTime()) { update(node); } } }); }
private void insert(NetworkAddress node) { try ( Connection connection = config.getConnection(); PreparedStatement ps = connection.prepareStatement( "INSERT INTO Node (stream, address, port, services, time) " + "VALUES (?, ?, ?, ?, ?)") ) { ps.setLong(1, node.getStream()); ps.setBytes(2, node.getIPv6()); ps.setInt(3, node.getPort()); ps.setLong(4, node.getServices()); ps.setLong(5, node.getTime()); ps.executeUpdate(); } catch (SQLException e) { LOG.error(e.getMessage(), e); } }
private void update(NetworkAddress node) { try ( Connection connection = config.getConnection(); PreparedStatement ps = connection.prepareStatement( "UPDATE Node SET services=?, time=? WHERE stream=? AND address=? AND port=?") ) { ps.setLong(1, node.getServices()); ps.setLong(2, node.getTime()); ps.setLong(3, node.getStream()); ps.setBytes(4, node.getIPv6()); ps.setInt(5, node.getPort()); ps.executeUpdate(); } catch (SQLException e) { LOG.error(e.getMessage(), e); } } }