From 8b6c2c0c7a70f067e7d95f29a75812ae4d7ce357 Mon Sep 17 00:00:00 2001 From: Vinnie Falco Date: Mon, 3 Jun 2013 21:08:47 -0700 Subject: [PATCH] Split Job and JobQueue and move functions to the .cpp --- modules/ripple_main/ripple_main.cpp | 30 +-- newcoin.vcxproj | 25 +- newcoin.vcxproj.filters | 233 +++++++++--------- src/cpp/ripple/Amount.cpp | 2 - src/cpp/ripple/Application.cpp | 1 - src/cpp/ripple/CallRPC.cpp | 1 - src/cpp/ripple/ConnectionPool.cpp | 1 - src/cpp/ripple/HttpsClient.cpp | 2 - src/cpp/ripple/Interpreter.cpp | 1 - src/cpp/ripple/JobQueue.h | 125 ---------- src/cpp/ripple/LoadManager.cpp | 1 - src/cpp/ripple/Peer.cpp | 1 - src/cpp/ripple/PeerDoor.cpp | 1 - src/cpp/ripple/RPCDoor.cpp | 1 - src/cpp/ripple/SNTPClient.cpp | 2 - src/cpp/ripple/WSDoor.cpp | 2 - src/cpp/ripple/WSHandler.h | 1 - src/cpp/ripple/main.cpp | 1 - .../ripple/{Config.cpp => ripple_Config.cpp} | 10 - src/cpp/ripple/{Config.h => ripple_Config.h} | 24 +- src/cpp/ripple/ripple_Job.cpp | 122 +++++++++ src/cpp/ripple/ripple_Job.h | 81 ++++++ .../{JobQueue.cpp => ripple_JobQueue.cpp} | 74 ------ src/cpp/ripple/ripple_JobQueue.h | 52 ++++ src/cpp/ripple/ripple_LoadFeeTrack.cpp | 1 - src/cpp/ripple/rpc.cpp | 1 - 26 files changed, 416 insertions(+), 380 deletions(-) delete mode 100644 src/cpp/ripple/JobQueue.h rename src/cpp/ripple/{Config.cpp => ripple_Config.cpp} (98%) rename src/cpp/ripple/{Config.h => ripple_Config.h} (93%) create mode 100644 src/cpp/ripple/ripple_Job.cpp create mode 100644 src/cpp/ripple/ripple_Job.h rename src/cpp/ripple/{JobQueue.cpp => ripple_JobQueue.cpp} (77%) create mode 100644 src/cpp/ripple/ripple_JobQueue.h diff --git a/modules/ripple_main/ripple_main.cpp b/modules/ripple_main/ripple_main.cpp index a793bf3b9a..f3035c3196 100644 --- a/modules/ripple_main/ripple_main.cpp +++ b/modules/ripple_main/ripple_main.cpp @@ -28,19 +28,17 @@ #include #include #include +#include +#include +#include #include #include -#include -#include -#include - -#include -#include -#include #include #include +#include #include +#include #include #include #include @@ -54,10 +52,12 @@ #include #include #include -#include #include +#include -//------------------------------------------------------------------------------ +#include +#include +#include //------------------------------------------------------------------------------ @@ -85,10 +85,13 @@ // // VFALCO: BEGIN CLEAN AREA +#include "src/cpp/ripple/ripple_Config.h" #include "src/cpp/ripple/ripple_DatabaseCon.h" #include "src/cpp/ripple/ripple_HashValue.h" #include "src/cpp/ripple/ripple_LoadEvent.h" #include "src/cpp/ripple/ripple_LoadMonitor.h" +#include "src/cpp/ripple/ripple_Job.h" +#include "src/cpp/ripple/ripple_JobQueue.h" #include "src/cpp/ripple/ripple_IFeatures.h" #include "src/cpp/ripple/ripple_IFeeVote.h" @@ -111,18 +114,16 @@ #include "src/cpp/ripple/Contract.h" #include "src/cpp/ripple/Interpreter.h" #include "src/cpp/ripple/Operation.h" - +// VFALCO: NOTE, Order matters #include "src/cpp/ripple/AcceptedLedger.h" #include "src/cpp/ripple/AccountItems.h" #include "src/cpp/ripple/AccountSetTransactor.h" #include "src/cpp/ripple/AccountState.h" -#include "src/cpp/ripple/JobQueue.h" #include "src/cpp/ripple/Application.h" #include "src/cpp/ripple/AutoSocket.h" #include "src/cpp/ripple/CallRPC.h" #include "src/cpp/ripple/CanonicalTXSet.h" #include "src/cpp/ripple/ChangeTransactor.h" -#include "src/cpp/ripple/Config.h" #include "src/cpp/ripple/ConnectionPool.h" #include "src/cpp/ripple/FeatureTable.h" #include "src/cpp/ripple/HTTPRequest.h" @@ -215,7 +216,6 @@ static DH* handleTmpDh(SSL* ssl, int is_export, int iKeyLength) #include "src/cpp/ripple/CallRPC.cpp" #include "src/cpp/ripple/CanonicalTXSet.cpp" #include "src/cpp/ripple/ChangeTransactor.cpp" // no log -#include "src/cpp/ripple/Config.cpp" // no log #include "src/cpp/ripple/ConnectionPool.cpp" #include "src/cpp/ripple/Contract.cpp" // no log #include "src/cpp/ripple/DBInit.cpp" @@ -223,7 +223,6 @@ static DH* handleTmpDh(SSL* ssl, int is_export, int iKeyLength) #include "src/cpp/ripple/HTTPRequest.cpp" #include "src/cpp/ripple/HttpsClient.cpp" #include "src/cpp/ripple/Interpreter.cpp" // no log -#include "src/cpp/ripple/JobQueue.cpp" #include "src/cpp/ripple/Ledger.cpp" #include "src/cpp/ripple/LedgerAcquire.cpp" #include "src/cpp/ripple/LedgerConsensus.cpp" @@ -287,11 +286,14 @@ static DH* handleTmpDh(SSL* ssl, int is_export, int iKeyLength) // Refactored sources +#include "src/cpp/ripple/ripple_Config.cpp" // no log #include "src/cpp/ripple/ripple_DatabaseCon.cpp" #include "src/cpp/ripple/ripple_Features.cpp" #include "src/cpp/ripple/ripple_FeeVote.cpp" #include "src/cpp/ripple/ripple_HashRouter.cpp" #include "src/cpp/ripple/ripple_HashValue.cpp" +#include "src/cpp/ripple/ripple_Job.cpp" +#include "src/cpp/ripple/ripple_JobQueue.cpp" #include "src/cpp/ripple/ripple_LoadEvent.cpp" #include "src/cpp/ripple/ripple_LoadMonitor.cpp" #include "src/cpp/ripple/ripple_LogWebsockets.cpp" diff --git a/newcoin.vcxproj b/newcoin.vcxproj index fa8183fda3..cae5429281 100644 --- a/newcoin.vcxproj +++ b/newcoin.vcxproj @@ -744,7 +744,7 @@ true true - + true true true @@ -790,12 +790,6 @@ true true - - true - true - true - true - true true @@ -862,6 +856,18 @@ true true + + true + true + true + true + + + true + true + true + true + true true @@ -1633,7 +1639,7 @@ - + @@ -1641,7 +1647,6 @@ - @@ -1653,6 +1658,8 @@ + + diff --git a/newcoin.vcxproj.filters b/newcoin.vcxproj.filters index 9cd0e5cb2c..7ddf1696f4 100644 --- a/newcoin.vcxproj.filters +++ b/newcoin.vcxproj.filters @@ -112,15 +112,6 @@ {3f351c55-360d-40bc-a136-4944ce572efd} - - {4b5cbcb4-5525-4ac8-83b7-32bfb0a0b5bf} - - - {78b0aa30-f238-4e41-821f-ce84dde82ceb} - - - {6097a179-ddad-4c69-9a34-2e3fc2c9fa1d} - {1d36a65a-de7c-41f9-85dd-93b29d67606e} @@ -142,6 +133,12 @@ {c441b367-d096-401f-a3f0-5ac24290d7b7} + + {78b0aa30-f238-4e41-821f-ce84dde82ceb} + + + {6097a179-ddad-4c69-9a34-2e3fc2c9fa1d} + @@ -468,15 +465,6 @@ 1. Modules\ripple_main\_unfactored\contracts - - 1. Modules\ripple_main\_unfactored\serialization - - - 1. Modules\ripple_main\_unfactored\serialization - - - 1. Modules\ripple_main\_unfactored\serialization - 1. Modules\ripple_main\_unfactored\types @@ -504,24 +492,6 @@ 2. Empty\ripple_ledger - - 1. Modules\ripple_main\_unfactored\rpc - - - 1. Modules\ripple_main\_unfactored\rpc - - - 1. Modules\ripple_main\_unfactored\rpc - - - 1. Modules\ripple_main\_unfactored\rpc - - - 1. Modules\ripple_main\_unfactored\rpc - - - 1. Modules\ripple_main\_unfactored\rpc - 2. Empty\ripple_client @@ -531,30 +501,21 @@ 1. Modules\ripple_main\_unfactored\transactions - - 1. Modules\ripple_main\_unfactored\rpc - 2. Empty\ripple_db - 1. Modules\ripple_main\_unfactored\storage + 1. Modules\ripple_main\_unfactored\db - 1. Modules\ripple_main\_unfactored\storage + 1. Modules\ripple_main\_unfactored\db - 1. Modules\ripple_main\_unfactored\storage + 1. Modules\ripple_main\_unfactored\db 1. Modules\ripple_main - - 1. Modules\ripple_main\_unfactored\http - - - 1. Modules\ripple_main\_unfactored\http - 2. Empty\ripple_net @@ -648,12 +609,6 @@ 1. Modules\ripple_main\_unfactored\main - - 1. Modules\ripple_main\_unfactored\main - - - 1. Modules\ripple_main\_unfactored\main - 1. Modules\ripple_main\_unfactored\main @@ -661,22 +616,22 @@ 1. Modules\ripple_main\_unfactored\main - 1. Modules\ripple_main\_unfactored\sockets + 1. Modules\ripple_main\_unfactored\network - 1. Modules\ripple_main\_unfactored\sockets + 1. Modules\ripple_main\_unfactored\network - 1. Modules\ripple_main\_unfactored\sockets + 1. Modules\ripple_main\_unfactored\network - 1. Modules\ripple_main\_unfactored\sockets + 1. Modules\ripple_main\_unfactored\network - 1. Modules\ripple_main\_unfactored\sockets + 1. Modules\ripple_main\_unfactored\network - 1. Modules\ripple_main\_unfactored\sockets + 1. Modules\ripple_main\_unfactored\network 0. Third Party Code\beast @@ -813,6 +768,51 @@ 1. Modules\ripple_data\format + + 1. Modules\ripple_main\_unfactored\ledger + + + 1. Modules\ripple_main\_unfactored\ledger + + + 1. Modules\ripple_main\_unfactored\ledger + + + 1. Modules\ripple_main\refactored + + + 1. Modules\ripple_main\refactored + + + 1. Modules\ripple_main\refactored + + + 1. Modules\ripple_main\_unfactored\network + + + 1. Modules\ripple_main\_unfactored\network + + + 1. Modules\ripple_main\_unfactored\rpc + + + 1. Modules\ripple_main\_unfactored\rpc + + + 1. Modules\ripple_main\_unfactored\rpc + + + 1. Modules\ripple_main\_unfactored\rpc + + + 1. Modules\ripple_main\_unfactored\rpc + + + 1. Modules\ripple_main\_unfactored\rpc + + + 1. Modules\ripple_main\_unfactored\rpc + @@ -1130,15 +1130,6 @@ 1. Modules\ripple_main\_unfactored\contracts - - 1. Modules\ripple_main\_unfactored\serialization - - - 1. Modules\ripple_main\_unfactored\serialization - - - 1. Modules\ripple_main\_unfactored\serialization - 1. Modules\ripple_main\_unfactored\types @@ -1163,27 +1154,6 @@ 2. Empty\ripple_ledger - - 1. Modules\ripple_main\_unfactored\rpc - - - 1. Modules\ripple_main\_unfactored\rpc - - - 1. Modules\ripple_main\_unfactored\rpc - - - 1. Modules\ripple_main\_unfactored\rpc - - - 1. Modules\ripple_main\_unfactored\rpc - - - 1. Modules\ripple_main\_unfactored\rpc - - - 1. Modules\ripple_main\_unfactored\rpc - 2. Empty\ripple_client @@ -1193,27 +1163,18 @@ 1. Modules\ripple_main\_unfactored\transactions - - 1. Modules\ripple_main\_unfactored\rpc - 2. Empty\ripple_db - 1. Modules\ripple_main\_unfactored\storage + 1. Modules\ripple_main\_unfactored\db - 1. Modules\ripple_main\_unfactored\storage + 1. Modules\ripple_main\_unfactored\db 1. Modules\ripple_main - - 1. Modules\ripple_main\_unfactored\http - - - 1. Modules\ripple_main\_unfactored\http - 2. Empty\ripple_net @@ -1346,38 +1307,32 @@ 1. Modules\ripple_main\_unfactored\main - - 1. Modules\ripple_main\_unfactored\main - - - 1. Modules\ripple_main\_unfactored\main - 1. Modules\ripple_main\_unfactored\main - 1. Modules\ripple_main\_unfactored\sockets + 1. Modules\ripple_main\_unfactored\network - 1. Modules\ripple_main\_unfactored\sockets + 1. Modules\ripple_main\_unfactored\network - 1. Modules\ripple_main\_unfactored\sockets + 1. Modules\ripple_main\_unfactored\network - 1. Modules\ripple_main\_unfactored\sockets + 1. Modules\ripple_main\_unfactored\network - 1. Modules\ripple_main\_unfactored\sockets + 1. Modules\ripple_main\_unfactored\network - 1. Modules\ripple_main\_unfactored\sockets + 1. Modules\ripple_main\_unfactored\network - 1. Modules\ripple_main\_unfactored\sockets + 1. Modules\ripple_main\_unfactored\network - 1. Modules\ripple_main\_unfactored\sockets + 1. Modules\ripple_main\_unfactored\network 1. Modules\ripple_main\refactored @@ -1502,6 +1457,54 @@ 1. Modules\ripple_data\format + + 1. Modules\ripple_main\_unfactored\ledger + + + 1. Modules\ripple_main\_unfactored\ledger + + + 1. Modules\ripple_main\_unfactored\ledger + + + 1. Modules\ripple_main\refactored + + + 1. Modules\ripple_main\refactored + + + 1. Modules\ripple_main\refactored + + + 1. Modules\ripple_main\_unfactored\network + + + 1. Modules\ripple_main\_unfactored\network + + + 1. Modules\ripple_main\_unfactored\rpc + + + 1. Modules\ripple_main\_unfactored\rpc + + + 1. Modules\ripple_main\_unfactored\rpc + + + 1. Modules\ripple_main\_unfactored\rpc + + + 1. Modules\ripple_main\_unfactored\rpc + + + 1. Modules\ripple_main\_unfactored\rpc + + + 1. Modules\ripple_main\_unfactored\rpc + + + 1. Modules\ripple_main\_unfactored\rpc + diff --git a/src/cpp/ripple/Amount.cpp b/src/cpp/ripple/Amount.cpp index 550b3df45c..b9ffdc20fd 100644 --- a/src/cpp/ripple/Amount.cpp +++ b/src/cpp/ripple/Amount.cpp @@ -9,8 +9,6 @@ #include #include -#include "Config.h" - SETUP_LOG (STAmount) uint64 STAmount::uRateOne = STAmount::getRate(STAmount(1), STAmount(1)); diff --git a/src/cpp/ripple/Application.cpp b/src/cpp/ripple/Application.cpp index b4b58ceba9..cb2a2e0d37 100644 --- a/src/cpp/ripple/Application.cpp +++ b/src/cpp/ripple/Application.cpp @@ -5,7 +5,6 @@ #include "leveldb/filter_policy.h" #include "AcceptedLedger.h" -#include "Config.h" #include "PeerDoor.h" #include "RPCDoor.h" diff --git a/src/cpp/ripple/CallRPC.cpp b/src/cpp/ripple/CallRPC.cpp index 293bd8230c..9058cdb3ea 100644 --- a/src/cpp/ripple/CallRPC.cpp +++ b/src/cpp/ripple/CallRPC.cpp @@ -23,7 +23,6 @@ #include "Application.h" #include "RPC.h" #include "RPCErr.h" -#include "Config.h" #include "CallRPC.h" diff --git a/src/cpp/ripple/ConnectionPool.cpp b/src/cpp/ripple/ConnectionPool.cpp index 641907babe..00564c7795 100644 --- a/src/cpp/ripple/ConnectionPool.cpp +++ b/src/cpp/ripple/ConnectionPool.cpp @@ -8,7 +8,6 @@ #include #include -#include "Config.h" #include "Peer.h" #include "PeerDoor.h" #include "Application.h" diff --git a/src/cpp/ripple/HttpsClient.cpp b/src/cpp/ripple/HttpsClient.cpp index 9720be7948..d772f076a3 100644 --- a/src/cpp/ripple/HttpsClient.cpp +++ b/src/cpp/ripple/HttpsClient.cpp @@ -10,8 +10,6 @@ #include #include -#include "Config.h" - #define CLIENT_MAX_HEADER (32*1024) SETUP_LOG (HttpsClient) diff --git a/src/cpp/ripple/Interpreter.cpp b/src/cpp/ripple/Interpreter.cpp index 4cde286c53..bd2ba21003 100644 --- a/src/cpp/ripple/Interpreter.cpp +++ b/src/cpp/ripple/Interpreter.cpp @@ -1,6 +1,5 @@ #include "Interpreter.h" #include "Operation.h" -#include "Config.h" /* We also need to charge for each op diff --git a/src/cpp/ripple/JobQueue.h b/src/cpp/ripple/JobQueue.h deleted file mode 100644 index 8819a52bc1..0000000000 --- a/src/cpp/ripple/JobQueue.h +++ /dev/null @@ -1,125 +0,0 @@ -#ifndef JOB_QUEUE__H -#define JOB_QUEUE__H - -// Note that this queue should only be used for CPU-bound jobs -// It is primarily intended for signature checking -enum JobType -{ - // must be in priority order, low to high - jtINVALID = -1, - jtPACK = 1, // Make a fetch pack for a peer - jtPUBOLDLEDGER = 2, // An old ledger has been accepted - jtVALIDATION_ut = 3, // A validation from an untrusted source - jtPROOFWORK = 4, // A proof of work demand from another server - jtPROPOSAL_ut = 5, // A proposal from an untrusted source - jtLEDGER_DATA = 6, // Received data for a ledger we're acquiring - jtUPDATE_PF = 7, // Update pathfinding requests - jtCLIENT = 8, // A websocket command from the client - jtTRANSACTION = 9, // A transaction received from the network - jtPUBLEDGER = 10, // Publish a fully-accepted ledger - jtWAL = 11, // Write-ahead logging - jtVALIDATION_t = 12, // A validation from a trusted source - jtWRITE = 13, // Write out hashed objects - jtTRANSACTION_l = 14, // A local transaction - jtPROPOSAL_t = 15, // A proposal from a trusted source - jtADMIN = 16, // An administrative operation - jtDEATH = 17, // job of death, used internally - -// special types not dispatched by the job pool - jtPEER = 24, - jtDISK = 25, - jtACCEPTLEDGER = 26, - jtTXN_PROC = 27, - jtOB_SETUP = 28, - jtPATH_FIND = 29, - jtHO_READ = 30, - jtHO_WRITE = 31, -}; // CAUTION: If you add new types, add them to JobType.cpp too - -// VFALCO: TODO, move this into the enum so it calculates itself? -#define NUM_JOB_TYPES 48 // why 48 and not 32? - -class Job -{ -public: - - Job() : mType(jtINVALID), mJobIndex(0) { ; } - - Job(JobType type, uint64 index) : mType(type), mJobIndex(index) - { ; } - - Job(JobType type, const std::string& name, uint64 index, LoadMonitor& lm, const FUNCTION_TYPE& job) - : mType(type), mJobIndex(index), mJob(job), mName(name) - { - // VFALCO: NOTE, what the heck does this mean? - mLoadMonitor = boost::make_shared(boost::ref(lm), name, false); - } - - JobType getType() const { return mType; } - void doJob(void) { mLoadMonitor->start(); mJob(*this); mLoadMonitor->reName(mName); } - void rename(const std::string& n) { mName = n; } - - bool operator<(const Job& j) const; - bool operator>(const Job& j) const; - bool operator<=(const Job& j) const; - bool operator>=(const Job& j) const; - - static const char* toString (JobType); - -protected: - JobType mType; - uint64 mJobIndex; - FUNCTION_TYPE mJob; - LoadEvent::pointer mLoadMonitor; - std::string mName; -}; - -class JobQueue -{ -public: - explicit JobQueue (boost::asio::io_service&); - - void addJob(JobType type, const std::string& name, const FUNCTION_TYPE& job); - - int getJobCount(JobType t); // Jobs waiting at this priority - int getJobCountTotal(JobType t); // Jobs waiting plus running at this priority - int getJobCountGE(JobType t); // All waiting jobs at or greater than this priority - std::vector< std::pair > > getJobCounts(); // jobs waiting, threads doing - - void shutdown(); - void setThreadCount(int c = 0); - - LoadEvent::pointer getLoadEvent(JobType t, const std::string& name) - { - return boost::make_shared(boost::ref(mJobLoads[t]), name, true); - } - - LoadEvent::autoptr getLoadEventAP(JobType t, const std::string& name) - { - return LoadEvent::autoptr(new LoadEvent(mJobLoads[t], name, true)); - } - - int isOverloaded(); - Json::Value getJson(int c = 0); - -private: - void threadEntry(); - void IOThread(boost::mutex::scoped_lock&); - - boost::mutex mJobLock; - boost::condition_variable mJobCond; - - uint64 mLastJob; - std::set mJobSet; - LoadMonitor mJobLoads [NUM_JOB_TYPES]; - int mThreadCount; - bool mShuttingDown; - - int mIOThreadCount; - int mMaxIOThreadCount; - boost::asio::io_service& mIOService; - - std::map > mJobCounts; -}; - -#endif diff --git a/src/cpp/ripple/LoadManager.cpp b/src/cpp/ripple/LoadManager.cpp index bb2acfc400..e5452c5104 100644 --- a/src/cpp/ripple/LoadManager.cpp +++ b/src/cpp/ripple/LoadManager.cpp @@ -4,7 +4,6 @@ #include #include -#include "Config.h" #include "Application.h" SETUP_LOG (LoadManager) diff --git a/src/cpp/ripple/Peer.cpp b/src/cpp/ripple/Peer.cpp index a13628abda..352c6a29dd 100644 --- a/src/cpp/ripple/Peer.cpp +++ b/src/cpp/ripple/Peer.cpp @@ -7,7 +7,6 @@ #include "Version.h" #include "Peer.h" -#include "Config.h" #include "Application.h" #include "SerializedTransaction.h" diff --git a/src/cpp/ripple/PeerDoor.cpp b/src/cpp/ripple/PeerDoor.cpp index 868a7bb5e6..1612ee4951 100644 --- a/src/cpp/ripple/PeerDoor.cpp +++ b/src/cpp/ripple/PeerDoor.cpp @@ -7,7 +7,6 @@ #include #include "Application.h" -#include "Config.h" SETUP_LOG (PeerDoor) diff --git a/src/cpp/ripple/RPCDoor.cpp b/src/cpp/ripple/RPCDoor.cpp index da79c9b486..a093751d11 100644 --- a/src/cpp/ripple/RPCDoor.cpp +++ b/src/cpp/ripple/RPCDoor.cpp @@ -1,6 +1,5 @@ #include "RPCDoor.h" #include "Application.h" -#include "Config.h" #include #include diff --git a/src/cpp/ripple/SNTPClient.cpp b/src/cpp/ripple/SNTPClient.cpp index 000b93af8e..a346b2e538 100644 --- a/src/cpp/ripple/SNTPClient.cpp +++ b/src/cpp/ripple/SNTPClient.cpp @@ -6,8 +6,6 @@ #include -#include "Config.h" - SETUP_LOG (SNTPClient) // #define SNTP_DEBUG diff --git a/src/cpp/ripple/WSDoor.cpp b/src/cpp/ripple/WSDoor.cpp index baf01cca3a..2e91b5768d 100644 --- a/src/cpp/ripple/WSDoor.cpp +++ b/src/cpp/ripple/WSDoor.cpp @@ -5,11 +5,9 @@ //#include "../websocketpp/src/websocketpp.hpp" #include "Application.h" -#include "Config.h" #include "NetworkOPs.h" #include "WSConnection.h" #include "WSHandler.h" -#include "Config.h" #include "WSDoor.h" diff --git a/src/cpp/ripple/WSHandler.h b/src/cpp/ripple/WSHandler.h index 0b62ec3f20..6a0a9e0679 100644 --- a/src/cpp/ripple/WSHandler.h +++ b/src/cpp/ripple/WSHandler.h @@ -2,7 +2,6 @@ #define __WSHANDLER__ #include "Application.h" -#include "Config.h" extern void initSSLContext(boost::asio::ssl::context& context, std::string key_file, std::string cert_file, std::string chain_file); diff --git a/src/cpp/ripple/main.cpp b/src/cpp/ripple/main.cpp index 0ef94a4d88..7625b34b6f 100644 --- a/src/cpp/ripple/main.cpp +++ b/src/cpp/ripple/main.cpp @@ -8,7 +8,6 @@ #include "Application.h" #include "CallRPC.h" -#include "Config.h" #include "RPCHandler.h" namespace po = boost::program_options; diff --git a/src/cpp/ripple/Config.cpp b/src/cpp/ripple/ripple_Config.cpp similarity index 98% rename from src/cpp/ripple/Config.cpp rename to src/cpp/ripple/ripple_Config.cpp index 2ffd6ee24c..9a81857106 100644 --- a/src/cpp/ripple/Config.cpp +++ b/src/cpp/ripple/ripple_Config.cpp @@ -1,16 +1,6 @@ // // TODO: Check permissions on config file before using it. // -#include -#include -#include -#include -#include -#include - -#include "Config.h" - -#include "HashPrefixes.h" // VFALCO: TODO Rename and replace these macros with variables. #define SECTION_ACCOUNT_PROBE_MAX "account_probe_max" diff --git a/src/cpp/ripple/Config.h b/src/cpp/ripple/ripple_Config.h similarity index 93% rename from src/cpp/ripple/Config.h rename to src/cpp/ripple/ripple_Config.h index 3c942b767f..641e03d626 100644 --- a/src/cpp/ripple/Config.h +++ b/src/cpp/ripple/ripple_Config.h @@ -1,20 +1,17 @@ -#ifndef __CONFIG__ -#define __CONFIG__ +#ifndef RIPPLE_CONFIG_H +#define RIPPLE_CONFIG_H -#include -#include -#include -#include +// VFALCO: NOTE, Set this to 1 to enable code which is unnecessary +#define ENABLE_INSECURE 0 -#include "ParseSection.h" - -#define ENABLE_INSECURE 0 // 1, to enable unnecessary features. +// VFALCO: TODO, replace all these macros with language constructs #define SYSTEM_NAME "ripple" #define SYSTEM_CURRENCY_CODE "XRP" #define SYSTEM_CURRENCY_PRECISION 6 #define SYSTEM_CURRENCY_CODE_RIPPLE "XRR" +// VFALCO: TODO Replace these with beast "unsigned long long" generators #define SYSTEM_CURRENCY_GIFT 1000ull #define SYSTEM_CURRENCY_USERS 100000000ull #define SYSTEM_CURRENCY_PARTS 1000000ull // 10^SYSTEM_CURRENCY_PRECISION @@ -194,11 +191,12 @@ public: std::string SMS_TO; std::string SMS_URL; - Config(); +public: + Config (); - int getSize(SizedItemName); - void setup(const std::string& strConf, bool bTestNet, bool bQuiet); - void load(); + int getSize (SizedItemName); + void setup (const std::string& strConf, bool bTestNet, bool bQuiet); + void load (); }; extern Config theConfig; diff --git a/src/cpp/ripple/ripple_Job.cpp b/src/cpp/ripple/ripple_Job.cpp new file mode 100644 index 0000000000..15a6a55adb --- /dev/null +++ b/src/cpp/ripple/ripple_Job.cpp @@ -0,0 +1,122 @@ + +Job::Job () + : mType (jtINVALID) + , mJobIndex (0) +{ +} + +Job::Job (JobType type, uint64 index) + : mType (type) + , mJobIndex (index) +{ +} + +Job::Job (JobType type, + std::string const& name, + uint64 index, + LoadMonitor& lm, + FUNCTION_TYPE const& job) + : mType (type) + , mJobIndex (index) + , mJob (job) + , mName (name) +{ + // VFALCO: NOTE, what the heck does this do? + mLoadMonitor = boost::make_shared (boost::ref (lm), name, false); +} + +JobType Job::getType() const +{ + return mType; +} + +void Job::doJob () +{ + mLoadMonitor->start(); + mJob (*this); + mLoadMonitor->reName(mName); +} + +void Job::rename (std::string const& newName) +{ + mName = newName; +} + +const char* Job::toString (JobType t) +{ + switch(t) + { + case jtINVALID: return "invalid"; + case jtPACK: return "makeFetchPack"; + case jtPUBOLDLEDGER: return "publishAcqLedger"; + case jtVALIDATION_ut: return "untrustedValidation"; + case jtPROOFWORK: return "proofOfWork"; + case jtPROPOSAL_ut: return "untrustedProposal"; + case jtLEDGER_DATA: return "ledgerData"; + case jtUPDATE_PF: return "updatePaths"; + case jtCLIENT: return "clientCommand"; + case jtTRANSACTION: return "transaction"; + case jtPUBLEDGER: return "publishNewLedger"; + case jtVALIDATION_t: return "trustedValidation"; + case jtWAL: return "writeAhead"; + case jtWRITE: return "writeObjects"; + case jtTRANSACTION_l: return "localTransaction"; + case jtPROPOSAL_t: return "trustedProposal"; + case jtADMIN: return "administration"; + case jtDEATH: return "jobOfDeath"; + + case jtPEER: return "peerCommand"; + case jtDISK: return "diskAccess"; + case jtACCEPTLEDGER: return "acceptLedger"; + case jtTXN_PROC: return "processTransaction"; + case jtOB_SETUP: return "orderBookSetup"; + case jtPATH_FIND: return "pathFind"; + case jtHO_READ: return "nodeRead"; + case jtHO_WRITE: return "nodeWrite"; + default: assert(false); return "unknown"; + } +} + +bool Job::operator> (const Job& j) const +{ + if (mType < j.mType) + return true; + + if (mType > j.mType) + return false; + + return mJobIndex > j.mJobIndex; +} + +bool Job::operator>= (const Job& j) const +{ + if (mType < j.mType) + return true; + + if (mType > j.mType) + return false; + + return mJobIndex >= j.mJobIndex; +} + +bool Job::operator< (const Job& j) const +{ + if (mType < j.mType) + return false; + + if (mType > j.mType) + return true; + + return mJobIndex < j.mJobIndex; +} + +bool Job::operator<= (const Job& j) const +{ + if (mType < j.mType) + return false; + + if (mType > j.mType) + return true; + + return mJobIndex <= j.mJobIndex; +} diff --git a/src/cpp/ripple/ripple_Job.h b/src/cpp/ripple/ripple_Job.h new file mode 100644 index 0000000000..d965a39fd5 --- /dev/null +++ b/src/cpp/ripple/ripple_Job.h @@ -0,0 +1,81 @@ +#ifndef RIPPLE_JOB_H +#define RIPPLE_JOB_H + +// Note that this queue should only be used for CPU-bound jobs +// It is primarily intended for signature checking +enum JobType +{ + // must be in priority order, low to high + jtINVALID = -1, + jtPACK = 1, // Make a fetch pack for a peer + jtPUBOLDLEDGER = 2, // An old ledger has been accepted + jtVALIDATION_ut = 3, // A validation from an untrusted source + jtPROOFWORK = 4, // A proof of work demand from another server + jtPROPOSAL_ut = 5, // A proposal from an untrusted source + jtLEDGER_DATA = 6, // Received data for a ledger we're acquiring + jtUPDATE_PF = 7, // Update pathfinding requests + jtCLIENT = 8, // A websocket command from the client + jtTRANSACTION = 9, // A transaction received from the network + jtPUBLEDGER = 10, // Publish a fully-accepted ledger + jtWAL = 11, // Write-ahead logging + jtVALIDATION_t = 12, // A validation from a trusted source + jtWRITE = 13, // Write out hashed objects + jtTRANSACTION_l = 14, // A local transaction + jtPROPOSAL_t = 15, // A proposal from a trusted source + jtADMIN = 16, // An administrative operation + jtDEATH = 17, // job of death, used internally + +// special types not dispatched by the job pool + jtPEER = 24, + jtDISK = 25, + jtACCEPTLEDGER = 26, + jtTXN_PROC = 27, + jtOB_SETUP = 28, + jtPATH_FIND = 29, + jtHO_READ = 30, + jtHO_WRITE = 31, +}; // CAUTION: If you add new types, add them to JobType.cpp too + +// VFALCO: TODO, move this into the enum so it calculates itself? +#define NUM_JOB_TYPES 48 // why 48 and not 32? + +class Job +{ +public: + + // VFALCO: TODO, find out why these extra constructors are needed + Job(); + + Job (JobType type, uint64 index); + + // VFALCO: TODO, try to remove the dependency on LoadMonitor. + Job (JobType type, + std::string const& name, + uint64 index, + LoadMonitor& lm, + FUNCTION_TYPE const& job); + + JobType getType() const; + + void doJob (); + + void rename (const std::string& n); + + // These comparison operators make the jobs sort in priority order in the job set + bool operator< (const Job& j) const; + bool operator> (const Job& j) const; + bool operator<= (const Job& j) const; + bool operator>= (const Job& j) const; + + static const char* toString (JobType); + +private: + JobType mType; + uint64 mJobIndex; + FUNCTION_TYPE mJob; + // VFALCO: TODO, why is this called mLoadMonitor if the type is LoadEvent pointer? + LoadEvent::pointer mLoadMonitor; + std::string mName; +}; + +#endif diff --git a/src/cpp/ripple/JobQueue.cpp b/src/cpp/ripple/ripple_JobQueue.cpp similarity index 77% rename from src/cpp/ripple/JobQueue.cpp rename to src/cpp/ripple/ripple_JobQueue.cpp index 0d43ddeb1e..acac54ca4f 100644 --- a/src/cpp/ripple/JobQueue.cpp +++ b/src/cpp/ripple/ripple_JobQueue.cpp @@ -3,8 +3,6 @@ #include #include -#include "Config.h" - SETUP_LOG (JobQueue) JobQueue::JobQueue(boost::asio::io_service& svc) @@ -28,78 +26,6 @@ JobQueue::JobQueue(boost::asio::io_service& svc) mJobLoads[jtACCEPTLEDGER].setTargetLatency(1000, 2500); } - -const char* Job::toString(JobType t) -{ - switch(t) - { - case jtINVALID: return "invalid"; - case jtPACK: return "makeFetchPack"; - case jtPUBOLDLEDGER: return "publishAcqLedger"; - case jtVALIDATION_ut: return "untrustedValidation"; - case jtPROOFWORK: return "proofOfWork"; - case jtPROPOSAL_ut: return "untrustedProposal"; - case jtLEDGER_DATA: return "ledgerData"; - case jtUPDATE_PF: return "updatePaths"; - case jtCLIENT: return "clientCommand"; - case jtTRANSACTION: return "transaction"; - case jtPUBLEDGER: return "publishNewLedger"; - case jtVALIDATION_t: return "trustedValidation"; - case jtWAL: return "writeAhead"; - case jtWRITE: return "writeObjects"; - case jtTRANSACTION_l: return "localTransaction"; - case jtPROPOSAL_t: return "trustedProposal"; - case jtADMIN: return "administration"; - case jtDEATH: return "jobOfDeath"; - - case jtPEER: return "peerCommand"; - case jtDISK: return "diskAccess"; - case jtACCEPTLEDGER: return "acceptLedger"; - case jtTXN_PROC: return "processTransaction"; - case jtOB_SETUP: return "orderBookSetup"; - case jtPATH_FIND: return "pathFind"; - case jtHO_READ: return "nodeRead"; - case jtHO_WRITE: return "nodeWrite"; - default: assert(false); return "unknown"; - } -} - -bool Job::operator>(const Job& j) const -{ // These comparison operators make the jobs sort in priority order in the job set - if (mType < j.mType) - return true; - if (mType > j.mType) - return false; - return mJobIndex > j.mJobIndex; -} - -bool Job::operator>=(const Job& j) const -{ - if (mType < j.mType) - return true; - if (mType > j.mType) - return false; - return mJobIndex >= j.mJobIndex; -} - -bool Job::operator<(const Job& j) const -{ - if (mType < j.mType) - return false; - if (mType > j.mType) - return true; - return mJobIndex < j.mJobIndex; -} - -bool Job::operator<=(const Job& j) const -{ - if (mType < j.mType) - return false; - if (mType > j.mType) - return true; - return mJobIndex <= j.mJobIndex; -} - void JobQueue::addJob(JobType type, const std::string& name, const FUNCTION_TYPE& jobFunc) { assert(type != jtINVALID); diff --git a/src/cpp/ripple/ripple_JobQueue.h b/src/cpp/ripple/ripple_JobQueue.h new file mode 100644 index 0000000000..36d4b62e18 --- /dev/null +++ b/src/cpp/ripple/ripple_JobQueue.h @@ -0,0 +1,52 @@ +#ifndef RIPPLE_JOBQUEUE_H +#define RIPPLE_JOBQUEUE_H + +class JobQueue +{ +public: + explicit JobQueue (boost::asio::io_service&); + + void addJob(JobType type, const std::string& name, const FUNCTION_TYPE& job); + + int getJobCount(JobType t); // Jobs waiting at this priority + int getJobCountTotal(JobType t); // Jobs waiting plus running at this priority + int getJobCountGE(JobType t); // All waiting jobs at or greater than this priority + std::vector< std::pair > > getJobCounts(); // jobs waiting, threads doing + + void shutdown(); + void setThreadCount(int c = 0); + + LoadEvent::pointer getLoadEvent(JobType t, const std::string& name) + { + return boost::make_shared(boost::ref(mJobLoads[t]), name, true); + } + + LoadEvent::autoptr getLoadEventAP(JobType t, const std::string& name) + { + return LoadEvent::autoptr(new LoadEvent(mJobLoads[t], name, true)); + } + + int isOverloaded(); + Json::Value getJson(int c = 0); + +private: + void threadEntry(); + void IOThread(boost::mutex::scoped_lock&); + + boost::mutex mJobLock; + boost::condition_variable mJobCond; + + uint64 mLastJob; + std::set mJobSet; + LoadMonitor mJobLoads [NUM_JOB_TYPES]; + int mThreadCount; + bool mShuttingDown; + + int mIOThreadCount; + int mMaxIOThreadCount; + boost::asio::io_service& mIOService; + + std::map > mJobCounts; +}; + +#endif diff --git a/src/cpp/ripple/ripple_LoadFeeTrack.cpp b/src/cpp/ripple/ripple_LoadFeeTrack.cpp index 6bbf3f8a83..17204fa677 100644 --- a/src/cpp/ripple/ripple_LoadFeeTrack.cpp +++ b/src/cpp/ripple/ripple_LoadFeeTrack.cpp @@ -1,7 +1,6 @@ //#include //#include //#include -//#include "Config.h" //#include "Application.h" class LoadFeeTrack : public ILoadFeeTrack diff --git a/src/cpp/ripple/rpc.cpp b/src/cpp/ripple/rpc.cpp index 1f003441ee..5074cb03d0 100644 --- a/src/cpp/ripple/rpc.cpp +++ b/src/cpp/ripple/rpc.cpp @@ -9,7 +9,6 @@ #include #include "RPC.h" -#include "Config.h" #include "Version.h" // Used for logging