*/
+#include <config.h>
#include <libtest/common.h>
#include <libtest/blobslap_worker.h>
-#include <libtest/killpid.h>
-
-using namespace libtest;
#include <cassert>
#include <cerrno>
#pragma GCC diagnostic ignored "-Wold-style-cast"
#endif
-using namespace libtest;
+namespace libtest {
class BlobslapWorker : public Server
{
private:
public:
BlobslapWorker(in_port_t port_arg) :
- Server("localhost", port_arg)
- { }
+ Server("localhost", port_arg, "benchmark/blobslap_worker", true)
+ {
+ set_pid_file();
+ }
pid_t get_pid(bool error_is_ok)
{
- if (not pid_file().empty())
+ if (pid_file().empty())
+ {
+ Error << "pid_file was empty";
+ return -1;
+ }
+
+ Wait wait(pid_file(), 0);
+
+ if (error_is_ok and not wait.successful())
{
- Wait wait(pid_file(), 0);
+ Error << "Pidfile was not found:" << pid_file();
+ return -1;
+ }
- if (error_is_ok and not wait.successful())
- {
- Error << "Pidfile was not found:" << pid_file();
- return -1;
+ std::stringstream error_message;
+ pid_t ret= get_pid_from_file(pid_file(), error_message);
- return get_pid_from_file(pid_file());
- }
+ if (error_is_ok and is_pid_valid(ret) == false)
+ {
+ Error << error_message.str();
}
- return -1;
+ return ret;
}
bool ping()
return false;
}
- pid_t local_pid= get_pid_from_file(pid_file());
- if (local_pid <= 0)
+ std::stringstream error_message;
+ pid_t local_pid= get_pid_from_file(pid_file(), error_message);
+ if (is_pid_valid(local_pid) == false)
{
+ Error << error_message.str();
return false;
}
+ // Use kill to determine is the process exist
if (::kill(local_pid, 0) == 0)
{
return true;
return "blobslap_worker";
};
- const char *executable()
+ bool has_port_option() const
{
- return GEARMAND_BLOBSLAP_WORKER;
- }
-
- const char *pid_file_option()
- {
- return "--pid-file=";
- }
-
- const char *daemon_file_option()
- {
- return "--daemon";
- }
-
- const char *log_file_option()
- {
- return NULL;
+ return true;
}
- const char *port_option()
+ bool has_log_file_option() const
{
- return "--port=";
+ return true;
}
bool is_libtool()
return true;
}
- bool build(int argc, const char *argv[]);
+ bool build(size_t argc, const char *argv[]);
};
#include <sstream>
-bool BlobslapWorker::build(int argc, const char *argv[])
+bool BlobslapWorker::build(size_t argc, const char *argv[])
{
std::stringstream arg_buffer;
- for (int x= 1 ; x < argc ; x++)
+ for (size_t x= 0 ; x < argc ; x++)
{
- arg_buffer << " " << argv[x] << " ";
+ add_option(argv[x]);
}
- set_extra_args(arg_buffer.str());
-
return true;
}
-namespace libtest {
-
Server *build_blobslap_worker(in_port_t try_port)
{
return new BlobslapWorker(try_port);
}
-}
+} // namespace libtest