queue blob and channel deletions per-user
This commit is contained in:
parent
bd3e18d1a8
commit
e527867e2e
@ -54,16 +54,8 @@ Channel.clearOwnedChannel = function (Env, safeKey, channelId, cb, Server) {
|
||||
});
|
||||
};
|
||||
|
||||
Channel.removeOwnedChannel = function (Env, safeKey, channelId, cb, Server) {
|
||||
if (typeof(channelId) !== 'string' || !Core.isValidId(channelId)) {
|
||||
return cb('INVALID_ARGUMENTS');
|
||||
}
|
||||
var archiveOwnedChannel = function (Env, safeKey, channelId, cb, Server) {
|
||||
var unsafeKey = Util.unescapeKeyCharacters(safeKey);
|
||||
|
||||
if (Env.blobStore.isFileId(channelId)) {
|
||||
return void Env.removeOwnedBlob(channelId, safeKey, cb);
|
||||
}
|
||||
|
||||
Metadata.getMetadata(Env, channelId, function (err, metadata) {
|
||||
if (err) { return void cb(err); }
|
||||
if (!Core.hasOwners(metadata)) { return void cb('E_NO_OWNERS'); }
|
||||
@ -124,6 +116,24 @@ Channel.removeOwnedChannel = function (Env, safeKey, channelId, cb, Server) {
|
||||
});
|
||||
};
|
||||
|
||||
Channel.removeOwnedChannel = function (Env, safeKey, channelId, __cb, Server) {
|
||||
var _cb = Util.once(Util.mkAsync(__cb));
|
||||
|
||||
if (typeof(channelId) !== 'string' || !Core.isValidId(channelId)) {
|
||||
return _cb('INVALID_ARGUMENTS');
|
||||
}
|
||||
|
||||
// archiving large channels or files can be expensive, so do it one at a time
|
||||
// for any given user to ensure that nobody can use too much of the server's resources
|
||||
Env.queueDeletes(safeKey, function (next) {
|
||||
var cb = Util.both(_cb, next);
|
||||
if (Env.blobStore.isFileId(channelId)) {
|
||||
return void Env.removeOwnedBlob(channelId, safeKey, cb);
|
||||
}
|
||||
archiveOwnedChannel(Env, safeKey, channelId, cb, Server);
|
||||
});
|
||||
};
|
||||
|
||||
Channel.trimHistory = function (Env, safeKey, data, cb) {
|
||||
if (!(data && typeof(data.channel) === 'string' && typeof(data.hash) === 'string' && data.hash.length === 64)) {
|
||||
return void cb('INVALID_ARGS');
|
||||
|
||||
@ -38,6 +38,7 @@ module.exports.create = function (config, cb) {
|
||||
metadata_cache: {},
|
||||
channel_cache: {},
|
||||
queueStorage: WriteQueue(),
|
||||
queueDeletes: WriteQueue(),
|
||||
|
||||
batchIndexReads: BatchRead("HK_GET_INDEX"),
|
||||
batchMetadata: BatchRead('GET_METADATA'),
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user