예제 #1
0
파일: tfstool.cpp 프로젝트: LinxiaHu/tfs
int cmd_stat_file_meta(const VSTRING& param)
{
    int ret = TFS_SUCCESS;
    const char* file_path = expand_path(const_cast<string&>(param[0]));
    char rs_addr[257];
    FragInfo frag_info_;

    int size = param.size();
    if (size > 1)
    {
        strncpy(rs_addr, param[1].c_str(), 256);
        rs_addr[256] = '\0';
        printf("rs_addr: %s\n", rs_addr);
    }

    if (size > 2)
    {
        app_id = strtoll(param[2].c_str(), NULL, 10);
    }
    if (size > 3)
    {
        uid = strtoll(param[3].c_str(), NULL, 10);
    }

    NameMetaClientImpl impl;
    ret = impl.initialize(rs_addr);

    if (TFS_SUCCESS != ret)
    {
        TBSYS_LOG(DEBUG, "meta client login rs_addr: %s fail, ret: %d", rs_addr, ret);
    }
    else
    {
        ret = impl.read_frag_info(app_id, uid, file_path, frag_info_);
    }

    //stat the detail
    ToolUtil::print_info(ret, "stat %s", file_path);
    if (TFS_SUCCESS == ret)
    {
        int32_t cluster_id = frag_info_.cluster_id_;
        std::vector<FragMeta> vFragMeta = frag_info_.v_frag_meta_;
        std::vector<FragMeta>::iterator iter;
        fprintf(stdout, "  FILE_NAME\t  BLOCK_ID\t  FILE_ID\t  OFFSET\t  SIZE\n");
        for (iter = vFragMeta.begin(); iter < vFragMeta.end(); iter++)
        {
            FSName fsname(iter->block_id_, iter->file_id_, cluster_id);
            fprintf(stdout,
                    "  %s\t"
                    "  %u\t"
                    "  %" PRI64_PREFIX "u\t"
                    "  %"PRI64_PREFIX"d\t"
                    "  %d\n",
                    fsname.get_name(), iter->block_id_, iter->file_id_, iter->offset_, iter->size_);
        }
    }

    return ret;
}
예제 #2
0
int check(NameMetaClientImpl &client ,string path)
{

  string new_path;
  string now_name;

  std::vector<FileMetaInfo> meta_info;
  std::vector<FileMetaInfo>::const_iterator it;
  client.ls_dir(app_id, uid, path.c_str(), meta_info, false);
  TBSYS_LOG(DEBUG, "vector num %lu", meta_info.size());
  for(it = meta_info.begin(); it != meta_info.end(); ++it)
  {
    now_name = it->name_;
    new_path = path + now_name;
    if(it->id_ == 0)//file
    {
      TBSYS_LOG(DEBUG, "this is file %s", new_path.c_str());
      FragInfo *frag_info = new FragInfo();
      client.read_frag_info(app_id, uid, new_path.c_str(), *frag_info);

      char *bucket_name = new char[256];
      sprintf(bucket_name, "%ld^%ld", app_id, uid);
      ObjectInfo *base_object_info = new ObjectInfo();
      ObjectInfo *object_info = new ObjectInfo();
      UserInfo *user_info = new UserInfo();
      bool still_have = false;
      int64_t offset = 0;
      int64_t length = it->size_;
      int ret = TFS_SUCCESS;
      do
      {
        int64_t read_size = 0;
        ret = tfs::client::KvMetaHelper::do_get_object(new_server_id,
            bucket_name, new_path.c_str() + 1,
            offset, length,
            object_info, &still_have,
            *user_info);
        if (ret == EXIT_OBJECT_NOT_EXIST)
        {
          TBSYS_LOG(ERROR, "get_obejct |%s|%s| object not exist",bucket_name,new_path.c_str());
          break;
        }
        else if (ret != TFS_SUCCESS)
        {
          TBSYS_LOG(ERROR, "get_obejct |%s|%s| unknow error",bucket_name,new_path.c_str());
          break;
        }
        if (offset == 0)
        {
          *base_object_info = *object_info;
          base_object_info->v_tfs_file_info_.clear();
        }

        //todo better
        for(size_t j = 0; j < object_info->v_tfs_file_info_.size(); ++j)
        {
          if (object_info->v_tfs_file_info_[j].offset_ < offset)
          {
            continue;
          }
          base_object_info->v_tfs_file_info_.push_back(object_info->v_tfs_file_info_[j]);
          read_size += object_info->v_tfs_file_info_[j].file_size_;
        }
        offset += read_size;
        length -= read_size;
      }while(still_have && length > 0);
      if (TFS_SUCCESS == ret)
      {
        //check
        if (abs(it->create_time_ - base_object_info->meta_info_.create_time_) > 60)
        {
          TBSYS_LOG(INFO, "[DIFF_INFO] bucket:%s object:%s create_time is diff old:%d new:%"PRI64_PREFIX"d",
              bucket_name, new_path.c_str(), it->create_time_, base_object_info->meta_info_.create_time_);
        }
        if (abs(it->modify_time_ - base_object_info->meta_info_.modify_time_) > 60)
        {
          TBSYS_LOG(INFO, "[DIFF_INFO] bucket:%s object:%s modify_time is diff old:%d new:%"PRI64_PREFIX"d",
              bucket_name, new_path.c_str(), it->modify_time_, base_object_info->meta_info_.modify_time_);
        }
        if (it->size_ != base_object_info->meta_info_.big_file_size_)
        {
          TBSYS_LOG(INFO, "[DIFF_INFO] bucket:%s object:%s object_size is diff old:%"PRI64_PREFIX"d new:%"PRI64_PREFIX"d",
              bucket_name, new_path.c_str(), it->size_, base_object_info->meta_info_.big_file_size_);
        }

        if (frag_info->v_frag_meta_.size() == base_object_info->v_tfs_file_info_.size())
        {
          TBSYS_LOG(DEBUG, " now size equal is %lu",frag_info->v_frag_meta_.size());
          for(size_t i = 0; i < frag_info->v_frag_meta_.size(); ++i)
          {
            if (frag_info->cluster_id_ != base_object_info->v_tfs_file_info_[i].cluster_id_)
            {
              TBSYS_LOG(INFO, "[DIFF_INFO] bucket:%s object:%s cluster_id is diff old:%d new:%d",
                  bucket_name, new_path.c_str(), frag_info->cluster_id_, base_object_info->v_tfs_file_info_[i].cluster_id_);
            }
            if ((int64_t)(frag_info->v_frag_meta_[i].file_id_) != base_object_info->v_tfs_file_info_[i].file_id_)
            {
              TBSYS_LOG(INFO, "[DIFF_INFO] bucket:%s object:%s file_id is diff old:%"PRI64_PREFIX"d new:%"PRI64_PREFIX"d",
                  bucket_name, new_path.c_str(), frag_info->v_frag_meta_[i].file_id_, base_object_info->v_tfs_file_info_[i].file_id_);
            }
            if (frag_info->v_frag_meta_[i].offset_ != base_object_info->v_tfs_file_info_[i].offset_)
            {
              TBSYS_LOG(INFO, "[DIFF_INFO] bucket:%s object:%s offset is diff old:%"PRI64_PREFIX"d new:%"PRI64_PREFIX"d",
                  bucket_name, new_path.c_str(), frag_info->v_frag_meta_[i].offset_, base_object_info->v_tfs_file_info_[i].offset_);
            }
            if (frag_info->v_frag_meta_[i].block_id_ != base_object_info->v_tfs_file_info_[i].block_id_)
            {
              TBSYS_LOG(INFO, "[DIFF_INFO] bucket:%s object:%s block_id is diff old:%d new:%"PRI64_PREFIX"d",
                  bucket_name, new_path.c_str(), frag_info->v_frag_meta_[i].block_id_, base_object_info->v_tfs_file_info_[i].block_id_);
            }
            if (frag_info->v_frag_meta_[i].size_ != base_object_info->v_tfs_file_info_[i].file_size_)
            {
              TBSYS_LOG(INFO, "[DIFF_INFO] bucket:%s object:%s frag_size is diff old:%d new:%"PRI64_PREFIX"d",
                  bucket_name, new_path.c_str(), frag_info->v_frag_meta_[i].size_, base_object_info->v_tfs_file_info_[i].file_size_);
            }
            // old_meta
            TBSYS_LOG(DEBUG,"old_meta-> cluster_id:%d, file_id:%"PRI64_PREFIX"d, offset:%"PRI64_PREFIX"d, block_id:%d, size:%d",
                frag_info->cluster_id_,
                frag_info->v_frag_meta_[i].file_id_,
                frag_info->v_frag_meta_[i].offset_,
                frag_info->v_frag_meta_[i].block_id_,
                frag_info->v_frag_meta_[i].size_);

            //new kv_meta
            TBSYS_LOG(DEBUG,"new_meta-> cluster_id:%d, file_id:%"PRI64_PREFIX"d, offset:%"PRI64_PREFIX"d, block_id:%ld, size:%ld",
                base_object_info->v_tfs_file_info_[i].cluster_id_,
                base_object_info->v_tfs_file_info_[i].file_id_,
                base_object_info->v_tfs_file_info_[i].offset_,
                base_object_info->v_tfs_file_info_[i].block_id_,
                base_object_info->v_tfs_file_info_[i].file_size_);
          }
        }
        else
        {
          TBSYS_LOG(INFO, "[DIFF_INFO] bucket:%s object:%s frag_size is diff old:%lu new:%lu",
              bucket_name, new_path.c_str(), frag_info->v_frag_meta_.size(), base_object_info->v_tfs_file_info_.size());
        }
      }
      delete user_info;
      delete object_info;
      delete base_object_info;
      delete[] bucket_name;
      delete frag_info;
      continue;
    }
    new_path += "/";
    check(client, new_path);
  }
  return 0;
}