Skip to content

ENOSPC results in "Error: No Project" #18996

Description

TypeScript Version: nightly (typescript@2.6.0-dev.20171006)

Code

In VSCode on linux it's very common to run out of file watchers, because vscode's default behavior is to put a watch on every file in the open directory, recursively (microsoft/vscode#7950). To reproduce this on linux, open DefinitelyTyped in both code and code-insiders -- this should consume all available watchers.
Then open a sample typescript project and open any .ts file. Here's the tsserver.log:

Info 0    [12:38:50.26] Binding...
Info 1    [12:38:50.33] request: {"seq":0,"type":"request","command":"configure","arguments":{"hostInfo":"vscode"}}
Info 2    [12:38:50.33] Host information vscode
Info 3    [12:38:50.34] response: {"seq":0,"type":"response","command":"configure","request_seq":0,"success":true}
Perf 4    [12:38:50.34] 0::configure: async elapsed time (in milliseconds) 0.9927
Info 5    [12:38:50.35] request: {"seq":1,"type":"request","command":"compilerOptionsForInferredProjects","arguments":{"options":{"module":"CommonJS","target":"ES6","allowSyntheticDefaultImports":true,"allowNonTsExtensions":true,"allowJs":true,"jsx":"Preserve","checkJs":false}}}
Info 6    [12:38:50.36] Scheduled: *refreshInferredProjects*
Perf 7    [12:38:50.36] 1::compilerOptionsForInferredProjects: elapsed time (in milliseconds) 1.1392
Info 8    [12:38:50.36] response: {"seq":0,"type":"response","command":"compilerOptionsForInferredProjects","request_seq":1,"success":true,"body":true}
Info 9    [12:38:50.37] request: {"seq":2,"type":"request","command":"open","arguments":{"file":"/home/andy/sample/ts/src/a.ts","fileContent":"declare let ab: A | AB;\nab = { a: '', b: ' ' } as AB; // A | AB why?\nab.b // Error b does not exists on type A | AB\n\ndeclare let x: string | number;\nx = 0;\nx;\n\n","scriptKindName":"TS","projectRootPath":"/home/andy/sample/ts"}}
Info 10   [12:38:50.38] Search path: /home/andy/sample/ts/src
Info 11   [12:38:50.39] ConfigFilePresence:: Current Watches: :: File: /home/andy/sample/ts/src/tsconfig.json Currently impacted open files: RootsOfInferredProjects:  OtherOpenFiles: /home/andy/sample/ts/src/a.ts Status: File added to open files impacted by this config file
Info 12   [12:38:50.39] ConfigFilePresence:: Current Watches: :: File: /home/andy/sample/ts/src/jsconfig.json Currently impacted open files: RootsOfInferredProjects:  OtherOpenFiles: /home/andy/sample/ts/src/a.ts Status: File added to open files impacted by this config file
Info 13   [12:38:50.39] ConfigFilePresence:: Current Watches: :: File: /home/andy/sample/ts/tsconfig.json Currently impacted open files: RootsOfInferredProjects:  OtherOpenFiles: /home/andy/sample/ts/src/a.ts Status: File added to open files impacted by this config file
Info 14   [12:38:50.39] For info: /home/andy/sample/ts/src/a.ts :: Config file name: /home/andy/sample/ts/tsconfig.json
Info 15   [12:38:50.54] Opened configuration file /home/andy/sample/ts/tsconfig.json
Info 16   [12:38:50.105] FileWatcher:: Added: PathInfo: /home/andy/sample/ts/tsconfig.json Project: /home/andy/sample/ts/tsconfig.json WatchType: Config file for the program
Info 17   [12:38:50.106] DirectoryWatcher recursive:: Added: PathInfo: /home/andy/sample/ts Project: /home/andy/sample/ts/tsconfig.json WatchType: Wild card directory
Err 18    [12:38:50.116] Exception on executing command {"seq":2,"type":"request","command":"open","arguments":{"file":"/home/andy/sample/ts/src/a.ts","fileContent":"declare let ab: A | AB;\nab = { a: '', b: ' ' } as AB; // A | AB why?\nab.b // Error b does not exists on type A | AB\n\ndeclare let x: string | number;\nx = 0;\nx;\n\n","scriptKindName":"TS","projectRootPath":"/home/andy/sample/ts"}}:
watch /home/andy/sample/ts ENOSPC
Error: watch /home/andy/sample/ts ENOSPC
    at exports._errnoException (util.js:1050:11)
    at FSWatcher.start (fs.js:1410:19)
    at Object.fs.watch (fs.js:1436:11)
    at watchPresentDirectory (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:3637:42)
    at fsWatchDirectory (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:3622:21)
    at Object.watchDirectory (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:3775:28)
    at addDirectoryWatcher (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:80343:21)
    at createWatcherWithLogging (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:80354:23)
    at Object.addDirectoryWatcherWithLogging (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:80348:16)
    at ProjectService.watchDirectory (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:82083:107)
    at ProjectService.watchWildcardDirectory (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:82335:29)
    at /home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:81816:228
    at createWildcardDirectoryWatcher (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:80308:26)
    at /home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:8636:30
    at Map.forEach (native)
    at Object.mutateMap (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:8634:16)
    at Object.updateWatchingWildcardDirectories (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:80301:12)
    at ConfiguredProject.watchWildcards (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:81816:20)
    at ProjectService.createConfiguredProject (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:82801:29)
    at ProjectService.openClientFileWithNormalizedPath (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:83110:44)
    at IOSession.Session.openClientFile (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:84425:46)
    at Session.handlers.ts.createMapFromTemplate._a.(anonymous function) (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:83666:31)
    at /home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:85046:88
    at IOSession.Session.executeWithRequestId (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:85037:28)
    at IOSession.Session.executeCommand (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:85046:33)
    at IOSession.Session.onMessage (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:85066:35)
    at Interface.<anonymous> (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:86201:27)
    at emitOne (events.js:96:13)
    at Interface.emit (events.js:191:7)
    at Interface._onLine (readline.js:241:10)
    at Interface._normalWrite (readline.js:384:12)
    at Socket.ondata (readline.js:101:10)
    at emitOne (events.js:96:13)
    at Socket.emit (events.js:191:7)
    at readableAddChunk (_stream_readable.js:178:18)
    at Socket.Readable.push (_stream_readable.js:136:10)
    at Pipe.onread (net.js:560:20)
Info 19   [12:38:50.117] response: {"seq":0,"type":"response","command":"open","request_seq":2,"success":false,"message":"Error processing request. watch /home/andy/sample/ts ENOSPC\nError: watch /home/andy/sample/ts ENOSPC\n    at exports._errnoException (util.js:1050:11)\n    at FSWatcher.start (fs.js:1410:19)\n    at Object.fs.watch (fs.js:1436:11)\n    at watchPresentDirectory (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:3637:42)\n    at fsWatchDirectory (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:3622:21)\n    at Object.watchDirectory (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:3775:28)\n    at addDirectoryWatcher (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:80343:21)\n    at createWatcherWithLogging (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:80354:23)\n    at Object.addDirectoryWatcherWithLogging (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:80348:16)\n    at ProjectService.watchDirectory (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:82083:107)\n    at ProjectService.watchWildcardDirectory (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:82335:29)\n    at /home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:81816:228\n    at createWildcardDirectoryWatcher (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:80308:26)\n    at /home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:8636:30\n    at Map.forEach (native)\n    at Object.mutateMap (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:8634:16)\n    at Object.updateWatchingWildcardDirectories (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:80301:12)\n    at ConfiguredProject.watchWildcards (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:81816:20)\n    at ProjectService.createConfiguredProject (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:82801:29)\n    at ProjectService.openClientFileWithNormalizedPath (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:83110:44)\n    at IOSession.Session.openClientFile (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:84425:46)\n    at Session.handlers.ts.createMapFromTemplate._a.(anonymous function) (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:83666:31)\n    at /home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:85046:88\n    at IOSession.Session.executeWithRequestId (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:85037:28)\n    at IOSession.Session.executeCommand (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:85046:33)\n    at IOSession.Session.onMessage (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:85066:35)\n    at Interface.<anonymous> (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:86201:27)\n    at emitOne (events.js:96:13)\n    at Interface.emit (events.js:191:7)\n    at Interface._onLine (readline.js:241:10)\n    at Interface._normalWrite (readline.js:384:12)\n    at Socket.ondata (readline.js:101:10)\n    at emitOne (events.js:96:13)\n    at Socket.emit (events.js:191:7)\n    at readableAddChunk (_stream_readable.js:178:18)\n    at Socket.Readable.push (_stream_readable.js:136:10)\n    at Pipe.onread (net.js:560:20)"}
Info 20   [12:38:50.117] request: {"seq":3,"type":"request","command":"geterr","arguments":{"delay":0,"files":["/home/andy/sample/ts/src/a.ts"]}}
Info 21   [12:38:50.118] refreshInferredProjects: updating project structure from ...
Info 22   [12:38:50.118] Open files: 
Info 22   [12:38:50.118] refreshInferredProjects: updated project structure ...
Info 23   [12:38:50.118] Open files: 
Err 23    [12:38:50.118] Exception on executing command delayed processing of request 3:
No Project.
Error: No Project.
    at Object.ThrowNoProject (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:79626:23)
    at ScriptInfo.getDefaultProject (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:80202:46)
    at ProjectService.getDefaultProjectForFile (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:82244:39)
    at /home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:84681:74
    at Object.mapDefined (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:1604:30)
    at IOSession.Session.createCheckList (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:84679:27)
    at IOSession.Session.getDiagnostics (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:84686:38)
    at /home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:83752:82
    at MultistepOperation.executeAction (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:83561:25)
    at MultistepOperation.startNew (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:83526:22)
    at Session.handlers.ts.createMapFromTemplate._a.(anonymous function) (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:83752:42)
    at /home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:85046:88
    at IOSession.Session.executeWithRequestId (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:85037:28)
    at IOSession.Session.executeCommand (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:85046:33)
    at IOSession.Session.onMessage (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:85066:35)
    at Interface.<anonymous> (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:86201:27)
    at emitOne (events.js:96:13)
    at Interface.emit (events.js:191:7)
    at Interface._onLine (readline.js:241:10)
    at Interface._normalWrite (readline.js:384:12)
    at Socket.ondata (readline.js:101:10)
    at emitOne (events.js:96:13)
    at Socket.emit (events.js:191:7)
    at readableAddChunk (_stream_readable.js:178:18)
    at Socket.Readable.push (_stream_readable.js:136:10)
    at Pipe.onread (net.js:560:20)
Info 24   [12:38:50.119] event: {"seq":0,"type":"event","event":"requestCompleted","body":{"request_seq":3}}
Perf 25   [12:38:50.119] 3::geterr: async elapsed time (in milliseconds) 1.9146
Info 26   [12:38:50.286] Running: *refreshInferredProjects*
Info 27   [12:38:50.287] got projects updated in background, updating diagnostics for 

Previously TypeScript was still able to function even without being able to create all watchers -- is there a way we could still do that?

Metadata

Metadata

Assignees

Labels

BugA bug in TypeScriptFixedA PR has been merged for this issueHigh Priority

Type

No type
No fields configured for issues without a type.

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions