Gerrit queries to avoid OpenStack review overload

As with many OpenStack core reviewers, my review queue can be completely overwhelming, often 300 – 400 active reviews that I have +2 / -2 authority on. It’s really easy to get discouraged on a list that big. Fortunately there are ways to trim that down.

Gerrit provides a simple query language to select which reviews you see, using the query bar in the top right of the page:

The way this works is by adding criteria into the search box, which by default is ANDed together to get the final results. In the process these queries change the URL for Gerrit, so you can bookmark the resultant queries for easy access later.

Restricting to Single Project (and pulling your own stuff)

This query is basically what you get when you click on a project link:

status:open project:openstack/tempest

Nothing special, but you can go one step further by removing yourself from the list of reviews:

status:open project:openstack/tempest

This also demonstrates that we can have both positive criteria and negative criteria.

Little Lost Projects (don’t loose the little ones)

In addition to having +2 on nova, devstack, tempest, I’ve got it on a bunch of smaller projects, which I often forget I need to go review. You can build a single query that has all your little lost projects in a single list:

status:open (project:openstack-dev/hacking OR project:openstack-dev/grenade)

No Objections

You can also filter based on votes in the various columns. It’s not nearly as detailed as I’d like, but it is still useful. I have a basic query for No Objections on most projects that I review which looks something like this:

status:open project:openstack/tempest -Verified-1 -CodeReview-1 -CodeReview-2

This removes all reviews that have a current -1 in Verified column, and a -1 or -2 in the CodeReview column. So patches with negative feedback are dropped from view. The top of your review list may contain patches that haven’t cleared CI yet, but that’s easy to see. There might also be Jenkins -2 reviews in this list, but gate failed merges can usually use extra eyes.

I consider this a base list of patches that there is no reason I shouldn’t be reviewing them.

Potential Merges

I’m typically up and at my computer at 7am EST, which is often a very slow time for zuul. So one of the things I look for is code that only requires one more +2 to go to merge on projects like Nova. Many of these are easy to review fixes, and clear the decks before the queue gets busy in the afternoon.

status:open -Verified-1 CodeReview+2 -CodeReview-1 -CodeReview-2 (project:openstack/nova OR project:openstack/python-novaclient)

Like the last one, we are filtering out all patches with negative feedback, but also requiring that there is an active +2 on the patch. I also make sure to do this for both nova and python-novaclient, which often gets lost in the noise.

Lost Patches

Especially in Nova it’s easy for a patch to get lost, as there are so many of them. I define lost as a patch that’s passed CI, but has no feedback in code review.

status:open -Verified-1 Verified+1 -CodeReview+2 -CodeReview+1 -CodeReview-1 -CodeReview-2 (project:openstack/nova OR project:openstack/python-novaclient) branch:master

These patches are often from newer folks on the project, and as such often need more time, so I typically only go after lost patches if I know I can set aside a solid hour on them. However I try hard to get to this query at least once a week, to make sure things don’t get fully lost, as a -1 will give the patch originator feedback to work on, and a +2 will make it far more likely to get the attention of other core reviewers when they are looking for mergable code.

Experimenting with your own

The gerrit query language is somewhat limited (full docs are online), so it can’t do everything I’d like, but even just these few slices make it easier to be able to get into a certain mindset for reviewing different slices of code. I have a toolbar folder full of bookmarks for these slices on different projects to do just that.

If you have other gerrit queries you regularly use, please leave a comment. Would love to see the ways other folks optimize gerrit for their workload.

Un-DRMing the old fashion way

… with robots… wait, what?

Peter Purgathofer, an associate professor at Vienna University of Technology, built a Lego Mindstorms robot that presses “next page” on his Kindle repeatedly while it faces his laptop’s webcam. The cam snaps a picture of each screen and saves it to a folder that is automatically processed through an online optical character recognition program. The result is an automated means of redigitizing DRM-crippled ebooks in a clear digital format. It’s clunky compared to simply removing the DRM using common software, but unlike those DRM-circumvention tools, this setup does not violate the law.

You can read more about it over at Boingboing.

Vacation Toolbox: Eyefi Card

Eyefi is a really cool idea, add a wifi chip into a standard SD card, so that when you walk into your house, turn on your camera, all your photos are synced to the cloud. During this trip I finally also got the mobile link mode working, where your phone acts as a relay, which meant from Halifax on I was posting pictures up to friends on facebook during the trip.

It does this by starting up a wifi hotspot after the camera has been on for 30 seconds (and hasn’t found a wifi network it knows). You set up that hotspot on your phone, and because the devices are so close, it’s the dominant signal, and your phone auto jumps to it. It pulls down all the photos yet synced, then the AP goes silent, and your phone goes back to normal. Next time you wander onto a wifi network, your phone then relays those up to your chosen cloud sync point (many are supported, including google, facebook, smugmug, flickr, or your own gallery 3 installation).

If you have a camera, you should get an eyefi card. I really can’t imagine going back to having to sync photos through a PC any more.

Maritime Roadtrip Vacation

It’s hard to sum up a long and varied vacation, but a map is probably a good place to start. Below is where we stayed, in order, over the course of this epic summer vacation…

Our summer road trip – Stonington ME -> Fundy National Park -> Ingonish NS -> Halifax NS -> Lunenburg NS -> Saint John NB -> Freeport ME -> Home

By the numbers:

  • Length: 17 days
  • Driving Distance: ~2800 miles
  • Destinations: 5 (plus 2 additional places just to break up the drive home)

This was one of those vacations that was long and varied enough that when we left Cape Breton, and realized we were still a week away from home, we were just amazed. It was the kind of vacation that in it’s duration and variety you have large stretches where the world, and even your home, are a foggy memory of the distant past. It’s the kind of unwind that I’ve only gotten a few times, and that gives you incredibly fresh eyes on the world. The fact that I was momentarily confused when unpacking the car to find sleeping bags in it. “We had sleeping bags on this trip? Oh, right, 12 days ago in Fundy.”

A Road Trip begins with a Car

[pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_1764.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_1765.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_1808.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_1815.JPG” ]

We’d talked about the idea of Nova Scotia a couple of years ago, but at the time I had a Honda Civic, and my wife had a Prius. Neither had quite the space or comfort to want to drive nearly 3000 miles in two weeks. But last fall I got a new Subaru outback, with comfortable leather seats, and adaptive cruise control. The combination makes road trips something that’s much more enjoyable. I found my tolerance for distance driving went way up with the adaptive cruise control, as it takes a huge amount of the cognitive load off. This is also a bigger car, with the back seat full of shoes and 3 duffle bags of clothes, and the back packed with a cooler, food, cooking gear, sleeping bags and packs.

Stonington, Maine, the land of Islands (2 nights / 1 day)

[pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_1770.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_1781.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_1787.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_1802.JPG” ]

We started our adventure in Stonington, largely based on looking at google maps and realizing that from Stonington we could get to Isle Au Haut by Mail Boat, and hike there for the day. We were booked in at a great little B&B, with a porch view of the bay. Possibly the best meal of the trip was that night at Aragosta, where we sat at the bar. Their “reservations highly recommended” was no joke, as far as we could tell they were already booked a few days in advance when we go there.

The first snafu of the trip happened when we found that 10am Mail Boat was sold out (did so by 9am), so we ended up on the 11:30 instead, which meant a slightly different hike. As far as adjustments, it was a minor one. Isle Au Haut also sports the Lobster Lady food truck, where we had home made ice cream sandwiches, made with home made ice cream, and home made cookies. Soooooo good.

I’d love to come back to Stonington, and bring our Kayaks. The island chain leading out to Isle au Haut would be amazing in good weather to pluck from one to the other over the course of a day.

Fundy National Park – land of tides and yurts (3 nights / 2 days)

[pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_1815.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_1816.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_1832.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_1834.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_1851.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_1860.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_1873.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_1885.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_1896.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_1902.JPG” ]

We stayed in a yurt, and cooked on a wood fired cooking stove. By itself that would have been enough to make this awesome. However then you throw in the legendary Fundy tides, the hiking, happening to be there during a music festival, which we caught one act of, and Hopewell Rocks, and I probably could have gone home after this point satisfied that this was a pretty good vacation.

Hopewell Rocks was my single favorite outing during the trip. It’s like Arches National Park except underwater half the day. On a future trip I’d love to Kayak the rocks at high tide, eat lunch, then hike out on them at low tide.

Fundy is where the vacation finally took hold. We were out and away from everything, days drive from home, in a Yurt with no electricity, enjoying the quiet of the park and being amazed by the ever changing landscape.

Next time we’ll have to stay longer, there is so much hiking in the park to do, and large parts of the park we never even got to. I’d love to actually get a group of friends together and take over the Yurt colony for a week.

Cape Breton – world’s end (4 nights / 3 days)

[pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_1906.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_1907.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_1914.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_1917.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_1919.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_1927.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_1941.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_1955.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_1959.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_1984.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_1997.JPG” ]

The cabin we stayed at in Cape Breton was my favorite place on the trip. Every morning I would wake up before Susan, make a cup of coffee in my travel french press, sit out on the porch in the adirondack chair with my tablet to read a book, and watch the morning unfold over Ingonish bay. There was a calm and peace to it that you only get days from home, with my last work day now a week and 2 adventures in the past. Adding to the cabin experience was the incredible provided breakfast, using fresh tomatoes from the vegetable garden on site, and the fact that we were brought a seafood appetizer every afternoon.

Cape Breton is a land of eagles. We never went a day without seeing a bald eagle. We did 3 pretty solid days of hiking, 2 near Ingonish, and 1 on the other side of the cabot trail (1.5 hrs drive each way) to take in the Sky Line trail. We saw moose, both in the road and in the woods. We saw porpoises at a distance through binocs, from atop a mountain. It was just amazing.

We will come back here. I wouldn’t change much about this part of the trip, except time. Take much more of it there.

Interlude: BaKED in New Glasgow

On our way off Cape Breton towards Halifax, in the first rain we say the entire trip, we stopped at BaKED in New Glasgow for lunch. Yay for Tripadvisor and Google Maps helping me find this place. Incredible food, lots of vegetarian options for Susan, and a great bakery case. This place is worth going out of the way for if you are ever in that part of Nova Scotia.

Halifax – back to civilization (2 nights – 2 days)

[pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_2001.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_2008.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_2011.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”20130824_185431.jpg” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_2022.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_2032.JPG” ]

After the isolation of Cape Breton, the bustle of Halifax was actually a little jarring. Calendar wise I wanted to put us there on a weekend to get a flavor for the city, but this was the least smooth transition of the trip, and one I’d probably avoid in a future itinerary.

Halifax is a pretty cool city, we had a nice and very talkative inn keeper a little north of town. She was extremely helpful in pointing out things we might want to check out. Halifax was a lot of walking, a lot of good food and beer. The city market was the best I’d seen, and a lot more functional than most. We ate lunch there on top of the building, with a green roof and windmills. We discovered the most amazing gelato / bakery / tea shop in the world. I’m actually surprised I got Susan out of there.

We also had the most unexpected part of the vacation in Halifax, wandering through the main park on our last day we came into an area where an old man had slipped and fallen off a trail, and was bleeding from the head. His son discovered him just about the time Susan and I were both realizing something was wrong, and the two of us proceeded to help until the paramedics arrived.

Lunenburg – a town of history (3 nights – 2 days)

[pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_2043.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_2044.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_2047.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_2052.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_2053.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_2055.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_2062.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_2069.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_2071.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_2072.JPG” ] [pe2-image src=”” href=”″ caption=”” type=”image” alt=”IMG_2114.JPG” ] [pe2-image src=”–bdqstGuX88/Uh5VXNWBQhI/AAAAAAAARD0/Bl_utgCZuGM/s144-c-o/IMG_2121.JPG” href=”″ caption=”” type=”image” alt=”IMG_2121.JPG” ]

Only an hour away from Halifax, but seemingly a hundred years distant. This was a recommendation by my friend Bob, which I highly appreciate. Here we finally took to the water, in kayaks for a wonderful tour of the Blue Rock formations, and finally put the car on a ferry for the first and only time on the trip. We drank from a small batch distillery, and loaded up to the legal limit to bring home. And we had some of our best breakfast conversations of the trip with other B&B guests.

We also had foggy mornings, for the first time in the trip. We had such ridiculous luck with weather on this trip.

Returning Home: Saint John & Freeport Maine

And then there was nothing left to do but start our journey home. We got a great recommendation from our Inn keeper in Lunenburg to stop off at the Shubenacadie Wildlife Park on the way to Saint John. It broke up the drive, and let us get some views of cougars, coyotes, elk, hawks, and beasts of all varieties.

In Saint John we ended up with a breakfast table full of Americans, that were largely doing versions of the same trip we were. One couple had been in Stonington for a week, we probably missed them by a few days on that end.

When Susan realized that our return trip could include stopping off at the LL Bean flagship store, it became a must do. So Freeport it was as our final stop. We did manage to stay at a very cool B&B run by an elderly couple who grew up in the area. So they had history, had known LL a bit (the wife grew up in the house, which was across from where LL’s house once was). There was plenty of shopping, but also a great deck to sit out on.

Home now, for a couple of days, I’m still getting used to the idea of not living out of a car. We’re processing laundry, in volume, and readjusting to home, slowly. That afterglow of the vacation is still here though, and the more I think about this trip, the more I am amazed that it was only 17 days. It was so packed with experience and adventure that it feels like the vacation started last year, not 2.5 weeks ago.

I can’t wait for the next grand adventure like this.