[Development] Continous Integration (CI) meetings

Frederik Gladhorn frederik.gladhorn at digia.com
Tue Oct 15 15:05:22 CEST 2013


Hi all,

I know many of you are interested in knowing how the CI is doing. We have been 
looking for a while how to improve our communication in this area and of 
course how to get the whole process running smoother for everyone.

>From now on we'll have weekly meetings, similar to the release team. Each 
Tuesday 13:00 CEST ( 
http://www.timeanddate.com/worldclock/fixedtime.html?msg=Qt+QA+meeting&iso=20131022T13&p1=187&ah=1 
)

Since we just had a first attempt at getting this going, here is a little 
summary and the IRC log below.

* We have openSuse machines integrated in the CI (already announced on this 
list), OpenSSL was missing but will be on them from now on.
* Android: tests not yet running, needs some help from Android team 
(androiddeployqt missing). Basic infrastructure in place.
* Some issues with V4 on ARM are still being fixed, should be done today 
though.
* QQuick2 test flakyness:
  * lots of timing dependent tests
  * maybe use cpu time (bogomips) for Q_TRY_VERIFY and friends
  * maybe check the qml engine for running animations (would need new api)
* network test server: we'd like to update it but nobody is actively working 
on it right now (the server based on Ubuntu 12.4 is almost working, some tests 
still fail).
* long term we would like to have more reliability by running defined 
snapshots of VMs for the tests, currently the test machines simply keep on 
running.

Cheers,
Frederik


<tosaraja> ok, without further delaying this for no reason, let's begin this 
:) So hello everybody
<lars> fregl: here as well
<olhirvon> tosaraja is going to lead the discussion
<fregl> great :) hi lars
<ablasche> hi
<pejarven> o/
<tosaraja> I didn't prepare much of an agenda, mainly just thought of 
something we could discuss about. To starters I could tell you about the 
current activities in the CI, what we are doing and what problems we might 
have. And then if you have any questions for us or want to discuss something, 
please do tell whenever you feel like it
<fregl> I guess these meetings are still new, so we'll find the best structure 
over time, but for now I'd say we can quickly go though current issues
<fregl> one current think that is interesting to me: sifalt you found we don't 
have openssl everywhere?
<tosaraja> SuSE's got their OpenSSL development library just 20 minutes ago 
https://codereview.qt-project.org/#change,68203
<fregl> tosaraja: manually or using puppet?
<tosaraja> fregl: using puppet...so you can add 15 minutes to that ;)
<sifalt> fregl: yes, Opensuse and ince70embedded env
<tosaraja> the embedded is still unsolved
<fregl> ok, that I less bad than I thought :)
<fregl> does it block tests on wince or do we simply not run them?
<tosaraja> Which test is run for openssl? How did you notice it was missing 
from suse?
<fregl> nierob_: ^
<sahumada> fregl: we dont run tests for wince
<fregl> I guess enginio fails without openssl, otherwise we probably just skip 
the tests when running make check
<fregl> sahumada: ok, then I think this is not an urgent issue
<nierob_> by default if Qt is compiled without openssl the tests are not 
executed
<nierob_> fregl: they are ifdef'ed
<fregl> fkleint: since we have lars here, maybe we can talk about the quick2 
tests? you have tried to stabilize them and did not get too far, right?
<fregl> tosaraja: what do you have on the agenda? we just talked on Friday so 
I don't have much else right now. any general status update?
<lars> fregl: I'm working on that right now (in a way). I'm going through our 
tests and check them against GC corruptions (found a few already).
<lars> that will hopefully help, but we'll only see over time
<fkleint> fregl: Erik mainly tried (see mail)
<fkleint> fregl: he found that he had to insert arbitrary sleeps
<fkleint> but that is not satisfactory
<tosaraja> fregl: not much really. After we get the current discussions out of 
the way, i was going to tell you about the blockers in other areas
<fregl> so one point Eric writes in the mail is that make check does not skip 
insignificant tests - any comments on that? tosaraja sahumada?
<fkleint> lars: We are facing the problem that  the stuff shows quite some 
non-deterministic behaviour due to the multithreadedness and different render 
loops
<sahumada> fregl: dont know such an email :)
<fkleint> lars: Talked to Squish  folks at DevDays and they are facing the 
same issue
<fkleint> lars: You basically have to wait for animations to finish, etc & 
frames synced before proceeding with thr test
<fregl> sahumada: forwarded
<fkleint> lars: that is quite hard on machines under load
<fkleint> basically increase sleep  until it passes ;-)
<fregl> I think in a way we keep on hitting the same old issue: timers make 
tests really non-deterministic and machines run sometimes under load
<fkleint> I wonder if we could have an API to check whether animations are 
stopped and synced
<tosaraja> fregl: sahumada: I haven't looked at the script running tests, but 
i would imagine that make check doesn't read the files having the 
insignificant flags, but our perl scripts do. We would have to transfer the 
logic from perl -> make to enable that. I might be totally wrong here, but i 
suspect this is how it works
<fkleint> QTRY_VERIFY(QuickEngine.idle() ) or similar
<lars> fkleint: fregl: yes, that's one big issue. best option is probably to 
talk to gunnar about it.
<fkleint> hm,ok
<lars> fkleint: we fixed some issues by speeding up animations and using 
proper waitForWindowShown etc...
<lars> fkleint: did them when gunnar was here 2 weeks ago
<lars> I think the listview test is a lot better now for example.
<fkleint> yep, but CI machines can be under load & really slow
<fregl> another idea that janarve had was to make tests work with cpu time 
instead of wall time or such
<fkleint> but that might differ across platforms
<janarve> yes
<janarve> actually per-process time
<fregl> maybe someone can tell if that would be a sensible way of going about 
it. otherwise we can make it an action point to check with gunnar about 
animations
<lars> fregl: the problem is that we're using QTRY_COMPARE quite a few places, 
and that'll time out. so we'd need a different way that tells us that 
animations are done.
<lars> but we really shouldn't even get close to 5 secs with any of our 
animations. slows down tests a lot as well
<nierob_> I thought that animations are using vsync which is the real time. So 
using process time will not help
<janarve> lars: I agree. I think measuring process-time would solve that
<nierob_> but it would help in the  network tests
<janarve> nierob_: no, vsync is just for drawing. It still uses a timer to 
measure how far the animation should go
<nierob_> ok
<janarve> Btw, do we have evidence that QTRY_COMPARE is really a big problem?
<fkleint> there is an "overload" where you can specify the timeout?
<janarve> yes, but its still not bullet proof
<fkleint> or another macro,  QTRY_COMPARE_TIMEOUT or so
<nierob_> fkleint: yes, but the problem remains
<fkleint> ok, so, it should be possible to specify process time..there
<fkleint> hm
<janarve> If we measured process-time, we could have 
QTRY_COMPARE_BOGOMIPS(how_many_bogomips_until_timeout)
<fkleint> Anyone up for maintaining QTestlib  btw?
<janarve> the problem is that that parameter would be *very* large and not 
very good to guess
<fkleint> then we need to add another set of macros..
<fregl> I don't think anyone looks at qtestlib at the moment
<fkleint> that macro-riddled design is a bit suboptimal..
<nierob_> janarve: QtestLib could query the cpu before running the tests and 
get bogomips stats
<nierob_> janarve: then it could estimate waiting time
<janarve> fkleint: well, all comparing in testlib are based on macros
<janarve> nierob_: so what number would you give to the macro?
<fregl> ok, janarve, fkleint, nierob_ do you think we can start a task force 
to try implementing this? figuring out sane numbers can be done when we have a 
proof of concept I would say
<nierob_> janarve: it would be nice to accept time, which could be recomputed 
to bogomips
<fregl> we don't need to solve it right here and now
<janarve> I am interested
<janarve> fregl: ^
<ossi|tt> i don't think using cpu time is any good. it doesn't buy anything if 
some events get lost, etc.
<nierob_> me too
<fregl> ossi|tt: how do events get lost?
<fkleint> but coming back to Quick2, would some API lilke QmlEngine::idle() 
help?
<fkleint> (also thinking Squish)
<fregl> nierob_: janarve: great, you have an AP. I guess it might be a 
combination of both times.
<ossi|tt> fregl: typically they are not sent ;)
<fregl> ossi|tt: that sounds like a bug that is in need of fixing then
<janarve> I'll discuss with nierob_
<ossi|tt> fregl: yes. we are talking about autotest ;)
<fregl> fkleint: the problem is animations running indefinitely
<fkleint> yes, except those basically
<fregl> ossi|tt: yes, so if events get lost, we better not fix the test but 
the code that loses them
<ossi|tt> fregl: the point is that relying on cpu time will simply make some 
failing tests wait forever
<fkleint> foreach (QAnimation *a) if (a->isRunning() && !isInDefinitely) 
return false
<ossi|tt> fregl: just don't rely on anything that relates to the program doing 
something particular
<fregl> ok, so we need to talk to gunnar about that, is he on irc atm?
<fkleint> Hm. can';t see him
<ossi|tt> fregl: wall time is the best you can get. make a long enough 
timeout, and make sure that the good case will *not* need much time.
<sletta> fregl: here
<fkleint> ossi|tt: Enter the multihtreaded world of Quick2 ;-) this is not 
widgets
<fregl> sletta: fkleint had some good question relating to animations in quick
<ossi|tt> fkleint: i'm not sure what this has to do with anything
<fregl> sletta: basically we were discussing flaky tests - some depend on 
animations finishing
<tosaraja> Can systems where CPU speed and BUS speeds are adjustable according 
to load mess up things like calculating CPU time?
<fregl> sletta: is there a way to check if there are running animation (apart 
from those runing for ever)
<fkleint> sletta: backlog at http://paste.kde.org/p7fe90954
<ossi|tt> tosaraja: the kernel is supposed to consider that when giving back 
cpu time. but anyway, as i said, i don't think cpu time is a good idea.
<tosaraja> ossi|tt: right
<ossi|tt> tosaraja: it may be a good idea to use resource-limited cgroups to 
contain amok-running tests, though.
<fregl> ossi|tt: I think we can let nierob_ and janarve try to prototype 
something and if that fails it fails.
<tosaraja> ossi|tt: are you volunteering to investigate this? ;)
<fkleint> Quick2 rather tend to not run amok ,but jut fail..
<ossi|tt> tosaraja: not really. but fundamentally it isn't hard ^^
<ossi|tt> fregl: it has already failed, because logic says that it's not going 
to be reliable by design
<fregl> ossi|tt: I guess that's linux only though. and I'd like to move on to 
the qquick2 problems
<ossi|tt> fregl: yes, it is
<fregl> ok, lets take the cpu time after this meeting.
<sletta> fregl: we don't have an API to query for running animations or to 
separate between indefinitely running animation and animations which have a 
definite unknown finish time
<nierob_> sletta: could we have it?
<sletta> how would that help_
<fkleint> QTRY_VERIFY(QMlEngine::idle())
<fkleint> then proceed
<fkleint> with testing
<tosaraja> ok, if you pick this up after the meeting or have another thread 
here on the side (think we can manage that) , I'd have another for you: 
compiling V4 to ARM. It seems like Blackberry is stumbling upon the same 
problem as we now have
<sletta> that still excludes metainvokes, timers and other async behavior 
which is heavily used throughout Qt. I'm not sure that will fix anything
<fkleint> OK, so, everyone can sleep over it and maybe develop some ideas
<fregl> lars: v4 and arm is being fixed if I understand correctly?
<tosaraja> it was already discussed on the release mailing list shortly. Do we 
have anyone doing the implementation to ARM? (currently it's only for THUMB)
<fregl> tosaraja: actually I think Simon is working on that right now
<sletta> Why does QTRY_VERIFY time out in the first place... If it ends up 
hanging, the test will be killed anyway
<tosaraja> fregl: great! :)
<lars> fregl: yes, tronical has a fix he's now cleaning up
<lars> fregl: arm is actually mostly working, android was the issue :)
<fregl> tosaraja: so that one should be there in a day or two
<lars> fregl: erikv is also working on some arm related issues
<tosaraja> fregl: I'll start a build now and then...then :)
<lars> tosaraja: fregl: we hopefully have it all fixed tonight...
<tosaraja> Then we have Android testing as an issue
<fregl> tosaraja: so let's see if it works tomorrow, the fix needs to go 
though integration first I guess ;)
<tosaraja> sifalt was trying with the latest changes, but was missing 
something. Do we have Simo here?
<lars> fregl: we've had little issues with CI on declarative lately, so I'm 
positive
<sifalt> tosaraja: I cherrypicked eskil's chnages from gerrit, but it looked 
like i was sitll missing something
<olhirvon> sifalt: ^^
<fregl> sifalt: maybe best talk to eskil directly
<sifalt> it was nagging about missing androiddeployqt
<tosaraja> getting those androids running tests shouldn't be that hard. We 
already have a line of 10 tablets waiting to be tested on. When we get the 
first machine set up and it manages to test correctly, we can just clone it 
and we will have 10 machines connected to 10 tablets running the tests
<tosaraja> meaning, we can have several submodules verified on android.
<tosaraja> ios on simulator is something I have on my todo list, and will 
start working on that probably already this week
<fregl> tosaraja: are the machines physical?
<tosaraja> fregl: no, 10 virtual machines connected to 10 tablets. I will 
hard-code to environment variables the different IP addresses of the tablets
<fregl> right, so the VMs can access usb, sounds good.
<tosaraja> fregl: until we come up with how to easily create a pool of devices 
and maintain a state machine on which is occupied and which is free, i thought 
this would be the easy way out
<fregl> tosaraja: sounds sensible to me
<tosaraja> fregl: the connection is done over IP, not USB
<fregl> ok
<tosaraja> fregl: the tablet's ADB server is set to listen to IP
<fregl> well, seems like you have that under control
<tosaraja> then... the new network test server
<tosaraja> it hasn't gotten any progress lately.
<nierob_> btw. digia used to sell a solution for multiple mobile testing / 
code execution so maybe we have such thing ready
<tosaraja> afaik, peter-h fixed tests to work on the new server, but as far as 
the remainder goes, I don't think we have gotten anywhere
<tosaraja> we still have a few tests failing preventing us from upgrading
<tosaraja> With all these other things on my table, I haven't had time to 
anything about this. And I recon that neither does anyone else ;)
<tosaraja> But to more promising news... having CI create VMs on demand... and 
always using a clean clone is progressing.
<tosaraja> Qt has finally gotten its own vSphere to build on. We have 
enterprise version of jenkins installed as a trial
<tosaraja> Now I can start playing around with it and see how it connects and 
how it works. We should also have the APIs for vSphere available now if we 
wanted to create the modules for Jenkins ourselves.
<tosaraja> Do we have anyeone here that has done that previously? Do new 
plugins for Jenkins i mean
<tosaraja> If we did that work ourselves, we could still continue using the 
free version of Jenkins
<fregl> that means we can basically start snapshotting CI machines and rolling 
back to old stages. Maybe we should consider moving in that direction and 
depending less on puppet.
<tosaraja> Yes, we could scrap puppet after that
<fregl> I think as a first step that snapshotting sounds more important than 
also starting VMs on demand
<tosaraja> and each time we did a modification to the template, we could run a 
whole Qt build and run the tests on it to see that we don't break anything
<fregl> yes
<fregl> we seem to have the capacity to run all those machines now, so that 
should not change
<tosaraja> fregl: snapshotting from the current situation is a bad idea, since 
the machines are already out of sync and not clones. We would need to re-
create every machine first, then create a base snapshot and continue from 
there
<fregl> if the puppet (or manual) update is run on only one machine at a time, 
as describe above, we can then start using that to test everything and if it 
works indeed use it as new template for the other VMs
<tosaraja> fregl: and having the on demand would do that for us
<fregl> yes, of course start the snapshots from a clean slate
<fregl> tosaraja: but how do you teach jenkins that it can just create 
machines? or do we pretend to jenkins that we still have a limited number of 
machines running somehow?
<tosaraja> fregl: the first step jenkins would do is create a new node for 
itself and as that node starts it would create a VM that connected to itself
<tosaraja> fregl: at least that's how i pictured myself doing it
<fregl> tosaraja: I don't understand. how does it create a node? is a node not 
a running machine already?
<tosaraja> fregl: I don't really know how Jenkins manages to create a new node 
on the fly, and how it would start working on it as it would be offline until 
something connected to it.... it might be that some master node would have to 
take care of the initial setup
<tosaraja> fregl: ^ still to test and figure out ;)
<fregl> tosaraja: so I think this is rather hard, that is why I would start 
with a pool of machines first. These can then be reverted back to a snapshot 
after the test run.
<sifalt> tosaraja: fregl: I don't think it is a problem. We are already having 
a situation where the master thinks that there is more nodes than there 
actually is
<tosaraja> fregl: how would we manage to put puppet into all that? If we had a 
snapshot and we need to run puppet on it. we would need to update the snapshot
<fregl> sifalt: ok, if that can be done, that's really great.
<tosaraja> ok...but it's past 3 o clock here and the time is up for this 
meeting
<fregl> tosaraja: I would imagine: run the snapshot, let puppet run, take new 
snapshot
<fregl> ok, let's just meet again next Tuesday.
<fregl> can someone write a short summary? we can attach the backlog.
<tosaraja> obviously nothing much changes regading the usage of this 
channel... whenever you need us or eachother, we will be here. I'll just be 
heading home now. Thanks and bye :)
<fregl> tosaraja: yes. and it's good to have a bit of focused time for this :)
<tosaraja> indeed
<olhirvon> This seems to be useful :) Thanks everyone for active 
participation.

-- 
Best regards,
Frederik Gladhorn
Senior Software Engineer - Digia, Qt
Visit us on: http://qt.digia.com




More information about the Development mailing list