Commit 60187866 authored by Vincent Bechu's avatar Vincent Bechu

Release Version 3.15.0

parent c0a7c667
...@@ -8462,6 +8462,12 @@ return new Parser; ...@@ -8462,6 +8462,12 @@ return new Parser;
}); });
this._use_remote_post = spec.use_remote_post || false; this._use_remote_post = spec.use_remote_post || false;
// Number of request we allow browser execution for attachments
this._parallel_operation_attachment_amount =
spec.parallel_operation_attachment_amount || 1;
// Number of request we allow browser execution for documents
this._parallel_operation_amount =
spec.parallel_operation_amount || 1;
this._conflict_handling = spec.conflict_handling || 0; this._conflict_handling = spec.conflict_handling || 0;
// 0: no resolution (ie, throw an Error) // 0: no resolution (ie, throw an Error)
...@@ -8604,6 +8610,30 @@ return new Parser; ...@@ -8604,6 +8610,30 @@ return new Parser;
// Do not sync the signature document // Do not sync the signature document
skip_document_dict[context._signature_hash] = null; skip_document_dict[context._signature_hash] = null;
function dispatchQueue(function_used, argument_list, number_queue) {
var result_promise_list = [],
i;
function pushAndExecute(queue) {
queue
.push(function () {
if (argument_list.length > 0) {
var argument_array = argument_list.shift();
argument_array[0] = queue;
function_used.apply(context, argument_array);
pushAndExecute(queue);
}
});
}
for (i = 0; i < number_queue; i += 1) {
result_promise_list.push(new RSVP.Queue());
pushAndExecute(result_promise_list[i]);
}
if (number_queue > 1) {
return RSVP.all(result_promise_list);
}
return result_promise_list[0];
}
function propagateAttachmentDeletion(skip_attachment_dict, function propagateAttachmentDeletion(skip_attachment_dict,
destination, destination,
...@@ -9184,7 +9214,7 @@ return new Parser; ...@@ -9184,7 +9214,7 @@ return new Parser;
}) })
.push(function (result_list) { .push(function (result_list) {
var i, var i,
sub_queue = new RSVP.Queue(); argument_list = [];
function getResult(j) { function getResult(j) {
return function (id) { return function (id) {
...@@ -9196,20 +9226,26 @@ return new Parser; ...@@ -9196,20 +9226,26 @@ return new Parser;
} }
for (i = 0; i < result_list.length; i += 1) { for (i = 0; i < result_list.length; i += 1) {
checkSignatureDifference(sub_queue, source, destination, argument_list[i] = [undefined, source, destination,
id_list[i].parameter_list[0], id_list[i].parameter_list[0],
conflict_force, conflict_revert, conflict_force, conflict_revert,
conflict_ignore, conflict_ignore,
document_status_list[i].is_creation, document_status_list[i].is_creation,
document_status_list[i].is_modification, document_status_list[i].is_modification,
getResult(i), options); getResult(i), options];
} }
return sub_queue; return dispatchQueue(
checkSignatureDifference,
argument_list,
options.operation_amount
);
}); });
} }
function pushStorage(source, destination, options) { function pushStorage(source, destination, options) {
var queue = new RSVP.Queue(); var queue = new RSVP.Queue(),
argument_list = [],
argument_list_deletion = [];
if (!options.hasOwnProperty("use_post")) { if (!options.hasOwnProperty("use_post")) {
options.use_post = false; options.use_post = false;
} }
...@@ -9246,6 +9282,7 @@ return new Parser; ...@@ -9246,6 +9282,7 @@ return new Parser;
signature_dict[result_list[1].data.rows[i].id] = i; signature_dict[result_list[1].data.rows[i].id] = i;
} }
} }
i = 0;
for (key in local_dict) { for (key in local_dict) {
if (local_dict.hasOwnProperty(key)) { if (local_dict.hasOwnProperty(key)) {
is_modification = signature_dict.hasOwnProperty(key) is_modification = signature_dict.hasOwnProperty(key)
...@@ -9263,29 +9300,50 @@ return new Parser; ...@@ -9263,29 +9300,50 @@ return new Parser;
is_modification: is_modification is_modification: is_modification
}); });
} else { } else {
checkSignatureDifference(queue, source, destination, key, argument_list[i] = [undefined, source, destination,
options.conflict_force, key,
options.conflict_revert, options.conflict_force,
options.conflict_ignore, options.conflict_revert,
is_creation, is_modification, options.conflict_ignore,
source.get.bind(source), is_creation, is_modification,
options); source.get.bind(source),
options];
i += 1;
} }
} }
} }
} }
queue
.push(function () {
return dispatchQueue(
checkSignatureDifference,
argument_list,
options.operation_amount
);
});
if (options.check_deletion === true) { if (options.check_deletion === true) {
i = 0;
for (key in signature_dict) { for (key in signature_dict) {
if (signature_dict.hasOwnProperty(key)) { if (signature_dict.hasOwnProperty(key)) {
if (!local_dict.hasOwnProperty(key)) { if (!local_dict.hasOwnProperty(key)) {
checkLocalDeletion(queue, destination, key, source, argument_list_deletion[i] = [undefined,
options.conflict_force, destination, key,
options.conflict_revert, source,
options.conflict_ignore, options.conflict_force,
options); options.conflict_revert,
options.conflict_ignore,
options];
i += 1;
} }
} }
} }
queue.push(function () {
return dispatchQueue(
checkLocalDeletion,
argument_list_deletion,
options.operation_amount
);
});
} }
if ((options.use_bulk_get === true) && (document_list.length !== 0)) { if ((options.use_bulk_get === true) && (document_list.length !== 0)) {
checkBulkSignatureDifference(queue, source, destination, checkBulkSignatureDifference(queue, source, destination,
...@@ -9298,6 +9356,12 @@ return new Parser; ...@@ -9298,6 +9356,12 @@ return new Parser;
}); });
} }
function repairDocument(queue, id) {
queue.push(function () {
return repairDocumentAttachment(id);
});
}
return new RSVP.Queue() return new RSVP.Queue()
.push(function () { .push(function () {
// Ensure that the document storage is usable // Ensure that the document storage is usable
...@@ -9350,7 +9414,8 @@ return new Parser; ...@@ -9350,7 +9414,8 @@ return new Parser;
CONFLICT_CONTINUE), CONFLICT_CONTINUE),
check_modification: context._check_local_modification, check_modification: context._check_local_modification,
check_creation: context._check_local_creation, check_creation: context._check_local_creation,
check_deletion: context._check_local_deletion check_deletion: context._check_local_deletion,
operation_amount: context._parallel_operation_amount
}); });
} }
}) })
...@@ -9381,7 +9446,8 @@ return new Parser; ...@@ -9381,7 +9446,8 @@ return new Parser;
CONFLICT_CONTINUE), CONFLICT_CONTINUE),
check_modification: context._check_remote_modification, check_modification: context._check_remote_modification,
check_creation: context._check_remote_creation, check_creation: context._check_remote_creation,
check_deletion: context._check_remote_deletion check_deletion: context._check_remote_deletion,
operation_amount: context._parallel_operation_amount
}); });
} }
}) })
...@@ -9397,19 +9463,19 @@ return new Parser; ...@@ -9397,19 +9463,19 @@ return new Parser;
return context._signature_sub_storage.allDocs() return context._signature_sub_storage.allDocs()
.push(function (result) { .push(function (result) {
var i, var i,
repair_document_queue = new RSVP.Queue(); argument_list = [],
len = result.data.total_rows;
function repairDocument(id) { for (i = 0; i < len; i += 1) {
repair_document_queue argument_list.push(
.push(function () { [undefined, result.data.rows[i].id]
return repairDocumentAttachment(id); );
});
}
for (i = 0; i < result.data.total_rows; i += 1) {
repairDocument(result.data.rows[i].id);
} }
return repair_document_queue; return dispatchQueue(
repairDocument,
argument_list,
context._parallel_operation_attachment_amount
);
}); });
} }
}); });
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
{ {
"name": "jio", "name": "jio",
"version": "v3.14.0", "version": "v3.15.0",
"license": "LGPLv3", "license": "LGPLv3",
"author": "Nexedi SA", "author": "Nexedi SA",
"contributors": [ "contributors": [
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment