diff options
author | Arne H Juul <arnej@yahoo-inc.com> | 2017-05-09 13:58:08 +0200 |
---|---|---|
committer | Arne H Juul <arnej@yahoo-inc.com> | 2017-05-09 13:58:08 +0200 |
commit | e1831a2dedfaef5e85c2dcca30505c4f87a5dcd6 (patch) | |
tree | e619a4268cbe851daa9ccc1453a5eba52abb5299 /fbench/src | |
parent | b9e4463fa271da00437636c578d2e949ba002239 (diff) |
refactor nextUrl()
Diffstat (limited to 'fbench/src')
-rw-r--r-- | fbench/src/fbench/client.cpp | 70 | ||||
-rw-r--r-- | fbench/src/fbench/fbench.cpp | 2 |
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"); |