DiskCache fix when using clustering.
This commit is contained in:
		
							parent
							
								
									15e75034f9
								
							
						
					
					
						commit
						f50e077b9c
					
				@ -1,5 +1,6 @@
 | 
			
		||||
const config = require('../../mempool-config.json');
 | 
			
		||||
import * as fs from 'fs';
 | 
			
		||||
import * as cluster from 'cluster';
 | 
			
		||||
import * as process from 'process';
 | 
			
		||||
import memPool from './mempool';
 | 
			
		||||
import blocks from './blocks';
 | 
			
		||||
 | 
			
		||||
@ -7,15 +8,17 @@ class DiskCache {
 | 
			
		||||
  static FILE_NAME = './cache.json';
 | 
			
		||||
 | 
			
		||||
  constructor() {
 | 
			
		||||
    process.on('SIGINT', () => {
 | 
			
		||||
      this.saveCacheToDisk();
 | 
			
		||||
      process.exit(2);
 | 
			
		||||
    });
 | 
			
		||||
    if (process.env.workerId === '0' || !config.CLUSTER_NUM_CORES || config.CLUSTER_NUM_CORES === 1) {
 | 
			
		||||
      process.on('SIGINT', () => {
 | 
			
		||||
        this.saveCacheToDisk();
 | 
			
		||||
        process.exit(2);
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
    process.on('SIGTERM', () => {
 | 
			
		||||
      this.saveCacheToDisk();
 | 
			
		||||
      process.exit(2);
 | 
			
		||||
    });
 | 
			
		||||
      process.on('SIGTERM', () => {
 | 
			
		||||
        this.saveCacheToDisk();
 | 
			
		||||
        process.exit(2);
 | 
			
		||||
      });
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  saveCacheToDisk() {
 | 
			
		||||
 | 
			
		||||
@ -37,12 +37,19 @@ class Server {
 | 
			
		||||
 | 
			
		||||
      const numCPUs = config.CLUSTER_NUM_CORES;
 | 
			
		||||
      for (let i = 0; i < numCPUs; i++) {
 | 
			
		||||
        cluster.fork();
 | 
			
		||||
        const env = { workerId: i };
 | 
			
		||||
        const worker = cluster.fork(env);
 | 
			
		||||
        worker.process['env'] = env;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      cluster.on('exit', (worker, code, signal) => {
 | 
			
		||||
        console.log(`Mempool Worker #${worker.process.pid} died. Restarting in 10 seconds...`, signal || code);
 | 
			
		||||
        setTimeout(() => { cluster.fork(); }, 10000);
 | 
			
		||||
        const workerId = worker.process['env'].workerId;
 | 
			
		||||
        console.log(`Mempool Worker PID #${worker.process.pid} workerId: ${workerId} died. Restarting in 10 seconds...`, signal || code);
 | 
			
		||||
        setTimeout(() => {
 | 
			
		||||
          const env = { workerId: workerId };
 | 
			
		||||
          const newWorker = cluster.fork(env);
 | 
			
		||||
          newWorker.process['env'] = env;
 | 
			
		||||
        }, 10000);
 | 
			
		||||
      });
 | 
			
		||||
    } else {
 | 
			
		||||
      this.startServer(true);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user