rpc_test.cc 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #include "rpc_engine.h"
  2. #include "ClientNamenodeProtocol.pb.h"
  3. #include <asio.hpp>
  4. #include <iostream>
  5. #include <thread>
  6. int main(int argc, char *argv[]) {
  7. using namespace hdfs;
  8. using namespace ::hadoop::hdfs;
  9. using ::asio::ip::tcp;
  10. ::asio::io_service io_service;
  11. if (argc != 4) {
  12. std::cerr << "Test whehter a file exists on the HDFS cluster.\n"
  13. << "Usage: " << argv[0] << " "
  14. << "<nnhost> <nnport> <file>\n";
  15. return 1;
  16. }
  17. RpcEngine engine(&io_service, "libhdfs++",
  18. "org.apache.hadoop.hdfs.protocol.ClientProtocol", 1);
  19. GetFileInfoRequestProto req;
  20. auto resp = std::make_shared<GetFileInfoResponseProto>();
  21. req.set_src(argv[3]);
  22. tcp::resolver resolver(io_service);
  23. tcp::resolver::query query(tcp::v4(), argv[1], argv[2]);
  24. tcp::resolver::iterator iterator = resolver.resolve(query);
  25. std::vector<::asio::ip::tcp::endpoint> servers(iterator,
  26. tcp::resolver::iterator());
  27. ::asio::io_service::work work(io_service);
  28. std::thread io_service_thread([&io_service]() { io_service.run(); });
  29. Status status = engine.Connect(servers);
  30. if (!status.ok()) {
  31. std::cerr << "Connection failed: " << status.ToString() << std::endl;
  32. return -1;
  33. }
  34. std::cout << "Connected to " << servers.front() << std::endl;
  35. engine.Start();
  36. engine.AsyncRpc("getFileInfo", &req, resp, [resp, &engine, &io_service](
  37. const Status &status) {
  38. if (!status.ok()) {
  39. std::cerr << "Async RPC Failed: " << status.ToString() << std::endl;
  40. engine.Shutdown();
  41. io_service.post([&io_service]() { io_service.stop(); });
  42. return;
  43. }
  44. std::cerr << "File exists: " << resp->has_fs() << std::endl;
  45. engine.Shutdown();
  46. io_service.post([&io_service]() { io_service.stop(); });
  47. });
  48. io_service_thread.join();
  49. return 0;
  50. }