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 ();