summaryrefslogtreecommitdiffstats
path: root/fbench
diff options
context:
space:
mode:
authorArne H Juul <arnej@yahoo-inc.com>2017-05-09 13:58:08 +0200
committerArne H Juul <arnej@yahoo-inc.com>2017-05-09 13:58:08 +0200
commite1831a2dedfaef5e85c2dcca30505c4f87a5dcd6 (patch)
treee619a4268cbe851daa9ccc1453a5eba52abb5299 /fbench
parentb9e4463fa271da00437636c578d2e949ba002239 (diff)
refactor nextUrl()
Diffstat (limited to 'fbench')
-rw-r--r--fbench/src/fbench/client.cpp70
-rw-r--r--fbench/src/fbench/fbench.cpp2
2 files changed, 43 insertions, 29 deletions
diff --git a/fbench/src/fbench/client.cpp b/fbench/src/fbench/client.cpp
index 0c3d8b15504..6f585e33637 100644
--- a/fbench/src/fbench/client.cpp
+++ b/fbench/src/fbench/client.cpp
@@ -55,7 +55,8 @@ public:
}
}
bool reset();
- int nextUrl(char *buf, int bufLen);
+ int findUrl(char *buf, int buflen);
+ int nextUrl(char *buf, int buflen);
int getContent();
char *content() const { return _contentbuf; }
~UrlReader() { delete [] _contentbuf; }
@@ -76,33 +77,45 @@ bool UrlReader::reset()
return true;
}
-int UrlReader::nextUrl(char *buf, int buflen)
+int UrlReader::findUrl(char *buf, int buflen)
{
- if (_leftOvers) {
- int sz = std::min(_leftOversLen, buflen-1);
- strncpy(buf, _leftOvers, sz);
- buf[sz] = '\0';
- _leftOvers = NULL;
- return _leftOversLen;
- }
- bool again = true;
- for (int retry = 0; again && retry < 100; ++retry) {
- // Read maximum to _queryfileEndOffset
+ while (true) {
if ( _args._singleQueryFile && _reader.GetFilePos() >= _args._queryfileEndOffset ) {
- again = reset();
+ // reached logical EOF
+ return -1;
}
int ll = _reader.ReadLine(buf, buflen);
+ if (ll < 0) {
+ // reached physical EOF
+ return ll;
+ }
if (ll > 0) {
if (buf[0] == '/' || !_args._usePostMode) {
+ // found URL
return ll;
}
}
- if (ll < 0) {
- // reached EOF
- again = reset();
- }
}
- return 0;
+}
+
+int UrlReader::nextUrl(char *buf, int buflen)
+{
+ if (_leftOvers) {
+ int sz = std::min(_leftOversLen, buflen-1);
+ strncpy(buf, _leftOvers, sz);
+ buf[sz] = '\0';
+ _leftOvers = NULL;
+ return _leftOversLen;
+ }
+ int ll = findUrl(buf, buflen);
+ if (ll > 0) {
+ return ll;
+ }
+ if (reset()) {
+ // try again
+ ll = findUrl(buf, buflen);
+ }
+ return ll;
}
int UrlReader::getContent()
@@ -112,18 +125,19 @@ int UrlReader::getContent()
int totLen = 0;
while (totLen < bufLen) {
int len = _reader.ReadLine(buf, bufLen);
- if (len > 0) {
- if (buf[0] == '/') {
- _leftOvers = buf;
- _leftOversLen = len;
- return totLen;
- }
- buf += len;
- bufLen -= len;
- totLen += len;
- } else {
+ if (len < 0) {
+ // reached EOF
+ return totLen;
+ }
+ if (len > 0 && buf[0] == '/') {
+ // reached next URL
+ _leftOvers = buf;
+ _leftOversLen = len;
return totLen;
}
+ buf += len;
+ bufLen -= len;
+ totLen += len;
}
return totLen;
}
diff --git a/fbench/src/fbench/fbench.cpp b/fbench/src/fbench/fbench.cpp
index 32d18e1a330..20195d9d234 100644
--- a/fbench/src/fbench/fbench.cpp
+++ b/fbench/src/fbench/fbench.cpp
@@ -212,7 +212,7 @@ FBench::Usage()
printf(" [-r restartLimit] [-m maxLineSize] [-k] <hostname> <port>\n\n");
printf(" -H <str> : append extra header to each get request.\n");
printf(" -A <str> : assign autority. <str> should be hostname:port format. Overrides Host: header sent.\n");
- printf(" -P : use POST for requests instead of get.\n");
+ printf(" -P : use POST for requests instead of GET.\n");
printf(" -a <str> : append string to each query\n");
printf(" -n <num> : run with <num> parallel clients [10]\n");
printf(" -c <num> : each client will make a request each <num> milliseconds [1000]\n");