mirror of
https://github.com/jwinterm/nodejs-pool.git
synced 2026-10-17 05:21:27 +02:00
New cache function for bulk-inserts in single txn to avoid excessive disk writes and blocking by worker.
Adding new getBlockByID function for future tool functionality.
This commit is contained in:
@@ -218,6 +218,21 @@ function Database(){
|
||||
return highestBlock;
|
||||
};
|
||||
|
||||
this.getBlockByID = function(blockID){
|
||||
this.refreshEnv();
|
||||
debug("Getting the data for blockID: " + blockID);
|
||||
let txn = this.env.beginTxn({readOnly: true});
|
||||
let data = txn.getBinary(blockID);
|
||||
if (data === null){
|
||||
debug("Unable to get block at height: "+ blockID);
|
||||
return false;
|
||||
}
|
||||
let blockData = global.protos.Block.decode(data);
|
||||
txn.commit();
|
||||
debug("Done getting the last block for: "+ blockData.poolType + " height of: "+ blockID);
|
||||
return blockData;
|
||||
};
|
||||
|
||||
this.calculateShares = function(blockData, blockHeight){
|
||||
debug("Calculating shares for "+ blockData.hash);
|
||||
this.refreshEnv();
|
||||
@@ -376,6 +391,16 @@ function Database(){
|
||||
txn.commit();
|
||||
};
|
||||
|
||||
this.bulkSetCache = function(cacheUpdates){
|
||||
let txn = this.env.beginTxn();
|
||||
for (let key in cacheUpdates){
|
||||
if (cacheUpdates.hasOwnProperty(key)){
|
||||
txn.putString(this.cacheDB, key, JSON.stringify(cacheUpdates[key]));
|
||||
}
|
||||
}
|
||||
txn.commit();
|
||||
};
|
||||
|
||||
this.cleanShareDB = function() {
|
||||
/*
|
||||
This function takes the difficulty of the current block, and the last PPS block. If it's 0, save everything,
|
||||
|
||||
+7
-5
@@ -137,6 +137,7 @@ function updateShareStats() {
|
||||
if (globalMinerList === false) {
|
||||
globalMinerList = [];
|
||||
}
|
||||
let cache_updates = {};
|
||||
// pplns: 0, pps: 0, solo: 0, prop: 0, global: 0
|
||||
['pplns', 'pps', 'solo', 'prop', 'global'].forEach(function (key) {
|
||||
let cachedData = global.database.getCache(key + "_stats");
|
||||
@@ -172,7 +173,7 @@ function updateShareStats() {
|
||||
minerHistory: [{ts: currentTime, cn: cachedData.hash}]
|
||||
};
|
||||
}
|
||||
global.database.setCache(key + "_stats", cachedData);
|
||||
cache_updates[key + "_stats"] = cachedData;
|
||||
});
|
||||
minerList.forEach(function (miner) {
|
||||
if (globalMinerList.indexOf(miner) === -1) {
|
||||
@@ -206,7 +207,7 @@ function updateShareStats() {
|
||||
badShares: 0
|
||||
};
|
||||
}
|
||||
global.database.setCache(miner, cachedData);
|
||||
cache_updates[miner] = cachedData;
|
||||
});
|
||||
globalMinerList.forEach(function (miner) {
|
||||
if (minerList.indexOf(miner) === -1) {
|
||||
@@ -234,14 +235,15 @@ function updateShareStats() {
|
||||
});
|
||||
}
|
||||
minerStats.hash = 0;
|
||||
global.database.setCache(miner, minerStats);
|
||||
cache_updates[miner] = minerStats;
|
||||
}
|
||||
}
|
||||
});
|
||||
Object.keys(identifiers).forEach(function (key) {
|
||||
global.database.setCache(key + '_identifiers', identifiers[key]);
|
||||
cache_updates[key + '_identifiers'] = identifiers[key];
|
||||
});
|
||||
global.database.setCache('minerList', globalMinerList);
|
||||
cache_updates['minerList'] = globalMinerList;
|
||||
global.database.bulkSetCache(cache_updates);
|
||||
callback(null);
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user