Hoi RGJ,
Als je er mee aan de gang gaat kom je er achter wat je moet gaan oplossen. Dus gewoon weer verder gegaan met ‘boetseren’. Ik zit nu al op 25 tabellen.
Eerst een ‘resendqueryblock’ tabel gemaakt om aan te geven dat een blok van een query(result) nog een keer verzonden moet worden. N.B. Bij UDP kunnen netwerkpakketjes niet aankomen. De applicatie moet hier iets voor maken.
Het vervolg probleem is dat je niet gemakkelijk in ‘send’ tabel kan zoeken waar het “nog een keer te verzenden blok” staat (QueryNumber, SequenceNumber). De send tabel bestaat de message(pack) uit 1 of meerdere PING, PONG, HELO, Query, QueryResult, ResendQueryBlock, PingPeer en/of PongPeer berichtjes. Je zou het eerst moeten gaan parsen om de blok terug te vinden.
Ik heb het “probleem” opgelost door een nieuwe tabel te maken namelijk ‘queryblockout’. Alle blokken die je uitstuurt (door een query uit te voeren) naar een andere peer worden gelijktijdig een kopietje van de blokken gemaakt en worden in ‘queryblockout’ gezet. Komt er een resendqueryblock verzoek van de andere peer binnen dan haal je de bijbehorende {QueryNumber, SequenceNumber} blok uit tabel ‘queryblockout’ en zet hem weer in de ‘send’ tabel.
Je gaat om de 5 minuten kijken, dus is de afgelopen 5 minuten 20 keer een resendqueryblock verzoek van een bepaalde blok geweest stuur je maar 1 keer het blok naar de andere peer terug.
Ik ga nu verder met het beter testen en proberen om een (binary) file in de blob veld te zetten.
Volgende week ga ik met encrypty, pingpeer, pongpeer aan de gang.
De vriendelijke groet Jan Marco
P.S. (QueryNumber, SequenceNumber)= Je hakt een file of mysql output records in blokken. De volgorde van de blokken is de SequenceNumber. De QueryNumber is een getal (id) wat uniek is op de peer waarop de query betrekking heeft. Een volgende query die je wilt uitvoeren heeft een QueryNumber = Max(id) + 1.
Anders geformuleerd: Je krijgt bijvoorbeeld een query van een andere peer X binnen. Je zet hem als laatste record in de query tabel (met id = (max(id) + 1). Dit heeft tevens tot gevolg dat de Queryverwerkingthread the query gaat uitvoeren. Het veld querynummer geeft de id aan welke Peer X de query kent. De Queryverwerkingthread stuurt automatisch het resultaat (in blokken < MTU) met de key (‘querynummer’) terug naar de vragende peer.
