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 <ke...@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]

Reply via email to