accumulo-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ktur...@apache.org
Subject [accumulo-website] branch master updated: Document Scan Executors (#92)
Date Wed, 11 Jul 2018 14:14:02 GMT
This is an automated email from the ASF dual-hosted git repository.

kturner pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/accumulo-website.git


The following commit(s) were added to refs/heads/master by this push:
     new 61643d7  Document Scan Executors (#92)
61643d7 is described below

commit 61643d764f85dd40018f25c1d9bb49a1d09db1a1
Author: Keith Turner <keith@deenlo.com>
AuthorDate: Wed Jul 11 10:13:59 2018 -0400

    Document Scan Executors (#92)
---
 README.md                                  |  40 ++++++----
 _docs-2-0/administration/properties.md     |  71 +++++++++---------
 _docs-2-0/administration/scan-executors.md | 114 +++++++++++++++++++++++++++++
 _plugins/links.rb                          |   1 -
 4 files changed, 174 insertions(+), 52 deletions(-)

diff --git a/README.md b/README.md
index c916513..5d6d528 100644
--- a/README.md
+++ b/README.md
@@ -35,6 +35,32 @@ You can just build static HTML files which are viewable in `_config.yml`:
     cd accumulo-website
     bundle exec jekyll build
 
+## Custom liquid tags
+
+Custom liquid tags are used to make linking to javadocs, properties, and documents easier.
+The source for these tags is at [_plugins/links.rb](_plugins/links.rb).
+
+| Tag   | Description            | Options                                                                         | Examples                                             | 
+| ----- | ---------------------- | ------------------------------------------------------------------------------- | ---------------------------------------------------- |
+| jlink | Creates Javadoc link   | Link text will be class name by default. Use `-f` for full package + class name | `{% jlink -f org.apache.accumulo.core.client.Connector %}` |
+| jurl  | Creates Javadoc URL    | None                                                                            | `{% jurl org.apache.accumulo.core.client.Connector %}`     |
+| plink | Creates Property link  | Assumes server property by default. Use `-c` to link to client properties       | `{% plink -c instance.name %}`                             |
+| purl  | Creates Property URL   | Default is servery property. Use `-c` to link to client properties              | `{% purl instance.volumes %}`                             |
+| dlink | Creates Documentation link | None                                                                            | `{% dlink getting-stared/clients %}`                   |
+| durl  | Creates Documentation URL  | None                                                                            | `{% durl troubleshooting/performance %}`                   |
+
+## Updating property documentation
+
+Building Accumulo  generates `properties.md` and `client-properties.md`.  To
+regenertate these, do the following.
+
+```
+cd <accumulo source dir>
+mvn package -DskipTests
+cp ./core/target/generated-docs/properties.md <accumulo website source>/_docs-2-0/administration
+cp ./core/target/generated-docs/client-properties.md <accumulo website source>/_docs-2-0/administration
+```
+
 ## Update the production website
 
 For Apache Accumulo committers, the `asf-site` branch needs to be updated with the generated
@@ -72,19 +98,5 @@ the given file into your `.git/hook` directory:
 
     cp ./_devtools/git-hooks/post-commit .git/hooks/
 
-## Custom liquid tags
-
-Custom liquid tags are used to make linking to javadocs, properties, and documents easier.
-The source for these tags is at [_plugins/links.rb](_plugins/links.rb).
-
-| Tag   | Description            | Options                                                                         | Examples                                             | 
-| ----- | ---------------------- | ------------------------------------------------------------------------------- | ---------------------------------------------------- |
-| jlink | Creates Javadoc link   | Link text will be class name by default. Use `-f` for full package + class name | `{% jlink -f org.apache.accumulo.core.client.Connector %}` |
-| jurl  | Creates Javadoc URL    | None                                                                            | `{% jurl org.apache.accumulo.core.client.Connector %}`     |
-| plink | Creates Property link  | Assumes server property by default. Use `-c` to link to client properties       | `{% plink -c instance.name %}`                             |
-| purl  | Creates Property URL   | Default is servery property. Use `-c` to link to client properties              | `{% purl instance.volumes %}`                             |
-| dlink | Creates Documentation link | None                                                                            | `{% dlink getting-stared/clients %}`                   |
-| durl  | Creates Documentation URL  | None                                                                            | `{% durl troubleshooting/performance %}`                   |
-
 [Jekyll]: https://jekyllrb.com/
 [Bundler]: https://bundler.io/
diff --git a/_docs-2-0/administration/properties.md b/_docs-2-0/administration/properties.md
index c0d567b..c1c6d32 100644
--- a/_docs-2-0/administration/properties.md
+++ b/_docs-2-0/administration/properties.md
@@ -35,17 +35,16 @@ Below are properties set in `accumulo-site.xml` or the Accumulo shell that confi
 | <a name="general_server_simpletimer_threadpool_size" class="prop"></a> general.server.simpletimer.threadpool.size | The number of threads to use for server-internal scheduled tasks<br>**type:** COUNT, **zk mutable:** no, **default value:** `1` |
 | <a name="general_vfs_cache_dir" class="prop"></a> general.vfs.cache.dir | Directory to use for the vfs cache. The cache will keep a soft reference to all of the classes loaded in the VM. This should be on local disk on each node with sufficient space. It defaults to ${java.io.tmpdir}/accumulo-vfs-cache-${user.name}<br>**type:** ABSOLUTEPATH, **zk mutable:** no, **default value:** `${java.io.tmpdir}/accumulo-vfs-cache-${user.name}` |
 | <a name="general_vfs_classpaths" class="prop"></a> general.vfs.classpaths | Configuration for a system level vfs classloader. Accumulo jar can be configured here and loaded out of HDFS.<br>**type:** STRING, **zk mutable:** no, **default value:** empty |
-| <a name="general_vfs_context_classpath_prefix" class="prop"></a> **general.vfs.context.classpath.*** | Properties in this category are define a classpath. These properties start  with the category prefix, followed by a context name. The value is a comma seperated list of URIs. Supports full regex on filename alone. For example, general.vfs.context.classpath.cx1=hdfs://nn1:9902/mylibdir/*.jar. You can enable post delegation for a context, which will load classes from the context first i [...]
+| <a name="general_vfs_context_classpath_prefix" class="prop"></a> **general.vfs.context.classpath.*** | Properties in this category are define a classpath. These properties start  with the category prefix, followed by a context name. The value is a comma seperated list of URIs. Supports full regex on filename alone. For example, general.vfs.context.classpath.cx1=hdfs://nn1:9902/mylibdir/*.jar. You can enable post delegation for a context, which will load classes from the context first i [...]
 | <a name="instance_prefix" class="prop"></a> **instance.*** | Properties in this category must be consistent throughout a cloud. This is enforced and servers won't be able to communicate if these differ. |
 | <a name="instance_dfs_dir" class="prop"></a> instance.dfs.dir | **Deprecated.** ~~HDFS directory in which accumulo instance will run. Do not change after accumulo is initialized.~~<br>~~**type:** ABSOLUTEPATH~~, ~~**zk mutable:** no~~, ~~**default value:** `/accumulo`~~ |
 | <a name="instance_dfs_uri" class="prop"></a> instance.dfs.uri | **Deprecated.** ~~A url accumulo should use to connect to DFS. If this is empty, accumulo will obtain this information from the hadoop configuration. This property will only be used when creating new files if instance.volumes is empty. After an upgrade to 1.6.0 Accumulo will start using absolute paths to reference files. Files created before a 1.6.0 upgrade are referenced via relative paths. Relative paths will always be r [...]
 | <a name="instance_rpc_sasl_allowed_host_impersonation" class="prop"></a> instance.rpc.sasl.allowed.host.impersonation | One-line configuration property controlling the network locations (hostnames) that are allowed to impersonate other users<br>**type:** STRING, **zk mutable:** no, **default value:** empty |
 | <a name="instance_rpc_sasl_allowed_user_impersonation" class="prop"></a> instance.rpc.sasl.allowed.user.impersonation | One-line configuration property controlling what users are allowed to impersonate other users<br>**type:** STRING, **zk mutable:** no, **default value:** empty |
 | <a name="instance_rpc_sasl_enabled" class="prop"></a> instance.rpc.sasl.enabled | Configures Thrift RPCs to require SASL with GSSAPI which supports Kerberos authentication. Mutually exclusive with SSL RPC configuration.<br>**type:** BOOLEAN, **zk mutable:** no, **default value:** `false` |
-| <a name="instance_rpc_sasl_impersonation_prefix" class="prop"></a> **instance.rpc.sasl.impersonation.*** | **Deprecated.** ~~Prefix that allows configuration of users that are allowed to impersonate other users~~ |
 | <a name="instance_rpc_ssl_clientAuth" class="prop"></a> instance.rpc.ssl.clientAuth | Require clients to present certs signed by a trusted root<br>**type:** BOOLEAN, **zk mutable:** no, **default value:** `false` |
 | <a name="instance_rpc_ssl_enabled" class="prop"></a> instance.rpc.ssl.enabled | Use SSL for socket connections from clients and among accumulo services. Mutually exclusive with SASL RPC configuration.<br>**type:** BOOLEAN, **zk mutable:** no, **default value:** `false` |
-| <a name="instance_secret" class="prop"></a> instance.secret | A secret unique to a given instance that all servers must know in order to communicate with one another.It should be changed prior to the initialization of Accumulo. To change it after Accumulo has been initialized, use the ChangeSecret tool and then update accumulo-site.xml everywhere. Before using the ChangeSecret tool, make sure Accumulo is not running and you are logged in as the user that controls Accumulo files in HDFS [...]
+| <a name="instance_secret" class="prop"></a> instance.secret | A secret unique to a given instance that all servers must know in order to communicate with one another. It should be changed prior to the initialization of Accumulo. To change it after Accumulo has been initialized, use the ChangeSecret tool and then update accumulo-site.xml everywhere. Before using the ChangeSecret tool, make sure Accumulo is not running and you are logged in as the user that controls Accumulo files in HDF [...]
 | <a name="instance_security_authenticator" class="prop"></a> instance.security.authenticator | The authenticator class that accumulo will use to determine if a user has privilege to perform an action<br>**type:** CLASSNAME, **zk mutable:** no, **default value:** `org.apache.accumulo.server.security.handler.ZKAuthenticator` |
 | <a name="instance_security_authorizor" class="prop"></a> instance.security.authorizor | The authorizor class that accumulo will use to determine what labels a user has privilege to see<br>**type:** CLASSNAME, **zk mutable:** no, **default value:** `org.apache.accumulo.server.security.handler.ZKAuthorizor` |
 | <a name="instance_security_permissionHandler" class="prop"></a> instance.security.permissionHandler | The permission handler class that accumulo will use to determine if a user has privilege to perform an action<br>**type:** CLASSNAME, **zk mutable:** no, **default value:** `org.apache.accumulo.server.security.handler.ZKPermHandler` |
@@ -64,29 +63,23 @@ Below are properties set in `accumulo-site.xml` or the Accumulo shell that confi
 | <a name="master_metadata_suspendable" class="prop"></a> master.metadata.suspendable | Allow tablets for the accumulo.metadata table to be suspended via table.suspend.duration.<br>**type:** BOOLEAN, **zk mutable:** yes, **default value:** `false` |
 | <a name="master_port_client" class="prop"></a> master.port.client | The port used for handling client connections on the master<br>**type:** PORT, **zk mutable:** yes but requires restart of the master, **default value:** `9999` |
 | <a name="master_recovery_delay" class="prop"></a> master.recovery.delay | When a tablet server's lock is deleted, it takes time for it to completely quit. This delay gives it time before log recoveries begin.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `10s` |
-| <a name="master_recovery_max_age" class="prop"></a> master.recovery.max.age | Recovery files older than this age will be removed.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `60m` |
-| <a name="master_recovery_time_max" class="prop"></a> master.recovery.time.max | The maximum time to attempt recovery before giving up<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `30m` |
 | <a name="master_replication_coordinator_minthreads" class="prop"></a> master.replication.coordinator.minthreads | Minimum number of threads dedicated to answering coordinator requests<br>**type:** COUNT, **zk mutable:** yes, **default value:** `4` |
 | <a name="master_replication_coordinator_port" class="prop"></a> master.replication.coordinator.port | Port for the replication coordinator service<br>**type:** PORT, **zk mutable:** yes, **default value:** `10001` |
 | <a name="master_replication_coordinator_threadcheck_time" class="prop"></a> master.replication.coordinator.threadcheck.time | The time between adjustments of the coordinator thread pool<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `5s` |
 | <a name="master_replication_status_scan_interval" class="prop"></a> master.replication.status.scan.interval | Amount of time to sleep before scanning the status section of the replication table for new data<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `30s` |
 | <a name="master_server_threadcheck_time" class="prop"></a> master.server.threadcheck.time | The time between adjustments of the server thread pool.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `1s` |
 | <a name="master_server_threads_minimum" class="prop"></a> master.server.threads.minimum | The minimum number of threads to use to handle incoming requests.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `20` |
-| <a name="master_status_threadpool_size" class="prop"></a> master.status.threadpool.size | The number of threads to use when fetching the tablet server status for balancing.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `1` |
+| <a name="master_status_threadpool_size" class="prop"></a> master.status.threadpool.size | The number of threads to use when fetching the tablet server status for balancing.  Zero indicates an unlimited number of threads will be used.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `0` |
 | <a name="master_tablet_balancer" class="prop"></a> master.tablet.balancer | The balancer class that accumulo will use to make tablet assignment and migration decisions.<br>**type:** CLASSNAME, **zk mutable:** yes, **default value:** `org.apache.accumulo.server.master.balancer.TableLoadBalancer` |
 | <a name="master_walog_closer_implementation" class="prop"></a> master.walog.closer.implementation | A class that implements a mechanism to steal write access to a write-ahead log<br>**type:** CLASSNAME, **zk mutable:** yes, **default value:** `org.apache.accumulo.server.master.recovery.HadoopLogCloser` |
 | <a name="monitor_prefix" class="prop"></a> **monitor.*** | Properties in this category affect the behavior of the monitor web server. |
-| <a name="monitor_banner_background" class="prop"></a> monitor.banner.background | **Deprecated.** ~~The background color of the banner text displayed on the monitor page.~~<br>~~**type:** STRING~~, ~~**zk mutable:** yes~~, ~~**default value:** `#304065`~~ |
-| <a name="monitor_banner_color" class="prop"></a> monitor.banner.color | **Deprecated.** ~~The color of the banner text displayed on the monitor page.~~<br>~~**type:** STRING~~, ~~**zk mutable:** yes~~, ~~**default value:** `#c4c4c4`~~ |
-| <a name="monitor_banner_text" class="prop"></a> monitor.banner.text | **Deprecated.** ~~The banner text displayed on the monitor page.~~<br>~~**type:** STRING~~, ~~**zk mutable:** yes~~, ~~**default value:** empty~~ |
 | <a name="monitor_lock_check_interval" class="prop"></a> monitor.lock.check.interval | The amount of time to sleep between checking for the Montior ZooKeeper lock<br>**type:** TIMEDURATION, **zk mutable:** no, **default value:** `5s` |
-| <a name="monitor_log_date_format" class="prop"></a> monitor.log.date.format | The SimpleDateFormat string used to configure the date shown on the 'Recent Logs' monitor page<br>**type:** STRING, **zk mutable:** no, **default value:** `yyyy/MM/dd HH:mm:ss,SSS` |
 | <a name="monitor_port_client" class="prop"></a> monitor.port.client | The listening port for the monitor's http service<br>**type:** PORT, **zk mutable:** no, **default value:** `9995` |
 | <a name="monitor_port_log4j" class="prop"></a> monitor.port.log4j | The listening port for the monitor's log4j logging collection.<br>**type:** PORT, **zk mutable:** no, **default value:** `4560` |
-| <a name="monitor_resources_external" class="prop"></a> monitor.resources.external | A JSON Map of Strings. Each String should be an HTML tag of an external resource (JS or CSS) to be imported by the Monitor. <br>Be sure to wrap with CDATA tags. If this value is set, all of the external resources in the <head> tag of the Monitor will be replaced with <br>the tags set here. Be sure the jquery tag is first since other scripts will depend on it. The resources that are used by default can b [...]
-| <a name="monitor_ssl_exclude_ciphers" class="prop"></a> monitor.ssl.exclude.ciphers | A comma-separated list of disallowed SSL Ciphers, see mmonitor.ssl.include.ciphers to allow ciphers<br>**type:** STRING, **zk mutable:** no, **default value:** empty |
+| <a name="monitor_resources_external" class="prop"></a> monitor.resources.external | A JSON Map of Strings. Each String should be an HTML tag of an external resource (JS or CSS) to be imported by the Monitor. Be sure to wrap with CDATA tags. If this value is set, all of the external resources in the `<head>` tag of the Monitor will be replaced with the tags set here. Be sure the jquery tag is first since other scripts will depend on it. The resources that are used by default can be seen [...]
+| <a name="monitor_ssl_exclude_ciphers" class="prop"></a> monitor.ssl.exclude.ciphers | A comma-separated list of disallowed SSL Ciphers, see monitor.ssl.include.ciphers to allow ciphers<br>**type:** STRING, **zk mutable:** no, **default value:** empty |
 | <a name="monitor_ssl_include_ciphers" class="prop"></a> monitor.ssl.include.ciphers | A comma-separated list of allows SSL Ciphers, see monitor.ssl.exclude.ciphers to disallow ciphers<br>**type:** STRING, **zk mutable:** no, **default value:** empty |
-| <a name="monitor_ssl_include_protocols" class="prop"></a> monitor.ssl.include.protocols | A comma-separate list of allowed SSL protocols<br>**type:** STRING, **zk mutable:** no, **default value:** `TLSv1,TLSv1.1,TLSv1.2` |
+| <a name="monitor_ssl_include_protocols" class="prop"></a> monitor.ssl.include.protocols | A comma-separate list of allowed SSL protocols<br>**type:** STRING, **zk mutable:** no, **default value:** `TLSv1.2` |
 | <a name="monitor_ssl_keyStore" class="prop"></a> monitor.ssl.keyStore | The keystore for enabling monitor SSL.<br>**type:** PATH, **zk mutable:** no, **default value:** empty |
 | <a name="monitor_ssl_keyStorePassword" class="prop"></a> monitor.ssl.keyStorePassword | The keystore password for enabling monitor SSL.<br>**type:** STRING, **zk mutable:** no, **default value:** empty |
 | <a name="monitor_ssl_keyStoreType" class="prop"></a> monitor.ssl.keyStoreType | Type of SSL keystore<br>**type:** STRING, **zk mutable:** no, **default value:** `jks` |
@@ -122,15 +115,15 @@ Below are properties set in `accumulo-site.xml` or the Accumulo shell that confi
 | <a name="rpc_javax_net_ssl_trustStoreType" class="prop"></a> rpc.javax.net.ssl.trustStoreType | Type of SSL truststore<br>**type:** STRING, **zk mutable:** no, **default value:** `jks` |
 | <a name="rpc_sasl_qop" class="prop"></a> rpc.sasl.qop | The quality of protection to be used with SASL. Valid values are 'auth', 'auth-int', and 'auth-conf'<br>**type:** STRING, **zk mutable:** no, **default value:** `auth` |
 | <a name="rpc_ssl_cipher_suites" class="prop"></a> rpc.ssl.cipher.suites | Comma separated list of cipher suites that can be used by accepted connections<br>**type:** STRING, **zk mutable:** no, **default value:** empty |
-| <a name="rpc_ssl_client_protocol" class="prop"></a> rpc.ssl.client.protocol | The protocol used to connect to a secure server, must be in the list of enabled protocols on the server side (rpc.ssl.server.enabled.protocols)<br>**type:** STRING, **zk mutable:** no, **default value:** `TLSv1` |
-| <a name="rpc_ssl_server_enabled_protocols" class="prop"></a> rpc.ssl.server.enabled.protocols | Comma separated list of protocols that can be used to accept connections<br>**type:** STRING, **zk mutable:** no, **default value:** `TLSv1,TLSv1.1,TLSv1.2` |
+| <a name="rpc_ssl_client_protocol" class="prop"></a> rpc.ssl.client.protocol | The protocol used to connect to a secure server, must be in the list of enabled protocols on the server side (rpc.ssl.server.enabled.protocols)<br>**type:** STRING, **zk mutable:** no, **default value:** `TLSv1.2` |
+| <a name="rpc_ssl_server_enabled_protocols" class="prop"></a> rpc.ssl.server.enabled.protocols | Comma separated list of protocols that can be used to accept connections<br>**type:** STRING, **zk mutable:** no, **default value:** `TLSv1.2` |
 | <a name="rpc_useJsse" class="prop"></a> rpc.useJsse | Use JSSE system properties to configure SSL rather than the rpc.javax.net.ssl.* Accumulo properties<br>**type:** BOOLEAN, **zk mutable:** no, **default value:** `false` |
 | <a name="table_prefix" class="prop"></a> **table.*** | Properties in this category affect tablet server treatment of tablets, but can be configured on a per-table basis. Setting these properties in the site file will override the default globally for all tables and not any specific table. However, both the default and the global setting can be overridden per table using the table operations API or in the shell, which sets the overridden value in zookeeper. Restarting accumulo tablet se [...]
 | <a name="table_balancer" class="prop"></a> table.balancer | This property can be set to allow the LoadBalanceByTable load balancer to change the called Load Balancer for this table<br>**type:** STRING, **zk mutable:** yes, **default value:** `org.apache.accumulo.server.master.balancer.DefaultLoadBalancer` |
 | <a name="table_bloom_enabled" class="prop"></a> table.bloom.enabled | Use bloom filters on this table.<br>**type:** BOOLEAN, **zk mutable:** yes, **default value:** `false` |
 | <a name="table_bloom_error_rate" class="prop"></a> table.bloom.error.rate | Bloom filter error rate.<br>**type:** FRACTION, **zk mutable:** yes, **default value:** `0.5%` |
 | <a name="table_bloom_hash_type" class="prop"></a> table.bloom.hash.type | The bloom filter hash type<br>**type:** STRING, **zk mutable:** yes, **default value:** `murmur` |
-| <a name="table_bloom_key_functor" class="prop"></a> table.bloom.key.functor | A function that can transform the key prior to insertion and check of bloom filter. org.apache.accumulo.core.file.keyfunctor.RowFunctor,,org.apache.accumulo.core.file.keyfunctor.ColumnFamilyFunctor, and org.apache.accumulo.core.file.keyfunctor.ColumnQualifierFunctor are allowable values. One can extend any of the above mentioned classes to perform specialized parsing of the key. <br>**type:** CLASSNAME, **zk  [...]
+| <a name="table_bloom_key_functor" class="prop"></a> table.bloom.key.functor | A function that can transform the key prior to insertion and check of bloom filter. org.apache.accumulo.core.file.keyfunctor.RowFunctor, org.apache.accumulo.core.file.keyfunctor.ColumnFamilyFunctor, and org.apache.accumulo.core.file.keyfunctor.ColumnQualifierFunctor are allowable values. One can extend any of the above mentioned classes to perform specialized parsing of the key. <br>**type:** CLASSNAME, **zk  [...]
 | <a name="table_bloom_load_threshold" class="prop"></a> table.bloom.load.threshold | This number of seeks that would actually use a bloom filter must occur before a RFile's bloom filter is loaded. Set this to zero to initiate loading of bloom filters when a RFile is opened.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `1` |
 | <a name="table_bloom_size" class="prop"></a> table.bloom.size | Bloom filter size, as number of keys.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `1048576` |
 | <a name="table_cache_block_enable" class="prop"></a> table.cache.block.enable | Determines whether data block cache is enabled for a table.<br>**type:** BOOLEAN, **zk mutable:** yes, **default value:** `false` |
@@ -141,23 +134,23 @@ Below are properties set in `accumulo-site.xml` or the Accumulo shell that confi
 | <a name="table_compaction_minor_idle" class="prop"></a> table.compaction.minor.idle | After a tablet has been idle (no mutations) for this time period it may have its in-memory map flushed to disk in a minor compaction. There is no guarantee an idle tablet will be compacted.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `5m` |
 | <a name="table_compaction_minor_logs_threshold" class="prop"></a> table.compaction.minor.logs.threshold | When there are more than this many write-ahead logs against a tablet, it will be minor compacted. See comment for property tserver.memory.maps.max<br>**type:** COUNT, **zk mutable:** yes, **default value:** `3` |
 | <a name="table_compaction_minor_merge_file_size_max" class="prop"></a> table.compaction.minor.merge.file.size.max | The max RFile size used for a merging minor compaction. The default value of 0 disables a max file size.<br>**type:** BYTES, **zk mutable:** yes, **default value:** `0` |
-| <a name="table_constraint_prefix" class="prop"></a> **table.constraint.*** | Properties in this category are per-table properties that add constraints to a table. These properties start with the category prefix, followed by a number, and their values correspond to a fully qualified Java class that implements the Constraint interface.<br>For example:<br>table.constraint.1 = org.apache.accumulo.core.constraints.MyCustomConstraint<br>and:<br>table.constraint.2 = my.package.constraints.MyS [...]
+| <a name="table_constraint_prefix" class="prop"></a> **table.constraint.*** | Properties in this category are per-table properties that add constraints to a table. These properties start with the category prefix, followed by a number, and their values correspond to a fully qualified Java class that implements the Constraint interface.<br>For example:<br>table.constraint.1 = org.apache.accumulo.core.constraints.MyCustomConstraint<br>and:<br> table.constraint.2 = my.package.constraints.My [...]
 | <a name="table_custom_prefix" class="prop"></a> **table.custom.*** | Prefix to be used for user defined arbitrary properties. |
 | <a name="table_durability" class="prop"></a> table.durability | The durability used to write to the write-ahead log. Legal values are: none, which skips the write-ahead log; log, which sends the data to the write-ahead log, but does nothing to make it durable; flush, which pushes data to the file system; and sync, which ensures the data is written to disk.<br>**type:** DURABILITY, **zk mutable:** yes, **default value:** `sync` |
 | <a name="table_failures_ignore" class="prop"></a> table.failures.ignore | If you want queries for your table to hang or fail when data is missing from the system, then set this to false. When this set to true missing data will be reported but queries will still run possibly returning a subset of the data.<br>**type:** BOOLEAN, **zk mutable:** yes, **default value:** `false` |
 | <a name="table_file_blocksize" class="prop"></a> table.file.blocksize | The HDFS block size used when writing RFiles. When set to 0B, the value/defaults of HDFS property 'dfs.block.size' will be used.<br>**type:** BYTES, **zk mutable:** yes, **default value:** `0B` |
 | <a name="table_file_compress_blocksize" class="prop"></a> table.file.compress.blocksize | The maximum size of data blocks in RFiles before they are compressed and written.<br>**type:** BYTES, **zk mutable:** yes, **default value:** `100K` |
 | <a name="table_file_compress_blocksize_index" class="prop"></a> table.file.compress.blocksize.index | The maximum size of index blocks in RFiles before they are compressed and written.<br>**type:** BYTES, **zk mutable:** yes, **default value:** `128K` |
-| <a name="table_file_compress_type" class="prop"></a> table.file.compress.type | Compression algorithm used on index and data blocks before they are written. Possible values: gz, snappy, lzo, none<br>**type:** STRING, **zk mutable:** yes, **default value:** `gz` |
+| <a name="table_file_compress_type" class="prop"></a> table.file.compress.type | Compression algorithm used on index and data blocks before they are written. Possible values: zstd, gz, snappy, lzo, none<br>**type:** STRING, **zk mutable:** yes, **default value:** `gz` |
 | <a name="table_file_max" class="prop"></a> table.file.max | The maximum number of RFiles each tablet in a table can have. When adjusting this property you may want to consider adjusting table.compaction.major.ratio also. Setting this property to 0 will make it default to tserver.scan.files.open.max-1, this will prevent a tablet from having more RFiles than can be opened. Setting this property low may throttle ingest and increase query performance.<br>**type:** COUNT, **zk mutable:** ye [...]
 | <a name="table_file_replication" class="prop"></a> table.file.replication | The number of replicas for a table's RFiles in HDFS. When set to 0, HDFS defaults are used.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `0` |
-| <a name="table_file_summary_maxSize" class="prop"></a> table.file.summary.maxSize | The maximum size summary that will be stored. The number of RFiles that had summary data exceeding this threshold is reported by Summary.getFileStatistics().getLarge().  When adjusting this consider the expected number RFiles with summaries on each tablet server and the summary cache size.<br>**type:** BYTES, **zk mutable:** yes, **default value:** `256K` |
+| <a name="table_file_summary_maxSize" class="prop"></a> table.file.summary.maxSize | The maximum size summary that will be stored. The number of RFiles that had summary data exceeding this threshold is reported by Summary.getFileStatistics().getLarge(). When adjusting this consider the expected number RFiles with summaries on each tablet server and the summary cache size.<br>**type:** BYTES, **zk mutable:** yes, **default value:** `256K` |
 | <a name="table_file_type" class="prop"></a> table.file.type | Change the type of file a table writes<br>**type:** STRING, **zk mutable:** yes, **default value:** `rf` |
 | <a name="table_formatter" class="prop"></a> table.formatter | The Formatter class to apply on results in the shell<br>**type:** STRING, **zk mutable:** yes, **default value:** `org.apache.accumulo.core.util.format.DefaultFormatter` |
-| <a name="table_group_prefix" class="prop"></a> **table.group.*** | Properties in this category are per-table properties that define locality groups in a table. These properties start with the category prefix, followed by a name, followed by a period, and followed by a property for that group.<br>For example table.group.group1=x,y,z sets the column families for a group called group1. Once configured, group1 can be enabled by adding it to the list of groups in the table.groups.enabled pr [...]
+| <a name="table_group_prefix" class="prop"></a> **table.group.*** | Properties in this category are per-table properties that define locality groups in a table. These properties start with the category prefix, followed by a name, followed by a period, and followed by a property for that group.<br>For example table.group.group1=x,y,z sets the column families for a group called group1. Once configured, group1 can be enabled by adding it to the list of groups in the table.groups.enabled pr [...]
 | <a name="table_groups_enabled" class="prop"></a> table.groups.enabled | A comma separated list of locality group names to enable for this table.<br>**type:** STRING, **zk mutable:** yes, **default value:** empty |
 | <a name="table_interepreter" class="prop"></a> table.interepreter | The ScanInterpreter class to apply on scan arguments in the shell<br>**type:** STRING, **zk mutable:** yes, **default value:** `org.apache.accumulo.core.util.interpret.DefaultScanInterpreter` |
-| <a name="table_iterator_prefix" class="prop"></a> **table.iterator.*** | Properties in this category specify iterators that are applied at various stages (scopes) of interaction with a table. These properties start with the category prefix, followed by a scope (minc, majc, scan, etc.), followed by a period, followed by a name, as in table.iterator.scan.vers, or table.iterator.scan.custom. The values for these properties are a number indicating the ordering in which it is applied, and a [...]
+| <a name="table_iterator_prefix" class="prop"></a> **table.iterator.*** | Properties in this category specify iterators that are applied at various stages (scopes) of interaction with a table. These properties start with the category prefix, followed by a scope (minc, majc, scan, etc.), followed by a period, followed by a name, as in table.iterator.scan.vers, or table.iterator.scan.custom. The values for these properties are a number indicating the ordering in which it is applied, and a [...]
 | <a name="table_iterator_majc_prefix" class="prop"></a> **table.iterator.majc.*** | Convenience prefix to find options for the majc iterator scope |
 | <a name="table_iterator_minc_prefix" class="prop"></a> **table.iterator.minc.*** | Convenience prefix to find options for the minc iterator scope |
 | <a name="table_iterator_scan_prefix" class="prop"></a> **table.iterator.scan.*** | Convenience prefix to find options for the scan iterator scope |
@@ -165,14 +158,16 @@ Below are properties set in `accumulo-site.xml` or the Accumulo shell that confi
 | <a name="table_majc_compaction_strategy_opts_prefix" class="prop"></a> **table.majc.compaction.strategy.opts.*** | Properties in this category are used to configure the compaction strategy. |
 | <a name="table_replication" class="prop"></a> table.replication | Is replication enabled for the given table<br>**type:** BOOLEAN, **zk mutable:** yes, **default value:** `false` |
 | <a name="table_replication_target_prefix" class="prop"></a> **table.replication.target.*** | Enumerate a mapping of other systems which this table should replicate their data to. The key suffix is the identifying cluster name and the value is an identifier for a location on the target system, e.g. the ID of the table on the target to replicate to |
-| <a name="table_sampler" class="prop"></a> table.sampler | The name of a class that implements org.apache.accumulo.core.Sampler.  Setting this option enables storing a sample of data which can be scanned.  Always having a current sample can useful for query optimization and data comprehension.   After enabling sampling for an existing table, a compaction is needed to compute the sample for existing data.  The compact command in the shell has an option to only compact RFiles without samp [...]
-| <a name="table_sampler_opt_prefix" class="prop"></a> **table.sampler.opt.*** | The property is used to set options for a sampler.  If a sample had two options like hasher and modulous, then the two properties table.sampler.opt.hasher=${hash algorithm} and table.sampler.opt.modulous=${mod} would be set. |
+| <a name="table_sampler" class="prop"></a> table.sampler | The name of a class that implements org.apache.accumulo.core.Sampler. Setting this option enables storing a sample of data which can be scanned. Always having a current sample can useful for query optimization and data comprehension. After enabling sampling for an existing table, a compaction is needed to compute the sample for existing data. The compact command in the shell has an option to only compact RFiles without sample da [...]
+| <a name="table_sampler_opt_prefix" class="prop"></a> **table.sampler.opt.*** | The property is used to set options for a sampler. If a sample had two options like hasher and modulous, then the two properties table.sampler.opt.hasher=${hash algorithm} and table.sampler.opt.modulous=${mod} would be set. |
+| <a name="table_scan_dispatcher" class="prop"></a> table.scan.dispatcher | This class is used to dynamically dispatch scans to configured scan executors.  Configured classes must implement {% jlink org.apache.accumulo.core.spi.scan.ScanDispatcher %} See [scan executors]({% durl administration/scan-executors %}) for an overview of why and how to use this property. This property is ignored for the root and metadata table.  The metadata table always dispatches to a scan executor named `met [...]
+| <a name="table_scan_dispatcher_opts_prefix" class="prop"></a> **table.scan.dispatcher.opts.*** | Options for the table scan dispatcher |
 | <a name="table_scan_max_memory" class="prop"></a> table.scan.max.memory | The maximum amount of memory that will be used to cache results of a client query/scan. Once this limit is reached, the buffered data is sent to the client.<br>**type:** BYTES, **zk mutable:** yes, **default value:** `512K` |
-| <a name="table_security_scan_visibility_default" class="prop"></a> table.security.scan.visibility.default | The security label that will be assumed at scan time if an entry does not have a visibility set.<br>Note: An empty security label is displayed as []. The scan results will show an empty visibility even if the visibility from this setting is applied to the entry.<br>CAUTION: If a particular key has an empty security label AND its table's default visibility is also empty, access wi [...]
+| <a name="table_security_scan_visibility_default" class="prop"></a> table.security.scan.visibility.default | The security label that will be assumed at scan time if an entry does not have a visibility expression.<br>Note: An empty security label is displayed as []. The scan results will show an empty visibility even if the visibility from this setting is applied to the entry.<br>CAUTION: If a particular key has an empty security label AND its table's default visibility is also empty, ac [...]
 | <a name="table_split_endrow_size_max" class="prop"></a> table.split.endrow.size.max | Maximum size of end row<br>**type:** BYTES, **zk mutable:** yes, **default value:** `10K` |
 | <a name="table_split_threshold" class="prop"></a> table.split.threshold | A tablet is split when the combined size of RFiles exceeds this amount.<br>**type:** BYTES, **zk mutable:** yes, **default value:** `1G` |
-| <a name="table_summarizer_prefix" class="prop"></a> **table.summarizer.*** | Prefix for configuring summarizers for a table.  Using this prefix multiple summarizers can be configured with options for each one. Each summarizer configured should have a unique id, this id can be anything. To add a summarizer set table.summarizer.<unique id>=<summarizer class name>.  If the summarizer has options, then for each option set table.summarizer.<unique id>.opt.<key>=<value>. |
-| <a name="table_suspend_duration" class="prop"></a> table.suspend.duration | For tablets belonging to this table: When a tablet server dies, allow the tablet server this duration to revive before reassigning its tabletsto other tablet servers.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `0s` |
+| <a name="table_summarizer_prefix" class="prop"></a> **table.summarizer.*** | Prefix for configuring summarizers for a table. Using this prefix multiple summarizers can be configured with options for each one. Each summarizer configured should have a unique id, this id can be anything. To add a summarizer set `table.summarizer.<unique id>=<summarizer class name>.` If the summarizer has options, then for each option set `table.summarizer.<unique id>.opt.<key>=<value>`. |
+| <a name="table_suspend_duration" class="prop"></a> table.suspend.duration | For tablets belonging to this table: When a tablet server dies, allow the tablet server this duration to revive before reassigning its tablets to other tablet servers.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `0s` |
 | <a name="table_walog_enabled" class="prop"></a> table.walog.enabled | **Deprecated.** ~~This setting is deprecated.  Use table.durability=none instead.~~<br>~~**type:** BOOLEAN~~, ~~**zk mutable:** yes~~, ~~**default value:** `true`~~ |
 | <a name="trace_prefix" class="prop"></a> **trace.*** | Properties in this category affect the behavior of distributed tracing. |
 | <a name="trace_password" class="prop"></a> trace.password | The password for the user used to store distributed traces<br>**type:** STRING, **zk mutable:** no, **default value:** `secret` |
@@ -181,13 +176,12 @@ Below are properties set in `accumulo-site.xml` or the Accumulo shell that confi
 | <a name="trace_span_receivers" class="prop"></a> trace.span.receivers | A list of span receiver classes to send trace spans<br>**type:** CLASSNAMELIST, **zk mutable:** no, **default value:** `org.apache.accumulo.tracer.ZooTraceClient` |
 | <a name="trace_table" class="prop"></a> trace.table | The name of the table to store distributed traces<br>**type:** STRING, **zk mutable:** no, **default value:** `trace` |
 | <a name="trace_token_property_prefix" class="prop"></a> **trace.token.property.*** | The prefix used to create a token for storing distributed traces. For each property required by trace.token.type, place this prefix in front of it. |
-| <a name="trace_token_type" class="prop"></a> trace.token.type | An AuthenticationToken type supported by the authorizer<br>**type:** CLASSNAME, **zk mutable:** no, **default value:** `org.apache.accumulo.core.client.security.tokens.PasswordToken` |
+| <a name="trace_token_type" class="prop"></a> trace.token.type | An AuthenticationToken type supported by the authorizer<br>**type:** CLASSNAME, **zk mutable:** no, **default value:** {% jlink -f org.apache.accumulo.core.client.security.tokens.PasswordToken %} |
 | <a name="trace_user" class="prop"></a> trace.user | The name of the user to store distributed traces<br>**type:** STRING, **zk mutable:** no, **default value:** `root` |
 | <a name="trace_zookeeper_path" class="prop"></a> trace.zookeeper.path | The zookeeper node where tracers are registered<br>**type:** STRING, **zk mutable:** no, **default value:** `/tracers` |
 | <a name="tserver_prefix" class="prop"></a> **tserver.*** | Properties in this category affect the behavior of the tablet servers |
-| <a name="tserver_archive_walogs" class="prop"></a> tserver.archive.walogs | Keep copies of the WALOGs for debugging purposes<br>**type:** BOOLEAN, **zk mutable:** yes, **default value:** `false` |
 | <a name="tserver_assignment_concurrent_max" class="prop"></a> tserver.assignment.concurrent.max | The number of threads available to load tablets. Recoveries are still performed serially.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `2` |
-| <a name="tserver_assignment_duration_warning" class="prop"></a> tserver.assignment.duration.warning | The amount of time an assignment can run  before the server will print a warning along with the current stack trace. Meant to help debug stuck assignments<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `10m` |
+| <a name="tserver_assignment_duration_warning" class="prop"></a> tserver.assignment.duration.warning | The amount of time an assignment can run before the server will print a warning along with the current stack trace. Meant to help debug stuck assignments<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `10m` |
 | <a name="tserver_bloom_load_concurrent_max" class="prop"></a> tserver.bloom.load.concurrent.max | The number of concurrent threads that will load bloom filters in the background. Setting this to zero will make bloom filters load in the foreground.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `4` |
 | <a name="tserver_bulk_assign_threads" class="prop"></a> tserver.bulk.assign.threads | The master delegates bulk import RFile processing and assignment to tablet servers. After file has been processed, the tablet server will assign the file to the appropriate tablets on all servers. This property controls the number of threads used to communicate to the other servers.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `1` |
 | <a name="tserver_bulk_process_threads" class="prop"></a> tserver.bulk.process.threads | The master will task a tablet server with pre-processing a bulk import RFile prior to assigning it to the appropriate tablet servers. This configuration value controls the number of threads used to process the files.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `1` |
@@ -213,17 +207,20 @@ Below are properties set in `accumulo-site.xml` or the Accumulo shell that confi
 | <a name="tserver_memory_manager" class="prop"></a> tserver.memory.manager | An implementation of MemoryManger that accumulo will use.<br>**type:** CLASSNAME, **zk mutable:** yes, **default value:** `org.apache.accumulo.server.tabletserver.LargestFirstMemoryManager` |
 | <a name="tserver_memory_maps_max" class="prop"></a> tserver.memory.maps.max | Maximum amount of memory that can be used to buffer data written to a tablet server. There are two other properties that can effectively limit memory usage table.compaction.minor.logs.threshold and tserver.walog.max.size. Ensure that table.compaction.minor.logs.threshold * tserver.walog.max.size >= this property.<br>**type:** MEMORY, **zk mutable:** yes, **default value:** `33%` |
 | <a name="tserver_memory_maps_native_enabled" class="prop"></a> tserver.memory.maps.native.enabled | An in-memory data store for accumulo implemented in c++ that increases the amount of data accumulo can hold in memory and avoids Java GC pauses.<br>**type:** BOOLEAN, **zk mutable:** yes but requires restart of the tserver, **default value:** `true` |
-| <a name="tserver_metadata_readahead_concurrent_max" class="prop"></a> tserver.metadata.readahead.concurrent.max | The maximum number of concurrent metadata read ahead that will execute.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `8` |
+| <a name="tserver_metadata_readahead_concurrent_max" class="prop"></a> tserver.metadata.readahead.concurrent.max | **Deprecated.** ~~This property is deprecated since 2.0.0, use tserver.scan.executors.meta.threads instead. The maximum number of concurrent metadata read ahead that will execute.~~<br>~~**type:** COUNT~~, ~~**zk mutable:** yes~~, ~~**default value:** `8`~~ |
 | <a name="tserver_migrations_concurrent_max" class="prop"></a> tserver.migrations.concurrent.max | The maximum number of concurrent tablet migrations for a tablet server<br>**type:** COUNT, **zk mutable:** yes, **default value:** `1` |
 | <a name="tserver_monitor_fs" class="prop"></a> tserver.monitor.fs | When enabled the tserver will monitor file systems and kill itself when one switches from rw to ro. This is usually and indication that Linux has detected a bad disk.<br>**type:** BOOLEAN, **zk mutable:** yes, **default value:** `true` |
-| <a name="tserver_mutation_queue_max" class="prop"></a> tserver.mutation.queue.max | **Deprecated.** ~~This setting is deprecated. See tserver.total.mutation.queue.max. The amount of memory to use to store write-ahead-log mutations-per-session before flushing them. Since the buffer is per write session, consider the max number of concurrent writer when configuring. When using Hadoop 2, Accumulo will call hsync() on the WAL . For a small number of concurrent writers, increasing this buff [...]
 | <a name="tserver_port_client" class="prop"></a> tserver.port.client | The port used for handling client connections on the tablet servers<br>**type:** PORT, **zk mutable:** yes but requires restart of the tserver, **default value:** `9997` |
 | <a name="tserver_port_search" class="prop"></a> tserver.port.search | if the ports above are in use, search higher ports until one is available<br>**type:** BOOLEAN, **zk mutable:** yes, **default value:** `false` |
-| <a name="tserver_readahead_concurrent_max" class="prop"></a> tserver.readahead.concurrent.max | The maximum number of concurrent read ahead that will execute. This effectively limits the number of long running scans that can run concurrently per tserver.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `16` |
+| <a name="tserver_readahead_concurrent_max" class="prop"></a> tserver.readahead.concurrent.max | **Deprecated.** ~~This property is deprecated since 2.0.0, use tserver.scan.executors.default.threads instead. The maximum number of concurrent read ahead that will execute. This effectively limits the number of long running scans that can run concurrently per tserver."~~<br>~~**type:** COUNT~~, ~~**zk mutable:** yes~~, ~~**default value:** `16`~~ |
 | <a name="tserver_recovery_concurrent_max" class="prop"></a> tserver.recovery.concurrent.max | The maximum number of threads to use to sort logs during recovery<br>**type:** COUNT, **zk mutable:** yes, **default value:** `2` |
 | <a name="tserver_replication_batchwriter_replayer_memory" class="prop"></a> tserver.replication.batchwriter.replayer.memory | Memory to provide to batchwriter to replay mutations for replication<br>**type:** BYTES, **zk mutable:** yes, **default value:** `50M` |
 | <a name="tserver_replication_default_replayer" class="prop"></a> tserver.replication.default.replayer | Default AccumuloReplicationReplayer implementation<br>**type:** CLASSNAME, **zk mutable:** yes, **default value:** `org.apache.accumulo.tserver.replication.BatchWriterReplicationReplayer` |
 | <a name="tserver_replication_replayer_prefix" class="prop"></a> **tserver.replication.replayer.*** | Allows configuration of implementation used to apply replicated data |
+| <a name="tserver_scan_executors_prefix" class="prop"></a> **tserver.scan.executors.*** | Prefix for defining executors to service scans. See [scan executors]({% durl administration/scan-executors %}) for an overview of why and how to use this property. For each executor the number of threads, thread priority, and an optional prioritizer can be configured. To configure a new executor, set `tserver.scan.executors.<name>.threads=<number>`.  Optionally, can also set `tserver.scan.executors [...]
+| <a name="tserver_scan_executors_default_prioritizer" class="prop"></a> tserver.scan.executors.default.prioritizer | Prioritizer for the default scan executor.  Defaults to none which results in FIFO priority.  Set to a class that implements org.apache.accumulo.core.spi.scan.ScanPrioritizer to configure one.<br>**type:** STRING, **zk mutable:** yes, **default value:** empty |
+| <a name="tserver_scan_executors_default_threads" class="prop"></a> tserver.scan.executors.default.threads | The number of threads for the scan executor that tables use by default.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `16` |
+| <a name="tserver_scan_executors_meta_threads" class="prop"></a> tserver.scan.executors.meta.threads | The number of threads for the metadata table scan executor.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `8` |
 | <a name="tserver_scan_files_open_max" class="prop"></a> tserver.scan.files.open.max | Maximum total RFiles that all tablets in a tablet server can open for scans. <br>**type:** COUNT, **zk mutable:** yes but requires restart of the tserver, **default value:** `100` |
 | <a name="tserver_server_message_size_max" class="prop"></a> tserver.server.message.size.max | The maximum size of a message that can be sent to a tablet server.<br>**type:** BYTES, **zk mutable:** yes, **default value:** `1G` |
 | <a name="tserver_server_threadcheck_time" class="prop"></a> tserver.server.threadcheck.time | The time between adjustments of the server thread pool.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `1s` |
@@ -232,8 +229,8 @@ Below are properties set in `accumulo-site.xml` or the Accumulo shell that confi
 | <a name="tserver_session_update_idle_max" class="prop"></a> tserver.session.update.idle.max | When a tablet server's SimpleTimer thread triggers to check idle sessions, this configurable option will be used to evaluate update sessions to determine if they can be closed due to inactivity<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `1m` |
 | <a name="tserver_slow_flush_time" class="prop"></a> tserver.slow.flush.time | If a flush to the write-ahead log takes longer than this period of time, debugging information will written, and may result in a log rollover.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `100ms` |
 | <a name="tserver_sort_buffer_size" class="prop"></a> tserver.sort.buffer.size | The amount of memory to use when sorting logs during recovery.<br>**type:** MEMORY, **zk mutable:** yes, **default value:** `10%` |
-| <a name="tserver_summary_partition_threads" class="prop"></a> tserver.summary.partition.threads | Summary data must be retrieved from RFiles.  For a large number of RFiles, the files are broken into partitions of 100K files.  This setting determines how many of these groups of 100K RFiles will be processed concurrently.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `10` |
-| <a name="tserver_summary_remote_threads" class="prop"></a> tserver.summary.remote.threads | For a partitioned group of 100K RFiles, those files are grouped by tablet server.  Then a remote tablet server is asked to gather summary data.  This setting determines how many concurrent request are made per partition.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `128` |
+| <a name="tserver_summary_partition_threads" class="prop"></a> tserver.summary.partition.threads | Summary data must be retrieved from RFiles. For a large number of RFiles, the files are broken into partitions of 100K files. This setting determines how many of these groups of 100K RFiles will be processed concurrently.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `10` |
+| <a name="tserver_summary_remote_threads" class="prop"></a> tserver.summary.remote.threads | For a partitioned group of 100K RFiles, those files are grouped by tablet server. Then a remote tablet server is asked to gather summary data. This setting determines how many concurrent request are made per partition.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `128` |
 | <a name="tserver_summary_retrieval_threads" class="prop"></a> tserver.summary.retrieval.threads | The number of threads on each tablet server available to retrieve summary data, that is not currently in cache, from RFiles.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `10` |
 | <a name="tserver_tablet_split_midpoint_files_max" class="prop"></a> tserver.tablet.split.midpoint.files.max | To find a tablets split points, all RFiles are opened and their indexes are read. This setting determines how many RFiles can be opened at once. When there are more RFiles than this setting multiple passes must be made, which is slower. However opening too many RFiles at once can cause problems.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `300` |
 | <a name="tserver_total_mutation_queue_max" class="prop"></a> tserver.total.mutation.queue.max | The amount of memory used to store write-ahead-log mutations before flushing them.<br>**type:** MEMORY, **zk mutable:** yes, **default value:** `5%` |
@@ -243,9 +240,9 @@ Below are properties set in `accumulo-site.xml` or the Accumulo shell that confi
 | <a name="tserver_wal_sync_method" class="prop"></a> tserver.wal.sync.method | **Deprecated.** ~~This property is deprecated. Use table.durability instead.~~<br>~~**type:** STRING~~, ~~**zk mutable:** yes~~, ~~**default value:** `hsync`~~ |
 | <a name="tserver_walog_max_age" class="prop"></a> tserver.walog.max.age | The maximum age for each write-ahead log.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `24h` |
 | <a name="tserver_walog_max_size" class="prop"></a> tserver.walog.max.size | The maximum size for each write-ahead log. See comment for property tserver.memory.maps.max<br>**type:** BYTES, **zk mutable:** yes, **default value:** `1g` |
-| <a name="tserver_walog_maximum_wait_duration" class="prop"></a> tserver.walog.maximum.wait.duration | The maximum amount of time to wait after a failure to create a write-ahead log.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `5m` |
-| <a name="tserver_walog_tolerated_creation_failures" class="prop"></a> tserver.walog.tolerated.creation.failures | The maximum number of failures tolerated when creating a new write-ahead log within the period specified by tserver.walog.failures.period. Exceeding this number of failures in the period causes the TabletServer to exit.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `50` |
-| <a name="tserver_walog_tolerated_wait_increment" class="prop"></a> tserver.walog.tolerated.wait.increment | The amount of time to wait between failures to create a WALog.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `1000ms` |
+| <a name="tserver_walog_maximum_wait_duration" class="prop"></a> tserver.walog.maximum.wait.duration | The maximum amount of time to wait after a failure to create or write a write-ahead log.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `5m` |
+| <a name="tserver_walog_tolerated_creation_failures" class="prop"></a> tserver.walog.tolerated.creation.failures | The maximum number of failures tolerated when creating a new write-ahead log. Negative values will allow unlimited creation failures. Exceeding this number of failures consecutively trying to create a new write-ahead log causes the TabletServer to exit.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `50` |
+| <a name="tserver_walog_tolerated_wait_increment" class="prop"></a> tserver.walog.tolerated.wait.increment | The amount of time to wait between failures to create or write a write-ahead log.<br>**type:** TIMEDURATION, **zk mutable:** yes, **default value:** `1000ms` |
 | <a name="tserver_workq_threads" class="prop"></a> tserver.workq.threads | The number of threads for the distributed work queue. These threads are used for copying failed bulk import RFiles.<br>**type:** COUNT, **zk mutable:** yes, **default value:** `2` |
 
 ### Property Types
diff --git a/_docs-2-0/administration/scan-executors.md b/_docs-2-0/administration/scan-executors.md
new file mode 100644
index 0000000..be8d4ec
--- /dev/null
+++ b/_docs-2-0/administration/scan-executors.md
@@ -0,0 +1,114 @@
+---
+title: Scan Executors
+category: administration
+order: 13
+---
+
+Accumulo scans operate by repeatedly fetching batches of data from a [tablet
+server][tserver].  On the tablet server side, a thread pool fetches batches.
+In Java threads pools are called executors.  By default, a single executor per
+tablet server handles all scans in FIFO order.  For some workloads, the single
+FIFO executor is suboptimal.  For example, consider many unimportant scans
+reading lots of data mixed with a few important scans reading small amounts of
+data.  The long scans noticeably increase the latency of the short scans.
+Accumulo offers two mechanisms to help improve situations like this: multiple
+scan executors and per executor prioritizers.  Additional scan executors can
+give tables dedicated resources.  For each scan executor, an optional
+prioritizer can reorder queued work. 
+
+### Configuring and using Scan Executors
+
+By default, Accumulo sets `tserver.scan.executors.default.threads=16` which
+creates the default scan executor.  To configure additional scan executors,
+chose a unique name and configure [tserver.scan.executors.*]({% purl tserver.scan.executors.prefix %}).  Setting
+the following causes each tablet server to create a scan executor with the
+specified threads.  
+
+```
+tserver.scan.executors.<name>.threads=<number>
+```
+
+Optionally, some of the following can be set.  The `priority` setting
+determines thread priority.  The `prioritizer` settings specifies a class that
+orders pending work.  
+
+```
+tserver.scan.executors.<name>.priority=<number 1 to 10>
+tserver.scan.executors.<name>.prioritizer=<class name>
+tserver.scan.executors.<name>.prioritizer.opts.<key>=<value>
+```
+
+After creating an executor, configure {% plink table.scan.dispatcher %} to use it.  A
+dispatcher is Java subclass of {%jlink org.apache.accumulo.core.spi.scan.ScanDispatcher %}
+that decides which scan executor should service a table.  Set the following table 
+property to configure a dispatcher.
+
+```
+table.scan.dispatcher=<class name>
+```
+
+Scan dispatcher options can be set with properties like the following.
+
+```
+table.scan.dispatcher.opts.<key>=<value>
+```
+
+The default value for `table.scan.dispatcher` is {% jlink org.apache.accumulo.core.spi.scan.SimpleScanDispatcher %}.
+SimpleScanDispatcher supports an `executor` option for choosing a scan
+executor.  If this option is not set, then SimpleScanDispatcher will dispatch
+to the scan executor named `default`.  
+
+To to tie everything together, consider the following use case.  
+
+ * Create tables named LOW1 and LOW2 using a scan executor with a single thread.
+ * Create a table named HIGH with a dedicated scan executor with 8 threads.
+ * Create tables named NORM1 and NORM2 using the default scan executor.
+ * Set the default executor to 4 threads.
+
+The following shell commands implement this use case.
+
+```
+createtable LOW1
+createtable LOW2
+createtable HIGH
+createtable NORM1
+createtable NORM2
+config -s tserver.scan.executors.default.threads=4
+config -s tserver.scan.executors.low.threads=1
+config -s tserver.scan.executors.high.threads=8
+```
+
+Tablet servers should be restarted after configuring scan executors, then tables can be configured.
+
+```
+config -t LOW1 -s table.scan.dispatcher.opts.executor=low
+config -t LOW2 -s table.scan.dispatcher.opts.executor=low
+config -t HIGH -s table.scan.dispatcher.opts.executor=high
+```
+
+While not necessary because its the default, it would be safer to also set
+`table.scan.dispatcher=org.apache.accumulo.core.spi.scan.SimpleScanDispatcher`
+for each table.  This ensures things work as expected in the case where
+`table.scan.dispatcher` was set at the system or namespace level.
+
+### Configuring and using Scan Prioritizers.
+
+When all scan executor threads are busy, incoming work is queued.  By
+default this queue has a FIFO order.  A {% jlink org.apache.accumulo.core.spi.scan.ScanPrioritizer %} can be configured to
+reorder the queue.  Accumulo ships with the {% jlink org.apache.accumulo.core.spi.scan.IdleRatioScanPrioritizer %} which
+orders the queue by the ratio of run time to idle time.  For example, a scan
+with a run time of 50ms and an idle time of 200ms would have a ratio of .25.
+If .25 were the lowest ratio on the queue, then it would be the next in line.
+The following configures the IdleRatioScanPrioritizer for the `default` scan
+executor.
+
+```
+tserver.scan.executors.default.prioritizer=org.apache.accumulo.core.spi.scan.IdleRatioScanPrioritizer
+```  
+
+Using the IdleRatioScanPrioritizer in a test with 50 long running scans and 5
+threads repeatedly doing small random lookups made a significant difference.
+In this test the average lookup time for the 5 threads went from 250ms to 5 ms.  
+
+[tserver]: {{ page.docs_baseurl }}/getting-started/design#tablet-server-1
+
diff --git a/_plugins/links.rb b/_plugins/links.rb
index afb2f1a..7757358 100755
--- a/_plugins/links.rb
+++ b/_plugins/links.rb
@@ -20,7 +20,6 @@ def render_javadoc(context, text, url_only)
   short = true
   if not url_only
     args = text.strip.split(' ', 2)
-    print args
     if args[0] == '-f'
       short = false
       clz = args[1]


Mime
View raw message