From 465573ad293a5b6339ea757706f8d2b1c80430c5 Mon Sep 17 00:00:00 2001 From: Ravin Perera <33562092+ravinsp@users.noreply.github.com> Date: Fri, 21 Aug 2020 15:27:25 +0530 Subject: [PATCH] Updated nodejs contract lib for streamed input reading. (#110) --- examples/nodejs_contract/echo_contract.js | 21 +++---- examples/nodejs_contract/file_contract.js | 33 ++++++----- examples/nodejs_contract/hp-contract-lib.js | 61 +++++++++++++++++--- src/cons/cons.cpp | 17 +++--- src/p2p/p2p.cpp | 9 +-- src/usr/usr.hpp | 2 +- test/bin/hpfs | Bin 219288 -> 219288 bytes 7 files changed, 93 insertions(+), 50 deletions(-) diff --git a/examples/nodejs_contract/echo_contract.js b/examples/nodejs_contract/echo_contract.js index 3f4a340f..c1b3897b 100644 --- a/examples/nodejs_contract/echo_contract.js +++ b/examples/nodejs_contract/echo_contract.js @@ -12,19 +12,16 @@ if (!hpc.readonly) Object.keys(hpc.users).forEach(function (key) { const user = hpc.users[key]; - const inputBuf = user.readInput(); - if (inputBuf) { - const userInput = inputBuf.toString("utf8"); + user.readInput().then(inputBuf => { + if (inputBuf) { + const userInput = inputBuf.toString("utf8"); - // Append user input to a state file if not in read only mode. - if (!hpc.readonly) - fs.appendFileSync("userinputs.txt", userInput + "\n"); - - if (userInput == "ts") - user.sendOutput(fs.readFileSync("exects.txt")); - else - user.sendOutput("Echoing: " + userInput); - } + if (userInput == "ts") + user.sendOutput(fs.readFileSync("exects.txt")); + else + user.sendOutput("Echoing: " + userInput); + } + }) }); //console.log("===Echo contract ended==="); diff --git a/examples/nodejs_contract/file_contract.js b/examples/nodejs_contract/file_contract.js index a6acaa2e..a7f3bad2 100644 --- a/examples/nodejs_contract/file_contract.js +++ b/examples/nodejs_contract/file_contract.js @@ -1,29 +1,30 @@ +const { HotPocketContract } = require("./hp-contract-lib"); const fs = require('fs'); const bson = require('bson'); +const hpc = new HotPocketContract(); + //console.log("===File contract started==="); -const hpargs = JSON.parse(fs.readFileSync(0, 'utf8')); -//console.log("Contract args received from hp: " + hpargs); +Object.keys(hpc.users).forEach(function (key) { + const user = hpc.users[key]; -Object.keys(hpargs.usrfd).forEach(function (key) { - const userfds = hpargs.usrfd[key]; + user.readInput().then(input => { + if (!input) + return; - if (userfds[0] != -1) { - - const input = fs.readFileSync(userfds[0]); const msg = bson.deserialize(input); if (msg.type == "upload") { if (fs.existsSync(msg.fileName)) { - fs.writeSync(userfds[1], bson.serialize({ + user.sendOutput(bson.serialize({ type: "uploadResult", status: "already_exists", fileName: msg.fileName })); } else if (msg.content.length > 10 * 1024 * 1024) { // 10MB - fs.writeSync(userfds[1], bson.serialize({ + user.sendOutput(bson.serialize({ type: "uploadResult", status: "too_large", fileName: msg.fileName @@ -33,8 +34,8 @@ Object.keys(hpargs.usrfd).forEach(function (key) { // Save the file. fs.writeFileSync(msg.fileName, msg.content.buffer); - - fs.writeSync(userfds[1], bson.serialize({ + + user.sendOutput(bson.serialize({ type: "uploadResult", status: "ok", fileName: msg.fileName @@ -44,14 +45,14 @@ Object.keys(hpargs.usrfd).forEach(function (key) { else if (msg.type == "delete") { if (fs.existsSync(msg.fileName)) { fs.unlinkSync(msg.fileName); - fs.writeSync(userfds[1], bson.serialize({ + user.sendOutput(bson.serialize({ type: "deleteResult", status: "ok", fileName: msg.fileName })); } else { - fs.writeSync(userfds[1], bson.serialize({ + user.sendOutput(bson.serialize({ type: "deleteResult", status: "not_found", fileName: msg.fileName @@ -61,7 +62,7 @@ Object.keys(hpargs.usrfd).forEach(function (key) { else if (msg.type == "download") { if (fs.existsSync(msg.fileName)) { const fileContent = fs.readFileSync(msg.fileName); - fs.writeSync(userfds[1], bson.serialize({ + user.sendOutput(bson.serialize({ type: "downloadResult", status: "ok", fileName: msg.fileName, @@ -69,14 +70,14 @@ Object.keys(hpargs.usrfd).forEach(function (key) { })); } else { - fs.writeSync(userfds[1], bson.serialize({ + user.sendOutput(bson.serialize({ type: "downloadResult", status: "not_found", fileName: msg.fileName })); } } - } + }); }); //console.log("===File contract ended==="); \ No newline at end of file diff --git a/examples/nodejs_contract/hp-contract-lib.js b/examples/nodejs_contract/hp-contract-lib.js index 7297f220..46ad6df2 100644 --- a/examples/nodejs_contract/hp-contract-lib.js +++ b/examples/nodejs_contract/hp-contract-lib.js @@ -22,9 +22,42 @@ function HotPocketContract() { }); } +// Helper function to asynchronously read a stream to the end and fill a buffer. +const drainStream = function (stream) { + + return new Promise((resolve) => { + + const dataParts = []; + + const resolveBuffer = function () { + if (dataParts.length > 0) + return resolve(Buffer.concat(dataParts)); + else + return resolve(null); + } + + stream.on("data", d => { + dataParts.push(d); + }); + stream.on('end', resolveBuffer); + stream.on("close", resolveBuffer); + stream.on("error", () => { + resolve(null); + }); + }); +} + function HotPocketChannel(infd, outfd) { this.readInput = function () { - return infd == -1 ? null : fs.readFileSync(infd); + return new Promise((resolve) => { + if (infd == -1) { + resolve(null); + } + else { + const s = fs.createReadStream(null, { fd: infd }); + drainStream(s).then(buf => resolve(buf)); + } + }); } this.sendOutput = function (output) { @@ -33,9 +66,8 @@ function HotPocketChannel(infd, outfd) { } function HotPocketNplChannel(infd, outfd) { - this.readInput = function () { - if (infd == -1) - return null; + + const parseNplInputs = function (buf) { // Input may consist of multiple messages. // Each message has the format: @@ -43,7 +75,6 @@ function HotPocketNplChannel(infd, outfd) { const inputs = []; // Peer inputs will be populated to this. - const buf = fs.readFileSync(infd); let pos = 0; while (pos < buf.byteLength) { @@ -74,15 +105,27 @@ function HotPocketNplChannel(infd, outfd) { return inputs; } - this.sendOutput = function (output) { - fs.writeFileSync(outfd, output); - } - const readBytes = function (buf, pos, count) { if (pos + count > buf.byteLength) return null; return buf.slice(pos, pos + count); } + + this.readInput = function () { + return new Promise((resolve) => { + if (infd == -1) { + resolve(null); + } + else { + const s = fs.createReadStream(null, { fd: infd }); + drainStream(s).then(buf => resolve(parseNplInputs(buf))); + } + }); + } + + this.sendOutput = function (output) { + fs.writeFileSync(outfd, output); + } } module.exports = { diff --git a/src/cons/cons.cpp b/src/cons/cons.cpp index 5bf716ca..eddbcfaf 100644 --- a/src/cons/cons.cpp +++ b/src/cons/cons.cpp @@ -321,22 +321,23 @@ namespace cons */ void broadcast_nonunl_proposal() { - std::lock_guard lock(p2p::ctx.collected_msgs.nonunl_proposals_mutex); - if (usr::ctx.users.empty()) return; // Construct NUP. p2p::nonunl_proposal nup; - for (auto &[sid, user] : usr::ctx.users) { - std::list user_inputs; - user_inputs.splice(user_inputs.end(), user.submitted_inputs); + std::lock_guard(usr::ctx.users_mutex); + for (auto &[sid, user] : usr::ctx.users) + { + std::list user_inputs; + user_inputs.splice(user_inputs.end(), user.submitted_inputs); - // We should create an entry for each user pubkey, even if the user has no inputs. This is - // because this data map will be used to track connected users as well in addition to inputs. - nup.user_inputs.try_emplace(user.pubkey, std::move(user_inputs)); + // We should create an entry for each user pubkey, even if the user has no inputs. This is + // because this data map will be used to track connected users as well in addition to inputs. + nup.user_inputs.try_emplace(user.pubkey, std::move(user_inputs)); + } } flatbuffers::FlatBufferBuilder fbuf(1024); diff --git a/src/p2p/p2p.cpp b/src/p2p/p2p.cpp index 82ad2d8e..a923767e 100644 --- a/src/p2p/p2p.cpp +++ b/src/p2p/p2p.cpp @@ -75,7 +75,8 @@ namespace p2p return -1; } - // Converting the binary pub key into hexa decimal string this will be used as the key in storing peer sessions + // Converting the binary pub key into hexadecimal string. + // This will be used as the lookup key in storing peer sessions. std::string pubkeyhex; util::bin2hex(pubkeyhex, reinterpret_cast(challenge_resp.pubkey.data()), challenge_resp.pubkey.length()); @@ -145,7 +146,7 @@ namespace p2p /** * Broadcasts the given message to all currently connected outbound peers. - * @param msg Peer outbound message to be broadcasted. + * @param fbuf Peer outbound message to be broadcasted. * @param send_to_self Whether to also send the message to self (this node). */ void broadcast_message(const flatbuffers::FlatBufferBuilder &fbuf, const bool send_to_self) @@ -173,7 +174,7 @@ namespace p2p /** * Sends the given message to self (this node). - * @param msg Peer outbound message to be sent to self. + * @param fbuf Peer outbound message to be sent to self. */ void send_message_to_self(const flatbuffers::FlatBufferBuilder &fbuf) { @@ -194,7 +195,7 @@ namespace p2p /** * Sends the given message to a random peer (except self). - * @param msg Peer outbound message to be sent to peer. + * @param fbuf Peer outbound message to be sent to peer. */ void send_message_to_random_peer(const flatbuffers::FlatBufferBuilder &fbuf) { diff --git a/src/usr/usr.hpp b/src/usr/usr.hpp index 63b96a97..3c7d06f5 100644 --- a/src/usr/usr.hpp +++ b/src/usr/usr.hpp @@ -52,7 +52,7 @@ namespace usr struct connected_context { // Connected (authenticated) user list. - // Map key: User socket session id () + // Map key: User socket session id. std::unordered_map users; std::mutex users_mutex; // Mutex for users access race conditions. diff --git a/test/bin/hpfs b/test/bin/hpfs index 90885c215ded0ea68450a92960349d147a0cf86c..ca9d6496c87360855a780c80ab48a3aa865dedef 100755 GIT binary patch delta 51997 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