Skip to content

Commit

Permalink
partially fixes name ids and numerical ids
Browse files Browse the repository at this point in the history
  • Loading branch information
thep2p committed Sep 2, 2023
1 parent 68f57e4 commit 67fa57b
Show file tree
Hide file tree
Showing 14 changed files with 102 additions and 92 deletions.
60 changes: 30 additions & 30 deletions src/main/java/middlelayer/MiddleLayer.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@
import underlay.packets.requests.IsAvailableRequest;
import underlay.packets.requests.ReleaseLockRequest;
import underlay.packets.requests.SearchByIdentifierRequest;
import underlay.packets.requests.SearchByNameIdRecursiveRequest;
import underlay.packets.requests.SearchByNameIdRequest;
import underlay.packets.requests.SearchByMembershipVectorRecursiveRequest;
import underlay.packets.requests.SearchByMembershipVectorRequest;
import underlay.packets.requests.UpdateLeftNodeRequest;
import underlay.packets.requests.UpdateRightNodeRequest;
import underlay.packets.responses.AckResponse;
Expand Down Expand Up @@ -121,27 +121,27 @@ public Response receive(Request request) {
}
// If the overlay is locked, return a response denoting the client to try again later.
switch (request.type) {
case SearchByNameId:
case SearchByMembershipVector:
// Check whether the node is available for lookups (i.e., already inserted.)
if (!overlay.isAvailable()) {
return new Response(true);
}
result = overlay.searchByMembershipVector(((SearchByNameIdRequest) request).targetNameId);
result = overlay.searchByMembershipVector(((SearchByMembershipVectorRequest) request).targetMembershipVector);
return new SearchResultResponse(result);
case SearchByNameIDRecursive:
case SearchByMembershipVectorRecursive:
// Check whether the node is available for lookups (i.e., already inserted.)
if (!overlay.isAvailable()) {
return new Response(true);
}
result = overlay.searchByMembershipVector(((SearchByNameIdRecursiveRequest) request).target,
((SearchByNameIdRecursiveRequest) request).level);
result = overlay.searchByMembershipVector(((SearchByMembershipVectorRecursiveRequest) request).target,
((SearchByMembershipVectorRecursiveRequest) request).level);
return new SearchResultResponse(result);
case SearchByNumId:
case SearchByIdentifier:
// Check whether the node is available for lookups (i.e., already inserted.)
if (!overlay.isAvailable()) {
return new Response(true);
}
identity = overlay.searchByNumId(((SearchByIdentifierRequest) request).targetNumId);
identity = overlay.searchByIdentifier(((SearchByIdentifierRequest) request).searchByIdentifier);
return new IdentityResponse(identity);
case GetIdentity:
identity = overlay.getIdentity();
Expand Down Expand Up @@ -228,8 +228,8 @@ private SkipNodeInterface getById(Identifier id) {
allowing for it to be used as if it was simply available locally.
*/

public SearchResult searchByNameId(String destinationAddress, int port, MembershipVector nameId) {
return searchByNameId(destinationAddress, port, null, nameId);
public SearchResult searchByMembershipVector(String destinationAddress, int port, MembershipVector membershipVector) {
return searchByMembershipVector(destinationAddress, port, null, membershipVector);
}

/**
Expand All @@ -238,11 +238,11 @@ public SearchResult searchByNameId(String destinationAddress, int port, Membersh
* @param destinationAddress String representing the destination address.
* @param port Integer representing the port.
* @param receiverId ID of the receiver.
* @param nameId name id to be searched.
* @param membershipVector target membership vector to be searched for.
* @return Search results from the search.
*/
public SearchResult searchByNameId(String destinationAddress, int port, Identifier receiverId, MembershipVector nameId) {
Request request = new SearchByNameIdRequest(nameId);
public SearchResult searchByMembershipVector(String destinationAddress, int port, Identifier receiverId, MembershipVector membershipVector) {
Request request = new SearchByMembershipVectorRequest(membershipVector);
request.receiverId = receiverId;
// Send the request through the underlay
Response response = this.send(destinationAddress, port, request);
Expand All @@ -260,7 +260,7 @@ public SearchResult searchByNameId(String destinationAddress, int port, Identifi
* @return search result instance.
*/
public SearchResult searchByMembershipVector(String destinationAddress, int port, Identifier receiverId, MembershipVector target, int level) {
Request request = new SearchByNameIdRecursiveRequest(target, level);
Request request = new SearchByMembershipVectorRecursiveRequest(target, level);
request.receiverId = receiverId;
// Send the request through the underlay.
Response response = this.send(destinationAddress, port, request);
Expand All @@ -277,11 +277,11 @@ public SkipNodeIdentity searchByIdentifier(Identifier identifier, String destina
* @param destinationAddress String value representing the destination address.
* @param port Integer value representing the port.
* @param receiverId receiver id.
* @param targetId target numerical id.
* @param targetIdentifier target identifier.
* @return skip node identity.
*/
public SkipNodeIdentity searchByIdentifier(String destinationAddress, int port, Identifier receiverId, Identifier targetId) {
Request request = new SearchByIdentifierRequest(targetId);
public SkipNodeIdentity searchByIdentifier(String destinationAddress, int port, Identifier receiverId, Identifier targetIdentifier) {
Request request = new SearchByIdentifierRequest(targetIdentifier);
request.receiverId = receiverId;
// Send the request through the underlay
Response response = this.send(destinationAddress, port, request);
Expand Down Expand Up @@ -510,8 +510,8 @@ public boolean isAvailable(String destinationAddress, int port, Identifier recei
return ((BooleanResponse) r).answer;
}

public SkipNodeIdentity getLeftLadder(String destinationAddress, int port, int level, String nameId) {
return getLeftLadder(destinationAddress, port, null, level, nameId);
public SkipNodeIdentity getLeftLadder(String destinationAddress, int port, int level, MembershipVector membershipVector) {
return getLeftLadder(destinationAddress, port, null, level, membershipVector);
}

/**
Expand All @@ -521,19 +521,19 @@ public SkipNodeIdentity getLeftLadder(String destinationAddress, int port, int l
* @param port Integer value representing the port.
* @param receiverId receiver id.
* @param level Integer representing the level.
* @param nameId String representing the name id of the node.
* @return skip node identity.
* @param membershipVector The membership vector of the node.
* @return Skip Graph node identity.
*/
public SkipNodeIdentity getLeftLadder(String destinationAddress, int port, Identifier receiverId, int level, String nameId) {
Request request = new GetLeftLadderRequest(level, nameId);
public SkipNodeIdentity getLeftLadder(String destinationAddress, int port, Identifier receiverId, int level, MembershipVector membershipVector) {
Request request = new GetLeftLadderRequest(level, membershipVector);
request.receiverId = receiverId;
// Send the request through the underlay
Response r = send(destinationAddress, port, request);
return ((IdentityResponse) r).identity;
}

public SkipNodeIdentity getRightLadder(String destinationAddress, int port, int level, String nameId) {
return getRightLadder(destinationAddress, port, null, level, nameId);
public SkipNodeIdentity getRightLadder(String destinationAddress, int port, int level, MembershipVector membershipVector) {
return getRightLadder(destinationAddress, port, null, level, membershipVector);
}

/**
Expand All @@ -543,11 +543,11 @@ public SkipNodeIdentity getRightLadder(String destinationAddress, int port, int
* @param port Integer value representing the port.
* @param receiverId receiver id.
* @param level Integer representing the level.
* @param nameId String representing the name id of the node.
* @return skip node identity.
* @param membershipVector The membership vector of the node.
* @return Skip Graph node identity.
*/
public SkipNodeIdentity getRightLadder(String destinationAddress, int port, Identifier receiverId, int level, String nameId) {
Request request = new GetRightLadderRequest(level, nameId);
public SkipNodeIdentity getRightLadder(String destinationAddress, int port, Identifier receiverId, int level, MembershipVector membershipVector) {
Request request = new GetRightLadderRequest(level, membershipVector);
request.receiverId = receiverId;
// Send the request through the underlay
Response r = send(destinationAddress, port, request);
Expand Down
21 changes: 10 additions & 11 deletions src/main/java/skipnode/SkipNode.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
* Skip Node class.
*/
public class SkipNode implements SkipNodeInterface {

// The identity to be returned in case the node is currently unreachable (i.e., being inserted.)
private static final SkipNodeIdentity unavailableIdentity = LookupTable.EMPTY_NODE;
private static final Logger logger = LogManager.getLogger(SkipNode.class);
Expand Down Expand Up @@ -351,29 +350,29 @@ public boolean delete() {
}

/**
* Search for the given numID.
* Search for the given identifier.
*
* @param numId The numID to search for
* @return The SkipNodeIdentity of the node with the given numID. If it does not exist, returns the SkipNodeIdentity of the SkipNode with NumID
* @param targetIdentifier the target identifier.
* @return The SkipNodeIdentity of the node with the given target identifier. If it does not exist, returns the SkipNodeIdentity of the SkipNode with NumID
* closest to the given numID from the direction the search is initiated. For example: Initiating a search for a SkipNode with NumID 50 from
* a SnipNode with NumID 10 will return the SkipNodeIdentity of the SnipNode with NumID 50 is it exists. If no such SnipNode exists, the
* SkipNodeIdentity of the SnipNode whose NumID is closest to 50 among the nodes whose NumID is less than 50 is returned.
*/
@Override
public SkipNodeIdentity searchByNumId(Identifier numId) {
public SkipNodeIdentity searchByIdentifier(Identifier targetIdentifier) {
// If this is the node the search request is looking for, return its identity
if (numId.equals(this.getIdentity().getIdentifier())) {
if (targetIdentifier.equals(this.getIdentity().getIdentifier())) {
return getIdentity();
}
// Initialize the level to begin looking at
int level = lookupTable.getNumLevels();
// If the target is greater than this node's numID, the search should continue to the right
if (this.getIdentity().getIdentifier().comparedTo(numId) == Identifier.COMPARE_LESS) {
if (this.getIdentity().getIdentifier().comparedTo(targetIdentifier) == Identifier.COMPARE_LESS) {
// Start from the top, while there is no right neighbor,
// or the right neighbor's num ID is greater than what we are searching for keep going down
while (level >= 0) {
if (lookupTable.getRight(level).equals(LookupTable.EMPTY_NODE)
|| lookupTable.getRight(level).getIdentifier().comparedTo(numId) == Identifier.COMPARE_GREATER) {
|| lookupTable.getRight(level).getIdentifier().comparedTo(targetIdentifier) == Identifier.COMPARE_GREATER) {
level--;
} else {
break;
Expand All @@ -386,13 +385,13 @@ public SkipNodeIdentity searchByNumId(Identifier numId) {
}
// Else, delegate the search to that node on the right
SkipNodeIdentity delegateNode = lookupTable.getRight(level);
return middleLayer.searchByIdentifier(delegateNode.getAddress(), delegateNode.getPort(), delegateNode.getIdentifier(), numId);
return middleLayer.searchByIdentifier(delegateNode.getAddress(), delegateNode.getPort(), delegateNode.getIdentifier(), targetIdentifier);
} else {
// Start from the top, while there is no right neighbor,
// or the right neighbor's num ID is greater than what we are searching for keep going down
while (level >= 0) {
if (lookupTable.getLeft(level).equals(LookupTable.EMPTY_NODE)
|| lookupTable.getLeft(level).getIdentifier().comparedTo(numId) == Identifier.COMPARE_LESS) {
|| lookupTable.getLeft(level).getIdentifier().comparedTo(targetIdentifier) == Identifier.COMPARE_LESS) {
level--;
} else {
break;
Expand All @@ -405,7 +404,7 @@ public SkipNodeIdentity searchByNumId(Identifier numId) {
}
// Else, delegate the search to that node on the right
SkipNodeIdentity delegateNode = lookupTable.getLeft(level);
return middleLayer.searchByIdentifier(delegateNode.getAddress(), delegateNode.getPort(), delegateNode.getIdentifier(), numId);
return middleLayer.searchByIdentifier(delegateNode.getAddress(), delegateNode.getPort(), delegateNode.getIdentifier(), targetIdentifier);
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/main/java/skipnode/SkipNodeInterface.java
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ public interface SkipNodeInterface {
* SnipNode whose NumID is closest to 50 among the nodes whose NumID is less than 50 is
* returned.
*/
SkipNodeIdentity searchByNumId(Identifier numId);
SkipNodeIdentity searchByIdentifier(Identifier numId);

/**
* Search for the given nameID.
Expand Down
20 changes: 18 additions & 2 deletions src/main/java/underlay/packets/RequestType.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,23 @@
* Denotes the types of the requests that will be employed at the underlay layer.
*/
public enum RequestType {
SearchByNameId, SearchByNameIDRecursive, SearchByNumId, NameIdLevelSearch, UpdateLeftNode, UpdateRightNode, GetLeftNode, GetRightNode,
AcquireNeighbors, FindLadder, AnnounceNeighbor, IsAvailable, GetLeftLadder, Increment, Injection, GetRightLadder, AcquireLock, ReleaseLock,
SearchByMembershipVector,
SearchByMembershipVectorRecursive,
SearchByIdentifier,
MembershipVectorLevelSearch,
UpdateLeftNode,
UpdateRightNode,
GetLeftNode,
GetRightNode,
AcquireNeighbors,
FindLadder,
AnnounceNeighbor,
IsAvailable,
GetLeftLadder,
Increment,
Injection,
GetRightLadder,
AcquireLock,
ReleaseLock,
GetIdentity
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package underlay.packets.requests;

import model.identifier.MembershipVector;
import underlay.packets.Request;
import underlay.packets.RequestType;

Expand All @@ -9,17 +10,17 @@
public class GetLeftLadderRequest extends Request {

public final int level;
public final String nameId;
public final MembershipVector membershipVector;

/**
* Constructor for GetLeftLadderRequest.
*
* @param level Integer representing the level.
* @param nameId Name ID of the node.
* @param membershipVector The membership vector of the node.
*/
public GetLeftLadderRequest(int level, String nameId) {
public GetLeftLadderRequest(int level, MembershipVector membershipVector) {
super(RequestType.GetLeftLadder);
this.level = level;
this.nameId = nameId;
this.membershipVector = membershipVector;
}
}
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
package underlay.packets.requests;

import model.identifier.MembershipVector;
import underlay.packets.Request;
import underlay.packets.RequestType;

/**
* Request for getting right ladder.
*/
public class GetRightLadderRequest extends Request {

public final int level;
public final String nameId;
public final MembershipVector membershipVector;

/**
* Constructor for GetRightLadderRequest.
*
* @param level Integer representing level.
* @param nameId Name id of the node.
* @param membershipVector the membership vector of the node.
*/
public GetRightLadderRequest(int level, String nameId) {
public GetRightLadderRequest(int level, MembershipVector membershipVector) {
super(RequestType.GetRightLadder);
this.level = level;
this.nameId = nameId;
this.membershipVector = membershipVector;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public class NameIdLevelSearchRequest extends Request {
* @param target membership vector of the target node.
*/
public NameIdLevelSearchRequest(int level, int direction, MembershipVector target) {
super(RequestType.NameIdLevelSearch);
super(RequestType.MembershipVectorLevelSearch);
this.level = level;
this.direction = direction;
this.target = target;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@
* Request object encapsulating a search by identifier (aka search by numerical id).
*/
public class SearchByIdentifierRequest extends Request {
public final Identifier targetNumId;
public final Identifier searchByIdentifier;

public SearchByIdentifierRequest(Identifier targetNumId) {
super(RequestType.SearchByNumId);
this.targetNumId = targetNumId;
super(RequestType.SearchByIdentifier);
this.searchByIdentifier = targetNumId;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
/**
* Request for searching by name id recursively.
*/
public class SearchByNameIdRecursiveRequest extends Request {
public class SearchByMembershipVectorRecursiveRequest extends Request {

public final MembershipVector target;
public final int level;
Expand All @@ -18,8 +18,8 @@ public class SearchByNameIdRecursiveRequest extends Request {
* @param target name id of the target node.
* @param level Integer representing the level.
*/
public SearchByNameIdRecursiveRequest(MembershipVector target, int level) {
super(RequestType.SearchByNameIDRecursive);
public SearchByMembershipVectorRecursiveRequest(MembershipVector target, int level) {
super(RequestType.SearchByMembershipVectorRecursive);
this.target = target;
this.level = level;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package underlay.packets.requests;

import model.identifier.MembershipVector;
import underlay.packets.Request;
import underlay.packets.RequestType;

/**
* Request for searching by name id.
*/
public class SearchByMembershipVectorRequest extends Request {

public final MembershipVector targetMembershipVector;

public SearchByMembershipVectorRequest(MembershipVector targetNameId) {
super(RequestType.SearchByMembershipVector);
this.targetMembershipVector = targetNameId;
}
}
18 changes: 0 additions & 18 deletions src/main/java/underlay/packets/requests/SearchByNameIdRequest.java

This file was deleted.

Loading

0 comments on commit 67fa57b

Please sign in to comment.