1 पॉइंट द्वारा GN⁺ 2023-12-01 | 1 टिप्पणियां | WhatsApp पर शेयर करें

अजीब bug की खोज और समाधान की प्रक्रिया

  • आंतरिक tools टीम की on-call ड्यूटी के दौरान, Gusto के आंतरिक software का इस्तेमाल करने वाले users ने Chrome browser crash की समस्या का सामना किया.
  • इस समस्या ने customer service में कई तरह की बाधाएँ पैदा कीं.
  • समस्या सुलझाने के लिए अनुभवी सहकर्मियों, product infrastructure टीम और IT टीम की मदद ली गई.

पहला सुराग

  • प्रभावित users के बीच कोई समानता खोजने की कोशिश की गई.
  • Gusto के सभी कर्मचारी प्रभावित नहीं थे, और customer-facing software में कोई समस्या नहीं थी.
  • दूसरे आंतरिक software web pages सामान्य रूप से काम कर रहे थे.
  • crash अनियमित रूप से हो रहा था, और Safari या Firefox में यह समस्या नहीं आ रही थी.

दूसरा सुराग

  • यह परिकल्पना बनाई गई कि शायद Chrome version ही समस्या का कारण हो सकता है.
  • कुछ users ने जब Chrome version update किया तो लगा कि समस्या हल हो गई है, लेकिन यह पूरी तरह ठीक नहीं हुई.
  • यह भी अंदाज़ा लगाया गया कि Chrome extension समस्या का कारण हो सकता है, लेकिन extensions के बिना भी समस्या दोबारा सामने आई.

bug को reproduce करने में कठिनाई

  • infrastructure टीम ने सभी engineers से समस्या को reproduce करने का अनुरोध किया.
  • Turkey के दो engineers को छोड़कर engineering टीम में किसी ने भी crash report नहीं की.
  • security कारणों से Chrome crash reporting feature बंद था, जिससे समस्या सुलझाना और कठिन हो गया.

किस्मत का मोड़

  • Denver के एक engineer ने बताया कि Grammarly desktop app डाउनलोड करने के बाद यह समस्या शुरू हुई.
  • यह पता चला कि Grammarly app हटाकर कंप्यूटर restart करने पर समस्या हल हो जाती है.

प्रगति

  • debugging संभव होने पर, कारण खोजने के लिए कई कोशिशें की गईं.
  • मुख्य आंतरिक application ActiveAdmin पर आधारित था, लेकिन React इस्तेमाल करने वाले नए हिस्सों में crash नहीं हो रहा था.
  • common code के हिस्सों की जाँच करते हुए पता चला कि 'My History' dropdown menu ही समस्या की वजह था.

समस्या का समाधान

  • यह पुष्टि हुई कि loader-spinner.gif image file ही समस्या पैदा कर रही थी.
  • उस GIF को किसी दूसरी image से बदलते ही page अब crash नहीं हुआ.
  • Grammarly या Chrome में से किसने समस्या ठीक की, यह स्पष्ट नहीं है, लेकिन अब मूल GIF Chrome को crash नहीं कराता.

निष्कर्ष

  • एक अप्रत्याशित animated GIF ही debugging का जवाब निकला.
  • जिज्ञासा और सहयोग के ज़रिए समस्या का समाधान हुआ.
  • Gusto ऐसे सहयोगी और जिज्ञासु लोगों के साथ काम करने का अवसर देता है.

GN⁺ की राय

इस लेख की सबसे महत्वपूर्ण बात यह है कि इसमें एक अप्रत्याशित कारण से पैदा हुए bug को खोजने और हल करने की प्रक्रिया का विस्तार से वर्णन किया गया है. यह लेख software engineering की जटिलता और अप्रत्याशितता को दिखाता है, और इस बात पर ज़ोर देता है कि teamwork और लगातार समस्या-सुलझाने की क्षमता कितनी महत्वपूर्ण है. यह इस बात का दिलचस्प उदाहरण देता है कि engineering टीमें मिलकर कठिन समस्याओं को कैसे सुलझाती हैं, और engineering में रुचि रखने वालों के लिए यह एक बेहद आकर्षक कहानी हो सकती है.

1 टिप्पणियां

 
GN⁺ 2023-12-01
Hacker News की राय
  • पढ़ते हुए मुझे लगा कि यह शायद Grammarly से जुड़ी समस्या होगी; पहले भी एक मिलता-जुलता bug देखा था, जो reproduce नहीं हो रहा था लेकिन किसी खास department के अंदर कई लोगों को प्रभावित कर रहा था
    आखिर में common factor Grammarly extension का installed होना निकला, और यह production site पर नहीं बल्कि सिर्फ staging preview URL पर हो रहा था
    वजह Grammarly extension का गलत regular expression था, और domain name करीब 100 characters से ज्यादा होते ही page hang हो जाता था
    अगर यह मामला सच में desktop app की वजह से हुआ है, तो यह और भी डरावना लगता है

    • अंत “हम Grammarly या Chrome के internals नहीं देख सकते, इसलिए नहीं जानते कि GIF decoding/rendering crash क्यों करा रही है” पर खत्म हुआ, यह निराशाजनक था
      कई समस्याएं किसी खास combination तक narrow down हो जाती हैं, लेकिन अगर असल में क्यों हो रहा है यह पता न चले, तो संतोष नहीं मिलता
    • आज भी मैंने एक regular expression debug किया, जिसमें user form में गलत value डाल दे तो backend को denial-of-service state में डाल सकता था
      इसलिए अब मैं regex engine के बारे में पढ़ रहा हूं: https://swtch.com/%7Ersc/regexp/regexp1.html
    • करीब 5 साल पहले web-based video surveillance software में ऐसा ही कुछ अनुभव हुआ था
      Windows 10 के company-wide upgrade के दौरान एक manager का पुराना laptop बदला गया; software और network requirements की जांच, user profile और documents backup जैसे processes अच्छे से तय थे
      equipment assessment sheet में 10 साल पुराना ThinkPad, 4GB RAM, और power cable निकालते ही बंद हो जाता है—ऐसा note था; उसे reference के तौर पर इस्तेमाल करते रहने का धैर्य सच में काबिले-तारीफ लगा
      नया laptop deploy होने के बाद लगभग सब सामान्य था, बस Grammarly license transfer नहीं हो रहा था, इसलिए request डाली गई; एक हफ्ते बाद license key apply हो गई और Grammarly भी ठीक से काम करता दिखा
      लेकिन उसी दिन बाद में सूचना आई कि security camera webpage crash हो रहा है; helpdesk ने reboot, cache clear, browser reinstall, profile recreate तक कर लिया, पर हल नहीं निकला, तो मामला मेरे पास आया
      network, firewall logs, दूसरे PC, on-site/external access सब जांचा, लेकिन मेरी तरफ सब ठीक था और किसी और को भी समस्या नहीं थी
      जब पूछा “हाल में PC या office में कुछ बदला है क्या?”, तो उन्होंने मजाक में कहा, “आज Grammarly install किया है, कहीं वही तो नहीं?”; ideas खत्म हो चुके थे, तो सच में uninstall करके देखा और वह चल पड़ा
      Grammarly फिर से on करके link पर click किया तो पक्का fail हुआ
      वह camera software बहुत पुराना था, custom homepage link बहुत लंबे PHP-generated URL जैसा था, और site पर Grammarly इस्तेमाल करने वाला वही अकेला व्यक्ति था, इसलिए यह problem सिर्फ एक बार दिखी
    • अगर website bug आसानी से solve न हो, तो पहले step के रूप में सभी extensions disable करने चाहिए
      developers अक्सर यह संभावना भूल जाते हैं कि extension वजह हो सकता है, लेकिन extensions web page के साथ हर तरह की चीजें कर सकते हैं
  • एक university professor ने कहा कि paper लिखते समय underline बनी नहीं रह रही है, तो मैंने इसे साधारण user mistake समझा और लगा कि 5 मिनट में मदद कर दूंगा
    लेकिन 3 घंटे से ज्यादा बाद पता चला कि एक खास video card driver version और एक खास printer driver version का combination सिर्फ underline output को रोक रहा था

    • फिर भी यह उन Xerox bug से बेहतर है जो scanned document के numbers बदल देता था
      https://www.zdnet.com/article/xerox-scanners-alter-numbers-i...
    • उत्सुकता है कि इतना अजीब combination आपने करीब 3 घंटे में कैसे ढूंढ लिया
    • समझ नहीं आता कि video card output को कैसे प्रभावित कर सकता है
  • crash reporting बंद होने के बावजूद user profile directory में कहीं .dmp file बन गई होने की संभावना है
    उस file को https://crbug.com/new bug पर manually upload कर दें, तो Chrome developer debug कर सकता है
    अगर crash reporting बंद करने जैसी वजहों से dump share नहीं कर सकते, तो Chromium में minidump_stackwalk build करके symbol-less stack trace बना सकते हैं और bug पर upload कर सकते हैं
    तब Chrome developer symbols attach कर सकता है
    details यहां हैं: https://www.chromium.org/developers/decoding-crash-dumps/

  • इस bug को बनाने वाला technology combination दिलचस्प है। 2023 का web सच में कुछ ऐसा ही है
    जानना चाहता हूं कि Chromium bug fix हुआ या नहीं, लेकिन इस list में navigate करना आसान नहीं है: https://bugs.chromium.org/p/chromium/issues/list?can=1&q=gif...
    अच्छा लगा कि Gusto ने यह article शायद इसलिए डाला कि “गलती हमारी नहीं थी” दिखाते हुए Grammarly पर हल्का-सा dig ले सके

    • यह कोई externally visible problem नहीं थी, इसलिए जिम्मेदारी तय करने से ज्यादा, बस एक मजेदार कहानी और free publicity लगती है, इसी वजह से डाली होगी
    • वह GIF जरूर public करनी चाहिए
    • शायद यह issue रहा होगा: https://bugs.chromium.org/p/chromium/issues/detail?id=129770...
  • Linux में बूट करने के बाद कभी-कभी आवाज़ नहीं आती थी, बाद में पता चला कि यह Windows dual boot सेटिंग से जुड़ा था
    Windows से restart करने पर वह Realtek audio device को पूरी तरह shutdown नहीं करता था, बस sleep state में छोड़ देता था, और Linux उस device को शुरू नहीं कर पाता था
    समाधान बस इतना था कि Windows में हमेशा shutdown करके फिर power button दबाकर चालू किया जाए, और समस्या अभी भी बनी हुई है: https://askubuntu.com/questions/1032543/no-sound-in-ubuntu-1...

    • इसके लगभग उलट मामला भी देखा था
      Windows और Linux dual boot करने वाले एक व्यक्ति के यहां Wi-Fi तभी काम करता था जब वह Windows में boot करके फिर Linux में restart करता था
      Linux installation में Wi-Fi card के लिए firmware package नहीं था, इसलिए Windows से reboot करने पर device पहले से तैयार हालत में होता था, लेकिन सीधे Linux में cold boot करने पर नहीं चलता था
    • उलटी दिशा में भी कुछ ऐसा ही हुआ था. Linux से reboot करने पर Windows 10 boot के दौरान blue screen दे देता था
    • सोचता हूं कि क्या fast user switching बंद करने से भी यह हल नहीं हुआ होगा
    • कुछ साल पहले Bluetooth devices में भी ऐसा ही behavior देखा था
  • मैं मानता हूं कि अंत पूरी तरह anticlimactic है
    बात ऐसी है कि Chrome source code और Grammarly source code दोनों तक access नहीं है, इसलिए सिर्फ अनुमान लगा सकते हैं; सोचता हूं क्या यह “open source” movement का नतीजा है
    source code के बिना पूरी तरह रास्ता भटक जाने और और गहराई में जाने से इनकार करने वाले developers पैदा हो गए हैं; और जो कंपनियां सच बताना नहीं चाहतीं, उनके लिए यह रवैया बहुत सुविधाजनक होगा
    पहले source के बिना भी programs को disassemble करके समझने और patch करने वाले बहुत लोग थे, और उनमें से काफी professional developers भी नहीं थे
    बस software को अपनी जरूरत के मुताबिक चलाने की motivation थी, और इसी दौरान जितना जरूरी था उतना सीखते गए
    यह लेख पूरे stack की पागल कर देने वाली complexity को भी छूता है. framework के ऊपर framework की कतार देखकर लगता है कि इसका बड़ा हिस्सा हमने खुद बुलाया है
    कहा गया कि loader-spinner.gif, यानी menu options load होते समय दिखने वाला placeholder हटाने पर page crash होना बंद हो गया; लेकिन यह भी सवाल है कि menu options load होने में इतना समय लगता ही क्यों है कि animation की जरूरत पड़े

    • हर developer से binary patch कर पाने की उम्मीद करना, विनम्रता से कहें तो, अवास्तविक है
      software engineering की दुनिया बेहद विशाल है, और stack के हर हिस्से को जानना बहुत पहले से ही लगभग असंभव हो चुका है
      ऊपर से software engineering सीखने की यात्रा है, और हर व्यक्ति उस यात्रा में अलग-अलग जगह पर है
    • open source होने पर भी असल में code पढ़ने की इच्छा कुल मिलाकर कम दिखती है
      disassembler खोलना या debugger attach करना तो दूर की बात है, लगता है ऐसी skills अब ठीक से सिखाई भी नहीं जातीं
    • शायद menu options लाने के लिए network request किया जाता होगा
      आमतौर पर वह लगभग तुरंत पूरा हो जाए, फिर भी देर लगने की स्थिति के लिए loading spinner रखना समझ में आता है
  • सबसे अजीब मामला वह था जब एक user ने कहा कि किसी खास form में डाला गया text save करने पर बदल जाता है
    पहले लगा कि वही form कोई और साथ-साथ edit कर रहा है, लेकिन logs के हिसाब से ऐसा नहीं था, और मेरे computer पर सही text दिख रहा था
    फिर screenshot में देखा कि कुछ menu text भी अजीब थे, और वजह यह निकली कि Chrome का “Translate this page” option चालू था
    app के अंदर सही तरीके से language बदलने का तरीका बताने पर समस्या गायब हो गई

    • Chrome द्वारा page बिगाड़ने वाला bug मिलने के बाद, मैंने single-page web app के हर page में संबंधित setting जोड़ दी
      लगता है अब app या element पर लागू करने के लिए नया आदेश यही है. dynamic बदलाव support न करना पड़े इसलिए शायद यह CSS नहीं है, और देखने में बदसूरत है: https://developer.mozilla.org/en-US/docs/Web/HTML/Global_att...
      कभी-कभी बड़े single-page apps के meta tags देखते हुए, यह पता करने की कोशिश में कि वह tag क्यों चाहिए, नई तरह की दहशत मिल जाती है
    • यह वाकई चिढ़ाने वाला है
      Japanese websites पढ़ते समय मैं अक्सर Google Translate पर निर्भर रहता हूं, और React इस्तेमाल करने वाली हर website टूट जाती है
      क्योंकि React और Google Translate एक-दूसरे से अनजान रहते हुए DOM nodes update करने की कोशिश करते हैं
      बाद में इस समस्या से मुक्त web widget फिर से बना सकता हूं या नहीं, यह देखने के लिए मैंने Google Translate implementation को गंभीरता से देखा भी था
      [1] https://bugs.chromium.org/p/chromium/issues/detail?id=872770
    • सोचता हूं कि क्या उसने English को American में translate किया था या कुछ और
    • यह कहानी DaylyWTF जैसी जगह भेजने लायक मजेदार है
  • यह बहुत जाना-पहचाना issue है
    पहले मैंने Chrome के accessibility tools को dropdown menu में ऐसी समस्या पैदा करते देखा था, और इसे बहुत छोटे HTML से भी reproduce किया जा सकता था
    2 साल पहले जिस खास bug से मेरा सामना हुआ था, वह Chromium-Edge में था, लेकिन symptoms और कारण बहुत मिलते-जुलते थे
    Grammarly लगभग निश्चित रूप से Chrome के accessibility tools के किसी हिस्से पर निर्भर करता होगा
    ऐसे tools Edge, Brave, Chrome जैसे Chromium variants में थोड़े-थोड़े अलग होते हैं

    • अगर यह hypothesis सही है, तो क्या इसका मतलब है कि Grammarly desktop GIF को देखता है, किसी तरह browser accessibility functions call करता है, और Chrome उसे handle नहीं कर पाता इसलिए crash हो जाता है?
  • अगली बार ऐसा हो तो मेरा सुझाव है कि बस दूसरा browser इस्तेमाल करवाएं
    खासकर Firefox में Chrome से bookmarks, passwords वगैरह import करने की capability काफी बेहतर हो गई है
    universe ने अब switch करने का signal भेजा है, और हम signal को ठुकरा नहीं सकते
    वैसे मैं Firefox engineer हूं, लेकिन इस सलाह से उसका कोई लेना-देना नहीं है

    • engineer के नजरिए से Firefox अच्छा solution है
      PM के नजरिए से, onboarding आसान बनाने में 4 महीने लगाए, और अब लोगों से नया browser install करने को कहें?
    • linked article में इसे पहले ही workaround के रूप में साफ लिखा गया है
    • Chrome market के आधे से ज्यादा हिस्से पर काबिज है
      browser-based product का दुनिया के सबसे ज्यादा इस्तेमाल होने वाले browser में ठीक से काम न करना अच्छा signal नहीं है
  • सुरक्षा कारणों से Chrome crash reports को ब्लॉक रखते हुए कर्मचारियों को Grammarly install करने की अनुमति देने वाली corporate security policy मुझे वाकई बहुत पसंद है