# IGNITE-441 Review.
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/532c58d6 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/532c58d6 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/532c58d6 Branch: refs/heads/ignite-410 Commit: 532c58d6a6a3b86a861ed130d850b2e47d5a8ae3 Parents: cad3d1f Author: AKuznetsov <akuznet...@gridgain.com> Authored: Thu Mar 12 15:10:59 2015 +0700 Committer: AKuznetsov <akuznet...@gridgain.com> Committed: Thu Mar 12 15:10:59 2015 +0700 ---------------------------------------------------------------------- .../datagrid/CachePopularNumbersExample.java | 2 +- .../ScalarCachePopularNumbersExample.scala | 41 ++++++++++++++++---- 2 files changed, 34 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/532c58d6/examples/src/main/java/org/apache/ignite/examples/datagrid/CachePopularNumbersExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/datagrid/CachePopularNumbersExample.java b/examples/src/main/java/org/apache/ignite/examples/datagrid/CachePopularNumbersExample.java index 0f71681..646ee89 100644 --- a/examples/src/main/java/org/apache/ignite/examples/datagrid/CachePopularNumbersExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/datagrid/CachePopularNumbersExample.java @@ -141,7 +141,7 @@ public class CachePopularNumbersExample { * Increments value for key. */ private static class IncrementingUpdater implements IgniteDataLoader.Updater<Integer, Long> { - /** */ + /** Process entries to increase value by entry key. */ private static final EntryProcessor<Integer, Long, Void> INC = new EntryProcessor<Integer, Long, Void>() { @Override public Void process(MutableEntry<Integer, Long> e, Object... args) { Long val = e.getValue(); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/532c58d6/examples/src/main/scala/org/apache/ignite/scalar/examples/ScalarCachePopularNumbersExample.scala ---------------------------------------------------------------------- diff --git a/examples/src/main/scala/org/apache/ignite/scalar/examples/ScalarCachePopularNumbersExample.scala b/examples/src/main/scala/org/apache/ignite/scalar/examples/ScalarCachePopularNumbersExample.scala index 98d9637..80a3ce8 100644 --- a/examples/src/main/scala/org/apache/ignite/scalar/examples/ScalarCachePopularNumbersExample.scala +++ b/examples/src/main/scala/org/apache/ignite/scalar/examples/ScalarCachePopularNumbersExample.scala @@ -17,15 +17,19 @@ package org.apache.ignite.scalar.examples -import java.util.Timer - -import org.apache.ignite.IgniteException import org.apache.ignite.examples.datagrid.CacheNodeStartup +import org.apache.ignite.internal.util.scala.impl import org.apache.ignite.scalar.scalar import org.apache.ignite.scalar.scalar._ +import org.apache.ignite.{IgniteCache, IgniteDataLoader, IgniteException} + +import javax.cache.processor.{EntryProcessor, MutableEntry} +import java.util +import java.util.Map.Entry +import java.util.Timer +import scala.collection.JavaConversions._ import scala.util.Random -import collection.JavaConversions._ /** * Real time popular number counter. @@ -46,11 +50,14 @@ object ScalarCachePopularNumbersExample extends App { /** Count of most popular numbers to retrieve from cluster. */ private final val POPULAR_NUMBERS_CNT = 10 + /** Random number generator. */ + private final val RAND = new Random() + /** Range within which to generate numbers. */ private final val RANGE = 1000 /** Count of total numbers to generate. */ - private final val CNT = 100000 + private final val CNT = 1000000 scalar("examples/config/example-cache.xml") { // Clean up caches on all nodes before run. @@ -62,7 +69,7 @@ object ScalarCachePopularNumbersExample extends App { val prj = ignite$.cluster().forCacheNodes(CACHE_NAME) if (prj.nodes().isEmpty) - println("Ignite does not have cache configured: " + CACHE_NAME); + println("Ignite does not have cache configured: " + CACHE_NAME) else { val popularNumbersQryTimer = new Timer("numbers-query-worker") @@ -94,9 +101,9 @@ object ScalarCachePopularNumbersExample extends App { // Reduce parallel operations since we running the whole ignite cluster locally under heavy load. val ldr = dataLoader$[Int, Long](CACHE_NAME, 2048) - // TODO IGNITE-44: restore invoke. + ldr.updater(new IncrementingUpdater()) - (0 until CNT) foreach (_ => ldr.addData(Random.nextInt(RANGE), 1L)) + (0 until CNT) foreach (_ => ldr.addData(RAND.nextInt(RANGE), 1L)) ldr.close(false) } @@ -115,4 +122,22 @@ object ScalarCachePopularNumbersExample extends App { println("------------------") } + + /** + * Increments value for key. + */ + private class IncrementingUpdater extends IgniteDataLoader.Updater[Int, Long] { + private[this] final val INC = new EntryProcessor[Int, Long, Object]() { + /** Process entries to increase value by entry key. */ + override def process(e: MutableEntry[Int, Long], args: AnyRef*): Object = { + e.setValue(Option(e.getValue).map(_ + 1).getOrElse(1L)) + + null + } + } + + @impl def update(cache: IgniteCache[Int, Long], entries: util.Collection[Entry[Int, Long]]) { + entries.foreach(entry => cache.invoke(entry.getKey, INC)) + } + } }