情景:
用户上传一个X大小的文件,该文件被分成12个相等的块;如果除法的结果不是无符号整数,我在上限上舍入它,所有的块都将具有相同的长度,除了最后一个
对12个块进行预处理,并创建6个擦除块(4个本地和2个全局),目的是恢复文件;我选择这种方法来减少所需的磁盘大小并优化恢复并添加一些容错
工作方案代码
function erasureChunkCreate(chunks,callback) {
let erasureChunks = {};
let locale = undefined;
let global = undefined;
erasureChunks = {'local': {}, 'global': {}};
async.eachSeries(chunks, (item, callback_times) => {
if (locale === undefined)
locale = item.chunk.slice();
else
locale = xor(locale, item.chunk);
if (item.seq_no % 3 === 2) {
erasureChunks['local'][Math.ceil(item.seq_no / 3)] = locale;
if (global === undefined)
global = locale.slice();
else
global = xor(global, locale);
locale = undefined;
}
callback_times(null);
}, (err_times) => {
if (err_times)
return callback(err_times, null);
erasureChunks['global'] = global;
return callback(null, erasureChunks);
});
}
问题:
意外情景引导代码部分
if (locale === undefined)
locale = item.chunk.slice();
else
locale = xor(locale, item.chunk);
if (global === undefined)
global = locale.slice();
else
global = xor(global, locale);
if (item.seq_no % 3 === 2) {
erasureChunks['local'][Math.ceil(item.seq_no / 3)] = locale;
locale = undefined;
}
我尝试了什么:
使用的模块: