You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@ignite.apache.org by "F.D." <fr...@gmail.com> on 2018/08/02 06:14:46 UTC

Distribute closures error: "Operation cannot be performed in raw mode."

Hi Igniters,

finally, I've compiled my code and run my test. But after I call my closure
I got this errors: "Operation cannot be performed in raw mode.", and
unfortunally I've no idea what it does mean.

This is the code of call:

IgniteConfiguration cfg;
std::string home = getenv("IGNITE_HOME");
fs::path cfg_path = fs::path(home) / "platforms" / "cpp" /
"client_config.xml";
cfg.springCfgPath = cfg_path.string();

ignite = Ignition::Start(cfg);

IgniteBinding binding = ignite.GetBinding();
binding.RegisterComputeFunc<Calculation>();

Compute compute = ignite.GetCompute();

[...]

Calculation functor(name, args, false);
auto fut = compute.CallAsync<std::string>(functor);

[...]

And Calculation is:

class CalculationEngineIgniteServer: public
ignite::compute::ComputeFunc<std::string>
{
   friend struct ignite::binary::BinaryType<CalculationEngineIgniteServer>;
public:
   CalculationEngineIgniteServer(
   ) = default;
   CalculationEngineIgniteServer(
      const std::string &name,
      const std::vector<std::string> &input,
      bool localLog
   );

   virtual std::string Call();

private:
   std::string name_;
   bool local_log_;

   std::vector<std::string> input_;
};

Then I defined BinaryType for Calculation and for std::vector<std::string>.
I don't understand where I miss.

Thanks,
    F.D.

Re: Distribute closures error: "Operation cannot be performed in raw mode."

Posted by "F.D." <fr...@gmail.com>.
Ok perfect!

F.D.

On Thu, Aug 2, 2018 at 3:11 PM Igor Sapego <is...@apache.org> wrote:

> You may also use rawWriter. The point is, you should
> not use non-raw user, when you already started using raw.
>
> Best Regards,
> Igor
>
>
> On Thu, Aug 2, 2018 at 3:58 PM F.D. <fr...@gmail.com> wrote:
>
>> My fault!!! I modified the code in this way:
>>
>>    static void Write(BinaryWriter& writer, const Calculation& obj)
>>    {
>>       writer.WriteBool("local_log", obj.local_log_);
>>       writer.WriteString("service_name", obj.service_name_);
>>
>>       auto sa_writer = writer.WriteStringArray("input");
>>       for(const auto &s : obj.input_)
>>          sa_writer.Write(s);
>>       sa_writer.Close();
>>    }
>>
>>    static void Read(BinaryReader& reader, Calculation& dst)
>>    {
>>       dst.local_log_ = reader.ReadBool("local_log");
>>       dst.service_name_ = reader.ReadString("service_name");
>>
>>       auto sa_reader = reader.ReadStringArray("input");
>>       while(sa_reader.HasNext())
>>          dst.input_.push_back(sa_reader.GetNext());
>>    }
>>
>> and now work perfectly!
>>
>> Sorry and thanks again!
>>    F.D.
>>
>>
>>
>> On Thu, Aug 2, 2018 at 2:52 PM F.D. <fr...@gmail.com> wrote:
>>
>>> Here we go. Maybe the problem is the vector<std::string> inside the
>>> class Calculation.
>>>
>>> namespace ignite {
>>> namespace binary {
>>>
>>> template<>
>>> struct BinaryType<Calculation>
>>> {
>>>    static int32_t GetTypeId()
>>>    {
>>>       return GetBinaryStringHashCode("Calculation");
>>>    }
>>>
>>>    static void GetTypeName(std::string& dst)
>>>    {
>>>       dst = "Calculation";
>>>    }
>>>
>>>    static int32_t GetFieldId(const char* name)
>>>    {
>>>       return GetBinaryStringHashCode(name);
>>>    }
>>>
>>>    static int32_t GetHashCode(const Calculation& obj)
>>>    {
>>>       return 0;
>>>    }
>>>
>>>    static bool IsNull(const Calculation& obj)
>>>    {
>>>       return false;
>>>    }
>>>
>>>    static void GetNull(Calculation& dst)
>>>    {
>>>       dst = Calculation();
>>>    }
>>>
>>>    static void Write(BinaryWriter& writer, const Calculation& obj)
>>>    {
>>>       writer.RawWriter().WriteBool(obj.local_log_);
>>>       writer.RawWriter().WriteString(obj.service_name_);
>>>
>>>       auto sa_writer = writer.WriteStringArray("input");
>>>       for(const auto &s : obj.input_)
>>>          sa_writer.Write(s);
>>>       sa_writer.Close();
>>>    }
>>>
>>>    static void Read(BinaryReader& reader, Calculation& dst)
>>>    {
>>>       dst.local_log_ = reader.RawReader().ReadBool();
>>>       dst.service_name_ = reader.RawReader().ReadString();
>>>
>>>       auto sa_reader = reader.ReadStringArray("input");
>>>       while(sa_reader.HasNext())
>>>          dst.input_.push_back(sa_reader.GetNext());
>>>    }
>>> };
>>>
>>> template<>
>>> struct BinaryType<std::vector<std::string>>
>>> {
>>>    typedef std::vector<std::string> value_type;
>>>
>>>    static int32_t GetTypeId()
>>>    {
>>>       return GetBinaryStringHashCode("VectorOfString");
>>>    }
>>>
>>>    static void GetTypeName(std::string& dst)
>>>    {
>>>       dst = "VectorOfString";
>>>    }
>>>
>>>    static int32_t GetFieldId(const char* name)
>>>    {
>>>       return GetBinaryStringHashCode(name);
>>>    }
>>>
>>>    static int32_t GetHashCode(const std::vector<std::string> &obj)
>>>    {
>>>       return 0;
>>>    }
>>>
>>>    static bool IsNull(const std::vector<std::string> &obj)
>>>    {
>>>       return !obj.size();
>>>    }
>>>
>>>    static void GetNull(std::vector<std::string> &dst)
>>>    {
>>>       dst = value_type();
>>>    }
>>>
>>>    static void Write(BinaryWriter &writer, const
>>> std::vector<std::string> &obj)
>>>    {
>>>       auto sa_writer = writer.WriteStringArray("items");
>>>       for(const auto &s : obj)
>>>          sa_writer.Write(s);
>>>       sa_writer.Close();
>>>    }
>>>
>>>    static void Read(BinaryReader &reader, std::vector<std::string> &dst)
>>>    {
>>>       auto sa_reader = reader.ReadStringArray("items");
>>>       while(sa_reader.HasNext())
>>>          dst.push_back(sa_reader.GetNext());
>>>    }
>>> };
>>>
>>> } } // namespace ignite binary
>>>
>>> Thanks,
>>>    F.D.
>>>
>>>
>>> On Thu, Aug 2, 2018 at 10:14 AM Igor Sapego <is...@apache.org> wrote:
>>>
>>>> Hi,
>>>>
>>>> Can you show how you define BinaryType? Because the error
>>>> you are receiving is related to serialization/deserialization process.
>>>>
>>>> Best Regards,
>>>> Igor
>>>>
>>>>
>>>> On Thu, Aug 2, 2018 at 9:15 AM F.D. <fr...@gmail.com> wrote:
>>>>
>>>>> Hi Igniters,
>>>>>
>>>>> finally, I've compiled my code and run my test. But after I call my
>>>>> closure I got this errors: "Operation cannot be performed in raw mode.",
>>>>> and unfortunally I've no idea what it does mean.
>>>>>
>>>>> This is the code of call:
>>>>>
>>>>> IgniteConfiguration cfg;
>>>>> std::string home = getenv("IGNITE_HOME");
>>>>> fs::path cfg_path = fs::path(home) / "platforms" / "cpp" /
>>>>> "client_config.xml";
>>>>> cfg.springCfgPath = cfg_path.string();
>>>>>
>>>>> ignite = Ignition::Start(cfg);
>>>>>
>>>>> IgniteBinding binding = ignite.GetBinding();
>>>>> binding.RegisterComputeFunc<Calculation>();
>>>>>
>>>>> Compute compute = ignite.GetCompute();
>>>>>
>>>>> [...]
>>>>>
>>>>> Calculation functor(name, args, false);
>>>>> auto fut = compute.CallAsync<std::string>(functor);
>>>>>
>>>>> [...]
>>>>>
>>>>> And Calculation is:
>>>>>
>>>>> class CalculationEngineIgniteServer: public
>>>>> ignite::compute::ComputeFunc<std::string>
>>>>> {
>>>>>    friend struct
>>>>> ignite::binary::BinaryType<CalculationEngineIgniteServer>;
>>>>> public:
>>>>>    CalculationEngineIgniteServer(
>>>>>    ) = default;
>>>>>    CalculationEngineIgniteServer(
>>>>>       const std::string &name,
>>>>>       const std::vector<std::string> &input,
>>>>>       bool localLog
>>>>>    );
>>>>>
>>>>>    virtual std::string Call();
>>>>>
>>>>> private:
>>>>>    std::string name_;
>>>>>    bool local_log_;
>>>>>
>>>>>    std::vector<std::string> input_;
>>>>> };
>>>>>
>>>>> Then I defined BinaryType for Calculation and for
>>>>> std::vector<std::string>. I don't understand where I miss.
>>>>>
>>>>> Thanks,
>>>>>     F.D.
>>>>>
>>>>>

Re: Distribute closures error: "Operation cannot be performed in raw mode."

Posted by Igor Sapego <is...@apache.org>.
You may also use rawWriter. The point is, you should
not use non-raw user, when you already started using raw.

Best Regards,
Igor


On Thu, Aug 2, 2018 at 3:58 PM F.D. <fr...@gmail.com> wrote:

> My fault!!! I modified the code in this way:
>
>    static void Write(BinaryWriter& writer, const Calculation& obj)
>    {
>       writer.WriteBool("local_log", obj.local_log_);
>       writer.WriteString("service_name", obj.service_name_);
>
>       auto sa_writer = writer.WriteStringArray("input");
>       for(const auto &s : obj.input_)
>          sa_writer.Write(s);
>       sa_writer.Close();
>    }
>
>    static void Read(BinaryReader& reader, Calculation& dst)
>    {
>       dst.local_log_ = reader.ReadBool("local_log");
>       dst.service_name_ = reader.ReadString("service_name");
>
>       auto sa_reader = reader.ReadStringArray("input");
>       while(sa_reader.HasNext())
>          dst.input_.push_back(sa_reader.GetNext());
>    }
>
> and now work perfectly!
>
> Sorry and thanks again!
>    F.D.
>
>
>
> On Thu, Aug 2, 2018 at 2:52 PM F.D. <fr...@gmail.com> wrote:
>
>> Here we go. Maybe the problem is the vector<std::string> inside the class
>> Calculation.
>>
>> namespace ignite {
>> namespace binary {
>>
>> template<>
>> struct BinaryType<Calculation>
>> {
>>    static int32_t GetTypeId()
>>    {
>>       return GetBinaryStringHashCode("Calculation");
>>    }
>>
>>    static void GetTypeName(std::string& dst)
>>    {
>>       dst = "Calculation";
>>    }
>>
>>    static int32_t GetFieldId(const char* name)
>>    {
>>       return GetBinaryStringHashCode(name);
>>    }
>>
>>    static int32_t GetHashCode(const Calculation& obj)
>>    {
>>       return 0;
>>    }
>>
>>    static bool IsNull(const Calculation& obj)
>>    {
>>       return false;
>>    }
>>
>>    static void GetNull(Calculation& dst)
>>    {
>>       dst = Calculation();
>>    }
>>
>>    static void Write(BinaryWriter& writer, const Calculation& obj)
>>    {
>>       writer.RawWriter().WriteBool(obj.local_log_);
>>       writer.RawWriter().WriteString(obj.service_name_);
>>
>>       auto sa_writer = writer.WriteStringArray("input");
>>       for(const auto &s : obj.input_)
>>          sa_writer.Write(s);
>>       sa_writer.Close();
>>    }
>>
>>    static void Read(BinaryReader& reader, Calculation& dst)
>>    {
>>       dst.local_log_ = reader.RawReader().ReadBool();
>>       dst.service_name_ = reader.RawReader().ReadString();
>>
>>       auto sa_reader = reader.ReadStringArray("input");
>>       while(sa_reader.HasNext())
>>          dst.input_.push_back(sa_reader.GetNext());
>>    }
>> };
>>
>> template<>
>> struct BinaryType<std::vector<std::string>>
>> {
>>    typedef std::vector<std::string> value_type;
>>
>>    static int32_t GetTypeId()
>>    {
>>       return GetBinaryStringHashCode("VectorOfString");
>>    }
>>
>>    static void GetTypeName(std::string& dst)
>>    {
>>       dst = "VectorOfString";
>>    }
>>
>>    static int32_t GetFieldId(const char* name)
>>    {
>>       return GetBinaryStringHashCode(name);
>>    }
>>
>>    static int32_t GetHashCode(const std::vector<std::string> &obj)
>>    {
>>       return 0;
>>    }
>>
>>    static bool IsNull(const std::vector<std::string> &obj)
>>    {
>>       return !obj.size();
>>    }
>>
>>    static void GetNull(std::vector<std::string> &dst)
>>    {
>>       dst = value_type();
>>    }
>>
>>    static void Write(BinaryWriter &writer, const std::vector<std::string>
>> &obj)
>>    {
>>       auto sa_writer = writer.WriteStringArray("items");
>>       for(const auto &s : obj)
>>          sa_writer.Write(s);
>>       sa_writer.Close();
>>    }
>>
>>    static void Read(BinaryReader &reader, std::vector<std::string> &dst)
>>    {
>>       auto sa_reader = reader.ReadStringArray("items");
>>       while(sa_reader.HasNext())
>>          dst.push_back(sa_reader.GetNext());
>>    }
>> };
>>
>> } } // namespace ignite binary
>>
>> Thanks,
>>    F.D.
>>
>>
>> On Thu, Aug 2, 2018 at 10:14 AM Igor Sapego <is...@apache.org> wrote:
>>
>>> Hi,
>>>
>>> Can you show how you define BinaryType? Because the error
>>> you are receiving is related to serialization/deserialization process.
>>>
>>> Best Regards,
>>> Igor
>>>
>>>
>>> On Thu, Aug 2, 2018 at 9:15 AM F.D. <fr...@gmail.com> wrote:
>>>
>>>> Hi Igniters,
>>>>
>>>> finally, I've compiled my code and run my test. But after I call my
>>>> closure I got this errors: "Operation cannot be performed in raw mode.",
>>>> and unfortunally I've no idea what it does mean.
>>>>
>>>> This is the code of call:
>>>>
>>>> IgniteConfiguration cfg;
>>>> std::string home = getenv("IGNITE_HOME");
>>>> fs::path cfg_path = fs::path(home) / "platforms" / "cpp" /
>>>> "client_config.xml";
>>>> cfg.springCfgPath = cfg_path.string();
>>>>
>>>> ignite = Ignition::Start(cfg);
>>>>
>>>> IgniteBinding binding = ignite.GetBinding();
>>>> binding.RegisterComputeFunc<Calculation>();
>>>>
>>>> Compute compute = ignite.GetCompute();
>>>>
>>>> [...]
>>>>
>>>> Calculation functor(name, args, false);
>>>> auto fut = compute.CallAsync<std::string>(functor);
>>>>
>>>> [...]
>>>>
>>>> And Calculation is:
>>>>
>>>> class CalculationEngineIgniteServer: public
>>>> ignite::compute::ComputeFunc<std::string>
>>>> {
>>>>    friend struct
>>>> ignite::binary::BinaryType<CalculationEngineIgniteServer>;
>>>> public:
>>>>    CalculationEngineIgniteServer(
>>>>    ) = default;
>>>>    CalculationEngineIgniteServer(
>>>>       const std::string &name,
>>>>       const std::vector<std::string> &input,
>>>>       bool localLog
>>>>    );
>>>>
>>>>    virtual std::string Call();
>>>>
>>>> private:
>>>>    std::string name_;
>>>>    bool local_log_;
>>>>
>>>>    std::vector<std::string> input_;
>>>> };
>>>>
>>>> Then I defined BinaryType for Calculation and for
>>>> std::vector<std::string>. I don't understand where I miss.
>>>>
>>>> Thanks,
>>>>     F.D.
>>>>
>>>>

Re: Distribute closures error: "Operation cannot be performed in raw mode."

Posted by "F.D." <fr...@gmail.com>.
 My fault!!! I modified the code in this way:

   static void Write(BinaryWriter& writer, const Calculation& obj)
   {
      writer.WriteBool("local_log", obj.local_log_);
      writer.WriteString("service_name", obj.service_name_);

      auto sa_writer = writer.WriteStringArray("input");
      for(const auto &s : obj.input_)
         sa_writer.Write(s);
      sa_writer.Close();
   }

   static void Read(BinaryReader& reader, Calculation& dst)
   {
      dst.local_log_ = reader.ReadBool("local_log");
      dst.service_name_ = reader.ReadString("service_name");

      auto sa_reader = reader.ReadStringArray("input");
      while(sa_reader.HasNext())
         dst.input_.push_back(sa_reader.GetNext());
   }

and now work perfectly!

Sorry and thanks again!
   F.D.



On Thu, Aug 2, 2018 at 2:52 PM F.D. <fr...@gmail.com> wrote:

> Here we go. Maybe the problem is the vector<std::string> inside the class
> Calculation.
>
> namespace ignite {
> namespace binary {
>
> template<>
> struct BinaryType<Calculation>
> {
>    static int32_t GetTypeId()
>    {
>       return GetBinaryStringHashCode("Calculation");
>    }
>
>    static void GetTypeName(std::string& dst)
>    {
>       dst = "Calculation";
>    }
>
>    static int32_t GetFieldId(const char* name)
>    {
>       return GetBinaryStringHashCode(name);
>    }
>
>    static int32_t GetHashCode(const Calculation& obj)
>    {
>       return 0;
>    }
>
>    static bool IsNull(const Calculation& obj)
>    {
>       return false;
>    }
>
>    static void GetNull(Calculation& dst)
>    {
>       dst = Calculation();
>    }
>
>    static void Write(BinaryWriter& writer, const Calculation& obj)
>    {
>       writer.RawWriter().WriteBool(obj.local_log_);
>       writer.RawWriter().WriteString(obj.service_name_);
>
>       auto sa_writer = writer.WriteStringArray("input");
>       for(const auto &s : obj.input_)
>          sa_writer.Write(s);
>       sa_writer.Close();
>    }
>
>    static void Read(BinaryReader& reader, Calculation& dst)
>    {
>       dst.local_log_ = reader.RawReader().ReadBool();
>       dst.service_name_ = reader.RawReader().ReadString();
>
>       auto sa_reader = reader.ReadStringArray("input");
>       while(sa_reader.HasNext())
>          dst.input_.push_back(sa_reader.GetNext());
>    }
> };
>
> template<>
> struct BinaryType<std::vector<std::string>>
> {
>    typedef std::vector<std::string> value_type;
>
>    static int32_t GetTypeId()
>    {
>       return GetBinaryStringHashCode("VectorOfString");
>    }
>
>    static void GetTypeName(std::string& dst)
>    {
>       dst = "VectorOfString";
>    }
>
>    static int32_t GetFieldId(const char* name)
>    {
>       return GetBinaryStringHashCode(name);
>    }
>
>    static int32_t GetHashCode(const std::vector<std::string> &obj)
>    {
>       return 0;
>    }
>
>    static bool IsNull(const std::vector<std::string> &obj)
>    {
>       return !obj.size();
>    }
>
>    static void GetNull(std::vector<std::string> &dst)
>    {
>       dst = value_type();
>    }
>
>    static void Write(BinaryWriter &writer, const std::vector<std::string>
> &obj)
>    {
>       auto sa_writer = writer.WriteStringArray("items");
>       for(const auto &s : obj)
>          sa_writer.Write(s);
>       sa_writer.Close();
>    }
>
>    static void Read(BinaryReader &reader, std::vector<std::string> &dst)
>    {
>       auto sa_reader = reader.ReadStringArray("items");
>       while(sa_reader.HasNext())
>          dst.push_back(sa_reader.GetNext());
>    }
> };
>
> } } // namespace ignite binary
>
> Thanks,
>    F.D.
>
>
> On Thu, Aug 2, 2018 at 10:14 AM Igor Sapego <is...@apache.org> wrote:
>
>> Hi,
>>
>> Can you show how you define BinaryType? Because the error
>> you are receiving is related to serialization/deserialization process.
>>
>> Best Regards,
>> Igor
>>
>>
>> On Thu, Aug 2, 2018 at 9:15 AM F.D. <fr...@gmail.com> wrote:
>>
>>> Hi Igniters,
>>>
>>> finally, I've compiled my code and run my test. But after I call my
>>> closure I got this errors: "Operation cannot be performed in raw mode.",
>>> and unfortunally I've no idea what it does mean.
>>>
>>> This is the code of call:
>>>
>>> IgniteConfiguration cfg;
>>> std::string home = getenv("IGNITE_HOME");
>>> fs::path cfg_path = fs::path(home) / "platforms" / "cpp" /
>>> "client_config.xml";
>>> cfg.springCfgPath = cfg_path.string();
>>>
>>> ignite = Ignition::Start(cfg);
>>>
>>> IgniteBinding binding = ignite.GetBinding();
>>> binding.RegisterComputeFunc<Calculation>();
>>>
>>> Compute compute = ignite.GetCompute();
>>>
>>> [...]
>>>
>>> Calculation functor(name, args, false);
>>> auto fut = compute.CallAsync<std::string>(functor);
>>>
>>> [...]
>>>
>>> And Calculation is:
>>>
>>> class CalculationEngineIgniteServer: public
>>> ignite::compute::ComputeFunc<std::string>
>>> {
>>>    friend struct
>>> ignite::binary::BinaryType<CalculationEngineIgniteServer>;
>>> public:
>>>    CalculationEngineIgniteServer(
>>>    ) = default;
>>>    CalculationEngineIgniteServer(
>>>       const std::string &name,
>>>       const std::vector<std::string> &input,
>>>       bool localLog
>>>    );
>>>
>>>    virtual std::string Call();
>>>
>>> private:
>>>    std::string name_;
>>>    bool local_log_;
>>>
>>>    std::vector<std::string> input_;
>>> };
>>>
>>> Then I defined BinaryType for Calculation and for
>>> std::vector<std::string>. I don't understand where I miss.
>>>
>>> Thanks,
>>>     F.D.
>>>
>>>

Re: Distribute closures error: "Operation cannot be performed in raw mode."

Posted by "F.D." <fr...@gmail.com>.
Here we go. Maybe the problem is the vector<std::string> inside the class
Calculation.

namespace ignite {
namespace binary {

template<>
struct BinaryType<Calculation>
{
   static int32_t GetTypeId()
   {
      return GetBinaryStringHashCode("Calculation");
   }

   static void GetTypeName(std::string& dst)
   {
      dst = "Calculation";
   }

   static int32_t GetFieldId(const char* name)
   {
      return GetBinaryStringHashCode(name);
   }

   static int32_t GetHashCode(const Calculation& obj)
   {
      return 0;
   }

   static bool IsNull(const Calculation& obj)
   {
      return false;
   }

   static void GetNull(Calculation& dst)
   {
      dst = Calculation();
   }

   static void Write(BinaryWriter& writer, const Calculation& obj)
   {
      writer.RawWriter().WriteBool(obj.local_log_);
      writer.RawWriter().WriteString(obj.service_name_);

      auto sa_writer = writer.WriteStringArray("input");
      for(const auto &s : obj.input_)
         sa_writer.Write(s);
      sa_writer.Close();
   }

   static void Read(BinaryReader& reader, Calculation& dst)
   {
      dst.local_log_ = reader.RawReader().ReadBool();
      dst.service_name_ = reader.RawReader().ReadString();

      auto sa_reader = reader.ReadStringArray("input");
      while(sa_reader.HasNext())
         dst.input_.push_back(sa_reader.GetNext());
   }
};

template<>
struct BinaryType<std::vector<std::string>>
{
   typedef std::vector<std::string> value_type;

   static int32_t GetTypeId()
   {
      return GetBinaryStringHashCode("VectorOfString");
   }

   static void GetTypeName(std::string& dst)
   {
      dst = "VectorOfString";
   }

   static int32_t GetFieldId(const char* name)
   {
      return GetBinaryStringHashCode(name);
   }

   static int32_t GetHashCode(const std::vector<std::string> &obj)
   {
      return 0;
   }

   static bool IsNull(const std::vector<std::string> &obj)
   {
      return !obj.size();
   }

   static void GetNull(std::vector<std::string> &dst)
   {
      dst = value_type();
   }

   static void Write(BinaryWriter &writer, const std::vector<std::string>
&obj)
   {
      auto sa_writer = writer.WriteStringArray("items");
      for(const auto &s : obj)
         sa_writer.Write(s);
      sa_writer.Close();
   }

   static void Read(BinaryReader &reader, std::vector<std::string> &dst)
   {
      auto sa_reader = reader.ReadStringArray("items");
      while(sa_reader.HasNext())
         dst.push_back(sa_reader.GetNext());
   }
};

} } // namespace ignite binary

Thanks,
   F.D.


On Thu, Aug 2, 2018 at 10:14 AM Igor Sapego <is...@apache.org> wrote:

> Hi,
>
> Can you show how you define BinaryType? Because the error
> you are receiving is related to serialization/deserialization process.
>
> Best Regards,
> Igor
>
>
> On Thu, Aug 2, 2018 at 9:15 AM F.D. <fr...@gmail.com> wrote:
>
>> Hi Igniters,
>>
>> finally, I've compiled my code and run my test. But after I call my
>> closure I got this errors: "Operation cannot be performed in raw mode.",
>> and unfortunally I've no idea what it does mean.
>>
>> This is the code of call:
>>
>> IgniteConfiguration cfg;
>> std::string home = getenv("IGNITE_HOME");
>> fs::path cfg_path = fs::path(home) / "platforms" / "cpp" /
>> "client_config.xml";
>> cfg.springCfgPath = cfg_path.string();
>>
>> ignite = Ignition::Start(cfg);
>>
>> IgniteBinding binding = ignite.GetBinding();
>> binding.RegisterComputeFunc<Calculation>();
>>
>> Compute compute = ignite.GetCompute();
>>
>> [...]
>>
>> Calculation functor(name, args, false);
>> auto fut = compute.CallAsync<std::string>(functor);
>>
>> [...]
>>
>> And Calculation is:
>>
>> class CalculationEngineIgniteServer: public
>> ignite::compute::ComputeFunc<std::string>
>> {
>>    friend struct
>> ignite::binary::BinaryType<CalculationEngineIgniteServer>;
>> public:
>>    CalculationEngineIgniteServer(
>>    ) = default;
>>    CalculationEngineIgniteServer(
>>       const std::string &name,
>>       const std::vector<std::string> &input,
>>       bool localLog
>>    );
>>
>>    virtual std::string Call();
>>
>> private:
>>    std::string name_;
>>    bool local_log_;
>>
>>    std::vector<std::string> input_;
>> };
>>
>> Then I defined BinaryType for Calculation and for
>> std::vector<std::string>. I don't understand where I miss.
>>
>> Thanks,
>>     F.D.
>>
>>

Re: Distribute closures error: "Operation cannot be performed in raw mode."

Posted by Igor Sapego <is...@apache.org>.
Hi,

Can you show how you define BinaryType? Because the error
you are receiving is related to serialization/deserialization process.

Best Regards,
Igor


On Thu, Aug 2, 2018 at 9:15 AM F.D. <fr...@gmail.com> wrote:

> Hi Igniters,
>
> finally, I've compiled my code and run my test. But after I call my
> closure I got this errors: "Operation cannot be performed in raw mode.",
> and unfortunally I've no idea what it does mean.
>
> This is the code of call:
>
> IgniteConfiguration cfg;
> std::string home = getenv("IGNITE_HOME");
> fs::path cfg_path = fs::path(home) / "platforms" / "cpp" /
> "client_config.xml";
> cfg.springCfgPath = cfg_path.string();
>
> ignite = Ignition::Start(cfg);
>
> IgniteBinding binding = ignite.GetBinding();
> binding.RegisterComputeFunc<Calculation>();
>
> Compute compute = ignite.GetCompute();
>
> [...]
>
> Calculation functor(name, args, false);
> auto fut = compute.CallAsync<std::string>(functor);
>
> [...]
>
> And Calculation is:
>
> class CalculationEngineIgniteServer: public
> ignite::compute::ComputeFunc<std::string>
> {
>    friend struct ignite::binary::BinaryType<CalculationEngineIgniteServer>;
> public:
>    CalculationEngineIgniteServer(
>    ) = default;
>    CalculationEngineIgniteServer(
>       const std::string &name,
>       const std::vector<std::string> &input,
>       bool localLog
>    );
>
>    virtual std::string Call();
>
> private:
>    std::string name_;
>    bool local_log_;
>
>    std::vector<std::string> input_;
> };
>
> Then I defined BinaryType for Calculation and for
> std::vector<std::string>. I don't understand where I miss.
>
> Thanks,
>     F.D.
>
>