You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by pt...@apache.org on 2016/11/18 09:33:57 UTC

ignite git commit: IGNITE-4128 .NET: Add EntryProcessorExample

Repository: ignite
Updated Branches:
  refs/heads/master 6287a0bee -> 4672b33ff


IGNITE-4128 .NET: Add EntryProcessorExample

This closes #1246


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/4672b33f
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/4672b33f
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/4672b33f

Branch: refs/heads/master
Commit: 4672b33ffd7418dc467189bb17ecceab45bd3fcf
Parents: 6287a0b
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Fri Nov 18 12:33:19 2016 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Fri Nov 18 12:33:19 2016 +0300

----------------------------------------------------------------------
 .../Apache.Ignite.Examples.csproj               |  1 +
 .../Datagrid/EntryProcessorExample.cs           | 90 ++++++++++++++++++++
 .../Apache.Ignite.ExamplesDll.csproj            |  2 +
 .../Datagrid/CacheIncrementEntryProcessor.cs    | 45 ++++++++++
 .../Datagrid/CachePutEntryProcessor.cs          | 45 ++++++++++
 5 files changed, 183 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/4672b33f/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Apache.Ignite.Examples.csproj
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Apache.Ignite.Examples.csproj b/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Apache.Ignite.Examples.csproj
index 7f25a12..44e1bc2 100644
--- a/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Apache.Ignite.Examples.csproj
+++ b/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Apache.Ignite.Examples.csproj
@@ -52,6 +52,7 @@
     <Compile Include="Compute\TaskExample.cs" />
     <Compile Include="Datagrid\ContinuousQueryExample.cs" />
     <Compile Include="Datagrid\DataStreamerExample.cs" />
+    <Compile Include="Datagrid\EntryProcessorExample.cs" />
     <Compile Include="Datagrid\OptimisticTransactionExample.cs" />
     <Compile Include="Datagrid\PutGetExample.cs" />
     <Compile Include="Datagrid\LinqExample.cs" />

http://git-wip-us.apache.org/repos/asf/ignite/blob/4672b33f/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Datagrid/EntryProcessorExample.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Datagrid/EntryProcessorExample.cs b/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Datagrid/EntryProcessorExample.cs
new file mode 100644
index 0000000..f151135
--- /dev/null
+++ b/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Datagrid/EntryProcessorExample.cs
@@ -0,0 +1,90 @@
+\ufeff/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Examples.Datagrid
+{
+    using System;
+    using System.Linq;
+    using Apache.Ignite.Core;
+    using Apache.Ignite.Core.Cache;
+    using Apache.Ignite.ExamplesDll.Datagrid;
+
+    /// <summary>
+    /// This examples demonstrates the affinity collocation of a closure with data by showing how
+    /// cache entries can be created and modified with an EntryProcessor.
+    /// <para />
+    /// 1) Build the project Apache.Ignite.ExamplesDll (select it -> right-click -> Build).
+    ///    Apache.Ignite.ExamplesDll.dll must appear in %IGNITE_HOME%/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/bin/${Platform]/${Configuration} folder.
+    /// 2) Set this class as startup object (Apache.Ignite.Examples project -> right-click -> Properties ->
+    ///     Application -> Startup object);
+    /// 3) Start example (F5 or Ctrl+F5).
+    /// <para />
+    /// This example can be run with standalone Apache Ignite.NET node:
+    /// 1) Run %IGNITE_HOME%/platforms/dotnet/bin/Apache.Ignite.exe:
+    /// Apache.Ignite.exe -configFileName=platforms\dotnet\examples\apache.ignite.examples\app.config -assembly=[path_to_Apache.Ignite.ExamplesDll.dll]
+    /// 2) Start example.
+    /// </summary>
+    public static class EntryProcessorExample
+    {
+        /// <summary>Cache name.</summary>
+        private const string CacheName = "dotnet_cache_put_get";
+
+        /// <summary>Entry count.</summary>
+        private const int EntryCount = 20;
+
+        /// <summary>
+        /// Runs the example.
+        /// </summary>
+        [STAThread]
+        public static void Main()
+        {
+            using (var ignite = Ignition.StartFromApplicationConfiguration())
+            {
+                Console.WriteLine();
+                Console.WriteLine(">>> Cache EntryProcessor example started.");
+
+                ICache<int, int> cache = ignite.GetOrCreateCache<int, int>(CacheName);
+                cache.Clear();
+
+                // Populate cache with Invoke.
+                int[] keys = Enumerable.Range(1, EntryCount).ToArray();
+
+                foreach (var key in keys)
+                    cache.Invoke(key, new CachePutEntryProcessor(), 10);
+
+                PrintCacheEntries(cache);
+
+                // Increment entries by 5 with InvokeAll.
+                cache.InvokeAll(keys, new CacheIncrementEntryProcessor(), 5);
+
+                PrintCacheEntries(cache);
+            }
+        }
+
+        /// <summary>
+        /// Prints the cache entries.
+        /// </summary>
+        /// <param name="cache">The cache.</param>
+        private static void PrintCacheEntries(ICache<int, int> cache)
+        {
+            Console.WriteLine("\n>>> Entries in cache:");
+
+            foreach (var entry in cache)
+                Console.WriteLine(entry);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/4672b33f/modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Apache.Ignite.ExamplesDll.csproj
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Apache.Ignite.ExamplesDll.csproj b/modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Apache.Ignite.ExamplesDll.csproj
index 4ab2d4b..8515bf6 100644
--- a/modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Apache.Ignite.ExamplesDll.csproj
+++ b/modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Apache.Ignite.ExamplesDll.csproj
@@ -45,6 +45,8 @@
     <Compile Include="Compute\AverageSalaryTask.cs" />
     <Compile Include="Compute\CharacterCountClosure.cs" />
     <Compile Include="Compute\CharacterCountReducer.cs" />
+    <Compile Include="Datagrid\CacheIncrementEntryProcessor.cs" />
+    <Compile Include="Datagrid\CachePutEntryProcessor.cs" />
     <Compile Include="Datagrid\EmployeeStoreFactory.cs" />
     <Compile Include="Datagrid\EmployeeStorePredicate.cs" />
     <Compile Include="Datagrid\ContinuousQueryFilter.cs" />

http://git-wip-us.apache.org/repos/asf/ignite/blob/4672b33f/modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Datagrid/CacheIncrementEntryProcessor.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Datagrid/CacheIncrementEntryProcessor.cs b/modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Datagrid/CacheIncrementEntryProcessor.cs
new file mode 100644
index 0000000..7359508
--- /dev/null
+++ b/modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Datagrid/CacheIncrementEntryProcessor.cs
@@ -0,0 +1,45 @@
+\ufeff/*
+ * 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.
+ */
+
+namespace Apache.Ignite.ExamplesDll.Datagrid
+{
+    using System;
+    using Apache.Ignite.Core.Cache;
+
+    /// <summary>
+    /// EntryProocessor that increments cached values.
+    /// </summary>
+    [Serializable]
+    public class CacheIncrementEntryProcessor : ICacheEntryProcessor<int, int, int, object>
+    {
+        /// <summary>
+        /// Process an entry.
+        /// </summary>
+        /// <param name="entry">The entry to process.</param>
+        /// <param name="arg">The argument.</param>
+        /// <returns>
+        /// Processing result.
+        /// </returns>
+        /// <exception cref="System.NotImplementedException"></exception>
+        public object Process(IMutableCacheEntry<int, int> entry, int arg)
+        {
+            entry.Value += arg;
+
+            return null;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/4672b33f/modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Datagrid/CachePutEntryProcessor.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Datagrid/CachePutEntryProcessor.cs b/modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Datagrid/CachePutEntryProcessor.cs
new file mode 100644
index 0000000..96f8f5f
--- /dev/null
+++ b/modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Datagrid/CachePutEntryProcessor.cs
@@ -0,0 +1,45 @@
+\ufeff/*
+ * 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.
+ */
+
+namespace Apache.Ignite.ExamplesDll.Datagrid
+{
+    using System;
+    using Apache.Ignite.Core.Cache;
+
+    /// <summary>
+    /// EntryProcessor that creates new cache entry.
+    /// </summary>
+    [Serializable]
+    public class CachePutEntryProcessor : ICacheEntryProcessor<int, int, int, object>
+    {
+        /// <summary>
+        /// Process an entry.
+        /// </summary>
+        /// <param name="entry">The entry to process.</param>
+        /// <param name="arg">The argument.</param>
+        /// <returns>
+        /// Processing result.
+        /// </returns>
+        public object Process(IMutableCacheEntry<int, int> entry, int arg)
+        {
+            if (!entry.Exists)
+                entry.Value = entry.Key * arg;
+
+            return null;
+        }
+    }
+}