Currently, when running the agent on scanner, there is a good old begin/end event mismatch. These errors should be taken seriously because they indicate that an important assumption on the callstack was broken.
After inspection the errors I found out that the error is located in the technique that babel uses to implement async functions with generators:
The faulty helper:
// appmap-js/packages/scanner/built/src/ruleChecker.js:2:44
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
The faulty generator:
// appmap-js/packages/scanner/built/src/rules/rpcWithoutCircuitBreaker.js:15:0
// The circuit breaker will be found in a descendant of the httpClientRequest.
function* descendants(httpClientRequest) {
for (const candidate of new models_1.EventNavigator(httpClientRequest).descendants()) {
yield candidate.event;
}
}
Currently, when running the agent on scanner, there is a good old
begin/end event mismatch
. These errors should be taken seriously because they indicate that an important assumption on the callstack was broken.After inspection the errors I found out that the error is located in the technique that
babel
uses to implement async functions with generators:The faulty helper:
The faulty generator:
Relevant part of the trace:
So the problem is that the event
yield/40
is followed byreturn/34
andresume/40
is misssing. This messes up the callstack. This can happens when usingGenerator.prototype.return()
or usingGenerator.prototype.return()
.We should take these method into account to solve this issue.