Commit Graph

140 Commits

Author SHA1 Message Date
Joshua Kissoon
37337afc66 There was an error when we recursively called the synchronized KadBucket.insert method
- Fixed it by removing the recursion
2014-05-05 12:46:44 +05:30
Joshua Kissoon
1e2cc037de Synchronization
- We were getting some concurrency exceptions because certain data structures were being modified concurrently
- Solved the issues by synchronizing the methods modifying the data structures
2014-05-05 10:52:44 +05:30
Joshua Kissoon
cb42c507de Concurrency Modification Error Fixed
We were getting a concurrency Modification error on the treemap because multiple operations may have been accessing the RoutingTable's getAllNodes() method at once.
- Fixed it by making this method synchronized.
2014-05-01 19:22:26 +05:30
Joshua Kissoon
0ce64529c6 Saving State & Reloading
- Routing Table had a save state issue because of the KadConfiguration
-- I removed saving the configuration since this may change from boot to boot
-- Provided a way to set a new configuration to the routing table
-- Updated the serializer/deserializer
2014-05-01 16:52:31 +05:30
Joshua Kissoon
66b6a14ebc Routing Table
- Added a routing table interface to code to Interface not implementation
2014-05-01 15:03:20 +05:30
Joshua Kissoon
fa242fad6a Renamed the bucket classes and interface to clear up things 2014-05-01 14:42:21 +05:30
Joshua Kissoon
1e6b9f2e38 Replacement Cache update
- If we're trying to add a node that's already in the replacement cache, update the last seen time of this node
2014-05-01 11:44:25 +05:30
Joshua Kissoon
9c05736ef8 Updated content lookup operation and node lookup operation
- Use all nodes to these operations initially instead of the K-Closest because there may be the case that the K-Closest are offline
- The operation takes care of looking at the K-Closest.
2014-05-01 11:41:12 +05:30
Joshua Kissoon
4e643c7f3f Contact Management
- There was an improvement in the paper page 64 to set a contact as stale and replace it if it's stale, but only if there is a replacement, otherwise just keep a stale count. The stale count is the amount of time a contact failed to respond to a request.
- The above feature is now implemented now.
- Added the management of stale contacts code to insert and removal
2014-04-28 21:23:04 +05:30
Joshua Kissoon
b1bfba6d93 Kademlia Contact Removal
- Contact removal now working well, we only do removal when we need to get in touch with the contact for some reason.
- Replacement cache is now setup
2014-04-28 20:38:47 +05:30
Joshua Kissoon
fa47aceda9 Kad Server
- Added a specific exception to throw when the server is down

Kademlia Node
- Setup Shutdown proerly
- Updated a few things
2014-04-28 16:46:32 +05:30
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
46b8c1329a Update README.md
Spelling mistake correction
2014-03-22 17:50:17 +05:30
Joshua Kissoon
9293070f59 Update README.md 2014-03-22 17:49:09 +05:30
Joshua Kissoon
f0669b98a6 Update README.md 2014-03-22 17:48:37 +05:30
Joshua Kissoon
dadd0ac694 Update README.md 2014-03-22 17:46:56 +05:30
Joshua Kissoon
76bf88f3fe Update README.md
Added a complete description of it's usage.
2014-03-22 17:45:06 +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