Skip to content

Commit

Permalink
Merge pull request #250 from UN-OCHA/HPC-9551
Browse files Browse the repository at this point in the history
HPC-9551: Chunk model version's bulk update
  • Loading branch information
enxtur authored May 7, 2024
2 parents 42343f7 + a33d702 commit bd7a2bc
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 11 deletions.
1 change: 1 addition & 0 deletions config/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ export const CONFIG = {
name: process.env.NODE_ENV,
authBaseUrl: process.env.AUTHBASE_URL,
db: {
batchLimit: 32_768, // 2^15,
connection: process.env.POSTGRES_SERVER,
logging: !!parseInt(process.env.POSTGRES_LOGGING ?? ''),
poolMin: 2,
Expand Down
35 changes: 24 additions & 11 deletions src/common-libs/plan/versioning.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ import {
createBrandedValue,
type Brand,
} from '@unocha/hpc-api-core/src/util/types';
import { chunk } from 'lodash';
import { CONFIG } from '../../../config';

// eslint-disable-next-line @typescript-eslint/no-explicit-any
type AnyModelId = Brand<number, any, any>;
Expand Down Expand Up @@ -257,18 +259,29 @@ const updateBaseAndVersionModelTags = async (
},
skipValidation: skipAttachmentsAndMeasurementsValidation(tableName),
});
await versionModel.update({
values: {
latestTaggedVersion: false,
...(tag.public ? { currentVersion: false } : {}),
},
where: {
id: {
[models.Op.IN]: oldVersions.map((v) => v.id as AnyModelId),
/**
* We have to limit the number of parameters that can be passed to a query.
* Limit is 32768 (2^15) which is batchLimit in the config file.
* latestTaggedVersion, currentVersion, and updatedAt is also included in the parameters
* so we subtract 3 from the limit to get the maximum number of parameters that can be passed to a query
*/
for (const chunkedOldVersionModelIDs of chunk(
oldVersions.map((v) => v.id as AnyModelId),
CONFIG.db.batchLimit - 3
)) {
await versionModel.update({
values: {
latestTaggedVersion: false,
...(tag.public ? { currentVersion: false } : {}),
},
},
skipValidation: skipAttachmentsAndMeasurementsValidation(tableName),
});
where: {
id: {
[models.Op.IN]: chunkedOldVersionModelIDs,
},
},
skipValidation: skipAttachmentsAndMeasurementsValidation(tableName),
});
}
};

const updateBaseModelTags = async (
Expand Down

0 comments on commit bd7a2bc

Please sign in to comment.