| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="utf-8"> |
| <meta name="viewport" content="width=device-width,initial-scale=1.0"> |
| <title>Read repair | Apache Cassandra Documentation</title> |
| <link rel="stylesheet" href="../../../../assets/css/site.css"> |
| <link rel="schema.dcterms" href="https://purl.org/dc/terms/"> |
| <meta name="dcterms.subject" content="Cassandra"> |
| <meta name="dcterms.identifier" content="4.0"> |
| <meta name="generator" content="Antora 2.3.4"> |
| <link rel="icon" href="../../../../assets/img/favicon.ico" type="image/x-icon"> |
| <script> |
| const script = document.createElement("script"); |
| const domain = window.location.hostname; |
| script.type = "text/javascript"; |
| script.src = "https://plausible.cassandra.apache.org/js/plausible.js"; |
| script.setAttribute("data-domain",domain); |
| script.setAttribute("defer",'true'); |
| script.setAttribute("async",'true'); |
| document.getElementsByTagName("head")[0].appendChild(script); |
| </script> </head> |
| <body class="docs-wrapper article"> |
| <div class="container mx-auto relative"> |
| <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> |
| <meta property="og:type" content="website" /> |
| <meta property="og:url" content="/" /> |
| <meta property="og:site_name" content="Apache Cassandra" /> |
| |
| <header id="top-nav"> |
| <div class="inner relative"> |
| <div class="header-social-icons text-right"> |
| <a href="https://twitter.com/cassandra?lang=en" target="_blank" styles="margin-left: 20px;"><img src="../../../../assets/img/twitter-icon-circle-white.svg" alt="twitter icon" width="24"></a> |
| <a href="https://www.linkedin.com/company/apache-cassandra/" target="_blank" styles="margin-left: 20px;"><img src="../../../../assets/img/LI-In-Bug.png" alt="linked-in icon" width="24"></a> |
| <a href="https://www.youtube.com/c/PlanetCassandra" target="_blank" styles="margin-left: 20px;"><img src="../../../../assets/img/youtube-icon.png" alt="youtube icon" width="24"></a> |
| </div> |
| <div class="cf"> |
| <div class="logo left"><a href="/"><img src="../../../../assets/img/logo-white-r.png" alt="Cassandra Logo"></a></div> |
| <div class="mobile-nav-icon right"> |
| <img class="toggle-icon" src="../../../../assets/img/hamburger-nav.svg"> |
| </div> |
| <ul class="main-nav nav-links right flex flex-vert-center flex-space-between"> |
| <li> |
| <a class="nav-link hide-mobile">Get Started</a> |
| <ul class="sub-menu bg-white"> |
| <li class="pa-micro"> |
| <a href="/_/cassandra-basics.html"> |
| <div class="sub-nav-icon"> |
| <img src="../../../../assets/img/sub-menu-basics.png" alt="cassandra basics icon"> |
| </div> |
| <div class="sub-nav-text teal py-small"> |
| Cassandra Basics |
| </div> |
| </a> |
| </li> |
| <li class="pa-micro"> |
| <a href="/_/quickstart.html"> |
| <div class="sub-nav-icon"> |
| <img src="../../../../assets/img/sub-menu-rocket.png" alt="cassandra basics icon"> |
| </div> |
| <div class="sub-nav-text teal py-small"> |
| Quickstart |
| </div> |
| </a> |
| </li> |
| <li class="pa-micro"> |
| <a href="/_/ecosystem.html"> |
| <div class="sub-nav-icon"> |
| <img src="../../../../assets/img/sub-menu-ecosystem.png" alt="cassandra basics icon"> |
| </div> |
| <div class="sub-nav-text teal py-small"> |
| Ecosystem |
| </div> |
| </a> |
| </li> |
| </ul> |
| </li> |
| <li><a class="nav-link" href="/doc/latest/">Documentation</a></li> |
| <li> |
| <a class="nav-link" href="/_/community.html">Community</a> |
| <ul class="sub-menu bg-white"> |
| <li class="pa-micro"> |
| <a href="/_/community.html#code-of-conduct"> |
| <div class="sub-nav-icon"> |
| <img src="../../../../assets/img/sub-menu-welcome.png" alt="welcome icon"> |
| </div> |
| <div class="sub-nav-text teal py-small"> |
| Welcome |
| </div> |
| </a> |
| </li> |
| <li class="pa-micro hide-mobile"> |
| <a href="/_/community.html#discussions"> |
| <div class="sub-nav-icon"> |
| <img src="../../../../assets/img/sub-menu-discussions.png" alt="discussions icon"> |
| </div> |
| <div class="sub-nav-text teal py-small"> |
| Discussions |
| </div> |
| </a> |
| </li> |
| <li class="pa-micro hide-mobile"> |
| <a href="/_/community.html#project-governance"> |
| <div class="sub-nav-icon"> |
| <img src="../../../../assets/img/sub-menu-governance.png" alt="Governance icon"> |
| </div> |
| <div class="sub-nav-text teal py-small"> |
| Governance |
| </div> |
| </a> |
| </li> |
| <li class="pa-micro hide-mobile"> |
| <a href="/_/community.html#how-to-contribute"> |
| <div class="sub-nav-icon"> |
| <img src="../../../../assets/img/sub-menu-contribute.png" alt="Contribute icon"> |
| </div> |
| <div class="sub-nav-text teal py-small"> |
| Contribute |
| </div> |
| </a> |
| </li> |
| <li class="pa-micro hide-mobile"> |
| <a href="/_/community.html#meet-the-community"> |
| <div class="sub-nav-icon"> |
| <img src="../../../../assets/img/sub-menu-community.png" alt="Meet the Community icon"> |
| </div> |
| <div class="sub-nav-text teal py-small"> |
| Meet the Community |
| </div> |
| </a> |
| </li> |
| <li class="pa-micro hide-mobile"> |
| <a href="/_/cassandra-catalyst-program.html"> |
| <div class="sub-nav-icon"> |
| <img src="../../../../assets/img/sub-menu-catalyst.png" alt="Catalyst icon"> |
| </div> |
| <div class="sub-nav-text teal py-small"> |
| Catalyst Program |
| </div> |
| </a> |
| </li> |
| <li class="pa-micro hide-mobile"> |
| <a href="/_/events.html"> |
| <div class="sub-nav-icon"> |
| <img src="../../../../assets/img/sub-menu-events.png" alt="Events icon"> |
| </div> |
| <div class="sub-nav-text teal py-small"> |
| Events |
| </div> |
| </a> |
| </li> |
| </ul> |
| </li> |
| <li> |
| <a class="nav-link hide-mobile">Learn</a> |
| <ul class="sub-menu bg-white"> |
| <li class="pa-micro"> |
| <a href="/_/Apache-Cassandra-5.0-Moving-Toward-an-AI-Driven-Future.html"> |
| <div class="sub-nav-icon"> |
| <img src="../../../../assets/img/sub-menu-basics.png" alt="Basics icon"> |
| </div> |
| <div class="sub-nav-text teal py-small"> |
| Cassandra 5.0 |
| </div> |
| </a> |
| </li> |
| <li class="pa-micro"> |
| <a href="/_/case-studies.html"> |
| <div class="sub-nav-icon"> |
| <img src="../../../../assets/img/sub-menu-case-study.png" alt="Case Studies icon"> |
| </div> |
| <div class="sub-nav-text teal py-small"> |
| Case Studies |
| </div> |
| </a> |
| </li> |
| <li class="pa-micro"> |
| <a href="/_/resources.html"> |
| <div class="sub-nav-icon"> |
| <img src="../../../../assets/img/sub-menu-resources.png" alt="Resources icon"> |
| </div> |
| <div class="sub-nav-text teal py-small"> |
| Resources |
| </div> |
| </a> |
| </li> |
| <li class="pa-micro"> |
| <a href="/_/blog.html"> |
| <div class="sub-nav-icon"> |
| <img src="../../../../assets/img/sub-menu-blog.png" alt="Blog icon"> |
| </div> |
| <div class="sub-nav-text teal py-small"> |
| Blog |
| </div> |
| </a> |
| </li> |
| </ul> |
| </li> |
| <li><a class="nav-link btn btn--filled" href="/_/download.html">Download Now</a></li> |
| </ul> |
| </div> |
| </div> |
| </header> |
| |
| <div class="hero hero--home grad"> |
| <div class="eye"></div> |
| <div id="docs-content" class="text-center flex flex-center flex-column relative z2 ma-xlarge"> |
| <h2>Cassandra Documentation</h2> |
| </div> |
| </div> |
| <div class="body px-medium py-medium container"> |
| <div class="docs-nav-bar flex flex-space-between mb-medium"> |
| <div id="mobile-docs-nav-burger" class="hidden"> |
| <svg viewBox="0 0 24 24" width="36" height="36" stroke="#1c81a0" stroke-width="2.5" fill="none" stroke-linecap="round" stroke-linejoin="round" class="css-i6dzq1"><line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line></svg> |
| </div> |
| <div class="docs-nav-item relative"> |
| <input id="search-input" type="text" placeholder="Search docs"> |
| </div> |
| <div class="versions-wrapper"> |
| <h4>Version:</h4> |
| <div class="nav-panel-explore" data-panel="explore"> |
| |
| <div id="version-toggle" class="context"> |
| <span class="version">4.0</span> |
| </div> |
| <ul id="versions-list" class="components"> |
| <li class="component"> |
| <ul class="versions"> |
| <li class="version is-latest"> |
| <a href="../../../../_/index.html">master</a> |
| </li> |
| </ul> |
| </li> |
| <li class="component is-current"> |
| <ul class="versions"> |
| <li class="version"> |
| <a href="../../../trunk/index.html">trunk</a> |
| </li> |
| <li class="version"> |
| <a href="../../../5.0/index.html">5.0</a> |
| </li> |
| <li class="version is-latest"> |
| <a href="../../../4.1/index.html">4.1</a> |
| </li> |
| <li class="version is-current"> |
| <a href="../../index.html">4.0</a> |
| </li> |
| <li class="version"> |
| <a href="../../../3.11/index.html">3.11</a> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| </div> |
| </div> </div> |
| <div class="cf relative"> |
| <nav class="nav docs-nav full-800"> |
| <div class="nav-menu"> |
| <ul class="nav-list"> |
| <li class="nav-item is-active" data-depth="0"> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="1"> |
| <span class="nav-line"> |
| <button class="nav-toggle"></button> |
| <a class="nav-link" href="../../index.html">Main</a> |
| </span> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="2"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../../../../_/glossary.html">Glossary</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../../../../_/bugs.html">How to report bugs</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../../../../_/contactus.html">Contact us</a> |
| </span> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li class="nav-item is-active" data-depth="0"> |
| <ul class="nav-list"> |
| <li class="nav-item is-current-path is-active" data-depth="1"> |
| <span class="nav-line"> |
| <button class="nav-toggle"></button> |
| <span class="nav-text">Cassandra</span> |
| </span> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="2"> |
| <span class="nav-line"> |
| <button class="nav-toggle"></button> |
| <a class="nav-link" href="../getting_started/index.html">Getting Started</a> |
| </span> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../getting_started/installing.html">Installing Cassandra</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../getting_started/configuring.html">Configuring Cassandra</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../getting_started/querying.html">Inserting and querying</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../getting_started/drivers.html">Client drivers</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../getting_started/production.html">Production recommendations</a> |
| </span> |
| </li> |
| </ul> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <span class="nav-line"> |
| <button class="nav-toggle"></button> |
| <a class="nav-link" href="../new/index.html">What’s new</a> |
| </span> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../new/java11.html">Support for Java 11</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../new/virtualtables.html">Virtual tables</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../new/auditlogging.html">Audit logging</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../new/fqllogging.html">Full query logging</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../new/messaging.html">Improved internode Messaging</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../new/streaming.html">Improved streaming</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../new/transientreplication.html">Transient replication</a> |
| </span> |
| </li> |
| </ul> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <span class="nav-line"> |
| <button class="nav-toggle"></button> |
| <a class="nav-link" href="../architecture/index.html">Architecture</a> |
| </span> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../architecture/overview.html">Overview</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../architecture/dynamo.html">Dynamo</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../architecture/storage_engine.html">Storage engine</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../architecture/guarantees.html">Guarantees</a> |
| </span> |
| </li> |
| </ul> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <span class="nav-line"> |
| <button class="nav-toggle"></button> |
| <a class="nav-link" href="../data_modeling/index.html">Data modeling</a> |
| </span> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../data_modeling/intro.html">Introduction</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../data_modeling/data_modeling_conceptual.html">Conceptual data modeling</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../data_modeling/data_modeling_rdbms.html">RDBMS design</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../data_modeling/data_modeling_queries.html">Defining application queries</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../data_modeling/data_modeling_logical.html">Logical data modeling</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../data_modeling/data_modeling_physical.html">Physical data modeling</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../data_modeling/data_modeling_refining.html">Evaluating and refining data models</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../data_modeling/data_modeling_schema.html">Defining database schema</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../data_modeling/data_modeling_tools.html">Cassandra data modeling tools</a> |
| </span> |
| </li> |
| </ul> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <span class="nav-line"> |
| <button class="nav-toggle"></button> |
| <a class="nav-link" href="../cql/index.html">Cassandra Query Language (CQL)</a> |
| </span> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../cql/definitions.html">Definitions</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../cql/types.html">Data types</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../cql/ddl.html">Data definition (DDL)</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../cql/dml.html">Data manipulation (DML)</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../cql/operators.html">Operators</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../cql/indexes.html">Secondary indexes</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../cql/mvs.html">Materialized views</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../cql/functions.html">Functions</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../cql/json.html">JSON</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../cql/security.html">Security</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../cql/triggers.html">Triggers</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../cql/appendices.html">Appendices</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../cql/changes.html">Changes</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../cql/SASI.html">SASI</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../cql/cql_singlefile.html">Single file of CQL information</a> |
| </span> |
| </li> |
| </ul> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <span class="nav-line"> |
| <button class="nav-toggle"></button> |
| <a class="nav-link" href="../configuration/index.html">Configuration</a> |
| </span> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../configuration/cass_yaml_file.html">cassandra.yaml</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../configuration/cass_rackdc_file.html">cassandra-rackdc.properties</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../configuration/cass_env_sh_file.html">cassandra-env.sh</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../configuration/cass_topo_file.html">cassandra-topologies.properties</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../configuration/cass_cl_archive_file.html">commitlog-archiving.properties</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../configuration/cass_logback_xml_file.html">logback.xml</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../configuration/cass_jvm_options_file.html">jvm-* files</a> |
| </span> |
| </li> |
| </ul> |
| </li> |
| <li class="nav-item is-current-path is-active" data-depth="2"> |
| <span class="nav-line"> |
| <button class="nav-toggle"></button> |
| <a class="nav-link" href="index.html">Operating</a> |
| </span> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="#operating/snitch.adoc">Snitches</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="topo_changes.html">Topology changes</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="repair.html">Repair</a> |
| </span> |
| </li> |
| <li class="nav-item is-current-page is-active" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="read_repair.html">Read repair</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="hints.html">Hints</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="bloom_filters.html">Bloom filters</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="compression.html">Compression</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="cdc.html">Change Data Capture (CDC)</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="backups.html">Backups</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="bulk_loading.html">Bulk loading</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="metrics.html">Metrics</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="security.html">Security</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="hardware.html">Hardware</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="audit_logging.html">Audit logging</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="compaction/index.html">Compaction</a> |
| </span> |
| </li> |
| </ul> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <span class="nav-line"> |
| <button class="nav-toggle"></button> |
| <a class="nav-link" href="../tools/index.html">Tools</a> |
| </span> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../tools/cqlsh.html">cqlsh: the CQL shell</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../tools/nodetool/nodetool.html">nodetool</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../tools/sstable/index.html">SSTable tools</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../tools/cassandra_stress.html">cassandra-stress</a> |
| </span> |
| </li> |
| </ul> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <span class="nav-line"> |
| <button class="nav-toggle"></button> |
| <a class="nav-link" href="../troubleshooting/index.html">Troubleshooting</a> |
| </span> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../troubleshooting/finding_nodes.html">Finding misbehaving nodes</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../troubleshooting/reading_logs.html">Reading Cassandra logs</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../troubleshooting/use_nodetool.html">Using nodetool</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../troubleshooting/use_tools.html">Using external tools to deep-dive</a> |
| </span> |
| </li> |
| </ul> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <span class="nav-line"> |
| <button class="nav-toggle"></button> |
| <a class="nav-link" href="../../../../_/development/index.html">Development</a> |
| </span> |
| <ul class="nav-list"> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../../../../_/development/gettingstarted.html">Getting started</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../../../../_/development/ide.html">Building and IDE integration</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../../../../_/development/testing.html">Testing</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../../../../_/development/patches.html">Contributing code changes</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../../../../_/development/code_style.html">Code style</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../../../../_/development/how_to_review.html">Review checklist</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../../../../_/development/how_to_commit.html">How to commit</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../../../../_/development/documentation.html">Working on documentation</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../../../../_/development/ci.html">Jenkins CI environment</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../../../../_/development/dependencies.html">Dependency management</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="3"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../../../../_/development/release_process.html">Release process</a> |
| </span> |
| </li> |
| </ul> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../faq/index.html">FAQ</a> |
| </span> |
| </li> |
| <li class="nav-item" data-depth="2"> |
| <span class="nav-line"> |
| <a class="nav-link" href="../plugins/index.html">Plug-ins</a> |
| </span> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| </div> |
| </nav> |
| <aside class="toc sidebar"> |
| <div class="toc-menu"></div> |
| </aside> |
| <main class="article default-main full-800" data-ceiling="topbar"> |
| <div class="article-banner"> |
| <p>A newer version of this documentation is available.</p> |
| <a class="btn" href="../../../4.1/cassandra/operating/read_repair.html">View Latest</a> |
| </div> |
| <div class="article-header"> |
| <nav class="crumbs" aria-label="breadcrumbs"> |
| <ul> |
| <li class="crumb">Cassandra</li> |
| <li class="crumb"><a href="index.html">Operating</a></li> |
| <li class="crumb"><a href="read_repair.html">Read repair</a></li> |
| </ul> |
| </nav> |
| <div class="tools" role="navigation"> |
| <ul> |
| <li class="tool edit"><a href="https://github.com/apache/cassandra/edit/cassandra-4.0/doc/modules/cassandra/pages/operating/read_repair.adoc" title="Edit Page" target="_blank" rel="noopener">Edit</a></li> |
| </ul> |
| </div> |
| </div> |
| <article class="doc"> |
| <h1 class="page">Read repair</h1> |
| <div id="preamble"> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>Read Repair is the process of repairing data replicas during a read |
| request. If all replicas involved in a read request at the given read |
| consistency level are consistent the data is returned to the client and |
| no read repair is needed. But if the replicas involved in a read request |
| at the given consistency level are not consistent a read repair is |
| performed to make replicas involved in the read request consistent. The |
| most up-to-date data is returned to the client. The read repair runs in |
| the foreground and is blocking in that a response is not returned to the |
| client until the read repair has completed and up-to-date data is |
| constructed.</p> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="expectation-of-monotonic-quorum-reads"><a class="anchor" href="#expectation-of-monotonic-quorum-reads"></a>Expectation of Monotonic Quorum Reads</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>Cassandra uses a blocking read repair to ensure the expectation of |
| "monotonic quorum reads" i.e. that in 2 successive quorum reads, it’s |
| guaranteed the 2nd one won’t get something older than the 1st one, and |
| this even if a failed quorum write made a write of the most up to date |
| value only to a minority of replicas. "Quorum" means majority of nodes |
| among replicas.</p> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="table-level-configuration-of-monotonic-reads"><a class="anchor" href="#table-level-configuration-of-monotonic-reads"></a>Table level configuration of monotonic reads</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>Cassandra 4.0 adds support for table level configuration of monotonic |
| reads |
| (<a href="https://issues.apache.org/jira/browse/CASSANDRA-14635">CASSANDRA-14635</a>). |
| The <code>read_repair</code> table option has been added to table schema, with the |
| options <code>blocking</code> (default), and <code>none</code>.</p> |
| </div> |
| <div class="paragraph"> |
| <p>The <code>read_repair</code> option configures the read repair behavior to allow |
| tuning for various performance and consistency behaviors. Two |
| consistency properties are affected by read repair behavior.</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>Monotonic Quorum Reads: Provided by <code>BLOCKING</code>. Monotonic quorum reads |
| prevents reads from appearing to go back in time in some circumstances. |
| When monotonic quorum reads are not provided and a write fails to reach |
| a quorum of replicas, it may be visible in one read, and then disappear |
| in a subsequent read.</p> |
| </li> |
| <li> |
| <p>Write Atomicity: Provided by <code>NONE</code>. Write atomicity prevents reads |
| from returning partially applied writes. Cassandra attempts to provide |
| partition level write atomicity, but since only the data covered by a |
| <code>SELECT</code> statement is repaired by a read repair, read repair can break |
| write atomicity when data is read at a more granular level than it is |
| written. For example read repair can break write atomicity if you write |
| multiple rows to a clustered partition in a batch, but then select a |
| single row by specifying the clustering column in a <code>SELECT</code> statement.</p> |
| </li> |
| </ul> |
| </div> |
| <div class="paragraph"> |
| <p>The available read repair settings are:</p> |
| </div> |
| <div class="sect2"> |
| <h3 id="blocking"><a class="anchor" href="#blocking"></a>Blocking</h3> |
| <div class="paragraph"> |
| <p>The default setting. When <code>read_repair</code> is set to <code>BLOCKING</code>, and a read |
| repair is started, the read will block on writes sent to other replicas |
| until the CL is reached by the writes. Provides monotonic quorum reads, |
| but not partition level write atomicity.</p> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="none"><a class="anchor" href="#none"></a>None</h3> |
| <div class="paragraph"> |
| <p>When <code>read_repair</code> is set to <code>NONE</code>, the coordinator will reconcile any |
| differences between replicas, but will not attempt to repair them. |
| Provides partition level write atomicity, but not monotonic quorum |
| reads.</p> |
| </div> |
| <div class="paragraph"> |
| <p>An example of using the <code>NONE</code> setting for the <code>read_repair</code> option is |
| as follows:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlightjs highlight"><code class="language-none hljs" data-lang="none">CREATE TABLE ks.tbl (k INT, c INT, v INT, PRIMARY KEY (k,c)) with read_repair='NONE'");</code></pre> |
| </div> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="read-repair-example"><a class="anchor" href="#read-repair-example"></a>Read Repair Example</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>To illustrate read repair with an example, consider that a client sends |
| a read request with read consistency level <code>TWO</code> to a 5-node cluster as |
| illustrated in Figure 1. Read consistency level determines how many |
| replica nodes must return a response before the read request is |
| considered successful.</p> |
| </div> |
| <div class="imageblock"> |
| <div class="content"> |
| <img src="../_images/Figure_1_read_repair.jpg" alt="image"> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>Figure 1. Client sends read request to a 5-node Cluster</p> |
| </div> |
| <div class="paragraph"> |
| <p>Three nodes host replicas for the requested data as illustrated in |
| Figure 2. With a read consistency level of <code>TWO</code> two replica nodes must |
| return a response for the read request to be considered successful. If |
| the node the client sends request to hosts a replica of the data |
| requested only one other replica node needs to be sent a read request |
| to. But if the receiving node does not host a replica for the requested |
| data the node becomes a coordinator node and forwards the read request |
| to a node that hosts a replica. A direct read request is forwarded to |
| the fastest node (as determined by dynamic snitch) as shown in Figure 2. |
| A direct read request is a full read and returns the requested data.</p> |
| </div> |
| <div class="imageblock"> |
| <div class="content"> |
| <img src="../_images/Figure_2_read_repair.jpg" alt="image"> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>Figure 2. Direct Read Request sent to Fastest Replica Node</p> |
| </div> |
| <div class="paragraph"> |
| <p>Next, the coordinator node sends the requisite number of additional |
| requests to satisfy the consistency level, which is <code>TWO</code>. The |
| coordinator node needs to send one more read request for a total of two. |
| All read requests additional to the first direct read request are digest |
| read requests. A digest read request is not a full read and only returns |
| the hash value of the data. Only a hash value is returned to reduce the |
| network data traffic. In the example being discussed the coordinator |
| node sends one digest read request to a node hosting a replica as |
| illustrated in Figure 3.</p> |
| </div> |
| <div class="imageblock"> |
| <div class="content"> |
| <img src="../_images/Figure_3_read_repair.jpg" alt="image"> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>Figure 3. Coordinator Sends a Digest Read Request</p> |
| </div> |
| <div class="paragraph"> |
| <p>The coordinator node has received a full copy of data from one node and |
| a hash value for the data from another node. To compare the data |
| returned a hash value is calculated for the full copy of data. The two |
| hash values are compared. If the hash values are the same no read repair |
| is needed and the full copy of requested data is returned to the client. |
| The coordinator node only performed a total of two replica read request |
| because the read consistency level is <code>TWO</code> in the example. If the |
| consistency level were higher such as <code>THREE</code>, three replica nodes would |
| need to respond to a read request and only if all digest or hash values |
| were to match with the hash value of the full copy of data would the |
| read request be considered successful and the data returned to the |
| client.</p> |
| </div> |
| <div class="paragraph"> |
| <p>But, if the hash value/s from the digest read request/s are not the same |
| as the hash value of the data from the full read request of the first |
| replica node it implies that an inconsistency in the replicas exists. To |
| fix the inconsistency a read repair is performed.</p> |
| </div> |
| <div class="paragraph"> |
| <p>For example, consider that that digest request returns a hash value that |
| is not the same as the hash value of the data from the direct full read |
| request. We would need to make the replicas consistent for which the |
| coordinator node sends a direct (full) read request to the replica node |
| that it sent a digest read request to earlier as illustrated in Figure |
| 4.</p> |
| </div> |
| <div class="imageblock"> |
| <div class="content"> |
| <img src="../_images/Figure_4_read_repair.jpg" alt="image"> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>Figure 4. Coordinator sends Direct Read Request to Replica Node it had |
| sent Digest Read Request to</p> |
| </div> |
| <div class="paragraph"> |
| <p>After receiving the data from the second replica node the coordinator |
| has data from two of the replica nodes. It only needs two replicas as |
| the read consistency level is <code>TWO</code> in the example. Data from the two |
| replicas is compared and based on the timestamps the most recent replica |
| is selected. Data may need to be merged to construct an up-to-date copy |
| of data if one replica has data for only some of the columns. In the |
| example, if the data from the first direct read request is found to be |
| outdated and the data from the second full read request to be the latest |
| read, repair needs to be performed on Replica 2. If a new up-to-date |
| data is constructed by merging the two replicas a read repair would be |
| needed on both the replicas involved. For example, a read repair is |
| performed on Replica 2 as illustrated in Figure 5.</p> |
| </div> |
| <div class="imageblock"> |
| <div class="content"> |
| <img src="../_images/Figure_5_read_repair.jpg" alt="image"> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>Figure 5. Coordinator performs Read Repair</p> |
| </div> |
| <div class="paragraph"> |
| <p>The most up-to-date data is returned to the client as illustrated in |
| Figure 6. From the three replicas Replica 1 is not even read and thus |
| not repaired. Replica 2 is repaired. Replica 3 is the most up-to-date |
| and returned to client.</p> |
| </div> |
| <div class="imageblock"> |
| <div class="content"> |
| <img src="../_images/Figure_6_read_repair.jpg" alt="image"> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>Figure 6. Most up-to-date Data returned to Client</p> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="read-consistency-level-and-read-repair"><a class="anchor" href="#read-consistency-level-and-read-repair"></a>Read Consistency Level and Read Repair</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>The read consistency is most significant in determining if a read repair |
| needs to be performed. As discussed in Table 1 a read repair is not |
| needed for all of the consistency levels.</p> |
| </div> |
| <div class="paragraph"> |
| <p>Table 1. Read Repair based on Read Consistency Level</p> |
| </div> |
| <table class="tableblock frame-all grid-all" style="width: 93%;"> |
| <colgroup> |
| <col style="width: 35%;"> |
| <col style="width: 65%;"> |
| </colgroup> |
| <thead> |
| <tr> |
| <th class="tableblock halign-left valign-top">Read Consistency Level</th> |
| <th class="tableblock halign-left valign-top">Description</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">ONE</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Read repair is not performed as the data from the first direct |
| read request satisfies the consistency level ONE. No digest read |
| requests are involved for finding mismatches in data.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">TWO</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Read repair is performed if inconsistencies in data are found as |
| determined by the direct and digest read requests.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">THREE</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Read repair is performed if inconsistencies in data are found as |
| determined by the direct and digest read requests.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">LOCAL_ONE</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Read repair is not performed as the data from the direct |
| read request from the closest replica satisfies the consistency level |
| LOCAL_ONE.No digest read requests are involved for finding mismatches in |
| data.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">LOCAL_QUORUM</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Read repair is performed if inconsistencies in data are |
| found as determined by the direct and digest read requests.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">QUORUM</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Read repair is performed if inconsistencies in data are found |
| as determined by the direct and digest read requests.</p></td> |
| </tr> |
| </tbody> |
| </table> |
| <div class="paragraph"> |
| <p>If read repair is performed it is made only on the replicas that are not |
| up-to-date and that are involved in the read request. The number of |
| replicas involved in a read request would be based on the read |
| consistency level; in the example it is two.</p> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="improved-read-repair-blocking-behavior-in-cassandra-4-0"><a class="anchor" href="#improved-read-repair-blocking-behavior-in-cassandra-4-0"></a>Improved Read Repair Blocking Behavior in Cassandra 4.0</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>Cassandra 4.0 makes two improvements to read repair blocking behavior |
| (<a href="https://issues.apache.org/jira/browse/CASSANDRA-10726">CASSANDRA-10726</a>).</p> |
| </div> |
| <div class="olist arabic"> |
| <ol class="arabic"> |
| <li> |
| <p>Speculative Retry of Full Data Read Requests. Cassandra 4.0 makes use |
| of speculative retry in sending read requests (full, not digest) to |
| replicas if a full data response is not received, whether in the initial |
| full read request or a full data read request during read repair. With |
| speculative retry if it looks like a response may not be received from |
| the initial set of replicas Cassandra sent messages to, to satisfy the |
| consistency level, it speculatively sends additional read request to |
| un-contacted replica/s. Cassandra 4.0 will also speculatively send a |
| repair mutation to a minority of nodes not involved in the read repair |
| data read / write cycle with the combined contents of all |
| un-acknowledged mutations if it looks like one may not respond. |
| Cassandra accepts acks from them in lieu of acks from the initial |
| mutations sent out, so long as it receives the same number of acks as |
| repair mutations transmitted.</p> |
| </li> |
| <li> |
| <p>Only blocks on Full Data Responses to satisfy the Consistency Level. |
| Cassandra 4.0 only blocks for what is needed for resolving the digest |
| mismatch and wait for enough full data responses to meet the consistency |
| level, no matter whether it’s speculative retry or read repair chance. |
| As an example, if it looks like Cassandra might not receive full data |
| requests from everyone in time, it sends additional requests to |
| additional replicas not contacted in the initial full data read. If the |
| collection of nodes that end up responding in time end up agreeing on |
| the data, the response from the disagreeing replica that started the |
| read repair is not considered, and won’t be included in the response to |
| the client, preserving the expectation of monotonic quorum reads.</p> |
| </li> |
| </ol> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="diagnostic-events-for-read-repairs"><a class="anchor" href="#diagnostic-events-for-read-repairs"></a>Diagnostic Events for Read Repairs</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>Cassandra 4.0 adds diagnostic events for read repair |
| (<a href="https://issues.apache.org/jira/browse/CASSANDRA-14668">CASSANDRA-14668</a>) |
| that can be used for exposing information such as:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>Contacted endpoints</p> |
| </li> |
| <li> |
| <p>Digest responses by endpoint</p> |
| </li> |
| <li> |
| <p>Affected partition keys</p> |
| </li> |
| <li> |
| <p>Speculated reads / writes</p> |
| </li> |
| <li> |
| <p>Update oversized</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="background-read-repair"><a class="anchor" href="#background-read-repair"></a>Background Read Repair</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>Background read repair, which was configured using <code>read_repair_chance</code> |
| and <code>dclocal_read_repair_chance</code> settings in <code>cassandra.yaml</code> is removed |
| Cassandra 4.0 |
| (<a href="https://issues.apache.org/jira/browse/CASSANDRA-13910">CASSANDRA-13910</a>).</p> |
| </div> |
| <div class="paragraph"> |
| <p>Read repair is not an alternative for other kind of repairs such as full |
| repairs or replacing a node that keeps failing. The data returned even |
| after a read repair has been performed may not be the most up-to-date |
| data if consistency level is other than one requiring response from all |
| replicas.</p> |
| </div> |
| </div> |
| </div> |
| </article> |
| </main> |
| </div> |
| </div> |
| <footer class="grad grad--two flex-center pb-xlarge"> |
| <div class="inner text-center z2 relative"> |
| <h2 class="white py-small">Get started with Cassandra, fast.</h2> |
| <a id="footer-cta" href="/_/quickstart.html" class="btn btn--filled ma-medium">Quickstart Guide</a> |
| </div> |
| <div class="inner flex flex-distribute-items mt-xlarge z2 relative"> |
| <div class="col-2"> |
| <div id="footer-logo" class="logo logo--footer mb-medium"><img src="../../../../assets/img/logo-white-r.png" alt="Cassandra Logo"></div> |
| <p>Apache Cassandra<img src="../../../../assets/img/registered.svg" alt="®" style="width:18px;"> powers mission-critical deployments with improved performance and unparalleled levels of scale in the cloud.</p> |
| <div class="footer-social-icons"> |
| <a href="https://twitter.com/cassandra?lang=en" target="_blank"><img src="../../../../assets/img/twitter-icon-circle-white.svg" alt="twitter icon" width="24"></a> |
| <a href="https://www.linkedin.com/company/apache-cassandra/" target="_blank"><img src="../../../../assets/img/LI-In-Bug.png" alt="linked-in icon" width="24"></a> |
| <a href="https://www.youtube.com/c/PlanetCassandra" target="_blank"><img src="../../../../assets/img/youtube-icon.png" alt="youtube icon" width="24"></a> |
| </div> |
| </div> |
| <div class="col-2 flex flex-center"> |
| <ul class="columns-2"> |
| <li class="mb-small"><a href="/">Home</a></li> |
| <li class="mb-small"><a href="/_/cassandra-basics.html">Cassandra Basics</a></li> |
| <li class="mb-small"><a href="/_/quickstart.html">Quickstart</a></li> |
| <li class="mb-small"><a href="/_/ecosystem.html">Ecosystem</a></li> |
| <li class="mb-small"><a href="/doc/latest/">Documentation</a></li> |
| <li class="mb-small"><a href="/_/community.html">Community</a></li> |
| <li class="mb-small"><a href="/_/case-studies.html">Case Studies</a></li> |
| <li class="mb-small"><a href="/_/resources.html">Resources</a></li> |
| <li class="mb-small"><a href="/_/blog.html">Blog</a></li> |
| </ul> |
| </div> |
| </div> |
| </footer> |
| <div class="lower-footer bg-white pa-medium"> |
| <div class="flex flex-row flex-vert-center"> |
| <div class="pr-medium"><img src="../../../../assets/img//feather-small.png" alt="ASF" width="20"></div> |
| <div class="pr-medium"><a href="http://www.apache.org/" target="_blank">Foundation</a></div> |
| <div class="pr-medium"><a href="https://www.apache.org/events/current-event.html" target="_blank">Events</a></div> |
| <div class="pr-medium"><a href="https://www.apache.org/licenses/" target="_blank">License</a></div> |
| <div class="pr-medium"><a href="https://www.apache.org/foundation/thanks" target="_blank">Thanks</a></div> |
| <div class="pr-medium"><a href="https://www.apache.org/security" target="_blank">Security</a></div> |
| <div class="pr-medium"><a href="https://privacy.apache.org/policies/privacy-policy-public.html" target="_blank">Privacy</a></div> |
| <div class="pr-medium"><a href="https://www.apache.org/foundation/sponsorship" target="_blank">Sponsorship</a></div> |
| </div> |
| <p class="my-medium">© 2009-<script>document.write(new Date().getFullYear())</script> <a href="https://apache.org" target="_blank">The Apache Software Foundation</a> under the terms of the Apache License 2.0. Apache, the Apache feather logo, Apache Cassandra, Cassandra, and the Cassandra logo, are either registered trademarks or trademarks of The Apache Software Foundation.</p> |
| </div> |
| <div id="fade" class="hidden"></div> |
| <div id="modal" class="hidden"> |
| <div id="close-modal" class="cursor-pointer"><svg viewBox="0 0 24 24" width="24" height="24" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round" class="css-i6dzq1"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg></div> |
| <div id="mod-content" class="vid-mod-content resp-container"></div> |
| </div> |
| <script src="../../../../assets/js/site.js"></script> |
| <script async src="../../../../assets/js/vendor/highlight.js"></script> |
| <script src="../../../../assets/js/vendor/lunr.js"></script> |
| <script src="../../../../assets/js/vendor/search.js" id="search-script" data-base-path="../../../.." data-page-path="/Cassandra/4.0/cassandra/operating/read_repair.html"></script> |
| <script async src="../../../../assets/../search-index.js"></script> |
| <script> |
| jQuery(function(){ |
| var windowW = $(window).width(); |
| $(document) |
| .on('click','.mobile-nav-icon',function(){ |
| $('.main-nav').fadeIn(); |
| }) |
| .on('click','.main-nav',function(){ |
| if(windowW <= 1000){ |
| $(this).fadeOut(); |
| } |
| }) |
| .on('click','#version-toggle',function(){ |
| $(this).toggleClass('active'); |
| $(this).next().fadeToggle(); |
| }) |
| .on('click','#mobile-docs-nav-burger', function(){ |
| $(this).toggleClass('active'); |
| $('.docs-nav').toggleClass('active'); |
| }); |
| var url = window.location.pathname; |
| var isQuickstart = url.includes('quickstart.html'); |
| if(isQuickstart){ |
| var footerCTA = document.getElementById('footer-cta'); |
| footerCTA.innerHTML = 'Get latest updates'; |
| footerCTA.setAttribute('href', '/_/blog.html'); |
| } |
| }); |
| </script> |
| </div> |
| </body> |
| </html> |