fixed backup supernodes backup db sync when primary comes back

This commit is contained in:
Abhishek Sinha 2019-05-29 13:48:52 +05:30
parent a8c94586b7
commit 7cc2577610

View File

@ -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;
} }