From eca40592424772742ace09180935028a52194c31 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 5 Dec 2012 11:24:15 -0800 Subject: [PATCH 1/4] Operation limit. --- src/cpp/ripple/SerializeProto.h | 1 + src/cpp/ripple/TransactionFormats.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/src/cpp/ripple/SerializeProto.h b/src/cpp/ripple/SerializeProto.h index 5b510e969..7c88837d3 100644 --- a/src/cpp/ripple/SerializeProto.h +++ b/src/cpp/ripple/SerializeProto.h @@ -58,6 +58,7 @@ FIELD(FirstLedgerSequence, UINT32, 26) FIELD(LastLedgerSequence, UINT32, 27) FIELD(TransactionIndex, UINT32, 28) + FIELD(OperationLimit, UINT32, 29) // 64-bit integers FIELD(IndexNext, UINT64, 1) diff --git a/src/cpp/ripple/TransactionFormats.cpp b/src/cpp/ripple/TransactionFormats.cpp index 5f0feb40e..683517892 100644 --- a/src/cpp/ripple/TransactionFormats.cpp +++ b/src/cpp/ripple/TransactionFormats.cpp @@ -10,6 +10,7 @@ std::map TransactionFormat::byName; << SOElement(sfAccount, SOE_REQUIRED) \ << SOElement(sfSequence, SOE_REQUIRED) \ << SOElement(sfFee, SOE_REQUIRED) \ + << SOElement(sfOperationLimit, SOE_OPTIONAL) \ << SOElement(sfSigningPubKey, SOE_REQUIRED) \ << SOElement(sfTxnSignature, SOE_OPTIONAL) From a43a993a018b4d6fb8b2107f79a83175d34dcdd0 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 5 Dec 2012 13:18:14 -0800 Subject: [PATCH 2/4] Refactor log_level command to meet new spec. --- src/cpp/ripple/CallRPC.cpp | 20 +++++++++++++++++++- src/cpp/ripple/CallRPC.h | 1 + src/cpp/ripple/RPCHandler.cpp | 30 ++++++++++++------------------ 3 files changed, 32 insertions(+), 19 deletions(-) diff --git a/src/cpp/ripple/CallRPC.cpp b/src/cpp/ripple/CallRPC.cpp index e47ad21ba..cd481b53b 100644 --- a/src/cpp/ripple/CallRPC.cpp +++ b/src/cpp/ripple/CallRPC.cpp @@ -210,6 +210,24 @@ Json::Value RPCParser::parseLogin(const Json::Value& jvParams) return jvRequest; } +// log_level: Get log levels +// log_level : Set master log level to the specified severity +// log_level : Set specified partition to specified severity +Json::Value RPCParser::parseLogLevel(const Json::Value& jvParams) +{ + Json::Value jvRequest(Json::objectValue); + + if (jvParams.size() == 1) + jvRequest["severity"] = jvParams[0u].asString(); + else if (jvParams.size() == 2) + { + jvRequest["partition"] = jvParams[0u].asString(); + jvRequest["severity"] = jvParams[1u].asString(); + } + + return jvRequest; +} + // owner_info || // owner_info || [] Json::Value RPCParser::parseOwnerInfo(const Json::Value& jvParams) @@ -405,7 +423,7 @@ Json::Value RPCParser::parseCommand(std::string strMethod, Json::Value jvParams) { "ledger_current", &RPCParser::parseAsIs, 0, 0 }, // { "ledger_entry", &RPCParser::parseLedgerEntry, -1, -1 }, // { "ledger_header", &RPCParser::parseLedgerHeader, -1, -1 }, -// { "log_level", &RPCParser::parseLogLevel, 0, 2 }, + { "log_level", &RPCParser::parseLogLevel, 0, 2 }, { "logrotate", &RPCParser::parseAsIs, 0, 0 }, // { "nickname_info", &RPCParser::parseNicknameInfo, 1, 1 }, { "owner_info", &RPCParser::parseOwnerInfo, 1, 2 }, diff --git a/src/cpp/ripple/CallRPC.h b/src/cpp/ripple/CallRPC.h index cd01faafc..e03572caf 100644 --- a/src/cpp/ripple/CallRPC.h +++ b/src/cpp/ripple/CallRPC.h @@ -23,6 +23,7 @@ protected: Json::Value parseGetCounts(const Json::Value& jvParams); Json::Value parseLedger(const Json::Value& jvParams); Json::Value parseLogin(const Json::Value& jvParams); + Json::Value parseLogLevel(const Json::Value& jvParams); Json::Value parseOwnerInfo(const Json::Value& jvParams); Json::Value parseRandom(const Json::Value& jvParams); Json::Value parseSubmit(const Json::Value& jvParams); diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 23579ea01..48da91386 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -1570,10 +1570,10 @@ Json::Value RPCHandler::doGetCounts(Json::Value jvRequest) return ret; } -Json::Value RPCHandler::doLogLevel(Json::Value params) +Json::Value RPCHandler::doLogLevel(Json::Value jvRequest) { // log_level - if (params.size() == 0) + if (!jvRequest.isMember("severity")) { // get log severities Json::Value ret = Json::objectValue; @@ -1587,35 +1587,29 @@ Json::Value RPCHandler::doLogLevel(Json::Value params) return ret; } + LogSeverity sv = Log::stringToSeverity(jvRequest["severity"].asString()); + if (sv == lsINVALID) + return rpcError(rpcINVALID_PARAMS); + // log_level severity - if (params.size() == 1) + if (!jvRequest.isMember("partition")) { // set base log severity - LogSeverity sv = Log::stringToSeverity(params[0u].asString()); - if (sv == lsINVALID) - return rpcError(rpcINVALID_PARAMS); - - Log::setMinSeverity(sv,true); - + Log::setMinSeverity(sv, true); return rpcError(rpcSUCCESS); } // log_level partition severity base? - if (params.size() == 2) + if (jvRequest.isMember("partition")) { // set partition severity - LogSeverity sv = Log::stringToSeverity(params[1u].asString()); - - if (sv == lsINVALID) - return rpcError(rpcINVALID_PARAMS); - - if (params[2u].asString() == "base") + std::string partition(jvRequest["partition"].asString()); + if (boost::iequals(partition, "base")) Log::setMinSeverity(sv,false); - else if (!LogPartition::setSeverity(params[0u].asString(), sv)) + else if (!LogPartition::setSeverity(partition, sv)) return rpcError(rpcINVALID_PARAMS); return rpcError(rpcSUCCESS); } - assert(false); return rpcError(rpcINVALID_PARAMS); } From 20b96613e445395fbb640923c0636b27b10e9919 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 5 Dec 2012 13:21:14 -0800 Subject: [PATCH 3/4] Cosmetic improvement. --- src/cpp/ripple/RPCHandler.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 48da91386..080f32cd5 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -1575,15 +1575,16 @@ Json::Value RPCHandler::doLogLevel(Json::Value jvRequest) // log_level if (!jvRequest.isMember("severity")) { // get log severities - Json::Value ret = Json::objectValue; - - ret["base"] = Log::severityToString(Log::getMinSeverity()); + Json::Value ret(Json::objectValue); + Json::Value lev(Json::objectValue); + lev["base"] = Log::severityToString(Log::getMinSeverity()); std::vector< std::pair > logTable = LogPartition::getSeverities(); typedef std::pair stringPair; BOOST_FOREACH(const stringPair& it, logTable) - ret[it.first] = it.second; + lev[it.first] = it.second; + ret["levels"] = lev; return ret; } From 3b7bf171ed4389322963359802f7f7c7a0079d7c Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 5 Dec 2012 15:45:07 -0800 Subject: [PATCH 4/4] Structure to charge and credit for load types. --- src/cpp/ripple/LoadManager.cpp | 3 ++- src/cpp/ripple/LoadManager.h | 8 ++------ src/cpp/ripple/LoadTypes.h | 27 +++++++++++++++++++++++++++ 3 files changed, 31 insertions(+), 7 deletions(-) create mode 100644 src/cpp/ripple/LoadTypes.h diff --git a/src/cpp/ripple/LoadManager.cpp b/src/cpp/ripple/LoadManager.cpp index 5f2f60f2c..0b040c5ad 100644 --- a/src/cpp/ripple/LoadManager.cpp +++ b/src/cpp/ripple/LoadManager.cpp @@ -70,6 +70,7 @@ bool LoadManager::shouldWarn(LoadSource& source) const canonicalize(source, now); if (source.isPrivileged() || (source.mBalance < mDebitWarn) || (source.mLastWarning == now)) return false; + source.mLastWarning = now; return true; } @@ -84,7 +85,7 @@ bool LoadManager::shouldCutoff(LoadSource& source) const } bool LoadManager::adjust(LoadSource& source, int credits) const -{ +{ // return: true = need to warn/cutoff time_t now = time(NULL); boost::mutex::scoped_lock sl(mLock); diff --git a/src/cpp/ripple/LoadManager.h b/src/cpp/ripple/LoadManager.h index 9280f3b53..3b3de6f15 100644 --- a/src/cpp/ripple/LoadManager.h +++ b/src/cpp/ripple/LoadManager.h @@ -59,7 +59,7 @@ public: bool shouldWarn(LoadSource&) const; bool shouldCutoff(LoadSource&) const; - bool adjust(LoadSource&, int credits) const; // return value: false = balance okay, true = warn/cutoff + bool adjust(LoadSource&, int credits) const; // return value: false=balance okay, true=warn/cutoff }; class LoadFeeTrack @@ -73,14 +73,10 @@ protected: uint32 mLocalTxnLoadFee; // Scale factor, lftNormalFee = normal fee uint32 mRemoteTxnLoadFee; // Scale factor, lftNormalFee = normal fee - uint32 mPeerLoadSchedule; // Schedule setting, 0 = normal schedule - uint32 mClientLoadSchedule; // Schedule setting, 0 = normal schedule public: - LoadFeeTrack() - : mLocalTxnLoadFee(lftNormalFee), mRemoteTxnLoadFee(lftNormalFee), mPeerLoadSchedule(0), mClientLoadSchedule(0) - { ; } + LoadFeeTrack() : mLocalTxnLoadFee(lftNormalFee), mRemoteTxnLoadFee(lftNormalFee) { ; } uint64 scaleFee(uint64 fee); diff --git a/src/cpp/ripple/LoadTypes.h b/src/cpp/ripple/LoadTypes.h new file mode 100644 index 000000000..a2232174c --- /dev/null +++ b/src/cpp/ripple/LoadTypes.h @@ -0,0 +1,27 @@ +#ifndef LOADTYPES__H +#define LOADTYPES__H + +enum LoadType +{ // types of load that can be placed on the server + + // Bad things + LT_InvalidRequest, // A request that we can immediately tell is invalid + LT_RequestNoReply, // A request that we cannot satisfy + LT_InvalidSignature, // An object whose signature we had to check and it failed + LT_UnwantedData, // Data we have no use for + + // Good things + LT_NewTrusted, // A new transaction/validation/proposal we trust + LT_NewTransaction, // A new, valid transaction + LT_NeededData, // Data we requested + + // Requests + LT_RequestData, // A request that is hard to satisfy, disk access + LT_CheapQuery, // A query that is trivial, cached data +}; + +static const int LoadCategoryDisk = 1; +static const int LoadCategoryCPU = 2; +static const int LoadCateogryNetwork = 4; + +#endif