@appland/appmap 3.55.1 → 3.56.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
# [@appland/appmap-v3.56.0](https://github.com/getappmap/appmap-js/compare/@appland/appmap-v3.55.1...@appland/appmap-v3.56.0) (2022-12-21)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* Disable file watching on EMFILE ([6eff67c](https://github.com/getappmap/appmap-js/commit/6eff67c485f4d38c0cab703313ce5338d949c635))
|
|
7
|
+
* Don't crash on 'EMFILE: too many open files' ([8153499](https://github.com/getappmap/appmap-js/commit/81534996b400196899deaa402ac0bba68b86b9a2))
|
|
8
|
+
* Examine errors based on error code instead of error message ([f2c15e8](https://github.com/getappmap/appmap-js/commit/f2c15e8e0b2dfce270fc3d92c2bd64fa775947d7))
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* Send index:watcher_error:emfile telemetry event ([f0a3f5d](https://github.com/getappmap/appmap-js/commit/f0a3f5d67a1bb3032a497575539310eb29b5a81e))
|
|
14
|
+
|
|
1
15
|
# [@appland/appmap-v3.55.1](https://github.com/getappmap/appmap-js/compare/@appland/appmap-v3.55.0...@appland/appmap-v3.55.1) (2022-12-16)
|
|
2
16
|
|
|
3
17
|
|
|
@@ -40,6 +40,15 @@ class FingerprintWatchCommand {
|
|
|
40
40
|
this.pidfilePath = undefined;
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
+
async disableFileWatching() {
|
|
44
|
+
var _a;
|
|
45
|
+
if (this.watcher) {
|
|
46
|
+
console.warn('Will disable file watching. File polling will stay enabled.');
|
|
47
|
+
await ((_a = this.watcher) === null || _a === void 0 ? void 0 : _a.close());
|
|
48
|
+
this.watcher = undefined;
|
|
49
|
+
console.warn('File watching disabled.');
|
|
50
|
+
}
|
|
51
|
+
}
|
|
43
52
|
getFilenameFromErrorMessage(errorMessage) {
|
|
44
53
|
// The errorMessage must contain the filename within single quotes
|
|
45
54
|
// and looks like this:
|
|
@@ -48,14 +57,14 @@ class FingerprintWatchCommand {
|
|
|
48
57
|
let quoteEndIndex = errorMessage.indexOf(`'`, quoteStartIndex + 1);
|
|
49
58
|
return errorMessage.substring(quoteStartIndex + 1, quoteEndIndex);
|
|
50
59
|
}
|
|
60
|
+
isError(error, code) {
|
|
61
|
+
const err = error;
|
|
62
|
+
return err.code === code;
|
|
63
|
+
}
|
|
51
64
|
async watcherErrorFunction(error) {
|
|
52
|
-
|
|
53
|
-
if (this.watcher && error.message.includes("ENOSPC: System limit for number of file watchers reached")) {
|
|
65
|
+
if (this.isError(error, 'ENOSPC')) {
|
|
54
66
|
console.warn(error.stack);
|
|
55
|
-
|
|
56
|
-
await ((_a = this.watcher) === null || _a === void 0 ? void 0 : _a.close());
|
|
57
|
-
this.watcher = undefined;
|
|
58
|
-
console.warn("File watching disabled.");
|
|
67
|
+
await this.disableFileWatching();
|
|
59
68
|
telemetry_1.default.sendEvent({
|
|
60
69
|
name: `index:watcher_error:enospc`,
|
|
61
70
|
properties: {
|
|
@@ -64,7 +73,20 @@ class FingerprintWatchCommand {
|
|
|
64
73
|
},
|
|
65
74
|
});
|
|
66
75
|
}
|
|
67
|
-
else if (
|
|
76
|
+
else if (this.isError(error, 'EMFILE')) {
|
|
77
|
+
// Don't crash if too many files are open. When the files close
|
|
78
|
+
// the indexer will pick them up.
|
|
79
|
+
console.warn(error.stack);
|
|
80
|
+
await this.disableFileWatching();
|
|
81
|
+
telemetry_1.default.sendEvent({
|
|
82
|
+
name: `index:watcher_error:emfile`,
|
|
83
|
+
properties: {
|
|
84
|
+
errorMessage: error.message,
|
|
85
|
+
errorStack: error.stack,
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
else if (this.isError(error, 'UNKNOWN') && error.message.includes('lstat')) {
|
|
68
90
|
console.warn(error.stack);
|
|
69
91
|
telemetry_1.default.sendEvent({
|
|
70
92
|
name: `index:watcher_error:unknown`,
|
|
@@ -75,14 +97,13 @@ class FingerprintWatchCommand {
|
|
|
75
97
|
});
|
|
76
98
|
const filename = this.getFilenameFromErrorMessage(error.message);
|
|
77
99
|
this.unreadableFiles.add(filename);
|
|
78
|
-
console.warn(
|
|
100
|
+
console.warn('Will not read this file again.');
|
|
79
101
|
}
|
|
80
102
|
else {
|
|
81
103
|
// let it crash if it's some other error, to learn what the error is
|
|
82
104
|
throw error;
|
|
83
105
|
}
|
|
84
106
|
}
|
|
85
|
-
;
|
|
86
107
|
// Custom ignore function needed to skip unreadableFiles because
|
|
87
108
|
// attempting to read them can block reading all files. It also
|
|
88
109
|
// cuts down the watch tree to just what we need.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fingerprintWatchCommand.js","sourceRoot":"","sources":["../../src/fingerprint/fingerprintWatchCommand.ts"],"names":[],"mappings":";;;;;AACA,uCAA4C;AAC5C,uCAAsD;AACtD,+BAAqC;AACrC,6EAAqD;AACrD,6EAAqD;AACrD,wDAAqD;AACrD,6DAAqC;AACrC,oCAAmC;AAEnC,0EAAkD;AAClD,wDAAgC;AAChC,gDAAwB;AAExB,MAAqB,uBAAuB;IAgB1C,YAAoB,SAAiB;QAAjB,cAAS,GAAT,SAAS,CAAQ;QAX7B,kBAAa,GAAG,CAAC,CAAC;QACnB,oBAAe,GAAG,IAAI,GAAG,EAAE,CAAC;QAWjC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,IAAA,WAAI,EAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACzF,IAAI,CAAC,OAAO,GAAG,IAAI,0BAAgB,EAAE,CAAC;QAEtC,IAAI,yBAAe,CAAC,CAAC,MAAM,EAAE,EAAE;YAC7B,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAuB,CAAC;YACnF,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChE,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,MAAM,CAAC;QACrC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAjBD,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,IAAY,YAAY,CAAC,KAAK;QAC5B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;IAC7B,CAAC;IAaD,aAAa;QACX,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YAC5C,IAAA,qBAAU,EAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC7B,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;SAC9B;IACH,CAAC;IAED,2BAA2B,CAAC,YAAoB;QAC9C,kEAAkE;QAClE,uBAAuB;QACvB,6EAA6E;QAC7E,IAAI,eAAe,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChD,IAAI,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,eAAe,GAAG,CAAC,CAAC,CAAC;QACnE,OAAO,YAAY,CAAC,SAAS,CAAC,eAAe,GAAG,CAAC,EAAE,aAAa,CAAC,CAAC;IACpE,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"fingerprintWatchCommand.js","sourceRoot":"","sources":["../../src/fingerprint/fingerprintWatchCommand.ts"],"names":[],"mappings":"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"}
|