@resolveio/server-lib 22.2.20 → 22.2.22

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.
@@ -122,6 +122,7 @@ export declare class SubscriptionManager {
122
122
  private parsePositiveFloat;
123
123
  private isChangeStreamUnsupported;
124
124
  private isResumeTokenInvalid;
125
+ private isChangeStreamDocumentTooLarge;
125
126
  private enableLocalOplogFallback;
126
127
  getUseLocalOplog(): boolean;
127
128
  handleMongoReconnect(reason: string): Promise<void>;
@@ -1536,6 +1536,21 @@ var SubscriptionManager = /** @class */ (function () {
1536
1536
  }
1537
1537
  return false;
1538
1538
  };
1539
+ SubscriptionManager.prototype.isChangeStreamDocumentTooLarge = function (error) {
1540
+ var code = typeof (error === null || error === void 0 ? void 0 : error.code) === 'number' ? error.code : null;
1541
+ var codeName = typeof (error === null || error === void 0 ? void 0 : error.codeName) === 'string' ? error.codeName.toLowerCase() : '';
1542
+ var message = typeof (error === null || error === void 0 ? void 0 : error.message) === 'string' ? error.message.toLowerCase() : '';
1543
+ if (code === 10334) {
1544
+ return true;
1545
+ }
1546
+ if (codeName.includes('bsonobjecttoolarge')) {
1547
+ return true;
1548
+ }
1549
+ if (message.includes('bsonobj size') && message.includes('16mb')) {
1550
+ return true;
1551
+ }
1552
+ return false;
1553
+ };
1539
1554
  SubscriptionManager.prototype.enableLocalOplogFallback = function (reason, error) {
1540
1555
  return __awaiter(this, void 0, void 0, function () {
1541
1556
  var _a, message;
@@ -1990,7 +2005,7 @@ var SubscriptionManager = /** @class */ (function () {
1990
2005
  case 3:
1991
2006
  // eslint-disable-next-line no-restricted-syntax
1992
2007
  _a.sent();
1993
- if (!(!this._oplog$ || this._oplog$.closed)) return [3 /*break*/, 22];
2008
+ if (!(!this._oplog$ || this._oplog$.closed)) return [3 /*break*/, 27];
1994
2009
  this._oplogRetryCount += 1;
1995
2010
  if (this._oplogRetryCount > 5) {
1996
2011
  console.error('****************** TAIL OPLOG ERROR, RETRYING A BUNCH OF TIMES, KILLING PROCESS **************************');
@@ -2021,14 +2036,14 @@ var SubscriptionManager = /** @class */ (function () {
2021
2036
  },
2022
2037
  ];
2023
2038
  startedWithResumeToken = false;
2024
- if (!resumeToken) return [3 /*break*/, 17];
2039
+ if (!resumeToken) return [3 /*break*/, 20];
2025
2040
  lastResumeToken_1 = resumeToken;
2026
2041
  _a.label = 4;
2027
2042
  case 4:
2028
- _a.trys.push([4, 5, , 16]);
2043
+ _a.trys.push([4, 5, , 19]);
2029
2044
  this._oplog$ = resolveio_server_app_1.ResolveIOServer.getMongoConnection().watch(pipeline, { resumeAfter: resumeToken, fullDocument: 'updateLookup' });
2030
2045
  startedWithResumeToken = true;
2031
- return [3 /*break*/, 16];
2046
+ return [3 /*break*/, 19];
2032
2047
  case 5:
2033
2048
  error_8 = _a.sent();
2034
2049
  if (!this.isChangeStreamUnsupported(error_8)) return [3 /*break*/, 7];
@@ -2037,49 +2052,66 @@ var SubscriptionManager = /** @class */ (function () {
2037
2052
  _a.sent();
2038
2053
  return [2 /*return*/];
2039
2054
  case 7:
2040
- if (!this._oplog$) return [3 /*break*/, 9];
2055
+ if (!this.isChangeStreamDocumentTooLarge(error_8)) return [3 /*break*/, 10];
2056
+ return [4 /*yield*/, this.clearResumeToken()];
2057
+ case 8:
2058
+ _a.sent();
2059
+ lastResumeToken_1 = null;
2060
+ this.queueFullResync('oplog-change-stream-document-too-large');
2061
+ return [4 /*yield*/, this.enableLocalOplogFallback('change-stream-document-too-large', error_8)];
2062
+ case 9:
2063
+ _a.sent();
2064
+ return [2 /*return*/];
2065
+ case 10:
2066
+ if (!this._oplog$) return [3 /*break*/, 12];
2041
2067
  this._oplog$.removeAllListeners();
2042
2068
  return [4 /*yield*/, this._oplog$.close()];
2043
- case 8:
2069
+ case 11:
2044
2070
  _a.sent();
2045
2071
  this._oplog$ = null;
2046
- _a.label = 9;
2047
- case 9: return [4 /*yield*/, this.clearResumeToken()];
2048
- case 10:
2072
+ _a.label = 12;
2073
+ case 12: return [4 /*yield*/, this.clearResumeToken()];
2074
+ case 13:
2049
2075
  _a.sent();
2050
2076
  lastResumeToken_1 = null;
2051
2077
  console.log(new Date(), 'oplog resumeAfter failed, starting fresh', error_8);
2052
- _a.label = 11;
2053
- case 11:
2054
- _a.trys.push([11, 12, , 15]);
2078
+ _a.label = 14;
2079
+ case 14:
2080
+ _a.trys.push([14, 15, , 18]);
2055
2081
  this._oplog$ = resolveio_server_app_1.ResolveIOServer.getMongoConnection().watch(pipeline, { fullDocument: 'updateLookup' });
2056
2082
  startedWithResumeToken = false;
2057
- return [3 /*break*/, 15];
2058
- case 12:
2083
+ return [3 /*break*/, 18];
2084
+ case 15:
2059
2085
  innerError_1 = _a.sent();
2060
- if (!this.isChangeStreamUnsupported(innerError_1)) return [3 /*break*/, 14];
2086
+ if (!this.isChangeStreamUnsupported(innerError_1)) return [3 /*break*/, 17];
2061
2087
  return [4 /*yield*/, this.enableLocalOplogFallback('change-stream-unsupported', innerError_1)];
2062
- case 13:
2088
+ case 16:
2063
2089
  _a.sent();
2064
2090
  return [2 /*return*/];
2065
- case 14: throw innerError_1;
2066
- case 15:
2091
+ case 17: throw innerError_1;
2092
+ case 18:
2067
2093
  this.queueFullResync('oplog-resumeAfter-failed');
2068
- return [3 /*break*/, 16];
2069
- case 16: return [3 /*break*/, 21];
2070
- case 17:
2071
- _a.trys.push([17, 18, , 21]);
2094
+ return [3 /*break*/, 19];
2095
+ case 19: return [3 /*break*/, 26];
2096
+ case 20:
2097
+ _a.trys.push([20, 21, , 26]);
2072
2098
  this._oplog$ = resolveio_server_app_1.ResolveIOServer.getMongoConnection().watch(pipeline, { fullDocument: 'updateLookup' });
2073
- return [3 /*break*/, 21];
2074
- case 18:
2099
+ return [3 /*break*/, 26];
2100
+ case 21:
2075
2101
  error_9 = _a.sent();
2076
- if (!this.isChangeStreamUnsupported(error_9)) return [3 /*break*/, 20];
2102
+ if (!this.isChangeStreamUnsupported(error_9)) return [3 /*break*/, 23];
2077
2103
  return [4 /*yield*/, this.enableLocalOplogFallback('change-stream-unsupported', error_9)];
2078
- case 19:
2104
+ case 22:
2079
2105
  _a.sent();
2080
2106
  return [2 /*return*/];
2081
- case 20: throw error_9;
2082
- case 21:
2107
+ case 23:
2108
+ if (!this.isChangeStreamDocumentTooLarge(error_9)) return [3 /*break*/, 25];
2109
+ return [4 /*yield*/, this.enableLocalOplogFallback('change-stream-document-too-large', error_9)];
2110
+ case 24:
2111
+ _a.sent();
2112
+ return [2 /*return*/];
2113
+ case 25: throw error_9;
2114
+ case 26:
2083
2115
  console.log(new Date(), 'oplog started', startedWithResumeToken ? '(resumeAfter)' : '');
2084
2116
  this._oplog$.on('change', function (doc) { return __awaiter(_this, void 0, void 0, function () {
2085
2117
  var collection, fullDocument, docId, flag, dependencyFlag;
@@ -2177,15 +2209,26 @@ var SubscriptionManager = /** @class */ (function () {
2177
2209
  _a.sent();
2178
2210
  return [2 /*return*/];
2179
2211
  case 2:
2180
- if (!this.isResumeTokenInvalid(error)) return [3 /*break*/, 4];
2212
+ if (!this.isChangeStreamDocumentTooLarge(error)) return [3 /*break*/, 5];
2181
2213
  return [4 /*yield*/, this.clearResumeToken()];
2182
2214
  case 3:
2183
2215
  _a.sent();
2184
2216
  lastResumeToken_1 = null;
2185
- this.queueFullResync('oplog-resume-token-invalid');
2186
- _a.label = 4;
2187
- case 4: return [4 /*yield*/, this._oplog$.close()];
2217
+ this.queueFullResync('oplog-change-stream-document-too-large');
2218
+ return [4 /*yield*/, this.enableLocalOplogFallback('change-stream-document-too-large', error)];
2219
+ case 4:
2220
+ _a.sent();
2221
+ return [2 /*return*/];
2188
2222
  case 5:
2223
+ if (!this.isResumeTokenInvalid(error)) return [3 /*break*/, 7];
2224
+ return [4 /*yield*/, this.clearResumeToken()];
2225
+ case 6:
2226
+ _a.sent();
2227
+ lastResumeToken_1 = null;
2228
+ this.queueFullResync('oplog-resume-token-invalid');
2229
+ _a.label = 7;
2230
+ case 7: return [4 /*yield*/, this._oplog$.close()];
2231
+ case 8:
2189
2232
  _a.sent();
2190
2233
  return [2 /*return*/];
2191
2234
  }
@@ -2218,8 +2261,8 @@ var SubscriptionManager = /** @class */ (function () {
2218
2261
  }
2219
2262
  });
2220
2263
  }); });
2221
- _a.label = 22;
2222
- case 22: return [2 /*return*/];
2264
+ _a.label = 27;
2265
+ case 27: return [2 /*return*/];
2223
2266
  }
2224
2267
  });
2225
2268
  });