Michael Benner

Windows version 2.2.1172 released

By Michael Benner | 3 days ago | 12 Comments

We’ve just released an update to our Windows client (version 2.2.1172) focused on better and more seamless reconnection behavior. This fix was requested by our Windows user community.

Now, when a connection is lost and re-established (e.g., waking your computer from hibernate), the client will more effectively detect the presence of a connection and auto reconnect you to the HipChat server.

In addition, we’ve updated the system tray icon to display when the client has lost connectivity.

As always, if you see any issues, please visit our Help Desk.

Note: HipChat for Windows supports Windows Vista, 7, and 8.  HipChat is no longer supported on Windows XP (hey, Microsoft doesn’t support it either!)

Pete Curley

End of an AIR-a (we’re killing the AIR app)

By Pete Curley | 2 months ago | 14 Comments

What’s happening?

Today we’re putting our old friend, the Adobe AIR app, into maintenance mode. This means that the AIR version of HipChat won’t receive any features or updates. In 90 days all AIR app users will be required to update to one of the new, native applications.

But don’t worry, we’re not actually killing the AIR app. We’re sending it to a big farm in the country where he’ll have lots of room to run and play.

Why?

This is a bittersweet moment for us. When we started HipChat five years ago, we made a big bet that chat services needed to have desktop apps. There weren’t many resources available to help our small team to write apps on all three major operating systems. We took a chance on Adobe AIR, and for the most part it was great for us. We wrote the app once and it ran (relatively) well on Windows, OS X, and Linux. Sure there were some quirks and we did a lot of work to make our Air app feel native. But Adobe AIR gave our users a solid desktop experience.

Unfortunately, AIR became less and less of a priority for Adobe over the years. When they stopped supporting Linux, we saw the writing on the wall. We began building native apps from scratch for all three platforms. We launched them in the summer and fall of 2013.

Since then we’ve added a lot of new functionality to our native apps: new layout with vertical tabs, 1-1 video and screen sharing, and greatly improved performance. So if you’re still using the AIR app, it’s time to say hello to the awesome new native apps.

What do I have to do?

If your HipChat looks like this:

 

 

 

 

 

 

 

 

 

 

 

You need to download the new app here: https://www.hipchat.com/downloads

If your HipChat looks like this (with tabs on the left side):

 

 

 

 

 

 

 

 

 

 

 

 

You’re on one of the new apps and don’t need to do anything.

We hope you enjoy the new apps, and we look forward to the cool new stuff we have planned for them coming up.

RIP AIR app (I apologize for the inclusion of Chris Brown, no Air Supply songs worked as well)

zuhaib

Elasticsearch at HipChat: 10x faster queries

By zuhaib | 2 months ago | 5 Comments

Last fall we discussed our journey to 1 billion chat messages stored and how we used Elasticsearch to get there. By April we’d already surpassed 2 billion messages and our growth rate only continues to increase. Unfortunately all this growth has highlighted flaws in our initial Elasticsearch setup.

When we first migrated to Elasticsearch we were under time pressure from a dying CouchDB architecture and did not have the time to evaluate as many design options as we would have liked. In the end we chose a model that was easy to roll out but did not have great performance. In the graph below you can see that requests to load uncached history could take many seconds:

Average response times between 500ms-1000ms with spikes as high as 6000ms!

Identifying our problem

Obviously taking this long to fetch data is not acceptable, so we started investigating.

Hipchat Y U SO SLOW

What we found was a simple problem that had been compounded by the sheer data size we were now working with. With CouchDB we had stored our datetime field as a string and built views around it to do efficient range queries; something it did very well and with little memory usage.

So why did this cause such a performance problem for Elasticsearch?

Well, an old and incorrect design decision resulted in us storing datetime values in a way that was close to ISO 8601, but not entirely the same. This custom format posed no problem for CouchDB as it treated it as any other sortable string.

On the other hand, Elasticsearch keeps as much of your data in memory as possible, including the field you sort by. Since we were using these long datetime strings it needed much memory to store them: up to 18GB across our 16 nodes.

In addition, all of our in app history queries use a range filter so we can request history between two datetimes. For Elasticsearch to answer this query it had to load all the datetime fields from disk to memory for the query, compute the range, and then throw away the data it didn’t need.

As you can imagine, this resulted in high disk usage and cpu wait i/o;

But as we mentioned earlier, Elasticsearch stores this datetime field in memory, so why can’t it use that data (known as field data) instead of going to disk? It turns out that it can, but only if you are using a numeric range for your index, and we were using these custom datetime strings.

Kick off the reindexing!

Once we identified this problem we tweaked our index mapping so it would store our datetime field as a datetime type (with our custom format) so all new data would get stored correctly. We leveraged Elasticsearch’s ability to store a multi-field which meant we were able to keep our old string datetimes around for backwards compatibility. But what about the old data? Since Elasticsearch does not support mapping a change onto an old index, we’d need to reindex all of our old data to a new set of indices and create aliases for them. And since our cluster was under so much IO load during normal usage we needed to do this reindexing on nights and weekends when resources were available. There were around 100 indices to rebuild and the larger ones took up 12+ hours.

Elasticsearch helped this process by providing helper methods in their client library to assist in our reindexing. We also built a custom script around their Python client to automate the process and ensure we caused no downtime or lost data. We hope to share this script in the future.

The fruits of our labor

Once we finished reindexing we switched our query to use numeric_ranges and the results were well worth the work:

Going from 1-5s to sub-200ms queries (and data transfer)

So the big takeaway from this experience for us was that while Elasticsearch dynamic mapping is great for getting you started quickly, it can handcuff you as you as you scale.  All of our new projects with Elasticsearch use explicit mapping templates so we know our data structure and can write queries that take advantage of them. We expect to see far more consistent and predictable performance as we race towards 10 billion messages stored.

We’d love be able to make another order of magnitude performance improvement to our Elasticsearch setup and ditch our intermediate Redis cache entirely. Sound fun to you too? We’re hiring! https://www.hipchat.com/jobs

Rich Manalang

Introducing the new GitHub for HipChat add-on

By Rich Manalang | 3 months ago | 0 Comments

Several months ago, we introduced a new way to integrate with Bitbucket using HipChat API v2′s Add-on capabilities. And although it took a while, today we’re announcing the new GitHub for HipChat Add-on. We’re using the same v2 API behind our Bitbucket integration to power our new GitHub for HipChat add-on.

The new GitHub for HipChat add-on makes it easy to pipe in all of your GitHub notifications into one or more HipChat rooms, using GitHub’s rich set of webhooks. You can set up notifications for all of the events you see below:

You can subscribe any room to as many repositories as you want and tailor the events for each room and repository. After it’s all configured, your notifications will look like this:

Ready to try it out? Find the new GitHub for HipChat add-on in your admin console. Find your room configuration screen, select the room you want to add this to, then click on the Add-on link on the sidebar. You’ll see the GitHub add-on in the “Find new” tab.

The new GitHub add-on for HipChat brings important information about your dev process right into HipChat. So what are you waiting for? Go set it up!

 

 

Pete Curley

HipChat is now free for unlimited users

By Pete Curley | 3 months ago | 81 Comments

A year ago we made HipChat free for teams of five, and since then thousands of teams have learned how great chat can be. But we believe that teams of every size deserve the power of HipChat.

So today, we’re excited to announce a new subscription plan that gives you unlimited HipChat users – for free.

Here are the two ways to use HipChat:

  • HipChat Basic (free): Group chat and 1-to-1 messaging for every person on your team, regardless of team size.
  • HipChat Plus ($2/user/month): All of the features of HipChat Basic, plus video calling and unlimited, searchable message history.

You can check out the full pricing page for details.

What if I’m currently paying for HipChat?

You’ll get HipChat Plus automatically. Your features and price will stay exactly the same.

What if my team is currently using HipChat for free?

Starting today, you can add as many users as you want for free. Now there’s nothing stopping you from inviting every person in your company to HipChat.

In order to make HipChat Basic free for larger teams, we’ve added some new constraints. We worked hard to make sure they would work for small teams while showing larger teams the value of HipChat Plus. The new constraints are: file storage is capped at 5 GB (far more than the average team uses) and you can search the last 25,000 messages (about six months of messages for the average team of five).

We’ve also given current free users access to HipChat Plus features for the next 30 days.

Enjoy the free-for-all

We think every team in the world will benefit from HipChat. We’re introducing free HipChat Basic today so that every team can.

A lot of teams are using consumer chat services simply because they’re free. We want to show them how good chat can be when it’s actually designed for teams. And we want to make it easy for teams to start using HipChat without worrying about credit cards, invoicing, or expense reports.

If you’re still using consumer IM tools for work, “it’s free” is no longer an excuse. Get chat that’s built for your team.

Sign up for HipChat