Commit 38c00ae9 authored by Nilanjan Daw's avatar Nilanjan Daw

Chain probability data now stored on DB

parent 79fe003b
...@@ -7,7 +7,8 @@ ...@@ -7,7 +7,8 @@
"db": { "db": {
"function_meta": "serverless", "function_meta": "serverless",
"metrics": "metrics", "metrics": "metrics",
"implicit_chain_meta": "implicit_chain" "implicit_chain_meta": "implicit_chain",
"explicit_chain_meta": "explicit_chain"
}, },
"network": { "network": {
"network_bridge": "hybrid_kafka-serverless", "network_bridge": "hybrid_kafka-serverless",
...@@ -34,6 +35,6 @@ ...@@ -34,6 +35,6 @@
"alpha": 0.7 "alpha": 0.7
}, },
"speculative_deployment": true, "speculative_deployment": true,
"JIT_deployment": false, "JIT_deployment": true,
"id_size": 20 "id_size": 20
} }
...@@ -14,10 +14,11 @@ const logger = libSupport.logger ...@@ -14,10 +14,11 @@ const logger = libSupport.logger
const registry_url = constants.registry_url const registry_url = constants.registry_url
let functionToResource = sharedMeta.functionToResource, let functionToResource = sharedMeta.functionToResource,
db = sharedMeta.db, db = sharedMeta.db,
conditionProbabilityExpilict = sharedMeta.conditionProbabilityExpilict, conditionProbabilityExplicit = sharedMeta.conditionProbabilityExplicit,
metricsDB = sharedMeta.metricsDB, metricsDB = sharedMeta.metricsDB,
metadataDB = sharedMeta.metadataDB metadataDB = sharedMeta.metadataDB,
explicitChainDB = sharedMeta.explicitChainDB
router.post('/deploy', (req, res) => { router.post('/deploy', (req, res) => {
...@@ -193,6 +194,11 @@ async function deployContainer(path, imageName) { ...@@ -193,6 +194,11 @@ async function deployContainer(path, imageName) {
router.post('/execute/:id', (req, res) => { router.post('/execute/:id', (req, res) => {
let map, aliases let map, aliases
let chain_id = req.params.id let chain_id = req.params.id
libSupport.fetchData(explicitChainDB + chain_id)
.then(chainData => {
console.log(chainData);
if (chainData.error !== "not_found")
conditionProbabilityExplicit[chain_id] = chainData
if (req.files && req.files.map) { if (req.files && req.files.map) {
map = JSON.parse(req.files.map.data.toString()); map = JSON.parse(req.files.map.data.toString());
let mapPlanner = JSON.parse(req.files.map.data.toString()); let mapPlanner = JSON.parse(req.files.map.data.toString());
...@@ -218,6 +224,7 @@ router.post('/execute/:id', (req, res) => { ...@@ -218,6 +224,7 @@ router.post('/execute/:id', (req, res) => {
}) })
}) })
} }
})
}) })
...@@ -226,6 +233,12 @@ async function orchestrator(chain_id, res, payload, map, aliases, result) { ...@@ -226,6 +233,12 @@ async function orchestrator(chain_id, res, payload, map, aliases, result) {
if (Object.keys(map).length == 0) { if (Object.keys(map).length == 0) {
console.log("time to resolve", result); console.log("time to resolve", result);
res.json(result) res.json(result)
let payload = {
method: 'put',
body: JSON.stringify(conditionProbabilityExplicit[chain_id]),
headers: { 'Content-Type': 'application/json' }
}
libSupport.fetchData(explicitChainDB + chain_id, payload)
// return resolve(result) // return resolve(result)
} }
...@@ -246,7 +259,7 @@ async function orchestrator(chain_id, res, payload, map, aliases, result) { ...@@ -246,7 +259,7 @@ async function orchestrator(chain_id, res, payload, map, aliases, result) {
delete map[functionName] delete map[functionName]
aliases[functionName].status = "running" aliases[functionName].status = "running"
fetch(url, data).then(res => res.json()) libSupport.fetchData(url, data)
.then(json => { .then(json => {
// console.log(json); // console.log(json);
result[functionName] = json result[functionName] = json
...@@ -264,21 +277,21 @@ async function orchestrator(chain_id, res, payload, map, aliases, result) { ...@@ -264,21 +277,21 @@ async function orchestrator(chain_id, res, payload, map, aliases, result) {
if (metadata.type === "conditional" && metadata.wait_for.length == 0) { if (metadata.type === "conditional" && metadata.wait_for.length == 0) {
let conditionResult = checkCondition(metadata.condition.op1, metadata.condition.op2, metadata.condition.op, result) let conditionResult = checkCondition(metadata.condition.op1, metadata.condition.op2, metadata.condition.op, result)
if (conditionProbabilityExpilict[chain_id] === undefined) if (conditionProbabilityExplicit[chain_id] === undefined)
conditionProbabilityExpilict[chain_id] = {} conditionProbabilityExplicit[chain_id] = {}
if (conditionProbabilityExpilict[chain_id][_key] === undefined) if (conditionProbabilityExplicit[chain_id][_key] === undefined)
conditionProbabilityExpilict[chain_id][_key] = { conditionProbabilityExplicit[chain_id][_key] = {
request_count: 0, request_count: 0,
probability: 0 probability: 0
} }
let oldProbability = conditionProbabilityExpilict[chain_id][_key].probability let oldProbability = conditionProbabilityExplicit[chain_id][_key].probability
let updateProbability = (conditionResult === 'success') ? 1.0 : 0.0 let updateProbability = (conditionResult === 'success') ? 1.0 : 0.0
conditionProbabilityExpilict[chain_id][_key].probability = conditionProbabilityExplicit[chain_id][_key].probability =
oldProbability * conditionProbabilityExpilict[chain_id][_key].request_count + updateProbability oldProbability * conditionProbabilityExplicit[chain_id][_key].request_count + updateProbability
conditionProbabilityExpilict[chain_id][_key].request_count++ conditionProbabilityExplicit[chain_id][_key].request_count++
conditionProbabilityExpilict[chain_id][_key].probability /= conditionProbabilityExplicit[chain_id][_key].probability /=
conditionProbabilityExpilict[chain_id][_key].request_count conditionProbabilityExplicit[chain_id][_key].request_count
console.log(conditionResult, "probability table", conditionProbabilityExpilict); console.log(conditionResult, "probability table", conditionProbabilityExplicit);
let branchToTake = metadata[conditionResult] let branchToTake = metadata[conditionResult]
branchMap = map[branchToTake] branchMap = map[branchToTake]
delete map[_key] delete map[_key]
...@@ -323,7 +336,7 @@ async function speculative_deployment(chain_id, aliases, map, offset, done, toBe ...@@ -323,7 +336,7 @@ async function speculative_deployment(chain_id, aliases, map, offset, done, toBe
if (metadata.type === 'conditional' && !constants.JIT_deployment) { if (metadata.type === 'conditional' && !constants.JIT_deployment) {
let probability let probability
try { try {
probability = conditionProbabilityExpilict[chain_id][mod].probability probability = conditionProbabilityExplicit[chain_id][mod].probability
} catch (error) { } catch (error) {
console.log("branch probability not present, random branch taken"); console.log("branch probability not present, random branch taken");
...@@ -390,7 +403,7 @@ async function speculative_deployment(chain_id, aliases, map, offset, done, toBe ...@@ -390,7 +403,7 @@ async function speculative_deployment(chain_id, aliases, map, offset, done, toBe
console.log("setting notification for conditional", mod); console.log("setting notification for conditional", mod);
let probability let probability
try { try {
probability = conditionProbabilityExpilict[chain_id][mod].probability probability = conditionProbabilityExplicit[chain_id][mod].probability
} catch (error) { } catch (error) {
console.log("branch probability not present, random branch taken"); console.log("branch probability not present, random branch taken");
probability = Math.random() probability = Math.random()
......
...@@ -6,11 +6,10 @@ const winston = require('winston') ...@@ -6,11 +6,10 @@ const winston = require('winston')
const constants = require('.././constants.json') const constants = require('.././constants.json')
const secrets = require('./secrets.json') const secrets = require('./secrets.json')
const metrics = require('./metrics') const metrics = require('./metrics')
const sharedMeta = require('./shared_meta')
const { createLogger, format, transports } = winston; const { createLogger, format, transports } = winston;
const heap = require('heap') const heap = require('heap')
let implicitChainDB = sharedMeta.implicitChainDB
let kafka = require('kafka-node'), let kafka = require('kafka-node'),
Producer = kafka.Producer, Producer = kafka.Producer,
client = new kafka.KafkaClient({ client = new kafka.KafkaClient({
...@@ -19,7 +18,8 @@ let kafka = require('kafka-node'), ...@@ -19,7 +18,8 @@ let kafka = require('kafka-node'),
}), }),
producer = new Producer(client) producer = new Producer(client)
let implicitChainDB = `http://${secrets.couchdb_username}:${secrets.couchdb_password}@${constants.couchdb_host}`
implicitChainDB = implicitChainDB + "/" + constants.implicit_chain_db_names + "/"
/** /**
* Generates unique IDs of arbitrary length * Generates unique IDs of arbitrary length
......
...@@ -7,7 +7,7 @@ let db = new Map(), // queue holding request to be dispatched ...@@ -7,7 +7,7 @@ let db = new Map(), // queue holding request to be dispatched
// resources associated with the function // resources associated with the function
workerNodes = new Map(), // list of worker nodes currently known to the DM workerNodes = new Map(), // list of worker nodes currently known to the DM
functionBranchTree = new Map(), // a tree to store function branch predictions functionBranchTree = new Map(), // a tree to store function branch predictions
conditionProbabilityExpilict = new Map() // tree holding conditional probabilities for explicit chains conditionProbabilityExplicit = new Map() // tree holding conditional probabilities for explicit chains
/** /**
* URL to the couchdb database server used to store data * URL to the couchdb database server used to store data
...@@ -22,9 +22,11 @@ metricsDB = metricsDB + "/" + constants.db.metrics + "/" ...@@ -22,9 +22,11 @@ metricsDB = metricsDB + "/" + constants.db.metrics + "/"
let implicitChainDB = `http://${secrets.couchdb_username}:${secrets.couchdb_password}@${constants.couchdb_host}` let implicitChainDB = `http://${secrets.couchdb_username}:${secrets.couchdb_password}@${constants.couchdb_host}`
implicitChainDB = implicitChainDB + "/" + constants.db.implicit_chain_meta + "/" implicitChainDB = implicitChainDB + "/" + constants.db.implicit_chain_meta + "/"
let explicitChainDB = `http://${secrets.couchdb_username}:${secrets.couchdb_password}@${constants.couchdb_host}`
explicitChainDB = explicitChainDB + "/" + constants.db.explicit_chain_meta + "/"
module.exports = { module.exports = {
db, functionBranchTree, functionToResource, workerNodes, resourceMap, db, functionBranchTree, functionToResource, workerNodes, resourceMap,
conditionProbabilityExpilict, conditionProbabilityExplicit,
metadataDB, metricsDB, implicitChainDB metadataDB, metricsDB, implicitChainDB, explicitChainDB
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment