couchbase-index-manager
Version:
Manage Couchbase indexes during the CI/CD process
79 lines • 4.33 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.UpdateIndexMutation = void 0;
const tslib_1 = require("tslib");
const chalk_1 = tslib_1.__importDefault(require("chalk"));
const lodash_1 = require("lodash");
const create_index_mutation_1 = require("./create-index-mutation");
const drop_index_mutation_1 = require("./drop-index-mutation");
const index_mutation_1 = require("./index-mutation");
/**
* Represents an index mutation which updates an existing index
*/
class UpdateIndexMutation extends index_mutation_1.IndexMutation {
constructor(definition, name, withClause, existingIndex) {
super(definition, name);
this.existingIndex = existingIndex;
this.withClause = withClause || {};
}
print(logger) {
var _a;
logger.info(chalk_1.default.cyanBright(`Update: ${this.displayName}`));
if (!(0, lodash_1.isEqual)(this.existingIndex.index_key, this.definition.index_key)) {
logger.info(chalk_1.default.cyanBright(` Keys: ${this.formatKeys(this.existingIndex)}`));
logger.info(chalk_1.default.cyanBright(` -> ${this.formatKeys(this.definition)}`));
}
if (this.definition.partition || this.existingIndex.partition) {
if (!(0, lodash_1.isEqual)(this.existingIndex.partition || '', this.definition.getPartitionString())) {
logger.info(chalk_1.default.cyanBright(` Part: ${this.existingIndex.partition || 'none'}`));
logger.info(chalk_1.default.cyanBright(` -> ${this.definition.getPartitionString() || 'none'}`));
}
if (this.definition.partition &&
this.definition.partition.num_partition &&
this.existingIndex.num_partition !==
this.definition.partition.num_partition) {
logger.info(chalk_1.default.cyanBright(`# Part: ${this.existingIndex.num_partition}`));
logger.info(chalk_1.default.cyanBright(` -> ${this.definition.partition.num_partition}`));
}
}
if (!(0, lodash_1.isEqual)(this.existingIndex.condition || '', this.definition.condition || '')) {
logger.info(chalk_1.default.cyanBright(` Cond: ${this.existingIndex.condition || 'none'}`));
logger.info(chalk_1.default.cyanBright(` -> ${this.definition.condition || 'none'}`));
}
const hasReplica = Math.max((_a = this.definition.num_replica) !== null && _a !== void 0 ? _a : 0, this.existingIndex.num_replica) > 0;
if (!this.definition.manual_replica && hasReplica) {
logger.info(chalk_1.default.cyanBright(` Repl: ${this.definition.num_replica}`));
}
if (this.withClause.nodes && this.existingIndex.nodes &&
!(0, lodash_1.isEqual)(this.withClause.nodes, this.existingIndex.nodes)) {
logger.info(chalk_1.default.cyanBright(` Nodes: ${this.existingIndex.nodes.join()}`));
logger.info(chalk_1.default.cyanBright(` ->: ${this.withClause.nodes.join()}`));
}
if (!(0, lodash_1.isEqual)(!!this.withClause.retain_deleted_xattr, this.existingIndex.retain_deleted_xattr)) {
logger.info(chalk_1.default.cyanBright(` XATTR: ${this.existingIndex.retain_deleted_xattr}`));
logger.info(chalk_1.default.cyanBright(` ->: ${!!this.withClause.retain_deleted_xattr}`));
}
}
/** @inheritDoc */
async execute(manager, logger) {
const dropMutation = new drop_index_mutation_1.DropIndexMutation(this.definition, this.name);
await dropMutation.execute(manager, logger);
const createMutation = new create_index_mutation_1.CreateIndexMutation(this.definition, this.name, this.withClause);
await createMutation.execute(manager, logger);
}
/**
* Formats a list of keys for human readable output
*/
formatKeys(index) {
return index.index_key.join(',');
}
isSafe() {
var _a;
// Safe if there are multiple replicas
// As each update will run in its own phase
return this.definition.manual_replica &&
((_a = this.definition.num_replica) !== null && _a !== void 0 ? _a : 0) > 0;
}
}
exports.UpdateIndexMutation = UpdateIndexMutation;
//# sourceMappingURL=update-index-mutation.js.map