diff --git a/Builds/VisualStudio2012/RippleD.vcxproj b/Builds/VisualStudio2012/RippleD.vcxproj index 01baef45f..d1a1fbb48 100644 --- a/Builds/VisualStudio2012/RippleD.vcxproj +++ b/Builds/VisualStudio2012/RippleD.vcxproj @@ -169,6 +169,30 @@ + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + @@ -1518,6 +1542,10 @@ + + + + diff --git a/Builds/VisualStudio2012/RippleD.vcxproj.filters b/Builds/VisualStudio2012/RippleD.vcxproj.filters index a9e6147cc..e3127c5a5 100644 --- a/Builds/VisualStudio2012/RippleD.vcxproj.filters +++ b/Builds/VisualStudio2012/RippleD.vcxproj.filters @@ -897,6 +897,18 @@ 1. Modules\ripple_websocket\autosocket + + 1. Modules\ripple_core\functional + + + 1. Modules\ripple_core\functional + + + 1. Modules\ripple_core\functional + + + 1. Modules\ripple_core\functional + @@ -1716,6 +1728,18 @@ 1. Modules\ripple_core + + 1. Modules\ripple_core\functional + + + 1. Modules\ripple_core\functional + + + 1. Modules\ripple_core\functional + + + 1. Modules\ripple_core\functional + diff --git a/TODO.txt b/TODO.txt index 9641de588..b2a1dfe88 100644 --- a/TODO.txt +++ b/TODO.txt @@ -3,10 +3,15 @@ TODO -------------------------------------------------------------------------------- - Put all the Ripple code in the ripple namespace + * boost unit tests create namespace problems + +- Remove references to BEASTApplication - Remove "using namespace" statements - lift bind, function, and placeholders into ripple namespace +- lift beast into the ripple namespace, remove ripple's duplicated integer types +- lift unique_ptr / auto_ptr into ripple namespace, or replace with ScopedPointer - Make LevelDB and Ripple code work with both Unicode and non-Unicode Windows APIs @@ -45,7 +50,7 @@ Naming Some names don't make sense. Index - Stop using Index to refer to keys in tables. + Stop using Index to refer to keys in tables. Replace with "Key" ? Index implies a small integer, or a data structure. Inconsistent names diff --git a/modules/ripple_app/ripple_app.cpp b/modules/ripple_app/ripple_app.cpp index 5e3817ed1..93cab5b9c 100644 --- a/modules/ripple_app/ripple_app.cpp +++ b/modules/ripple_app/ripple_app.cpp @@ -87,6 +87,8 @@ #include "../modules/ripple_sqlite/ripple_sqlite.h" // for SqliteDatabase.cpp +#include "../modules/ripple_core/ripple_core.h" + // VFALCO TODO fix these warnings! #ifdef _MSC_VER //#pragma warning (push) // Causes spurious C4503 "decorated name exceeds maximum length" @@ -139,11 +141,7 @@ // These have few dependencies #include "src/cpp/ripple/ripple_Config.h" #include "src/cpp/ripple/ripple_DatabaseCon.h" -#include "src/cpp/ripple/ripple_LoadEvent.h" -#include "src/cpp/ripple/ripple_LoadMonitor.h" #include "src/cpp/ripple/ripple_ProofOfWork.h" -#include "src/cpp/ripple/ripple_Job.h" -#include "src/cpp/ripple/ripple_JobQueue.h" #include "src/cpp/ripple/ripple_InfoSub.h" #include "src/cpp/ripple/ripple_HashedObject.h" #include "src/cpp/ripple/ripple_HashedObjectStore.h" @@ -382,15 +380,11 @@ static DH* handleTmpDh (SSL* ssl, int is_export, int iKeyLength) #if ! defined (RIPPLE_MAIN_PART) || RIPPLE_MAIN_PART == 4 -#include "src/cpp/ripple/ripple_Job.cpp" -#include "src/cpp/ripple/ripple_JobQueue.cpp" #include "src/cpp/ripple/ripple_InboundLedger.cpp" #include "src/cpp/ripple/ripple_InboundLedgers.cpp" #include "src/cpp/ripple/ripple_InfoSub.cpp" #include "src/cpp/ripple/ripple_LedgerConsensus.cpp" #include "src/cpp/ripple/ripple_LedgerHistory.cpp" -#include "src/cpp/ripple/ripple_LoadEvent.cpp" -#include "src/cpp/ripple/ripple_LoadMonitor.cpp" #include "src/cpp/ripple/ripple_LoadFeeTrack.cpp" #include "src/cpp/ripple/ripple_OrderBook.cpp" #include "src/cpp/ripple/ripple_PathRequest.cpp" diff --git a/src/cpp/ripple/ripple_Job.cpp b/modules/ripple_core/functional/ripple_Job.cpp similarity index 100% rename from src/cpp/ripple/ripple_Job.cpp rename to modules/ripple_core/functional/ripple_Job.cpp diff --git a/src/cpp/ripple/ripple_Job.h b/modules/ripple_core/functional/ripple_Job.h similarity index 100% rename from src/cpp/ripple/ripple_Job.h rename to modules/ripple_core/functional/ripple_Job.h diff --git a/src/cpp/ripple/ripple_JobQueue.cpp b/modules/ripple_core/functional/ripple_JobQueue.cpp similarity index 98% rename from src/cpp/ripple/ripple_JobQueue.cpp rename to modules/ripple_core/functional/ripple_JobQueue.cpp index 4084fdaa4..37541dd8d 100644 --- a/src/cpp/ripple/ripple_JobQueue.cpp +++ b/modules/ripple_core/functional/ripple_JobQueue.cpp @@ -177,9 +177,9 @@ void JobQueue::shutdown () } // set the number of thread serving the job queue to precisely this number -void JobQueue::setThreadCount (int c) +void JobQueue::setThreadCount (int c, bool const standaloneMode) { - if (theConfig.RUN_STANDALONE) + if (standaloneMode) { c = 1; } diff --git a/src/cpp/ripple/ripple_JobQueue.h b/modules/ripple_core/functional/ripple_JobQueue.h similarity index 97% rename from src/cpp/ripple/ripple_JobQueue.h rename to modules/ripple_core/functional/ripple_JobQueue.h index ce77d4fb5..ffe7f05f5 100644 --- a/src/cpp/ripple/ripple_JobQueue.h +++ b/modules/ripple_core/functional/ripple_JobQueue.h @@ -20,7 +20,7 @@ public: std::vector< std::pair > > getJobCounts (); // jobs waiting, threads doing void shutdown (); - void setThreadCount (int c = 0); + void setThreadCount (int c, bool const standaloneMode); // VFALCO TODO Rename these to newLoadEventMeasurement or something similar // since they create the object. diff --git a/src/cpp/ripple/ripple_LoadEvent.cpp b/modules/ripple_core/functional/ripple_LoadEvent.cpp similarity index 100% rename from src/cpp/ripple/ripple_LoadEvent.cpp rename to modules/ripple_core/functional/ripple_LoadEvent.cpp diff --git a/src/cpp/ripple/ripple_LoadEvent.h b/modules/ripple_core/functional/ripple_LoadEvent.h similarity index 100% rename from src/cpp/ripple/ripple_LoadEvent.h rename to modules/ripple_core/functional/ripple_LoadEvent.h diff --git a/src/cpp/ripple/ripple_LoadMonitor.cpp b/modules/ripple_core/functional/ripple_LoadMonitor.cpp similarity index 81% rename from src/cpp/ripple/ripple_LoadMonitor.cpp rename to modules/ripple_core/functional/ripple_LoadMonitor.cpp index bb7cc4baf..0544a8d66 100644 --- a/src/cpp/ripple/ripple_LoadMonitor.cpp +++ b/modules/ripple_core/functional/ripple_LoadMonitor.cpp @@ -66,6 +66,7 @@ void LoadMonitor::addCount () void LoadMonitor::addLatency (int latency) { + // VFALCO NOTE Why does 1 become 0? if (latency == 1) latency = 0; @@ -77,12 +78,16 @@ void LoadMonitor::addLatency (int latency) mLatencyMSAvg += latency; mLatencyMSPeak += latency; - int lp = mLatencyEvents * latency * 4; + // VFALCO NOTE Why are we multiplying by 4? + // VFALCO NOTE conversion from 64 to 32 bit int loses data +#pragma message(BEAST_FILEANDLINE_ "Possible 32-bit overflow for long-running server instances.") + int const latencyPeak = mLatencyEvents * latency * 4; - if (mLatencyMSPeak < lp) - mLatencyMSPeak = lp; + if (mLatencyMSPeak < latencyPeak) + mLatencyMSPeak = latencyPeak; } + void LoadMonitor::addCountAndLatency (const std::string& name, int latency) { if (latency > 500) @@ -90,6 +95,7 @@ void LoadMonitor::addCountAndLatency (const std::string& name, int latency) WriteLog ((latency > 1000) ? lsWARNING : lsINFO, LoadMonitor) << "Job: " << name << " ExecutionTime: " << latency; } + // VFALCO NOTE Why does 1 become 0? if (latency == 1) latency = 0; @@ -101,10 +107,13 @@ void LoadMonitor::addCountAndLatency (const std::string& name, int latency) mLatencyMSAvg += latency; mLatencyMSPeak += latency; - int lp = mLatencyEvents * latency * 4; + // VFALCO NOTE Why are we multiplying by 4? + // VFALCO NOTE conversion from 64 to 32 bit int loses data +#pragma message(BEAST_FILEANDLINE_ "Possible 32-bit overflow for long-running server instances.") + int const latencyPeak = mLatencyEvents * latency * 4; - if (mLatencyMSPeak < lp) - mLatencyMSPeak = lp; + if (mLatencyMSPeak < latencyPeak) + mLatencyMSPeak = latencyPeak; } void LoadMonitor::setTargetLatency (uint64 avg, uint64 pk) diff --git a/src/cpp/ripple/ripple_LoadMonitor.h b/modules/ripple_core/functional/ripple_LoadMonitor.h similarity index 100% rename from src/cpp/ripple/ripple_LoadMonitor.h rename to modules/ripple_core/functional/ripple_LoadMonitor.h diff --git a/modules/ripple_core/ripple_core.cpp b/modules/ripple_core/ripple_core.cpp index ff9069834..f82f624a5 100644 --- a/modules/ripple_core/ripple_core.cpp +++ b/modules/ripple_core/ripple_core.cpp @@ -12,5 +12,9 @@ #include "ripple_core.h" -//#include "src/cpp/ripple/ripple_Job.h" -//#include "src/cpp/ripple/ripple_JobQueue.h" +#include + +#include "functional/ripple_Job.cpp" +#include "functional/ripple_JobQueue.cpp" +#include "functional/ripple_LoadEvent.cpp" +#include "functional/ripple_LoadMonitor.cpp" diff --git a/modules/ripple_core/ripple_core.h b/modules/ripple_core/ripple_core.h index 71dbf40c0..3162c6666 100644 --- a/modules/ripple_core/ripple_core.h +++ b/modules/ripple_core/ripple_core.h @@ -21,4 +21,20 @@ #ifndef RIPPLE_CORE_RIPPLEHEADER #define RIPPLE_CORE_RIPPLEHEADER +#include "../ripple_basics/ripple_basics.h" + +#include +#include + +#include +#include +#include + +// VFALCO NOTE Indentation shows dependency hierarchy +// +/*..*/#include "functional/ripple_LoadEvent.h" +/*..*/#include "functional/ripple_LoadMonitor.h" +/*.*/#include "functional/ripple_Job.h" +/**/#include "functional/ripple_JobQueue.h" + #endif diff --git a/src/cpp/ripple/ripple_Application.cpp b/src/cpp/ripple/ripple_Application.cpp index af8a19a0a..a965142c4 100644 --- a/src/cpp/ripple/ripple_Application.cpp +++ b/src/cpp/ripple/ripple_Application.cpp @@ -351,7 +351,9 @@ static void runIO (boost::asio::io_service& io) void Application::setup () { - mJobQueue.setThreadCount (); + // VFALCO NOTE: 0 means use heuristics to determine the thread count. + mJobQueue.setThreadCount (0, theConfig.RUN_STANDALONE); + mSweepTimer.expires_from_now (boost::posix_time::seconds (10)); mSweepTimer.async_wait (boost::bind (&Application::sweep, this)); mLoadMgr.init ();