I recently came back from the seaside and started to work on a bug I had since forever. I thought it was a deeply rooted bug that was spread in different methods. It turns out it was not like that. And that's what I discovered:
First of all, I had this array that kept count of how many distributed processes answered a pull request. Each process has an ID, and it corresponded with the index of the array. The array first is filled with false values. As an example, imagine process ID 0 that is polled. At first the value in the array at index 0 is false, but when the process answers, I set the value in the array at index 0 to true.
If the process don't reply after a certain threshold time, I execute something. I used to check this by going through the array in this way:
for(var i = 0; i < processes.length; i++) if(!array[i]) //do something
In other words, if array[i] is false, it means the process did not answer.
This could look correct if only I would take into account the fact that, concurrently, some processes may be spawned, thus increasing the processes array. Since I didn't polled the newborn processes, I don't want them to be checked. Of course, with the shown code, this was happening. Luckily, JavaScript fills with undefined the indexes of an array which have not be initialised; but on the other hand the evaluation of !undefined is the same as the evaluation of !false. This clearly lead to a bug which always executed something, even if it was not the case. Again, luckily with JavaScript I could correct this very easily:
for(var i = 0; i < processes.length; i++) if(array[i] === false) //do something
And that's it!
Thank you very much for for your great information. It really makes me happy and I am satisfied with the arrangement of your post.
ReplyDeleteduck life 5
vex 3
I enjoyyed reading your post
ReplyDelete