blob: ee727af8e4382ec57c2d544b8dd6df821323c92c [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<meta name="description" content="A new open source Apache Hadoop ecosystem project, Apache Kudu completes Hadoop's storage layer to enable fast analytics on fast data" />
<meta name="author" content="Cloudera" />
<title>Apache Kudu - Apache Kudu 1.3.1 Release Notes</title>
<!-- Bootstrap core CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"
integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7"
crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="/css/kudu.css" rel="stylesheet"/>
<link href="/css/asciidoc.css" rel="stylesheet"/>
<link rel="shortcut icon" href="/img/logo-favicon.ico" />
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css" />
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="kudu-site container-fluid">
<!-- Static navbar -->
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="logo" href="/"><img
src="//d3dr9sfxru4sde.cloudfront.net/i/k/apachekudu_logo_0716_80px.png"
srcset="//d3dr9sfxru4sde.cloudfront.net/i/k/apachekudu_logo_0716_80px.png 1x, //d3dr9sfxru4sde.cloudfront.net/i/k/apachekudu_logo_0716_160px.png 2x"
alt="Apache Kudu"/></a>
</div>
<div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav navbar-right">
<li >
<a href="/">Home</a>
</li>
<li >
<a href="/overview.html">Overview</a>
</li>
<li class="active">
<a href="/docs/">Documentation</a>
</li>
<li >
<a href="/releases/">Releases</a>
</li>
<li >
<a href="/blog/">Blog</a>
</li>
<!-- NOTE: this dropdown menu does not appear on Mobile, so don't add anything here
that doesn't also appear elsewhere on the site. -->
<li class="dropdown">
<a href="/community.html" role="button" aria-haspopup="true" aria-expanded="false">Community <span class="caret"></span></a>
<ul class="dropdown-menu">
<li class="dropdown-header">GET IN TOUCH</li>
<li><a class="icon email" href="/community.html">Mailing Lists</a></li>
<li><a class="icon slack" href="https://getkudu-slack.herokuapp.com/">Slack Channel</a></li>
<li role="separator" class="divider"></li>
<li><a href="/community.html#meetups-user-groups-and-conference-presentations">Events and Meetups</a></li>
<li><a href="/committers.html">Project Committers</a></li>
<li><a href="/ecosystem.html">Ecosystem</a></li>
<!--<li><a href="/roadmap.html">Roadmap</a></li>-->
<li><a href="/community.html#contributions">How to Contribute</a></li>
<li role="separator" class="divider"></li>
<li class="dropdown-header">DEVELOPER RESOURCES</li>
<li><a class="icon github" href="https://github.com/apache/incubator-kudu">GitHub</a></li>
<li><a class="icon gerrit" href="http://gerrit.cloudera.org:8080/#/q/status:open+project:kudu">Gerrit Code Review</a></li>
<li><a class="icon jira" href="https://issues.apache.org/jira/browse/KUDU">JIRA Issue Tracker</a></li>
<li role="separator" class="divider"></li>
<li class="dropdown-header">SOCIAL MEDIA</li>
<li><a class="icon twitter" href="https://twitter.com/ApacheKudu">Twitter</a></li>
<li><a href="https://www.reddit.com/r/kudu/">Reddit</a></li>
<li role="separator" class="divider"></li>
<li class="dropdown-header">APACHE SOFTWARE FOUNDATION</li>
<li><a href="https://www.apache.org/security/" target="_blank">Security</a></li>
<li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank">Sponsorship</a></li>
<li><a href="https://www.apache.org/foundation/thanks.html" target="_blank">Thanks</a></li>
<li><a href="https://www.apache.org/licenses/" target="_blank">License</a></li>
</ul>
</li>
<li >
<a href="/faq.html">FAQ</a>
</li>
</ul><!-- /.nav -->
</div><!-- /#navbar -->
</div><!-- /.container-fluid -->
</nav>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<div class="container">
<div class="row">
<div class="col-md-9">
<h1>Apache Kudu 1.3.1 Release Notes</h1>
<div id="preamble">
<div class="sectionbody">
<div id="rn_1.3.1" class="paragraph">
<p>Apache Kudu 1.3.1 is a bug-fix release which fixes critical issues in Kudu 1.3.0.</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://issues.apache.org/jira/browse/KUDU-1962">KUDU-1962</a>
Fixed a NullPointerException in the Java client in the case that the Kudu master
is overloaded at the time the client requests location information. This could
cause client applications to hang indefinitely regardless of configured timeouts.</p>
</li>
<li>
<p><a href="https://issues.apache.org/jira/browse/KUDU-1963">KUDU-1963</a>
Fixed cases in which the Java client could log NullPointerException or
SSLException stack traces in the case that it was closed while in the process
of connecting to a server.</p>
</li>
<li>
<p><a href="https://issues.apache.org/jira/browse/KUDU-1607">KUDU-1607</a>
Fixed a case in which a tablet replica on a tablet server could retain blocks
of data which prevented it from being fully deleted.</p>
</li>
<li>
<p><a href="https://issues.apache.org/jira/browse/KUDU-1933">KUDU-1933</a>
Fixed an issue in which a tablet server would crash and fail to restart after
a single tablet received more than two billion write operations. Upgrading to
Kudu 1.3.1 or later will allow a server which previously experienced this
issue to restart.</p>
</li>
<li>
<p><a href="https://issues.apache.org/jira/browse/KUDU-1968">KUDU-1968</a>
Fixed an issue in which the tablet server would delete an incorrect set of
data blocks after an aborted attempt to copy a tablet from another server.
This would produce data loss in unrelated tablets.</p>
</li>
</ul>
</div>
</div>
</div>
<h1 id="_apache_kudu_1_3_0_release_notes" class="sect0"><a class="link" href="#_apache_kudu_1_3_0_release_notes">Apache Kudu 1.3.0 Release Notes</a></h1>
<div class="sect1">
<h2 id="rn_1.3.0_new_features"><a class="link" href="#rn_1.3.0_new_features">New features</a></h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p>Kudu 1.3 adds support for strong authentication based on Kerberos. This optional feature
allows users to authenticate themselves using Kerberos tickets, and also provides
mutual authentication of servers using Kerberos credentials stored in keytabs. This
feature is optional, but recommended for deployments requiring security.</p>
</li>
<li>
<p>Kudu 1.3 adds support for encryption of data on the network using Transport Layer Security
(TLS). Kudu will now use TLS to encrypt all network traffic between clients and servers as
well as any internal traffic among servers, with the exception of traffic determined to
be within a localhost network connection. Encryption is enabled by default whenever it can
be determined that both the client and server support the feature.</p>
</li>
<li>
<p>Kudu 1.3 adds coarse-grained service-level authorization of access to the cluster.
The operator may set up lists of permitted users who may act as administrators and
as clients of the cluster. Combined with the strong authentication feature described
above, this can enable a secure environment for some use cases. Note that fine-grained
access control (e.g. table-level or column-level) is not yet supported.</p>
</li>
<li>
<p>Kudu 1.3 adds a background task to tablet servers which removes historical versions of
data which have fallen behind the configured data retention time. This reduces disk space
usage in all workloads, but particularly in those with a higher volume of updates or
upserts.</p>
</li>
<li>
<p>Kudu now incorporates Google Breakpad, a library which writes crash reports in
the case of a server crash. These reports can be found within the configured log directory,
and can be useful during bug diagnosis.</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_optimizations_and_improvements"><a class="link" href="#_optimizations_and_improvements">Optimizations and improvements</a></h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p>Kudu servers will now change the file permissions of data directories and contained
data files based on a new configuration flag <code>--umask</code>. As a result, after upgrading,
permissions on disk may be more restrictive than in previous versions. The new default
configuration improves data security.</p>
</li>
<li>
<p>Kudu&#8217;s web UI will now redact strings which may include sensitive user data. For example,
the monitoring page which shows in-progress scans no longer includes the scanner predicate
values. The tracing and RPC diagnostics endpoints no longer include contents of RPCs which
may include table data.</p>
</li>
<li>
<p>By default, Kudu now reserves 1% of each configured data volume as free space. If a volume
is seen to have less than 1% of disk space free, Kudu will stop writing to that volume
to avoid completely filling up the disk.</p>
</li>
<li>
<p>The default encoding for numeric columns (int, float, and double) has been changed
to <code>BIT_SHUFFLE</code>. The default encoding for binary and string columns has been
changed to <code>DICT_ENCODING</code>. Dictionary encoding automatically falls back to the old
default (<code>PLAIN</code>) when cardinality is too high to be effectively encoded.</p>
<div class="paragraph">
<p>These new defaults match the default behavior of other storage mechanisms such as
Apache Parquet and are likely to perform better out of the box.</p>
</div>
</li>
<li>
<p>Kudu now uses <code>LZ4</code> compression when writing its Write Ahead Log (WAL). This improves
write performance and stability for many use cases.</p>
</li>
<li>
<p>Kudu now uses <code>LZ4</code> compression when writing delta files. This can improve both
read and write performance as well as save substantial disk usage, especially
for workloads involving a high number of updates or upserts containing compressible
data.</p>
</li>
<li>
<p>The Kudu API now supports the ability to express <code>IS NULL</code> and <code>IS NOT NULL</code> predicates
on scanners. The Spark DataSource integration will take advantage of these new
predicates when possible.</p>
</li>
<li>
<p>Both C++ and Java clients have been optimized to prune partitions more effectively
when performing scans using the <code>IN (&#8230;&#8203;)</code> predicate.</p>
</li>
<li>
<p>The exception messages produced by the Java client are now truncated to a maximum length
of 32KB.</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rn_1.3.0_fixed_issues"><a class="link" href="#rn_1.3.0_fixed_issues">Fixed Issues</a></h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p><a href="https://issues.apache.org/jira/browse/KUDU-1893">KUDU-1893</a>
Fixed a critical bug in which wrong results would be returned when evaluating
predicates applied to columns added using the <code>ALTER TABLE</code> operation.</p>
</li>
<li>
<p><a href="https://issues.apache.org/jira/browse/KUDU-1905">KUDU-1905</a>
Fixed a crash after inserting a row sharing a primary key with a recently-deleted
row in tables where the primary key is comprised of all of the columns.</p>
</li>
<li>
<p><a href="https://issues.apache.org/jira/browse/KUDU-1899">KUDU-1899</a>
Fixed a crash after inserting a row with an empty string as the single-column
primary key.</p>
</li>
<li>
<p><a href="https://issues.apache.org/jira/browse/KUDU-1904">KUDU-1904</a>
Fixed a potential crash when performing random reads against a column using RLE
encoding and containing long runs of NULL values.</p>
</li>
<li>
<p><a href="https://issues.apache.org/jira/browse/KUDU-1853">KUDU-1853</a>
Fixed an issue where disk space could be leaked on servers which experienced an error
during the process of copying tablet data from another server.</p>
</li>
</ul>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
The fix for KUDU-1853 resulted in a regression and was reverted in Kudu 1.3.1.
</td>
</tr>
</table>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://issues.apache.org/jira/browse/KUDU-1856">KUDU-1856</a>
Fixed an issue in which disk space could be leaked by Kudu servers storing data on
partitions using the XFS file system. Any leaked disk space will be automatically
recovered upon upgrade.</p>
</li>
<li>
<p><a href="https://issues.apache.org/jira/browse/KUDU-1888">KUDU-1888</a>,
<a href="https://issues.apache.org/jira/browse/KUDU-1906">KUDU-1906</a>
Fixed multiple issues in the Java client where operation callbacks would never be
triggered, causing the client to hang.</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rn_1.3.0_wire_compatibility"><a class="link" href="#rn_1.3.0_wire_compatibility">Wire Protocol compatibility</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Kudu 1.3.0 is wire-compatible with previous versions of Kudu:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Kudu 1.3 clients may connect to servers running Kudu 1.0. If the client uses features
that are not available on the target server, an error will be returned.</p>
</li>
<li>
<p>Kudu 1.0 clients may connect to servers running Kudu 1.3 with the exception of the
below-mentioned restrictions regarding secure clusters.</p>
</li>
<li>
<p>Rolling upgrade between Kudu 1.2 and Kudu 1.3 servers is believed to be possible
though has not been sufficiently tested. Users are encouraged to shut down all nodes
in the cluster, upgrade the software, and then restart the daemons on the new version.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>The authentication features newly introduced in Kudu 1.3 place the following limitations
on wire compatibility with older versions:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>If a Kudu 1.3 cluster is configured with authentication or encryption set to "required",
older clients will be unable to connect.</p>
</li>
<li>
<p>If a Kudu 1.3 cluster is configured with authentication and encryption set to "optional"
or "disabled", older clients will still be able to connect.</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rn_1.3.0_incompatible_changes"><a class="link" href="#rn_1.3.0_incompatible_changes">Incompatible Changes in Kudu 1.3.0</a></h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p>Due to storage format changes in Kudu 1.3, downgrade from Kudu 1.3 to earlier versions
is not supported. After upgrading to Kudu 1.3, attempting to restart with an earlier
version will result in an error.</p>
</li>
<li>
<p>In order to support running MapReduce and Spark jobs on secure clusters, these
frameworks now connect to the cluster at job submission time to retrieve authentication
credentials which can later be used by the tasks to be spawned. This means that
the process submitting jobs to Kudu clusters must have direct access to that cluster.</p>
</li>
<li>
<p>The embedded web servers in Kudu processes now specify the <code>X-Frame-Options: DENY</code> HTTP
header which prevents embedding Kudu web pages in HTML <code>iframe</code> elements.</p>
</li>
</ul>
</div>
<div class="sect2">
<h3 id="rn_1.3.0_client_compatibility"><a class="link" href="#rn_1.3.0_client_compatibility">Client Library Compatibility</a></h3>
<div class="ulist">
<ul>
<li>
<p>The Kudu 1.3 Java client library is API- and ABI-compatible with Kudu 1.2. Applications
written against Kudu 1.2 will compile and run against the Kudu 1.3 client library and
vice-versa, unless one of the following newly added APIs is used:</p>
<div class="ulist">
<ul>
<li>
<p><code>[Async]KuduClient.exportAuthenticationCredentials(&#8230;&#8203;)</code> (unstable API)</p>
</li>
<li>
<p><code>[Async]KuduClient.importAuthenticationCredentials(&#8230;&#8203;)</code> (unstable API)</p>
</li>
<li>
<p><code>[Async]KuduClient.getMasterAddressesAsString()</code></p>
</li>
<li>
<p><code>KuduPredicate.newIsNotNullPredicate()</code></p>
</li>
<li>
<p><code>KuduPredicate.newIsNullPredicate()</code></p>
</li>
</ul>
</div>
</li>
<li>
<p>The Kudu 1.3 C++ client is API- and ABI-forward-compatible with Kudu 1.2.
Applications written and compiled against the Kudu 1.2 client library will run without
modification against the Kudu 1.3 client library. Applications written and compiled
against the Kudu 1.3 client library will run without modification against the Kudu 1.2
client library unless they use one of the following new APIs:</p>
<div class="ulist">
<ul>
<li>
<p><code>kudu::DisableOpenSSLInitialization()</code></p>
</li>
<li>
<p><code>KuduClientBuilder::import_authentication_credentials(&#8230;&#8203;)</code></p>
</li>
<li>
<p><code>KuduClient::ExportAuthenticationCredentials(&#8230;&#8203;)</code></p>
</li>
<li>
<p><code>KuduClient::NewIsNotNullPredicate(&#8230;&#8203;)</code></p>
</li>
<li>
<p><code>KuduClient::NewIsNullPredicate(&#8230;&#8203;)</code></p>
</li>
</ul>
</div>
</li>
<li>
<p>The Kudu 1.3 Python client is API-compatible with Kudu 1.2. Applications
written against Kudu 1.2 will continue to run against the Kudu 1.3 client
and vice-versa.</p>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rn_1.3.0_known_issues"><a class="link" href="#rn_1.3.0_known_issues">Known Issues and Limitations</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Please refer to the <a href="known_issues.html">Known Issues and Limitations</a> section of the
documentation.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="resources_and_next_steps"><a class="link" href="#resources_and_next_steps">Resources</a></h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p><a href="http://kudu.apache.org">Kudu Website</a></p>
</li>
<li>
<p><a href="http://github.com/apache/kudu">Kudu GitHub Repository</a></p>
</li>
<li>
<p><a href="index.html">Kudu Documentation</a></p>
</li>
<li>
<p><a href="prior_release_notes.html">Release notes for older releases</a></p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_installation_options"><a class="link" href="#_installation_options">Installation Options</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>For full installation details, see <a href="installation.html">Kudu Installation</a>.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_next_steps"><a class="link" href="#_next_steps">Next Steps</a></h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p><a href="quickstart.html">Kudu Quickstart</a></p>
</li>
<li>
<p><a href="installation.html">Installing Kudu</a></p>
</li>
<li>
<p><a href="configuration.html">Configuring Kudu</a></p>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="col-md-3">
<div id="toc" data-spy="affix" data-offset-top="70">
<ul>
<li>
<a href="index.html">Introducing Kudu</a>
</li>
<li>
<span class="active-toc">Kudu Release Notes</span>
<ul class="sectlevel0">
<li><a href="#_apache_kudu_1_3_0_release_notes">Apache Kudu 1.3.0 Release Notes</a>
<ul class="sectlevel1">
<li><a href="#rn_1.3.0_new_features">New features</a></li>
<li><a href="#_optimizations_and_improvements">Optimizations and improvements</a></li>
<li><a href="#rn_1.3.0_fixed_issues">Fixed Issues</a></li>
<li><a href="#rn_1.3.0_wire_compatibility">Wire Protocol compatibility</a></li>
<li><a href="#rn_1.3.0_incompatible_changes">Incompatible Changes in Kudu 1.3.0</a>
<ul class="sectlevel2">
<li><a href="#rn_1.3.0_client_compatibility">Client Library Compatibility</a></li>
</ul>
</li>
<li><a href="#rn_1.3.0_known_issues">Known Issues and Limitations</a></li>
<li><a href="#resources_and_next_steps">Resources</a></li>
<li><a href="#_installation_options">Installation Options</a></li>
<li><a href="#_next_steps">Next Steps</a></li>
</ul>
</li>
</ul>
</li>
<li>
<a href="quickstart.html">Getting Started with Kudu</a>
</li>
<li>
<a href="installation.html">Installation Guide</a>
</li>
<li>
<a href="configuration.html">Configuring Kudu</a>
</li>
<li>
<a href="kudu_impala_integration.html">Using Impala with Kudu</a>
</li>
<li>
<a href="administration.html">Administering Kudu</a>
</li>
<li>
<a href="troubleshooting.html">Troubleshooting Kudu</a>
</li>
<li>
<a href="developing.html">Developing Applications with Kudu</a>
</li>
<li>
<a href="schema_design.html">Kudu Schema Design</a>
</li>
<li>
<a href="transaction_semantics.html">Kudu Transaction Semantics</a>
</li>
<li>
<a href="background_tasks.html">Background Maintenance Tasks</a>
</li>
<li>
<a href="configuration_reference.html">Kudu Configuration Reference</a>
</li>
<li>
<a href="known_issues.html">Known Issues and Limitations</a>
</li>
<li>
<a href="contributing.html">Contributing to Kudu</a>
</li>
<li>
<a href="export_control.html">Export Control Notice</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<footer class="footer">
<div class="row">
<div class="col-md-9">
<p class="small">
Copyright &copy; 2020 The Apache Software Foundation. Last updated 2017-04-18 21:59:13 PDT
</p>
<p class="small">
Apache Kudu, Kudu, Apache, the Apache feather logo, and the Apache Kudu
project logo are either registered trademarks or trademarks of The
Apache Software Foundation in the United States and other countries.
</p>
</div>
<div class="col-md-3">
<a class="pull-right" href="https://www.apache.org/events/current-event.html">
<img src="https://www.apache.org/events/current-event-234x60.png"/>
</a>
</div>
</div>
</footer>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
// Try to detect touch-screen devices. Note: Many laptops have touch screens.
$(document).ready(function() {
if ("ontouchstart" in document.documentElement) {
$(document.documentElement).addClass("touch");
} else {
$(document.documentElement).addClass("no-touch");
}
});
</script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"
integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS"
crossorigin="anonymous"></script>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-68448017-1', 'auto');
ga('send', 'pageview');
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/anchor-js/3.1.0/anchor.js"></script>
<script>
anchors.options = {
placement: 'right',
visible: 'touch',
};
anchors.add();
</script>
</body>
</html>