bug fix
This commit is contained in:
parent
bfefea5215
commit
964f29e916
121
app/index.html
121
app/index.html
@ -5903,18 +5903,15 @@
|
|||||||
getPrevSupernode: function(flo_addr, n = 1, KB = this.supernodeKBucket){
|
getPrevSupernode: function(flo_addr, n = 1, KB = this.supernodeKBucket){
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
try {
|
try {
|
||||||
let isFloIdUint8 = flo_addr instanceof Uint8Array;
|
let kArrayFloIds = KB.toArray().map(k => k.floID);
|
||||||
if (!isFloIdUint8)
|
let pos = kArrayFloIds.indexOf(flo_addr)
|
||||||
flo_addr = this.floIdToKbucketId(flo_addr);
|
|
||||||
const KA = KB.toArray();
|
|
||||||
let pos = KB._indexOf(KB.root,flo_addr)
|
|
||||||
var prevSupernode = []
|
var prevSupernode = []
|
||||||
for(var i = 1; i <= n; i++){
|
for(var i = 1; i <= n; i++){
|
||||||
if(pos - i < 0)
|
if(pos - i < 0)
|
||||||
var prev = pos - i + KA.length
|
var prev = pos - i + kArrayFloIds.length
|
||||||
else
|
else
|
||||||
var prev = pos - i
|
var prev = pos - i
|
||||||
prevSupernode.push(KA[prev])
|
prevSupernode.push(kArrayFloIds[prev])
|
||||||
}
|
}
|
||||||
resolve(prevSupernode);
|
resolve(prevSupernode);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@ -5926,18 +5923,15 @@
|
|||||||
getNextSupernode: function(flo_addr, n = 1, KB = this.supernodeKBucket){
|
getNextSupernode: function(flo_addr, n = 1, KB = this.supernodeKBucket){
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
try {
|
try {
|
||||||
let isFloIdUint8 = flo_addr instanceof Uint8Array;
|
let kArrayFloIds = KB.toArray().map(k => k.floID);
|
||||||
if (!isFloIdUint8)
|
let pos = kArrayFloIds.indexOf(flo_addr)
|
||||||
flo_addr = this.floIdToKbucketId(flo_addr);
|
|
||||||
const KA = KB.toArray();
|
|
||||||
let pos = KB._indexOf(KB.root,flo_addr)
|
|
||||||
var nextSupernode = []
|
var nextSupernode = []
|
||||||
for(var i = 1; i <= n; i++){
|
for(var i = 1; i <= n; i++){
|
||||||
if(pos + i >= KA.length)
|
if(pos + i >= kArrayFloIds.length)
|
||||||
var next = pos + i - KA.length
|
var next = pos + i - kArrayFloIds.length
|
||||||
else
|
else
|
||||||
var next = pos + i
|
var next = pos + i
|
||||||
nextSupernode.push(KA[next])
|
nextSupernode.push(kArrayFloIds[next])
|
||||||
}
|
}
|
||||||
resolve(nextSupernode);
|
resolve(nextSupernode);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@ -5952,7 +5946,8 @@
|
|||||||
let isFloIdUint8 = flo_addr instanceof Uint8Array;
|
let isFloIdUint8 = flo_addr instanceof Uint8Array;
|
||||||
if (!isFloIdUint8)
|
if (!isFloIdUint8)
|
||||||
flo_addr = this.floIdToKbucketId(flo_addr);
|
flo_addr = this.floIdToKbucketId(flo_addr);
|
||||||
const closestSupernode = KB.closest(flo_addr, n);
|
var closestSupernode = KB.closest(flo_addr, n);
|
||||||
|
closestSupernode = closestSupernode.map(k => k.floID);
|
||||||
resolve(closestSupernode);
|
resolve(closestSupernode);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
reject(error);
|
reject(error);
|
||||||
@ -5964,8 +5959,8 @@
|
|||||||
//Sends data to the supernode
|
//Sends data to the supernode
|
||||||
sendData: function (data, floID) {
|
sendData: function (data, floID) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.kBucket.determineClosestSupernode(floID).then(result => {
|
this.kBucket.determineClosestSupernode(floID).then(closestNode => {
|
||||||
var websocket = new WebSocket("wss://" + floGlobals.supernodes[result[0].floID].uri + "/ws");
|
var websocket = new WebSocket("wss://" + floGlobals.supernodes[closestNode[0]].uri + "/ws");
|
||||||
websocket.onopen = (evt) => {
|
websocket.onopen = (evt) => {
|
||||||
websocket.send(data);
|
websocket.send(data);
|
||||||
resolve(`Data sent to ${floID}'s supernode`);
|
resolve(`Data sent to ${floID}'s supernode`);
|
||||||
@ -5983,8 +5978,8 @@
|
|||||||
//Request data from supernode
|
//Request data from supernode
|
||||||
requestData: function (request, floID) {
|
requestData: function (request, floID) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.kBucket.determineClosestSupernode(floID).then(result => {
|
this.kBucket.determineClosestSupernode(floID).then(closestNode => {
|
||||||
var websocket = new WebSocket("wss://" + floGlobals.supernodes[result[0].floID].uri + "/ws");
|
var websocket = new WebSocket("wss://" + floGlobals.supernodes[closestNode[0]].uri + "/ws");
|
||||||
websocket.onopen = (evt) => {
|
websocket.onopen = (evt) => {
|
||||||
websocket.send(`?${request}`);
|
websocket.send(`?${request}`);
|
||||||
};
|
};
|
||||||
@ -6074,8 +6069,8 @@
|
|||||||
request = request.split(" ");
|
request = request.split(" ");
|
||||||
requestor = request[0];
|
requestor = request[0];
|
||||||
request = JSON.parse(request[1]);
|
request = JSON.parse(request[1]);
|
||||||
floSupernode.kBucket.determineClosestSupernode(request.receiverID).then(result => {
|
floSupernode.kBucket.determineClosestSupernode(request.receiverID).then(closestNode => {
|
||||||
if(floGlobals.serveList.includes(result[0].floID)){
|
if(floGlobals.serveList.includes(closestNode[0])){
|
||||||
var filterOptions = {
|
var filterOptions = {
|
||||||
lowerKey: request.lowerVectorClock,
|
lowerKey: request.lowerVectorClock,
|
||||||
upperKey: request.upperVectorClock,
|
upperKey: request.upperVectorClock,
|
||||||
@ -6083,7 +6078,7 @@
|
|||||||
atKey: request.atVectorClock,
|
atKey: request.atVectorClock,
|
||||||
patternEval: (k, v) => { return (v.application == request.application && v.receiverID == request.receiverID && (!request.comment || v.comment == request.comment) && (!request.type || v.type == request.type) && (!request.senderIDs || request.senderIDs.includes(v.senderID))) }
|
patternEval: (k, v) => { return (v.application == request.application && v.receiverID == request.receiverID && (!request.comment || v.comment == request.comment) && (!request.type || v.type == request.type) && (!request.senderIDs || request.senderIDs.includes(v.senderID))) }
|
||||||
}
|
}
|
||||||
compactIDB.searchData( floGlobals.diskList.includes(request.application) ? request.application : floGlobals.defaultDisk, filterOptions, `SN_${result[0].floID}`)
|
compactIDB.searchData( floGlobals.diskList.includes(request.application) ? request.application : floGlobals.defaultDisk, filterOptions, `SN_${closestNode[0]}`)
|
||||||
.then(result => floSupernode.supernodeClientWS.send(`${requestor} ${JSON.stringify(result)}`))
|
.then(result => floSupernode.supernodeClientWS.send(`${requestor} ${JSON.stringify(result)}`))
|
||||||
.catch(error => console.log(error))
|
.catch(error => console.log(error))
|
||||||
}
|
}
|
||||||
@ -6100,8 +6095,8 @@
|
|||||||
try {
|
try {
|
||||||
data = JSON.parse(data)
|
data = JSON.parse(data)
|
||||||
if(!data.backupMsg){ //Serving Users
|
if(!data.backupMsg){ //Serving Users
|
||||||
floSupernode.kBucket.determineClosestSupernode(data.receiverID).then(result => {
|
floSupernode.kBucket.determineClosestSupernode(data.receiverID).then(closestNode => {
|
||||||
if (floGlobals.serveList.includes(result[0].floID)
|
if (floGlobals.serveList.includes(closestNode[0])
|
||||||
&& data.senderID == floCrypto.getFloIDfromPubkeyHex(data.pubKey)
|
&& data.senderID == floCrypto.getFloIDfromPubkeyHex(data.pubKey)
|
||||||
&& floCrypto.verifySign(JSON.stringify(data.message), data.sign, data.pubKey)){
|
&& floCrypto.verifySign(JSON.stringify(data.message), data.sign, data.pubKey)){
|
||||||
var key = `${Date.now()}_${data.senderID}`
|
var key = `${Date.now()}_${data.senderID}`
|
||||||
@ -6115,8 +6110,8 @@
|
|||||||
type: data.type,
|
type: data.type,
|
||||||
comment: data.comment
|
comment: data.comment
|
||||||
}
|
}
|
||||||
compactIDB.addData(floGlobals.diskList.includes(value.application) ? value.application:floGlobals.defaultDisk , value ,key,`SN_${result[0].floID}`)
|
compactIDB.addData(floGlobals.diskList.includes(value.application) ? value.application:floGlobals.defaultDisk , value ,key,`SN_${closestNode[0]}`)
|
||||||
reactor.dispatchEvent("send_backup",{ key:key, value:value, snfloID: result[0].floID})
|
reactor.dispatchEvent("send_backup",{ key:key, value:value, snfloID: closestNode[0]})
|
||||||
}
|
}
|
||||||
}).catch(error => console.log(error))
|
}).catch(error => console.log(error))
|
||||||
}else if(data.from in floGlobals.supernodes)
|
}else if(data.from in floGlobals.supernodes)
|
||||||
@ -7008,11 +7003,11 @@
|
|||||||
if(i >= floGlobals.supernodeConfig.backupDepth)
|
if(i >= floGlobals.supernodeConfig.backupDepth)
|
||||||
resolve("Connected to all backup nodes")
|
resolve("Connected to all backup nodes")
|
||||||
else{
|
else{
|
||||||
floSupernode.kBucket.getNextSupernode(curNode).then(nextBackupNode => {
|
floSupernode.kBucket.getNextSupernode(curNode).then(nextNode => {
|
||||||
if(myFloID === nextBackupNode[0].floID)
|
if(myFloID === nextNode[0])
|
||||||
reject("Not enough supernodes available")
|
reject("Not enough supernodes available")
|
||||||
else{
|
else{
|
||||||
connectToBackupSupernode(nextBackupNode[0].floID).then(backupConn => {
|
connectToBackupSupernode(nextNode[0]).then(backupConn => {
|
||||||
floGlobals.backupNodes[i] = backupConn
|
floGlobals.backupNodes[i] = backupConn
|
||||||
connectToAllBackupSupernode(backupConn.floID, i+1)
|
connectToAllBackupSupernode(backupConn.floID, i+1)
|
||||||
.then(result => resolve(result))
|
.then(result => resolve(result))
|
||||||
@ -7030,8 +7025,8 @@
|
|||||||
.then(result => resolve(result))
|
.then(result => resolve(result))
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
console.log(error)
|
console.log(error)
|
||||||
floSupernode.kBucket.getNextSupernode(backupNodeID).then(nextBackupNode => {
|
floSupernode.kBucket.getNextSupernode(backupNodeID).then(nextNode => {
|
||||||
connectToBackupSupernode(nextBackupNode[0].floID).then(result => resolve(result))
|
connectToBackupSupernode(nextNode[0]).then(result => resolve(result))
|
||||||
}).catch(error => console.log(error))
|
}).catch(error => console.log(error))
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@ -7358,23 +7353,24 @@
|
|||||||
if(floGlobals.storedList.includes(snfloID)){
|
if(floGlobals.storedList.includes(snfloID)){
|
||||||
if(floGlobals.backupNodes.length < floGlobals.supernodeConfig.backupDepth){
|
if(floGlobals.backupNodes.length < floGlobals.supernodeConfig.backupDepth){
|
||||||
//when less supernodes available, just connect to the revived node
|
//when less supernodes available, just connect to the revived node
|
||||||
var index = floGlobals.backupNodes.length
|
floSupernode.kBucket.getNextSupernode(myFloID, floSupernode.kBucket.supernodeKBucket.toArray().length).then(kArrayFloIds => {
|
||||||
let kArrayFloIds = this.getNextSupernode(myFloID, KB.toArray().length).map(k => k.floID)
|
var index = floGlobals.backupNodes.length
|
||||||
for(var i = 0; i < floGlobals.backupNodes.length; i++){
|
for(var i = 0; i < floGlobals.backupNodes.length; i++){
|
||||||
if(snfloID == floGlobals.backupNodes[i].floID){ //revived node is already connected
|
if(snfloID == floGlobals.backupNodes[i].floID){ //revived node is already connected
|
||||||
index = false
|
index = false
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
else if(kArrayFloIds.indexOf(snfloID) < kArrayFloIds.indexOf(floGlobals.backupNodes[i].floID)){
|
||||||
|
index = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if(kArrayFloIds.indexOf(snfloID) < kArrayFloIds.indexOf(floGlobals.backupNodes[i].floID)){
|
if(index !== false){
|
||||||
index = i;
|
initateBackupWebsocket(snfloID).then(result => {
|
||||||
break;
|
floGlobals.backupNodes.splice(index, 0, result) // add revived node as backup node
|
||||||
|
}).catch(error => console.log(error))
|
||||||
}
|
}
|
||||||
}
|
}).catch(error => console.log(error))
|
||||||
if(index !== false){
|
|
||||||
initateBackupWebsocket(snfloID).then(result => {
|
|
||||||
floGlobals.backupNodes.splice(index, 0, result) // add revived node as backup node
|
|
||||||
}).catch(error => console.log(error))
|
|
||||||
}
|
|
||||||
}else{
|
}else{
|
||||||
var lastBackup = floGlobals.storedList.pop()
|
var lastBackup = floGlobals.storedList.pop()
|
||||||
//inform the revived node to store the backup
|
//inform the revived node to store the backup
|
||||||
@ -7394,22 +7390,23 @@
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
//connect to the revived node as backup if needed
|
//connect to the revived node as backup if needed
|
||||||
var index = false
|
floSupernode.kBucket.getNextSupernode(myFloID, floSupernode.kBucket.supernodeKBucket.toArray().length).then(kArrayFloIds => {
|
||||||
let kArrayFloIds = this.getNextSupernode(myFloID, KB.toArray().length).map(k => k.floID)
|
var index = false
|
||||||
for(var i = 0; i < floGlobals.backupNodes.length; i++){
|
for(var i = 0; i < floGlobals.backupNodes.length; i++){
|
||||||
if(snfloID == floGlobals.backupNodes[i].floID) //revived node is already connected
|
if(snfloID == floGlobals.backupNodes[i].floID) //revived node is already connected
|
||||||
break;
|
break;
|
||||||
else if(kArrayFloIds.indexOf(snfloID) < kArrayFloIds.indexOf(floGlobals.backupNodes[i].floID)){
|
else if(kArrayFloIds.indexOf(snfloID) < kArrayFloIds.indexOf(floGlobals.backupNodes[i].floID)){
|
||||||
index = i;
|
index = i;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
if(index !== false){
|
||||||
if(index !== false){
|
initateBackupWebsocket(snfloID).then(result => {
|
||||||
initateBackupWebsocket(snfloID).then(result => {
|
floGlobals.backupNodes.splice(index, 0, result) // add revived node as backup node
|
||||||
floGlobals.backupNodes.splice(index, 0, result) // add revived node as backup node
|
floGlobals.backupNodes.pop() // remove the last extra backup node
|
||||||
floGlobals.backupNodes.pop() // remove the last extra backup node
|
}).catch(error => console.log(error))
|
||||||
}).catch(error => console.log(error))
|
}
|
||||||
}
|
}).catch(error => console.log(error))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user