/// <summary>
        /// Scan all nodes in series and read all records in all sets.
        /// </summary>
        public override void RunExample(AerospikeClient client, Arguments args)
        {
            console.Info("Scan series: namespace=" + args.ns + " set=" + args.set);
            setMap.Clear();

            // Use low scan priority.  This will take more time, but it will reduce
            // the load on the server.
            ScanPolicy policy = new ScanPolicy();
            policy.maxRetries = 1;
            policy.priority = Priority.LOW;

            Node[] nodes = client.Nodes;
            DateTime begin = DateTime.Now;

            foreach (Node node in nodes)
            {
                console.Info("Scan node " + node.Name);
                client.ScanNode(policy, node, args.ns, args.set, ScanCallback);

                foreach (KeyValuePair<string, Metrics> entry in setMap)
                {
                    console.Info("Node " + node.Name + " set " + entry.Key + " count: " + entry.Value.count);
                    entry.Value.count = 0;
                }
            }

            DateTime end = DateTime.Now;
            double seconds = end.Subtract(begin).TotalSeconds;
            console.Info("Elapsed time: " + seconds + " seconds");

            long total = 0;

            foreach (KeyValuePair<string, Metrics> entry in setMap)
            {
                console.Info("Total set " + entry.Key + " count: " + entry.Value.total);
                total += entry.Value.total;
            }
            console.Info("Grand total: " + total);
            double performance = Math.Round((double)total / seconds);
            console.Info("Records/second: " + performance);
        }