Created a new storage entry interface,

Let the storage entry class and the rest of this system use this interface
This commit is contained in:
Joshua Kissoon 2014-05-23 22:28:21 +05:30
parent 9fb139571a
commit a1faffb4d9
14 changed files with 65 additions and 44 deletions

View File

@ -15,6 +15,7 @@ import kademlia.dht.GetParameter;
import kademlia.dht.DHT; import kademlia.dht.DHT;
import kademlia.dht.KadContent; import kademlia.dht.KadContent;
import kademlia.dht.KademliaDHT; import kademlia.dht.KademliaDHT;
import kademlia.dht.KademliaStorageEntry;
import kademlia.dht.StorageEntry; import kademlia.dht.StorageEntry;
import kademlia.exceptions.ContentNotFoundException; import kademlia.exceptions.ContentNotFoundException;
import kademlia.exceptions.RoutingException; import kademlia.exceptions.RoutingException;
@ -265,7 +266,7 @@ public class JKademliaNode implements KademliaNode
} }
@Override @Override
public int put(StorageEntry entry) throws IOException public int put(KademliaStorageEntry entry) throws IOException
{ {
StoreOperation sop = new StoreOperation(this.server, this, entry, this.dht, this.config); StoreOperation sop = new StoreOperation(this.server, this, entry, this.dht, this.config);
sop.execute(); sop.execute();
@ -281,7 +282,7 @@ public class JKademliaNode implements KademliaNode
} }
@Override @Override
public StorageEntry get(GetParameter param) throws NoSuchElementException, IOException, ContentNotFoundException public KademliaStorageEntry get(GetParameter param) throws NoSuchElementException, IOException, ContentNotFoundException
{ {
if (this.dht.contains(param)) if (this.dht.contains(param))
{ {

View File

@ -5,7 +5,7 @@ import java.util.NoSuchElementException;
import kademlia.dht.GetParameter; import kademlia.dht.GetParameter;
import kademlia.dht.KadContent; import kademlia.dht.KadContent;
import kademlia.dht.KademliaDHT; import kademlia.dht.KademliaDHT;
import kademlia.dht.StorageEntry; import kademlia.dht.KademliaStorageEntry;
import kademlia.exceptions.ContentNotFoundException; import kademlia.exceptions.ContentNotFoundException;
import kademlia.exceptions.RoutingException; import kademlia.exceptions.RoutingException;
import kademlia.node.Node; import kademlia.node.Node;
@ -86,7 +86,7 @@ public interface KademliaNode
* @throws java.io.IOException * @throws java.io.IOException
* *
*/ */
public int put(StorageEntry entry) throws IOException; public int put(KademliaStorageEntry entry) throws IOException;
/** /**
* Store a content on the local node's DHT * Store a content on the local node's DHT
@ -107,7 +107,7 @@ public interface KademliaNode
* @throws java.io.IOException * @throws java.io.IOException
* @throws kademlia.exceptions.ContentNotFoundException * @throws kademlia.exceptions.ContentNotFoundException
*/ */
public StorageEntry get(GetParameter param) throws NoSuchElementException, IOException, ContentNotFoundException; public KademliaStorageEntry get(GetParameter param) throws NoSuchElementException, IOException, ContentNotFoundException;
/** /**
* Allow the user of the System to call refresh even out of the normal Kad refresh timing * Allow the user of the System to call refresh even out of the normal Kad refresh timing

View File

@ -26,7 +26,7 @@ public class DHT implements KademliaDHT
{ {
private transient StoredContentManager contentManager; private transient StoredContentManager contentManager;
private transient KadSerializer<StorageEntry> serializer = null; private transient KadSerializer<KademliaStorageEntry> serializer = null;
private transient KadConfiguration config; private transient KadConfiguration config;
private final String ownerId; private final String ownerId;
@ -51,7 +51,7 @@ public class DHT implements KademliaDHT
} }
@Override @Override
public KadSerializer<StorageEntry> getSerializer() public KadSerializer<KademliaStorageEntry> getSerializer()
{ {
if (null == serializer) if (null == serializer)
{ {
@ -62,7 +62,7 @@ public class DHT implements KademliaDHT
} }
@Override @Override
public boolean store(StorageEntry content) throws IOException public boolean store(KademliaStorageEntry content) throws IOException
{ {
/* Lets check if we have this content and it's the updated version */ /* Lets check if we have this content and it's the updated version */
if (this.contentManager.contains(content.getContentMetadata())) if (this.contentManager.contains(content.getContentMetadata()))
@ -130,7 +130,7 @@ public class DHT implements KademliaDHT
} }
@Override @Override
public StorageEntry retrieve(KademliaId key, int hashCode) throws FileNotFoundException, IOException, ClassNotFoundException public KademliaStorageEntry retrieve(KademliaId key, int hashCode) throws FileNotFoundException, IOException, ClassNotFoundException
{ {
String folder = this.getContentStorageFolderName(key); String folder = this.getContentStorageFolderName(key);
DataInputStream din = new DataInputStream(new FileInputStream(folder + File.separator + hashCode + ".kct")); DataInputStream din = new DataInputStream(new FileInputStream(folder + File.separator + hashCode + ".kct"));
@ -144,7 +144,7 @@ public class DHT implements KademliaDHT
} }
@Override @Override
public StorageEntry get(StorageEntryMetadata entry) throws IOException, NoSuchElementException public KademliaStorageEntry get(StorageEntryMetadata entry) throws IOException, NoSuchElementException
{ {
try try
{ {
@ -164,7 +164,7 @@ public class DHT implements KademliaDHT
} }
@Override @Override
public StorageEntry get(GetParameter param) throws NoSuchElementException, IOException public KademliaStorageEntry get(GetParameter param) throws NoSuchElementException, IOException
{ {
/* Load a KadContent if any exist for the given criteria */ /* Load a KadContent if any exist for the given criteria */
try try

View File

@ -35,7 +35,7 @@ public interface KademliaDHT
* *
* @return The new ContentSerializer * @return The new ContentSerializer
*/ */
public KadSerializer<StorageEntry> getSerializer(); public KadSerializer<KademliaStorageEntry> getSerializer();
/** /**
* Handle storing content locally * Handle storing content locally
@ -46,7 +46,7 @@ public interface KademliaDHT
* *
* @throws java.io.IOException * @throws java.io.IOException
*/ */
public boolean store(StorageEntry content) throws IOException; public boolean store(KademliaStorageEntry content) throws IOException;
public boolean store(KadContent content) throws IOException; public boolean store(KadContent content) throws IOException;
@ -61,7 +61,7 @@ public interface KademliaDHT
* @throws java.io.FileNotFoundException * @throws java.io.FileNotFoundException
* @throws java.lang.ClassNotFoundException * @throws java.lang.ClassNotFoundException
*/ */
public StorageEntry retrieve(KademliaId key, int hashCode) throws FileNotFoundException, IOException, ClassNotFoundException; public KademliaStorageEntry retrieve(KademliaId key, int hashCode) throws FileNotFoundException, IOException, ClassNotFoundException;
/** /**
* Check if any content for the given criteria exists in this DHT * Check if any content for the given criteria exists in this DHT
@ -81,7 +81,7 @@ public interface KademliaDHT
* *
* @throws java.io.IOException * @throws java.io.IOException
*/ */
public StorageEntry get(StorageEntryMetadata entry) throws IOException, NoSuchElementException; public KademliaStorageEntry get(StorageEntryMetadata entry) throws IOException, NoSuchElementException;
/** /**
* Get the StorageEntry for the content if any exist. * Get the StorageEntry for the content if any exist.
@ -92,7 +92,7 @@ public interface KademliaDHT
* *
* @throws java.io.IOException * @throws java.io.IOException
*/ */
public StorageEntry get(GetParameter param) throws NoSuchElementException, IOException; public KademliaStorageEntry get(GetParameter param) throws NoSuchElementException, IOException;
/** /**
* Delete a content from local storage * Delete a content from local storage

View File

@ -0,0 +1,17 @@
package kademlia.dht;
/**
* A StorageEntry interface for the storage entry class used to store a content on the DHT
*
* @author Joshua Kissoon
* @since 20140523
*/
public interface KademliaStorageEntry
{
public void setContent(final byte[] data);
public byte[] getContent();
public StorageEntryMetadata getContentMetadata();
}

View File

@ -6,7 +6,7 @@ package kademlia.dht;
* @author Joshua Kissoon * @author Joshua Kissoon
* @since 20140402 * @since 20140402
*/ */
public class StorageEntry public class StorageEntry implements KademliaStorageEntry
{ {
private String content; private String content;
@ -23,16 +23,19 @@ public class StorageEntry
this.metadata = metadata; this.metadata = metadata;
} }
@Override
public final void setContent(final byte[] data) public final void setContent(final byte[] data)
{ {
this.content = new String(data); this.content = new String(data);
} }
@Override
public final byte[] getContent() public final byte[] getContent()
{ {
return this.content.getBytes(); return this.content.getBytes();
} }
@Override
public final StorageEntryMetadata getContentMetadata() public final StorageEntryMetadata getContentMetadata()
{ {
return this.metadata; return this.metadata;

View File

@ -3,7 +3,7 @@ package kademlia.message;
import java.io.DataInputStream; import java.io.DataInputStream;
import java.io.DataOutputStream; import java.io.DataOutputStream;
import java.io.IOException; import java.io.IOException;
import kademlia.dht.StorageEntry; import kademlia.dht.KademliaStorageEntry;
import kademlia.node.Node; import kademlia.node.Node;
import kademlia.util.serializer.JsonSerializer; import kademlia.util.serializer.JsonSerializer;
@ -18,7 +18,7 @@ public class ContentMessage implements Message
public static final byte CODE = 0x04; public static final byte CODE = 0x04;
private StorageEntry content; private KademliaStorageEntry content;
private Node origin; private Node origin;
/** /**
@ -26,7 +26,7 @@ public class ContentMessage implements Message
* @param content The content to be stored * @param content The content to be stored
* *
*/ */
public ContentMessage(Node origin, StorageEntry content) public ContentMessage(Node origin, KademliaStorageEntry content)
{ {
this.content = content; this.content = content;
this.origin = origin; this.origin = origin;
@ -43,7 +43,7 @@ public class ContentMessage implements Message
this.origin.toStream(out); this.origin.toStream(out);
/* Serialize the KadContent, then send it to the stream */ /* Serialize the KadContent, then send it to the stream */
new JsonSerializer<StorageEntry>().write(content, out); new JsonSerializer<KademliaStorageEntry>().write(content, out);
} }
@Override @Override
@ -53,7 +53,7 @@ public class ContentMessage implements Message
try try
{ {
this.content = new JsonSerializer<StorageEntry>().read(in); this.content = new JsonSerializer<KademliaStorageEntry>().read(in);
} }
catch (ClassNotFoundException e) catch (ClassNotFoundException e)
{ {
@ -66,7 +66,7 @@ public class ContentMessage implements Message
return this.origin; return this.origin;
} }
public StorageEntry getContent() public KademliaStorageEntry getContent()
{ {
return this.content; return this.content;
} }

View File

@ -3,7 +3,7 @@ package kademlia.message;
import java.io.DataInputStream; import java.io.DataInputStream;
import java.io.DataOutputStream; import java.io.DataOutputStream;
import java.io.IOException; import java.io.IOException;
import kademlia.dht.StorageEntry; import kademlia.dht.KademliaStorageEntry;
import kademlia.node.Node; import kademlia.node.Node;
import kademlia.util.serializer.JsonSerializer; import kademlia.util.serializer.JsonSerializer;
@ -18,7 +18,7 @@ public class StoreContentMessage implements Message
public static final byte CODE = 0x08; public static final byte CODE = 0x08;
private StorageEntry content; private KademliaStorageEntry content;
private Node origin; private Node origin;
/** /**
@ -26,7 +26,7 @@ public class StoreContentMessage implements Message
* @param content The content to be stored * @param content The content to be stored
* *
*/ */
public StoreContentMessage(Node origin, StorageEntry content) public StoreContentMessage(Node origin, KademliaStorageEntry content)
{ {
this.content = content; this.content = content;
this.origin = origin; this.origin = origin;
@ -43,7 +43,7 @@ public class StoreContentMessage implements Message
this.origin.toStream(out); this.origin.toStream(out);
/* Serialize the KadContent, then send it to the stream */ /* Serialize the KadContent, then send it to the stream */
new JsonSerializer<StorageEntry>().write(content, out); new JsonSerializer<KademliaStorageEntry>().write(content, out);
} }
@Override @Override
@ -52,7 +52,7 @@ public class StoreContentMessage implements Message
this.origin = new Node(in); this.origin = new Node(in);
try try
{ {
this.content = new JsonSerializer<StorageEntry>().read(in); this.content = new JsonSerializer<KademliaStorageEntry>().read(in);
} }
catch (ClassNotFoundException e) catch (ClassNotFoundException e)
{ {
@ -65,7 +65,7 @@ public class StoreContentMessage implements Message
return this.origin; return this.origin;
} }
public StorageEntry getContent() public KademliaStorageEntry getContent()
{ {
return this.content; return this.content;
} }

View File

@ -14,7 +14,7 @@ import kademlia.JKademliaNode;
import kademlia.dht.GetParameter; import kademlia.dht.GetParameter;
import kademlia.KadConfiguration; import kademlia.KadConfiguration;
import kademlia.KadServer; import kademlia.KadServer;
import kademlia.dht.StorageEntry; import kademlia.dht.KademliaStorageEntry;
import kademlia.exceptions.ContentNotFoundException; import kademlia.exceptions.ContentNotFoundException;
import kademlia.exceptions.RoutingException; import kademlia.exceptions.RoutingException;
import kademlia.exceptions.UnknownMessageException; import kademlia.exceptions.UnknownMessageException;
@ -43,7 +43,7 @@ public class ContentLookupOperation implements Operation, Receiver
private final KadServer server; private final KadServer server;
private final JKademliaNode localNode; private final JKademliaNode localNode;
private StorageEntry contentFound = null; private KademliaStorageEntry contentFound = null;
private final KadConfiguration config; private final KadConfiguration config;
private final ContentLookupMessage lookupMessage; private final ContentLookupMessage lookupMessage;
@ -253,7 +253,7 @@ public class ContentLookupOperation implements Operation, Receiver
this.localNode.getRoutingTable().insert(msg.getOrigin()); this.localNode.getRoutingTable().insert(msg.getOrigin());
/* Get the Content and check if it satisfies the required parameters */ /* Get the Content and check if it satisfies the required parameters */
StorageEntry content = msg.getContent(); KademliaStorageEntry content = msg.getContent();
this.contentFound = content; this.contentFound = content;
this.isContentFound = true; this.isContentFound = true;
} }
@ -320,7 +320,7 @@ public class ContentLookupOperation implements Operation, Receiver
* *
* @throws kademlia.exceptions.ContentNotFoundException * @throws kademlia.exceptions.ContentNotFoundException
*/ */
public StorageEntry getContentFound() throws ContentNotFoundException public KademliaStorageEntry getContentFound() throws ContentNotFoundException
{ {
if (this.isContentFound) if (this.isContentFound)
{ {

View File

@ -6,7 +6,7 @@ import kademlia.JKademliaNode;
import kademlia.KadConfiguration; import kademlia.KadConfiguration;
import kademlia.KadServer; import kademlia.KadServer;
import kademlia.dht.KademliaDHT; import kademlia.dht.KademliaDHT;
import kademlia.dht.StorageEntry; import kademlia.dht.KademliaStorageEntry;
import kademlia.message.Message; import kademlia.message.Message;
import kademlia.message.StoreContentMessage; import kademlia.message.StoreContentMessage;
import kademlia.node.Node; import kademlia.node.Node;
@ -22,7 +22,7 @@ public class StoreOperation implements Operation
private final KadServer server; private final KadServer server;
private final JKademliaNode localNode; private final JKademliaNode localNode;
private final StorageEntry storageEntry; private final KademliaStorageEntry storageEntry;
private final KademliaDHT localDht; private final KademliaDHT localDht;
private final KadConfiguration config; private final KadConfiguration config;
@ -33,7 +33,7 @@ public class StoreOperation implements Operation
* @param localDht The local DHT * @param localDht The local DHT
* @param config * @param config
*/ */
public StoreOperation(KadServer server, JKademliaNode localNode, StorageEntry storageEntry, KademliaDHT localDht, KadConfiguration config) public StoreOperation(KadServer server, JKademliaNode localNode, KademliaStorageEntry storageEntry, KademliaDHT localDht, KadConfiguration config)
{ {
this.server = server; this.server = server;
this.localNode = localNode; this.localNode = localNode;

View File

@ -4,7 +4,7 @@ import java.io.IOException;
import java.util.UUID; import java.util.UUID;
import kademlia.dht.GetParameter; import kademlia.dht.GetParameter;
import kademlia.JKademliaNode; import kademlia.JKademliaNode;
import kademlia.dht.StorageEntry; import kademlia.dht.KademliaStorageEntry;
import kademlia.exceptions.ContentNotFoundException; import kademlia.exceptions.ContentNotFoundException;
import kademlia.node.KademliaId; import kademlia.node.KademliaId;
@ -47,7 +47,7 @@ public class ContentSendingTest
GetParameter gp = new GetParameter(c.getKey(), DHTContentImpl.TYPE); GetParameter gp = new GetParameter(c.getKey(), DHTContentImpl.TYPE);
gp.setOwnerId(c.getOwnerId()); gp.setOwnerId(c.getOwnerId());
System.out.println("Get Parameter: " + gp); System.out.println("Get Parameter: " + gp);
StorageEntry conte = kad2.get(gp); KademliaStorageEntry conte = kad2.get(gp);
System.out.println("Content Found: " + new DHTContentImpl().fromSerializedForm(conte.getContent())); System.out.println("Content Found: " + new DHTContentImpl().fromSerializedForm(conte.getContent()));
System.out.println("Content Metadata: " + conte.getContentMetadata()); System.out.println("Content Metadata: " + conte.getContentMetadata());

View File

@ -3,7 +3,7 @@ package kademlia.simulations;
import java.io.IOException; import java.io.IOException;
import kademlia.dht.GetParameter; import kademlia.dht.GetParameter;
import kademlia.JKademliaNode; import kademlia.JKademliaNode;
import kademlia.dht.StorageEntry; import kademlia.dht.KademliaStorageEntry;
import kademlia.exceptions.ContentNotFoundException; import kademlia.exceptions.ContentNotFoundException;
import kademlia.node.KademliaId; import kademlia.node.KademliaId;
@ -36,7 +36,7 @@ public class ContentUpdatingTest
GetParameter gp = new GetParameter(c.getKey(), DHTContentImpl.TYPE, c.getOwnerId()); GetParameter gp = new GetParameter(c.getKey(), DHTContentImpl.TYPE, c.getOwnerId());
System.out.println("Get Parameter: " + gp); System.out.println("Get Parameter: " + gp);
StorageEntry conte = kad2.get(gp); KademliaStorageEntry conte = kad2.get(gp);
System.out.println("Content Found: " + new DHTContentImpl().fromSerializedForm(conte.getContent())); System.out.println("Content Found: " + new DHTContentImpl().fromSerializedForm(conte.getContent()));
System.out.println("Content Metadata: " + conte.getContentMetadata()); System.out.println("Content Metadata: " + conte.getContentMetadata());

View File

@ -3,7 +3,7 @@ package kademlia.simulations;
import java.io.IOException; import java.io.IOException;
import kademlia.dht.GetParameter; import kademlia.dht.GetParameter;
import kademlia.JKademliaNode; import kademlia.JKademliaNode;
import kademlia.dht.StorageEntry; import kademlia.dht.KademliaStorageEntry;
import kademlia.exceptions.ContentNotFoundException; import kademlia.exceptions.ContentNotFoundException;
import kademlia.node.KademliaId; import kademlia.node.KademliaId;
@ -33,7 +33,7 @@ public class RefreshOperationTest
GetParameter gp = new GetParameter(c.getKey(), DHTContentImpl.TYPE); GetParameter gp = new GetParameter(c.getKey(), DHTContentImpl.TYPE);
gp.setType(DHTContentImpl.TYPE); gp.setType(DHTContentImpl.TYPE);
gp.setOwnerId(c.getOwnerId()); gp.setOwnerId(c.getOwnerId());
StorageEntry conte = kad2.get(gp); KademliaStorageEntry conte = kad2.get(gp);
kad2.refresh(); kad2.refresh();
} }

View File

@ -2,7 +2,7 @@ package kademlia.simulations;
import kademlia.JKademliaNode; import kademlia.JKademliaNode;
import kademlia.dht.GetParameter; import kademlia.dht.GetParameter;
import kademlia.dht.StorageEntry; import kademlia.dht.KademliaStorageEntry;
import kademlia.node.KademliaId; import kademlia.node.KademliaId;
/** /**
@ -52,7 +52,7 @@ public class SaveStateTest2
/* Trying to get a content stored on the restored node */ /* Trying to get a content stored on the restored node */
GetParameter gp = new GetParameter(c.getKey(), kad2.getOwnerId(), c.getType()); GetParameter gp = new GetParameter(c.getKey(), kad2.getOwnerId(), c.getType());
StorageEntry content = kad2.get(gp); KademliaStorageEntry content = kad2.get(gp);
DHTContentImpl cc = new DHTContentImpl().fromSerializedForm(content.getContent()); DHTContentImpl cc = new DHTContentImpl().fromSerializedForm(content.getContent());
System.out.println("Content received: " + cc); System.out.println("Content received: " + cc);
} }