fixed backup supernodes backup db sync when primary comes back
This commit is contained in:
parent
a8c94586b7
commit
7cc2577610
@ -12580,13 +12580,6 @@
|
|||||||
if(typeof params.trader_flo_address !="string") return;
|
if(typeof params.trader_flo_address !="string") return;
|
||||||
const my_closest_su_list = await localbitcoinplusplus.kademlia.determineClosestSupernode(params.trader_flo_address);
|
const my_closest_su_list = await localbitcoinplusplus.kademlia.determineClosestSupernode(params.trader_flo_address);
|
||||||
const primarySupernodeOfThisUser = my_closest_su_list[0].data.id;
|
const primarySupernodeOfThisUser = my_closest_su_list[0].data.id;
|
||||||
const backup_server_db_instance = localbitcoinplusplus.newBackupDatabase.db[primarySupernodeOfThisUser];
|
|
||||||
|
|
||||||
if(typeof backup_server_db_instance !== "object") {
|
|
||||||
let backup_db_error_msg = `WARNING: Unknown DB instance. DB Backup failed.`;
|
|
||||||
showMessage(backup_db_error_msg);
|
|
||||||
throw new Error(backup_db_error_msg);
|
|
||||||
};
|
|
||||||
|
|
||||||
if (method=="sync_with_supernode") {
|
if (method=="sync_with_supernode") {
|
||||||
RM_RPC.filter_legit_backup_requests(params.trader_flo_address, function (is_valid_request) {
|
RM_RPC.filter_legit_backup_requests(params.trader_flo_address, function (is_valid_request) {
|
||||||
@ -12658,13 +12651,24 @@
|
|||||||
.call(this, "sync_backup_supernode_from_backup_supernode_response",
|
.call(this, "sync_backup_supernode_from_backup_supernode_response",
|
||||||
su_db_data)
|
su_db_data)
|
||||||
.then(server_sync_response=>
|
.then(server_sync_response=>
|
||||||
doSend(server_sync_response, params.trader_flo_address));
|
doSend(server_sync_response, params.requester_flo_id));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let backup_server_db_instance;
|
||||||
|
if (typeof localbitcoinplusplus.newBackupDatabase.db[primarySupernodeOfThisUser] == "object") {
|
||||||
|
backup_server_db_instance = localbitcoinplusplus.newBackupDatabase.db[primarySupernodeOfThisUser];
|
||||||
|
}
|
||||||
|
|
||||||
|
if(typeof backup_server_db_instance !== "object") {
|
||||||
|
let backup_db_error_msg = `WARNING: Unknown DB instance. DB Backup failed.`;
|
||||||
|
showMessage(backup_db_error_msg);
|
||||||
|
throw new Error(backup_db_error_msg);
|
||||||
|
};
|
||||||
|
|
||||||
RM_RPC.filter_legit_backup_requests(params.trader_flo_address, async function (is_valid_request) {
|
RM_RPC.filter_legit_backup_requests(params.trader_flo_address, async function (is_valid_request) {
|
||||||
if (is_valid_request !== true) return false;
|
if (is_valid_request !== true) return false;
|
||||||
|
|
||||||
@ -13869,7 +13873,6 @@
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
showMessage("WARNING: Unknown method called for execution.");
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -16575,23 +16578,13 @@
|
|||||||
|
|
||||||
// Method 1: Inform user nodes they can now trade
|
// Method 1: Inform user nodes they can now trade
|
||||||
RM_RPC
|
RM_RPC
|
||||||
.send_rpc
|
.send_rpc
|
||||||
.call(this, "reconnect_with_another_supernode", {
|
.call(this, "reconnect_with_another_supernode", {
|
||||||
"trader_flo_address": su_db_data.trader_flo_address,
|
"trader_flo_address": su_db_data.trader_flo_address,
|
||||||
//"receiver_flo_address": "", // message for all
|
//"receiver_flo_address": "", // message for all
|
||||||
"ws_url": websocket.url,
|
"ws_url": websocket.url,
|
||||||
"server_msg": `Your primary Supernode is live and synced. You can start using the system.`,
|
"server_msg": `Your primary Supernode is live and synced. You can start using the system.`,
|
||||||
}).then(server_response=>doSend(server_response));
|
}).then(server_response=>doSend(server_response));
|
||||||
|
|
||||||
// Method 2: Now inform all backup supernodes you are back and request to stop serving your users
|
|
||||||
// RM_RPC
|
|
||||||
// .send_rpc
|
|
||||||
// .call(this, "update_supernode_status", {
|
|
||||||
// trader_flo_address: localbitcoinplusplus.wallets.my_local_flo_address,
|
|
||||||
// trader_pub_key: localbitcoinplusplus.wallets.my_local_flo_public_key,
|
|
||||||
// su_status: true,
|
|
||||||
// }).then(server_response=>
|
|
||||||
// doSend(server_response, nextSu.data.id));
|
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -16606,10 +16599,10 @@
|
|||||||
|
|
||||||
case "sync_backup_supernode_from_backup_supernode_response":
|
case "sync_backup_supernode_from_backup_supernode_response":
|
||||||
|
|
||||||
if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object") {
|
|
||||||
let su_db_data = res_obj.params[0];
|
let su_db_data = res_obj.params[0];
|
||||||
// if (typeof localbitcoinplusplus.wallets.my_local_flo_address !== "string" ||
|
// if (typeof localbitcoinplusplus.wallets.my_local_flo_address !== "string" ||
|
||||||
// su_db_data.trader_flo_address !== localbitcoinplusplus.wallets.my_local_flo_address
|
// su_db_data.trader_flo_address !== localbitcoinplusplus.wallets.my_local_flo_address
|
||||||
|
if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object") {
|
||||||
// ) return false;
|
// ) return false;
|
||||||
|
|
||||||
(async function () {
|
(async function () {
|
||||||
@ -16694,6 +16687,18 @@
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case "sync_backup_supernode_from_backup_supernode":
|
||||||
|
if (localbitcoinplusplus.master_configurations.supernodesPubKeys
|
||||||
|
.includes(localbitcoinplusplus.wallets.my_local_flo_public_key)
|
||||||
|
&& typeof res_obj.globalParams.receiverFloId == "string"
|
||||||
|
&& localbitcoinplusplus.wallets.my_local_flo_address == res_obj.globalParams.receiverFloId
|
||||||
|
) {
|
||||||
|
const RM_RPC = new localbitcoinplusplus.rpc;
|
||||||
|
response_from_sever = RM_RPC.backup_receive_rpc_response.call(this,
|
||||||
|
JSON.stringify(res_obj));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -18747,6 +18752,71 @@
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case "sync_backup_supernode_from_backup_supernode_response":
|
||||||
|
let su_db_data = res_obj.params[0];
|
||||||
|
// if (typeof localbitcoinplusplus.wallets.my_local_flo_address !== "string" ||
|
||||||
|
// su_db_data.trader_flo_address !== localbitcoinplusplus.wallets.my_local_flo_address
|
||||||
|
if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object") {
|
||||||
|
// ) return false;
|
||||||
|
|
||||||
|
(async function () {
|
||||||
|
let i = 0;
|
||||||
|
for (let tableStoreName in su_db_data) {
|
||||||
|
i++;
|
||||||
|
if (i==Object.keys(su_db_data).length-2) {
|
||||||
|
// Get data for crypto and fiat balances based on vector clock from all backup supernodes
|
||||||
|
// reactor.dispatchEvent('primarySupernodeUpdatingLatestDataForItsUserFromOtherSupernodes',
|
||||||
|
// { requesting_user_id: localbitcoinplusplus.wallets.my_local_flo_address});
|
||||||
|
// await localbitcoinplusplus.actions.delay(180000).then(()=>{
|
||||||
|
// showMessage(`INFO: Balance syncing is complete.`);
|
||||||
|
|
||||||
|
localbitcoinplusplus.amIreadyToServePrimaryUsers = true;
|
||||||
|
|
||||||
|
//});
|
||||||
|
}
|
||||||
|
// skip loop if the property is from prototype
|
||||||
|
if (tableStoreName == 'trader_flo_address'
|
||||||
|
|| tableStoreName == 'receiver_flo_address'
|
||||||
|
|| !su_db_data.hasOwnProperty(tableStoreName)) continue;
|
||||||
|
|
||||||
|
try {
|
||||||
|
let obj = su_db_data[tableStoreName];
|
||||||
|
if (["crypto_balances", "cash_balances", "userPublicData"].includes(
|
||||||
|
tableStoreName)) {
|
||||||
|
if (obj.length > 0) {
|
||||||
|
for (var prop in obj) {
|
||||||
|
if (!obj.hasOwnProperty(prop)) continue;
|
||||||
|
await localbitcoinplusplus.newBackupDatabase.db[su_db_data.trader_flo_address]
|
||||||
|
.backup_updateinDB(tableStoreName, obj[prop], obj[prop]
|
||||||
|
.trader_flo_address).then(()=>{
|
||||||
|
showMessage(`INFO: "${tableStoreName}" datastore syncing is complete.`);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
let resdbdata = await localbitcoinplusplus.newBackupDatabase.db[su_db_data.trader_flo_address]
|
||||||
|
.backup_removeAllinDB(tableStoreName);
|
||||||
|
if (resdbdata !== false) {
|
||||||
|
if (obj.length > 0) {
|
||||||
|
for (var prop in obj) {
|
||||||
|
if (!obj.hasOwnProperty(prop)) continue;
|
||||||
|
await localbitcoinplusplus.newBackupDatabase.db[su_db_data.trader_flo_address]
|
||||||
|
.backup_addDB(resdbdata, obj[prop]).then(()=>{
|
||||||
|
showMessage(`INFO: "${resdbdata}" datastore syncing is complete.`);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user