Dutzel / TTV-Lab2

0 stars 0 forks source link

fingertable sortieren #15

Closed fabianHAW closed 6 years ago

fabianHAW commented 6 years ago

die fingertable muss nicht zwangsläufig sortiert sein, wenn wir sie z.b. über this.impl.getFingertable() holen. d.h. wir müssen sie irgendwie sortieren. in NodeImpl wird dafür bereits List<Node> sortedFingerTable = this.impl.getFingerTable(); // sort fingerTable by nodeID sortedFingerTable.sort(Comparator.comparing(Node::getNodeID)); ausgeführt. das müssen wir prüfen ob es auch so klappt, da wir hier nach der NodeID sortieren. bspw. hat der vorletzte knoten im ring, seinen nachfolger (den knoten mit der maximalsten id im ring) und, wahrscheinlich, noch den ersten knoten im ring. nun würde beim sortieren der fingertable allerdings der erste knoten im ring als erstes element in der liste aufgeführt werden, dann erst der letzte im ring. das wäre falsch an dieser stelle!

btw: wenn man System.out.println(this.impl.printFingerTable()); ausführt, dann scheint es, dass die liste immer korrekt sortiert ist. d.h. darauf können wir uns nciht verlassen, um zu prüfen ob eine table korrekt sortiert ist. an der stelle lieber einmal alle über die liste mit for iterieren.

fabianHAW commented 6 years ago

das sortieren wie wir es in der NodeImpl haben, funktioniert für diesen knoten (01 E3 3C 16 1B 9F AC DA F7 20 67 D4 70 77 51 8F DF 39 E5 FA) korrekt:

before sort, entry: 15 F7 27 B5 0B DB C5 00 4E F0 91 88 4F 35 31 47 DD 94 14 55 before sort, entry: 3A 75 80 6C 23 8F 79 55 77 10 99 68 16 DF 10 C6 8A 88 10 52 before sort, entry: 03 65 1F 4B 14 FD 7B 5F B2 1A 71 63 F7 5A 6C BF DF F6 6A 8B

after sort, entry: 03 65 1F 4B 14 FD 7B 5F B2 1A 71 63 F7 5A 6C BF DF F6 6A 8B after sort, entry: 15 F7 27 B5 0B DB C5 00 4E F0 91 88 4F 35 31 47 DD 94 14 55 after sort, entry: 3A 75 80 6C 23 8F 79 55 77 10 99 68 16 DF 10 C6 8A 88 10 52

für diesen knoten ist die sortierte tabelle auch korrekt. der letzte eintrag "3A 75.." ist der größte knoten im ring.

technisch ist für diesen knoten (15 F7 27 B5 0B DB C5 00 4E F0 91 88 4F 35 31 47 DD 94 14 55) die tabelle auch korrekt sortiert, semantisch aber nicht:

before sort, entry: 01 E3 3C 16 1B 9F AC DA F7 20 67 D4 70 77 51 8F DF 39 E5 FA before sort, entry: 3A 75 80 6C 23 8F 79 55 77 10 99 68 16 DF 10 C6 8A 88 10 52

after sort, entry: 01 E3 3C 16 1B 9F AC DA F7 20 67 D4 70 77 51 8F DF 39 E5 FA after sort, entry: 3A 75 80 6C 23 8F 79 55 77 10 99 68 16 DF 10 C6 8A 88 10 52

"3A 75.." muss vor "01 E3" komment

Dutzel commented 6 years ago

alles klar. also müssen wir eher mit getPredecessor arbeiten.

fabianHAW commented 6 years ago

den kommentar versteh ich gerade leider nicht ;)

es gibt nun die methode "this.impl.getSortedFingerTable()" die eine für uns korrekt sortierte fingertable erzeugt. ich habe diesen issue mit dem commit-kommentar geschlossen und leider zeigt github den dafür verwendeten kommentar nicht im issue an. hier steht lediglich:

fabianHAW closed this in 18e6646 16 hours ago