Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions client.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
/**
* this file serves as client to connect to the server raft nodes
*/
const argv = require("argh").argv;
const net = require("net");

let port = +argv.port || 8081; // read the port from command line arguments
var netSocket = net.createConnection({ port: port + 1000 }, () => {
console.log("connected to server at port", port + 1000);
var netSocket = net.createConnection({ port: 6767 }, () => {
console.log("connected to server at port", 6767);
});

const sendEvent = (op, data) => {
Expand Down
1 change: 1 addition & 0 deletions events.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"task":"SET","data":[{"command":{"key":"key_1","value":"1"}}]},{"task":"SET","data":[{"command":{"key":"key_2","value":"2"}}]},{"task":"SET","data":[{"command":{"key":"key_3","value":"3"}}]},{"task":"SET","data":[{"command":{"key":"key_4","value":"4"}}]},{"task":"SET","data":[{"command":{"key":"key_5","value":"5"}}]},{"task":"SET","data":[{"command":{"key":"key_6","value":"6"}}]},{"task":"SET","data":[{"command":{"key":"key_7","value":"7"}}]},{"task":"SET","data":[{"command":{"key":"key_8","value":"8"}}]},{"task":"SET","data":[{"command":{"key":"key_9","value":"9"}}]},{"task":"SET","data":[{"command":{"key":"key_10","value":"10"}}]},{"task":"SET","data":[{"command":{"key":"key_11","value":"11"}}]},{"task":"SET","data":[{"command":{"key":"key_12","value":"12"}}]},{"task":"SET","data":[{"command":{"key":"key_13","value":"13"}}]},{"task":"SET","data":[{"command":{"key":"key_14","value":"14"}}]},{"task":"SET","data":[{"command":{"key":"key_15","value":"15"}}]},{"task":"SET","data":[{"command":{"key":"key_16","value":"16"}}]},{"task":"SET","data":[{"command":{"key":"key_17","value":"17"}}]},{"task":"SET","data":[{"command":{"key":"key_18","value":"18"}}]},{"task":"SET","data":[{"command":{"key":"key_19","value":"19"}}]},{"task":"SET","data":[{"command":{"key":"key_20","value":"20"}}]},{"task":"SET","data":[{"command":{"key":"key_21","value":"21"}}]},{"task":"SET","data":[{"command":{"key":"key_22","value":"22"}}]},{"task":"SET","data":[{"command":{"key":"key_23","value":"23"}}]},{"task":"SET","data":[{"command":{"key":"key_24","value":"24"}}]},{"task":"SET","data":[{"command":{"key":"key_25","value":"25"}}]},{"task":"SET","data":[{"command":{"key":"key_26","value":"26"}}]},{"task":"SET","data":[{"command":{"key":"key_27","value":"27"}}]},{"task":"SET","data":[{"command":{"key":"key_28","value":"28"}}]},{"task":"SET","data":[{"command":{"key":"key_29","value":"29"}}]},{"task":"SET","data":[{"command":{"key":"key_30","value":"30"}}]},{"task":"SET","data":[{"command":{"key":"key_31","value":"31"}}]},{"task":"SET","data":[{"command":{"key":"key_32","value":"32"}}]},{"task":"SET","data":[{"command":{"key":"key_33","value":"33"}}]},{"task":"SET","data":[{"command":{"key":"key_34","value":"34"}}]},{"task":"SET","data":[{"command":{"key":"key_35","value":"35"}}]},{"task":"SET","data":[{"command":{"key":"key_36","value":"36"}}]},{"task":"SET","data":[{"command":{"key":"key_37","value":"37"}}]},{"task":"SET","data":[{"command":{"key":"key_38","value":"38"}}]},{"task":"SET","data":[{"command":{"key":"key_39","value":"39"}}]},{"task":"SET","data":[{"command":{"key":"key_40","value":"40"}}]},{"task":"SET","data":[{"command":{"key":"key_41","value":"41"}}]},{"task":"SET","data":[{"command":{"key":"key_42","value":"42"}}]},{"task":"SET","data":[{"command":{"key":"key_43","value":"43"}}]},{"task":"SET","data":[{"command":{"key":"key_44","value":"44"}}]},{"task":"SET","data":[{"command":{"key":"key_45","value":"45"}}]},{"task":"SET","data":[{"command":{"key":"key_46","value":"46"}}]},{"task":"SET","data":[{"command":{"key":"key_47","value":"47"}}]},{"task":"SET","data":[{"command":{"key":"key_48","value":"48"}}]},{"task":"SET","data":[{"command":{"key":"key_49","value":"49"}}]},{"task":"SET","data":[{"command":{"key":"key_50","value":"50"}}]},{"task":"SET","data":[{"command":{"key":"key_51","value":"51"}}]},{"task":"SET","data":[{"command":{"key":"key_52","value":"52"}}]},{"task":"SET","data":[{"command":{"key":"key_53","value":"53"}}]},{"task":"SET","data":[{"command":{"key":"key_54","value":"54"}}]},{"task":"SET","data":[{"command":{"key":"key_55","value":"55"}}]},{"task":"SET","data":[{"command":{"key":"key_56","value":"56"}}]},{"task":"SET","data":[{"command":{"key":"key_57","value":"57"}}]},{"task":"SET","data":[{"command":{"key":"key_58","value":"58"}}]},{"task":"SET","data":[{"command":{"key":"key_59","value":"59"}}]},{"task":"SET","data":[{"command":{"key":"key_60","value":"60"}}]},{"task":"SET","data":[{"command":{"key":"key_61","value":"61"}}]},{"task":"SET","data":[{"command":{"key":"key_62","value":"62"}}]},{"task":"SET","data":[{"command":{"key":"key_63","value":"63"}}]},{"task":"SET","data":[{"command":{"key":"key_64","value":"64"}}]},{"task":"SET","data":[{"command":{"key":"key_65","value":"65"}}]},{"task":"SET","data":[{"command":{"key":"key_66","value":"66"}}]},{"task":"SET","data":[{"command":{"key":"key_67","value":"67"}}]},{"task":"SET","data":[{"command":{"key":"key_68","value":"68"}}]},{"task":"SET","data":[{"command":{"key":"key_69","value":"69"}}]},{"task":"SET","data":[{"command":{"key":"key_70","value":"70"}}]},{"task":"SET","data":[{"command":{"key":"key_71","value":"71"}}]},{"task":"SET","data":[{"command":{"key":"key_72","value":"72"}}]},{"task":"SET","data":[{"command":{"key":"key_73","value":"73"}}]},{"task":"SET","data":[{"command":{"key":"key_74","value":"74"}}]},{"task":"SET","data":[{"command":{"key":"key_75","value":"75"}}]},{"task":"SET","data":[{"command":{"key":"key_76","value":"76"}}]},{"task":"SET","data":[{"command":{"key":"key_77","value":"77"}}]},{"task":"SET","data":[{"command":{"key":"key_78","value":"78"}}]},{"task":"SET","data":[{"command":{"key":"key_79","value":"79"}}]},{"task":"SET","data":[{"command":{"key":"key_80","value":"80"}}]},{"task":"SET","data":[{"command":{"key":"key_81","value":"81"}}]},{"task":"SET","data":[{"command":{"key":"key_82","value":"82"}}]},{"task":"SET","data":[{"command":{"key":"key_83","value":"83"}}]},{"task":"SET","data":[{"command":{"key":"key_84","value":"84"}}]},{"task":"SET","data":[{"command":{"key":"key_85","value":"85"}}]},{"task":"SET","data":[{"command":{"key":"key_86","value":"86"}}]},{"task":"SET","data":[{"command":{"key":"key_87","value":"87"}}]},{"task":"SET","data":[{"command":{"key":"key_88","value":"88"}}]},{"task":"SET","data":[{"command":{"key":"key_89","value":"89"}}]},{"task":"SET","data":[{"command":{"key":"key_90","value":"90"}}]},{"task":"SET","data":[{"command":{"key":"key_91","value":"91"}}]},{"task":"SET","data":[{"command":{"key":"key_92","value":"92"}}]},{"task":"SET","data":[{"command":{"key":"key_93","value":"93"}}]},{"task":"SET","data":[{"command":{"key":"key_94","value":"94"}}]},{"task":"SET","data":[{"command":{"key":"key_95","value":"95"}}]},{"task":"SET","data":[{"command":{"key":"key_96","value":"96"}}]},{"task":"SET","data":[{"command":{"key":"key_97","value":"97"}}]},{"task":"SET","data":[{"command":{"key":"key_98","value":"98"}}]},{"task":"SET","data":[{"command":{"key":"key_99","value":"99"}}]},{"task":"SET","data":[{"command":{"key":"key_100","value":"100"}}]},{"task":"GET","data":[{"command":{"key":"key_1","value":"1"}}]},{"task":"GET","data":[{"command":{"key":"key_2","value":"2"}}]},{"task":"GET","data":[{"command":{"key":"key_3","value":"3"}}]},{"task":"GET","data":[{"command":{"key":"key_4","value":"4"}}]},{"task":"GET","data":[{"command":{"key":"key_5","value":"5"}}]},{"task":"GET","data":[{"command":{"key":"key_6","value":"6"}}]},{"task":"GET","data":[{"command":{"key":"key_7","value":"7"}}]},{"task":"GET","data":[{"command":{"key":"key_8","value":"8"}}]},{"task":"GET","data":[{"command":{"key":"key_9","value":"9"}}]},{"task":"GET","data":[{"command":{"key":"key_10","value":"10"}}]},{"task":"GET","data":[{"command":{"key":"key_11","value":"11"}}]},{"task":"GET","data":[{"command":{"key":"key_12","value":"12"}}]},{"task":"GET","data":[{"command":{"key":"key_13","value":"13"}}]},{"task":"GET","data":[{"command":{"key":"key_14","value":"14"}}]},{"task":"GET","data":[{"command":{"key":"key_15","value":"15"}}]},{"task":"GET","data":[{"command":{"key":"key_16","value":"16"}}]},{"task":"GET","data":[{"command":{"key":"key_17","value":"17"}}]},{"task":"GET","data":[{"command":{"key":"key_18","value":"18"}}]},{"task":"GET","data":[{"command":{"key":"key_19","value":"19"}}]},{"task":"GET","data":[{"command":{"key":"key_20","value":"20"}}]},{"task":"GET","data":[{"command":{"key":"key_21","value":"21"}}]},{"task":"GET","data":[{"command":{"key":"key_22","value":"22"}}]},{"task":"GET","data":[{"command":{"key":"key_23","value":"23"}}]},{"task":"GET","data":[{"command":{"key":"key_24","value":"24"}}]},{"task":"GET","data":[{"command":{"key":"key_25","value":"25"}}]},{"task":"GET","data":[{"command":{"key":"key_26","value":"26"}}]},{"task":"GET","data":[{"command":{"key":"key_27","value":"27"}}]},{"task":"GET","data":[{"command":{"key":"key_28","value":"28"}}]},{"task":"GET","data":[{"command":{"key":"key_29","value":"29"}}]},{"task":"GET","data":[{"command":{"key":"key_30","value":"30"}}]},{"task":"GET","data":[{"command":{"key":"key_31","value":"31"}}]},{"task":"GET","data":[{"command":{"key":"key_32","value":"32"}}]},{"task":"GET","data":[{"command":{"key":"key_33","value":"33"}}]},{"task":"GET","data":[{"command":{"key":"key_34","value":"34"}}]},{"task":"GET","data":[{"command":{"key":"key_35","value":"35"}}]},{"task":"GET","data":[{"command":{"key":"key_36","value":"36"}}]},{"task":"GET","data":[{"command":{"key":"key_37","value":"37"}}]},{"task":"GET","data":[{"command":{"key":"key_38","value":"38"}}]},{"task":"GET","data":[{"command":{"key":"key_39","value":"39"}}]},{"task":"GET","data":[{"command":{"key":"key_40","value":"40"}}]},{"task":"GET","data":[{"command":{"key":"key_41","value":"41"}}]},{"task":"GET","data":[{"command":{"key":"key_42","value":"42"}}]},{"task":"GET","data":[{"command":{"key":"key_43","value":"43"}}]},{"task":"GET","data":[{"command":{"key":"key_44","value":"44"}}]},{"task":"GET","data":[{"command":{"key":"key_45","value":"45"}}]},{"task":"GET","data":[{"command":{"key":"key_46","value":"46"}}]},{"task":"GET","data":[{"command":{"key":"key_47","value":"47"}}]},{"task":"GET","data":[{"command":{"key":"key_48","value":"48"}}]},{"task":"GET","data":[{"command":{"key":"key_49","value":"49"}}]},{"task":"GET","data":[{"command":{"key":"key_50","value":"50"}}]},{"task":"GET","data":[{"command":{"key":"key_51","value":"51"}}]},{"task":"GET","data":[{"command":{"key":"key_52","value":"52"}}]},{"task":"GET","data":[{"command":{"key":"key_53","value":"53"}}]},{"task":"GET","data":[{"command":{"key":"key_54","value":"54"}}]},{"task":"GET","data":[{"command":{"key":"key_55","value":"55"}}]},{"task":"GET","data":[{"command":{"key":"key_56","value":"56"}}]},{"task":"GET","data":[{"command":{"key":"key_57","value":"57"}}]},{"task":"GET","data":[{"command":{"key":"key_58","value":"58"}}]},{"task":"GET","data":[{"command":{"key":"key_59","value":"59"}}]},{"task":"GET","data":[{"command":{"key":"key_60","value":"60"}}]},{"task":"GET","data":[{"command":{"key":"key_61","value":"61"}}]},{"task":"GET","data":[{"command":{"key":"key_62","value":"62"}}]},{"task":"GET","data":[{"command":{"key":"key_63","value":"63"}}]},{"task":"GET","data":[{"command":{"key":"key_64","value":"64"}}]},{"task":"GET","data":[{"command":{"key":"key_65","value":"65"}}]},{"task":"GET","data":[{"command":{"key":"key_66","value":"66"}}]},{"task":"GET","data":[{"command":{"key":"key_67","value":"67"}}]},{"task":"GET","data":[{"command":{"key":"key_68","value":"68"}}]},{"task":"GET","data":[{"command":{"key":"key_69","value":"69"}}]},{"task":"GET","data":[{"command":{"key":"key_70","value":"70"}}]},{"task":"GET","data":[{"command":{"key":"key_71","value":"71"}}]},{"task":"GET","data":[{"command":{"key":"key_72","value":"72"}}]},{"task":"GET","data":[{"command":{"key":"key_73","value":"73"}}]},{"task":"GET","data":[{"command":{"key":"key_74","value":"74"}}]},{"task":"GET","data":[{"command":{"key":"key_75","value":"75"}}]},{"task":"GET","data":[{"command":{"key":"key_76","value":"76"}}]},{"task":"GET","data":[{"command":{"key":"key_77","value":"77"}}]},{"task":"GET","data":[{"command":{"key":"key_78","value":"78"}}]},{"task":"GET","data":[{"command":{"key":"key_79","value":"79"}}]},{"task":"GET","data":[{"command":{"key":"key_80","value":"80"}}]},{"task":"GET","data":[{"command":{"key":"key_81","value":"81"}}]},{"task":"GET","data":[{"command":{"key":"key_82","value":"82"}}]},{"task":"GET","data":[{"command":{"key":"key_83","value":"83"}}]},{"task":"GET","data":[{"command":{"key":"key_84","value":"84"}}]},{"task":"GET","data":[{"command":{"key":"key_85","value":"85"}}]},{"task":"GET","data":[{"command":{"key":"key_86","value":"86"}}]},{"task":"GET","data":[{"command":{"key":"key_87","value":"87"}}]},{"task":"GET","data":[{"command":{"key":"key_88","value":"88"}}]},{"task":"GET","data":[{"command":{"key":"key_89","value":"89"}}]},{"task":"GET","data":[{"command":{"key":"key_90","value":"90"}}]},{"task":"GET","data":[{"command":{"key":"key_91","value":"91"}}]},{"task":"GET","data":[{"command":{"key":"key_92","value":"92"}}]},{"task":"GET","data":[{"command":{"key":"key_93","value":"93"}}]},{"task":"GET","data":[{"command":{"key":"key_94","value":"94"}}]},{"task":"GET","data":[{"command":{"key":"key_95","value":"95"}}]},{"task":"GET","data":[{"command":{"key":"key_96","value":"96"}}]},{"task":"GET","data":[{"command":{"key":"key_97","value":"97"}}]},{"task":"GET","data":[{"command":{"key":"key_98","value":"98"}}]},{"task":"GET","data":[{"command":{"key":"key_99","value":"99"}}]},{"task":"GET","data":[{"command":{"key":"key_100","value":"100"}}]}]
20 changes: 19 additions & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
"one-time": "^1.0.0",
"promise-queue": "^2.2.5",
"rimraf": "^5.0.5",
"tick-tock": "^1.0.0"
"tick-tock": "^1.0.0",
"uuid": "^9.0.1"
}
}
103 changes: 85 additions & 18 deletions proxy.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
/**
* @description This file serves as the basis for the event emitting proxy server that talks to the raft cluster
* @link https://stackoverflow.com/questions/35054868/sending-socket-data-separately-in-node-js -- since this is a TCP stream hence we have to separate out the stuff.
* @link https://stackoverflow.com/questions/12872563/issues-when-reading-a-string-from-tcp-socket-in-node-js
*/

const argv = require("argh").argv;
const net = require("net");
const { EventEmitter } = require("events");

let port = +argv.port || 8081; // read the port from command line arguments

class QueryQueue extends EventEmitter {
constructor() {
super();
Expand All @@ -17,24 +22,66 @@ class QueryQueue extends EventEmitter {
this.emit("newQuery");
}

async execute(query) {
console.log("inside execute");
return new Promise((resolve, reject) => {
var client = net.createConnection({ port: port + 1000 }, () => {
console.log("connected to server at port", port + 1000);
});
// write this query to socket
console.log("query: ", query);
client.write(JSON.stringify(query) + "\n");
client.on("data", (data) => {
if (data === undefined) {
console.log("*****************");
console.log("data is undefined");
console.log("*****************");
}
if (data.toString().trim() != "Connected") {
console.log(
"data in response of proxy socket write:",
data.toString()
);
resolve(data.toString());
client.destroy();
} else {
console.log("data: ", data.toString());
}
});

client.on("close", () => {});

client.on("error", reject);
});
}

processQueue() {
if (this.isProcessing || this.queue.length === 0) {
return;
}
this.isProcessing = true;
const { query, callback, queryId } = this.queue.shift();
const { query, callback, queryId } = this.queue[0];

this.execute(query)
.then((result) => callback(null, queryId, result))
.catch((error) => callback(error, queryId))
.then((result) => {
console.log("result: ", result);
console.log("result.toString(): ", result.toString());
if (result.toString().trim() === "error 8") {
let e = new Error("Error 8 Another connection active trying again");
callback(e, queryId);
} else this.queue.shift();
return callback(null, queryId, result);
})
.catch((error) => {
console.log("error: ", error);
console.log("error.toString(): ", error.toString());
return callback(error, queryId);
})
.finally(() => {
this.isProcessing = false;
this.processQueue();
});
}

async execute(query) {
// TODO: Replace with KV GET SET Logic
}
}

const queryQueue = new QueryQueue();
Expand All @@ -51,18 +98,38 @@ server.on("connection", (socket) => {
activeConnection = true;

socket.write("Connected\n");

let chunk = ""; // stores data from the stream
socket.on("data", (data) => {
const [queryId, query] = data.toString().trim().split(":", 2);
queryQueue.addQuery(queryId, query, (error, queryId, result) => {
let response;
if (error) {
response = `${queryId}<|>Error: ${error.message}`;
} else {
response = `${queryId}<|>${JSON.stringify(result)}`;
}
socket.write(response + "\n");
});
console.log("data: ", data.toString());
chunk += data.toString();
d_index = chunk.indexOf("\n");
while (d_index > -1) {
const element = chunk.substring(0, d_index);
console.log("element: ", element);
const [queryId, query] = element.trim().split("|", 2);
console.log("queryId ", queryId, "query ", query);
queryQueue.addQuery(queryId, query, (error, queryId, result) => {
let response;
if (error) {
response = `${queryId}<|>Error: ${error.message}`;
} else {
console.log("result in final formatter: ", result);
response = `${queryId}<|>${JSON.stringify(result)}`;
}
socket.write(response + "\n");
});
chunk = chunk.substring(d_index + 1); // Cuts off the processed chunk
d_index = chunk.indexOf("\n");
}
// data = data
// .toString()
// .split("\n")
// .map((str) => {
// console.log("str: ", str);
// return str.trim();
// })
// .filter((str) => str !== "")
// .forEach((element) => {});
});

socket.on("close", () => {
Expand Down
Loading