Skip to content

Commit f9028a4

Browse files
Only use transactions on replica sets
1 parent 7de60c3 commit f9028a4

File tree

2 files changed

+21
-10
lines changed

2 files changed

+21
-10
lines changed

backend/src/services/model.ts

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import ModelCardRevisionModel, { ModelCardRevisionDoc } from '../models/ModelCar
1010
import { UserInterface } from '../models/User.js'
1111
import { GetModelCardVersionOptions, GetModelCardVersionOptionsKeys, GetModelFiltersKeys } from '../types/enums.js'
1212
import { isValidatorResultError } from '../types/ValidatorResultError.js'
13+
import { isReplicaSet } from '../utils/database.js'
1314
import { toEntity } from '../utils/entity.js'
1415
import { BadReq, Forbidden, InternalError, NotFound } from '../utils/error.js'
1516
import { convertStringToId } from '../utils/id.js'
@@ -224,16 +225,21 @@ export async function _setModelCard(
224225

225226
const revision = new ModelCardRevisionModel({ ...newDocument, modelId, createdBy: user.dn })
226227

227-
const message = 'Unable to save model card revision'
228-
await mongoose.connection
229-
.transaction(async function executeUpdate(session) {
230-
await revision.save({ session })
231-
await ModelModel.updateOne({ id: modelId }, { $set: { card: newDocument } }, { session: session })
232-
})
233-
.catch((error) => {
234-
log.error('Error when updating model card/revision. Transaction rolled back.', error)
235-
throw InternalError(message, { modelId })
236-
})
228+
if (await isReplicaSet()) {
229+
await mongoose.connection
230+
.transaction(async function executeUpdate(session) {
231+
await revision.save({ session })
232+
await ModelModel.updateOne({ id: modelId }, { $set: { card: newDocument } }, { session: session })
233+
})
234+
.catch((error) => {
235+
const message = 'Unable to save model card revision'
236+
log.error('Error when updating model card/revision. Transaction rolled back.', error)
237+
throw InternalError(message, { modelId })
238+
})
239+
} else {
240+
await revision.save()
241+
await ModelModel.updateOne({ id: modelId }, { $set: { card: newDocument } })
242+
}
237243

238244
return revision
239245
}

backend/src/utils/database.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ export async function connectToMongoose() {
3131
}
3232
}
3333

34+
export async function isReplicaSet(): Promise<boolean> {
35+
const options = mongoose.connection.getClient().options
36+
return Object.prototype.hasOwnProperty.call(options, 'replicaSet') && options.replicaSet.length > 0
37+
}
38+
3439
export async function disconnectFromMongoose() {
3540
await mongoose.disconnect()
3641
log.info({ log: false }, 'Disconnected from Mongoose')

0 commit comments

Comments
 (0)