You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2017/05/31 09:23:18 UTC
[28/51] ignite git commit: IGNITE-3355: Implemented Compute::Call()
for C++
IGNITE-3355: Implemented Compute::Call() for C++
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/f9c96de5
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/f9c96de5
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/f9c96de5
Branch: refs/heads/ignite-5075-pds
Commit: f9c96de578c8a87e8f2f7fee01d3719d0bb21359
Parents: 0f8af13
Author: Igor Sapego <is...@gridgain.com>
Authored: Mon May 29 17:29:10 2017 +0300
Committer: Igor Sapego <is...@gridgain.com>
Committed: Mon May 29 17:29:10 2017 +0300
----------------------------------------------------------------------
modules/platforms/cpp/binary/Makefile.am | 67 ++--
.../platforms/cpp/binary/include/Makefile.am | 55 +--
.../binary/include/ignite/binary/binary_type.h | 2 +-
.../ignite/impl/binary/binary_type_impl.h | 61 ++++
.../ignite/impl/binary/binary_writer_impl.h | 4 +-
.../cpp/binary/project/vs/binary.vcxproj | 2 +
.../binary/project/vs/binary.vcxproj.filters | 6 +
.../binary/src/impl/binary/binary_type_impl.cpp | 61 ++++
modules/platforms/cpp/common/Makefile.am | 54 +--
.../platforms/cpp/common/include/Makefile.am | 1 +
.../common/include/ignite/common/cancelable.h | 65 ++++
.../cpp/common/include/ignite/common/promise.h | 18 +
.../common/include/ignite/common/shared_state.h | 51 +++
.../cpp/common/include/ignite/future.h | 60 +++-
.../cpp/common/include/ignite/ignite_error.h | 3 +
.../cpp/common/project/vs/common.vcxproj | 1 +
.../common/project/vs/common.vcxproj.filters | 3 +
modules/platforms/cpp/core-test/Makefile.am | 101 +++---
.../cpp/core-test/include/ignite/test_utils.h | 24 +-
.../cpp/core-test/project/vs/core-test.vcxproj | 1 +
.../project/vs/core-test.vcxproj.filters | 10 +-
.../cpp/core-test/src/cache_invoke_test.cpp | 2 +-
.../cpp/core-test/src/cluster_test.cpp | 2 +-
.../cpp/core-test/src/compute_test.cpp | 337 +++++++++++++++++++
.../cpp/core-test/src/continuous_query_test.cpp | 2 +-
.../platforms/cpp/core-test/src/test_utils.cpp | 9 +
modules/platforms/cpp/core/Makefile.am | 82 ++---
modules/platforms/cpp/core/include/Makefile.am | 107 +++---
.../cpp/core/include/ignite/cache/cache.h | 4 +-
.../cpp/core/include/ignite/cache/query/query.h | 1 -
.../cpp/core/include/ignite/compute/compute.h | 136 ++++++++
.../core/include/ignite/compute/compute_func.h | 65 ++++
.../platforms/cpp/core/include/ignite/ignite.h | 19 +-
.../cpp/core/include/ignite/ignite_binding.h | 25 ++
.../include/ignite/ignite_binding_context.h | 2 +-
.../cpp/core/include/ignite/impl/bindings.h | 24 ++
.../ignite/impl/cluster/cluster_group_impl.h | 31 +-
.../ignite/impl/compute/cancelable_impl.h | 70 ++++
.../include/ignite/impl/compute/compute_impl.h | 118 +++++++
.../ignite/impl/compute/compute_job_holder.h | 139 ++++++++
.../ignite/impl/compute/compute_job_result.h | 161 +++++++++
.../ignite/impl/compute/compute_task_holder.h | 213 ++++++++++++
.../include/ignite/impl/ignite_binding_impl.h | 2 +
.../include/ignite/impl/ignite_environment.h | 69 ++++
.../cpp/core/include/ignite/impl/ignite_impl.h | 23 +-
.../ignite/impl/interop/interop_target.h | 11 +-
.../platforms/cpp/core/project/vs/core.vcxproj | 9 +
.../cpp/core/project/vs/core.vcxproj.filters | 33 ++
modules/platforms/cpp/core/src/ignite.cpp | 5 +
.../src/impl/cluster/cluster_group_impl.cpp | 23 +-
.../core/src/impl/compute/cancelable_impl.cpp | 59 ++++
.../cpp/core/src/impl/compute/compute_impl.cpp | 35 ++
.../cpp/core/src/impl/ignite_environment.cpp | 260 +++++++++++++-
.../platforms/cpp/core/src/impl/ignite_impl.cpp | 15 +-
.../core/src/impl/interop/interop_target.cpp | 20 ++
.../src/impl/transactions/transactions_impl.cpp | 10 -
.../platforms/cpp/jni/include/ignite/jni/java.h | 1 +
modules/platforms/cpp/jni/src/java.cpp | 10 +
58 files changed, 2493 insertions(+), 291 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/binary/Makefile.am
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/binary/Makefile.am b/modules/platforms/cpp/binary/Makefile.am
index d3c2072..499c8a9 100644
--- a/modules/platforms/cpp/binary/Makefile.am
+++ b/modules/platforms/cpp/binary/Makefile.am
@@ -20,51 +20,52 @@ ACLOCAL_AMFLAGS =-I m4
lib_LTLIBRARIES = libignite-binary.la
SUBDIRS = \
- include
+ include
AM_CPPFLAGS = \
- -I$(srcdir)/include \
- -I@top_srcdir@/common/include \
- -I@top_srcdir@/common/os/linux/include \
- -DIGNITE_IMPL \
- -D__STDC_LIMIT_MACROS \
- -D__STDC_CONSTANT_MACROS
+ -I$(srcdir)/include \
+ -I@top_srcdir@/common/include \
+ -I@top_srcdir@/common/os/linux/include \
+ -DIGNITE_IMPL \
+ -D__STDC_LIMIT_MACROS \
+ -D__STDC_CONSTANT_MACROS
AM_CXXFLAGS = \
- -Wall \
- -std=c++03
+ -Wall \
+ -std=c++03
libignite_binary_la_LIBADD = \
- @top_srcdir@/common/libignite-common.la
+ @top_srcdir@/common/libignite-common.la
libignite_binary_la_LDFLAGS = \
- -no-undefined \
- -version-info 0:0:0 \
- -release $(PACKAGE_VERSION)
+ -no-undefined \
+ -version-info 0:0:0 \
+ -release $(PACKAGE_VERSION)
libignite_binary_la_DEPENDENCIES = \
- @top_srcdir@/common/libignite-common.la
+ @top_srcdir@/common/libignite-common.la
libignite_binary_la_SOURCES = \
- src/binary/binary_containers.cpp \
- src/binary/binary_raw_writer.cpp \
- src/binary/binary_writer.cpp \
- src/binary/binary_reader.cpp \
- src/binary/binary_type.cpp \
- src/binary/binary_raw_reader.cpp \
- src/impl/binary/binary_type_manager.cpp \
- src/impl/binary/binary_utils.cpp \
- src/impl/binary/binary_reader_impl.cpp \
- src/impl/binary/binary_type_handler.cpp \
- src/impl/binary/binary_writer_impl.cpp \
- src/impl/binary/binary_schema.cpp \
- src/impl/binary/binary_type_snapshot.cpp \
- src/impl/binary/binary_object_header.cpp \
- src/impl/binary/binary_object_impl.cpp \
- src/impl/binary/binary_field_meta.cpp \
- src/impl/interop/interop_memory.cpp \
- src/impl/interop/interop_output_stream.cpp \
- src/impl/interop/interop_input_stream.cpp
+ src/binary/binary_containers.cpp \
+ src/binary/binary_raw_writer.cpp \
+ src/binary/binary_writer.cpp \
+ src/binary/binary_reader.cpp \
+ src/binary/binary_type.cpp \
+ src/binary/binary_raw_reader.cpp \
+ src/impl/binary/binary_type_manager.cpp \
+ src/impl/binary/binary_type_impl.cpp \
+ src/impl/binary/binary_utils.cpp \
+ src/impl/binary/binary_reader_impl.cpp \
+ src/impl/binary/binary_type_handler.cpp \
+ src/impl/binary/binary_writer_impl.cpp \
+ src/impl/binary/binary_schema.cpp \
+ src/impl/binary/binary_type_snapshot.cpp \
+ src/impl/binary/binary_object_header.cpp \
+ src/impl/binary/binary_object_impl.cpp \
+ src/impl/binary/binary_field_meta.cpp \
+ src/impl/interop/interop_memory.cpp \
+ src/impl/interop/interop_output_stream.cpp \
+ src/impl/interop/interop_input_stream.cpp
clean-local:
$(RM) *.gcno *.gcda
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/binary/include/Makefile.am
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/binary/include/Makefile.am b/modules/platforms/cpp/binary/include/Makefile.am
index a73d5de..85a5516 100644
--- a/modules/platforms/cpp/binary/include/Makefile.am
+++ b/modules/platforms/cpp/binary/include/Makefile.am
@@ -18,33 +18,34 @@
ACLOCAL_AMFLAGS =-I m4
nobase_include_HEADERS = \
- ignite/binary/binary_raw_reader.h \
- ignite/binary/binary_reader.h \
- ignite/binary/binary_writer.h \
- ignite/binary/binary_raw_writer.h \
- ignite/binary/binary_containers.h \
- ignite/binary/binary.h \
- ignite/binary/binary_consts.h \
- ignite/binary/binary_type.h \
- ignite/binary/binary_object.h \
- ignite/impl/binary/binary_type_handler.h \
- ignite/impl/binary/binary_id_resolver.h \
- ignite/impl/binary/binary_type_manager.h \
- ignite/impl/binary/binary_type_updater.h \
- ignite/impl/binary/binary_common.h \
- ignite/impl/binary/binary_writer_impl.h \
- ignite/impl/binary/binary_field_meta.h \
- ignite/impl/binary/binary_type_snapshot.h \
- ignite/impl/binary/binary_reader_impl.h \
- ignite/impl/binary/binary_schema.h \
- ignite/impl/binary/binary_utils.h \
- ignite/impl/binary/binary_object_header.h \
- ignite/impl/binary/binary_object_impl.h \
- ignite/impl/interop/interop_memory.h \
- ignite/impl/interop/interop.h \
- ignite/impl/interop/interop_stream_position_guard.h \
- ignite/impl/interop/interop_output_stream.h \
- ignite/impl/interop/interop_input_stream.h
+ ignite/binary/binary_raw_reader.h \
+ ignite/binary/binary_reader.h \
+ ignite/binary/binary_writer.h \
+ ignite/binary/binary_raw_writer.h \
+ ignite/binary/binary_containers.h \
+ ignite/binary/binary.h \
+ ignite/binary/binary_consts.h \
+ ignite/binary/binary_type.h \
+ ignite/binary/binary_object.h \
+ ignite/impl/binary/binary_type_handler.h \
+ ignite/impl/binary/binary_id_resolver.h \
+ ignite/impl/binary/binary_type_impl.h \
+ ignite/impl/binary/binary_type_manager.h \
+ ignite/impl/binary/binary_type_updater.h \
+ ignite/impl/binary/binary_common.h \
+ ignite/impl/binary/binary_writer_impl.h \
+ ignite/impl/binary/binary_field_meta.h \
+ ignite/impl/binary/binary_type_snapshot.h \
+ ignite/impl/binary/binary_reader_impl.h \
+ ignite/impl/binary/binary_schema.h \
+ ignite/impl/binary/binary_utils.h \
+ ignite/impl/binary/binary_object_header.h \
+ ignite/impl/binary/binary_object_impl.h \
+ ignite/impl/interop/interop_memory.h \
+ ignite/impl/interop/interop.h \
+ ignite/impl/interop/interop_stream_position_guard.h \
+ ignite/impl/interop/interop_output_stream.h \
+ ignite/impl/interop/interop_input_stream.h
uninstall-hook:
if [ -d ${includedir}/ignite ]; then find ${includedir}/ignite -type d -empty -delete; fi
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/binary/include/ignite/binary/binary_type.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/binary/include/ignite/binary/binary_type.h b/modules/platforms/cpp/binary/include/ignite/binary/binary_type.h
index 8fb9dc2..749404a 100644
--- a/modules/platforms/cpp/binary/include/ignite/binary/binary_type.h
+++ b/modules/platforms/cpp/binary/include/ignite/binary/binary_type.h
@@ -28,7 +28,7 @@
#include <ignite/common/common.h>
-#include <ignite/ignite_error.h>
+#include <ignite/impl/binary/binary_type_impl.h>
/**
* @def IGNITE_BINARY_TYPE_START(T)
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/binary/include/ignite/impl/binary/binary_type_impl.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/binary/include/ignite/impl/binary/binary_type_impl.h b/modules/platforms/cpp/binary/include/ignite/impl/binary/binary_type_impl.h
new file mode 100644
index 0000000..2548a83
--- /dev/null
+++ b/modules/platforms/cpp/binary/include/ignite/impl/binary/binary_type_impl.h
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _IGNITE_IMPL_BINARY_BINARY_TYPE_IMPL
+#define _IGNITE_IMPL_BINARY_BINARY_TYPE_IMPL
+
+#include <stdint.h>
+
+#include <ignite/ignite_error.h>
+
+namespace ignite
+{
+ namespace binary
+ {
+ class BinaryReader;
+ class BinaryWriter;
+
+ template<typename T>
+ struct BinaryType;
+
+ template<>
+ struct BinaryType<IgniteError>
+ {
+ static int32_t GetTypeId();
+
+ static void GetTypeName(std::string& dst)
+ {
+ dst = "IgniteError";
+ }
+
+ static int32_t GetFieldId(const char* name);
+
+ static bool IsNull(const IgniteError& obj)
+ {
+ return false;
+ }
+
+ static void GetNull(IgniteError& dst);
+
+ static void Write(BinaryWriter& writer, const IgniteError& obj);
+
+ static void Read(BinaryReader& reader, IgniteError& dst);
+ };
+ }
+}
+
+#endif //_IGNITE_IMPL_BINARY_BINARY_TYPE_IMPL
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/binary/include/ignite/impl/binary/binary_writer_impl.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/binary/include/ignite/impl/binary/binary_writer_impl.h b/modules/platforms/cpp/binary/include/ignite/impl/binary/binary_writer_impl.h
index d91e2f7..32801ec 100644
--- a/modules/platforms/cpp/binary/include/ignite/impl/binary/binary_writer_impl.h
+++ b/modules/platforms/cpp/binary/include/ignite/impl/binary/binary_writer_impl.h
@@ -59,7 +59,7 @@ namespace ignite
* @param metaMgr Type manager.
* @param metaHnd Type handler.
*/
- BinaryWriterImpl(ignite::impl::interop::InteropOutputStream* stream, BinaryIdResolver* idRslvr,
+ BinaryWriterImpl(interop::InteropOutputStream* stream, BinaryIdResolver* idRslvr,
BinaryTypeManager* metaMgr, BinaryTypeHandler* metaHnd, int32_t start);
/**
@@ -69,7 +69,7 @@ namespace ignite
* @param stream Interop stream.
* @param metaMgr Type manager.
*/
- BinaryWriterImpl(ignite::impl::interop::InteropOutputStream* stream, BinaryTypeManager* metaMgr);
+ BinaryWriterImpl(interop::InteropOutputStream* stream, BinaryTypeManager* metaMgr);
/**
* Write 8-byte signed integer. Maps to "byte" type in Java.
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/binary/project/vs/binary.vcxproj
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/binary/project/vs/binary.vcxproj b/modules/platforms/cpp/binary/project/vs/binary.vcxproj
index 21f1248..5b76f06 100644
--- a/modules/platforms/cpp/binary/project/vs/binary.vcxproj
+++ b/modules/platforms/cpp/binary/project/vs/binary.vcxproj
@@ -194,6 +194,7 @@
<ClInclude Include="..\..\include\ignite\impl\binary\binary_reader_impl.h" />
<ClInclude Include="..\..\include\ignite\impl\binary\binary_schema.h" />
<ClInclude Include="..\..\include\ignite\impl\binary\binary_type_handler.h" />
+ <ClInclude Include="..\..\include\ignite\impl\binary\binary_type_impl.h" />
<ClInclude Include="..\..\include\ignite\impl\binary\binary_type_manager.h" />
<ClInclude Include="..\..\include\ignite\impl\binary\binary_type_snapshot.h" />
<ClInclude Include="..\..\include\ignite\impl\binary\binary_type_updater.h" />
@@ -218,6 +219,7 @@
<ClCompile Include="..\..\src\impl\binary\binary_reader_impl.cpp" />
<ClCompile Include="..\..\src\impl\binary\binary_schema.cpp" />
<ClCompile Include="..\..\src\impl\binary\binary_type_handler.cpp" />
+ <ClCompile Include="..\..\src\impl\binary\binary_type_impl.cpp" />
<ClCompile Include="..\..\src\impl\binary\binary_type_manager.cpp" />
<ClCompile Include="..\..\src\impl\binary\binary_type_snapshot.cpp" />
<ClCompile Include="..\..\src\impl\binary\binary_utils.cpp" />
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/binary/project/vs/binary.vcxproj.filters
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/binary/project/vs/binary.vcxproj.filters b/modules/platforms/cpp/binary/project/vs/binary.vcxproj.filters
index 27e4ad8..573b5fa 100644
--- a/modules/platforms/cpp/binary/project/vs/binary.vcxproj.filters
+++ b/modules/platforms/cpp/binary/project/vs/binary.vcxproj.filters
@@ -100,6 +100,9 @@
<ClInclude Include="..\..\include\ignite\impl\binary\binary_field_meta.h">
<Filter>Code\impl\binary</Filter>
</ClInclude>
+ <ClInclude Include="..\..\include\ignite\impl\binary\binary_type_impl.h">
+ <Filter>Code\impl\binary</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\src\binary\binary_containers.cpp">
@@ -159,5 +162,8 @@
<ClCompile Include="..\..\src\impl\binary\binary_field_meta.cpp">
<Filter>Code\impl\binary</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\impl\binary\binary_type_impl.cpp">
+ <Filter>Code\impl\binary</Filter>
+ </ClCompile>
</ItemGroup>
</Project>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/binary/src/impl/binary/binary_type_impl.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/binary/src/impl/binary/binary_type_impl.cpp b/modules/platforms/cpp/binary/src/impl/binary/binary_type_impl.cpp
new file mode 100644
index 0000000..59a4dda
--- /dev/null
+++ b/modules/platforms/cpp/binary/src/impl/binary/binary_type_impl.cpp
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <cstring>
+
+#include <ignite/binary/binary_reader.h>
+#include <ignite/binary/binary_writer.h>
+#include <ignite/impl/binary/binary_type_impl.h>
+
+namespace ignite
+{
+ namespace binary
+ {
+ int32_t BinaryType<IgniteError>::GetTypeId()
+ {
+ return GetBinaryStringHashCode("IgniteError");
+ }
+
+ int32_t BinaryType<IgniteError>::GetFieldId(const char* name)
+ {
+ return GetBinaryStringHashCode(name);
+ }
+
+ void BinaryType<IgniteError>::GetNull(IgniteError& dst)
+ {
+ dst = IgniteError(0, 0);
+ }
+
+ void BinaryType<IgniteError>::Write(BinaryWriter& writer, const IgniteError& obj)
+ {
+ BinaryRawWriter raw = writer.RawWriter();
+
+ raw.WriteInt32(obj.GetCode());
+ raw.WriteString(obj.GetText(), static_cast<int32_t>(strlen(obj.GetText())));
+ }
+
+ void BinaryType<IgniteError>::Read(BinaryReader& reader, IgniteError& dst)
+ {
+ BinaryRawReader raw = reader.RawReader();
+
+ int32_t code = raw.ReadInt32();
+ std::string msg = raw.ReadObject<std::string>();
+
+ dst = IgniteError(code, msg.c_str());
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/common/Makefile.am
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/common/Makefile.am b/modules/platforms/cpp/common/Makefile.am
index 8515d5b..374f417 100644
--- a/modules/platforms/cpp/common/Makefile.am
+++ b/modules/platforms/cpp/common/Makefile.am
@@ -20,41 +20,41 @@ ACLOCAL_AMFLAGS =-I m4
lib_LTLIBRARIES = libignite-common.la
SUBDIRS = \
- include \
- os/linux/include
+ include \
+ os/linux/include
AM_CPPFLAGS = \
- -I$(srcdir)/include \
- -I$(srcdir)/os/linux/include \
- -DIGNITE_IMPL \
- -D__STDC_LIMIT_MACROS \
- -D__STDC_CONSTANT_MACROS
+ -I$(srcdir)/include \
+ -I$(srcdir)/os/linux/include \
+ -DIGNITE_IMPL \
+ -D__STDC_LIMIT_MACROS \
+ -D__STDC_CONSTANT_MACROS
AM_CXXFLAGS = \
- -Wall \
- -std=c++03
+ -Wall \
+ -std=c++03
libignite_common_la_LDFLAGS = \
- -no-undefined \
- -L/usr/local/lib \
- -ldl \
- -version-info 0:0:0 \
- -release $(PACKAGE_VERSION)
+ -no-undefined \
+ -L/usr/local/lib \
+ -ldl \
+ -version-info 0:0:0 \
+ -release $(PACKAGE_VERSION)
libignite_common_la_SOURCES = \
- os/linux/src/common/concurrent_os.cpp \
- os/linux/src/common/platform_utils.cpp \
- os/linux/src/common/dynamic_load_os.cpp \
- src/common/big_integer.cpp \
- src/common/concurrent.cpp \
- src/common/decimal.cpp \
- src/common/bits.cpp \
- src/common/utils.cpp \
- src/date.cpp \
- src/ignite_error.cpp \
- src/guid.cpp \
- src/timestamp.cpp \
- src/time.cpp
+ os/linux/src/common/concurrent_os.cpp \
+ os/linux/src/common/platform_utils.cpp \
+ os/linux/src/common/dynamic_load_os.cpp \
+ src/common/big_integer.cpp \
+ src/common/concurrent.cpp \
+ src/common/decimal.cpp \
+ src/common/bits.cpp \
+ src/common/utils.cpp \
+ src/date.cpp \
+ src/ignite_error.cpp \
+ src/guid.cpp \
+ src/timestamp.cpp \
+ src/time.cpp
clean-local:
$(RM) *.gcno *.gcda
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/common/include/Makefile.am
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/common/include/Makefile.am b/modules/platforms/cpp/common/include/Makefile.am
index 64f0c46..f115c94 100644
--- a/modules/platforms/cpp/common/include/Makefile.am
+++ b/modules/platforms/cpp/common/include/Makefile.am
@@ -20,6 +20,7 @@ ACLOCAL_AMFLAGS =-I m4
nobase_include_HEADERS = \
ignite/common/big_integer.h \
ignite/common/bits.h \
+ ignite/common/cancelable.h \
ignite/common/concurrent.h \
ignite/common/decimal.h \
ignite/common/default_allocator.h \
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/common/include/ignite/common/cancelable.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/common/include/ignite/common/cancelable.h b/modules/platforms/cpp/common/include/ignite/common/cancelable.h
new file mode 100644
index 0000000..ab0c126
--- /dev/null
+++ b/modules/platforms/cpp/common/include/ignite/common/cancelable.h
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @file
+ * Declares ignite::common::Cancelable class.
+ */
+
+#ifndef _IGNITE_COMMON_CANCELABLE
+#define _IGNITE_COMMON_CANCELABLE
+
+#include <ignite/common/common.h>
+
+namespace ignite
+{
+ namespace common
+ {
+ /**
+ * Cancelable.
+ */
+ class IGNITE_IMPORT_EXPORT Cancelable
+ {
+ public:
+ /**
+ * Default constructor.
+ */
+ Cancelable()
+ {
+ // No-op.
+ }
+
+ /**
+ * Destructor.
+ */
+ virtual ~Cancelable()
+ {
+ // No-op.
+ }
+
+ /**
+ * Cancels the operation.
+ */
+ virtual void Cancel() = 0;
+
+ private:
+ IGNITE_NO_COPY_ASSIGNMENT(Cancelable);
+ };
+ }
+}
+
+#endif //_IGNITE_COMMON_CANCELABLE
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/common/include/ignite/common/promise.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/common/include/ignite/common/promise.h b/modules/platforms/cpp/common/include/ignite/common/promise.h
index 548b76b..2e6152f 100644
--- a/modules/platforms/cpp/common/include/ignite/common/promise.h
+++ b/modules/platforms/cpp/common/include/ignite/common/promise.h
@@ -111,9 +111,18 @@ namespace ignite
state.Get()->SetError(err);
}
+ /**
+ * Set cancel target.
+ */
+ void SetCancelTarget(std::auto_ptr<Cancelable>& target)
+ {
+ state.Get()->SetCancelTarget(target);
+ }
+
private:
IGNITE_NO_COPY_ASSIGNMENT(Promise);
+ /** Shared state. */
concurrent::SharedPointer< SharedState<ValueType> > state;
};
@@ -190,9 +199,18 @@ namespace ignite
state.Get()->SetError(err);
}
+ /**
+ * Set cancel target.
+ */
+ void SetCancelTarget(std::auto_ptr<Cancelable>& target)
+ {
+ state.Get()->SetCancelTarget(target);
+ }
+
private:
IGNITE_NO_COPY_ASSIGNMENT(Promise);
+ /** Shared state. */
concurrent::SharedPointer< SharedState<ValueType> > state;
};
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/common/include/ignite/common/shared_state.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/common/include/ignite/common/shared_state.h b/modules/platforms/cpp/common/include/ignite/common/shared_state.h
index 8886532..d223753 100644
--- a/modules/platforms/cpp/common/include/ignite/common/shared_state.h
+++ b/modules/platforms/cpp/common/include/ignite/common/shared_state.h
@@ -23,8 +23,11 @@
#ifndef _IGNITE_SHARED_STATE
#define _IGNITE_SHARED_STATE
+#include <memory>
+
#include <ignite/common/common.h>
#include <ignite/common/concurrent.h>
+#include <ignite/common/cancelable.h>
#include <ignite/ignite_error.h>
namespace ignite
@@ -162,9 +165,33 @@ namespace ignite
throw error;
}
+ /**
+ * Set cancel target.
+ */
+ void SetCancelTarget(std::auto_ptr<Cancelable>& target)
+ {
+ concurrent::CsLockGuard guard(mutex);
+
+ cancelTarget = target;
+ }
+
+ /**
+ * Cancel related operation.
+ */
+ void Cancel()
+ {
+ concurrent::CsLockGuard guard(mutex);
+
+ if (cancelTarget.get())
+ cancelTarget->Cancel();
+ }
+
private:
IGNITE_NO_COPY_ASSIGNMENT(SharedState);
+ /** Cancel target. */
+ std::auto_ptr<Cancelable> cancelTarget;
+
/** Value. */
std::auto_ptr<ValueType> value;
@@ -310,9 +337,33 @@ namespace ignite
throw error;
}
+ /**
+ * Set cancel target.
+ */
+ void SetCancelTarget(std::auto_ptr<Cancelable>& target)
+ {
+ concurrent::CsLockGuard guard(mutex);
+
+ cancelTarget = target;
+ }
+
+ /**
+ * Cancel related operation.
+ */
+ void Cancel()
+ {
+ concurrent::CsLockGuard guard(mutex);
+
+ if (cancelTarget.get())
+ cancelTarget->Cancel();
+ }
+
private:
IGNITE_NO_COPY_ASSIGNMENT(SharedState);
+ /** Cancel target. */
+ std::auto_ptr<Cancelable> cancelTarget;
+
/** Marker. */
bool done;
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/common/include/ignite/future.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/common/include/ignite/future.h b/modules/platforms/cpp/common/include/ignite/future.h
index 5c42e55..f709797 100644
--- a/modules/platforms/cpp/common/include/ignite/future.h
+++ b/modules/platforms/cpp/common/include/ignite/future.h
@@ -85,7 +85,7 @@ namespace ignite
assert(state0 != 0);
- state.Get()->Wait();
+ state0->Wait();
}
/**
@@ -101,7 +101,7 @@ namespace ignite
assert(state0 != 0);
- return state.Get()->WaitFor(msTimeout);
+ return state0->WaitFor(msTimeout);
}
/**
@@ -117,7 +117,31 @@ namespace ignite
assert(state0 != 0);
- return state.Get()->GetValue();
+ return state0->GetValue();
+ }
+
+ /**
+ * Cancel related operation.
+ */
+ void Cancel()
+ {
+ common::SharedState<ValueType>* state0 = state.Get();
+
+ assert(state0 != 0);
+
+ state0->Cancel();
+ }
+
+ /**
+ * Check if the future ready.
+ */
+ bool IsReady()
+ {
+ common::SharedState<ValueType>* state0 = state.Get();
+
+ assert(state0 != 0);
+
+ return state0->IsSet();
}
private:
@@ -182,7 +206,7 @@ namespace ignite
assert(state0 != 0);
- state.Get()->Wait();
+ state0->Wait();
}
/**
@@ -198,7 +222,7 @@ namespace ignite
assert(state0 != 0);
- return state.Get()->WaitFor(msTimeout);
+ return state0->WaitFor(msTimeout);
}
/**
@@ -213,7 +237,31 @@ namespace ignite
assert(state0 != 0);
- state.Get()->GetValue();
+ state0->GetValue();
+ }
+
+ /**
+ * Cancel related operation.
+ */
+ void Cancel()
+ {
+ common::SharedState<ValueType>* state0 = state.Get();
+
+ assert(state0 != 0);
+
+ state0->Cancel();
+ }
+
+ /**
+ * Check if the future ready.
+ */
+ bool IsReady()
+ {
+ common::SharedState<ValueType>* state0 = state.Get();
+
+ assert(state0 != 0);
+
+ return state0->IsSet();
}
private:
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/common/include/ignite/ignite_error.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/common/include/ignite/ignite_error.h b/modules/platforms/cpp/common/include/ignite/ignite_error.h
index 7818dd2..59bb0c4 100644
--- a/modules/platforms/cpp/common/include/ignite/ignite_error.h
+++ b/modules/platforms/cpp/common/include/ignite/ignite_error.h
@@ -124,6 +124,9 @@ namespace ignite
/** Binary error. */
static const int IGNITE_ERR_BINARY = 1002;
+ /** Standard library exception. */
+ static const int IGNITE_ERR_STD = 1003;
+
/** Generic %Ignite error. */
static const int IGNITE_ERR_GENERIC = 2000;
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/common/project/vs/common.vcxproj
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/common/project/vs/common.vcxproj b/modules/platforms/cpp/common/project/vs/common.vcxproj
index 9f32461..07c3f50 100644
--- a/modules/platforms/cpp/common/project/vs/common.vcxproj
+++ b/modules/platforms/cpp/common/project/vs/common.vcxproj
@@ -166,6 +166,7 @@
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="..\..\include\ignite\common\big_integer.h" />
+ <ClInclude Include="..\..\include\ignite\common\cancelable.h" />
<ClInclude Include="..\..\include\ignite\common\concurrent.h" />
<ClInclude Include="..\..\include\ignite\common\decimal.h" />
<ClInclude Include="..\..\include\ignite\common\default_allocator.h" />
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/common/project/vs/common.vcxproj.filters
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/common/project/vs/common.vcxproj.filters b/modules/platforms/cpp/common/project/vs/common.vcxproj.filters
index 4daf3aa..020d32b 100644
--- a/modules/platforms/cpp/common/project/vs/common.vcxproj.filters
+++ b/modules/platforms/cpp/common/project/vs/common.vcxproj.filters
@@ -76,6 +76,9 @@
<ClInclude Include="..\..\include\ignite\common\shared_state.h">
<Filter>Code\common</Filter>
</ClInclude>
+ <ClInclude Include="..\..\include\ignite\common\cancelable.h">
+ <Filter>Code\common</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\src\date.cpp">
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/core-test/Makefile.am
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core-test/Makefile.am b/modules/platforms/cpp/core-test/Makefile.am
index 11f4d1a..f87effd 100644
--- a/modules/platforms/cpp/core-test/Makefile.am
+++ b/modules/platforms/cpp/core-test/Makefile.am
@@ -20,67 +20,68 @@ ACLOCAL_AMFLAGS =-I m4
noinst_PROGRAMS = ignite-tests
SUBDIRS = \
- include
+ include
AM_CPPFLAGS = \
- -I$(srcdir)/include \
- -I@top_srcdir@/core/include \
- -I@top_srcdir@/core/os/linux/include \
- -I@top_srcdir@/common/include \
- -I@top_srcdir@/common/os/linux/include \
- -I@top_srcdir@/binary/include \
- -I@top_srcdir@/jni/include \
- -I@top_srcdir@/jni/os/linux/include \
- -I$(JAVA_HOME)/include \
- -I$(JAVA_HOME)/include/linux \
- -DIGNITE_IMPL \
- -D__STDC_LIMIT_MACROS \
- -D__STDC_CONSTANT_MACROS
+ -I$(srcdir)/include \
+ -I@top_srcdir@/core/include \
+ -I@top_srcdir@/core/os/linux/include \
+ -I@top_srcdir@/common/include \
+ -I@top_srcdir@/common/os/linux/include \
+ -I@top_srcdir@/binary/include \
+ -I@top_srcdir@/jni/include \
+ -I@top_srcdir@/jni/os/linux/include \
+ -I$(JAVA_HOME)/include \
+ -I$(JAVA_HOME)/include/linux \
+ -DIGNITE_IMPL \
+ -D__STDC_LIMIT_MACROS \
+ -D__STDC_CONSTANT_MACROS
AM_CXXFLAGS = \
- -Wall \
- -std=c++03
+ -Wall \
+ -std=c++03
ignite_tests_LDADD = \
- @top_srcdir@/core/libignite.la \
- -lpthread \
- -lboost_thread \
- -lboost_system \
- -lboost_chrono
+ @top_srcdir@/core/libignite.la \
+ -lpthread \
+ -lboost_thread \
+ -lboost_system \
+ -lboost_chrono
ignite_tests_LDFLAGS = \
- -static-libtool-libs \
- -rdynamic
+ -static-libtool-libs \
+ -rdynamic
ignite_tests_SOURCES = \
- src/reference_test.cpp \
- src/bits_test.cpp \
+ src/reference_test.cpp \
+ src/bits_test.cpp \
src/binary_identity_resolver_test.cpp \
- src/cache_test.cpp \
- src/cache_query_test.cpp \
- src/cache_store_test.cpp \
- src/continuous_query_test.cpp \
- src/concurrent_test.cpp \
- src/ignition_test.cpp \
- src/interop_memory_test.cpp \
- src/interop_test.cpp \
- src/cluster_test.cpp \
- src/cache_invoke_test.cpp \
- src/handle_registry_test.cpp \
- src/ignite_error_test.cpp \
- src/binary_test_defs.cpp \
- src/binary_object_test.cpp \
- src/binary_reader_writer_raw_test.cpp \
- src/binary_reader_writer_test.cpp \
- src/binary_session_test.cpp \
- src/date_time_test.cpp \
- src/decimal_test.cpp \
- src/dynamic_size_array_test.cpp \
- src/fixed_size_array_test.cpp \
- src/future_test.cpp \
- src/transactions_test.cpp \
- src/teamcity_messages.cpp \
- src/teamcity_boost.cpp \
+ src/cache_test.cpp \
+ src/cache_query_test.cpp \
+ src/cache_store_test.cpp \
+ src/continuous_query_test.cpp \
+ src/concurrent_test.cpp \
+ src/compute_test.cpp \
+ src/ignition_test.cpp \
+ src/interop_memory_test.cpp \
+ src/interop_test.cpp \
+ src/cluster_test.cpp \
+ src/cache_invoke_test.cpp \
+ src/handle_registry_test.cpp \
+ src/ignite_error_test.cpp \
+ src/binary_test_defs.cpp \
+ src/binary_object_test.cpp \
+ src/binary_reader_writer_raw_test.cpp \
+ src/binary_reader_writer_test.cpp \
+ src/binary_session_test.cpp \
+ src/date_time_test.cpp \
+ src/decimal_test.cpp \
+ src/dynamic_size_array_test.cpp \
+ src/fixed_size_array_test.cpp \
+ src/future_test.cpp \
+ src/transactions_test.cpp \
+ src/teamcity_messages.cpp \
+ src/teamcity_boost.cpp \
src/test_utils.cpp
run-check: check
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/core-test/include/ignite/test_utils.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core-test/include/ignite/test_utils.h b/modules/platforms/cpp/core-test/include/ignite/test_utils.h
index 67fda95..aa91458 100644
--- a/modules/platforms/cpp/core-test/include/ignite/test_utils.h
+++ b/modules/platforms/cpp/core-test/include/ignite/test_utils.h
@@ -22,6 +22,11 @@
namespace ignite_test
{
+ enum
+ {
+ TEST_ERROR = 424242
+ };
+
/**
* Initialize configuration for a node.
*
@@ -65,9 +70,24 @@ namespace ignite_test
* @param err Error.
* @return True if the error is generic.
*/
- inline bool IsGenericError(const ignite::IgniteError& err)
+ bool IsGenericError(const ignite::IgniteError& err);
+
+ /**
+ * Check if the error is generic.
+ *
+ * @param err Error.
+ * @return True if the error is generic.
+ */
+ bool IsTestError(const ignite::IgniteError& err);
+
+ /**
+ * Make test error.
+ *
+ * @return Test error.
+ */
+ inline ignite::IgniteError MakeTestError()
{
- return err.GetCode() == ignite::IgniteError::IGNITE_ERR_GENERIC;
+ return ignite::IgniteError(TEST_ERROR, "Test error");
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/core-test/project/vs/core-test.vcxproj
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core-test/project/vs/core-test.vcxproj b/modules/platforms/cpp/core-test/project/vs/core-test.vcxproj
index 51ae5d41..f2f6a1b 100644
--- a/modules/platforms/cpp/core-test/project/vs/core-test.vcxproj
+++ b/modules/platforms/cpp/core-test/project/vs/core-test.vcxproj
@@ -64,6 +64,7 @@
<ClCompile Include="..\..\src\cache_test.cpp" />
<ClCompile Include="..\..\src\cluster_test.cpp" />
<ClCompile Include="..\..\src\cache_invoke_test.cpp" />
+ <ClCompile Include="..\..\src\compute_test.cpp" />
<ClCompile Include="..\..\src\concurrent_test.cpp" />
<ClCompile Include="..\..\src\date_time_test.cpp" />
<ClCompile Include="..\..\src\decimal_test.cpp" />
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/core-test/project/vs/core-test.vcxproj.filters
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core-test/project/vs/core-test.vcxproj.filters b/modules/platforms/cpp/core-test/project/vs/core-test.vcxproj.filters
index ebccc7f..d58ef97 100644
--- a/modules/platforms/cpp/core-test/project/vs/core-test.vcxproj.filters
+++ b/modules/platforms/cpp/core-test/project/vs/core-test.vcxproj.filters
@@ -88,6 +88,9 @@
<ClCompile Include="..\..\src\future_test.cpp">
<Filter>Code</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\compute_test.cpp">
+ <Filter>Code</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\include\teamcity_messages.h">
@@ -166,9 +169,6 @@
<None Include="..\..\config\cache-identity-default.xml">
<Filter>Configs</Filter>
</None>
- <None Include="..\..\config\cache-query-continuous.xml">
- <Filter>Configs</Filter>
- </None>
<None Include="..\..\config\cache-store-default.xml">
<Filter>Configs</Filter>
</None>
@@ -178,9 +178,5 @@
<None Include="..\..\config\cache-store-32.xml">
<Filter>Configs</Filter>
</None>
- <None Include="..\..\config\cache-query-continuous.xml">
- <Filter>Configs</Filter>
- </None>
- <None Include="..\..\config\cache-query-continuous.xml" />
</ItemGroup>
</Project>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/core-test/src/cache_invoke_test.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core-test/src/cache_invoke_test.cpp b/modules/platforms/cpp/core-test/src/cache_invoke_test.cpp
index 0c30af8..55fca85 100644
--- a/modules/platforms/cpp/core-test/src/cache_invoke_test.cpp
+++ b/modules/platforms/cpp/core-test/src/cache_invoke_test.cpp
@@ -379,7 +379,7 @@ namespace ignite
IGNITE_EXPORTED_CALL void IgniteModuleInit(ignite::IgniteBindingContext& context)
{
- IgniteBinding binding = context.GetBingding();
+ IgniteBinding binding = context.GetBinding();
binding.RegisterCacheEntryProcessor<CacheEntryModifier>();
binding.RegisterCacheEntryProcessor<Divisor>();
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/core-test/src/cluster_test.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core-test/src/cluster_test.cpp b/modules/platforms/cpp/core-test/src/cluster_test.cpp
index 754fe7e..e9d6728 100644
--- a/modules/platforms/cpp/core-test/src/cluster_test.cpp
+++ b/modules/platforms/cpp/core-test/src/cluster_test.cpp
@@ -80,7 +80,7 @@ BOOST_AUTO_TEST_CASE(IgniteImplForServers)
IgniteError err;
- BOOST_REQUIRE(clusterGroup.Get()->ForServers(err).IsValid());
+ BOOST_REQUIRE(clusterGroup.Get()->ForServers().IsValid());
}
BOOST_AUTO_TEST_SUITE_END()
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/core-test/src/compute_test.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core-test/src/compute_test.cpp b/modules/platforms/cpp/core-test/src/compute_test.cpp
new file mode 100644
index 0000000..d3b1183
--- /dev/null
+++ b/modules/platforms/cpp/core-test/src/compute_test.cpp
@@ -0,0 +1,337 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _MSC_VER
+ #define BOOST_TEST_DYN_LINK
+#endif
+
+#include <boost/test/unit_test.hpp>
+#include <boost/chrono.hpp>
+#include <boost/thread.hpp>
+
+#include <ignite/ignition.h>
+#include <ignite/test_utils.h>
+
+#include <ignite/test_utils.h>
+
+using namespace ignite;
+using namespace ignite::compute;
+using namespace ignite::common::concurrent;
+using namespace ignite_test;
+
+using namespace boost::unit_test;
+
+/*
+ * Test setup fixture.
+ */
+struct ComputeTestSuiteFixture
+{
+ Ignite node;
+
+ Ignite MakeNode(const char* name)
+ {
+#ifdef IGNITE_TESTS_32
+ const char* config = "cache-test-32.xml";
+#else
+ const char* config = "cache-test.xml";
+#endif
+ return StartNode(config, name);
+ }
+
+ /*
+ * Constructor.
+ */
+ ComputeTestSuiteFixture() :
+ node(MakeNode("ComputeNode1"))
+ {
+ // No-op.
+ }
+
+ /*
+ * Destructor.
+ */
+ ~ComputeTestSuiteFixture()
+ {
+ Ignition::StopAll(true);
+ }
+};
+
+struct Func1 : ComputeFunc<std::string>
+{
+ Func1() :
+ a(), b(), err()
+ {
+ // No-op.
+ }
+
+ Func1(int32_t a, int32_t b) :
+ a(a), b(b), err()
+ {
+ // No-op.
+ }
+
+ Func1(IgniteError err) :
+ a(), b(), err(err)
+ {
+ // No-op.
+ }
+
+ virtual std::string Call()
+ {
+ if (err.GetCode() != IgniteError::IGNITE_SUCCESS)
+ throw err;
+
+ std::stringstream tmp;
+
+ tmp << a << '.' << b;
+
+ return tmp.str();
+ }
+
+ int32_t a;
+ int32_t b;
+ IgniteError err;
+};
+
+struct Func2 : ComputeFunc<std::string>
+{
+ Func2() :
+ a(), b(), err()
+ {
+ // No-op.
+ }
+
+ Func2(int32_t a, int32_t b) :
+ a(a), b(b), err()
+ {
+ // No-op.
+ }
+
+ Func2(IgniteError err) :
+ a(), b(), err(err)
+ {
+ // No-op.
+ }
+
+ virtual std::string Call()
+ {
+ boost::this_thread::sleep_for(boost::chrono::milliseconds(200));
+
+ if (err.GetCode() != IgniteError::IGNITE_SUCCESS)
+ throw err;
+
+ std::stringstream tmp;
+
+ tmp << a << '.' << b;
+
+ return tmp.str();
+ }
+
+ int32_t a;
+ int32_t b;
+ IgniteError err;
+};
+
+namespace ignite
+{
+ namespace binary
+ {
+ template<>
+ struct BinaryType<Func1>
+ {
+ static int32_t GetTypeId()
+ {
+ return GetBinaryStringHashCode("Func1");
+ }
+
+ static void GetTypeName(std::string& dst)
+ {
+ dst = "Func1";
+ }
+
+ static int32_t GetFieldId(const char* name)
+ {
+ return GetBinaryStringHashCode(name);
+ }
+
+ static bool IsNull(const Func1& obj)
+ {
+ return false;
+ }
+
+ static void GetNull(Func1& dst)
+ {
+ dst = Func1(0, 0);
+ }
+
+ static void Write(BinaryWriter& writer, const Func1& obj)
+ {
+ writer.WriteInt32("a", obj.a);
+ writer.WriteInt32("b", obj.b);
+ writer.WriteObject<IgniteError>("err", obj.err);
+ }
+
+ static void Read(BinaryReader& reader, Func1& dst)
+ {
+ dst.a = reader.ReadInt32("a");
+ dst.b = reader.ReadInt32("b");
+ dst.err = reader.ReadObject<IgniteError>("err");
+ }
+ };
+
+ template<>
+ struct BinaryType<Func2>
+ {
+ static int32_t GetTypeId()
+ {
+ return GetBinaryStringHashCode("Func2");
+ }
+
+ static void GetTypeName(std::string& dst)
+ {
+ dst = "Func2";
+ }
+
+ static int32_t GetFieldId(const char* name)
+ {
+ return GetBinaryStringHashCode(name);
+ }
+
+ static bool IsNull(const Func2& obj)
+ {
+ return false;
+ }
+
+ static void GetNull(Func2& dst)
+ {
+ dst = Func2(0, 0);
+ }
+
+ static void Write(BinaryWriter& writer, const Func2& obj)
+ {
+ writer.WriteInt32("a", obj.a);
+ writer.WriteInt32("b", obj.b);
+ writer.WriteObject<IgniteError>("err", obj.err);
+ }
+
+ static void Read(BinaryReader& reader, Func2& dst)
+ {
+ dst.a = reader.ReadInt32("a");
+ dst.b = reader.ReadInt32("b");
+ dst.err = reader.ReadObject<IgniteError>("err");
+ }
+ };
+ }
+}
+
+IGNITE_EXPORTED_CALL void IgniteModuleInit1(IgniteBindingContext& context)
+{
+ IgniteBinding binding = context.GetBinding();
+
+ binding.RegisterComputeFunc<Func1>();
+ binding.RegisterComputeFunc<Func2>();
+}
+
+BOOST_FIXTURE_TEST_SUITE(ComputeTestSuite, ComputeTestSuiteFixture)
+
+BOOST_AUTO_TEST_CASE(IgniteCallSyncLocal)
+{
+ Compute compute = node.GetCompute();
+
+ BOOST_CHECKPOINT("Making Call");
+ std::string res = compute.Call<std::string>(Func1(8, 5));
+
+ BOOST_CHECK_EQUAL(res, "8.5");
+}
+
+BOOST_AUTO_TEST_CASE(IgniteCallAsyncLocal)
+{
+ Compute compute = node.GetCompute();
+
+ BOOST_CHECKPOINT("Making Call");
+ Future<std::string> res = compute.CallAsync<std::string>(Func2(312, 245));
+
+ BOOST_CHECK(!res.IsReady());
+
+ BOOST_CHECKPOINT("Waiting with timeout");
+ res.WaitFor(100);
+
+ BOOST_CHECK(!res.IsReady());
+
+ BOOST_CHECK_EQUAL(res.GetValue(), "312.245");
+}
+
+BOOST_AUTO_TEST_CASE(IgniteCallSyncLocalError)
+{
+ Compute compute = node.GetCompute();
+
+ BOOST_CHECKPOINT("Making Call");
+
+ BOOST_CHECK_EXCEPTION(compute.Call<std::string>(Func1(MakeTestError())), IgniteError, IsTestError);
+}
+
+BOOST_AUTO_TEST_CASE(IgniteCallAsyncLocalError)
+{
+ Compute compute = node.GetCompute();
+
+ BOOST_CHECKPOINT("Making Call");
+ Future<std::string> res = compute.CallAsync<std::string>(Func2(MakeTestError()));
+
+ BOOST_CHECK(!res.IsReady());
+
+ BOOST_CHECKPOINT("Waiting with timeout");
+ res.WaitFor(100);
+
+ BOOST_CHECK(!res.IsReady());
+
+ BOOST_CHECK_EXCEPTION(res.GetValue(), IgniteError, IsTestError);
+}
+
+BOOST_AUTO_TEST_CASE(IgniteCallTestRemote)
+{
+ Ignite node2 = MakeNode("ComputeNode2");
+ Compute compute = node.GetCompute();
+
+ BOOST_CHECKPOINT("Making Call");
+ compute.CallAsync<std::string>(Func2(8, 5));
+
+ std::string res = compute.Call<std::string>(Func1(42, 24));
+
+ BOOST_CHECK_EQUAL(res, "42.24");
+}
+
+BOOST_AUTO_TEST_CASE(IgniteCallTestRemoteError)
+{
+ Ignite node2 = MakeNode("ComputeNode2");
+ Compute compute = node.GetCompute();
+
+ BOOST_CHECKPOINT("Making Call");
+ compute.CallAsync<std::string>(Func2(8, 5));
+
+ Future<std::string> res = compute.CallAsync<std::string>(Func2(MakeTestError()));
+
+ BOOST_CHECK(!res.IsReady());
+
+ BOOST_CHECKPOINT("Waiting with timeout");
+ res.WaitFor(100);
+
+ BOOST_CHECK(!res.IsReady());
+
+ BOOST_CHECK_EXCEPTION(res.GetValue(), IgniteError, IsTestError);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/core-test/src/continuous_query_test.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core-test/src/continuous_query_test.cpp b/modules/platforms/cpp/core-test/src/continuous_query_test.cpp
index e092728..b869eb6 100644
--- a/modules/platforms/cpp/core-test/src/continuous_query_test.cpp
+++ b/modules/platforms/cpp/core-test/src/continuous_query_test.cpp
@@ -371,7 +371,7 @@ void CheckEvents(Cache<int, TestEntry>& cache, Listener<int, TestEntry>& lsnr)
IGNITE_EXPORTED_CALL void IgniteModuleInit0(ignite::IgniteBindingContext& context)
{
- IgniteBinding binding = context.GetBingding();
+ IgniteBinding binding = context.GetBinding();
binding.RegisterCacheEntryEventFilter< RangeFilter<int, TestEntry> >();
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/core-test/src/test_utils.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core-test/src/test_utils.cpp b/modules/platforms/cpp/core-test/src/test_utils.cpp
index 7323028..c6e4454 100644
--- a/modules/platforms/cpp/core-test/src/test_utils.cpp
+++ b/modules/platforms/cpp/core-test/src/test_utils.cpp
@@ -83,4 +83,13 @@ namespace ignite_test
return Ignition::Start(cfg, name);
}
+ bool IsGenericError(const ignite::IgniteError& err)
+ {
+ return err.GetCode() == ignite::IgniteError::IGNITE_ERR_GENERIC;
+ }
+
+ bool IsTestError(const ignite::IgniteError& err)
+ {
+ return err.GetCode() == TEST_ERROR;
+ }
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/core/Makefile.am
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core/Makefile.am b/modules/platforms/cpp/core/Makefile.am
index 4de45d3..1c970e8 100644
--- a/modules/platforms/cpp/core/Makefile.am
+++ b/modules/platforms/cpp/core/Makefile.am
@@ -20,58 +20,60 @@ ACLOCAL_AMFLAGS =-I m4
lib_LTLIBRARIES = libignite.la
SUBDIRS = \
- include
+ include
AM_CPPFLAGS = \
- -I$(srcdir)/include \
- -I@top_srcdir@/common/include \
- -I@top_srcdir@/common/os/linux/include \
- -I@top_srcdir@/binary/include \
- -I@top_srcdir@/jni/include \
- -I@top_srcdir@/jni/os/linux/include \
- -I$(JAVA_HOME)/include \
- -I$(JAVA_HOME)/include/linux \
- -DIGNITE_IMPL \
- -D__STDC_LIMIT_MACROS \
- -D__STDC_CONSTANT_MACROS
+ -I$(srcdir)/include \
+ -I@top_srcdir@/common/include \
+ -I@top_srcdir@/common/os/linux/include \
+ -I@top_srcdir@/binary/include \
+ -I@top_srcdir@/jni/include \
+ -I@top_srcdir@/jni/os/linux/include \
+ -I$(JAVA_HOME)/include \
+ -I$(JAVA_HOME)/include/linux \
+ -DIGNITE_IMPL \
+ -D__STDC_LIMIT_MACROS \
+ -D__STDC_CONSTANT_MACROS
AM_CXXFLAGS = \
- -Wall \
- -std=c++03
+ -Wall \
+ -std=c++03
libignite_la_LIBADD = \
- @top_srcdir@/jni/libignite-jni.la \
- @top_srcdir@/binary/libignite-binary.la
+ @top_srcdir@/jni/libignite-jni.la \
+ @top_srcdir@/binary/libignite-binary.la
libignite_la_LDFLAGS = \
- -no-undefined \
- -ldl \
- -version-info 0:0:0 \
- -release $(PACKAGE_VERSION)
+ -no-undefined \
+ -ldl \
+ -version-info 0:0:0 \
+ -release $(PACKAGE_VERSION)
libignite_la_DEPENDENCIES = \
- @top_srcdir@/jni/libignite-jni.la \
- @top_srcdir@/binary/libignite-binary.la
+ @top_srcdir@/jni/libignite-jni.la \
+ @top_srcdir@/binary/libignite-binary.la
libignite_la_SOURCES = \
- src/ignite.cpp \
- src/ignition.cpp \
- src/impl/ignite_environment.cpp \
- src/impl/binary/binary_type_updater_impl.cpp \
- src/impl/handle_registry.cpp \
- src/impl/cache/query/continuous/continuous_query_handle_impl.cpp \
- src/impl/cache/query/query_impl.cpp \
- src/impl/cache/cache_impl.cpp \
- src/impl/cache/query/query_batch.cpp \
- src/impl/interop/interop_external_memory.cpp \
- src/impl/interop/interop_target.cpp \
- src/impl/transactions/transaction_impl.cpp \
- src/impl/transactions/transactions_impl.cpp \
- src/impl/cluster/cluster_group_impl.cpp \
- src/impl/ignite_impl.cpp \
- src/impl/ignite_binding_impl.cpp \
- src/transactions/transaction.cpp \
- src/transactions/transactions.cpp
+ src/ignite.cpp \
+ src/ignition.cpp \
+ src/impl/ignite_environment.cpp \
+ src/impl/binary/binary_type_updater_impl.cpp \
+ src/impl/handle_registry.cpp \
+ src/impl/cache/query/continuous/continuous_query_handle_impl.cpp \
+ src/impl/cache/query/query_impl.cpp \
+ src/impl/cache/cache_impl.cpp \
+ src/impl/cache/query/query_batch.cpp \
+ src/impl/interop/interop_external_memory.cpp \
+ src/impl/interop/interop_target.cpp \
+ src/impl/transactions/transaction_impl.cpp \
+ src/impl/transactions/transactions_impl.cpp \
+ src/impl/cluster/cluster_group_impl.cpp \
+ src/impl/compute/cancelable_impl.cpp \
+ src/impl/compute/compute_impl.cpp \
+ src/impl/ignite_impl.cpp \
+ src/impl/ignite_binding_impl.cpp \
+ src/transactions/transaction.cpp \
+ src/transactions/transactions.cpp
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = $(srcdir)/ignite.pc
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/core/include/Makefile.am
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core/include/Makefile.am b/modules/platforms/cpp/core/include/Makefile.am
index 0e9a7ec..50772cb 100644
--- a/modules/platforms/cpp/core/include/Makefile.am
+++ b/modules/platforms/cpp/core/include/Makefile.am
@@ -18,56 +18,63 @@
ACLOCAL_AMFLAGS =-I m4
nobase_include_HEADERS = \
- ignite/cache/cache.h \
- ignite/cache/cache_entry.h \
- ignite/cache/cache_entry_processor.h \
- ignite/cache/cache_peek_mode.h \
- ignite/cache/event/cache_entry_event.h \
- ignite/cache/event/cache_entry_event_filter.h \
- ignite/cache/event/cache_entry_event_listener.h \
- ignite/cache/mutable_cache_entry.h \
- ignite/cache/query/continuous/continuous_query.h \
- ignite/cache/query/continuous/continuous_query_handle.h \
- ignite/cache/query/query.h \
- ignite/cache/query/query_cursor.h \
- ignite/cache/query/query_fields_cursor.h \
- ignite/cache/query/query_fields_row.h \
- ignite/cache/query/query_scan.h \
- ignite/cache/query/query_sql.h \
- ignite/cache/query/query_sql_fields.h \
- ignite/cache/query/query_text.h \
- ignite/ignite.h \
- ignite/ignite_binding.h \
- ignite/ignite_binding_context.h \
- ignite/ignite_configuration.h \
- ignite/ignition.h \
- ignite/impl/binary/binary_type_updater_impl.h \
- ignite/impl/bindings.h \
- ignite/impl/cache/cache_entry_processor_holder.h \
- ignite/impl/cache/cache_impl.h \
- ignite/impl/cache/event/cache_entry_event_filter_base.h \
- ignite/impl/cache/event/cache_entry_event_filter_holder.h \
- ignite/impl/cache/query/continuous/continuous_query_handle_impl.h \
- ignite/impl/cache/query/continuous/continuous_query_impl.h \
- ignite/impl/cache/query/query_argument.h \
- ignite/impl/cache/query/query_batch.h \
- ignite/impl/cache/query/query_fields_row_impl.h \
- ignite/impl/cache/query/query_impl.h \
- ignite/impl/cluster/cluster_group_impl.h \
- ignite/impl/handle_registry.h \
- ignite/impl/ignite_binding_impl.h \
- ignite/impl/ignite_environment.h \
- ignite/impl/ignite_impl.h \
- ignite/impl/interop/interop_external_memory.h \
- ignite/impl/interop/interop_target.h \
- ignite/impl/module_manager.h \
- ignite/impl/operations.h \
- ignite/impl/transactions/transactions_impl.h \
- ignite/impl/transactions/transaction_impl.h \
- ignite/transactions/transaction.h \
- ignite/transactions/transactions.h \
- ignite/transactions/transaction_consts.h \
- ignite/transactions/transaction_metrics.h
+ ignite/cache/cache.h \
+ ignite/cache/cache_entry.h \
+ ignite/cache/cache_entry_processor.h \
+ ignite/cache/cache_peek_mode.h \
+ ignite/cache/event/cache_entry_event.h \
+ ignite/cache/event/cache_entry_event_filter.h \
+ ignite/cache/event/cache_entry_event_listener.h \
+ ignite/cache/mutable_cache_entry.h \
+ ignite/cache/query/continuous/continuous_query.h \
+ ignite/cache/query/continuous/continuous_query_handle.h \
+ ignite/cache/query/query.h \
+ ignite/cache/query/query_cursor.h \
+ ignite/cache/query/query_fields_cursor.h \
+ ignite/cache/query/query_fields_row.h \
+ ignite/cache/query/query_scan.h \
+ ignite/cache/query/query_sql.h \
+ ignite/cache/query/query_sql_fields.h \
+ ignite/cache/query/query_text.h \
+ ignite/compute/compute.h \
+ ignite/compute/compute_func.h \
+ ignite/ignite.h \
+ ignite/ignite_binding.h \
+ ignite/ignite_binding_context.h \
+ ignite/ignite_configuration.h \
+ ignite/ignition.h \
+ ignite/impl/binary/binary_type_updater_impl.h \
+ ignite/impl/bindings.h \
+ ignite/impl/cache/cache_entry_processor_holder.h \
+ ignite/impl/cache/cache_impl.h \
+ ignite/impl/cache/event/cache_entry_event_filter_base.h \
+ ignite/impl/cache/event/cache_entry_event_filter_holder.h \
+ ignite/impl/cache/query/continuous/continuous_query_handle_impl.h \
+ ignite/impl/cache/query/continuous/continuous_query_impl.h \
+ ignite/impl/cache/query/query_argument.h \
+ ignite/impl/cache/query/query_batch.h \
+ ignite/impl/cache/query/query_fields_row_impl.h \
+ ignite/impl/cache/query/query_impl.h \
+ ignite/impl/cluster/cluster_group_impl.h \
+ ignite/impl/compute/cancelable_impl.h \
+ ignite/impl/compute/compute_impl.h \
+ ignite/impl/compute/compute_job_holder.h \
+ ignite/impl/compute/compute_job_result.h \
+ ignite/impl/compute/compute_task_holder.h \
+ ignite/impl/handle_registry.h \
+ ignite/impl/ignite_binding_impl.h \
+ ignite/impl/ignite_environment.h \
+ ignite/impl/ignite_impl.h \
+ ignite/impl/interop/interop_external_memory.h \
+ ignite/impl/interop/interop_target.h \
+ ignite/impl/module_manager.h \
+ ignite/impl/operations.h \
+ ignite/impl/transactions/transactions_impl.h \
+ ignite/impl/transactions/transaction_impl.h \
+ ignite/transactions/transaction.h \
+ ignite/transactions/transactions.h \
+ ignite/transactions/transaction_consts.h \
+ ignite/transactions/transaction_metrics.h
uninstall-hook:
if [ -d ${includedir}/ignite ]; then find ${includedir}/ignite -type d -empty -delete; fi
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/core/include/ignite/cache/cache.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core/include/ignite/cache/cache.h b/modules/platforms/cpp/core/include/ignite/cache/cache.h
index e37e806..b16d7f5 100644
--- a/modules/platforms/cpp/core/include/ignite/cache/cache.h
+++ b/modules/platforms/cpp/core/include/ignite/cache/cache.h
@@ -1529,7 +1529,7 @@ namespace ignite
* @code{.cpp}
* IGNITE_EXPORTED_CALL void IgniteModuleInit(ignite::IgniteBindingContext& context)
* {
- * IgniteBinding binding = context.GetBingding();
+ * IgniteBinding binding = context.GetBinding();
*
* binding.RegisterCacheEntryProcessor<MyProcessor1>();
* binding.RegisterCacheEntryProcessor<MyProcessor2>();
@@ -1582,7 +1582,7 @@ namespace ignite
* @code{.cpp}
* IGNITE_EXPORTED_CALL void IgniteModuleInit(ignite::IgniteBindingContext& context)
* {
- * IgniteBinding binding = context.GetBingding();
+ * IgniteBinding binding = context.GetBinding();
*
* binding.RegisterCacheEntryProcessor<MyProcessor1>();
* binding.RegisterCacheEntryProcessor<MyProcessor2>();
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/core/include/ignite/cache/query/query.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core/include/ignite/cache/query/query.h b/modules/platforms/cpp/core/include/ignite/cache/query/query.h
index b2991e4..a5a5c1f 100644
--- a/modules/platforms/cpp/core/include/ignite/cache/query/query.h
+++ b/modules/platforms/cpp/core/include/ignite/cache/query/query.h
@@ -23,7 +23,6 @@
#ifndef _IGNITE_CACHE_QUERY_QUERY
#define _IGNITE_CACHE_QUERY_QUERY
-#include "ignite/cache/query/query_argument.h"
#include "ignite/cache/query/query_cursor.h"
#include "ignite/cache/query/query_scan.h"
#include "ignite/cache/query/query_sql.h"
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/core/include/ignite/compute/compute.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core/include/ignite/compute/compute.h b/modules/platforms/cpp/core/include/ignite/compute/compute.h
new file mode 100644
index 0000000..b079569
--- /dev/null
+++ b/modules/platforms/cpp/core/include/ignite/compute/compute.h
@@ -0,0 +1,136 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @file
+ * Declares ignite::compute::Compute class.
+ */
+
+#ifndef _IGNITE_COMPUTE_COMPUTE
+#define _IGNITE_COMPUTE_COMPUTE
+
+#include <ignite/common/common.h>
+
+#include <ignite/ignite_error.h>
+#include <ignite/future.h>
+#include <ignite/compute/compute_func.h>
+
+#include <ignite/impl/compute/compute_impl.h>
+
+namespace ignite
+{
+ namespace compute
+ {
+ /**
+ * Defines compute grid functionality for executing tasks and closures
+ * over nodes in the ClusterGroup. Instance of Compute is obtained from
+ * Ignite as follows:
+ * @code{.cpp}
+ * Ignite node = Ignition::Get();
+ *
+ * // Compute over all nodes in the cluster.
+ * Compute c = node.GetCompute();
+ * @endcode
+ *
+ * @par Load Balancing
+ * In all cases other than <tt>Broadcast(...)</tt>, Ignite must select
+ * a node for a computation to be executed. The node will be selected
+ * based on the underlying \c LoadBalancingSpi, which by default
+ * sequentially picks next available node from the underlying cluster
+ * group. Other load balancing policies, such as \c random or
+ * \c adaptive, can be configured as well by selecting a different
+ * load balancing SPI in Ignite configuration.
+ *
+ * @par Fault Tolerance
+ * Ignite guarantees that as long as there is at least one grid node
+ * standing, every job will be executed. Jobs will automatically
+ * failover to another node if a remote node crashed or has rejected
+ * execution due to lack of resources. By default, in case of failover,
+ * next load balanced node will be picked for job execution. Also jobs
+ * will never be re-routed to the nodes they have failed on. This
+ * behavior can be changed by configuring any of the existing or a
+ * custom FailoverSpi in grid configuration.
+ *
+ * @par Computation SPIs
+ * Note that regardless of which method is used for executing
+ * computations, all relevant SPI implementations configured for this
+ * compute instance will be used (i.e. failover, load balancing,
+ * collision resolution, checkpoints, etc.).
+ */
+ class IGNITE_IMPORT_EXPORT Compute
+ {
+ public:
+ /**
+ * Constructor.
+ *
+ * Internal method. Should not be used by user.
+ *
+ * @param impl Implementation.
+ */
+ Compute(common::concurrent::SharedPointer<impl::compute::ComputeImpl> impl) :
+ impl(impl)
+ {
+ // No-op.
+ }
+
+ /**
+ * Calls provided ComputeFunc on a node within the underlying
+ * cluster group.
+ *
+ * @tparam R Call return type. BinaryType should be specialized for
+ * the type if it is not primitive. Should not be void. For
+ * non-returning methods see Compute::Run().
+ * @tparam F Compute function type. Should implement ComputeFunc
+ * class.
+ * @param func Compute function to call.
+ * @return Computation result.
+ * @throw IgniteError in case of error.
+ */
+ template<typename R, typename F>
+ R Call(const F& func)
+ {
+ return impl.Get()->CallAsync<R, F>(func).GetValue();
+ }
+
+ /**
+ * Asyncronuously calls provided ComputeFunc on a node within
+ * the underlying cluster group.
+ *
+ * @tparam R Call return type. BinaryType should be specialized for
+ * the type if it is not primitive. Should not be void. For
+ * non-returning methods see Compute::Run().
+ * @tparam F Compute function type. Should implement ComputeFunc
+ * class.
+ * @param func Compute function to call.
+ * @return Future that can be used to access computation result once
+ * it's ready.
+ * @throw IgniteError in case of error.
+ */
+ template<typename R, typename F>
+ Future<R> CallAsync(const F& func)
+ {
+ return impl.Get()->CallAsync<R, F>(func);
+ }
+
+ private:
+ /** Implementation. */
+ common::concurrent::SharedPointer<impl::compute::ComputeImpl> impl;
+ };
+ }
+}
+
+#endif //_IGNITE_COMPUTE_COMPUTE
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/core/include/ignite/compute/compute_func.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core/include/ignite/compute/compute_func.h b/modules/platforms/cpp/core/include/ignite/compute/compute_func.h
new file mode 100644
index 0000000..93a7b4f
--- /dev/null
+++ b/modules/platforms/cpp/core/include/ignite/compute/compute_func.h
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @file
+ * Declares ignite::compute::ComputeFunc class template.
+ */
+
+#ifndef _IGNITE_COMPUTE_COMPUTE_FUNC
+#define _IGNITE_COMPUTE_COMPUTE_FUNC
+
+namespace ignite
+{
+ class IgniteBinding;
+
+ namespace compute
+ {
+ /**
+ * Interface for a simple compute function that can be serialized and
+ * called on the remote nodes. ignite::binary::BinaryType class template
+ * should be specialized for any class, inheriting from this class.
+ *
+ * @tparam R Call return type. BinaryType should be specialized for the
+ * type if it is not primitive.
+ */
+ template<typename R>
+ class ComputeFunc
+ {
+ friend class ignite::IgniteBinding;
+
+ typedef R ReturnType;
+ public:
+ /**
+ * Destructor.
+ */
+ virtual ~ComputeFunc()
+ {
+ // No-op.
+ }
+
+ /**
+ * Called upon execution by compute.
+ *
+ * @return Computation result.
+ */
+ virtual R Call() = 0;
+ };
+ }
+}
+
+#endif //_IGNITE_COMPUTE_COMPUTE_FUNC
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/core/include/ignite/ignite.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core/include/ignite/ignite.h b/modules/platforms/cpp/core/include/ignite/ignite.h
index d96f81f..b3b06f0 100644
--- a/modules/platforms/cpp/core/include/ignite/ignite.h
+++ b/modules/platforms/cpp/core/include/ignite/ignite.h
@@ -23,10 +23,12 @@
#ifndef _IGNITE_IGNITE
#define _IGNITE_IGNITE
-#include "ignite/cache/cache.h"
-#include "ignite/transactions/transactions.h"
-#include "ignite/impl/ignite_impl.h"
-#include "ignite/ignite_configuration.h"
+#include <ignite/impl/ignite_impl.h>
+
+#include <ignite/ignite_configuration.h>
+#include <ignite/cache/cache.h>
+#include <ignite/transactions/transactions.h>
+#include <ignite/compute/compute.h>
namespace ignite
{
@@ -189,6 +191,15 @@ namespace ignite
transactions::Transactions GetTransactions();
/**
+ * Get compute.
+ *
+ * This method should only be called on the valid instance.
+ *
+ * @return Compute class instance.
+ */
+ compute::Compute GetCompute();
+
+ /**
* Get ignite binding.
*
* This method should only be used on the valid instance.
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/core/include/ignite/ignite_binding.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core/include/ignite/ignite_binding.h b/modules/platforms/cpp/core/include/ignite/ignite_binding.h
index 344bdf6..fe060c1 100644
--- a/modules/platforms/cpp/core/include/ignite/ignite_binding.h
+++ b/modules/platforms/cpp/core/include/ignite/ignite_binding.h
@@ -121,6 +121,31 @@ namespace ignite
}
/**
+ * Register type as Compute function.
+ *
+ * Registred type should be a child of ignite::compute::ComputeFunc
+ * class.
+ */
+ template<typename F>
+ void RegisterComputeFunc()
+ {
+ impl::IgniteBindingImpl *im = impl.Get();
+
+ int32_t typeId = binary::BinaryType<F>::GetTypeId();
+
+ if (im)
+ {
+ im->RegisterCallback(impl::IgniteBindingImpl::CallbackType::COMPUTE_JOB_CREATE,
+ typeId, impl::binding::ComputeJobCreate<F, typename F::ReturnType>);
+ }
+ else
+ {
+ throw IgniteError(IgniteError::IGNITE_ERR_GENERIC,
+ "Instance is not usable (did you check for error?).");
+ }
+ }
+
+ /**
* Check if the instance is valid.
*
* Invalid instance can be returned if some of the previous operations
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/core/include/ignite/ignite_binding_context.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core/include/ignite/ignite_binding_context.h b/modules/platforms/cpp/core/include/ignite/ignite_binding_context.h
index 4d8a7a7..244b255 100644
--- a/modules/platforms/cpp/core/include/ignite/ignite_binding_context.h
+++ b/modules/platforms/cpp/core/include/ignite/ignite_binding_context.h
@@ -48,7 +48,7 @@ namespace ignite
*
* @return IgniteBinding instance.
*/
- IgniteBinding GetBingding() const
+ IgniteBinding GetBinding() const
{
return binding;
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/core/include/ignite/impl/bindings.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core/include/ignite/impl/bindings.h b/modules/platforms/cpp/core/include/ignite/impl/bindings.h
index c1ada12..357b0f0 100644
--- a/modules/platforms/cpp/core/include/ignite/impl/bindings.h
+++ b/modules/platforms/cpp/core/include/ignite/impl/bindings.h
@@ -24,6 +24,7 @@
#include <ignite/impl/ignite_environment.h>
#include <ignite/impl/cache/query/continuous/continuous_query_impl.h>
#include <ignite/impl/cache/cache_entry_processor_holder.h>
+#include <ignite/impl/compute/compute_task_holder.h>
namespace ignite
{
@@ -88,6 +89,29 @@ namespace ignite
return 0;
}
+
+ /**
+ * Binding for compute job creation.
+ *
+ * @tparam F The job type.
+ * @tparam R The job return type.
+ *
+ * @param reader Reader.
+ * @param env Environment.
+ * @return Handle for the job.
+ */
+ template<typename F, typename R>
+ int64_t ComputeJobCreate(binary::BinaryReaderImpl& reader, binary::BinaryWriterImpl&, IgniteEnvironment& env)
+ {
+ using namespace common::concurrent;
+ using namespace compute;
+
+ F job = reader.ReadObject<F>();
+
+ SharedPointer<ComputeJobHolder> jobPtr(new ComputeJobHolderImpl<F, R>(job));
+
+ return env.GetHandleRegistry().Allocate(jobPtr);
+ }
}
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/core/include/ignite/impl/cluster/cluster_group_impl.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core/include/ignite/impl/cluster/cluster_group_impl.h b/modules/platforms/cpp/core/include/ignite/impl/cluster/cluster_group_impl.h
index 2bff0d8..3cfd700 100644
--- a/modules/platforms/cpp/core/include/ignite/impl/cluster/cluster_group_impl.h
+++ b/modules/platforms/cpp/core/include/ignite/impl/cluster/cluster_group_impl.h
@@ -22,6 +22,7 @@
#include <ignite/jni/java.h>
#include <ignite/impl/interop/interop_target.h>
+#include <ignite/impl/compute/compute_impl.h>
namespace ignite
{
@@ -29,13 +30,19 @@ namespace ignite
{
namespace cluster
{
+ /* Forward declaration. */
+ class ClusterGroupImpl;
+
+ /* Shared pointer. */
+ typedef common::concurrent::SharedPointer<ClusterGroupImpl> SP_ClusterGroupImpl;
+
/**
* Cluster group implementation.
*/
class IGNITE_FRIEND_EXPORT ClusterGroupImpl : private interop::InteropTarget
{
typedef common::concurrent::SharedPointer<IgniteEnvironment> SP_IgniteEnvironment;
- typedef common::concurrent::SharedPointer<ClusterGroupImpl> SP_ClusterGroupImpl;
+ typedef common::concurrent::SharedPointer<compute::ComputeImpl> SP_ComputeImpl;
public:
/**
* Constructor used to create new instance.
@@ -53,12 +60,20 @@ namespace ignite
/**
* Get server nodes cluster group implementation.
*
- * @param err Error.
* @return Server nodes cluster group implementation.
*/
- SP_ClusterGroupImpl ForServers(IgniteError& err);
+ SP_ClusterGroupImpl ForServers();
+
+ /**
+ * Get compute instance over this cluster group.
+ *
+ * @return Compute instance.
+ */
+ SP_ComputeImpl GetCompute();
private:
+ IGNITE_NO_COPY_ASSIGNMENT(ClusterGroupImpl);
+
/**
* Make cluster group implementation using java reference and
* internal state of this cluster group.
@@ -68,7 +83,15 @@ namespace ignite
*/
SP_ClusterGroupImpl FromTarget(jobject javaRef);
- IGNITE_NO_COPY_ASSIGNMENT(ClusterGroupImpl)
+ /**
+ * Gets instance of compute internally.
+ *
+ * @return Instance of compute.
+ */
+ SP_ComputeImpl InternalGetCompute();
+
+ /** Compute for the cluster group. */
+ SP_ComputeImpl computeImpl;
};
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/core/include/ignite/impl/compute/cancelable_impl.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core/include/ignite/impl/compute/cancelable_impl.h b/modules/platforms/cpp/core/include/ignite/impl/compute/cancelable_impl.h
new file mode 100644
index 0000000..828ecba
--- /dev/null
+++ b/modules/platforms/cpp/core/include/ignite/impl/compute/cancelable_impl.h
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @file
+ * Declares ignite::impl::compute::CancelableImpl class.
+ */
+
+#ifndef _IGNITE_IMPL_COMPUTE_CANCELABLE_IMPL
+#define _IGNITE_IMPL_COMPUTE_CANCELABLE_IMPL
+
+#include <ignite/common/common.h>
+#include <ignite/common/cancelable.h>
+#include <ignite/impl/interop/interop_target.h>
+
+namespace ignite
+{
+ namespace impl
+ {
+ namespace compute
+ {
+ /**
+ * Compute implementation.
+ */
+ class IGNITE_IMPORT_EXPORT CancelableImpl : public interop::InteropTarget, public common::Cancelable
+ {
+ public:
+ /**
+ * Constructor.
+ *
+ * @param env Environment.
+ * @param javaRef Java object reference.
+ */
+ CancelableImpl(common::concurrent::SharedPointer<IgniteEnvironment> env, jobject javaRef);
+
+ /**
+ * Destructor.
+ */
+ virtual ~CancelableImpl()
+ {
+ // No-op.
+ }
+
+ /**
+ * Cancels the operation.
+ */
+ virtual void Cancel();
+
+ private:
+ IGNITE_NO_COPY_ASSIGNMENT(CancelableImpl);
+ };
+ }
+ }
+}
+
+#endif //_IGNITE_IMPL_COMPUTE_CANCELABLE_IMPL
http://git-wip-us.apache.org/repos/asf/ignite/blob/f9c96de5/modules/platforms/cpp/core/include/ignite/impl/compute/compute_impl.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core/include/ignite/impl/compute/compute_impl.h b/modules/platforms/cpp/core/include/ignite/impl/compute/compute_impl.h
new file mode 100644
index 0000000..389c571
--- /dev/null
+++ b/modules/platforms/cpp/core/include/ignite/impl/compute/compute_impl.h
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @file
+ * Declares ignite::impl::compute::ComputeImpl class.
+ */
+
+#ifndef _IGNITE_IMPL_COMPUTE_COMPUTE_IMPL
+#define _IGNITE_IMPL_COMPUTE_COMPUTE_IMPL
+
+#include <ignite/common/common.h>
+#include <ignite/common/promise.h>
+#include <ignite/impl/interop/interop_target.h>
+#include <ignite/impl/compute/compute_task_holder.h>
+#include <ignite/impl/compute/cancelable_impl.h>
+
+#include <ignite/ignite_error.h>
+
+namespace ignite
+{
+ namespace impl
+ {
+ namespace compute
+ {
+ /**
+ * Compute implementation.
+ */
+ class IGNITE_IMPORT_EXPORT ComputeImpl : public interop::InteropTarget
+ {
+ public:
+ /**
+ * Operation type.
+ */
+ struct Operation
+ {
+ enum Type
+ {
+ Unicast = 5
+ };
+ };
+
+ /**
+ * Constructor.
+ *
+ * @param env Environment.
+ * @param javaRef Java object reference.
+ */
+ ComputeImpl(common::concurrent::SharedPointer<IgniteEnvironment> env, jobject javaRef);
+
+ /**
+ * Asyncronuously calls provided ComputeFunc on a node within
+ * the underlying cluster group.
+ *
+ * @tparam F Compute function type. Should implement ComputeFunc
+ * class.
+ * @tparam R Call return type. BinaryType should be specialized for
+ * the type if it is not primitive. Should not be void. For
+ * non-returning methods see Compute::Run().
+ * @param func Compute function to call.
+ * @return Future that can be used to acess computation result once
+ * it's ready.
+ * @throw IgniteError in case of error.
+ */
+ template<typename R, typename F>
+ Future<R> CallAsync(const F& func)
+ {
+ common::concurrent::SharedPointer<interop::InteropMemory> mem = GetEnvironment().AllocateMemory();
+ interop::InteropOutputStream out(mem.Get());
+ binary::BinaryWriterImpl writer(&out, GetEnvironment().GetTypeManager());
+
+ common::concurrent::SharedPointer<ComputeJobHolder> job(new ComputeJobHolderImpl<F, R>(func));
+
+ int64_t jobHandle = GetEnvironment().GetHandleRegistry().Allocate(job);
+
+ ComputeTaskHolderImpl<F, R>* taskPtr = new ComputeTaskHolderImpl<F, R>(jobHandle);
+ common::concurrent::SharedPointer<ComputeTaskHolder> task(taskPtr);
+
+ int64_t taskHandle = GetEnvironment().GetHandleRegistry().Allocate(task);
+
+ writer.WriteInt64(taskHandle);
+ writer.WriteInt32(1);
+ writer.WriteInt64(jobHandle);
+ writer.WriteObject<F>(func);
+
+ out.Synchronize();
+
+ jobject target = InStreamOutObject(Operation::Unicast, *mem.Get());
+ std::auto_ptr<common::Cancelable> cancelable(new CancelableImpl(GetEnvironmentPointer(), target));
+
+ common::Promise<R>& promise = taskPtr->GetPromise();
+ promise.SetCancelTarget(cancelable);
+
+ return promise.GetFuture();
+ }
+
+ private:
+ IGNITE_NO_COPY_ASSIGNMENT(ComputeImpl);
+ };
+ }
+ }
+}
+
+#endif //_IGNITE_IMPL_COMPUTE_COMPUTE_IMPL