meteor3: web Fires publications to async (findOneAsync/countAsync/awaited firesUnion)
fireFromId, fireFromAlertId, fireFromActiveId and fireFromHash now use the async collection APIs and async publish handlers (so try/catch catches rejections). falsePositivesMyloc/industriesMyloc/comments.forReference are cursor-only and needed no change. Verified over raw DDP against the seeded dev Mongo 7; REST smoke stays byte-identical (12/12).
This commit is contained in:
parent
48d33c397b
commit
feaf66fe34
2 changed files with 24 additions and 14 deletions
16
UPGRADE.md
16
UPGRADE.md
|
|
@ -224,10 +224,20 @@ MONGO_CONTAINER=tcef-mongo7 MONGO_SHELL=mongosh MONGO_PORT=27019 ./smoke/smoke.s
|
||||||
- **fixtures.js / sitemaps.js** disabled (sync-only `@cleverbeagle/seeder` /
|
- **fixtures.js / sitemaps.js** disabled (sync-only `@cleverbeagle/seeder` /
|
||||||
pre-0.9 `gadicohen:sitemaps`) — not on the REST path. Debt.
|
pre-0.9 `gadicohen:sitemaps`) — not on the REST path. Debt.
|
||||||
|
|
||||||
|
### Web-UI async migration (beyond the REST contract)
|
||||||
|
- ✅ **Fires publications → async** (`fireFromId`, `fireFromAlertId`,
|
||||||
|
`fireFromActiveId`, `fireFromHash`): `findOne`→`findOneAsync`,
|
||||||
|
`count()`→`countAsync()`, `firesUnion` awaited, handlers `async` so the
|
||||||
|
try/catch actually catches rejections. Verified over raw DDP (all subs
|
||||||
|
`ready`, docs flow; fire + falsePositives docs delivered for the seeded
|
||||||
|
fire). `falsePositivesMyloc` / `industriesMyloc` / `comments.forReference`
|
||||||
|
needed **no change** — they return bare `find()` cursors (still sync-safe on
|
||||||
|
Meteor 3). `subscriptions.*` methods were already `*Async`.
|
||||||
|
- Note: the module-level `new Counter(...)` (natestrauser:publish-performant-counts)
|
||||||
|
behind `falsePositivesTotal` boots fine; the publication itself is unused by
|
||||||
|
the current UI — watch it if re-enabled.
|
||||||
|
|
||||||
### Still TODO before the web (not just REST) is fully deployable on 3.x
|
### Still TODO before the web (not just REST) is fully deployable on 3.x
|
||||||
- Web publications (`fireFromId`, `fireFromAlertId`, `falsePositivesMyloc`,
|
|
||||||
`industriesMyloc`) + remaining methods (comments, `subscriptions.remove`) →
|
|
||||||
`*Async` (not exercised by the smoke).
|
|
||||||
- **React 16 → 18** render root + verify ancient react-* libs.
|
- **React 16 → 18** render root + verify ancient react-* libs.
|
||||||
- Re-enable dev fixtures / sitemaps / email default template with async ports.
|
- Re-enable dev fixtures / sitemaps / email default template with async ports.
|
||||||
- SCSS `@import`→`@use`, `lighten`/`darken`→`color.adjust` (dart-sass deprecations).
|
- SCSS `@import`→`@use`, `lighten`/`darken`→`color.adjust` (dart-sass deprecations).
|
||||||
|
|
|
||||||
|
|
@ -76,14 +76,14 @@ const findOrCreateFire = async (obj) => {
|
||||||
return findFire(obj);
|
return findFire(obj);
|
||||||
};
|
};
|
||||||
|
|
||||||
Meteor.publish('fireFromAlertId', function fireFromAlertId(_id) {
|
Meteor.publish('fireFromAlertId', async function fireFromAlertId(_id) {
|
||||||
try {
|
try {
|
||||||
check(_id, String);
|
check(_id, String);
|
||||||
// console.log(`Looking for alert fire ${_id}`);
|
// console.log(`Looking for alert fire ${_id}`);
|
||||||
const fire = FireAlertsCollection.findOne(new Meteor.Collection.ObjectID(_id));
|
const fire = await FireAlertsCollection.findOneAsync(new Meteor.Collection.ObjectID(_id));
|
||||||
if (fire) {
|
if (fire) {
|
||||||
// console.info(`Active fire found: ${_id}`);
|
// console.info(`Active fire found: ${_id}`);
|
||||||
return findOrCreateFire(fixConfidence(fire));
|
return await findOrCreateFire(fixConfidence(fire));
|
||||||
}
|
}
|
||||||
console.info(`Alert fire not found: ${_id}`);
|
console.info(`Alert fire not found: ${_id}`);
|
||||||
// Not found in active fires!
|
// Not found in active fires!
|
||||||
|
|
@ -94,14 +94,14 @@ Meteor.publish('fireFromAlertId', function fireFromAlertId(_id) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Meteor.publish('fireFromActiveId', function fireFromActiveId(_id) {
|
Meteor.publish('fireFromActiveId', async function fireFromActiveId(_id) {
|
||||||
try {
|
try {
|
||||||
check(_id, String);
|
check(_id, String);
|
||||||
// console.log(`Looking for active fire ${_id}`);
|
// console.log(`Looking for active fire ${_id}`);
|
||||||
const fire = ActiveFiresCollection.findOne(new Meteor.Collection.ObjectID(_id));
|
const fire = await ActiveFiresCollection.findOneAsync(new Meteor.Collection.ObjectID(_id));
|
||||||
if (fire) {
|
if (fire) {
|
||||||
// console.info(`Active fire found: ${_id}`);
|
// console.info(`Active fire found: ${_id}`);
|
||||||
return findOrCreateFire(fixConfidence(fire));
|
return await findOrCreateFire(fixConfidence(fire));
|
||||||
}
|
}
|
||||||
console.info(`Active fire not found: ${_id}`);
|
console.info(`Active fire not found: ${_id}`);
|
||||||
// Not found in active fires!
|
// Not found in active fires!
|
||||||
|
|
@ -112,14 +112,14 @@ Meteor.publish('fireFromActiveId', function fireFromActiveId(_id) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Meteor.publish('fireFromId', function fireFromId(_id) {
|
Meteor.publish('fireFromId', async function fireFromId(_id) {
|
||||||
try {
|
try {
|
||||||
check(_id, String);
|
check(_id, String);
|
||||||
// console.log(`Looking for archive fire ${_id}`);
|
// console.log(`Looking for archive fire ${_id}`);
|
||||||
const fire = FiresCollection.find(new Meteor.Collection.ObjectID(_id));
|
const fire = FiresCollection.find(new Meteor.Collection.ObjectID(_id));
|
||||||
if (fire.count() !== 0) {
|
if (await fire.countAsync() !== 0) {
|
||||||
// console.info(`Archive fire found: ${_id}`);
|
// console.info(`Archive fire found: ${_id}`);
|
||||||
const union = firesUnion(fire);
|
const union = await firesUnion(fire);
|
||||||
const falsePos = whichAreFalsePositives(FalsePositives, union);
|
const falsePos = whichAreFalsePositives(FalsePositives, union);
|
||||||
const industries = whichAreFalsePositives(Industries, union);
|
const industries = whichAreFalsePositives(Industries, union);
|
||||||
return [fire, falsePos, industries];
|
return [fire, falsePos, industries];
|
||||||
|
|
@ -163,11 +163,11 @@ export async function fireFromHash(fireEnc, params) {
|
||||||
* return fire; */
|
* return fire; */
|
||||||
}
|
}
|
||||||
|
|
||||||
Meteor.publish('fireFromHash', function fireFromHashFunc(fireEnc, params) {
|
Meteor.publish('fireFromHash', async function fireFromHashFunc(fireEnc, params) {
|
||||||
check(fireEnc, String);
|
check(fireEnc, String);
|
||||||
check(params, Object);
|
check(params, Object);
|
||||||
try {
|
try {
|
||||||
return fireFromHash(fireEnc, params);
|
return await fireFromHash(fireEnc, params);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.warn(e);
|
console.warn(e);
|
||||||
logUrl(fireEnc, params);
|
logUrl(fireEnc, params);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue