Esempio n. 1
0
 int WriteDataMessage::serialize(common::Stream& output) const
 {
   if (has_lease())
   {
     ds_.push_back(ULONG_LONG_MAX);
     ds_.push_back(static_cast<uint64_t>(version_));
     ds_.push_back(static_cast<uint64_t>(lease_id_));
   }
   int64_t pos = 0;
   int32_t iret = write_data_info_.serialize(output.get_free(), output.get_free_length(), pos);
   if (common::TFS_SUCCESS == iret)
   {
     output.pour(write_data_info_.length());
     iret = output.set_vint64(ds_);
   }
   if (common::TFS_SUCCESS == iret
       && write_data_info_.length_ > 0)
   {
     iret = output.set_bytes(data_, write_data_info_.length_);
   }
   // reparse, avoid push verion&lease again when clone twice;
   if (common::TFS_SUCCESS == iret)
   {
     parse_special_ds(ds_, version_, lease_id_);
   }
   return iret;
 }
    int WriteDataMessage::build(char* data, int32_t len)
    {
      if (has_lease_ == true)
      {
        ds_.push_back(ULONG_LONG_MAX);
        ds_.push_back(static_cast<uint64_t>(version_));
        ds_.push_back(static_cast<uint64_t>(lease_));
      }

      if (set_object(&data, &len, &write_data_info_, sizeof(WriteDataInfo)) == TFS_ERROR)
      {
        return TFS_ERROR;
      }
      if (set_vint64(&data, &len, ds_) == TFS_ERROR)
      {
        return TFS_ERROR;
      }
      if (write_data_info_.length_ > 0)
      {
        if (set_object(&data, &len, data_, write_data_info_.length_) == TFS_ERROR)
        {
          return TFS_ERROR;
        }
      }

      // reparse, avoid push verion&lease again when clone twice;
      has_lease_ = parse_special_ds(ds_, version_, lease_);
      return TFS_SUCCESS;
    }
    int RenameFileMessage::build(char* data, int32_t len)
    {
      if (has_lease_ == true)
      {
        ds_.push_back(ULONG_LONG_MAX);
        ds_.push_back(static_cast<uint64_t> (version_));
        ds_.push_back(static_cast<uint64_t> (lease_id_));
      }

      if (set_object(&data, &len, &rename_file_info_, sizeof(RenameFileInfo)) == TFS_ERROR)
      {
        return TFS_ERROR;
      }
      if (set_vint64(&data, &len, ds_) == TFS_ERROR)
      {
        return TFS_ERROR;
      }
      if (set_int32(&data, &len, option_flag_) == TFS_ERROR)
      {
        return TFS_ERROR;
      }

      has_lease_ = parse_special_ds(ds_, version_, lease_id_);

      return TFS_SUCCESS;
    }
 //block_id, server_count, server_id1, server_id2, ..., filename_len, filename
 int SetBlockInfoMessage::parse(char* data, int32_t len)
 {
   if (get_int32(&data, &len, reinterpret_cast<int32_t*> (&block_id_)) == TFS_ERROR)
   {
     return TFS_ERROR;
   }
   if (get_vint64(&data, &len, ds_) == TFS_ERROR)
   {
     return TFS_ERROR;
   }
   has_lease_ = parse_special_ds(ds_, version_, lease_);
   return TFS_SUCCESS;
 }
    int RenameFileMessage::parse(char* data, int32_t len)
    {
      if (get_object_copy(&data, &len, reinterpret_cast<void*>(&rename_file_info_), sizeof(RenameFileInfo)) == TFS_ERROR)
      {
        return TFS_ERROR;
      }
      if (get_vint64(&data, &len, ds_) == TFS_ERROR)
      {
        return TFS_ERROR;
      }
      get_int32(&data, &len, &option_flag_);
      has_lease_ = parse_special_ds(ds_, version_, lease_id_);

      return TFS_SUCCESS;
    }
Esempio n. 6
0
 int WriteDataMessage::deserialize(common::Stream& input)
 {
   int64_t pos = 0;
   int32_t iret = write_data_info_.deserialize(input.get_data(), input.get_data_length(), pos);
   if (common::TFS_SUCCESS == iret)
   {
     input.drain( write_data_info_.length());
     iret = input.get_vint64(ds_);
   }
   if (common::TFS_SUCCESS == iret
     && write_data_info_.length_ > 0)
   {
     data_ = input.get_data();
     input.drain(write_data_info_.length_);
   }
   if (common::TFS_SUCCESS == iret)
   {
     parse_special_ds(ds_, version_, lease_id_);
   }
   return iret;
 }
    int WriteDataMessage::parse(char* data, int32_t len)
    {
      if (get_object_copy(&data, &len, reinterpret_cast<void*>(&write_data_info_), sizeof(WriteDataInfo)) == TFS_ERROR)
      {
        return TFS_ERROR;
      }
      if (get_vint64(&data, &len, ds_) == TFS_ERROR)
      {
        return TFS_ERROR;
      }
      if (write_data_info_.length_ > 0)
      {
        if (get_object(&data, &len, reinterpret_cast<void**>(&data_), write_data_info_.length_) == TFS_ERROR)
        {
          return TFS_ERROR;
        }
      }

      has_lease_ = parse_special_ds(ds_, version_, lease_);

      return TFS_SUCCESS;
    }
    int SetBlockInfoMessage::build(char* data, int32_t len)
    {
      if ((has_lease_ == true) && (ds_.size() > 0))
      {
        ds_.push_back(ULONG_LONG_MAX);
        ds_.push_back(static_cast<uint64_t> (version_));
        ds_.push_back(static_cast<uint64_t> (lease_));
      }

      if (set_int32(&data, &len, block_id_) == TFS_ERROR)
      {
        return TFS_ERROR;
      }
      if (set_vint64(&data, &len, ds_) == TFS_ERROR)
      {
        return TFS_ERROR;
      }

      // reparse, avoid push verion&lease again when clone twice;
      has_lease_ = parse_special_ds(ds_, version_, lease_);
      return TFS_SUCCESS;
    }