Нетривиальная обработка ошибок
TRANSCRIPT
![Page 1: Нетривиальная обработка ошибок](https://reader035.vdocuments.site/reader035/viewer/2022071821/55b63332bb61ebe25d8b45da/html5/thumbnails/1.jpg)
Нетривиальная обработка ошибок
Презентацию подготовилСергей ЯркинТензор, 2015
![Page 2: Нетривиальная обработка ошибок](https://reader035.vdocuments.site/reader035/viewer/2022071821/55b63332bb61ebe25d8b45da/html5/thumbnails/2.jpg)
Генерация ошибки
var err = new Error( "Oh, no way!" );
if( err instanceof Error ) { //}
![Page 3: Нетривиальная обработка ошибок](https://reader035.vdocuments.site/reader035/viewer/2022071821/55b63332bb61ebe25d8b45da/html5/thumbnails/3.jpg)
Структура объекта
err -> {[Error] 'message': "Oh, no way!", 'name' : "Error", 'stack' : "at ..."}
![Page 4: Нетривиальная обработка ошибок](https://reader035.vdocuments.site/reader035/viewer/2022071821/55b63332bb61ebe25d8b45da/html5/thumbnails/4.jpg)
Базовые паттерны
● try/catch
● callback( err, result );
● EventEmitter.emit( 'error', ... );
process.on( 'uncaughtException', func );
+ Domain
![Page 5: Нетривиальная обработка ошибок](https://reader035.vdocuments.site/reader035/viewer/2022071821/55b63332bb61ebe25d8b45da/html5/thumbnails/5.jpg)
Структура вызовов, пример
func01( callback ) func11( callback ) func21( callback ) func22( callback ) func12( callback ) func23( callback ) func31( callback ) func41( callback ) func51( callback ) func24( callback )
![Page 6: Нетривиальная обработка ошибок](https://reader035.vdocuments.site/reader035/viewer/2022071821/55b63332bb61ebe25d8b45da/html5/thumbnails/6.jpg)
Существующие типы ошибок
● Error● RangeError● ReferenceError● SyntaxError● TypeError● URIError
![Page 7: Нетривиальная обработка ошибок](https://reader035.vdocuments.site/reader035/viewer/2022071821/55b63332bb61ebe25d8b45da/html5/thumbnails/7.jpg)
Облако СБИС
![Page 8: Нетривиальная обработка ошибок](https://reader035.vdocuments.site/reader035/viewer/2022071821/55b63332bb61ebe25d8b45da/html5/thumbnails/8.jpg)
Чудо-облако
Управление диспетчерами
Одинаковая конфигурация на всех диспетчерах!
Новая конфигурация
Пул
дис
петч
еров
![Page 9: Нетривиальная обработка ошибок](https://reader035.vdocuments.site/reader035/viewer/2022071821/55b63332bb61ebe25d8b45da/html5/thumbnails/9.jpg)
Управление диспетчерами (2)
...
M
B
DB replica
![Page 10: Нетривиальная обработка ошибок](https://reader035.vdocuments.site/reader035/viewer/2022071821/55b63332bb61ebe25d8b45da/html5/thumbnails/10.jpg)
Архитектура узлаM
aste
r pr
oces
s Web Interface
RPC
API
Poller
Группы процессов Вызов метода в другом модуле
![Page 11: Нетривиальная обработка ошибок](https://reader035.vdocuments.site/reader035/viewer/2022071821/55b63332bb61ebe25d8b45da/html5/thumbnails/11.jpg)
Код ошибки
Object.defineProperty( Error.prototype, 'code', { value: -1, writable: true });
Ничто не предвещает беды...
![Page 12: Нетривиальная обработка ошибок](https://reader035.vdocuments.site/reader035/viewer/2022071821/55b63332bb61ebe25d8b45da/html5/thumbnails/12.jpg)
Код ошибки (2)var ERRORS = { // Core errors 0x00000000: { name: 'UNKNOWN_ERROR', text: "Unknown error" }, // File system errors 0x00000100: { name: 'FS_UNKNOWN', parent: EFSError, text: "Unknown file system error" }, 0x00000101: { name: 'FS_ENOENT' , parent: EFSError, text: "No such file or directory" }, 0x00000103: { name: 'FS_EACCES' , parent: EFSError, text: "Permission denied" }, 0x00000104: { name: 'FS_EMFILE' , parent: EFSError, text: "Too many open files" }, // Network errors 0x00000200: { name: 'NET_UNKNOWN', parent: ENetError, text: "Unknown network error" }, 0x00000201: { name: 'NET_UNREACH', parent: ENetError, text: "Host is unreachable" }, 0x00000202: { name: 'NET_REFUSED', parent: ENetError, text: "Connection refused" }, ...};
Object.defineProperties( Error.prototype, { 'isFsError' : { get: function() { return (this.code & 0xffffff00) == 0x00000100 } }, 'isNetError': { get: function() { return (this.code & 0xffffff00) == 0x00000200 } }, 'isDbError' : { get: function() { return (this.code & 0xffff0000) == 0x00010000 } }, ...});
![Page 13: Нетривиальная обработка ошибок](https://reader035.vdocuments.site/reader035/viewer/2022071821/55b63332bb61ebe25d8b45da/html5/thumbnails/13.jpg)
Свои типы ошибок
global.ECustom = function ECustom( msg, … ) { … };inherits( ECustom, Error );
ECustom.prototype.is = function is( compare_to ) { … };
ECustom.exportError = function exportError( err ) { … };ECustom.importError = function importError( err ) { … };
ECustom
![Page 14: Нетривиальная обработка ошибок](https://reader035.vdocuments.site/reader035/viewer/2022071821/55b63332bb61ebe25d8b45da/html5/thumbnails/14.jpg)
Свои типы ошибок (2)
● EBadFormat● EFSError● ENetError● EDBError● ETimeOut● EEntExists● ENoEnt● EEntBadState● EParseError● EWrongValue
![Page 15: Нетривиальная обработка ошибок](https://reader035.vdocuments.site/reader035/viewer/2022071821/55b63332bb61ebe25d8b45da/html5/thumbnails/15.jpg)
Создание и обработка ошибок
new EDBError( Error.DB_NOT_AUTHENTICATED )new EEntExists( Error.DB_DUPLICATE_KEY )new ENoEnt( "No worker found" )new EWrongValue( "Handler not found" )new ENetError( Error.NET_UNREACH )new ENoEnt( Error.JSRPC_METHOD_NOT_FOUND )
if( (err instanceof ECustom) && err.is("config") ) { … }
if( err.is(EEntBadState) && err.is("cluster is off") ) { … }
new ECustom([ "Config #%d for instance '%s' does not exists!", cfg_ver, inst.ident ])
![Page 16: Нетривиальная обработка ошибок](https://reader035.vdocuments.site/reader035/viewer/2022071821/55b63332bb61ebe25d8b45da/html5/thumbnails/16.jpg)
Вопросы?