fixed left node db sync issue
This commit is contained in:
parent
44deb33bc5
commit
8e44cb400e
@ -12644,7 +12644,7 @@
|
|||||||
msg_obj.protocol = '__ALL_SUPERNODES_MSG__';
|
msg_obj.protocol = '__ALL_SUPERNODES_MSG__';
|
||||||
msg_obj.event = 'supernode_went_down';
|
msg_obj.event = 'supernode_went_down';
|
||||||
msg_obj.data = {down_flo_id: getFLOId};
|
msg_obj.data = {down_flo_id: getFLOId};
|
||||||
msg_obj.subject_flo_id = getFLOId;
|
msg_obj.initialSender = localbitcoinplusplus.wallets.my_local_flo_address;
|
||||||
msg_obj.su_pubKey = localbitcoinplusplus.wallets.my_local_flo_public_key;
|
msg_obj.su_pubKey = localbitcoinplusplus.wallets.my_local_flo_public_key;
|
||||||
msg_obj.hash = Crypto.SHA256(msg_obj);
|
msg_obj.hash = Crypto.SHA256(msg_obj);
|
||||||
msg_obj.sign = RM_WALLET.sign(
|
msg_obj.sign = RM_WALLET.sign(
|
||||||
@ -13471,16 +13471,17 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ADD A CONDITION SO THAT ONLY ONE SUPERNODE IN THE LEFT CAN RUN THIS */
|
/* ADD A CONDITION SO THAT ONLY ONE SUPERNODE IN THE LEFT CAN INFORM RIGHT BACKUP SUPERNODE OF DEAD SUPERNODE */
|
||||||
const mcsFloIds = Object.keys(localbitcoinplusplus.myClosestSupernodes)
|
const subjectFloIdClosestNodes = await localbitcoinplusplus.kademlia.determineClosestSupernode('','','', getFLOId);
|
||||||
.map(m=>m.trader_flo_address);
|
//const alowed_supernodes = subjectFloIdClosestNodes.slice(-localbitcoinplusplus.master_configurations.MaxBackups);
|
||||||
const idx = mcsFloIds.indexOf(getFLOId);
|
//const alowed_supernodes_flo_ids = alowed_supernodes.map(m=>m.trader_flo_address);
|
||||||
if(idx>=0) {
|
//const my_idx = subjectFloIdClosestNodes.indexOf(localbitcoinplusplus.wallets.my_local_flo_address);
|
||||||
// Get the list of left Supernodes of disconnected Supernodes
|
const idx = Object.keys(localbitcoinplusplus.myClosestSupernodes).indexOf(getFLOId);
|
||||||
console.table(mcs);
|
//if(alowed_supernodes_flo_ids.includes(localbitcoinplusplus.wallets.my_local_flo_address)) {
|
||||||
let getLeftSusOfDisconnectedSu = mcs
|
// Get the list of "left side" Supernodes of the disconnected Supernode
|
||||||
.filter((f,i)=>(i<=idx
|
let getLeftSusOfDisconnectedSu = Object
|
||||||
&& localbitcoinplusplus.wallets.my_local_flo_address!==f.trader_flo_address));
|
.values(localbitcoinplusplus.myClosestSupernodes)
|
||||||
|
.slice(0, idx);
|
||||||
|
|
||||||
console.table(getLeftSusOfDisconnectedSu);
|
console.table(getLeftSusOfDisconnectedSu);
|
||||||
|
|
||||||
@ -13488,6 +13489,11 @@
|
|||||||
|
|
||||||
for (let ln = 0; ln < getLeftSusOfDisconnectedSu.length; ln++) {
|
for (let ln = 0; ln < getLeftSusOfDisconnectedSu.length; ln++) {
|
||||||
const leftNodeObj = getLeftSusOfDisconnectedSu[ln];
|
const leftNodeObj = getLeftSusOfDisconnectedSu[ln];
|
||||||
|
if(localbitcoinplusplus.wallets.my_local_flo_address
|
||||||
|
=== leftNodeObj.trader_flo_address) continue;
|
||||||
|
// First Check
|
||||||
|
aNearerLeftSupernodeIsAlive=leftNodeObj.is_live||false;
|
||||||
|
// Second check
|
||||||
let conns = localbitcoinplusplus.backupWS[leftNodeObj.trader_flo_address];
|
let conns = localbitcoinplusplus.backupWS[leftNodeObj.trader_flo_address];
|
||||||
if(typeof conns === "object"
|
if(typeof conns === "object"
|
||||||
&& leftNodeObj.trader_flo_address !== getFLOId
|
&& leftNodeObj.trader_flo_address !== getFLOId
|
||||||
@ -13500,7 +13506,7 @@
|
|||||||
if(!aNearerLeftSupernodeIsAlive) {
|
if(!aNearerLeftSupernodeIsAlive) {
|
||||||
localbitcoinplusplus.actions.informAllANodeLeft(getFLOId);
|
localbitcoinplusplus.actions.informAllANodeLeft(getFLOId);
|
||||||
}
|
}
|
||||||
}
|
//}
|
||||||
|
|
||||||
msg = `INFO: Supernode ${getFLOId} left.`;
|
msg = `INFO: Supernode ${getFLOId} left.`;
|
||||||
}
|
}
|
||||||
@ -14174,14 +14180,23 @@
|
|||||||
if (localbitcoinplusplus.master_configurations.supernodesPubKeys
|
if (localbitcoinplusplus.master_configurations.supernodesPubKeys
|
||||||
.includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
|
.includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
|
||||||
|
|
||||||
const suList = await getNextSupernode();
|
let suList = await getNextSupernode();
|
||||||
let sn = suList.trader_flo_address;
|
let sn = suList.trader_flo_address;
|
||||||
|
|
||||||
|
if(sn===msg_obj.data.down_flo_id || sn===localbitcoinplusplus.wallets.my_local_flo_address) {
|
||||||
|
suList = await getNextSupernode(sn);
|
||||||
|
sn = suList.trader_flo_address;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(typeof sn !== "string") return;
|
||||||
|
|
||||||
|
msg_obj.receiverFloAddress = sn;
|
||||||
|
|
||||||
tempWS = {};
|
tempWS = {};
|
||||||
//for(let sn in localbitcoinplusplus.myClosestSupernodes) {
|
//for(let sn in localbitcoinplusplus.myClosestSupernodes) {
|
||||||
(function informOneSupernode(sn) {
|
(function informOneSupernode(sn) {
|
||||||
if((sn!==localbitcoinplusplus.wallets.my_local_flo_address
|
if(sn!==localbitcoinplusplus.wallets.my_local_flo_address
|
||||||
|| sn!==msg_obj.subject_flo_id)
|
&& sn!==msg_obj.data.down_flo_id
|
||||||
&& websocket.readyState===1) {
|
&& websocket.readyState===1) {
|
||||||
|
|
||||||
const url = `ws://${localbitcoinplusplus.myClosestSupernodes[sn].ip}:${localbitcoinplusplus.myClosestSupernodes[sn].port}`;
|
const url = `ws://${localbitcoinplusplus.myClosestSupernodes[sn].ip}:${localbitcoinplusplus.myClosestSupernodes[sn].port}`;
|
||||||
@ -14200,7 +14215,7 @@
|
|||||||
let closedFloId = await switchMyWS.getFloIdFromWSUrl(evt.srcElement.url);
|
let closedFloId = await switchMyWS.getFloIdFromWSUrl(evt.srcElement.url);
|
||||||
let nxtSu = await getNextSupernode(closedFloId);
|
let nxtSu = await getNextSupernode(closedFloId);
|
||||||
if ((nxtSu.trader_flo_address==localbitcoinplusplus.wallets.my_local_flo_address
|
if ((nxtSu.trader_flo_address==localbitcoinplusplus.wallets.my_local_flo_address
|
||||||
|| nxtSu.trader_flo_address==msg_obj.subject_flo_id)) {
|
|| nxtSu.trader_flo_address==msg_obj.data.down_flo_id)) {
|
||||||
let nxtSu2 = await getNextSupernode(nxtSu.trader_flo_address);
|
let nxtSu2 = await getNextSupernode(nxtSu.trader_flo_address);
|
||||||
informOneSupernode(nxtSu2.trader_flo_address);
|
informOneSupernode(nxtSu2.trader_flo_address);
|
||||||
} else if(typeof nxtSu !== "undefined") {
|
} else if(typeof nxtSu !== "undefined") {
|
||||||
@ -20815,6 +20830,11 @@
|
|||||||
if (!localbitcoinplusplus.master_configurations.supernodesPubKeys
|
if (!localbitcoinplusplus.master_configurations.supernodesPubKeys
|
||||||
.includes(res_obj.su_pubKey)) return;
|
.includes(res_obj.su_pubKey)) return;
|
||||||
|
|
||||||
|
// Break any possiblity of a loop
|
||||||
|
if(typeof res_obj.initialSender==="string"
|
||||||
|
&& res_obj.initialSender===
|
||||||
|
localbitcoinplusplus.my_local_flo_address.my_local_flo_address) return;
|
||||||
|
|
||||||
const msg_obj = {};
|
const msg_obj = {};
|
||||||
msg_obj.protocol = res_obj.protocol;
|
msg_obj.protocol = res_obj.protocol;
|
||||||
msg_obj.event = res_obj.event;
|
msg_obj.event = res_obj.event;
|
||||||
@ -20830,7 +20850,25 @@
|
|||||||
|
|
||||||
switch (res_obj.event) {
|
switch (res_obj.event) {
|
||||||
case "supernode_went_down":
|
case "supernode_went_down":
|
||||||
|
// This should be run by only 1 Supernode who is the reciever
|
||||||
|
if(localbitcoinplusplus.my_local_flo_address.my_local_flo_address
|
||||||
|
!== res_obj.receiverFloAddress) return;
|
||||||
reactor.dispatchEvent('fireNodeGoodByeEvent', res_obj.data.down_flo_id);
|
reactor.dispatchEvent('fireNodeGoodByeEvent', res_obj.data.down_flo_id);
|
||||||
|
|
||||||
|
// SYNC DATA OF ALL SUPERNODES IN MIDDLE OF SENDER AND RECEIVER
|
||||||
|
// Get the Supernodes in between sender and receiver of this message
|
||||||
|
const total_supernodes = Object.keys(localbitcoinplusplus.myClosestSupernodes).length;
|
||||||
|
for (let q = total_supernodes-1; q>=0; q--) {
|
||||||
|
const su_obj = localbitcoinplusplus.myClosestSupernodes[q];
|
||||||
|
if(su_obj.trader_flo_address===res_obj.receiverFloAddress) break;
|
||||||
|
if(su_obj.trader_flo_address===localbitcoinplusplus.wallets.my_local_flo_address
|
||||||
|
|| su_obj.is_live===true) continue;
|
||||||
|
localbitcoinplusplus.actions.sync_backup_supernode_from_backup_supernode(
|
||||||
|
localbitcoinplusplus.wallets.my_local_flo_address,
|
||||||
|
"",
|
||||||
|
su_obj.trader_flo_address
|
||||||
|
);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user