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