#8 replace static with private registry

This commit is contained in:
Rasha Djurdjevic 2021-01-06 16:28:40 +01:00
parent cd926f61b9
commit c86aaccfba
2 changed files with 21 additions and 14 deletions

View File

@ -19,7 +19,7 @@ public class NameServerRemote implements INameserverRemote, Serializable {
this.addresses = new ConcurrentHashMap<>(); this.addresses = new ConcurrentHashMap<>();
} }
public List<String> getNameservers() { public synchronized List<String> getNameservers() {
return new ArrayList<>(subdomains.keySet()); return new ArrayList<>(subdomains.keySet());
} }
@ -35,24 +35,28 @@ public class NameServerRemote implements INameserverRemote, Serializable {
@Override @Override
public void registerNameserver(String domain, INameserverRemote nameserver) throws RemoteException, AlreadyRegisteredException, InvalidDomainException { public void registerNameserver(String domain, INameserverRemote nameserver) throws RemoteException, AlreadyRegisteredException, InvalidDomainException {
// System.out.printf("Registering Nameserver %s%n", domain); System.out.printf("Registering Nameserver %s in %s%n", domain, name);
if (!domain.contains(".")) { if (!domain.contains(".")) {
subdomains.putIfAbsent(domain, nameserver); synchronized (this) {
subdomains.putIfAbsent(domain, nameserver);
}
} else { } else {
String[] domainParts = domain.split("\\."); String[] domainParts = domain.split("\\.");
// System.out.println(Arrays.toString(domainParts)); // System.out.println(Arrays.toString(domainParts));
String topDomain = domainParts[domainParts.length - 1]; String topDomain = domainParts[domainParts.length - 1];
System.out.printf("Top domain: %s%n", topDomain);
INameserverRemote topDomainNameServer = subdomains.get(topDomain); INameserverRemote topDomainNameServer = subdomains.get(topDomain);
String subdomainsString = domain.substring(0, domain.length() - topDomain.length() - 1); String subdomainsString = domain.substring(0, domain.length() - topDomain.length() - 1);
// System.out.printf("Subdomains %s%n", subdomainsString); // System.out.printf("Subdomains %s%n", subdomainsString);
topDomainNameServer.registerNameserver(subdomainsString, nameserver); topDomainNameServer.registerNameserver(subdomainsString, nameserver);
} }
// System.out.printf("NameServer %s%n", name); System.out.printf("NameServer %s%n", name);
subdomains.forEach((k, v) -> System.out.println(k + " " + v)); System.out.println(this.getNameservers());
} }
@Override @Override
public void registerMailboxServer(String domain, String address) throws RemoteException, AlreadyRegisteredException, InvalidDomainException { public void registerMailboxServer(String domain, String address) throws RemoteException, AlreadyRegisteredException, InvalidDomainException {
System.out.printf("Registering Mailbox Server %s with address %s in %s%n", domain, address, name);
if (!domain.contains(".")) { if (!domain.contains(".")) {
addresses.putIfAbsent(domain, address); addresses.putIfAbsent(domain, address);
} else { } else {
@ -61,8 +65,8 @@ public class NameServerRemote implements INameserverRemote, Serializable {
INameserverRemote topDomainNameServer = subdomains.get(topDomain); INameserverRemote topDomainNameServer = subdomains.get(topDomain);
String subdomainsString = domain.substring(0, domain.length() - topDomain.length() - 1); String subdomainsString = domain.substring(0, domain.length() - topDomain.length() - 1);
topDomainNameServer.registerMailboxServer(subdomainsString, address); topDomainNameServer.registerMailboxServer(subdomainsString, address);
addresses.forEach((k, v) -> System.out.println(k + " " + v));
} }
addresses.forEach((k, v) -> System.out.println(k + " " + v));
} }
@Override @Override

View File

@ -16,7 +16,7 @@ import dslab.util.Config;
public class Nameserver implements INameserver { public class Nameserver implements INameserver {
static Registry REGISTRY; private Registry registry;
private String componentId; private String componentId;
private PrintStream out; private PrintStream out;
@ -44,11 +44,11 @@ public class Nameserver implements INameserver {
int registryPort = config.getInt("registry.port"); int registryPort = config.getInt("registry.port");
if (this.componentId.equals("ns-root")) { if (this.componentId.equals("ns-root")) {
// Root Nameserver // Root Nameserver
nameServerLocal = new NameServerRemote("Root Nameserver"); nameServerLocal = new NameServerRemote("root");
try { try {
INameserverRemote stub = (INameserverRemote) UnicastRemoteObject.exportObject(nameServerLocal, registryPort); nameserverRemote = (INameserverRemote) UnicastRemoteObject.exportObject(nameServerLocal, registryPort);
REGISTRY = LocateRegistry.createRegistry(registryPort); registry = LocateRegistry.createRegistry(registryPort);
REGISTRY.rebind(registryName, stub); registry.rebind(registryName, nameserverRemote);
System.out.println("Nameserver bound."); System.out.println("Nameserver bound.");
} catch (RemoteException e) { } catch (RemoteException e) {
System.err.println("Nameserver exception:"); System.err.println("Nameserver exception:");
@ -59,8 +59,8 @@ public class Nameserver implements INameserver {
String domain = config.getString("domain"); String domain = config.getString("domain");
nameServerLocal = new NameServerRemote(domain); nameServerLocal = new NameServerRemote(domain);
try { try {
REGISTRY = LocateRegistry.getRegistry(registryHost, registryPort); registry = LocateRegistry.getRegistry(registryHost, registryPort);
nameserverRemote = (INameserverRemote) REGISTRY.lookup(registryName); nameserverRemote = (INameserverRemote) registry.lookup(registryName);
nameserverRemote.registerNameserver(domain, nameServerLocal); nameserverRemote.registerNameserver(domain, nameServerLocal);
} catch (RemoteException | NotBoundException e) { } catch (RemoteException | NotBoundException e) {
e.printStackTrace(); e.printStackTrace();
@ -89,7 +89,9 @@ public class Nameserver implements INameserver {
@Override @Override
public void nameservers() { public void nameservers() {
out.printf("Nameservers stored in the nameserver %s:%n", componentId);
List<String> nameservers = nameServerLocal.getNameservers(); List<String> nameservers = nameServerLocal.getNameservers();
out.println(nameservers);
AtomicInteger count = new AtomicInteger(0); AtomicInteger count = new AtomicInteger(0);
nameservers.forEach(nameserver -> out.printf("%d. %s%n", count.incrementAndGet(), nameserver)); nameservers.forEach(nameserver -> out.printf("%d. %s%n", count.incrementAndGet(), nameserver));
} }
@ -105,7 +107,7 @@ public class Nameserver implements INameserver {
// so just close other things // so just close other things
if (this.componentId.equals("ns-root")) { if (this.componentId.equals("ns-root")) {
try { try {
REGISTRY.unbind(registryName); registry.unbind(registryName);
UnicastRemoteObject.unexportObject(nameServerLocal, true); UnicastRemoteObject.unexportObject(nameServerLocal, true);
} catch (RemoteException e) { } catch (RemoteException e) {
e.printStackTrace(); e.printStackTrace();
@ -113,6 +115,7 @@ public class Nameserver implements INameserver {
e.printStackTrace(); e.printStackTrace();
} }
} else { } else {
this.nameservers();
System.out.println("Zone Nameserver..."); System.out.println("Zone Nameserver...");
} }
System.out.println("Nameserver shut down successfully!"); System.out.println("Nameserver shut down successfully!");