Blog

WTF Happened to Custom Layout Updates in Magento v2.3.4

Published: January 30, 2020

Tags:

In versions on Magento prior to v2.3.4, users had the ability to add custom layout updates to category, product and cms pages via a textarea input from the Magento admin panel.

Screenshot of design tab on category edit screen in Magento v2.3.3

These updates would then be merged with layout definitions from the theme on the website to impact the overall frontend page rendering.

Per Magento’s release notes, as of Magento v2.3.4, this ability has been removed:

Removal of custom layout updates and the deprecation of layout updates to remove the opportunity for Remote Code Execution (RCE). The Custom Layout Update field on the CMS Page Edit, Category Edit, and Product Edit pages has now been converted to a selector

https://devdocs.magento.com/guides/v2.3/release-notes/release-notes-2-3-4-open-source.html

I dug into this a bit and shared some info in this Twitter thread. Here, I’d like to present my findings in a slightly more formal manner, and also offer some additional details.

Forcing HTTP Version with PHP cURL

Published: January 8, 2020

Tags:

A colleague recently reported a strange bug to me:

I’m troubleshooting an issue where data fails to sync the a 3rd party and I’ve identified this error when curl_exec runs

HTTP2 framing layer error

From what I gather online is that this typically a somewhat generic error and could have multiple causes.

New Relic Alert When No Data is Received

Published: November 4, 2019

There is a known bug with the New Relic PHP agent that causes it to stop reporting data when it is upgraded.

When I ran into this recently it made me think, “it would be nice if I could have New Relic send me an alert when it stops receiving data from the application.”

Gatling Multiplier Parameter

Published: November 3, 2019

Tags:

Typically, when load testing a system with Gatling, I create a simulation script which consists of a number of scenarios which are executed simultaneously at different ratios. Execution of the scenarios would look something like this:

setUp(
    BouncerHome.inject(rampUsers(360) during (300 seconds)),
    BrowserCategory.inject(rampUsers(60) during (300 seconds)),
    Searcher.inject(rampUsers(40) during (300 seconds)),
    Uncached404.inject(rampUsers(40) during (300 seconds)),
    UncachedPdp.inject(rampUsers(60) during (300 seconds)),
    PurchaseIntent.inject(rampUsers(10) during (300 seconds))
).protocols(httpProtocol)

I then run the simulation a number of times, gradually increasing the load to identify the breaking point.

For example, after running at the ratios above I might double the load as follows:

setUp(
    BouncerHome.inject(rampUsers(720) during (300 seconds)),
    BrowserCategory.inject(rampUsers(120) during (300 seconds)),
    Searcher.inject(rampUsers(80) during (300 seconds)),
    Uncached404.inject(rampUsers(80) during (300 seconds)),
    UncachedPdp.inject(rampUsers(120) during (300 seconds)),
    PurchaseIntent.inject(rampUsers(20) during (300 seconds))
).protocols(httpProtocol)

Then triple (and so on and so forth).

Expected 404s and Gatling

Published: November 1, 2019

Tags:

For many websites, for one reason or another (bots?), a not insignificant amount of traffic winds up hitting a 404 page. When load testing a website like this it is important that this traffic is represented for an accurate simulation.

Whitelisting Your Load Test Server IP at Cloudflare

Published: October 31, 2019

Tags:

Recently I needed to load test an application that sat behind Cloudflare. I tried Google and didn’t find much beyond a thread on the Cloudflare forum’s titled “How to whitelist load testing IPs”.

The thread concludes with sandro suggesting using an “access rule”.