Commit Graph

120 Commits

Author SHA1 Message Date
Joshua Kissoon
54ac3fe740 Some major major changes to the entire Kademlia System.
Kademlia Node
- The Kademlia class is renamed to KademliaNode - this will now serve as the main node on the network
- The RoutingTable will be a part of this node
Node
- The node class is now a basic class containing information about a node to be used by peers on the network

RoutingTable
- Working on Evicting contacts from the routing table
- Working on Replacement Cache
- Written another simulation to test these new RoutingTable features
2014-04-28 15:25:07 +05:30
Joshua Kissoon
a2f48d2241 Content Refresh Operation improvement
- Added the improvement for content refresh operation from the paper, we keep the last time a content was republished, and on content update operations, we only republish if the last republish was before (current time - republishing time interval)
2014-04-26 23:19:13 +05:30
Joshua Kissoon
67c12438d1 Few minor updates and removal of completed @todos 2014-04-26 22:21:51 +05:30
Joshua Kissoon
41fb630515 Content Lookup Operation Update
Before the content lookup operation used to lookup a specified set of nodes then return the latest content; a short review of the paper showed that we only lookup until we find the Value then exit as soon as we do. Made the updates to the code.
2014-04-26 22:09:45 +05:30
Joshua Kissoon
4fab4320df Routing Table Contact Management
- Added last seen data to contact
- Contacts are not sorted by lastSeen
- Contact updating last seen time is handled

Built a simulation to test the contact last seen updates
2014-04-26 21:26:02 +05:30
Joshua Kissoon
6253ad0ca6 Removed a few completed @todo comments 2014-04-25 16:21:23 +05:30
Joshua Kissoon
7c24ed7cff Finished a few of the Todos
- Populate all of the K-Buckets on bootstrap
2014-04-25 16:17:09 +05:30
Joshua Kissoon
21b6667eb8 Routing Table Improvement
- Setup the RoutingTable to store contact instead of node
- This helps since we'll need more information in the routing to evict contacts, etc
2014-04-25 16:04:05 +05:30
Joshua Kissoon
c902ba26ab Removed a useless copy of the GetParameter class 2014-04-25 15:25:40 +05:30
Joshua Kissoon
bf3280f62e Few renames and minor changes 2014-04-25 15:23:34 +05:30
Joshua Kissoon
6978a8023b Moved the receiver interface to the message/receiver package 2014-04-19 20:11:10 +05:30
Joshua Kissoon
6503c79681 ContentLookupOperation
Had a bug in the content lookup operation, if the total amount of content needed was not found, a Routing exception was thrown instead of returning what was found. Fixed the issue!
2014-04-19 15:09:07 +05:30
Joshua Kissoon
8e6052de23 ContentLookupOperation
CLO was timing out even if it had found the specified amount of content needed. Fixed that by exiting after the specified # of content required has been found
2014-04-13 19:15:24 +05:30
Joshua Kissoon
c31e0002e2 Change the wait time on operations to 50ms 2014-04-13 18:58:40 +05:30
Joshua Kissoon
4888bf4dd4 Improve response check time
When doing a NodeLookup, Content Lookup or Connect operation, after sending the message, we used to wait(operation_timeout) time before checking for a result. 
Now what I'm doing is waiting for 100 ms and check for a result every 100ms; I keep a count of total time waited, and only when the total time > operation_timeout do we make a timeout.
So now we can handle the response if it comes in before Operation_timeout time is finished
2014-04-13 18:57:54 +05:30
Joshua Kissoon
eaeffeb0ba Store content in string so saved file is easily readable. 2014-04-06 17:01:27 +05:30
Joshua Kissoon
1a5991404d Updated the HashCalculator class to add some more functionality 2014-04-05 22:45:01 +05:30
Joshua Kissoon
33f9eea09f Updated HashCalculator to add MD5 hashing in there 2014-04-05 22:39:33 +05:30
Joshua Kissoon
51de9cbc82 Re-Arranged a few packages a bit
Added a HashCalculator class
2014-04-05 22:36:46 +05:30
Joshua Kissoon
2dde2a75e0 Setup Content Updating
- Didn't do this before, but now it's setup: content will be updated on the DHT if a StoreContentMessage is sent with a newer version of the content

GetParameter
- Updated the GetParameter so that it can be constructed from a KadContent object or a StorageEntryMetadata object
- Move it to the DHT package

Others
- Added a few methods to StorageEntryMetadata, StorageEntryManager& DHT to simplify conversions between KadContent, GetParameter & StorageEntryMetadata

Tests
- Written a test to check content updating
2014-04-05 21:07:57 +05:30
Joshua Kissoon
cc1d03ba81 Some comments and fixes 2014-04-02 18:39:16 +05:30
Joshua Kissoon
3e236f4d17 Now we use a StorageEntry class to send data accross peers
Out KadContent interface also now specifies a set of methods to force it's subclasses to do their own toByte conversions
2014-04-02 18:05:14 +05:30
Joshua Kissoon
9190b122c7 The current mechanism for serializing content will not work for complex content types.
Now we need to add methods to KadContent objects to provide the byte[] format of their content and to re-read the byte format of their content.
2014-04-02 16:35:08 +05:30
Joshua Kissoon
5b3e01df4e Fixed the bug "Getting content from reloaded node(Node whose state have been saved and re-loaded from file) NullPointerException".
Wrote a test to show getting content from reloaded node
2014-04-01 10:42:43 +05:30
Joshua Kissoon
1995682992 Had some issues with saving node state since saving configuration had a problem. We do not need to save configuration! Fixed the bug by making the configuration transient 2014-03-31 22:50:57 +05:30
Joshua Kissoon
b1ab1be760 Content Lookup wasn't working! Fixed the issue! stupid "!" in the damn statement! 2014-03-31 21:28:45 +05:30
Joshua Kissoon
a259579f4a Created a KadConfiguration interface that allows passing in a configuration file as needed.
This allows other applications to create their own configuration files
2014-03-29 14:37:01 +05:30
Joshua Kissoon
6462722227 Fixed the bug where refreshing content routed content to wrong new nodes and also deleted content from localnode even if it was one of the closest! 2014-03-29 12:29:13 +05:30
Joshua Kissoon
c232fccc69 Added the getNodeStorageFolder method to the Configuration class rather than having it repeated in DHT and Kademlia
Added a getDHT method to Kademlia
Changed the folder structure in which content is stored in the DHT from Kademlia/substr(contentid, 10)/hash(content).kct TO Kademlia/ownerId/substr(contentid, 10)/hash(content).kct
2014-03-29 10:52:55 +05:30
Joshua Kissoon
426af4d345 Removed the Save_state decision from configuration and allow the user to specify if to save the state when they call shutdown 2014-03-26 16:23:17 +05:30
Joshua Kissoon
219e6073ed Content deletion from a node that is no longer one of the K-Closest is working! 2014-03-22 15:52:37 +05:30
Joshua Kissoon
d9fdcc57fd Fixed the bug that was causing replication of content files and StorageEntries. RefreshOperation working well!! 2014-03-22 15:27:22 +05:30
Joshua Kissoon
b93133337c Added a method to store content only locally
Updated the StoreOperation to store content locally if the local Node is a part of the K-Closest to the content
2014-03-22 14:33:31 +05:30
Joshua Kissoon
42be8498c0 Finished the todos:
* @todo Make the KadBucket represent the Bucket interface
 * @todo Change the code to reflect the bucket interface and not the specific KadBucket implementation
 * @todo Update this interface and use this as parameter type, etc... instead of the KadBucket implementation used throughout the application

Now we're coding to the Bucket interface rather than the KadBucket implementation
2014-03-22 13:03:10 +05:30
Joshua Kissoon
6fdff97429 Setup the get bucket ID computation in one method.
Added Javadoc
2014-03-22 12:55:19 +05:30
Joshua Kissoon
104f20775f Fixed the bug that was causing the problem when adding the local node to the routing table when the routing table is created.
- The problem was that we were creating the RoutingTable before the Node initialization was finished, which was causing some problems since the RoutingTable needs the NodeId which is not available until after the Node initialization
2014-03-22 12:41:46 +05:30
Joshua Kissoon
3f82c4a0ef Did some code cleanups
- Add Comments
	- Remove println statements
	- Deleted useless comments, etc
2014-03-22 12:35:00 +05:30
Joshua Kissoon
21053a16ff Fixed the Distance Comparison bugs by using a new KeyComparator class of type Comparable<NodeId> and using BigIntegers to represent the keys and letting BigInteger do the comparisons 2014-03-22 11:32:41 +05:30
Joshua Kissoon
0cc24d42f3 Trying to fix an issue in the nodelookupoperation where the k-Closest nodes system doesn't work.
Lots of extra code added, but we're still in devel! so ...
2014-03-22 10:53:05 +05:30
Joshua Kissoon
22fee9116a Problem with serializing the DHT also, had to create a DHT specific Serializer class 2014-03-10 14:37:08 +05:30
Joshua Kissoon
e2ca9326c9 Got system state storage and retrieval of state to work! 2014-03-10 13:45:13 +05:30
Joshua Kissoon
e1e6e4e40d Got storage to work! 2014-03-10 11:08:51 +05:30
Joshua Kissoon
d31f0e337f Still working on saving node state, the code is a huge mess right now 2014-03-09 21:04:18 +05:30
Joshua Kissoon
eb7d7b53a4 Setup storing of System state on shutdown 2014-03-09 20:12:11 +05:30
Joshua Kissoon
630f8c2f28 2014-03-07 11:18:04 +05:30
Joshua Kissoon
46147eddd1 Finished a Basic version of the content refresh operation 2014-03-07 11:14:45 +05:30
Joshua Kissoon
a97905e431 Started working on the ContentRefreshOperation
- Setup a method to get all storage entries for the different content
	- Started setting up the content refresh operation functionality
2014-03-06 20:42:30 +05:30
Joshua Kissoon
689a35b7bf Cleaned up the core code, added comments and removed all Netbeans generated warnings 2014-03-06 16:51:42 +05:30
Joshua Kissoon
796e41dd9a Updated the bucket refresh operation to use 1 thread to update each bucket 2014-03-06 16:38:46 +05:30
Joshua Kissoon
cabb5af742 Finish Bucket Refresh Operation :) 2014-03-06 16:24:50 +05:30
Joshua Kissoon
f91dea9e5f NodeId.getFirstSetBitIndex was actually returning a distance value, but without a comparison, was confusing things.
Created a distance function to replace that.

Still working on Refresh Operations
2014-03-06 12:49:15 +05:30
Joshua Kissoon
acd7885dba Started working on the RefreshOperations 2014-03-06 11:21:08 +05:30
Joshua Kissoon
e4726b93f8 Content Store, Retrieve and DHT File and Table management working well
Got a few Todos now to finish off
2014-02-26 21:35:37 +05:30
Joshua Kissoon
a12e075cec Working on The ContentLookupReceiver 2014-02-26 19:16:44 +05:30
Joshua Kissoon
58f9157c9d Finished coding the lookup content functionality 2014-02-26 18:58:55 +05:30
Joshua Kissoon
a2d0be6124 Finished DHT content storage and retrieval
Started working on Content lookup and sending content
2014-02-26 17:07:18 +05:30
Joshua Kissoon
b5e89c6ddb Keeping with some good coding standards - Code to Interfaces not implementations
Changed the use of ArrayList to List and HashMap to Map
2014-02-26 11:57:59 +05:30
Joshua Kissoon
9f14c66a31 Persistent content storage now working perfectly!!! 2014-02-26 11:40:06 +05:30
Joshua Kissoon
c67e501df6 Content Sending working between nodes 2014-02-25 22:57:46 +05:30
Joshua Kissoon
fa4b29305e Finished implementing a JsonSerializer to serialize Content 2014-02-25 18:58:32 +05:30
Joshua Kissoon
995da2cffb Continuing work on message sending 2014-02-25 13:42:08 +05:30
Joshua Kissoon
faef3d03ec Started working on sending content messages 2014-02-25 13:01:06 +05:30
Joshua Kissoon
44077d344d Started working on Node refreshing the K-Buckets and DHT content at every time interval t
Started working on PUT, GET, STORE operation and on DHT Storage
2014-02-24 21:26:49 +05:30
Joshua Kissoon
3344511603 Finished NodeLookupOperation functionality! Finally found the bug 2014-02-22 19:37:04 +05:30
Joshua Kissoon
9eca0614f2 Still working on NodeLookupRequest
Updated the NodeId equals() and hashCode() methods; fixes the bug where several same NodeIds were being added to the routing table
2014-02-19 21:21:18 +05:30
Joshua Kissoon
1de348fc72 Working on NodeLookups 2014-02-19 15:54:15 +05:30
Joshua Kissoon
58df7be300 Started working on the NodeLookupOperation
Created some new Messages
Updated a few minor things
2014-02-19 13:00:29 +05:30
Joshua Kissoon
6ff6e8dc21 Fixed the NodeId Prefix Length method to give the correct prefixLength 2014-02-19 11:38:27 +05:30
Joshua Kissoon
ed1ac876f3 Fixed the bug in NodeConnection operation where the messages were still being re-sent even after an acknowledgement was received.
Fixed by canceling the TimerTask
2014-02-19 10:30:42 +05:30
Joshua Kissoon
b3e1403872 Initial Commit 2014-02-19 02:07:07 +05:30