Skip to content

Commit

Permalink
cells: Drop legacy cells communication
Browse files Browse the repository at this point in the history
Motivation:

Now that we are past a golden release, we can drop the legacy cells mode.

Modification:

Drops the cells broker scheme and the legacy location manager service.

Result:

The `cells` value for `dcache.broker.scheme` is no longer supported. The legacy
UDP location manager service is no longer supported. `dcache.broker.domain` is
obsolete.

The default value for `dcache.broker.scheme` is now `satellite`. Unless deployed
as a single domain setup, at least one of the deployed domains has to be marked
as a core domain for dCache to function.

Target: trunk
Require-notes: yes
Reqiure-book: yes
Acked-by: Paul Millar <paul.millar@desy.de>

Reviewed at https://rb.dcache.org/r/9382/
  • Loading branch information
gbehrmann committed Jun 8, 2016
1 parent 459680d commit ddfdbd0
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 217 deletions.
153 changes: 0 additions & 153 deletions modules/cells/src/main/java/dmg/cells/services/LocationManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,6 @@ public class LocationManager extends CellAdapter
private static final String ZK_CORES = "/dcache/lm/cores";

private final CoreDomains coreDomains;
private final LegacyServer legacy;
private final Args args;
private final CellNucleus nucleus;
private final CellDomainRole role;
Expand Down Expand Up @@ -159,145 +158,6 @@ byte[] toBytes(HostAndPort address)
}
}

/**
* Legacy server component of the location manager, i.e. the location manager daemon.
*
* For backwards compatibility is provides a UDP server on which pre-2.16 domains
* may discover the message brokers. We do not support pre-2.16 message brokers (aka
* listening domains).
*/
@Deprecated // drop in 2.17
public class LegacyServer implements Runnable, Closeable
{
private final int port;
private final DatagramSocket socket;
private final Thread worker;
private final RemoteCommands remoteCommands = new RemoteCommands();

public LegacyServer(int port)
throws SocketException
{
this.port = port;

socket = new DatagramSocket(this.port);
worker = nucleus.newThread(this, "Server");
}

public void start()
{
worker.start();
}

/**
* Shutdown the server. Notice that the method will not wait
* for the worker thread to shut down.
*/
@Override
public void close()
{
worker.interrupt();
socket.close();
}

@Override
public void run()
{
/* Legacy UDP location manager daemon.
*/
DatagramPacket packet;
while (!Thread.currentThread().isInterrupted()) {
try {
packet = new DatagramPacket(new byte[1024], 1024);
socket.receive(packet);
} catch (SocketException e) {
if (!Thread.currentThread().isInterrupted()) {
LOGGER.warn("Exception in Server receive loop (exiting)", e);
}
break;
} catch (Exception ie) {
LOGGER.warn("Exception in Server receive loop (exiting)", ie);
break;
}
try {
process(packet);
socket.send(packet);
} catch (Exception se) {
LOGGER.warn("Exception in send ", se);
}
}
socket.close();
}

public void process(DatagramPacket packet) throws Exception
{
byte[] data = packet.getData();
int datalen = packet.getLength();
InetAddress address = packet.getAddress();
if (datalen <= 0) {
LOGGER.warn("Empty Packet arrived from {}", packet.getAddress());
return;
}
String message = new String(data, 0, datalen);
LOGGER.info("server query : [{}] ({}) {}", address, message.length(), message);
Args args = new Args(message);
message = (args.argc() == 0) ? "" : (String) remoteCommands.command(args);

if (message != null) {
LOGGER.info("server reply : {}", message);
data = message.getBytes();
packet.setData(data);
packet.setLength(data.length);
}
}

/**
* Legacy UDP remote commands used for backwards compatibility with pre 2.16 pools.
*
* Maps whatToDo and whereIs commands to equivalent ZooKeeper representations.
*/
public class RemoteCommands extends CommandInterpreter
{
public static final String hh_whatToDo = "<domainName>";
public String ac_whatToDo_$_1(Args args)
{
String domainName = args.argv(0);
String serial = args.getOpt("serial");
Map<String, HostAndPort> cores = coreDomains.cores();
switch (cores.size()) {
case 0:
return null;
case 1:
String broker = Iterables.get(cores.keySet(), 0);
return "do" + (serial != null ? " -serial=" + serial : "") + " " + domainName + " " + "nl" + " c:" + broker + " d:" + broker;
default:
LOGGER.warn("Legacy domain {} tried to connect, but are not supported in multi-core topologies.", domainName);
return "do" + (serial != null ? " -serial=" + serial : "") + " " + domainName;
}
}

public static final String hh_whereIs = "<domainName>";
public String ac_whereIs_$_1(Args args)
{
String domainName = args.argv(0);

HostAndPort address = coreDomains.readAddressOf(domainName);
if (address == null) {
throw new IllegalArgumentException("Domain not listening: " + domainName);
}

StringBuilder sb = new StringBuilder();
sb.append("location");
String serial = args.getOpt("serial");
if (serial != null) {
sb.append(" -serial=").append(serial);
}
sb.append(" ").append(domainName);
sb.append(" ").append(address);
return sb.toString();
}
}
}

/**
* Client component of the location manager for satellite domains.
*
Expand Down Expand Up @@ -412,12 +272,6 @@ public LocationManager(String name, String args) throws CommandException, IOExce
nucleus = getNucleus();
coreDomains = new CoreDomains(getCellDomainName(), getCuratorFramework());

if (this.args.hasOption("legacy")) {
legacy = new LegacyServer(this.args.getIntOption("legacy"));
} else {
legacy = null;
}

if (this.args.hasOption("role")) {
role = CellDomainRole.valueOf(this.args.getOption("role").toUpperCase());
switch (role) {
Expand All @@ -442,10 +296,6 @@ protected void started()
{
try {
coreDomains.start();
if (legacy != null) {
legacy.start();
LOGGER.info("Server Setup Done");
}
if (client != null) {
client.start();
}
Expand All @@ -467,9 +317,6 @@ protected void started()
public void cleanUp()
{
CloseableUtils.closeQuietly(coreDomains);
if (legacy != null) {
legacy.close();
}
if (client != null) {
client.close();
}
Expand Down
21 changes: 4 additions & 17 deletions skel/bin/dcache
Original file line number Diff line number Diff line change
Expand Up @@ -661,21 +661,14 @@ case "$1" in

ports)
. ${lib}/utils.sh
broker_domain=$(getProperty dcache.broker.domain)
(
printf "DOMAIN\tCELL\tSERVICE\tPROTO\tPORT\n"
for domain in $(getProperty dcache.domains); do
if [ "$domain" = "$broker_domain" ]; then
prop_prefix=dcache.broker.net.ports
else
prop_prefix=dcache.non-broker.net.ports
fi

for port in $(getProperty "${prop_prefix}.tcp" "$domain"); do
for port in $(getProperty "dcache.net.ports.tcp" "$domain"); do
printf "${domain}\t-\t-\tTCP\t${port}\n"
done

for port in $(getProperty "${prop_prefix}.udp" "$domain"); do
for port in $(getProperty "dcache.net.ports.udp" "$domain"); do
printf "${domain}\t-\t-\tUDP\t${port}\n"
done

Expand All @@ -694,14 +687,8 @@ case "$1" in
) | column

for domain in $(getProperty dcache.domains); do
if [ "$domain" = "$broker_domain" ]; then
prop_prefix=dcache.broker.net.ports
else
prop_prefix=dcache.non-broker.net.ports
fi

for port in $(getProperty "${prop_prefix}.tcp" "$domain") \
$(getProperty "${prop_prefix}.udp" "$domain"); do
for port in $(getProperty "dcache.net.ports.tcp" "$domain") \
$(getProperty "dcache.net.ports.udp" "$domain"); do
has_broker_ports=true

if [ "$port" = "0" ]; then
Expand Down
13 changes: 0 additions & 13 deletions skel/share/cells/tunnel-cells.fragment

This file was deleted.

45 changes: 11 additions & 34 deletions skel/share/defaults/dcache.properties
Original file line number Diff line number Diff line change
Expand Up @@ -340,20 +340,14 @@ dcache.net.listen =
# 'none' no broker connection is establish. This is used for single
# domain deployments.
#
# 'cells' is the classic cells based system. It relies on a central
# broker domain that all domains connect to. By default that domain
# is the dCacheDomain. The central domain embeds a UDP server to
# allow pre-2.16 domains to connect.
#
# 'core' domains are message brokers that forward messages on behalf
# of satellite domains. All domains connect to all core domains.
# There may be more than one core domain.
#
# 'satellite' domains connect to all broker domains.
#
(not-for-services,one-of?cells|none|core|satellite)\
dcache.broker.scheme = cells

(not-for-services,one-of?none|core|satellite)\
dcache.broker.scheme = satellite

# ---- Broker for interdomain communication
#
Expand All @@ -362,11 +356,6 @@ dcache.broker.scheme = cells
# for TCP connections from other domains on the port specified by
# dcache.broker.port.
#
# By default the cells scheme builds a non-redundant star topology with
# all messages going through a single core domain. This domain is usually
# dCacheDomain, but any domain can be used.
#
(not-for-services)dcache.broker.domain = dCacheDomain
(not-for-services)dcache.broker.port = 11111

# -----------------------------------------------------------------------
Expand Down Expand Up @@ -981,30 +970,17 @@ dcache.description =
# The following properties provide information about the broker
# domain. The actual domain is defined by dcache.broker.domain.
#
(immutable)dcache.broker.net.ports.tcp-when-scheme-is-cells=${dcache.broker.port}
(immutable)dcache.broker.net.ports.udp-when-scheme-is-cells=${dcache.broker.port}
(immutable)dcache.non-broker.net.ports.tcp-when-scheme-is-cells=
(immutable)dcache.non-broker.net.ports.udp-when-scheme-is-cells=

(immutable)dcache.broker.net.ports.tcp-when-scheme-is-none=
(immutable)dcache.broker.net.ports.udp-when-scheme-is-none=
(immutable)dcache.non-broker.net.ports.tcp-when-scheme-is-none=
(immutable)dcache.non-broker.net.ports.udp-when-scheme-is-none=
(immutable)dcache.net.ports.tcp-when-scheme-is-none=
(immutable)dcache.net.ports.udp-when-scheme-is-none=

(immutable)dcache.broker.net.ports.tcp-when-scheme-is-core=${dcache.broker.port}
(immutable)dcache.broker.net.ports.udp-when-scheme-is-core=${dcache.broker.port}
(immutable)dcache.non-broker.net.ports.tcp-when-scheme-is-core=${dcache.broker.port}
(immutable)dcache.non-broker.net.ports.udp-when-scheme-is-core=${dcache.broker.port}
(immutable)dcache.net.ports.tcp-when-scheme-is-core=${dcache.broker.port}
(immutable)dcache.net.ports.udp-when-scheme-is-core=

(immutable)dcache.broker.net.ports.tcp-when-scheme-is-satellite=
(immutable)dcache.broker.net.ports.udp-when-scheme-is-satellite=
(immutable)dcache.non-broker.net.ports.tcp-when-scheme-is-satellite=
(immutable)dcache.non-broker.net.ports.udp-when-scheme-is-satellite=
(immutable)dcache.net.ports.tcp-when-scheme-is-satellite=
(immutable)dcache.net.ports.udp-when-scheme-is-satellite=

(immutable)dcache.broker.net.ports.tcp=${dcache.broker.net.ports.tcp-when-scheme-is-${dcache.broker.scheme}}
(immutable)dcache.broker.net.ports.udp=${dcache.broker.net.ports.udp-when-scheme-is-${dcache.broker.scheme}}
(immutable)dcache.non-broker.net.ports.tcp=${dcache.non-broker.net.ports.tcp-when-scheme-is-${dcache.broker.scheme}}
(immutable)dcache.non-broker.net.ports.udp=${dcache.non-broker.net.ports.udp-when-scheme-is-${dcache.broker.scheme}}
(immutable)dcache.net.ports.tcp=${dcache.broker.net.ports.tcp-when-scheme-is-${dcache.broker.scheme}}
(immutable)dcache.net.ports.udp=${dcache.broker.net.ports.udp-when-scheme-is-${dcache.broker.scheme}}

# -----------------------------------------------------------------------
# ---- Unused properties
Expand All @@ -1016,3 +992,4 @@ dcache.description =
(obsolete)dcache.service.copymanager =

(obsolete)dcache.broker.host = See dcache.zookeeper.connection
(obsolete)dcache.broker.domain = See dcache.broker.scheme

0 comments on commit ddfdbd0

Please sign in to comment.