I have a requirement to fetch the data using distributed-computing function
and error at
var res = CacheInstance.Instance.InstanceObject.GetCompute().Call(calls);
// InstanceObject singleton object for Ignite
[11:16:34,865][WARNING][main][Marshaller] Type
'System.Collections.Generic.Dictionary`2[System.Int64,Apache.Ignite.Core.Impl.Binary.BinaryFullTypeDescriptor]'
implements 'System.Runtime.Serialization.ISerializable'. It will be written
in Ignite binary format, however, the following limitations apply: DateTime
fields would not work in SQL; sbyte, ushort, uint, ulong fields would not
work in DML.
[11:16:34,889][WARNING][main][Marshaller] Type
'System.Collections.Generic.Dictionary`2[System.String,System.Byte]'
implements 'System.Runtime.Serialization.ISerializable'. It will be written
in Ignite binary format, however, the following limitations apply: DateTime
fields would not work in SQL; sbyte, ushort, uint, ulong fields would not
work in DML.
[11:16:34,895][WARNING][main][Marshaller] Type
'System.Func`2[Apache.Ignite.Core.Impl.Binary.BinaryReader,Apache.Ignite.Core.Impl.Compute.ComputeJobHolder]'
implements 'System.Runtime.Serialization.ISerializable'. It will be written
in Ignite binary format, however, the following limitations apply: DateTime
fields would not work in SQL; sbyte, ushort, uint, ulong fields would not
work in DML.
Kindly help me on this and I have shared the implementation below.
public class ComputeTestModel : IBinarizable
{
[QuerySqlField]
public string TestField1 { get; set; }
[QuerySqlField]
public string TestField2 { get; set; }
[QuerySqlField]
public string TestField3 { get; set; }
public void ReadBinary(IBinaryReader reader){}//not added
implementation here
public void WriteBinary(IBinaryWriter writer){}//not added
implementation here
}
class TestModelComputeFunc<T> : IComputeFunc<List<ComputeTestModel>>
{
// [InstanceResource] private readonly IIgnite _ignite;
public ICache<string, T> IgniteCache { get; set; }
public string _searchCriteria { get; set; }
public TestModelComputeFunc(ICache<string, T> igniteCache, string
searchCriteria)
{
IgniteCache = igniteCache;
_searchCriteria = searchCriteria;
}
public List<ComputeTestModel> Invoke()
{
List<ComputeTestModel> objs = new List<ComputeTestModel>();
string query = "select * from ComputeTestModel where
TestField1 = ?";
SqlFieldsQuery fieldsQuery = new SqlFieldsQuery(query,
_searchCriteria);
IFieldsQueryCursor queryCursor = IgniteCache.Query(fieldsQuery);
if (queryCursor != null)
{
foreach (var cacheEntry in queryCursor)
{
objs.Add(new ComputeTestModel
{
TestField1 = cacheEntry[0] as string,
TestField2 = cacheEntry[1] as string,
TestField3 = cacheEntry[2] as string
});
}
return objs;
}
return null;
}
}
}
public static class CacheUtilsTest
{
public static List<ComputeTestModel> ComputeTest_OnIgnite(string
searchCriteria)
{
//CacheInstance.Instance.ComputeTestICache defined in another class public
ICache<string, ComputeTestModel> ComputeTestModelICache { get; set; }
ComputeTestComputeFunc<ComputeTestModel> calls = new
ComputeTestComputeFunc<ComputeTestModel>(CacheInstance.Instance.ComputeTestICache,
searchCriteria);
// Execute the collection of calls on the cluster.
var res =
CacheInstance.Instance.InstanceObject.GetCompute().Call(calls);
//exception thrown here
/*
//another aproach
ComputeTestComputeFunc<ComputeTestModel> cacheObject = new
ComputeTestComputeFunc<ComputeTestModel>(CacheInstance.Instance.ComputeTestICache,
searchCriteria);
// var calls = CacheInstance.Instance.ComputeTestICache.Select(s =>
cacheObject).ToList();
// Execute the collection of calls on the cluster.
var res =
CacheInstance.Instance.InstanceObject.GetCompute().Call(calls);
//exception thrown here
*/
return null;
}
}
class Program
{
static void Main(string[] args)
{
// Console.WriteLine("Hello World!");
var saticCache = CacheInstance.Instance.InstanceObject;
var res = CacheUtilsTest.ComputeTest_OnIgnite("A");
int ans= res.Count();
Console.ReadKey();
}
}
Regards,
Charlin