in modules/backend/migrations/1516948939797-migrate-configs.js [249:317]
function migrateDomain(clustersModel, cachesModel, domainsModel, domain) {
const cachesCnt = _.size(domain.caches);
if (cachesCnt < 1) {
if (_debug)
log(`Found domain model not linked to cache [domain=${domain._id}]`);
return getClusterForMigration(clustersModel, domain.space)
.then((clusterLostFound) => linkDomainToCluster(clustersModel, clusterLostFound, domainsModel, domain))
.then(() => getCacheForMigration(clustersModel, cachesModel, domain.space))
.then((cacheLostFound) => linkDomainToCache(cachesModel, cacheLostFound, domainsModel, domain))
.catch((err) => error(`Failed to migrate not linked domain [domain=${domain._id}]`, err));
}
if (_.isEmpty(domain.clusters)) {
const cachesCnt = _.size(domain.caches);
if (_debug)
log(`Found domain model without cluster: [domain=${domain._id}, cachesCnt=${cachesCnt}]`);
const grpByClusters = {};
return cachesModel.find({_id: {$in: domain.caches}}).lean().exec()
.then((caches) => {
if (caches) {
_.forEach(caches, (cache) => {
const c = _.get(grpByClusters, cache.clusters[0]);
if (c)
c.push(cache._id);
else
grpByClusters[cache.clusters[0]] = [cache._id];
});
return _.reduce(_.keys(grpByClusters), (start, cluster, idx) => start.then(() => {
const domainId = domain._id;
const clusterCaches = grpByClusters[cluster];
if (idx > 0) {
delete domain._id;
domain.caches = clusterCaches;
return domainsModel.create(domain)
.then((clonedDomain) => {
return cachesModel.updateOne({_id: {$in: clusterCaches}}, {$addToSet: {domains: clonedDomain._id}}).exec()
.then(() => clonedDomain);
})
.then((clonedDomain) => linkDomainToCluster(clustersModel, {_id: cluster, name: `stub${idx}`}, domainsModel, clonedDomain))
.then(() => {
return cachesModel.updateMany({_id: {$in: clusterCaches}}, {$pull: {domains: domainId}}).exec();
});
}
return domainsModel.updateOne({_id: domainId}, {caches: clusterCaches}).exec()
.then(() => linkDomainToCluster(clustersModel, {_id: cluster, name: `stub${idx}`}, domainsModel, domain));
}), Promise.resolve());
}
error(`Found domain with orphaned caches: [domain=${domain._id}, caches=${domain.caches}]`);
return Promise.resolve();
})
.catch((err) => error(`Failed to migrate domain [domain=${domain._id}]`, err));
}
// Nothing to migrate, other domains will be migrated with caches.
return Promise.resolve();
}