Blogs

Narayan Newton

Apache JMeter and I have a long and complicated relationship. It is definitely a trusted and valuable tool, but I am also quite confident that certain parts of it will make an appearance in my particular circle of hell. Due to this somewhat uncomfortable partnership, I am always interested in new tools for applying load to an infrastructure and monitoring the results. Locust.io is not exactly a new tool, but I have only recently begun...

Sam Boyer

After a long hiatus, we're back! When we left off last fall, we were looking at the mechanics of version comparison. In this post, we'll get into more practical matters: the approach we actually took to building out Tag1 Quo's version management system. When we started working on Quo, we knew that we were going to lean heavily on versions for pretty much all aspects of the system’s functionality. Many of the individual requests arriving...

Dylan Clear

Though it came and went largely unnoticed, February 24th, 2017 marked an important anniversary to tens of thousands of Drupal website owners. February 24th 2017 was the 1-year anniversary of the End-of-Life (EOL) announcement for Drupal 6 as no longer supported by the Drupal community. It is widely known that major Drupal version upgrades require non-trivial resources. Not only do they require significant planning, technical expertise, and budget, but the path is often determined by...

Jeff Sheltren

Once upon a time, many years ago, I wrote a blog post titled Stop Disabling SELinux! as a response to seeing many users, hosting companies, and development shops disabling SELinux as a first resort without any consideration of the increased security it was bringing them. The post outlines -- in a few easy steps -- how to configure SELinux for a common Drupal setup. But it's applicable to any LAMP application (plus memcached). I'm still...

Sam Boyer

When we left off last time , we’d assembled a definition of what versions are. Now, we’re going to dive into how we use them in Tag1 Quo : comparing them to one another! The general goal is straightforward enough: we want to know if, say, 6.x-1.0 is less than 6.x-1.1 . (Yup!) Or if 6.x-1.0-alpha1 is less than 6.x-1.0 . (Also yup!) Let’s rewrite these two examples as tuple comparisons: {6,1,0,4,0,0} < {6,1,1,4,0,0} =...

Sam Boyer

When Tag1 decided to build Tag1 Quo , we knew there was one question we’d have to answer over, and over, and over again: is there a security update available for this extension? Answering that question - at scale, for many websites, across many extensions, through all the possible versions they might have - is the heart of what Quo does. The problem seems simple enough, but doing it at such scale, for “all” versions,...

Greg Lund-Chaix

Recently, we were working with one of our clients to diagnose high load on their web servers. We traced the cause of the load to an opcache_reset() call used after code deploys as a way of preventing the PHP OpCache from overfilling as new code was deployed to the servers. The issue was due to (and resolved by) bug #72590 , but troubleshooting the problem prompted us to look at ways to non-intrusively restart PHP-FPM....

Randy Fay

Long Term Support for Drupal 6 might be my favorite new feature included in Drupal 8. (I know, that might be stretching things for the fundamentally awesome step forward that Drupal 8 is, but bear with me.) Long Term Support for Drupal 6 If you're like me, you have loved the power of building websites for people that expose their ideas or services to the world. If you're like me, you've ended up "owning" a...

Jeremy Andrews

Or, What We Did This Summer It’s been an exciting summer, building our first product with Drupal 8. When we originally made the decision to offer Long Term Support for Drupal 6 , we were thinking about a few of our clients that were a little behind on their upgrade plans, and had envisioned a mostly manual process. However, once we took the plunge and signed up new clients, we had more modules and themes...

Károly Négyesi

Drupal 7 In Drupal 7, a hook_node_access implementation could return NODE_ACCESS_IGNORE , NODE_ACCESS_ALLOW and NODE_ACCESS_DENY . If any of them returned NODE_ACCESS_DENY then access was denied. If neither did but one returned NODE_ACCESS_ALLOW then access was allowed. If neither of these values were returned by any implementation then the decision was made based on other rules but at the end of the day some code needed to grant access explicitly or access was denied. Other...