{"id":428,"date":"2023-04-27T19:59:48","date_gmt":"2023-04-27T19:59:48","guid":{"rendered":"https:\/\/blog.mozilla.org\/data\/?p=428"},"modified":"2023-04-27T19:59:48","modified_gmt":"2023-04-27T19:59:48","slug":"never-look-at-the-data-why-did-we-start-getting-so-many-pings-from-korea","status":"publish","type":"post","link":"https:\/\/blog.mozilla.org\/data\/2023\/04\/27\/never-look-at-the-data-why-did-we-start-getting-so-many-pings-from-korea\/","title":{"rendered":"Never Look at the Data: Why did we start getting so many pings from Korea?"},"content":{"rendered":"\r\n<p>Something happened on January 5, 2023. All of a sudden we abruptly started receiving a number of pings from Firefox Desktop clients in Korea equal to two times the size of the entire Korean Firefox Desktop population.<\/p>\r\n<p>What happened? How did we notice it? What did we do about it?<\/p>\r\n<p>Let\u2019s back up.<\/p>\r\n<p>I can\u2019t remember where I learned it, but I\u2019d already started reciting as dogma in my first year of University: \u201cThe most important part about any feature is the ability to turn it off\u201d. It\u2019s served me well through my studies and my career. I\u2019ve also found it to be especially true for data collection systems where, for whatever reason, as a user you might decide you no longer want the software you\u2019re using to continue to send data. In some places this is even enshrined in laws where you can request the deletion of data that has already been collected.<\/p>\r\n<p>Law or not, Mozilla has before, does now, and will always make it easy for you to decide whether to send data to Mozilla. We may not understand why you make that choice, and it definitely will make it harder for us to ensure our products meet your needs, but we\u2019ll respect the heck out of your choice in our processes and in our products.<\/p>\r\n<p>This is why, when Mozilla\u2019s data collection system Glean is told the user went from allowing data upload to forbidding it, we send one final <a href=\"https:\/\/mozilla.github.io\/glean\/book\/user\/pings\/deletion-request.html\">\u201cdeletion-request\u201d ping<\/a> before shutting down. The \u201cdeletion-request\u201d ping contains all the internal identifiers we\u2019ve used to longitudinally group data (if we receive ten crash reports it\u2019s important to know whether it\u2019s the same Firefox crashing ten times or if it\u2019s ten Firefoxes crashing once), and we use those identifiers to (well) identify what data we\u2019ve collected that we\u2019re now going to delete.<\/p>\r\n<p>For the purposes of this story you\u2019ll need to know that there\u2019s two times when Glean notices the product\u2019s gone from \u201cdata upload: on\u201d to \u201cdata upload: off\u201d: while Glean is running, and during Glean startup. If Glean\u2019s running, then we just handle things \u2013 we were told the setting changed from \u201cdata upload: on\u201d to \u201cdata upload: off\u201d and away we go. But Glean knows that it isn\u2019t always listening to the data upload setting, so if it it starts up with \u201cdata upload: off\u201d and the last time it shut down we were \u201cdata upload: on\u201d we\u2019ll send a specific \u201cat_init\u201d-reason \u201cdeletion-request\u201d ping.<\/p>\r\n<p>We in the Data Org monitor how Glean is behaving. One thing we\u2019ve learned about how Glean behaves is that the number of \u201cdeletion-request\u201d pings is roughly constant over time. And the proportion of \u201cdeletion-request\u201d pings that have the \u201cat_init\u201d reason should remain a fairly fixed one.<\/p>\r\n<p>What shouldn\u2019t happen is for Firefox Desktop-sent \u201cat_init\u201d-reason \u201cdeletion-request\u201d pings to spike like this on January 5:<\/p>\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-6168\" src=\"https:\/\/chuttenblog.files.wordpress.com\/2023\/04\/image.png\" alt=\"time-series plot of ping volumes from December 2022 until mid-January 2023 showing abnormal abrupt increases in volume starting on January 5.\" \/><\/figure>\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n<p>What we do when we notice things like this is <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1809900\">file a bug<\/a>. As the one responsible for Glean\u2019s integration in Firefox Desktop, and as someone with a <a href=\"https:\/\/chuttenblog.wordpress.com\/2017\/02\/23\/data-science-is-hard-anomalies-and-what-to-do-about-them\/\">long history of looking into anomalies<\/a>, I took a look. At this initial point I was pretty sure it\u2019d be a single actor (a single user, a single company, a single internet cafe) doing something odd\u2026 but alas, the evidence was inconclusive:<\/p>\r\n<p>Evidence consistent with a single actor being responsible for it all:<\/p>\r\n<ul>\r\n<li>All the pings were coming from the same internet provider. Korea Telecom is responsible for a bare majority of Firefox Desktop data delivery from Korea, but the spikes were entirely from that ISP.<\/li>\r\n\r\n\r\n\r\n<li>The Mozilla Community in Korea could offer no explanation of any wide-spread computer or software event that matched the timeline.<\/li>\r\n\r\n\r\n\r\n<li>\u201cat_init\u201d-reason \u201cdeletion-request\u201d pings could be a result of automation changing the files on disk to read \u201cdata upload: off\u201d between runs of Firefox Desktop.<\/li>\r\n<\/ul>\r\n<p>Evidence inconsistent with a single actor being responsible for it all:<\/p>\r\n<ul>\r\n<li>The data came from a mix of Firefox Desktop versions: versions 101.0.1, 104.0, and 108.0.2.<\/li>\r\n\r\n\r\n\r\n<li>The data came from a range of different regions, more or less following the population density of Korea itself.<\/li>\r\n\r\n\r\n\r\n<li>\u201cat_init\u201d-reason \u201cdeletion-request\u201d pings could instead be the result of users changing the setting to \u201cdata upload: off\u201d early enough during Firefox Desktop startup that Glean hasn\u2019t yet been initialized.<\/li>\r\n<\/ul>\r\n<!-- \/wp:list -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Regardless of why it was happening, it quickly became more important that we learn what we needed to do about it. We spun up an Incident, which is how we organize ourselves when there\u2019s something happening that requires cross-functional collaboration and isn\u2019t getting better on its own. Once there we ascertained that we could respond very quickly and decisively and do<\/p>\r\n<p>Nothing at all.<\/p>\r\n<p>The volume of these pings vastly eclipsed any other \u201cdeletion-request\u201d pings we would otherwise have received, so you\u2019d be forgiven for thinking that it was terribly expensive to receive, store, and process them all. In reality, we batch these requests. And even before this spike, every batch of requests required editing every partition of every table. Adding another list of identifiers to delete equal in size to two times the peak Firefox Desktop population in Korea just doesn\u2019t matter all that much.<\/p>\r\n<p>The pressure was off. Even if it got worse\u2026 which it did:<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph --><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph --><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph --><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:image {\"id\":6169,\"sizeSlug\":\"full\",\"linkDestination\":\"none\"} -->\r\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-6169\" src=\"https:\/\/chuttenblog.files.wordpress.com\/2023\/04\/image-1.png\" alt=\"Time-series plot of &quot;deletion-request&quot; pings isolated to just those from Korea. Spikes begin January 25 and dwarf other reports. A plateau begins March 26 and continues to the right edge of the plot around April 10.\" \/><\/figure>\r\n<!-- \/wp:image -->\r\n<p>&nbsp;<\/p>\r\n<!-- wp:paragraph -->\r\n<p>On March 26, when it reached and maintained a peak of five times the volume of the Firefox Desktop population in Korea, it still wasn\u2019t harming our data platform\u2019s ability to serve business needs or costing us all that much in operational spend. We didn\u2019t need to invest effort into running down the source, so we didn\u2019t.<\/p>\r\n<p>And so I just kept an occasional eye on it until, just as suddenly but not quite as abruptly as it began, on April 12 the ping volumes began to decrease. By April 18, we were back to normal levels.<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph --><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:image {\"id\":6170,\"sizeSlug\":\"large\",\"linkDestination\":\"none\"} -->\r\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" class=\"wp-image-6170\" src=\"https:\/\/chuttenblog.files.wordpress.com\/2023\/04\/image-2.png?w=746\" alt=\"Time-series plot of &quot;deletion-request&quot; pings isolated to just those from Korea. Very similar to the previous plot, but continues until April 18. Spikes begin January 25 and dwarf other reports. A plateau begins March 26 and stays up there until April 12 when falls away to nothing over the course of five days or so.\" \/><\/figure>\r\n<!-- \/wp:image -->\r\n<p>&nbsp;<\/p>\r\n<!-- wp:paragraph -->\r\n<p>We had successfully ignored it until it went away.<\/p>\r\n<p>So what happened to Korean Firefox Desktop users from Jan 5 to April 12, 2023? We never figured it out. If you know about something happening across those dates in Korea: please <a href=\"https:\/\/chat.mozilla.org\/#\/room\/#telemetry:mozilla.org\">get in touch<\/a>. As little as it needed solving for the sake of business needs, it still needs solving for the sake of my curiosity.<\/p>\r\n<p>:chutten<\/p>\r\n<p>(( This is a syndicated copy of <a href=\"https:\/\/chuttenblog.wordpress.com\/2023\/04\/27\/never-look-at-the-data-why-did-we-start-getting-so-many-pings-from-korea\/\">the original post<\/a>. ))<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph --><!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph --><!-- \/wp:paragraph -->","protected":false},"excerpt":{"rendered":"<p>Something happened on January 5, 2023. All of a sudden we abruptly started receiving a number of pings from Firefox Desktop clients in Korea equal to two times the size &hellip; <a class=\"go\" href=\"https:\/\/blog.mozilla.org\/data\/2023\/04\/27\/never-look-at-the-data-why-did-we-start-getting-so-many-pings-from-korea\/\">Read more<\/a><\/p>\n","protected":false},"author":1437,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[315988,323282],"tags":[525,30],"coauthors":[311808],"_links":{"self":[{"href":"https:\/\/blog.mozilla.org\/data\/wp-json\/wp\/v2\/posts\/428"}],"collection":[{"href":"https:\/\/blog.mozilla.org\/data\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.mozilla.org\/data\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/data\/wp-json\/wp\/v2\/users\/1437"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/data\/wp-json\/wp\/v2\/comments?post=428"}],"version-history":[{"count":0,"href":"https:\/\/blog.mozilla.org\/data\/wp-json\/wp\/v2\/posts\/428\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.mozilla.org\/data\/wp-json\/wp\/v2\/media?parent=428"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mozilla.org\/data\/wp-json\/wp\/v2\/categories?post=428"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mozilla.org\/data\/wp-json\/wp\/v2\/tags?post=428"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blog.mozilla.org\/data\/wp-json\/wp\/v2\/coauthors?post=428"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}