The case of the regression test regression, part IV

Like all bugs, it was a simple fix once identified—it was just identifying the bug that was difficult. The bug [1] was due to a semantic change in an API (Application Programming Interface). Lua [2] has a file interface that includes a read() function, and the parameter it's given dictates how much to read. One of the parameters is “a” (or “*a” if you are using Lua 5.1) that indicates you want to read all possible data until the end-of-file is reached.

I ended up writing my own read() function to deal with network activity. I couldn't just open up a normal Lua file object with a network connection because that doesn't work nicely with event driven programs. An earlier version of my read() function had a different semantic meaning with “a”—it just returned any buffered data. It was in a later change where I aligned the semantics to match Lua's semantics, but forgot to change that bit of code in the one component. And those semantic changes explain the behavior I was seeing yesterday [3]. It only took what? A week? To find the culprit.

Now the regression test with the updated code runs as fast as the previous version.

[1] /boston/2021/08/19.1

[2] https://www.lua.org/

[3] /boston/2021/08/25.1

Gemini Mention this post

Contact the author