summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2019-11-26 12:05:49 +0100
committerGitHub <noreply@github.com>2019-11-26 12:05:49 +0100
commit4b8a65c48af0dd338bed5506a57bec6e002f58f3 (patch)
treec67aebe8b09ed69d56e2894313c0288afa18f298
parent47fd2f02f279c050181443f8ffca2febbcf2425c (diff)
parentbaf67016b071362f776f67676f1107daad80da01 (diff)
Merge pull request #11395 from ohad7/base64DecodeV2
Base64 support for fbench
-rw-r--r--fbench/CMakeLists.txt1
-rw-r--r--fbench/src/fbench/client.cpp15
-rw-r--r--fbench/src/fbench/client.h10
-rw-r--r--fbench/src/fbench/fbench.cpp16
-rw-r--r--fbench/src/fbench/fbench.h4
5 files changed, 39 insertions, 7 deletions
diff --git a/fbench/CMakeLists.txt b/fbench/CMakeLists.txt
index bc40e659b99..5cc56786227 100644
--- a/fbench/CMakeLists.txt
+++ b/fbench/CMakeLists.txt
@@ -3,6 +3,7 @@ vespa_define_module(
DEPENDS
fastos
vespalib
+ staging_vespalib
APPS
src/fbench
diff --git a/fbench/src/fbench/client.cpp b/fbench/src/fbench/client.cpp
index 7ac52ff6c7c..488453d0946 100644
--- a/fbench/src/fbench/client.cpp
+++ b/fbench/src/fbench/client.cpp
@@ -7,6 +7,10 @@
#include <util/filereader.h>
#include <cassert>
#include <cstring>
+#include <iostream>
+#include <vespa/vespalib/encoding/base64.h>
+
+using namespace vespalib;
Client::Client(vespalib::CryptoEngine::SP engine, ClientArguments *args)
: _args(args),
@@ -220,8 +224,17 @@ Client::run()
strcat(_linebuf, _args->_queryStringToAppend.c_str());
}
int cLen = _args->_usePostMode ? urlSource.nextContent() : 0;
+
+ const char* content = urlSource.content();
+ std::string base64_decoded;
+ if (_args->_usePostMode && _args->_base64Decode) {
+ base64_decoded = Base64::decode(content, cLen);
+ content = base64_decoded.c_str();
+ cLen = base64_decoded.size();
+ }
+
_reqTimer->Start();
- auto fetch_status = _http->Fetch(_linebuf, _output.get(), _args->_usePostMode, urlSource.content(), cLen);
+ auto fetch_status = _http->Fetch(_linebuf, _output.get(), _args->_usePostMode, content, cLen);
_reqTimer->Stop();
_status->AddRequestStatus(fetch_status.RequestStatus());
if (fetch_status.Ok() && fetch_status.TotalHitCount() == 0)
diff --git a/fbench/src/fbench/client.h b/fbench/src/fbench/client.h
index d1036bbe8d3..70d83f71971 100644
--- a/fbench/src/fbench/client.h
+++ b/fbench/src/fbench/client.h
@@ -94,6 +94,12 @@ struct ClientArguments
* client.
**/
bool _keepAlive;
+
+ /**
+ * Indicate wether POST content should be Base64 decoded before
+ * sending it
+ **/
+ bool _base64Decode;
/** Whether we should use POST in requests */
bool _usePostMode;
@@ -117,7 +123,8 @@ struct ClientArguments
long cycle, long delay,
int ignoreCount, int byteLimit,
int restartLimit, int maxLineSize,
- bool keepAlive, bool headerBenchmarkdataCoverage,
+ bool keepAlive, bool base64Decode,
+ bool headerBenchmarkdataCoverage,
uint64_t queryfileOffset, uint64_t queryfileEndOffset, bool singleQueryFile,
const std::string & queryStringToAppend, const std::string & extraHeaders,
const std::string &authority, bool postMode)
@@ -134,6 +141,7 @@ struct ClientArguments
_restartLimit(restartLimit),
_maxLineSize(maxLineSize),
_keepAlive(keepAlive),
+ _base64Decode(base64Decode),
_usePostMode(postMode),
_headerBenchmarkdataCoverage(headerBenchmarkdataCoverage),
_queryfileOffset(queryfileOffset),
diff --git a/fbench/src/fbench/fbench.cpp b/fbench/src/fbench/fbench.cpp
index 723980cd1c7..91475ce2125 100644
--- a/fbench/src/fbench/fbench.cpp
+++ b/fbench/src/fbench/fbench.cpp
@@ -107,7 +107,8 @@ void
FBench::InitBenchmark(int numClients, int ignoreCount, int cycle,
const char *filenamePattern, const char *outputPattern,
int byteLimit, int restartLimit, int maxLineSize,
- bool keepAlive, bool headerBenchmarkdataCoverage, int seconds,
+ bool keepAlive, bool base64Decode,
+ bool headerBenchmarkdataCoverage, int seconds,
bool singleQueryFile, const std::string & queryStringToAppend, const std::string & extraHeaders,
const std::string &authority, bool postMode)
{
@@ -127,6 +128,7 @@ FBench::InitBenchmark(int numClients, int ignoreCount, int cycle,
_restartLimit = restartLimit;
_maxLineSize = maxLineSize;
_keepAlive = keepAlive;
+ _base64Decode = base64Decode;
_usePostMode = postMode;
_headerBenchmarkdataCoverage = headerBenchmarkdataCoverage;
_seconds = seconds;
@@ -152,7 +154,8 @@ FBench::CreateClients()
_ports[i % _ports.size()], _cycle,
random() % spread, _ignoreCount,
_byteLimit, _restartLimit, _maxLineSize,
- _keepAlive, _headerBenchmarkdataCoverage,
+ _keepAlive, _base64Decode,
+ _headerBenchmarkdataCoverage,
off_beg, off_end,
_singleQueryFile, _queryStringToAppend, _extraHeaders, _authority, _usePostMode));
++i;
@@ -298,6 +301,7 @@ FBench::Usage()
printf(" Can not be less than the minimum [1024].\n");
printf(" -p <num> : print summary every <num> seconds.\n");
printf(" -k : disable HTTP keep-alive.\n");
+ printf(" -d : Base64 decode POST request content.\n");
printf(" -y : write data on coverage to output file.\n");
printf(" -z : use single query file to be distributed between clients.\n");
printf(" -T <str> : CA certificate file to verify peer against.\n");
@@ -342,6 +346,7 @@ FBench::Main(int argc, char *argv[])
int restartLimit = -1;
bool keepAlive = true;
+ bool base64Decode = false;
bool headerBenchmarkdataCoverage = false;
bool usePostMode = false;
@@ -358,7 +363,7 @@ FBench::Main(int argc, char *argv[])
idx = 1;
optError = false;
- while((opt = GetOpt(argc, argv, "H:A:T:C:K:Da:n:c:l:i:s:q:o:r:m:p:kxyzP", arg, idx)) != -1) {
+ while((opt = GetOpt(argc, argv, "H:A:T:C:K:Da:n:c:l:i:s:q:o:r:m:p:kdxyzP", arg, idx)) != -1) {
switch(opt) {
case 'A':
authority = arg;
@@ -426,6 +431,9 @@ FBench::Main(int argc, char *argv[])
case 'k':
keepAlive = false;
break;
+ case 'd':
+ base64Decode = false;
+ break;
case 'x':
// consuming x for backwards compability. This turned on header benchmark data
// but this is now always on.
@@ -513,7 +521,7 @@ FBench::Main(int argc, char *argv[])
InitBenchmark(numClients, ignoreCount, cycleTime,
queryFilePattern, outputFilePattern,
byteLimit, restartLimit, maxLineSize,
- keepAlive,
+ keepAlive, base64Decode,
headerBenchmarkdataCoverage, seconds,
singleQueryFile, queryStringToAppend, extraHeaders,
authority, usePostMode);
diff --git a/fbench/src/fbench/fbench.h b/fbench/src/fbench/fbench.h
index e4a8e4e0b27..362a463a4f1 100644
--- a/fbench/src/fbench/fbench.h
+++ b/fbench/src/fbench/fbench.h
@@ -23,6 +23,7 @@ private:
int _restartLimit;
int _maxLineSize;
bool _keepAlive;
+ bool _base64Decode;
bool _usePostMode;
bool _headerBenchmarkdataCoverage;
int _seconds;
@@ -41,7 +42,8 @@ private:
void InitBenchmark(int numClients, int ignoreCount, int cycle,
const char *filenamePattern, const char *outputPattern,
int byteLimit, int restartLimit, int maxLineSize,
- bool keepAlive, bool headerBenchmarkdataCoverage, int seconds,
+ bool keepAlive, bool base64Decode,
+ bool headerBenchmarkdataCoverage, int seconds,
bool singleQueryFile, const std::string & queryStringToAppend, const std::string & extraHeaders,
const std::string &authority, bool postMode);