Skip to content

Commit

Permalink
Merge pull request #199 from konecty/fix/prevent-watch-when-mongo-rs
Browse files Browse the repository at this point in the history
Fix: prevent watch when mongo rs
  • Loading branch information
7sete7 authored Dec 17, 2024
2 parents 5cc6122 + 2df1935 commit dab2757
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 23 deletions.
6 changes: 5 additions & 1 deletion src/imports/meta/loadMetaObjects.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import unset from 'lodash/unset';
import { Document } from '@imports/model/Document';
import { MetaObject } from '@imports/model/MetaObject';
import { MetaObjectType } from '@imports/types/metadata';
import { isReplicaSet } from '@imports/utils/mongo';
import { Promise as BluebirdPromise } from 'bluebird';
import path from 'path';
import { checkInitialData } from '../data/initialData';
Expand Down Expand Up @@ -299,5 +300,8 @@ export async function loadMetaObjects() {
logger.info('Loading MetaObject.Meta from database');
await dbLoad();

dbWatch();
if (await isReplicaSet()) {
logger.info('[kondata] Starting watch for changes in the database');
dbWatch();
}
}
22 changes: 0 additions & 22 deletions src/imports/utils/mongo.js

This file was deleted.

46 changes: 46 additions & 0 deletions src/imports/utils/mongo.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import { db } from '@imports/database';
import isArray from 'lodash/isArray';
import isObject from 'lodash/isObject';
import { MongoServerError, ObjectId } from 'mongodb';
import { logger } from './logger';

export function convertObjectIds<T>(
records: T,
): T extends ObjectId
? string
: T extends (infer U)[]
? U[]
: T extends object
? { [K in keyof T]: T[K] extends ObjectId ? string : T[K] extends object | object[] ? ReturnType<typeof convertObjectIds<T[K]>> : T[K] }
: T {
if (isArray(records)) {
return records.map(item => convertObjectIds(item)) as any;
}

if (isObject(records)) {
if (records instanceof ObjectId) {
return records.toString() as any;
}

return Object.keys(records).reduce((result, key) => {
const k = key as keyof T;
result[k] = convertObjectIds(records[k]);
return result;
}, {} as any);
}

return records as any;
}

export async function isReplicaSet() {
try {
const status = await db.admin().replSetGetStatus();
return status != null;
} catch (error) {
if ((error as MongoServerError).codeName === 'NoReplicationEnabled') {
return false;
}
logger.error('Erro ao verificar status do replica set:', error);
return false;
}
}

0 comments on commit dab2757

Please sign in to comment.