IGNITE-2093 Visor CMD: Added support to scan near cache.
authorVasiliy Sisko <vsisko@gridgain.com>
Mon, 12 Feb 2018 03:13:06 +0000 (10:13 +0700)
committerAlexey Kuznetsov <akuznetsov@apache.org>
Mon, 12 Feb 2018 03:13:06 +0000 (10:13 +0700)
modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/cache/VisorCacheCommand.scala
modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/cache/VisorCacheScanCommand.scala
modules/visor-console/src/main/scala/org/apache/ignite/visor/visor.scala

index 582feff..d55fed1 100755 (executable)
@@ -71,7 +71,7 @@ import scala.language.{implicitConversions, reflectiveCalls}
  *     cache -i {-system}
  *     cache {-c=<cache-name>} {-id=<node-id>|id8=<node-id8>} {-s=hi|mi|rd|wr|cn} {-a} {-r} {-system}
  *     cache -clear {-c=<cache-name>}
- *     cache -scan -c=<cache-name> {-id=<node-id>|id8=<node-id8>} {-p=<page size>} {-system}
+ *     cache -scan -c=<cache-name> {-near} {-id=<node-id>|id8=<node-id8>} {-p=<page size>} {-system}
  *     cache -stop -c=<cache-name>
  *     cache -reset -c=<cache-name>
  *     cache -rebalance -c=<cache-name>
@@ -112,9 +112,11 @@ import scala.language.{implicitConversions, reflectiveCalls}
  *     -system
  *         Enable showing of information about system caches.
  *     -clear
- *          Clears cache.
+ *         Clears cache.
  *     -scan
- *          Prints list of all entries from cache.
+ *         Prints list of all entries from cache.
+ *     -near
+ *         Prints list of all entries from near cache of cache.
  *     -stop
  *          Stop cache with specified name.
  *     -reset
@@ -153,6 +155,8 @@ import scala.language.{implicitConversions, reflectiveCalls}
  *         with page of 50 items from all nodes with this cache.
  *     cache -scan -c=cache -id8=12345678
  *         Prints list entries from cache with name 'cache' and node '12345678' ID8.
+ *     cache -scan -c=cache -near -id8=12345678
+ *         Prints list entries from near cache of cache with name 'cache' and node '12345678' ID8.
  *     cache -stop -c=cache
  *         Stops cache with name 'cache'.
  *     cache -reset -c=cache
@@ -196,6 +200,9 @@ class VisorCacheCommand extends VisorConsoleCommand {
      * <ex>cache -scan -c=cache -id8=12345678</ex>
      *     Prints list entries from cache with name 'cache' and node '12345678' ID8.
      * <br>
+     * <ex>cache -scan -c=cache -near -id8=12345678</ex>
+     *     Prints list entries from near cache of cache with name 'cache' and node '12345678' ID8.
+     * <br>
      * <ex>cache -stop -c=@c0</ex>
      *     Stop cache with name taken from 'c0' memory variable.
      * <br>
@@ -227,7 +234,16 @@ class VisorCacheCommand extends VisorConsoleCommand {
 
                     return
 
-                case Right(n) => n
+                case Right(n) => n match {
+                    case None if hasArgName("scan", argLst) && hasArgName("near", argLst) =>
+                        askForNode("Select node from:") match {
+                            case None => return
+
+                            case nidOpt => nidOpt.map(ignite.cluster.node(_))
+                        }
+
+                    case _ => n
+                }
             }
 
             val showSystem = hasArgFlag("system", argLst)
@@ -707,7 +723,7 @@ object VisorCacheCommand {
             "cache -i",
             "cache {-c=<cache-name>} {-id=<node-id>|id8=<node-id8>} {-s=hi|mi|rd|wr} {-a} {-r}",
             "cache -clear {-c=<cache-name>} {-id=<node-id>|id8=<node-id8>}",
-            "cache -scan -c=<cache-name> {-id=<node-id>|id8=<node-id8>} {-p=<page size>}",
+            "cache -scan -c=<cache-name> {-near} {-id=<node-id>|id8=<node-id8>} {-p=<page size>}",
             "cache -stop -c=<cache-name>",
             "cache -reset -c=<cache-name>",
             "cache -rebalance -c=<cache-name>"
@@ -733,6 +749,7 @@ object VisorCacheCommand {
             "-clear" -> "Clears cache.",
             "-system" -> "Enable showing of information about system caches.",
             "-scan" -> "Prints list of all entries from cache.",
+            "-near" -> "Prints list of all entries from near cache of cache.",
             "-stop" -> "Stop cache with specified name.",
             "-reset" -> "Reset metrics of cache with specified name.",
             "-rebalance" -> "Re-balance partitions for cache with specified name.",
@@ -791,6 +808,8 @@ object VisorCacheCommand {
             "cache -scan -c=@c0 -p=50" -> ("Prints list entries from cache with name taken from 'c0' memory variable" +
                 " with page of 50 items from all nodes with this cache."),
             "cache -scan -c=cache -id8=12345678" -> "Prints list entries from cache with name 'cache' and node '12345678' ID8.",
+            "cache -scan -near -c=cache -id8=12345678" ->
+                "Prints list entries from near cache of cache with name 'cache' and node '12345678' ID8.",
             "cache -stop -c=@c0" -> "Stop cache with name taken from 'c0' memory variable.",
             "cache -reset -c=@c0" -> "Reset metrics for cache with name taken from 'c0' memory variable.",
             "cache -rebalance -c=cache" -> "Re-balance partitions for cache with name 'cache'."
index 8e46ffc..72d4cab 100644 (file)
@@ -32,19 +32,21 @@ import scala.collection.JavaConversions._
  *
  * ====Specification====
  * {{{
- *     cache {-id=<node-id>|-id8=<node-id8>} {-p=<page size>} -c=<cache name> -scan
+ *     cache -scan -c=<cache name> {-near} {-id=<node-id>|-id8=<node-id8>} {-p=<page size>}
  * }}}
  *
  * ====Arguments====
  * {{{
+ *     <cache-name>
+ *         Name of the cache.
+ *     <near>
+ *         Prints list of all entries from near cache of cache.
  *     <node-id>
  *         Full node ID.
  *     <node-id8>
  *         Node ID8.
  *     <page size>
  *         Number of object to fetch from cache at once.
- *     <cache-name>
- *         Name of the cache.
  * }}}
  *
  * ====Examples====
@@ -54,8 +56,10 @@ import scala.collection.JavaConversions._
  *    cache -c=@c0 -scan -p=50
  *        List entries from cache with name taken from 'c0' memory variable with page of 50 items
  *        from all nodes with this cache.
- *    cache -c=cache -scan -id8=12345678
+ *    cache -scan -c=cache -id8=12345678
  *        List entries from cache with name 'cache' and node '12345678' ID8.
+ *    cache -scan -near -c=cache -id8=12345678
+ *        List entries from near cache of cache with name 'cache' and node '12345678' ID8.
  * }}}
  */
 class VisorCacheScanCommand {
@@ -100,6 +104,7 @@ class VisorCacheScanCommand {
     def scan(argLst: ArgList, node: Option[ClusterNode]) {
         val pageArg = argValue("p", argLst)
         val cacheArg = argValue("c", argLst)
+        val near = hasArgName("near", argLst)
 
         var pageSize = 25
 
@@ -138,7 +143,7 @@ class VisorCacheScanCommand {
         val firstPage =
             try
                 executeRandom(groupForDataNode(node, cacheName),
-                    classOf[VisorScanQueryTask], new VisorScanQueryTaskArg(cacheName, null, false, false, false, false, pageSize)) match {
+                    classOf[VisorScanQueryTask], new VisorScanQueryTaskArg(cacheName, null, false, false, near, false, pageSize)) match {
                     case x if x.getError != null =>
                         error(x.getError)
 
@@ -157,7 +162,7 @@ class VisorCacheScanCommand {
             }
 
         if (firstPage.getRows.isEmpty) {
-            println(s"Cache: ${escapeName(cacheName)} is empty")
+            println(s"${if (near) "Near cache" else "Cache"}: ${escapeName(cacheName)} is empty")
 
             return
         }
@@ -165,7 +170,7 @@ class VisorCacheScanCommand {
         var nextPage: VisorQueryResult = firstPage
 
         def render() {
-            println("Entries in cache: " + escapeName(cacheName))
+            println(s"Entries in ${if (near) "near" else ""} cache: " + escapeName(cacheName))
 
             val t = VisorTextTable()
 
index c24bc25..795cc53 100644 (file)
@@ -1309,7 +1309,7 @@ object visor extends VisorTag {
       *
       * @return `True` when cluster is active.
       */
-    def isActive: Boolean = ignite.active
+    def isActive: Boolean = ignite.cluster().active()
 
     /**
      * Gets timestamp of Visor console connection. Returns `0` if Visor console is not connected.