My Hardest Bug Ever
#testing #bug
Сьогодні пропоную до вашою уваги майже детективну історію. Історію про те, як розробник гри Crash Bandicoot намагався "упіймати" баг, що стирав усі сейви з гри при завантаженні. Девелопер витратив майже 6 тижнів на дебаг. Але бага все ще з'являлася - причому досить рандомно.
А в результаті виявилося - що проблема дещо в іншому ...
#testing #bug
Сьогодні пропоную до вашою уваги майже детективну історію. Історію про те, як розробник гри Crash Bandicoot намагався "упіймати" баг, що стирав усі сейви з гри при завантаженні. Девелопер витратив майже 6 тижнів на дебаг. Але бага все ще з'являлася - причому досить рандомно.
А в результаті виявилося - що проблема дещо в іншому ...
Game Developer
My Hardest Bug Ever
This is the story of the hardest thing I've ever debugged, from Crash Bandicoot 1.
❤24👍5
The curious case of the missing period
#engineering #bug
В цю пʼятницю пропоную до вашої уваги історію про те, які проблеми може спричинити відсутність однієї коми в листі (та при чому тут SMTP протокол).
Тим, хто тестує різного роду розсилки - це must-read!
#engineering #bug
В цю пʼятницю пропоную до вашої уваги історію про те, які проблеми може спричинити відсутність однієї коми в листі (та при чому тут SMTP протокол).
Тим, хто тестує різного роду розсилки - це must-read!
Substack
The curious case of the missing period
When Simple Mail Transfer Protocol is not simple
👍15
🥳 Ювілей каналу та зламані індекси
#anniversary #databases #bug
Вчора каналу Test Engineering Notes виповнилося 3 роки! Стартуючи канал, я й не думав, що буду писати так довго 😄. А ще - я навіть не сподівався, що канал виросте аж до 3500+ підписників! 🎉
Дякую вам усім за те, що продовжуєте читати! А я буду продовжувати ділитись з вами технічними та складними штуками зі світу тестування й інженерії.
То ж, не буде гаяти час - перейдемо до справи!
💼 Справа про зламані індекси в базі
Сьогодні я хочу поділитися з вами цікавим матеріалом - "When Postgres Indexing Went Wrong”. Ця стаття розповідає, як оптимізація перфомансу може піти не так, як планувалося. (Як часто й буває).
Була в одній компанії Postgres база даних, величенька за розмірами (десь мільярди рядків). Щоб зробити запити більш швидкими, розробники створювали індекси. Але просто індекси, а в паралелі - за допомогою
Але трохи згодом, почалися проблеми зі швидкістю запитів в базу. Швидкість яка поступово росла. Перфоманс бази бідкався, розробники розводили руками.
🔍 Що ж сталося?
- паралельна індексація проходить в два етапи: спочатку створюється індекс на основі снапшоту стану бази, а потім Postgres обробляє всі зміни, які пропустив.
- паралельна індексація - асинхронна та …. може ТИХО ВПАСТИ й залишити по собі зламаний індекс!
- у випадку компанії проблема була гіршою - бо дані були розділені між багатьма розділами (partitions)
❗️Як цього уникнути?
- користуйтеся флагом
- моніторьте індекси та перевіряйте їх вручну (за допомогою
Памʼятаймо: чим більше ми знаємо про системи та як вони можуть впасти - тим краще ми зможемо запобігти помилкам.
#anniversary #databases #bug
Вчора каналу Test Engineering Notes виповнилося 3 роки! Стартуючи канал, я й не думав, що буду писати так довго 😄. А ще - я навіть не сподівався, що канал виросте аж до 3500+ підписників! 🎉
Дякую вам усім за те, що продовжуєте читати! А я буду продовжувати ділитись з вами технічними та складними штуками зі світу тестування й інженерії.
То ж, не буде гаяти час - перейдемо до справи!
💼 Справа про зламані індекси в базі
Сьогодні я хочу поділитися з вами цікавим матеріалом - "When Postgres Indexing Went Wrong”. Ця стаття розповідає, як оптимізація перфомансу може піти не так, як планувалося. (Як часто й буває).
Була в одній компанії Postgres база даних, величенька за розмірами (десь мільярди рядків). Щоб зробити запити більш швидкими, розробники створювали індекси. Але просто індекси, а в паралелі - за допомогою
CREATE INDEX CONCURRENTLY. Перфоманс запитів покращився, можна святкувати!!!Але трохи згодом, почалися проблеми зі швидкістю запитів в базу. Швидкість яка поступово росла. Перфоманс бази бідкався, розробники розводили руками.
🔍 Що ж сталося?
- паралельна індексація проходить в два етапи: спочатку створюється індекс на основі снапшоту стану бази, а потім Postgres обробляє всі зміни, які пропустив.
- паралельна індексація - асинхронна та …. може ТИХО ВПАСТИ й залишити по собі зламаний індекс!
- у випадку компанії проблема була гіршою - бо дані були розділені між багатьма розділами (partitions)
❗️Як цього уникнути?
- користуйтеся флагом
CONCURRENTLY, коли створюєте індекси в продакшені- моніторьте індекси та перевіряйте їх вручну (за допомогою
EXPLAIN ANALYZE)Памʼятаймо: чим більше ми знаємо про системи та як вони можуть впасти - тим краще ми зможемо запобігти помилкам.
Bemi AI Blog
When Postgres Indexing Went Wrong
It’s important to understand basics of indexing and best practices around them for preventing system downtime.
👍27🔥12❤4🌚2
The most mysterious bug I solved at work
#bug
Пропоную до вашої уваги історію про вельми цікавий баг. Історію в своєму блозі розповів Cadence Ember.
Про систему
Одного разу Cadence працював кимось між розробником, тестувальником та сапортом. Продукт, над яким він працював був типу Patient Management Software. В цьому софті лікар міг створити електронне направлення до іншого лікаря. Частину даних про паціента отримували зі сторонніх систем - то ж лікарю треба було тільки заповнити декілька полів у формі, згенерувати у форматах HL7, XML чи PDF та відправити.
Про баг
Раз на два - чотири тижні, система кидала помилку на етапі відправки електронного відправлення:
Зазвичай, фіксити таку помилку можна було SQL скриптом, що видаляв "\u0002" із бази даних. Але Cadence вирішив знайти першопричину проблеми.
У пошуках відповідей
Що значить символ 0х2? Як ви знаєте, кожна літера тексту представлена числом у компʼютері. Числа нижче 31 використовуються для невидимих "керуючих символів". Керуючі символи були важливі в часи телетайпів - коли символи передавались одним потоком й треба було розрізняти розмітку тексту. Символ 0х2 - це початок тексту, а 0х3 - кінець тексту.
Провівши свої дослідження ще більше, Cadence зрозумів, що символ 0х2 чомусь виникає в кінці першого рядка тексту:
Тобто дефіс чомусь перетворюється на символ 0х2!
В чому була проблема
Виявляється, браузери та програми працюють з PDF текстами по різному. Автор спробував працювати з PDF з текстом з дефісами в Google Chrome, Mozilla Firefox, Microsoft Edge та Acrobat Reader.
Й саме браузер Edge перетворював дефіс на символ 0х2 ... коли скопіювати текст з PDF файлу відкритого в браузері в систему створення лікарських направлень.
Як пофіксили? Помилку виправили на стороні продукту самого розробника - шляхом автоматичної заміни символу 0х2 на дефіс.
#bug
Пропоную до вашої уваги історію про вельми цікавий баг. Історію в своєму блозі розповів Cadence Ember.
Про систему
Одного разу Cadence працював кимось між розробником, тестувальником та сапортом. Продукт, над яким він працював був типу Patient Management Software. В цьому софті лікар міг створити електронне направлення до іншого лікаря. Частину даних про паціента отримували зі сторонніх систем - то ж лікарю треба було тільки заповнити декілька полів у формі, згенерувати у форматах HL7, XML чи PDF та відправити.
Про баг
Раз на два - чотири тижні, система кидала помилку на етапі відправки електронного відправлення:
Illegal Character entity: expansion character (code 0x2) not a valid XML characterЗазвичай, фіксити таку помилку можна було SQL скриптом, що видаляв "\u0002" із бази даних. Але Cadence вирішив знайти першопричину проблеми.
У пошуках відповідей
Що значить символ 0х2? Як ви знаєте, кожна літера тексту представлена числом у компʼютері. Числа нижче 31 використовуються для невидимих "керуючих символів". Керуючі символи були важливі в часи телетайпів - коли символи передавались одним потоком й треба було розрізняти розмітку тексту. Символ 0х2 - це початок тексту, а 0х3 - кінець тексту.
Провівши свої дослідження ще більше, Cadence зрозумів, що символ 0х2 чомусь виникає в кінці першого рядка тексту:
development. Physically, his well-
being is healthy, so likely needs
Тобто дефіс чомусь перетворюється на символ 0х2!
В чому була проблема
Виявляється, браузери та програми працюють з PDF текстами по різному. Автор спробував працювати з PDF з текстом з дефісами в Google Chrome, Mozilla Firefox, Microsoft Edge та Acrobat Reader.
Й саме браузер Edge перетворював дефіс на символ 0х2 ... коли скопіювати текст з PDF файлу відкритого в браузері в систему створення лікарських направлень.
Як пофіксили? Помилку виправили на стороні продукту самого розробника - шляхом автоматичної заміни символу 0х2 на дефіс.
👍23🤯5🔥1