feat: optimize group rename

removed async.each
v1.18.x
Barış Soner Uşaklı 6 years ago
parent 8d319e4280
commit 48538b28be

@ -225,9 +225,8 @@ module.exports = function (Groups) {
if (err) {
return next(err);
}
async.each(groups, function (group, next) {
renameGroupMember('group:' + group + ':members', oldName, newName, next);
}, next);
const keys = groups.map(group => 'group:' + group + ':members');
renameGroupsMember(keys, oldName, newName, next);
});
},
async.apply(db.rename, 'group:' + oldName, 'group:' + newName),
@ -237,10 +236,8 @@ module.exports = function (Groups) {
async.apply(db.rename, 'group:' + oldName + ':invited', 'group:' + newName + ':invited'),
async.apply(db.rename, 'group:' + oldName + ':member:pids', 'group:' + newName + ':member:pids'),
async.apply(renameGroupMember, 'groups:createtime', oldName, newName),
async.apply(renameGroupMember, 'groups:visible:createtime', oldName, newName),
async.apply(renameGroupMember, 'groups:visible:memberCount', oldName, newName),
async.apply(renameGroupMember, 'groups:visible:name', oldName.toLowerCase() + ':' + oldName, newName.toLowerCase() + ':' + newName),
async.apply(renameGroupsMember, ['groups:createtime', 'groups:visible:createtime', 'groups:visible:memberCount'], oldName, newName),
async.apply(renameGroupsMember, ['groups:visible:name'], oldName.toLowerCase() + ':' + oldName, newName.toLowerCase() + ':' + newName),
function (next) {
plugins.fireHook('action:group.rename', {
old: oldName,
@ -274,25 +271,25 @@ module.exports = function (Groups) {
}, callback);
}
function renameGroupMember(group, oldName, newName, callback) {
var score;
function renameGroupsMember(keys, oldName, newName, callback) {
var scores;
async.waterfall([
function (next) {
db.isSortedSetMember(group, oldName, next);
db.isMemberOfSortedSets(keys, oldName, next);
},
function (isMember, next) {
if (!isMember) {
function (isMembers, next) {
keys = keys.filter((key, index) => isMembers[index]);
if (!keys.length) {
return callback();
}
db.sortedSetScore(group, oldName, next);
db.sortedSetsScore(keys, oldName, next);
},
function (_score, next) {
score = _score;
db.sortedSetRemove(group, oldName, next);
function (_scores, next) {
scores = _scores;
db.sortedSetsRemove(keys, oldName, next);
},
function (next) {
db.sortedSetAdd(group, score, newName, next);
db.sortedSetsAdd(keys, scores, newName, next);
},
], callback);
}

Loading…
Cancel
Save