From 43ba100cede9f0e27ef82ce4105bf3d149fe1e2b Mon Sep 17 00:00:00 2001
From: Eduardo Souza <eduardomsouza@ufpr.br>
Date: Tue, 29 Oct 2024 07:49:20 -0300
Subject: [PATCH] =?UTF-8?q?[FIX]=20Lookuptable=20n=C3=A3o=20est=C3=A1=20t?=
 =?UTF-8?q?=C3=A3o=20mais=20feita=20a=20cuspe?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 a.out | Bin 20872 -> 20872 bytes
 t2.c  |  39 ++++++++++++++++-----------------------
 2 files changed, 16 insertions(+), 23 deletions(-)

diff --git a/a.out b/a.out
index d09150a276fe6fcef6dbd8fb6994b7e23abaf262..141e658942b535d3ec055993f72e88b14421b025 100644
GIT binary patch
delta 1335
zcmeBJ%-FG*aRUb<*Hr-qFt{qPS%@)>QSgcZn9BgCCwDTv7tvnhrgGUUl}AEb%deo9
z(a3K0Zm!Ke%<p-bPV#Q96?EZb>Jgs2K~ie+U8yzo0Un*TCpt@ybcP=2^xfmr>AJzA
zm-V9v1A|BB@fTrV|Nr;sc0J+I>H1<n10w^&ixQAXr|SogZr2UR!Ir<~@#uDa;nD4&
z0a68GcQaVJ9w>d;9lEF6^+@M2k6zXl5c76`G`vs*83EGL>H5P%wA=MXH$$iE1(1Q=
z480zV9^IiECiBTi)gO1g0#Xk#5p0YRvN6ZL{QrO4^#(}EYYUJfk8THv?$8?^$(KA1
zK4S7<yZ~~?o>B>qUe-Ut5dRc?0sH5}%S=WFhGy3rj39m84hoj8H){6m*I{5_cwrAV
z_6`F>Jp;pQXOO%{w*yCa=p8h3Yn5@xb-G?S?s|ohfq~(*K(p%|s1*X1u6JrSHrHNZ
zC@t^+c^+gaL#OM5<E~G@YOUa+p-;e8CBgmhpjHZ95-Qi}`k>kM3BrmeHM_c9A9T82
zz#b_VN?)P}v%I!|N4M*bZU)Ok{H;a*{{Q#rW!)wO2`!z^;LzHD5-qF~Ji1*!Os<lf
z#K#9w2Z`0%$x`x~{6&Ibtq>u%Pm_b>)iw4ZiwS)C|G(Mw3&_bozybfI=J0+lP{1FX
zyih)b@z>;U@|ujxCMzh2Xte$K|NrGS1_lQHZLXJXf=i`9vD@wXqVpOkZSsHr{~wg%
zUQU@DqoBZ923F)#>N&YpLB2lVH(2sRcj%RF-v=NUcb)@jD*Ord(gzT`?!*88uT{a?
z0!n4UA>4WVh26jZ|GPu4fVdEQ0)K%5rSy(RukQ_y-q6b)y{=b0J3n}UQ>4BCl7HuZ
z`2WB8$AA9T%X0tz{|ASGM|bFt6c23?RSgCPh7#5n-XH$|KY4hwx#CH_$qgI@lME&c
z_~hqjmliOnrYQI*sHP}XPhMbPP|v_9&1^k^fq_Agfq}v2{{R0+7#JAd-2eao4Fdzi
zpZov+voJC+^gQ_ge+>fzL+Qi+|792%7`{IG|KEm@fuZ{G|Nk+J3=GGf{QqCW$iN`-
z^#A`kj0_Co&;I}4!^pr;@cjS(JB$nrk6--%|A&!*;oHmq|7DmM7*@Ud|KEm*fkE%B
z$p8N_ObiT{-v0kz!^FT)^6vltIZT_=47V}LwJ<R-Fu3vwv@tpJvN2aP@vw6+$S^Q4
zoMB{OIQ43>m9ZS7-{eSRdGQOc|NpNCC2hFkGDaSDj?ICJH#sL~*m^LXP}sc5mXC$;
z%H)HN@0m_0Oy1-a$FxjtvXJvWMyAOZoy{3rCUd&vb9%^w@;C!S{pLoObWX<f$uE8N
fxlSlR1WzbTR`PRWyf``2PoEQB3~pZN_nZj;;N>O}

delta 1398
zcmeBJ%-FG*aRUb<m#ZKH7`O^<7Gg|e6ue*n<}$$P$(>B^MI?J#O8VFW?mJD|l6`95
z(#^qI+fQ%qVSdlc<jl9ZR?vl$sZV(F21%*Occs=CC3tk!?&vJt(iys;(|3(er|SZb
zZr2?iovttTGcYnRylDRV|G!74>j#f+*9FJHwoNXS6|>z?`m#H8O}Fco&SM_EtQ$la
z7(6<U?*PfaFaYW3c75T|>H5Q?+x0~^L#OK*koIndUJpi(?$8C3AIeJAL#064(~z~_
z`SSn&an}nVqmH{?0a34WKx#d@9VEI#uXrS1@;La2$%FAiH-n|?no=K-TsH&Q8T`oR
zO!@NvKZ>oLTplw#dPR<cjP&T9{9cv^<c1F~_c1asG`n751RLa_VCj0LrsKHl4Un?e
z1t39>ZU>I;&>Ltr*9PE_13M*87%4=UAWnIKZczONaM&Doy}-!8!0=k2+4Tn06#|y7
zH)>j%YcDXAX2Gpt=ybhv-1Pxitrc7}^Z}~F?$k=*kn424)9m^HVZ#Hanq8pC6g*S<
z5)@J%y#Xv9ouLc5879liNEti<hd>O}Fp2KaC#V*!DYXIVLWxxyk6u<=A+Xn9Z2km}
zfDf<Ln_ZtkZB?*zeNr=HzYYT^WkKY@>Ez|9zyJSFlAFXgQ4p*dl9HGwFObvZ{~>@R
zbmrsa8*=LWj>yWUeVoiEFTv#VadMor#AF9~YsPnzYveVhbwI)1>G}fX@^04`o!2}%
zkH6sg@&EtJRg(|MOBhf622R>9UUo1rFz|14y=>!ID%Kr(r`z`i$kUzYK<XL){r~?u
z3oPqXYCD-*L0;<GFR;E3-Jw^yeIIyqyMBNu{r+QefPzS>*T4V&K?xOZ<>R0K|9kY7
z-tp-5z2VUtdfB7b^@?Zb2M=&U*~gFMJN*y;|2O~m&)<6g-~a#MF!1OO{gL9KEuyNy
zz`#(#`r_{U|Nl=OW?<NST;U|&B!kJkswoOS3aTjz)eNdBI+GV07}PULGh0t#U|;~1
z6#@7E|3AUN!0_Sz|NkFA@%iBYe-1_lh6xY;|KGsCz)<<{|9=HW28N%H{{MGiWMHU&
z{QrLfBLl;!C;$I9FfuSmJpKQF0V4y0^t1o}4=^$?lsy0cACv%}zxe;3fr)|P*USI^
z6_^+p*1h`w-+_sNVa?nB;{Owv7#ITH{r}&<#K7?B-T(g!m_RmfPBYxbDEAM<cI6Xj
zV{+zYWB$s-!_L7V!@$6BhLM56<@IDMV>!kXlOv7g#l7DA|6dGB>Ttzbj6Ccdn;$CN
z<eZ#g>%nB9xOtN;9}DA!$p;<ZGg&B3-sBX=q#!?8$ax=Q&E$*D=8XR)bGqbn9+C&y
u&cIN-xzQz^lkw{0m%jR37K#u-3&qJwer}BCCTIHTbHYo}%?tgWGXVhIq&%<y

diff --git a/t2.c b/t2.c
index 676612b..284893c 100644
--- a/t2.c
+++ b/t2.c
@@ -187,9 +187,9 @@ void calculate_finger_table(Node* head, int max_id) {
 }
 
 
-// Função para imprimir todas as tabelas finger
+//Função para imprimir todas as tabelas finger
 void print_finger_table(Node** nodes_involved,int num_nodes, int timestamp) {
-    for(int i = 0; i <= num_nodes; i++) {
+    for(int i = 0; i < num_nodes; i++) {
         printf("%d T %d {", timestamp, nodes_involved[i]->id);
         for (int j = 0; j < nodes_involved[i]->tam_finger; j++) {
             printf("%d", nodes_involved[i]->finger[j]);
@@ -216,6 +216,7 @@ void print_finger_table_completa(Node* head, int timestamp) {
 
 // Função para realizar lookup de uma chave
 Node ** lookup(Node* head, int timestamp, int node_id, int key, int *num_nodes) {
+    printf("Lookup\n");
     Node* current = head;
     Node** nodes_involved = (Node**)malloc(TAM_MAX_FINGER * sizeof(Node*));
     *num_nodes = 0;
@@ -225,25 +226,23 @@ Node ** lookup(Node* head, int timestamp, int node_id, int key, int *num_nodes)
     }
 
     printf("%d L %d {", timestamp, key);
-    Node* start = current; //Meu nó partida
+    Node *start = current;
     int id_aux = current->id;
     nodes_involved[(*num_nodes)++] = current;
-    printf("%d,", current->id);
-
     while(1){
         int found = 0;
+        printf("%d", current->id);
         //Verificar se o nó atual já tem a chave
         for (int i = 0; i < current->key_count; i++) {
             if (current->keys[i] == key) {
-                printf("%d}\n", current->id);
-                nodes_involved[(*num_nodes)++] = current;
+                printf("}\n");
                 return nodes_involved;
             }
         }
+        printf(",");
         //Procura o maior nó conhecido pela finger_table que está acima do valor da chave
         for (int i = 0; i < current->tam_finger; i++) {
             if (current->finger[i] > key) {
-                printf("%d", current->finger[i]);
                 id_aux = current->finger[i];
                 found = 1;
                 break;
@@ -258,28 +257,21 @@ Node ** lookup(Node* head, int timestamp, int node_id, int key, int *num_nodes)
                     max = current->finger[i];
                 }
             }
+            id_aux = max;
         }
-
         // Mover para o nó com ID id_aux
         while(current->id != id_aux){
             current = current->next;
         }
-        nodes_involved[*num_nodes++] = current; //Adiciona o nó atual ao array de nós envolvidos
+        nodes_involved[(*num_nodes)++] = current; //Adiciona o nó atual ao array de nós envolvidos
 
-        //Verificar se o nó atual já tem a chave
-        for (int i = 0; i < current->key_count; i++) {
-            if (current->keys[i] == key) {
-                nodes_involved[(*num_nodes)++] = current;
-                printf("}\n");
-                return nodes_involved;
-            }
+        //Previne loops infinitos
+        if(current->id == start->id){
+            printf("}\n");
+            nodes_involved[(*num_nodes)++] = current;
+            break;
         }
-        //Se o nó atual não tiver a chave, continuar a busca
-        printf(",");
-        start = current;
     }
-    printf("}\n");
-    nodes_involved[(*num_nodes)++] = current;
     return nodes_involved;
 }
 
@@ -334,8 +326,9 @@ int main() {
             insert_key(dht, id, key);
         } else if (op == 'L') {
             int num_nodes = 0;
-            nodes_involved= lookup(dht, timestamp, id, key, &num_nodes);
+            nodes_involved = lookup(dht, timestamp, id, key, &num_nodes);
             print_finger_table(nodes_involved, num_nodes, timestamp);
+            free(nodes_involved);
         } else if (op == 'P'){
             imprime_chaves(dht);
             print_finger_table_completa(dht, timestamp);
-- 
GitLab