Beispiel #1
0
    int ObBaseServer::start(bool need_wait)
    {
      int rc = OB_SUCCESS;
      rc = initialize();

      if (rc != OB_SUCCESS)
      {
        TBSYS_LOG(WARN, "initialize failed");
      } else
      {
        if (packet_factory_ == NULL)
        {
          rc = OB_INVALID_ARGUMENT;
          TBSYS_LOG(WARN, "packet factory can not be NULL, server not started");
        } else 
        {
          uint32_t local_ip = tbsys::CNetUtil::getLocalAddr(dev_name_);
          server_id_ = tbsys::CNetUtil::ipToAddr(local_ip, port_);

          streamer_.setPacketFactory(packet_factory_);

          setBatchPushPacket(batch_); // IServerAdapter's method

          transport_.start();

          char spec[32];
          snprintf(spec, 32, "tcp::%d", port_);
          spec[31] = '\0';

          if (transport_.listen(spec, &streamer_, this) == NULL) {
            TBSYS_LOG(ERROR, "listen on port %d failed", port_);
            rc = OB_SERVER_LISTEN_ERROR;
          } else
          {
            TBSYS_LOG(INFO, "listened on port %d", port_);
          }

          if (rc == OB_SUCCESS)
          {
            rc = start_service();
          }

          if (rc == OB_SUCCESS)
          {
            //wait_for_queue();
            if (need_wait)
            {
              transport_.wait();
            }
          }
        }
      }

      if (need_wait)
      {
        stop();
      }

      return rc;
    }
 tair_server::tair_server()
 {
    is_stoped = 0;
    tair_mgr = NULL;
    req_processor = NULL;
    conn_manager = NULL;
    worker_thread_count = TBSYS_CONFIG.getInt(TAIRSERVER_SECTION, TAIR_PROCESS_THREAD_COUNT, -1);
    duplicate_thread_count = TBSYS_CONFIG.getInt(TAIRSERVER_SECTION, DUPLICATE_THREAD_NUM,
            DEFAULT_DUPLICATE_THREAD_NUM);
    task_queue_size = TBSYS_CONFIG.getInt(TAIRSERVER_SECTION,TAIR_TASK_QUEUE_SIZE,100);
    if (worker_thread_count < 0) {
        worker_thread_count = sysconf(_SC_NPROCESSORS_CONF);
    }
    if (worker_thread_count > 0) {
       setBatchPushPacket(true);
    }
    if (task_queue_size < 0){
       task_queue_size = 100;
    }
 }