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 <[email protected]> Authored: Fri Nov 18 12:33:19 2016 +0300 Committer: Pavel Tupitsyn <[email protected]> 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 @@ +/* + * 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 @@ +/* + * 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 @@ +/* + * 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; + } + } +}
