[Scons-users] Bug causing corruption of .sconsign.dblite
William Blevins
wblevins001 at gmail.com
Fri Oct 24 18:47:25 EDT 2014
Andrew,
Once there is a fix, then a release is inevitable. There isn't an expected
completion date.
I cannot speak for everyone else, but I feel that this is a lower priority
issue, so I will not investigate further until I have finished
cross-language scanner enhancements. If you would like this resolved ASAP,
please feel free to contribute a finalized patch with tests.
V/R,
William
On Fri, Oct 24, 2014 at 10:21 AM, Andrew C. Morrow <
andrew.c.morrow at gmail.com> wrote:
>
> Hi -
>
> Is there a possibility for a 2.3.5 release containing a fix for this, once
> one is completed?
>
> Thanks,
> Andrew
>
>
> On Mon, Oct 20, 2014 at 10:20 AM, William Blevins <wblevins001 at gmail.com>
> wrote:
>
>> Stijn,
>>
>> Negative. The issue has nothing to do with GIT.
>>
>> The bug exists within the "MD5-timestamp" decider. This decider can
>> falsely mark Nodes as "not up-to-date" because of how the dependency cache
>> is expanded when new dependencies are added to a Node. In worst case,
>> sometimes code will get compiled that wasn't necessary, but only after the
>> timestamp on those files would change; thus, it's a performance bug, but in
>> most cases will still be faster than using the "MD5" decider since it
>> doesn't need to compute the MD5 sums every pass.
>>
>> V/R,
>> William
>>
>> On Mon, Oct 20, 2014 at 4:31 AM, Stijn De Ruyck <Stijn.DeRuyck at onsemi.com
>> > wrote:
>>
>>> I’m trying to understand this issue. Can someone summarize?
>>>
>>>
>>>
>>> Does it mean Scons 2.3.0 is essentially unusable when combined with git?
>>>
>>> I’m currently converting 2 software projects to Scons, but I’m stuck
>>> with 2.3.0 because of Python dependencies…
>>>
>>>
>>>
>>> Any checkout, pull, rebase, reset, … can corrupt the .sconsign.dblite
>>> file?
>>>
>>>
>>>
>>> Best regards,
>>>
>>> Stijn
>>>
>>>
>>>
>>>
>>>
>>> *From:* Scons-users [mailto:scons-users-bounces at scons.org] *On Behalf
>>> Of *William Blevins
>>> *Sent:* Sunday, October 19, 2014 9:21 PM
>>> *To:* SCons users mailing list
>>> *Subject:* Re: [Scons-users] Bug causing corruption of .sconsign.dblite
>>>
>>>
>>>
>>> Piotr,
>>>
>>>
>>>
>>> I applied the patch to the latest SCons source, and it broke several
>>> automated tests. I do not know whether those tests simply need to be
>>> updated or additional modifications are required.
>>>
>>>
>>>
>>> I am currently working on another issue regarding cross-language scanner
>>> support, and I cannot dedicate the time to investigate at present. If you
>>> are eager to have this fixed in the next SCons update, consider forking a
>>> repository @ https://bitbucket.org/scons/scons and creating a pull
>>> request. Additional developer notes can be found @
>>> http://www.scons.org/wiki and there are individuals who can help if you
>>> have additional questions.
>>>
>>>
>>>
>>> V/R,
>>>
>>> William
>>>
>>>
>>>
>>> On Fri, Oct 17, 2014 at 8:37 PM, William Blevins <wblevins001 at gmail.com>
>>> wrote:
>>>
>>> Piotr,
>>>
>>>
>>>
>>> A software failure indeed. After your test steps, the md5sum for beta.h
>>> is incorrect. If I update the timestamp for beta.h, main.cpp will
>>> incorrectly rebuild.
>>>
>>>
>>>
>>> Thank you for a streamlined test case. I made a issue tracker for this
>>> defect: http://scons.tigris.org/issues/show_bug.cgi?id=2980
>>>
>>>
>>>
>>> V/R,
>>>
>>> William
>>>
>>>
>>>
>>> On Thu, Oct 16, 2014 at 7:58 PM, William Blevins <wblevins001 at gmail.com>
>>> wrote:
>>>
>>> Piotr,
>>>
>>>
>>>
>>> Thanks for supplying the additional information. I will make my best
>>> effort to take a close look at the information this weekend. In the
>>> unlikely event that a SCons developer hasn't gotten back to you by end of
>>> next week, please ping us with a gentle reminder.
>>>
>>>
>>>
>>> V/R,
>>>
>>> William
>>>
>>>
>>>
>>> On Thu, Oct 16, 2014 at 10:40 AM, Piotr Bartosik <
>>> piotr.bartosik at gmail.com> wrote:
>>>
>>> William,
>>>
>>> please find attached a simple test that reproduces the bug. I tested it
>>> on Linux. Below is my example output with discrepancies highlighted:
>>>
>>> $ ./test.sh ~/tools/scons
>>> Note: checking out '6ee27c0db68515e3faa71bf25c0ed7a883ecf697'.
>>>
>>> You are in 'detached HEAD' state. You can look around, make experimental
>>> changes and commit them, and you can discard any commits you make in this
>>> state without impacting any branches by performing another checkout.
>>>
>>> If you want to create a new branch to retain commits you create, you may
>>> do so (now or later) by using -b with the checkout command again.
>>> Example:
>>>
>>> git checkout -b new_branch_name
>>>
>>> HEAD is now at 6ee27c0... initial
>>> scons: Reading SConscript files ...
>>> scons: done reading SConscript files.
>>> scons: Building targets ...
>>> g++ -o main.o -c main.cpp
>>> g++ -o main main.o
>>> scons: done building targets.
>>> Previous HEAD position was 6ee27c0... initial
>>> Switched to branch 'master'
>>> scons: Reading SConscript files ...
>>> scons: done reading SConscript files.
>>> scons: Building targets ...
>>> g++ -o main.o -c main.cpp
>>> scons: done building targets.
>>> === .:
>>> SConstruct: None
>>> alpha.h: 3518d8c3310bba3c2a0da5489f569e14
>>> beta.h: 2ff783593a2224d0574181661ab5f1b7
>>> gamma.h: 2ff783593a2224d0574181661ab5f1b7
>>> main: b53741b91f13474487bbbc1efe5e328b
>>> main.cpp: ebf971b7da9c98f91067a9c601e96259
>>> main.o: faaa740a3704b2c8f034bafd7c1722ff
>>> === /usr/bin:
>>> g++: bb36ec5f9b8a8bfc02d1c4bf917a58e1
>>> 3518d8c3310bba3c2a0da5489f569e14 alpha.h
>>> bca4755df4cd2eef7d51bfb007c36dd1 beta.h
>>> 2ff783593a2224d0574181661ab5f1b7 gamma.h
>>> ebf971b7da9c98f91067a9c601e96259 main.cpp
>>>
>>> Regards,
>>>
>>> Piotr
>>>
>>>
>>>
>>>
>>>
>>> 2014-10-15 16:00 GMT+02:00 William Blevins <wblevins001 at gmail.com>:
>>>
>>> Piotr,
>>>
>>>
>>>
>>> That should be fine. Try to keep the dataset as simple and lightweight
>>> as possible, since a test case needs to be created from it. If you only
>>> need a single c-file with a few header includes to reproduce, then that
>>> should be plenty.
>>>
>>>
>>>
>>> If you feel comfortable request a patch addition, you can do so here:
>>> https://bitbucket.org/scons/scons.
>>>
>>>
>>>
>>> V/R,
>>>
>>> William
>>>
>>>
>>>
>>> On Wed, Oct 15, 2014 at 5:13 AM, Piotr Bartosik <
>>> piotr.bartosik at gmail.com> wrote:
>>>
>>> William,
>>>
>>> thank you for your answer. I'm stating to prepare a test data set. I'm
>>> going to send you a compressed directory versioned with git (with .git dir
>>> inside) and an exact list of steps to reproduce the problem. I hope that
>>> this format is convenient to you, if not please let me know.
>>>
>>> Best regards,
>>> Piotr
>>>
>>>
>>>
>>> 2014-10-15 1:25 GMT+02:00 William Blevins <wblevins001 at gmail.com>:
>>>
>>> Piotr,
>>>
>>>
>>>
>>> Also, as a side question, do you have a set of test case values we can
>>> use for this case?
>>>
>>>
>>>
>>> V/R,
>>>
>>> William
>>>
>>>
>>>
>>> On Tue, Oct 14, 2014 at 7:23 PM, William Blevins <wblevins001 at gmail.com>
>>> wrote:
>>>
>>> Piotr,
>>>
>>>
>>>
>>> I am sure you already did your homework, and we appreciate your input.
>>> Before we start looking at this closely, can you guarantee that the
>>> following files were not accidentally committed your GIT repository: object
>>> files, libraries, executables, the .sconsign.dblite file itself? I
>>> have seen cases in the past were files like these get
>>> committed accidentally, and that might cause effects like those you
>>> described.
>>>
>>>
>>>
>>> V/R,
>>>
>>> William
>>>
>>>
>>>
>>> On Tue, Oct 14, 2014 at 10:14 AM, Piotr Bartosik <
>>> piotr.bartosik at gmail.com> wrote:
>>>
>>> Hi,
>>>
>>> while using SCons (version 2.3.0) together with git I encountered some
>>> problems with MD5 calculations. After rebasing to different revisions of my
>>> repository I noticed strange cache misses (the proper .o files should be
>>> already in the cache while they were actually rebuilt). This led me to the
>>> conclusion that some MD5 values may be calculated incorrectly. In fact,
>>> after using the script sconsign.py it became apparent that some MD5s in
>>> .sconsign.dblite were incorrect (the sums calculated directly using hashlib
>>> were different).
>>>
>>> To sum up, after this simple procedure:
>>>
>>> rm .sconsign.dblite
>>>
>>> git checkout SOME_VERSION_1
>>>
>>> scons
>>>
>>> git checkout SOME_VERSION_2
>>>
>>> scons
>>>
>>> sconsign.py reported incorrect MD5 sums.
>>>
>>> As it turned out, the problem is localized in Node/__init__.py. The code
>>>
>>> then.extend([None] * diff)
>>>
>>> in line 1050 causes desynchronization between two lists: the current
>>> dependencies and info nodes for dependencies from the previous build
>>> (containing, among others, previously calculated MD5 sums).
>>>
>>>
>>>
>>> For example, consider that in SOME_VERSION_1 a file has five
>>> dependencies:
>>>
>>> A B C D E
>>>
>>> and in SOME_VERSION_2 a new dependency appears:
>>>
>>> A B C X D E
>>>
>>> After line 1050, the lists "then" and "children" look like below:
>>>
>>> then: A B C D E None
>>>
>>> children: A B C X D E
>>>
>>> Code further below updates children information. As it appears, such
>>> desynchronization does not cause any problems if we are checking MD5s each
>>> time: they just will be recalculated for X, D and E. But if we also look at
>>> the timestamps, the condition of timestamp remaining the same allows SCons
>>> to copy the MD5 sum from the "then" array to the current child object.
>>> Consequently, if D and E have the same modification date, E's checksum will
>>> be incorrectly copied into D's info. And this is exactly the error that I
>>> observe.
>>>
>>> My quick fix builds "then" list in a proper way, .i.e. without
>>> desynchronization (please see the attachment):
>>>
>>> then: A B C None D E
>>>
>>> children: A B C X D E
>>>
>>> Please look at it and tell me what you think. I don't know the SCons'
>>> sources very well so my fix may be a little naive but this is what I can
>>> provide for a start.
>>>
>>> Thanks,
>>>
>>> Piotr
>>>
>>>
>>>
>>> _______________________________________________
>>> Scons-users mailing list
>>> Scons-users at scons.org
>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>
>>>
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> Scons-users mailing list
>>> Scons-users at scons.org
>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> Scons-users mailing list
>>> Scons-users at scons.org
>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> Scons-users mailing list
>>> Scons-users at scons.org
>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> Scons-users mailing list
>>> Scons-users at scons.org
>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> Scons-users mailing list
>>> Scons-users at scons.org
>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>
>>>
>>
>> _______________________________________________
>> Scons-users mailing list
>> Scons-users at scons.org
>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>
>>
>
> _______________________________________________
> Scons-users mailing list
> Scons-users at scons.org
> https://pairlist4.pair.net/mailman/listinfo/scons-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist4.pair.net/pipermail/scons-users/attachments/20141024/1ab53d39/attachment-0001.html>
More information about the Scons-users
mailing list