Thanks for the info, Dimiter.  That is almost certainly going to bite
someone else at some point.

On Thu, Jul 16, 2015 at 6:35 AM Dimiter Naydenov <
dimiter.nayde...@canonical.com> wrote:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Hey all,
>
> tl;dr; When running $ go test -race -cover with go < 1.3, and you get
> data races, try adding "-covermode=atomic" as well to see if they are
> caused by the go coverage tool itself. In go 1.3+ -covermode defaults
> to atomic, so yet another reason to really move quickly to 1.5 across
> the board ASAP.
>
> I've discovered the hard way the go race detector doesn't play well
> with the go coverage tool in golang versions prior to 1.3. With -cover
> (and/or -coverprofile=filename, which assumes -cover), the code
> instrumentation generated by the coverage tool uses global variables
> to track which lines are covered and how many times. This causes the
> race detector to report data races in confusing locations (e.g. I had
> a whole bunch of them in the provider/ec2 pacakge), which are not
> happening without -cover enabled. I've discovered the issue very
> easily by adding -test.work argument to "go test". This causes "go
> test" to print the temporary work dir used and also keep it after "go
> test" completes. Then it's a simple matter of inspecting the work dir
> and the actual source files in there, which include race and coverage
> instrumentation code added. The DATA RACE output includes paths in
> that work dir and line numbers exactly matching the code generated by
> - -cover.
>
> Apparently, adding -covermode=atomic along with -cover and -race,
> works around the problem in both golang versions < 1.3 and 1.3+, by
> using atomic inc ops rather than global non-goroutine-safe vars.
>
> An interesting article describing the issue with examples:
> http://herman.asia/running-the-go-race-detector-with-cover
>
> Hopefully this will be helpful to somebody else and save them a few
> wasted hours trying to figure out why the result of "go test -race
> - -cover" has data races reported, while "go test -race" or "go test
> - -cover" for the same tests shows no races at all.
>
> - --
> Dimiter Naydenov <dimiter.nayde...@canonical.com>
> Juju Core Sapphire team <http://juju.ubuntu.com>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v2.0.22 (GNU/Linux)
>
> iQEcBAEBAgAGBQJVp4kCAAoJENzxV2TbLzHwyJQIALb3MuDz9qSuLwhNNL7DfIjq
> DsEV14F82qDbdXcjS42f8I3ZIaq3ii8DQZWyR3dNoTtMOhc4thxIVs6LzHdzUR88
> GxFLWZeSgsRzeGj0OVvVGeelwIkqUPORt2Q4m2uziPgVkiczniVwkM9FAC1kdu21
> l54ibsIu1TsPwDUQzp6LPSEzP7zhv3pB9h8Qhq4sxoqSUjtQXt6ysgKn88Br/Cjl
> 7EBkcI0sDkm6bglklztNBh8fQqLUXLHW+cUXhdr/7psnhsAaGXHDEC3u3hPi16X+
> Mc0yOrsyOHBNdsTV3J8aWiOI9AJFZWjwEWo1LbUc6vL1znX40LF2Uxq7tTuTJ6g=
> =DXZL
> -----END PGP SIGNATURE-----
>
> --
> Juju-dev mailing list
> Juju-dev@lists.ubuntu.com
> Modify settings or unsubscribe at:
> https://lists.ubuntu.com/mailman/listinfo/juju-dev
>
-- 
Juju-dev mailing list
Juju-dev@lists.ubuntu.com
Modify settings or unsubscribe at: 
https://lists.ubuntu.com/mailman/listinfo/juju-dev

Reply via email to