Skip to content

Commit

Permalink
7724 use tenantdb reindex (#7733)
Browse files Browse the repository at this point in the history
* Reindex now uses the common tenant DB.

* New script for simply setting ES index settings.
  • Loading branch information
RafaPolit authored Feb 28, 2025
1 parent 2b5e7cb commit 04de898
Show file tree
Hide file tree
Showing 3 changed files with 104 additions and 4 deletions.
98 changes: 98 additions & 0 deletions database/elastic_set_tenant_settings.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
import { config } from 'api/config';
import { tenants } from 'api/tenants/tenantContext';
import { DB } from 'api/odm';
import { IndexError } from 'api/search/entitiesIndex';

import { legacyLogger } from '../app/api/log';

const getIndexUrl = () => {
const elasticUrl = config.elasticsearch_nodes[0];
return `${elasticUrl}/${tenants.current().indexName}`;
};

const headers = {
Accept: 'application/json',
'Content-Type': 'application/json',
};

const setIndexSettings = async numberOfReplicas => {
const body = JSON.stringify({
index: {
number_of_replicas: numberOfReplicas,
},
});

const result = await fetch(`${getIndexUrl()}/_settings`, {
method: 'PUT',
headers,
body,
});

return result;
};

const setTenantSettings = async () => {
const tenantReplicas = tenants.current().featureFlags?.esReplicas || 0;
process.stdout.write(`Setting ${tenantReplicas} ES Replicas...`);
const result = setIndexSettings(tenantReplicas);
process.stdout.write(' [done]\r\n');
return result;
};

const endScriptProcedures = async () =>
new Promise((resolve, reject) => {
(async () => {
try {
await DB.disconnect();
resolve();
} catch (err) {
reject(err);
}
})();
});

const processErrors = async err => {
if (err instanceof IndexError) {
process.stdout.write('\r\nWarning! Errors found during operation.\r\n');
} else {
const errorMsg =
err instanceof Error
? `${err.message}\r\n${JSON.stringify(err, null, ' ')}`
: JSON.stringify(err, null, ' ');
legacyLogger.error(`Uncaught error.\r\n${errorMsg}\r\nWill exit with (1)\r\n`);
await endScriptProcedures();
throw err;
}
};

process.on('unhandledRejection', error => {
throw error;
});

let dbAuth = {};

if (process.env.DBUSER) {
dbAuth = {
auth: { authSource: 'admin' },
user: process.env.DBUSER,
pass: process.env.DBPASS,
};
}

DB.connect(config.DBHOST, dbAuth).then(async () => {
const start = Date.now();
await tenants.setupTenants();

await tenants.run(async () => {
process.stdout.write(`Setting ES index settings for ${tenants.current().indexName}...\r\n`);
try {
await setTenantSettings();
} catch (err) {
processErrors(err);
}
await endScriptProcedures();
}, process.env.UWAZI_TENANT || config.defaultTenant.name);

const end = Date.now();
process.stdout.write(`Done, took ${(end - start) / 1000} seconds\n`);
});
9 changes: 5 additions & 4 deletions database/reindex_elastic.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import { legacyLogger } from '../app/api/log';

const getIndexUrl = () => {
const elasticUrl = config.elasticsearch_nodes[0];
return `${elasticUrl}/${config.defaultTenant.indexName}`;
return `${elasticUrl}/${tenants.current().indexName}`;
};

const headers = {
Expand Down Expand Up @@ -90,7 +90,7 @@ const indexEntities = async () => {

/*eslint-disable max-statements*/
const prepareIndex = async () => {
process.stdout.write(`Deleting index ${config.defaultTenant.indexName}...`);
process.stdout.write(`Deleting index ${tenants.current().indexName}...`);
try {
await fetch(getIndexUrl(), { method: 'delete' });
} catch (err) {
Expand All @@ -104,7 +104,7 @@ const prepareIndex = async () => {
}
process.stdout.write(' [done]\n');

process.stdout.write(`Creating index ${config.defaultTenant.indexName}...\r\n`);
process.stdout.write(`Creating index ${tenants.current().indexName}...\r\n`);
process.stdout.write(' - Base properties mapping\r\n');

await fetch(getIndexUrl(), {
Expand Down Expand Up @@ -168,6 +168,7 @@ if (process.env.DBUSER) {

DB.connect(config.DBHOST, dbAuth).then(async () => {
const start = Date.now();
await tenants.setupTenants();

await tenants.run(async () => {
try {
Expand All @@ -179,7 +180,7 @@ DB.connect(config.DBHOST, dbAuth).then(async () => {
await processErrors(err);
}
await endScriptProcedures();
});
}, process.env.UWAZI_TENANT || config.defaultTenant.name);

const end = Date.now();
process.stdout.write(`Done, took ${(end - start) / 1000} seconds\n`);
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
"hot-inspect": "export HOT=true; export BABEL_ENV=debug; yarn run watch-types & yarn dev-server --inspect & yarn run webpack-server",
"hot-debug": "export HOT=true; export BABEL_ENV=debug; node --no-experimental-fetch --inspect=9229 server.js & yarn run webpack-server",
"reindex": "node scripts/run.js ../database/reindex_elastic.js",
"elastic-set-tenant-settings": "node scripts/run.js ../database/elastic_set_tenant_settings.js",
"import-csv": "node --no-experimental-fetch scripts/run.js ../database/import_csv.js",
"blank-state": "node --no-experimental-fetch scripts/bash.js ./database/blank_state.sh",
"admin-user": "node --no-experimental-fetch scripts/bash.js ./database/admin_user.sh",
Expand Down

0 comments on commit 04de898

Please sign in to comment.