Trolli Schmittlauch
daae9d0b38
process and enqueue incoming posts
2020-07-27 21:39:49 +02:00
Trolli Schmittlauch
04423171fd
define data types for post and subscription storage
2020-07-27 13:20:15 +02:00
Trolli Schmittlauch
7878c67635
adjust rest of code to refactored RingMap
2020-07-27 00:37:31 +02:00
Trolli Schmittlauch
988144e9e7
further relax constrains on RingMap
...
key now needs to be explicitly given at insert, instead of
deriving it from the value. This makes it possible to store values where
a key cannot be extracted from (HasKeyID)
contributes to #62 , #32 , #41
2020-07-26 18:55:55 +02:00
Trolli Schmittlauch
0d1551261b
adjust code to refactored and parameterisable RingMap
...
is a bit ugly due to FlexibleContexts being neede at several places
2020-07-25 23:59:48 +02:00
Trolli Schmittlauch
9a20a60222
fix type constraints after RingMap refactor
2020-07-25 23:59:48 +02:00
Trolli Schmittlauch
1ff540fd68
refactor RingMap into own module
2020-07-25 23:59:48 +02:00
Trolli Schmittlauch
d55c2f1f1b
define typeclasses for interfacing between PostService and DHT
2020-07-25 23:59:40 +02:00
Trolli Schmittlauch
1a085f2fe0
define typeclasses for interfacing between PostService and DHT
2020-07-25 01:53:59 +02:00
Trolli Schmittlauch
c05544aa5b
able to start a web server and run the mock API handlers
...
contributes to #41 , #32
2020-07-23 18:29:52 +02:00
Trolli Schmittlauch
f1697e5fd7
re-structure post API, placeholder handlers
...
contributes to #41 , #32
2020-07-23 16:25:14 +02:00
Trolli Schmittlauch
5fedd9f87c
specify post relay API endpoints
...
contributes to #41 , #32
2020-07-23 00:09:45 +02:00
Trolli Schmittlauch
e2ecf0739d
maybeEmpty can be replaced by Data.List.listToMaybe
2020-07-22 02:56:30 +02:00
Trolli Schmittlauch
ebc0d54ddc
periodically purge lookup cache of expired entries
...
closes #24
2020-07-16 00:24:44 +02:00
Trolli Schmittlauch
0ea5402231
improve documentation exports
2020-07-15 01:48:27 +02:00
Trolli Schmittlauch
c37fe88b35
store and initialise lookup cache
...
contributes to #24
2020-07-15 01:44:47 +02:00
Trolli Schmittlauch
42af6afb86
generalise CacheEntry type
...
contributes to #24
2020-07-15 01:32:37 +02:00
Trolli Schmittlauch
7fa6db81de
make sure send sockets are bound to the correct local IP
2020-07-11 19:51:03 +02:00
Trolli Schmittlauch
61ea6ed3ff
Periodically contact bootstrap nodes for convergence sampling or joining
...
closes #56
2020-07-08 01:18:53 +02:00
Trolli Schmittlauch
56ca2b53cc
refactor trying to join on any bootstrap node into own function
...
contributes to #56
2020-07-07 18:07:25 +02:00
Trolli Schmittlauch
d293cc05d1
data structure for RealNode holds common config and management data
...
contributes to #56 , #34 , #2
2020-07-07 17:36:12 +02:00
Trolli Schmittlauch
df7423ce2e
fixup! iteration limit for QueryID lookups
2020-07-05 18:18:51 +02:00
Trolli Schmittlauch
e91f317a8e
decrease logging verbosity
2020-07-05 16:52:09 +02:00
Trolli Schmittlauch
7c17e3a44d
implement join-retry on new cache entries
...
closes #42
2020-07-05 16:48:57 +02:00
Trolli Schmittlauch
bdb92411c6
iteration limit for QueryID lookups
...
- closes #52
2020-07-02 03:34:40 +02:00
Trolli Schmittlauch
e06c53ff7c
stylish fixes
2020-07-02 01:38:51 +02:00
Trolli Schmittlauch
edf66e1b51
add som debug prints
2020-07-02 01:36:31 +02:00
Trolli Schmittlauch
f6481996d7
Change default response to QueryID for unjoined nodes
...
reason: allow unjoined nodes to find bootstrap node in local cache,
while always advertising itself to incoming requests for bootstrapping.
2020-07-02 00:54:14 +02:00
Trolli Schmittlauch
8d349212b4
prevent cache invariant querying when not joined
2020-07-01 18:24:33 +02:00
Trolli Schmittlauch
abbe664ca1
fixup! make sure that own node isn't added as neighbour
2020-06-30 00:26:26 +02:00
Trolli Schmittlauch
eab5a73ead
make sure that own node isn't added as neighbour
2020-06-29 13:42:39 +02:00
Trolli Schmittlauch
6313a06a83
fix time conversion for threadDelay
2020-06-29 13:41:11 +02:00
Trolli Schmittlauch
f7ed0ee8d8
check cache slice invariant for predecessor slices as well
...
closes #30 \0/
2020-06-27 16:23:16 +02:00
Trolli Schmittlauch
2c3ef44064
check cache invariant for successors and lookup missing IDs
...
first half of #30
2020-06-27 16:06:43 +02:00
Trolli Schmittlauch
280d928ad7
Refactor requestQueryID to be able to send a single request
...
in preparation for #30
2020-06-27 16:06:15 +02:00
Trolli Schmittlauch
7f5dac55ea
close #29 : periodic cache maintenance
...
periodically delete expired cache entries, check unverified ones and
potentially use them as neighbour
2020-06-25 01:24:38 +02:00
Trolli Schmittlauch
5e8cfb0ccd
mark successfully Pinged nodes as verified
...
for #29
2020-06-24 22:27:46 +02:00
Trolli Schmittlauch
c9783a10cf
launch stabilise thread
...
closes #44
although stabilise functionality is still untested
2020-06-24 02:51:39 +02:00
Trolli Schmittlauch
81e346db4e
update responding neighbours and delete unresponding ones from cache
...
contributes to #44
2020-06-24 02:48:41 +02:00
Trolli Schmittlauch
16b46a8b0b
add some comments on stabilise
2020-06-24 02:12:21 +02:00
Trolli Schmittlauch
25f44f3a45
look up additional neighbours if necessary
...
for #44
2020-06-24 01:19:53 +02:00
Trolli Schmittlauch
111c1a299d
refactored stabilise: use first responding neighbour
...
contributes to #44
2020-06-23 19:34:15 +02:00
Trolli Schmittlauch
d5f502c05c
ping potential neighbours before adding to list
...
for #44
2020-06-20 22:28:11 +02:00
Trolli Schmittlauch
0494ddd696
stabilise periodically
...
contributes to #44
2020-06-20 21:24:31 +02:00
Trolli Schmittlauch
3482876d9b
send and parse Ping requests
...
contributes to #29 #44
2020-06-19 23:03:27 +02:00
Trolli Schmittlauch
00ff2bf071
refactor adding neighbours
2020-06-19 19:15:05 +02:00
Trolli Schmittlauch
e898b80762
Merge branch 'refactorSuccessorsPredecessors' into dhtNetworking
2020-06-19 18:31:39 +02:00
Trolli Schmittlauch
3f42f98443
adjust lookup to RingMap, fix #48
...
- change default lookup result when not joined to FOUND
- fix determining own responsibility #48
- adjust tests
2020-06-18 23:08:20 +02:00
Trolli Schmittlauch
da0b8626cb
critical bug fix: use target ID for predecessor query lookup
2020-06-18 23:06:43 +02:00
Trolli Schmittlauch
f27812bcf3
give up on providing type signature for takeEntriesUntil
2020-06-17 15:13:49 +02:00
Trolli Schmittlauch
43e4ab184e
adjust cache entry insertion to usage of RingMap
...
#48
2020-06-17 14:53:36 +02:00
Trolli Schmittlauch
fb164dea0a
fix instance declaration of RingMap
2020-06-17 14:32:26 +02:00
Trolli Schmittlauch
7e08250f8c
refactor setting successors and predecessors
2020-06-17 14:29:30 +02:00
Trolli Schmittlauch
2269357ed0
deleting RingMap entries, list conversion
2020-06-17 02:21:37 +02:00
Trolli Schmittlauch
6142ee61d7
WIP: implement adding, setting and taking RingMap entries.
...
contributes to #48
2020-06-16 23:51:53 +02:00
Trolli Schmittlauch
22a6becf6b
fix all previously working tests
2020-06-15 16:41:11 +02:00
Trolli Schmittlauch
061bce2b08
adjust types to refactored RingMap NodeCache
2020-06-15 15:14:11 +02:00
Trolli Schmittlauch
6a98b5c6da
fix RingMap function types
2020-06-15 13:53:06 +02:00
Trolli Schmittlauch
b179357ab0
generalise NodeCache implementation to make it usable for neighbour nodes as well
...
contributes to #48
2020-06-13 21:41:32 +02:00
Trolli Schmittlauch
2739b47162
send stabilise to certain successor or predecessor
2020-06-12 15:49:12 +02:00
Trolli Schmittlauch
1204457a2a
make sure that predecessors are smaller and successors are larger than node ID
2020-06-10 16:53:17 +02:00
Trolli Schmittlauch
2c98d8507d
implement stabilise request sending and parsing
...
contributes to #44
2020-06-09 22:11:42 +02:00
Trolli Schmittlauch
f15d83baff
Refactor predecessors and successors to hold RemoteNodeStates
...
- neighbour nodes need to be contacted reliably
- Only holding NodeIDs requires a cache lookup for getting hostname and
port. This is brittle as the entry could've been purged from cache.
- refactored ASN.1 scheme, types and add/ sort/ remove implementations
closes #46
2020-06-09 15:21:22 +02:00
Trolli Schmittlauch
67cba1b69b
fixup! rename responseTo -> requestID to avoid partial record accessors
2020-06-08 23:18:12 +02:00
Trolli Schmittlauch
4e359775ec
add some debug output prints
2020-06-08 20:31:22 +02:00
Trolli Schmittlauch
2c827ea326
rename responseTo -> requestID to avoid partial record accessors
2020-06-08 20:31:18 +02:00
Trolli Schmittlauch
3892dc91aa
Merge branch 'mainline' into dhtNetworking
2020-06-08 18:58:23 +02:00
Trolli Schmittlauch
7c87a578d3
move Main executable to app/ closes #18
2020-06-08 18:57:53 +02:00
Trolli Schmittlauch
6699237243
respond to and handle QueryID requests
...
closes #28
2020-06-08 00:36:59 +02:00
Trolli Schmittlauch
eec751584c
make setPredecessors and setSuccessors enforce the ordering + size limit
...
closes #47
2020-06-07 23:45:28 +02:00
Trolli Schmittlauch
0a9b0547c6
forgot handling the successors and predecessors of the leaving node
...
contributes to #28
2020-06-07 00:21:14 +02:00
Trolli Schmittlauch
e00da9b84f
respond to and handle Leave requests
...
contributes to #28
2020-06-06 18:02:55 +02:00
Trolli Schmittlauch
53308080db
respond to Stabilise requests
2020-06-06 17:31:20 +02:00
Trolli Schmittlauch
43d72128d2
respond to Ping requests
2020-06-06 17:05:54 +02:00
Trolli Schmittlauch
e32f0c9146
process and respond to join requests
...
- serialiseMessage now starts numbering parts from the first number it
gets, to be able to continue responding after having ACKed previous
parts
contributes to #28
2020-06-06 13:45:18 +02:00
Trolli Schmittlauch
914e07a412
change NodeCache protection to STM
...
- putting the NodeCache behind an IORef had been chose because those
could've been read non-blocking
- the same is true for TVars. The performance characteristics are likely
worse, but at the advantage of composability within STM monads
2020-06-05 22:07:47 +02:00
Trolli Schmittlauch
dc2e399d64
protect concurrent node state access with STM
...
- for allowing concurrent access to predecessors and successors, the
whole LocalNodeState is passed wrapped into an STM TVar
- this allows keeping the tests for the mostly pure data type, compared
to protecting only the successor and predecessor list
contributes to #28
2020-06-04 22:31:41 +02:00
Trolli Schmittlauch
f42dfb2137
dispatch incoming requests to their response functions
...
- contributes to #28
2020-06-04 14:48:05 +02:00
Trolli Schmittlauch
0660bce299
acknowledge parts when receiving partial requests
2020-05-31 23:21:55 +02:00
Trolli Schmittlauch
88104de9bf
periodically purge request parts
2020-05-31 21:07:40 +02:00
Trolli Schmittlauch
bcd1c34c7c
manage incoming request parts before handling
2020-05-31 01:14:09 +02:00
Trolli Schmittlauch
2542091379
adjust rest of code to new message structure
2020-05-30 13:52:06 +02:00
Trolli Schmittlauch
f8d444d5b6
FediChordMessage: last part has falg instead of parts number in each msg
...
Motivation: Including the number of parts in each message part requires
the total number of parts to be known in advance, making dynamic
responses based on the received data difficult
2020-05-30 13:07:28 +02:00
Trolli Schmittlauch
fea9660f80
WIP: start implementing incoming request handling
2020-05-30 01:10:56 +02:00
Trolli Schmittlauch
61818c58a9
main server thread structure
2020-05-29 17:39:35 +02:00
Trolli Schmittlauch
b4ecf8b0aa
catch and handle more join errors
2020-05-27 23:37:32 +02:00
Trolli Schmittlauch
6ff765c63e
catch and handle bootstrap join errors
2020-05-27 18:59:38 +02:00
Trolli Schmittlauch
27e5c5f9ce
bracket all socket-using operations to avoid resource leakage
2020-05-27 18:08:46 +02:00
Trolli Schmittlauch
b1c5c5e5f4
try all bootstrap nodes until successfully joined
2020-05-26 20:54:02 +02:00
Trolli Schmittlauch
702684b1a9
split fediChordJoin into general purpose and bootstrapping part
2020-05-26 11:02:29 +02:00
Trolli Schmittlauch
43eb04dfea
preliminary passing of bootstrap nodes in Main to fediChordJoin
2020-05-26 09:39:02 +02:00
Trolli Schmittlauch
ad1465c5fe
use global cache adding function
2020-05-26 08:55:44 +02:00
Trolli Schmittlauch
e3bfa26ddb
join request + large FediChord refactoring
...
- implement sending of initial join request sending, response parsing
and cache population (untested but compiles)
- refactor basic types and their functions into Hash2Pub.FediChordTypes
to prevent import loops, leaving Hash2Pub.FediChord to contain the
high level actions called from Main
2020-05-25 22:03:24 +02:00
Trolli Schmittlauch
d5841d13fd
extract queryID message sending function so it can be used for first join
2020-05-22 22:12:38 +02:00
Trolli Schmittlauch
e8091b0a29
change all function definitions to new NodeState types
...
- adjust implementation
contributes to #20
2020-05-21 23:48:36 +02:00
Trolli Schmittlauch
fe673dc255
make NodeState a typeclasse, define setters and getters on its representations
...
contributes to #20
2020-05-21 23:40:10 +02:00
Trolli Schmittlauch
99a2b0ba09
add instance deriving instructions
2020-05-20 19:27:51 +02:00
Trolli Schmittlauch
f6c252d314
sending a queryID request compiles (untested)
2020-05-20 18:55:24 +02:00
Trolli Schmittlauch
beffab99a0
clarify counting of FediChordMessage parts
2020-05-19 19:50:36 +02:00
Trolli Schmittlauch
c31baa3635
run stylish
2020-05-19 17:55:40 +02:00
Trolli Schmittlauch
8d18f952cd
implement send-receive-acknowledge-retry loop for requests
2020-05-19 17:53:13 +02:00
Trolli Schmittlauch
0e6f126b3b
Merge branch 'master' into dhtNetworking
2020-05-19 16:51:43 +02:00
Trolli Schmittlauch
84bcd676ae
move protocol data definitions to own module to prevent cyclic imports
2020-05-19 16:30:56 +02:00
Hécate
41e999ed99
Linting integration
...
This commit brings in an HLint configuration file
and several recommended modifications such as:
* End-of-line extra spaces removal;
* Import lines ordering;
* Redundant $ removal;
* Generalisation of ++ and map to <> and fmap;
* Preferring `pure` over `return`;
* Removing extraenous extensions.
And finally, a `stylish-haskell` helper script
that detects if code files are dirty. Can be useful for CI,
although manually calling it can be nice if you would rather
first implement then beautify.
2020-05-19 12:42:06 +02:00
Trolli Schmittlauch
60c164dbb0
remove unnecessary directory level
2020-05-19 00:01:32 +02:00
Trolli Schmittlauch
8b01ad2f37
remove unnecessary directory level
2020-05-17 21:31:44 +02:00
Trolli Schmittlauch
21fef145a0
working project structure with tests
...
- restructured project again: splitting into executable and Hash2Pub
library
- placeholder test file is successfully compiled and run
2020-05-17 21:31:43 +02:00
Trolli Schmittlauch
30cfed81ea
restructure nix development environment, now with Hoogle
2020-05-17 21:31:43 +02:00
Trolli Schmittlauch
6329f815d1
Initial packaging as a Cabal package, in preparation for #2
...
- also restructures shell.nix to parse cabal file instead of directly
specifying dependencies
2020-05-17 21:31:43 +02:00
Trolli Schmittlauch
3b3ee09575
fix Haddock documentation, contrinutes to #8
2020-05-17 21:31:43 +02:00
Trolli Schmittlauch
08932cf80a
selectively export only needed constructors
2020-05-17 21:31:43 +02:00
Trolli Schmittlauch
4a89ffe25a
improve documentation, contributes to #8
2020-05-17 21:31:43 +02:00
Trolli Schmittlauch
3f9452ab7e
choose and implement data structures for node state and cache
2020-02-27 22:10:57 +01:00
Trolli Schmittlauch
ce4cc385b8
rename whole project and make DHT implementation as a project specific module
2020-02-26 14:11:33 +01:00
Trolli Schmittlauch
6c5faa4fc6
rename DHT implementation as it deviates from the EpiChord paper
2020-02-24 22:56:03 +01:00
Trolli Schmittlauch
e83710f10b
Start implementing the Epichord DHT: NodeID type
2020-02-24 21:53:47 +01:00