Daily builds of huge trees
Published by Martin Pool November 10, 2011 in Bazaar, Code, Cool new stuff, General
We’ve just upgraded Launchpad’s builder machines to Bazaar 2.4. Most importantly, this means that recipe builds of very large trees will work reliably, such as the daily builds of the Linaro ARM-optimized gcc. (This was bug 746822 in Launchpad).
We are going to do some further rollouts over the next week to improve supportability of recipe builds, support building non-native packages, handle muiltiarch package dependencies, improve the buildd deployment story etc.
Removing a project from a shared bug report
Published by Curtis Hovey November 8, 2011 in API, Bug Tracking, Projects
Launchpad will soon permit you to say your project is not affected by a bug shared with another project — you can delete the spurious bug task. This action can be done from the bug’s web page, and using Launchpad API.
You can remove a project from a bug if you are the project maintainer, bug supervisor, or are the person who added the project to the bug. This action can only be performed when the bug affects more than one project — you cannot delete an entire bug. This feature permits you to undo mistakes.
Launchpad beta testers will see the remove action next to the affected project name in the affects table.
The delete() method was added to the bug_task entry in the Launchpad API. There is a example API script, delete_bugtasks.py, that can remove a project from many bugs. There is also a split action to create a separate bug just for the specified project to track separate conversations in bug comments.
Usage: delete_bugtasks.py [options] bug_id:project_name [bug_id:project_name] Options: -h, --help show this help message and exit -v, --verbose -q, --quiet -f, --force Delete or split bug tasks that belong to a public bug -d, --delete Delete a spurious project bug task from a bug -s, --split Split a project bug task from an existing bug so that the issue can be tracked separately -w WEBSITE, --website=WEBSITE The URI of Launchpad web site. Default: https://api.launchpad.net; Alternates: https://api.staging.launchpad.net, https://api.qastating.launchpad.net
Previously, you could not remove spurious bug reports about your project. Many were cause by poor bug target management; you could not move a bug between projects and distributions. You can now move bugs between projects and distributions, but thousands of bugs still wrongly claim to affect a project or distribution. This causes clutter on bug pages and searches, and it causes Launchpad performance problems.
This change is a part of a super-feature called Disclosure. To ensure that confidential data is not accidentally disclosed, Launchpad will only permit private bugs to affect a single project. Soon, you may need to remove a project from a bug before marking the bug private.
Launchpad offline 08.30-08.45 UTC 10th November, single sign-on read-only
Published by Matthew Revell in Notifications
Launchpad will be entirely offline and Ubuntu’s single sign-on service will be read-only for around 15 minutes from 08.30 UTC on the 10th November.
Goes offline: 08.30 UTC 2011-11-10
Expected back: 08.45 UTC 2011-11-10
This is to allow us to make a database upgrade. We’re sorry for the disruption that this will cause.
Welcome to BerliOS projects
Published by Matthew Revell October 10, 2011 in General
It’s sad to read that BerliOS will close in December, after nearly twelve years of serving open source projects. One fewer project hosting site means that the open source world is that bit poorer.
If you’ve been hosting your project on the BerliOS Developer platform and you’re looking for a new home, you’ve got plenty of choice.
We’d love to welcome you to Launchpad and here are a few reasons why you should consider Launchpad:
- We can help you import your bug history from BerliOS
- Importing your Subversion repositories is straightforward, too, and something that we’ve done for thousands of repos.
- There’s more to Launchpad than bug tracking and code hosting: code review, support request tracking, blueprint for spec tracking, personal package archives and automated daily builds for getting software to Ubuntu users, translations with a large and active community, plus there’s a web services API.
- You’ll get friendly help in our IRC channel and on our mailing list.
- Bazaar rocks.
- Launchpad itself is open source software.
If you have questions, you’re very welcome to join us in #launchpad on FreeNode and the launchpad-users mailing list.
Finding bugs that affect you
Published by Martin Pool October 4, 2011 in Bug Tracking, Coming changes, Cool new stuff, General
We’ve recently deployed two features that make it easier to find bugs that you’re previously said affect you:
1: On your personal bugs page, there’s now an Affecting bugs that shows all these bugs.
2: On a project, distribution or source package bug listing page, there’s now a “Bugs affecting me” filter on the right (for example, bugs affecting you in the Launchpad product).
Counts of the number of affected users already help developers know which bugs are most urgent to fix, both directly and by feeding into Launchpad’s bug heat heuristic. With these changes, the “affects me” feature will also make it easier for you to keep an eye on these bugs, without having to subscribe to all mail from them.
Launchpad now accepts mail commands from gmail
Published by Martin Pool October 1, 2011 in Cool new stuff, General
If you use gmail, you should now be able to send commands to Launchpad without gpg-signing.
gmail puts a DKIM cryptographic signature on outgoing mail, which is a cryptographic signature that proves that the mail was sent by gmail and that it was sent by the purported user. We verify the signature on Launchpad and treat that mail as trusted which means, for example, that you can triage bugs over mail or vote on merge proposals. Previously you needed to GPG-sign the mail which is a bit of a hassle for gmail.
(DKIM is signed by the sending domain, not by the user, so it doesn’t inherently prove that the purported sender is the actual one. People could intentionally or unintentionally set up a server that allows intra-domain impersonation, and it’s reported to be easy to misconfigure DKIM signers so that this happens. (Consider a simple SMTP server that accepts, signs and forwards everything from 192.168/16 with no authentication.) However, in cases like gmail we can reasonably assume Google don’t allow one user to impersonate another. We can add other trusted domains on request.)
If you have gmail configured to use some other address as your From address it will still work, as long as you verify both your gmail address and your other address.
You can use email commands to interact with both bugs and code merge proposals. For instance when Launchpad sends you mail about a new bug, you can just reply
status confirmed importance medium Thanks for letting us know!
We do this using the pydkim library.
Note that you do need at least one leading space before the commands.
If you hit any bugs, let us know.
Deployment reports are now public
Published by Matthew Revell September 30, 2011 in General
Steve Kowalik writes:
For a while now Launchpad has been using deployment reports that tell us what state our QA is in, which revisions are safe to deploy to production, or which revisions are not safe to deploy since they failed QA.
Some time ago, I started the process to make these reports public, and I’m proud to announce that today, they are!
If you’re waiting to see when your code in Launchpad is likely to go live, take a look at the new public deployment report.
Less mail about translation imports
Published by Martin Pool September 28, 2011 in Translations
Continuing on from our earlier work of sending less but better mail and making it faster to import i18n translation templates: Launchpad will no longer send mail when it successfully imports a template. You can see in the web ui when the template was last imported, and you will still get mail if there’s a problem.
I could hardly put it better than Riddell:
Danilo asked for my reasoning. My reasoning is that pointless e-mails are a pain.
(I hope we’ll eventually have a more structured notification model, that will let you choose to see some notifications by mail and others in the web ui. One step at a time.)
Translation imports: making approval conflicts visible
Published by Jeroen T. Vermeulen September 19, 2011 in Translations
If you use Launchpad’s Translations feature, then as of today, you may notice a new kind of error for uploads in your translations import queue. Look for the “” icon next to your upload’s status, and click to unfold. The error message says “Can’t auto-approve upload: it’s not clear what template it belongs to.”
You may find this annoying, and as the person responsible, let me apologize. I hope when I’m done explaining, it won’t seem so bad.
To the right is an example of the error. Click it to see more.
Where does the error come from? Actually it’s a problem that’s always been there, but instead of telling you about it, we Launchpad developers tried to hide the complexity from you and take care of it all ourselves. And we weren’t keeping up. Some of your uploaded translations would just sit in the queue forever, with status Needs Review, for no clear reason. All that’s changing now is that Launchpad will tell you when this happens, so that you can deal with it without waiting for us.
Why do some translations sit in the queue forever?
Every translation you make in Launchpad has to go into a specific template and language. Usually it’s obvious where you want your translation to go: when you translate in Launchpad’s web UI, you’re already on the page for a specific template and language. If you have upload privileges for the project and language, you can follow the upload link from that same translation page and again it’s obvious which template you’re translating and to what language. If you always upload the same file with exactly the same name and path, new uploads of that file go to the same place as before. But what if you upload a new file from the release-series page, or the translation comes in from a Bazaar branch or an automated build?
Then it’s up to a script we call the Translations Import Queue Gardener. The Gardener periodically scans all waiting uploads—the ones marked Needs Review—and tries more advanced ways of matching them up with known templates and languages. When it finds a match, it approves the upload’s import to the template and language it has found.
One of the Gardener’s most important tools is a template’s ”translation domain.” This is a simple name; no slashes or weird characters allowed. Launchpad figures out a template’s domain when you first import the template, based on its directory path. In principle a template’s domain should identify the template uniquely on the end-user’s system, but Launchpad isn’t as strict about it. It just assumes that the domain name is tied to the template file’s path within a project’s source tree. You probably shouldn’t, but you can give your project two templates with the same domain if you want.
When you upload a translation, the Gardener tries to figure out its translation domain based on the file’s path, just like what happened when the template was created. The Gardener looks for a template with the right domain in the same release series. If it finds one, presto: it’s got the template that the upload is meant for. If not, then the Gardener tries a few other things and if nothing works, simply keeps the upload on the queue.
So the entry doesn’t get imported, but usually the Gardener can’t give any single reason: all it knows is that it tried many ways of matching the file to a template and none of them worked. Maybe it’s an error; maybe it’s just a matter of waiting for the right template to be created.
So what’s changed?
The new error message is about “approval conflicts.” You’ll see it when there is ”more than one” matching template for your upload. This can happen because your project’s directory structure is unusual and Launchpad can’t extract a meaningful domain from it. Or a template’s domain may have been changed, or an old deactivated template is reactivated when a new one has already taken its place.
Whatever the cause, the new error message tells you that this has happened, and what the matching templates are. It’s up to you to decide what needs to be done about it:
- update one of the templates’ domains, or
- deactivate an obsolete template, or
- move a file, or
- re-upload your file to a specific template, or
- re-upload your file with a different name, or
- upload translations as a tarball so that Launchpad sees their full directory paths.
How much you can do, of course, depends on the permisisons you have. Only the project’s owners (and Launchpad’s administrators) can deactivate templates or change their domains. But you can always delete your own uploads if you want to upload your file differently: on the import-queue page, click on Needs Review and select Deleted instead.
Let us know
There’s still plenty more we’d like to do to make imports easier and more efficient, if we can find the time. But I hope this small change will make your life a little easier.
Is this error message working for you? Is it helpful? Are you seeing a lot of these errors, or none at all where you were expecting them? Is the explanation unclear? Do you see something happen for lots of people that we could fix in the same way? Please get in touch:
- Contact danilos or jtv on IRC, in #launchpad on Freenode.
- Find or file a bug if it’s broken.
Tips
- If you want to become more familiar with the translations import queue, check out the global queue to see all uploads in Launchpad. The version you see there is just a copy on a test server, so don’t be afraid to play with it.
- By the way, did you know about our test servers? We test our changes on staging and qastaging servers before they go live. You can try out most of Launchpad’s features there. Look for the grey “demo” text in the background. They get restored to a fresh copy of the real Launchpad once a week.
- Tired of creating translations tarballs and uploading them to your project? Automate it all with Bazaar integration.
- You want Bazaar integration but your code is hosted outside Launchpad and/or in a different revision control system? You can tell Launchpad to mirror a branch from elsewhere. Then you can import translations from the mirrored copy.
- We like transparency! If you’re interested in the engineering details of this change, it’s all online.
- We’ll have less downtime per month (at the cost of more frequent but short interruption).
- We’ll be able to deploy fixes and changes involving DB schema more frequently.
Speeding up development
Published by Francis J. Lacoste September 9, 2011 in General
Today we reached a significant milestone, we completed our first fast down-time deployment. Two obvious reasons for doing this were already mentioned in the announcement and our technical architect”s post describing the change:
But from my perspective, the most important benefit I think we’ll get from this is a speed up in our rate of development, particularly, in terms of completing feature projects. It’s not a secret, our feature squads spends a lot of time to complete their projects. There are multiple reasons for this, but in the end, there usually fall under two broad cateries: the time it takes to actually make the change, and the delays in getting feedback on the change itself.
To help with the first category, you’ll want better and more powerful libraries, better architecture, developers’ training, etc. Think the time difference between developping a database web application in Django vs as a CGI C application using only the standard C library. Launchpad isn’t using the most modern libraries and toolkits, and we could still make a lot of improvements there. But the costs of making changes in this space are compounded by the problems of the other category.
Once you wrote the change, you are far from done. There are lots of hoops you still have to jump through before saying “done-done“: you’ll need to make sure the tests pass, to get your changes reviewed, merged, QAed and then deployed. And finally, you’ll probably want to make sure that it matches the user’s expectations, but until it’s in production, this is hard to assess reliably. All of these steps takes time and introduce delays, some bigger than others. The Launchpad team is always on the look-out to cut in these delays and the new “fast down-time deployments” cut on of the biggest one we had.
Since a picture is worth at least a thousand words, have a look at the chart above to have a better idea of what I’m talking about. It shows the distribution of the time it takes to complete a “change”. (What this plots is the cycle time from coding to deployment of our Kanban cards which roughly map to one logical change.) You’ll see that 50% of our changes are deployed to production in about a week. And the next 45% takes between 1 and 5 weeks. Now, our feature projects are composed of many many of these smaller changes. If those are all relatively small changes, why do they take so long?
One of the big bottleneck was the batch size of our DB deployment. If a change required a DB schema it waited until the next downtime deployment which happened once every month. In theory, that means that on average a change involving the database would wait 2 weeks in the queue before deployment. In practice, it’s more complex than that, because squad leads would often plan around these. So a database change would be hold off onto because it was deemed that it couldn’t be safely completely to be part of the next downtime deployment. So it might be put on hold in favour of other work, and delayed to the next downtime deployment. It’s also frequent to have other changes building on the first also queued up waiting for the next deployment window. Add on top of that, that it’s common for the completion of a feature to require several iterations of DB change based on feedback and you quickly understand how you can be working months on a feature project!
But this major bottleneck is now gone! We’ll be able to land and deploy DB changes reliably within days, giving us much more rapid feedback. I’m looking forward to the change in the cycle time distribution in the coming months. The whole distribution should move toward the left. I’ll write a follow-up in two months to see if this prediction comes true.
Photo by Nathan E Photography. Licence: CC BY 2.0.