Τρίτη 30 Δεκεμβρίου 2008

debugging & GUI

Σήμερα ασχοληθήκαμε κυρίως με το να λύσουμε τα προβλήματα του ήδη δημιουργημένου κώδικα. Αντιμετωπίσαμε προβλήματα όσον αφορά τα sockets και τα ports που είχαμε δηλώσει.
Παράλληλα αρχίσαμε τη δημιουργία του γραφικού περιβάλλοντος και τη σύνδεση των δημιουργημένων μεθόδων με αυτό.

Δευτέρα 29 Δεκεμβρίου 2008

επικοινωνία κόμβων

Σήμερα συνεχίσαμε την επεξεργασία της τάξης Client, ώστε μετά την σύνδεση με τον Server να παίρνει τους κόμβους που είναι συνδεδεμένοι στο Pastry και εκτελώντας την εντολή ping να βρίσκει τον κοντινότερο κόμβο, ο οποίος είναι αυτός που χρησιμοποιείται για bootstrap.
Ύστερα φτιάξαμε τη συνάρτηση με την οποία οι κόμβοι θα φτιάχνουν τους πίνακες τους όταν συνδεθούν στο σύστημα, επικοινωνώντας με τους ήδη συνδεδεμένους κόμβους. Για να συμβεί αυτό αλλά και για την επικοινωνία των κόμβων οι κόμβοι ύστερα από τη σύνδεσή τους ανοίγουν ένα socket στο port που έχουν δηλώσει.

Τετάρτη 24 Δεκεμβρίου 2008

SHA-1 Class

Σήμερα δουλέψαμε την τάξη SHA-1. Η τάξη SHA-1 μετατρέπει ένα String στη δυαδική του αναπαράσταση με βάση τον αλγόριθμο SHA-1, στη συνέχεια κρατάμε τα σημαντικότερα 128 bits της δυαδικής αναπαράστασης, κάνουμε overstuffing τα bits που κόβει η java και τέλος μετατρέπουμε τη συμβολοσειρά κατάλληλα για b=2.

Τρίτη 23 Δεκεμβρίου 2008

Node & Credentials & SHA-1

Σήμερα αρχίσαμε την εγγραφή κώδικα της τάξης Node, που περιέχει όλα τα δεδομένα του κόμβου, Στοιχεία, Πίνακες Δρομολόγησης κτλ καθώς και της τάξης Credentials, που χρησιμοποιείται στους πίνακες και αποθηκεύει το IP, port, NodeID κάθε κόμβου, έτσι ώστε όταν βρούμε ένα κόμβο, ψάχνοντας στο Pastry με το NodeID, να μπορούμε να μιλήσουμε με τον κόμβο που θέλουμε.
Τέλος αρχίσαμε να δουλεύουμε τη συνάρτηση SHA-1.

Σάββατο 20 Δεκεμβρίου 2008

server & client

Ξεκινήσαμε την εγγραφή του κώδικα για τον server, με τη δημιουργία ενός socket στον server για επικοινωνία με τους clients που θέλουν να συνδεθούν στο σύστημα για να πάρουν έναν αρχικό κόμβο.
Επίσης αρχίσαμε τη δημιουργία του client φτιάχνοντας την σύνδεσή του με τον server και τον υλοποιήσαμε σαν thread.
Συναντήσαμε δυσκολίες στην σύνδεση αρχικά, ενώ δεν καταφέραμε να δημιουργήσουμε σύνδεση εκτός του localhost (μέσω Internet)

Δευτέρα 15 Δεκεμβρίου 2008

ΠΕΡΙΓΡΑΦΗ ΕΡΓΑΣΙΑΣ ΣΤΑ ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ

Η εργασία μας θα αφορά ένα Κατανεμημένο Σύστημα το οποίο θα βασίζεται στο πρωτόκολλο Pastry, και πάνω σε αυτό θα φτιάξουμε ένα πρόγραμμα ανταλλαγής αρχείων, μεταξύ των κόμβων του συστήματος.

Αναλυτικότερα, στο κατανεμημένο σύστημα θα συνδέονται κόμβοι οι οποίοι θα μπορούν να ανταλλάζουν μεταξύ τους αρχεία, όσο αυτοί είναι συνδεμένοι στο σύστημα, ενώ όταν κάποιος από αυτούς αποσυνδεθεί από το σύστημα (εξαγωγή κόμβου) θα γίνονται αλλαγές των πινάκων των κόμβων (στους οποίους γίνεται αντιληπτή η αλλαγή) στα σημεία που υπήρχε ο πεσμένος κόμβος.

Αντίστοιχα σε κάθε σύνδεση ενός κόμβου στο σύστημα (εισαγωγή κόμβου),ο ίδιος ο κόμβος θα δημιουργεί τους δικούς του πίνακες και θα εισέρχεται στο σύστημα.

Τέλος, ο κάθε κόμβος θα έχει μια λίστα από αρχεία τα οποία θα μπορούν να βρουν και να πάρουν οι άλλοι κόμβοι από αυτόν ως αντίγραφα στον υπολογιστή τους.

Αρχικά θα υπάρχει ένας server ο οποίος θα κρατάει τους κόμβους για να μπορεί να δείνει bootstrap κόμβους κάθε φορά που θα εισέρχεται ένας κόμβος στο σύστημα, ώστε να βρεί τους κοντινούς κόμβους και παράλληλα να φτιάξει τα routing table, leaf set, neighborhood set.

Ο αρχικός κόμβος θα επιλέγεται με βάση τον ταχύτερο κόμβο που θα επιστρέψει κάποιο αποτέλεσμα στην εντολή ping.

Αν δεν υπάρχει κανένας κόμβος στο server, σημαίνει ότι ο κόμβος που προσπαθεί να μπει εκείνη τη δεδομένη στιγμή, θα είναι ο πρώτος κόμβος στο σύστημα.


Για κάθε κόμβο που δημιουργείται (δηλαδή όταν ένας χρήστης ανοίξει την εφαρμογή και αρχίσει η σύνδεση του στο σύστημα) θα ισχύει η παρακάτω διαδικασία:


Έτσι η ΑΡΧΙΚΟΠΟΙΗΣΗ ΚΟΜΒΟΥ θα περιλαμβάνει:


  • Αρχικά το άνοιγμα του GUI στο χρήστη

  • στη συνέχεια τη μετατροπή της διεύθυνσης IP του κόμβου σε κλειδί χρησιμοποιώντας hashing και

  • τέλος την αρχικοποίηση των πινάκων routing table, leaf set, neighbourhood set


Η διαδικασία ΣΥΝΔΕΣΗ ΣΤΟ ΣΥΣΤΗΜΑ θα αποτελείται από τα εξής βήματα:


  • Ο κόμβος που θέλει να συνδεθεί θα παίρνει όλους τους ενεργούς κόμβους από το server και θα ψάχνει για τον bootstrap κόμβο, με βάση τα αποτελέσματα που θα επιστρέφονται από την εντολή ping.

  • Στη συνέχεια, θα βρίσκει τους κοντινότερους κόμβους ενώ παράλληλα,

  • θα γεμίζει τους πίνακες routing table, leaf set και neighborhood set

  • και τέλος θα στέλνει ένα μήνυμα σύνδεσης στους κόμβους του συστήματος.


Οι λειτουργίες που θα μπορεί να πραγματοποιεί ένας κόμβος, εφόσον συνδεθεί στο σύστημα θα είναι οι εξής:


  • ROUTING : Κάθε φορά που μπαίνει ένας κόμβος ή κάποιος δεν ανταποκρίνεται σωστά(έχει βγει από το σύστημα) θα γίνεται ανανέωση των: routing table, leaf set, neighborhood set.

  • SEARCH : Θα γίνεται αναζήτηση για το ζητούμενο αρχείο στους κόμβους, μέσω των πινάκων των κόμβων, ώστε να βρεθεί σε ποιόν κόμβο(-ους) υπάρχει το ζητούμενο αρχείο.

  • ΑΝΤΑΛΛΑΓΗ ΑΡΧΕΙΩΝ : Θα δημιουργείται μια σύνδεση των κόμβων που έχουν το αρχείο, με αυτόν που το ζητάει, με άνοιγμα ενός port και στη συνέχεια θα αρχίζει η ανταλλαγή των αρχείων με κάποιο πρωτόκολλο ftp.

Τέλος αναφέρουμε ότι οι λειτουργίες των κόμβων θα τρέχουν με τη βοήθεια των αντίστοιχων threads.