@appland/appmap 3.55.1 → 3.57.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,29 @@
|
|
|
1
|
+
# [@appland/appmap-v3.57.0](https://github.com/getappmap/appmap-js/compare/@appland/appmap-v3.56.0...@appland/appmap-v3.57.0) (2022-12-21)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* Don't let indexer crash on ELOOP error ([252eccc](https://github.com/getappmap/appmap-js/commit/252eccca2f53d6caf8b61fa18eeeb35ff744c19c))
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* Implement getToplevelSymbolicLink as an optimization ([3579d71](https://github.com/getappmap/appmap-js/commit/3579d71c153fe6b32a391c9984dadc757ef44278))
|
|
12
|
+
|
|
13
|
+
# [@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)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Bug Fixes
|
|
17
|
+
|
|
18
|
+
* Disable file watching on EMFILE ([6eff67c](https://github.com/getappmap/appmap-js/commit/6eff67c485f4d38c0cab703313ce5338d949c635))
|
|
19
|
+
* Don't crash on 'EMFILE: too many open files' ([8153499](https://github.com/getappmap/appmap-js/commit/81534996b400196899deaa402ac0bba68b86b9a2))
|
|
20
|
+
* Examine errors based on error code instead of error message ([f2c15e8](https://github.com/getappmap/appmap-js/commit/f2c15e8e0b2dfce270fc3d92c2bd64fa775947d7))
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
### Features
|
|
24
|
+
|
|
25
|
+
* Send index:watcher_error:emfile telemetry event ([f0a3f5d](https://github.com/getappmap/appmap-js/commit/f0a3f5d67a1bb3032a497575539310eb29b5a81e))
|
|
26
|
+
|
|
1
27
|
# [@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
28
|
|
|
3
29
|
|
|
@@ -19,6 +19,7 @@ class FingerprintWatchCommand {
|
|
|
19
19
|
this.directory = directory;
|
|
20
20
|
this._numProcessed = 0;
|
|
21
21
|
this.unreadableFiles = new Set();
|
|
22
|
+
this.symlinkLoopFiles = new Set();
|
|
22
23
|
this.pidfilePath = process.env.APPMAP_WRITE_PIDFILE && (0, path_1.join)(this.directory, 'index.pid');
|
|
23
24
|
this.fpQueue = new fingerprintQueue_1.default();
|
|
24
25
|
new eventAggregator_1.default((events) => {
|
|
@@ -40,6 +41,15 @@ class FingerprintWatchCommand {
|
|
|
40
41
|
this.pidfilePath = undefined;
|
|
41
42
|
}
|
|
42
43
|
}
|
|
44
|
+
async disableFileWatching() {
|
|
45
|
+
var _a;
|
|
46
|
+
if (this.watcher) {
|
|
47
|
+
console.warn('Will disable file watching. File polling will stay enabled.');
|
|
48
|
+
await ((_a = this.watcher) === null || _a === void 0 ? void 0 : _a.close());
|
|
49
|
+
this.watcher = undefined;
|
|
50
|
+
console.warn('File watching disabled.');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
43
53
|
getFilenameFromErrorMessage(errorMessage) {
|
|
44
54
|
// The errorMessage must contain the filename within single quotes
|
|
45
55
|
// and looks like this:
|
|
@@ -48,14 +58,41 @@ class FingerprintWatchCommand {
|
|
|
48
58
|
let quoteEndIndex = errorMessage.indexOf(`'`, quoteStartIndex + 1);
|
|
49
59
|
return errorMessage.substring(quoteStartIndex + 1, quoteEndIndex);
|
|
50
60
|
}
|
|
61
|
+
isError(error, code) {
|
|
62
|
+
const err = error;
|
|
63
|
+
return err.code === code;
|
|
64
|
+
}
|
|
65
|
+
dontProcessFileAgain(error, filename, telemetryName, files) {
|
|
66
|
+
console.warn(error.stack);
|
|
67
|
+
telemetry_1.default.sendEvent({
|
|
68
|
+
name: telemetryName,
|
|
69
|
+
properties: {
|
|
70
|
+
errorMessage: error.message,
|
|
71
|
+
errorStack: error.stack,
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
files.add(filename);
|
|
75
|
+
console.warn('Will not read the file ' + filename + ' again.');
|
|
76
|
+
}
|
|
77
|
+
getToplevelSymbolicLink(filename) {
|
|
78
|
+
// given a filename like '/tmp/topdir/dir1/point_up/dir1/point_up/dir1/point_up'
|
|
79
|
+
// lastToken is set to 'point_up' (the actual symlink)
|
|
80
|
+
// directoryPostfix is set to '/dir1/point_up'
|
|
81
|
+
// topLevelSymbolicLink is set to '/tmp/topdir/dir1/point_up'
|
|
82
|
+
const splitTokens = filename.split(path_2.default.sep);
|
|
83
|
+
const lastToken = splitTokens[splitTokens.length - 1];
|
|
84
|
+
const lastIndex = filename.lastIndexOf(lastToken);
|
|
85
|
+
const secondToLastIndex = filename.lastIndexOf(lastToken, lastIndex - 1);
|
|
86
|
+
const directoryPostfixLength = lastIndex - secondToLastIndex;
|
|
87
|
+
const directoryPostfix = filename.substring(filename.length - directoryPostfixLength, filename.length);
|
|
88
|
+
const splitDirectoryPostfix = filename.split(directoryPostfix);
|
|
89
|
+
const toplevelSymbolicLink = splitDirectoryPostfix[0] + directoryPostfix;
|
|
90
|
+
return toplevelSymbolicLink;
|
|
91
|
+
}
|
|
51
92
|
async watcherErrorFunction(error) {
|
|
52
|
-
|
|
53
|
-
if (this.watcher && error.message.includes("ENOSPC: System limit for number of file watchers reached")) {
|
|
93
|
+
if (this.isError(error, 'ENOSPC')) {
|
|
54
94
|
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.");
|
|
95
|
+
await this.disableFileWatching();
|
|
59
96
|
telemetry_1.default.sendEvent({
|
|
60
97
|
name: `index:watcher_error:enospc`,
|
|
61
98
|
properties: {
|
|
@@ -64,25 +101,33 @@ class FingerprintWatchCommand {
|
|
|
64
101
|
},
|
|
65
102
|
});
|
|
66
103
|
}
|
|
67
|
-
else if (
|
|
104
|
+
else if (this.isError(error, 'EMFILE')) {
|
|
105
|
+
// Don't crash if too many files are open. When the files close
|
|
106
|
+
// the indexer will pick them up.
|
|
68
107
|
console.warn(error.stack);
|
|
108
|
+
await this.disableFileWatching();
|
|
69
109
|
telemetry_1.default.sendEvent({
|
|
70
|
-
name: `index:watcher_error:
|
|
110
|
+
name: `index:watcher_error:emfile`,
|
|
71
111
|
properties: {
|
|
72
112
|
errorMessage: error.message,
|
|
73
113
|
errorStack: error.stack,
|
|
74
114
|
},
|
|
75
115
|
});
|
|
116
|
+
}
|
|
117
|
+
else if (this.isError(error, 'UNKNOWN') && error.message.includes('lstat')) {
|
|
118
|
+
const filename = this.getFilenameFromErrorMessage(error.message);
|
|
119
|
+
this.dontProcessFileAgain(error, filename, `index:watcher_error:unknown`, this.unreadableFiles);
|
|
120
|
+
}
|
|
121
|
+
else if (this.isError(error, 'ELOOP')) {
|
|
76
122
|
const filename = this.getFilenameFromErrorMessage(error.message);
|
|
77
|
-
this.
|
|
78
|
-
|
|
123
|
+
const filenameTopLevelSymbolicLink = this.getToplevelSymbolicLink(filename);
|
|
124
|
+
this.dontProcessFileAgain(error, filenameTopLevelSymbolicLink, `index:watcher_error:eloop`, this.symlinkLoopFiles);
|
|
79
125
|
}
|
|
80
126
|
else {
|
|
81
127
|
// let it crash if it's some other error, to learn what the error is
|
|
82
128
|
throw error;
|
|
83
129
|
}
|
|
84
130
|
}
|
|
85
|
-
;
|
|
86
131
|
// Custom ignore function needed to skip unreadableFiles because
|
|
87
132
|
// attempting to read them can block reading all files. It also
|
|
88
133
|
// cuts down the watch tree to just what we need.
|
|
@@ -92,7 +137,7 @@ class FingerprintWatchCommand {
|
|
|
92
137
|
return true;
|
|
93
138
|
}
|
|
94
139
|
});
|
|
95
|
-
if (this.unreadableFiles.has(targetPath)) {
|
|
140
|
+
if (this.unreadableFiles.has(targetPath) || this.symlinkLoopFiles.has(targetPath)) {
|
|
96
141
|
return true;
|
|
97
142
|
}
|
|
98
143
|
// Also make sure to not try to recurse down node_modules or .git
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"fingerprintWatchCommand.js","sourceRoot":"","sources":["../../src/fingerprint/fingerprintWatchCommand.ts"],"names":[],"mappings":"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"}
|