fix: migration in loop due to cornercase

This commit is contained in:
=
2024-11-16 00:37:57 +05:30
parent 796f76da46
commit d4cfd0b6ed
@@ -2,7 +2,7 @@ import { Knex } from "knex";
import { TableName } from "../schemas"; import { TableName } from "../schemas";
const BATCH_SIZE = 30_000; const BATCH_SIZE = 10_000;
export async function up(knex: Knex): Promise<void> { export async function up(knex: Knex): Promise<void> {
const hasAuthMethodColumnAccessToken = await knex.schema.hasColumn(TableName.IdentityAccessToken, "authMethod"); const hasAuthMethodColumnAccessToken = await knex.schema.hasColumn(TableName.IdentityAccessToken, "authMethod");
@@ -12,7 +12,25 @@ export async function up(knex: Knex): Promise<void> {
t.string("authMethod").nullable(); t.string("authMethod").nullable();
}); });
let nullableAccessTokens = await knex(TableName.IdentityAccessToken).whereNull("authMethod").limit(BATCH_SIZE); // first we remove identities without auth method that is unused
let nullableAuthMethodIdentities = [];
do {
const findNullableAuthMethodIdentities = knex(TableName.Identity)
.whereNull("authMethod")
.limit(BATCH_SIZE)
.select("id");
// eslint-disable-next-line no-await-in-loop
nullableAuthMethodIdentities = await knex(TableName.Identity)
.whereIn("id", findNullableAuthMethodIdentities)
.del()
.returning("id");
} while (nullableAuthMethodIdentities.length > 0);
let nullableAccessTokens = await knex(TableName.IdentityAccessToken)
.whereNull("authMethod")
.limit(BATCH_SIZE)
.select("id");
let totalUpdated = 0; let totalUpdated = 0;
do { do {
@@ -33,7 +51,10 @@ export async function up(knex: Knex): Promise<void> {
}); });
// eslint-disable-next-line no-await-in-loop // eslint-disable-next-line no-await-in-loop
nullableAccessTokens = await knex(TableName.IdentityAccessToken).whereNull("authMethod").limit(BATCH_SIZE); nullableAccessTokens = await knex(TableName.IdentityAccessToken)
.whereNull("authMethod")
.limit(BATCH_SIZE)
.select("id");
totalUpdated += batchIds.length; totalUpdated += batchIds.length;
console.log(`Updated ${batchIds.length} access tokens in batch <> Total updated: ${totalUpdated}`); console.log(`Updated ${batchIds.length} access tokens in batch <> Total updated: ${totalUpdated}`);