@memberjunction/core-actions 5.31.0 → 5.32.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.
@@ -14,9 +14,11 @@ import { BaseAction } from '@memberjunction/actions';
14
14
  * - **BatchSize** (default 10) — Number of records to geocode **concurrently**
15
15
  * in each parallel batch. Controls API rate pressure. Google Geocoding API
16
16
  * allows 50 QPS, so 10 is conservative and leaves headroom.
17
- * - **MaxTotalRecords** (default unlimited) — Optional hard cap on the total
18
- * number of records processed in a single run. When null/0, processes all
19
- * pending records until exhausted.
17
+ * - **MaxTotalRecords** (default 50,000) — Safety cap on the total number of
18
+ * records processed in a single run. Prevents unbounded memory growth in
19
+ * extreme cases. Override via scheduled job parameters. Logs a warning when
20
+ * the limit is reached so operators know remaining records exist for the
21
+ * next run.
20
22
  * - **MaxRetries** (default 5) — Maximum retry count for failed geocoding
21
23
  * attempts before a record is considered permanently failed.
22
24
  *
@@ -32,6 +34,10 @@ import { BaseAction } from '@memberjunction/actions';
32
34
  export declare class ScheduledGeocodingAction extends BaseAction {
33
35
  private static readonly DEFAULT_MAX_RETRIES;
34
36
  private static readonly DEFAULT_BATCH_SIZE;
37
+ /** Safety default: cap total records per run to prevent unbounded memory growth in extreme cases. */
38
+ private static readonly DEFAULT_MAX_TOTAL;
39
+ /** Page size for RunView pagination — controls how many BaseEntity objects exist simultaneously. */
40
+ private static readonly PAGE_SIZE;
35
41
  protected InternalRunAction(params: RunActionParams): Promise<ActionResultSimple>;
36
42
  /**
37
43
  * Find records in geo-enabled entities that have no RecordGeoCode row
@@ -40,21 +46,27 @@ export declare class ScheduledGeocodingAction extends BaseAction {
40
46
  */
41
47
  private processMissingRecords;
42
48
  /**
43
- * Process all missing RecordGeoCode rows for a single entity.
44
- * Loads all entity records with non-null geo fields, filters out those
45
- * that already have a RecordGeoCode row, then geocodes the rest in
46
- * parallel batches.
49
+ * Process all missing RecordGeoCode rows for a single entity using pagination.
47
50
  *
48
- * @param entityInfo - The entity to process
49
- * @param contextUser - User context for data operations
50
- * @param batchSize - Number of concurrent geocoding operations per batch
51
- * @param maxRows - Maximum records to process (0 = unlimited)
51
+ * Instead of loading ALL entity records into memory at once (which causes OOM
52
+ * with 50k+ records), this fetches pages of PAGE_SIZE records, processes each
53
+ * page, then releases references so previous pages can be GC'd.
54
+ *
55
+ * Also loads all existing RecordGeoCode rows for this entity into a lightweight
56
+ * Map upfront (ExistingGeoCodeInfo — ~5 small fields per row, ~15MB for 50k rows)
57
+ * to eliminate the N+1 per-record FindExistingGeoCode SQL query.
52
58
  */
53
59
  private processMissingForEntity;
54
60
  /**
55
- * Retry failed geocoding attempts. Loads the source entity record
56
- * and re-runs GeoCodeSyncService. Processes all eligible failures
57
- * (or up to maxTotal) in parallel batches.
61
+ * Load a single page of entity records with non-null geo fields.
62
+ * Uses OrderBy on PK + MaxRows + offset simulation via GreaterThan filter
63
+ * to paginate without loading the full result set.
64
+ */
65
+ private loadEntityPage;
66
+ /**
67
+ * Retry failed geocoding attempts using pagination.
68
+ * Loads pages of failed RecordGeoCode rows, then loads source entity records
69
+ * and re-runs GeoCodeSyncService. Processes up to maxTotal records.
58
70
  */
59
71
  private processFailedRetries;
60
72
  /**
@@ -64,9 +76,16 @@ export declare class ScheduledGeocodingAction extends BaseAction {
64
76
  private loadSourceEntities;
65
77
  /**
66
78
  * Remove RecordGeoCode rows whose source entity record no longer exists.
67
- * Processes one entity at a time to keep queries efficient.
79
+ * Processes one entity at a time, paginating orphan queries to avoid loading
80
+ * all orphan rows into memory simultaneously.
68
81
  */
69
82
  private cleanupOrphanedRecords;
83
+ /**
84
+ * Paginated orphan cleanup for a single entity. Fetches pages of orphan rows,
85
+ * deletes them, then fetches the next page. Since deleted rows disappear from
86
+ * subsequent queries, we always fetch from offset 0.
87
+ */
88
+ private cleanupOrphansForEntity;
70
89
  /**
71
90
  * Geocode a list of entity records in parallel batches, then fire cache
72
91
  * invalidation events for each successfully geocoded record.
@@ -81,6 +100,7 @@ export declare class ScheduledGeocodingAction extends BaseAction {
81
100
  * @param entityInfo - Entity metadata
82
101
  * @param contextUser - User context
83
102
  * @param batchSize - Number of concurrent geocoding operations per batch
103
+ * @param existingGeoCodesMap - Optional pre-loaded map passed to GeoCodeSyncService
84
104
  */
85
105
  private geocodeBatch;
86
106
  /**
@@ -115,9 +135,16 @@ export declare class ScheduledGeocodingAction extends BaseAction {
115
135
  */
116
136
  private getGeoAddressFields;
117
137
  /**
118
- * Get the set of RecordIDs that already have a RecordGeoCode row for an entity.
138
+ * Load all existing RecordGeoCode rows for an entity into a lightweight Map.
139
+ * Keyed by `RecordID|LocationType` for O(1) lookup.
140
+ *
141
+ * This replaces both the old getExistingGeoCodeRecordIds() Set (for filtering
142
+ * missing records) and the per-record FindExistingGeoCode() SQL query in
143
+ * GeoCodeSyncService (for staleness checking). The map holds ~5 small string
144
+ * fields per row — even 50k rows is only ~15MB, safe to hold in memory for
145
+ * the duration of one entity's processing.
119
146
  */
120
- private getExistingGeoCodeRecordIds;
147
+ private loadExistingGeoCodesMap;
121
148
  /**
122
149
  * Build a RecordID string from an entity's primary key, matching the
123
150
  * format used in the view's LEFT JOIN to RecordGeoCode.
@@ -127,9 +154,5 @@ export declare class ScheduledGeocodingAction extends BaseAction {
127
154
  * Extract a numeric parameter with a default value.
128
155
  */
129
156
  private getNumericParam;
130
- /**
131
- * Extract an optional numeric parameter. Returns null if not provided.
132
- */
133
- private getNullableNumericParam;
134
157
  }
135
158
  //# sourceMappingURL=scheduled-geocoding.action.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scheduled-geocoding.action.d.ts","sourceRoot":"","sources":["../../../src/custom/geo/scheduled-geocoding.action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AASrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBACa,wBAAyB,SAAQ,UAAU;IACpD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAK;IAChD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAM;cAEhC,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAyCvF;;;;OAIG;YACW,qBAAqB;IA2BnC;;;;;;;;;;OAUG;YACW,uBAAuB;IAyDrC;;;;OAIG;YACW,oBAAoB;IA4DlC;;;OAGG;YACW,kBAAkB;IA6BhC;;;OAGG;YACW,sBAAsB;IA2DpC;;;;;;;;;;;;;;OAcG;YACW,YAAY;IA0B1B;;;;;;;;;;OAUG;YACW,oBAAoB;IAqBlC;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,sBAAsB;IAsB9B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;YACW,2BAA2B;IAezC;;;OAGG;IACH,OAAO,CAAC,aAAa;IAOrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACH,OAAO,CAAC,uBAAuB;CAMlC"}
1
+ {"version":3,"file":"scheduled-geocoding.action.d.ts","sourceRoot":"","sources":["../../../src/custom/geo/scheduled-geocoding.action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AASrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBACa,wBAAyB,SAAQ,UAAU;IACpD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAK;IAChD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAM;IAChD,qGAAqG;IACrG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAU;IACnD,oGAAoG;IACpG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAO;cAExB,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA8CvF;;;;OAIG;YACW,qBAAqB;IA2BnC;;;;;;;;;;OAUG;YACW,uBAAuB;IA+DrC;;;;OAIG;YACW,cAAc;IA2B5B;;;;OAIG;YACW,oBAAoB;IAkElC;;;OAGG;YACW,kBAAkB;IA6BhC;;;;OAIG;YACW,sBAAsB;IA0CpC;;;;OAIG;YACW,uBAAuB;IA8CrC;;;;;;;;;;;;;;;OAeG;YACW,YAAY;IA2B1B;;;;;;;;;;OAUG;YACW,oBAAoB;IA2BlC;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,sBAAsB;IAsB9B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;;;;;;;;OASG;YACW,uBAAuB;IAoCrC;;;OAGG;IACH,OAAO,CAAC,aAAa;IAOrB;;OAEG;IACH,OAAO,CAAC,eAAe;CAO1B"}
@@ -23,9 +23,11 @@ import { GeoCodeSyncService } from '@memberjunction/geo-core';
23
23
  * - **BatchSize** (default 10) — Number of records to geocode **concurrently**
24
24
  * in each parallel batch. Controls API rate pressure. Google Geocoding API
25
25
  * allows 50 QPS, so 10 is conservative and leaves headroom.
26
- * - **MaxTotalRecords** (default unlimited) — Optional hard cap on the total
27
- * number of records processed in a single run. When null/0, processes all
28
- * pending records until exhausted.
26
+ * - **MaxTotalRecords** (default 50,000) — Safety cap on the total number of
27
+ * records processed in a single run. Prevents unbounded memory growth in
28
+ * extreme cases. Override via scheduled job parameters. Logs a warning when
29
+ * the limit is reached so operators know remaining records exist for the
30
+ * next run.
29
31
  * - **MaxRetries** (default 5) — Maximum retry count for failed geocoding
30
32
  * attempts before a record is considered permanently failed.
31
33
  *
@@ -42,6 +44,10 @@ let ScheduledGeocodingAction = class ScheduledGeocodingAction extends BaseAction
42
44
  static { ScheduledGeocodingAction_1 = this; }
43
45
  static { this.DEFAULT_MAX_RETRIES = 5; }
44
46
  static { this.DEFAULT_BATCH_SIZE = 10; }
47
+ /** Safety default: cap total records per run to prevent unbounded memory growth in extreme cases. */
48
+ static { this.DEFAULT_MAX_TOTAL = 50_000; }
49
+ /** Page size for RunView pagination — controls how many BaseEntity objects exist simultaneously. */
50
+ static { this.PAGE_SIZE = 500; }
45
51
  async InternalRunAction(params) {
46
52
  const contextUser = params.ContextUser;
47
53
  if (!contextUser) {
@@ -49,20 +55,24 @@ let ScheduledGeocodingAction = class ScheduledGeocodingAction extends BaseAction
49
55
  }
50
56
  const maxRetries = this.getNumericParam(params, 'MaxRetries', ScheduledGeocodingAction_1.DEFAULT_MAX_RETRIES);
51
57
  const batchSize = this.getNumericParam(params, 'BatchSize', ScheduledGeocodingAction_1.DEFAULT_BATCH_SIZE);
52
- const maxTotal = this.getNullableNumericParam(params, 'MaxTotalRecords');
53
- LogStatus(`ScheduledGeocodingAction: Starting maintenance run (BatchSize=${batchSize}, MaxTotal=${maxTotal ?? 'unlimited'})`);
58
+ const maxTotal = this.getNumericParam(params, 'MaxTotalRecords', ScheduledGeocodingAction_1.DEFAULT_MAX_TOTAL);
59
+ LogStatus(`ScheduledGeocodingAction: Starting maintenance run (BatchSize=${batchSize}, MaxTotal=${maxTotal})`);
54
60
  const stats = { MissingProcessed: 0, MissingSuccess: 0, RetriesProcessed: 0, RetriesSuccess: 0, OrphansRemoved: 0 };
55
61
  // Step 1: Find and geocode missing records
56
62
  const missingStats = await this.processMissingRecords(contextUser, batchSize, maxTotal, params.Provider);
57
63
  stats.MissingProcessed = missingStats.Processed;
58
64
  stats.MissingSuccess = missingStats.Success;
59
65
  // Step 2: Retry failed geocoding attempts
60
- const retryMaxTotal = maxTotal != null ? Math.max(0, maxTotal - stats.MissingProcessed) : null;
66
+ const retryMaxTotal = Math.max(0, maxTotal - stats.MissingProcessed);
61
67
  const retryStats = await this.processFailedRetries(contextUser, maxRetries, batchSize, retryMaxTotal, params.Provider);
62
68
  stats.RetriesProcessed = retryStats.Processed;
63
69
  stats.RetriesSuccess = retryStats.Success;
64
70
  // Step 3: Clean up orphaned RecordGeoCode rows
65
71
  stats.OrphansRemoved = await this.cleanupOrphanedRecords(contextUser, batchSize, params.Provider);
72
+ const totalRecordsProcessed = stats.MissingProcessed + stats.RetriesProcessed;
73
+ if (totalRecordsProcessed >= maxTotal) {
74
+ LogStatus(`ScheduledGeocodingAction: WARNING — MaxTotal limit (${maxTotal}) reached. There may be remaining records for the next run.`);
75
+ }
66
76
  LogStatus(`ScheduledGeocodingAction: Complete — Missing: ${stats.MissingProcessed} processed (${stats.MissingSuccess} success), Retries: ${stats.RetriesProcessed} (${stats.RetriesSuccess} success), Orphans: ${stats.OrphansRemoved} removed`);
67
77
  return {
68
78
  Success: true,
@@ -84,9 +94,9 @@ let ScheduledGeocodingAction = class ScheduledGeocodingAction extends BaseAction
84
94
  let totalProcessed = 0;
85
95
  let totalSuccess = 0;
86
96
  for (const entityInfo of geoEntities) {
87
- if (maxTotal != null && totalProcessed >= maxTotal)
97
+ if (totalProcessed >= maxTotal)
88
98
  break;
89
- const remaining = maxTotal != null ? maxTotal - totalProcessed : null;
99
+ const remaining = maxTotal - totalProcessed;
90
100
  const entityStats = await this.processMissingForEntity(entityInfo, contextUser, batchSize, remaining);
91
101
  totalProcessed += entityStats.Processed;
92
102
  totalSuccess += entityStats.Success;
@@ -97,18 +107,17 @@ let ScheduledGeocodingAction = class ScheduledGeocodingAction extends BaseAction
97
107
  return { Processed: totalProcessed, Success: totalSuccess };
98
108
  }
99
109
  /**
100
- * Process all missing RecordGeoCode rows for a single entity.
101
- * Loads all entity records with non-null geo fields, filters out those
102
- * that already have a RecordGeoCode row, then geocodes the rest in
103
- * parallel batches.
110
+ * Process all missing RecordGeoCode rows for a single entity using pagination.
104
111
  *
105
- * @param entityInfo - The entity to process
106
- * @param contextUser - User context for data operations
107
- * @param batchSize - Number of concurrent geocoding operations per batch
108
- * @param maxRows - Maximum records to process (0 = unlimited)
112
+ * Instead of loading ALL entity records into memory at once (which causes OOM
113
+ * with 50k+ records), this fetches pages of PAGE_SIZE records, processes each
114
+ * page, then releases references so previous pages can be GC'd.
115
+ *
116
+ * Also loads all existing RecordGeoCode rows for this entity into a lightweight
117
+ * Map upfront (ExistingGeoCodeInfo — ~5 small fields per row, ~15MB for 50k rows)
118
+ * to eliminate the N+1 per-record FindExistingGeoCode SQL query.
109
119
  */
110
120
  async processMissingForEntity(entityInfo, contextUser, batchSize, maxRows) {
111
- const rv = new RunView();
112
121
  const pkField = entityInfo.FirstPrimaryKey;
113
122
  if (!pkField)
114
123
  return { Processed: 0, Success: 0 };
@@ -116,33 +125,41 @@ let ScheduledGeocodingAction = class ScheduledGeocodingAction extends BaseAction
116
125
  if (geoFields.length === 0)
117
126
  return { Processed: 0, Success: 0 };
118
127
  try {
119
- // Get all record IDs that already have a RecordGeoCode row
120
- const existingRecordIds = await this.getExistingGeoCodeRecordIds(entityInfo.ID, contextUser);
121
- // Load entity records with non-null geo fields
128
+ // Bulk load: lightweight map of all existing RecordGeoCode rows for this entity.
129
+ // Used both for filtering (which records are missing) and passed through to
130
+ // GeoCodeSyncService to eliminate per-record SQL queries.
131
+ const existingMap = await this.loadExistingGeoCodesMap(entityInfo.ID, contextUser);
122
132
  const nonNullConditions = geoFields.map(f => `${f.Name} IS NOT NULL`).join(' OR ');
123
- const result = await rv.RunView({
124
- EntityName: entityInfo.Name,
125
- ExtraFilter: `(${nonNullConditions})`,
126
- IgnoreMaxRows: true,
127
- BypassCache: true,
128
- ResultType: 'entity_object'
129
- }, contextUser);
130
- if (!result.Success || result.Results.length === 0) {
131
- return { Processed: 0, Success: 0 };
132
- }
133
- // Filter to records missing geocodes
134
- let missingRecords = result.Results
135
- .filter(entity => {
136
- const recordId = this.buildRecordId(entity);
137
- return !existingRecordIds.has(recordId);
138
- });
139
- if (maxRows != null) {
140
- missingRecords = missingRecords.slice(0, maxRows);
133
+ let totalProcessed = 0;
134
+ let totalSuccess = 0;
135
+ let pageOffset = 0;
136
+ // Paginate through entity records to avoid loading all into memory at once
137
+ while (totalProcessed < maxRows) {
138
+ const pageResult = await this.loadEntityPage(entityInfo.Name, nonNullConditions, pageOffset, contextUser);
139
+ if (!pageResult.Success || pageResult.Results.length === 0)
140
+ break;
141
+ const pageEntities = pageResult.Results;
142
+ // Filter to records missing geocodes (not in existingMap for any LocationType)
143
+ const missingRecords = pageEntities.filter(entity => {
144
+ const recordId = this.buildRecordId(entity);
145
+ // A record is "missing" if it has no existing geocode row at all.
146
+ // Check for 'Primary' since that's the only LocationType currently generated.
147
+ const key = GeoCodeSyncService.BuildGeoCodeMapKey(recordId, 'Primary');
148
+ return !existingMap.has(key);
149
+ });
150
+ if (missingRecords.length > 0) {
151
+ const budget = maxRows - totalProcessed;
152
+ const toProcess = missingRecords.slice(0, budget);
153
+ const stats = await this.geocodeBatch(toProcess, entityInfo, contextUser, batchSize, existingMap);
154
+ totalProcessed += stats.Processed;
155
+ totalSuccess += stats.Success;
156
+ }
157
+ // If this page was smaller than PAGE_SIZE, we've exhausted the entity
158
+ if (pageEntities.length < ScheduledGeocodingAction_1.PAGE_SIZE)
159
+ break;
160
+ pageOffset += ScheduledGeocodingAction_1.PAGE_SIZE;
141
161
  }
142
- if (missingRecords.length === 0)
143
- return { Processed: 0, Success: 0 };
144
- // Geocode in parallel batches
145
- return await this.geocodeBatch(missingRecords, entityInfo, contextUser, batchSize);
162
+ return { Processed: totalProcessed, Success: totalSuccess };
146
163
  }
147
164
  catch (e) {
148
165
  const msg = e instanceof Error ? e.message : String(e);
@@ -150,56 +167,85 @@ let ScheduledGeocodingAction = class ScheduledGeocodingAction extends BaseAction
150
167
  return { Processed: 0, Success: 0 };
151
168
  }
152
169
  }
170
+ /**
171
+ * Load a single page of entity records with non-null geo fields.
172
+ * Uses OrderBy on PK + MaxRows + offset simulation via GreaterThan filter
173
+ * to paginate without loading the full result set.
174
+ */
175
+ async loadEntityPage(entityName, nonNullFilter, offset, contextUser) {
176
+ const rv = new RunView();
177
+ const result = await rv.RunView({
178
+ EntityName: entityName,
179
+ ExtraFilter: `(${nonNullFilter})`,
180
+ OrderBy: 'ID',
181
+ MaxRows: ScheduledGeocodingAction_1.PAGE_SIZE,
182
+ StartRow: offset + 1, // RunView StartRow is 1-based
183
+ BypassCache: true,
184
+ ResultType: 'entity_object'
185
+ }, contextUser);
186
+ return {
187
+ Success: result.Success,
188
+ Results: result.Success ? result.Results : []
189
+ };
190
+ }
153
191
  // ================================================================
154
192
  // Step 2: Retry failed geocoding attempts
155
193
  // ================================================================
156
194
  /**
157
- * Retry failed geocoding attempts. Loads the source entity record
158
- * and re-runs GeoCodeSyncService. Processes all eligible failures
159
- * (or up to maxTotal) in parallel batches.
195
+ * Retry failed geocoding attempts using pagination.
196
+ * Loads pages of failed RecordGeoCode rows, then loads source entity records
197
+ * and re-runs GeoCodeSyncService. Processes up to maxTotal records.
160
198
  */
161
199
  async processFailedRetries(contextUser, maxRetries, batchSize, maxTotal, provider) {
162
- const rv = new RunView();
163
- const failedResult = await rv.RunView({
164
- EntityName: 'MJ: Record Geo Codes',
165
- ExtraFilter: `Status='failed' AND RetryCount < ${maxRetries}`,
166
- IgnoreMaxRows: true,
167
- OrderBy: 'RetryCount ASC, GeocodedAt ASC',
168
- ResultType: 'entity_object'
169
- }, contextUser);
170
- if (!failedResult.Success || failedResult.Results.length === 0) {
200
+ if (maxTotal <= 0)
171
201
  return { Processed: 0, Success: 0 };
172
- }
173
- let records = failedResult.Results;
174
- if (maxTotal != null) {
175
- records = records.slice(0, maxTotal);
176
- }
177
- LogStatus(`ScheduledGeocodingAction: ${records.length} failed records eligible for retry`);
178
202
  const md = (provider ?? new Metadata());
203
+ const rv = new RunView();
179
204
  let totalProcessed = 0;
180
205
  let totalSuccess = 0;
181
- // Group by entity for efficient processing
182
- const byEntity = new Map();
183
- for (const geoRecord of records) {
184
- const key = geoRecord.EntityID;
185
- let arr = byEntity.get(key);
186
- if (!arr) {
187
- arr = [];
188
- byEntity.set(key, arr);
206
+ let pageOffset = 0;
207
+ while (totalProcessed < maxTotal) {
208
+ const pageResult = await rv.RunView({
209
+ EntityName: 'MJ: Record Geo Codes',
210
+ ExtraFilter: `Status='failed' AND RetryCount < ${maxRetries}`,
211
+ OrderBy: 'RetryCount ASC, GeocodedAt ASC',
212
+ MaxRows: ScheduledGeocodingAction_1.PAGE_SIZE,
213
+ StartRow: pageOffset + 1,
214
+ BypassCache: true,
215
+ ResultType: 'entity_object'
216
+ }, contextUser);
217
+ if (!pageResult.Success || pageResult.Results.length === 0)
218
+ break;
219
+ const budget = maxTotal - totalProcessed;
220
+ const records = pageResult.Results.slice(0, budget);
221
+ if (totalProcessed === 0) {
222
+ LogStatus(`ScheduledGeocodingAction: Processing failed records for retry`);
189
223
  }
190
- arr.push(geoRecord);
191
- }
192
- for (const [entityId, geoRecords] of byEntity) {
193
- const entityInfo = md.EntityByID(entityId);
194
- if (!entityInfo)
195
- continue;
196
- // Load source entity records and geocode them in parallel batches
197
- const entities = await this.loadSourceEntities(geoRecords, entityInfo, contextUser, provider);
198
- if (entities.length === 0)
199
- continue;
200
- const stats = await this.geocodeBatch(entities, entityInfo, contextUser, batchSize);
201
- totalProcessed += stats.Processed;
202
- totalSuccess += stats.Success;
224
+ // Group by entity for efficient processing
225
+ const byEntity = new Map();
226
+ for (const geoRecord of records) {
227
+ const key = geoRecord.EntityID;
228
+ let arr = byEntity.get(key);
229
+ if (!arr) {
230
+ arr = [];
231
+ byEntity.set(key, arr);
232
+ }
233
+ arr.push(geoRecord);
234
+ }
235
+ for (const [entityId, geoRecords] of byEntity) {
236
+ const entityInfo = md.EntityByID(entityId);
237
+ if (!entityInfo)
238
+ continue;
239
+ const entities = await this.loadSourceEntities(geoRecords, entityInfo, contextUser, provider);
240
+ if (entities.length === 0)
241
+ continue;
242
+ const stats = await this.geocodeBatch(entities, entityInfo, contextUser, batchSize);
243
+ totalProcessed += stats.Processed;
244
+ totalSuccess += stats.Success;
245
+ }
246
+ if (pageResult.Results.length < ScheduledGeocodingAction_1.PAGE_SIZE)
247
+ break;
248
+ pageOffset += ScheduledGeocodingAction_1.PAGE_SIZE;
203
249
  }
204
250
  return { Processed: totalProcessed, Success: totalSuccess };
205
251
  }
@@ -230,13 +276,14 @@ let ScheduledGeocodingAction = class ScheduledGeocodingAction extends BaseAction
230
276
  // ================================================================
231
277
  /**
232
278
  * Remove RecordGeoCode rows whose source entity record no longer exists.
233
- * Processes one entity at a time to keep queries efficient.
279
+ * Processes one entity at a time, paginating orphan queries to avoid loading
280
+ * all orphan rows into memory simultaneously.
234
281
  */
235
282
  async cleanupOrphanedRecords(contextUser, batchSize, provider) {
236
283
  const rv = new RunView();
237
284
  const md = (provider ?? new Metadata());
238
285
  let totalRemoved = 0;
239
- // Get distinct EntityIDs from RecordGeoCode
286
+ // Get distinct EntityIDs from RecordGeoCode (lightweight — just IDs)
240
287
  const entityResult = await rv.RunView({
241
288
  EntityName: 'MJ: Record Geo Codes',
242
289
  Fields: ['EntityID'],
@@ -254,22 +301,8 @@ let ScheduledGeocodingAction = class ScheduledGeocodingAction extends BaseAction
254
301
  const pkField = entityInfo.FirstPrimaryKey;
255
302
  if (!pkField)
256
303
  continue;
257
- const orphanResult = await rv.RunView({
258
- EntityName: 'MJ: Record Geo Codes',
259
- ExtraFilter: `EntityID = '${entityId}' AND NOT EXISTS (SELECT 1 FROM ${entityInfo.SchemaName}.${entityInfo.BaseTable} src WHERE CAST(src.${pkField.Name} AS NVARCHAR(450)) = RecordID)`,
260
- IgnoreMaxRows: true,
261
- ResultType: 'entity_object'
262
- }, contextUser);
263
- if (orphanResult.Success && orphanResult.Results.length > 0) {
264
- // Delete orphans in parallel batches
265
- const orphans = orphanResult.Results;
266
- for (let i = 0; i < orphans.length; i += batchSize) {
267
- const batch = orphans.slice(i, i + batchSize);
268
- const results = await Promise.allSettled(batch.map(o => o.Delete()));
269
- totalRemoved += results.filter(r => r.status === 'fulfilled' && r.value).length;
270
- }
271
- LogStatus(`ScheduledGeocodingAction: Removed ${orphanResult.Results.length} orphaned geo records for ${entityInfo.Name}`);
272
- }
304
+ const entityRemoved = await this.cleanupOrphansForEntity(entityId, entityInfo, pkField.Name, contextUser, batchSize, rv);
305
+ totalRemoved += entityRemoved;
273
306
  }
274
307
  catch (e) {
275
308
  const msg = e instanceof Error ? e.message : String(e);
@@ -278,6 +311,41 @@ let ScheduledGeocodingAction = class ScheduledGeocodingAction extends BaseAction
278
311
  }
279
312
  return totalRemoved;
280
313
  }
314
+ /**
315
+ * Paginated orphan cleanup for a single entity. Fetches pages of orphan rows,
316
+ * deletes them, then fetches the next page. Since deleted rows disappear from
317
+ * subsequent queries, we always fetch from offset 0.
318
+ */
319
+ async cleanupOrphansForEntity(entityId, entityInfo, pkFieldName, contextUser, batchSize, rv) {
320
+ let entityRemoved = 0;
321
+ const orphanFilter = `EntityID = '${entityId}' AND NOT EXISTS (SELECT 1 FROM ${entityInfo.SchemaName}.${entityInfo.BaseTable} src WHERE CAST(src.${pkFieldName} AS NVARCHAR(450)) = RecordID)`;
322
+ // Paginate: fetch a page, delete it, repeat. Since we're deleting rows,
323
+ // always query from the start — deleted rows won't appear again.
324
+ let hasMore = true;
325
+ while (hasMore) {
326
+ const orphanResult = await rv.RunView({
327
+ EntityName: 'MJ: Record Geo Codes',
328
+ ExtraFilter: orphanFilter,
329
+ MaxRows: ScheduledGeocodingAction_1.PAGE_SIZE,
330
+ BypassCache: true,
331
+ ResultType: 'entity_object'
332
+ }, contextUser);
333
+ if (!orphanResult.Success || orphanResult.Results.length === 0)
334
+ break;
335
+ const orphans = orphanResult.Results;
336
+ for (let i = 0; i < orphans.length; i += batchSize) {
337
+ const batch = orphans.slice(i, i + batchSize);
338
+ const results = await Promise.allSettled(batch.map(o => o.Delete()));
339
+ entityRemoved += results.filter(r => r.status === 'fulfilled' && r.value).length;
340
+ }
341
+ // If we got fewer than PAGE_SIZE, we've exhausted the orphans
342
+ hasMore = orphans.length >= ScheduledGeocodingAction_1.PAGE_SIZE;
343
+ }
344
+ if (entityRemoved > 0) {
345
+ LogStatus(`ScheduledGeocodingAction: Removed ${entityRemoved} orphaned geo records for ${entityInfo.Name}`);
346
+ }
347
+ return entityRemoved;
348
+ }
281
349
  // ================================================================
282
350
  // Core: parallel batch geocoding with cache invalidation
283
351
  // ================================================================
@@ -295,12 +363,13 @@ let ScheduledGeocodingAction = class ScheduledGeocodingAction extends BaseAction
295
363
  * @param entityInfo - Entity metadata
296
364
  * @param contextUser - User context
297
365
  * @param batchSize - Number of concurrent geocoding operations per batch
366
+ * @param existingGeoCodesMap - Optional pre-loaded map passed to GeoCodeSyncService
298
367
  */
299
- async geocodeBatch(entities, entityInfo, contextUser, batchSize) {
368
+ async geocodeBatch(entities, entityInfo, contextUser, batchSize, existingGeoCodesMap) {
300
369
  let totalSuccess = 0;
301
370
  for (let i = 0; i < entities.length; i += batchSize) {
302
371
  const batch = entities.slice(i, i + batchSize);
303
- const results = await Promise.allSettled(batch.map(entity => this.geocodeAndInvalidate(entity, contextUser)));
372
+ const results = await Promise.allSettled(batch.map(entity => this.geocodeAndInvalidate(entity, contextUser, existingGeoCodesMap)));
304
373
  const batchSuccess = results.filter(r => r.status === 'fulfilled' && r.value).length;
305
374
  totalSuccess += batchSuccess;
306
375
  if (entities.length > batchSize) {
@@ -320,9 +389,9 @@ let ScheduledGeocodingAction = class ScheduledGeocodingAction extends BaseAction
320
389
  *
321
390
  * @returns true if geocoding succeeded, false otherwise
322
391
  */
323
- async geocodeAndInvalidate(entity, contextUser) {
392
+ async geocodeAndInvalidate(entity, contextUser, existingGeoCodesMap) {
324
393
  try {
325
- const result = await GeoCodeSyncService.Instance.SyncIfChanged(entity, contextUser);
394
+ const result = await GeoCodeSyncService.Instance.SyncIfChanged(entity, contextUser, undefined, existingGeoCodesMap);
326
395
  if (result) {
327
396
  // Geocoding produced new coordinates — fire cache invalidation.
328
397
  // Reload the entity to pick up fresh data from the view (including
@@ -380,18 +449,39 @@ let ScheduledGeocodingAction = class ScheduledGeocodingAction extends BaseAction
380
449
  f.ExtendedType !== 'GeoLatitude' && f.ExtendedType !== 'GeoLongitude');
381
450
  }
382
451
  /**
383
- * Get the set of RecordIDs that already have a RecordGeoCode row for an entity.
452
+ * Load all existing RecordGeoCode rows for an entity into a lightweight Map.
453
+ * Keyed by `RecordID|LocationType` for O(1) lookup.
454
+ *
455
+ * This replaces both the old getExistingGeoCodeRecordIds() Set (for filtering
456
+ * missing records) and the per-record FindExistingGeoCode() SQL query in
457
+ * GeoCodeSyncService (for staleness checking). The map holds ~5 small string
458
+ * fields per row — even 50k rows is only ~15MB, safe to hold in memory for
459
+ * the duration of one entity's processing.
384
460
  */
385
- async getExistingGeoCodeRecordIds(entityId, contextUser) {
461
+ async loadExistingGeoCodesMap(entityId, contextUser) {
386
462
  const rv = new RunView();
387
- const existingResult = await rv.RunView({
463
+ const result = await rv.RunView({
388
464
  EntityName: 'MJ: Record Geo Codes',
389
465
  ExtraFilter: `EntityID = '${entityId}'`,
390
- Fields: ['RecordID'],
466
+ Fields: ['ID', 'RecordID', 'LocationType', 'SourceFieldHash', 'Status'],
391
467
  ResultType: 'simple',
392
- IgnoreMaxRows: true
468
+ IgnoreMaxRows: true,
469
+ BypassCache: true
393
470
  }, contextUser);
394
- return new Set(existingResult.Success ? existingResult.Results.map(r => r.RecordID) : []);
471
+ const map = new Map();
472
+ if (result.Success) {
473
+ for (const row of result.Results) {
474
+ const key = GeoCodeSyncService.BuildGeoCodeMapKey(row.RecordID, row.LocationType);
475
+ map.set(key, {
476
+ ID: row.ID,
477
+ RecordID: row.RecordID,
478
+ LocationType: row.LocationType,
479
+ SourceFieldHash: row.SourceFieldHash,
480
+ Status: row.Status
481
+ });
482
+ }
483
+ }
484
+ return map;
395
485
  }
396
486
  /**
397
487
  * Build a RecordID string from an entity's primary key, matching the
@@ -413,16 +503,6 @@ let ScheduledGeocodingAction = class ScheduledGeocodingAction extends BaseAction
413
503
  const parsed = Number(param.Value);
414
504
  return isNaN(parsed) ? defaultValue : parsed;
415
505
  }
416
- /**
417
- * Extract an optional numeric parameter. Returns null if not provided.
418
- */
419
- getNullableNumericParam(params, name) {
420
- const param = params.Params.find(p => p.Name.trim().toLowerCase() === name.toLowerCase());
421
- if (!param || param.Value === undefined || param.Value === null)
422
- return null;
423
- const parsed = Number(param.Value);
424
- return isNaN(parsed) ? null : parsed;
425
- }
426
506
  };
427
507
  ScheduledGeocodingAction = ScheduledGeocodingAction_1 = __decorate([
428
508
  RegisterClass(BaseAction, 'Scheduled Geocoding')
@@ -1 +1 @@
1
- {"version":3,"file":"scheduled-geocoding.action.js","sourceRoot":"","sources":["../../../src/custom/geo/scheduled-geocoding.action.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scheduled-geocoding.action.js","sourceRoot":"","sources":["../../../src/custom/geo/scheduled-geocoding.action.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@memberjunction/core-actions",
3
3
  "type": "module",
4
- "version": "5.31.0",
4
+ "version": "5.32.0",
5
5
  "description": "Library of generated and custom actions for the core MemberJunction framework. This library is maintained by MemberJunction and includes actions for use within the framework itself.",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -25,34 +25,34 @@
25
25
  "dependencies": {
26
26
  "@asamuzakjp/css-color": "^4.1.2",
27
27
  "@dagrejs/dagre": "^1.1.8",
28
- "@memberjunction/actions": "5.31.0",
29
- "@memberjunction/actions-base": "5.31.0",
30
- "@memberjunction/ai": "5.31.0",
31
- "@memberjunction/ai-mcp-client": "5.31.0",
32
- "@memberjunction/ai-agent-manager": "5.31.0",
33
- "@memberjunction/ai-agents": "5.31.0",
34
- "@memberjunction/ai-betty-bot": "5.31.0",
35
- "@memberjunction/ai-core-plus": "5.31.0",
36
- "@memberjunction/ai-engine-base": "5.31.0",
37
- "@memberjunction/ai-prompts": "5.31.0",
38
- "@memberjunction/ai-vector-sync": "5.31.0",
39
- "@memberjunction/aiengine": "5.31.0",
40
- "@memberjunction/geo-core": "5.31.0",
41
- "@memberjunction/code-execution": "5.31.0",
42
- "@memberjunction/communication-engine": "5.31.0",
43
- "@memberjunction/communication-types": "5.31.0",
44
- "@memberjunction/content-autotagging": "5.31.0",
45
- "@memberjunction/core": "5.31.0",
46
- "@memberjunction/core-entities": "5.31.0",
47
- "@memberjunction/core-entities-server": "5.31.0",
48
- "@memberjunction/export-engine": "5.31.0",
49
- "@memberjunction/external-change-detection": "5.31.0",
50
- "@memberjunction/generic-database-provider": "5.31.0",
51
- "@memberjunction/global": "5.31.0",
52
- "@memberjunction/integration-engine": "5.31.0",
53
- "@memberjunction/search-engine": "5.31.0",
54
- "@memberjunction/sqlserver-dataprovider": "5.31.0",
55
- "@memberjunction/storage": "5.31.0",
28
+ "@memberjunction/actions": "5.32.0",
29
+ "@memberjunction/actions-base": "5.32.0",
30
+ "@memberjunction/ai": "5.32.0",
31
+ "@memberjunction/ai-mcp-client": "5.32.0",
32
+ "@memberjunction/ai-agent-manager": "5.32.0",
33
+ "@memberjunction/ai-agents": "5.32.0",
34
+ "@memberjunction/ai-betty-bot": "5.32.0",
35
+ "@memberjunction/ai-core-plus": "5.32.0",
36
+ "@memberjunction/ai-engine-base": "5.32.0",
37
+ "@memberjunction/ai-prompts": "5.32.0",
38
+ "@memberjunction/ai-vector-sync": "5.32.0",
39
+ "@memberjunction/aiengine": "5.32.0",
40
+ "@memberjunction/geo-core": "5.32.0",
41
+ "@memberjunction/code-execution": "5.32.0",
42
+ "@memberjunction/communication-engine": "5.32.0",
43
+ "@memberjunction/communication-types": "5.32.0",
44
+ "@memberjunction/content-autotagging": "5.32.0",
45
+ "@memberjunction/core": "5.32.0",
46
+ "@memberjunction/core-entities": "5.32.0",
47
+ "@memberjunction/core-entities-server": "5.32.0",
48
+ "@memberjunction/export-engine": "5.32.0",
49
+ "@memberjunction/external-change-detection": "5.32.0",
50
+ "@memberjunction/generic-database-provider": "5.32.0",
51
+ "@memberjunction/global": "5.32.0",
52
+ "@memberjunction/integration-engine": "5.32.0",
53
+ "@memberjunction/search-engine": "5.32.0",
54
+ "@memberjunction/sqlserver-dataprovider": "5.32.0",
55
+ "@memberjunction/storage": "5.32.0",
56
56
  "@types/d3-cloud": "^1.2.9",
57
57
  "@types/d3-force": "^3.0.10",
58
58
  "@types/d3-hierarchy": "^3.1.7",