diff --git a/index.html b/index.html index f390c54..50277a5 100644 --- a/index.html +++ b/index.html @@ -5412,7 +5412,7 @@ upperKey: request.upperVectorClock, lastOnly: request.mostRecent, atKey: request.atVectorClock, - patternEval: (k, v) => { return (v.application == request.application && (!request.receiverID || 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.storageList.includes(request.application) ? request.application : floGlobals.defaultStorage, filterOptions, `SN_${result[0].floID}`) .then(result => floSupernode.supernodeClientWS.send(`${requestor} ${JSON.stringify(result)}`)) @@ -6139,12 +6139,16 @@ resolve("Connected to all backup nodes") else{ floSupernode.kBucket.getNextSupernode(curNode).then(nextBackupNode => { - connectToBackupSupernode(nextBackupNode[0].floID).then(backupConn => { - floGlobals.backupNodes[i] = backupConn - connectToAllBackupSupernode(backupConn.floID, i+1) - .then(result => resolve(result)) - .catch(error => reject(error)) - }) + if(myFloID === nextBackupNode[0].floID) + reject("Not enough supernodes available") + else{ + connectToBackupSupernode(nextBackupNode[0].floID).then(backupConn => { + floGlobals.backupNodes[i] = backupConn + connectToAllBackupSupernode(backupConn.floID, i+1) + .then(result => resolve(result)) + .catch(error => reject(error)) + }) + } }).catch(error => reject(error)) } @@ -6225,8 +6229,9 @@ //remove offline node and add the immediate next available node var index = floGlobals.backupNodes.indexOf(offlineNodeID); if (index !== -1) floGlobals.backupNodes.splice(index, 1); + //connect to next node available var len = floGlobals.backupNodes.length - connectToAllBackupSupernode(floGlobals.backupNodes[len-1], len).then(result => { + connectToAllBackupSupernode(len == 0? offlineNodeID : floGlobals.backupNodes[len-1], len).then(result => { console.log(result) //inform the newly connected node to store backups of self var sendData1 = { @@ -6252,6 +6257,26 @@ sendData2.sign = floCrypto.signData(JSON.stringify(sendData2.backupMsg), myPrivKey) floGlobals.backupNodes[0].wsConn.send(JSON.stringify(sendData2)) } + }).catch(error => { + console.log(error) + if(index == 0){ + //start serving the dead node + if(floGlobals.backupNodes.length === 0) + reactor.dispatchEvent("start_backup_serve", offlineNodeID) + //inform the immediate next node of the dead to start serving it + else{ + var sendData = { + from: myFloID, + backupMsg: { + type: "startBackupServe", + snfloID: offlineNodeID, + time: Date.now() + } + } + sendData.sign = floCrypto.signData(JSON.stringify(sendData.backupMsg), myPrivKey) + floGlobals.backupNodes[0].wsConn.send(JSON.stringify(sendData)) + } + } }) })