Closed fabianHAW closed 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
alles klar. also müssen wir eher mit getPredecessor arbeiten.
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
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 bereitsList<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.