Added: cassandra/site/src/doc/3.10/_static/websupport.js URL: http://svn.apache.org/viewvc/cassandra/site/src/doc/3.10/_static/websupport.js?rev=1757419&view=auto ============================================================================== --- cassandra/site/src/doc/3.10/_static/websupport.js (added) +++ cassandra/site/src/doc/3.10/_static/websupport.js Tue Aug 23 19:25:17 2016 @@ -0,0 +1,808 @@ +/* + * websupport.js + * ~~~~~~~~~~~~~ + * + * sphinx.websupport utilities for all documentation. + * + * :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +(function($) { + $.fn.autogrow = function() { + return this.each(function() { + var textarea = this; + + $.fn.autogrow.resize(textarea); + + $(textarea) + .focus(function() { + textarea.interval = setInterval(function() { + $.fn.autogrow.resize(textarea); + }, 500); + }) + .blur(function() { + clearInterval(textarea.interval); + }); + }); + }; + + $.fn.autogrow.resize = function(textarea) { + var lineHeight = parseInt($(textarea).css('line-height'), 10); + var lines = textarea.value.split('\n'); + var columns = textarea.cols; + var lineCount = 0; + $.each(lines, function() { + lineCount += Math.ceil(this.length / columns) || 1; + }); + var height = lineHeight * (lineCount + 1); + $(textarea).css('height', height); + }; +})(jQuery); + +(function($) { + var comp, by; + + function init() { + initEvents(); + initComparator(); + } + + function initEvents() { + $(document).on("click", 'a.comment-close', function(event) { + event.preventDefault(); + hide($(this).attr('id').substring(2)); + }); + $(document).on("click", 'a.vote', function(event) { + event.preventDefault(); + handleVote($(this)); + }); + $(document).on("click", 'a.reply', function(event) { + event.preventDefault(); + openReply($(this).attr('id').substring(2)); + }); + $(document).on("click", 'a.close-reply', function(event) { + event.preventDefault(); + closeReply($(this).attr('id').substring(2)); + }); + $(document).on("click", 'a.sort-option', function(event) { + event.preventDefault(); + handleReSort($(this)); + }); + $(document).on("click", 'a.show-proposal', function(event) { + event.preventDefault(); + showProposal($(this).attr('id').substring(2)); + }); + $(document).on("click", 'a.hide-proposal', function(event) { + event.preventDefault(); + hideProposal($(this).attr('id').substring(2)); + }); + $(document).on("click", 'a.show-propose-change', function(event) { + event.preventDefault(); + showProposeChange($(this).attr('id').substring(2)); + }); + $(document).on("click", 'a.hide-propose-change', function(event) { + event.preventDefault(); + hideProposeChange($(this).attr('id').substring(2)); + }); + $(document).on("click", 'a.accept-comment', function(event) { + event.preventDefault(); + acceptComment($(this).attr('id').substring(2)); + }); + $(document).on("click", 'a.delete-comment', function(event) { + event.preventDefault(); + deleteComment($(this).attr('id').substring(2)); + }); + $(document).on("click", 'a.comment-markup', function(event) { + event.preventDefault(); + toggleCommentMarkupBox($(this).attr('id').substring(2)); + }); + } + + /** + * Set comp, which is a comparator function used for sorting and + * inserting comments into the list. + */ + function setComparator() { + // If the first three letters are "asc", sort in ascending order + // and remove the prefix. + if (by.substring(0,3) == 'asc') { + var i = by.substring(3); + comp = function(a, b) { return a[i] - b[i]; }; + } else { + // Otherwise sort in descending order. + comp = function(a, b) { return b[by] - a[by]; }; + } + + // Reset link styles and format the selected sort option. + $('a.sel').attr('href', '#').removeClass('sel'); + $('a.by' + by).removeAttr('href').addClass('sel'); + } + + /** + * Create a comp function. If the user has preferences stored in + * the sortBy cookie, use those, otherwise use the default. + */ + function initComparator() { + by = 'rating'; // Default to sort by rating. + // If the sortBy cookie is set, use that instead. + if (document.cookie.length > 0) { + var start = document.cookie.indexOf('sortBy='); + if (start != -1) { + start = start + 7; + var end = document.cookie.indexOf(";", start); + if (end == -1) { + end = document.cookie.length; + by = unescape(document.cookie.substring(start, end)); + } + } + } + setComparator(); + } + + /** + * Show a comment div. + */ + function show(id) { + $('#ao' + id).hide(); + $('#ah' + id).show(); + var context = $.extend({id: id}, opts); + var popup = $(renderTemplate(popupTemplate, context)).hide(); + popup.find('textarea[name="proposal"]').hide(); + popup.find('a.by' + by).addClass('sel'); + var form = popup.find('#cf' + id); + form.submit(function(event) { + event.preventDefault(); + addComment(form); + }); + $('#s' + id).after(popup); + popup.slideDown('fast', function() { + getComments(id); + }); + } + + /** + * Hide a comment div. + */ + function hide(id) { + $('#ah' + id).hide(); + $('#ao' + id).show(); + var div = $('#sc' + id); + div.slideUp('fast', function() { + div.remove(); + }); + } + + /** + * Perform an ajax request to get comments for a node + * and insert the comments into the comments tree. + */ + function getComments(id) { + $.ajax({ + type: 'GET', + url: opts.getCommentsURL, + data: {node: id}, + success: function(data, textStatus, request) { + var ul = $('#cl' + id); + var speed = 100; + $('#cf' + id) + .find('textarea[name="proposal"]') + .data('source', data.source); + + if (data.comments.length === 0) { + ul.html('<li>No comments yet.</li>'); + ul.data('empty', true); + } else { + // If there are comments, sort them and put them in the list. + var comments = sortComments(data.comments); + speed = data.comments.length * 100; + appendComments(comments, ul); + ul.data('empty', false); + } + $('#cn' + id).slideUp(speed + 200); + ul.slideDown(speed); + }, + error: function(request, textStatus, error) { + showError('Oops, there was a problem retrieving the comments.'); + }, + dataType: 'json' + }); + } + + /** + * Add a comment via ajax and insert the comment into the comment tree. + */ + function addComment(form) { + var node_id = form.find('input[name="node"]').val(); + var parent_id = form.find('input[name="parent"]').val(); + var text = form.find('textarea[name="comment"]').val(); + var proposal = form.find('textarea[name="proposal"]').val(); + + if (text == '') { + showError('Please enter a comment.'); + return; + } + + // Disable the form that is being submitted. + form.find('textarea,input').attr('disabled', 'disabled'); + + // Send the comment to the server. + $.ajax({ + type: "POST", + url: opts.addCommentURL, + dataType: 'json', + data: { + node: node_id, + parent: parent_id, + text: text, + proposal: proposal + }, + success: function(data, textStatus, error) { + // Reset the form. + if (node_id) { + hideProposeChange(node_id); + } + form.find('textarea') + .val('') + .add(form.find('input')) + .removeAttr('disabled'); + var ul = $('#cl' + (node_id || parent_id)); + if (ul.data('empty')) { + $(ul).empty(); + ul.data('empty', false); + } + insertComment(data.comment); + var ao = $('#ao' + node_id); + ao.find('img').attr({'src': opts.commentBrightImage}); + if (node_id) { + // if this was a "root" comment, remove the commenting box + // (the user can get it back by reopening the comment popup) + $('#ca' + node_id).slideUp(); + } + }, + error: function(request, textStatus, error) { + form.find('textarea,input').removeAttr('disabled'); + showError('Oops, there was a problem adding the comment.'); + } + }); + } + + /** + * Recursively append comments to the main comment list and children + * lists, creating the comment tree. + */ + function appendComments(comments, ul) { + $.each(comments, function() { + var div = createCommentDiv(this); + ul.append($(document.createElement('li')).html(div)); + appendComments(this.children, div.find('ul.comment-children')); + // To avoid stagnating data, don't store the comments children in data. + this.children = null; + div.data('comment', this); + }); + } + + /** + * After adding a new comment, it must be inserted in the correct + * location in the comment tree. + */ + function insertComment(comment) { + var div = createCommentDiv(comment); + + // To avoid stagnating data, don't store the comments children in data. + comment.children = null; + div.data('comment', comment); + + var ul = $('#cl' + (comment.node || comment.parent)); + var siblings = getChildren(ul); + + var li = $(document.createElement('li')); + li.hide(); + + // Determine where in the parents children list to insert this comment. + for(i=0; i < siblings.length; i++) { + if (comp(comment, siblings[i]) <= 0) { + $('#cd' + siblings[i].id) + .parent() + .before(li.html(div)); + li.slideDown('fast'); + return; + } + } + + // If we get here, this comment rates lower than all the others, + // or it is the only comment in the list. + ul.append(li.html(div)); + li.slideDown('fast'); + } + + function acceptComment(id) { + $.ajax({ + type: 'POST', + url: opts.acceptCommentURL, + data: {id: id}, + success: function(data, textStatus, request) { + $('#cm' + id).fadeOut('fast'); + $('#cd' + id).removeClass('moderate'); + }, + error: function(request, textStatus, error) { + showError('Oops, there was a problem accepting the comment.'); + } + }); + } + + function deleteComment(id) { + $.ajax({ + type: 'POST', + url: opts.deleteCommentURL, + data: {id: id}, + success: function(data, textStatus, request) { + var div = $('#cd' + id); + if (data == 'delete') { + // Moderator mode: remove the comment and all children immediately + div.slideUp('fast', function() { + div.remove(); + }); + return; + } + // User mode: only mark the comment as deleted + div + .find('span.user-id:first') + .text('[deleted]').end() + .find('div.comment-text:first') + .text('[deleted]').end() + .find('#cm' + id + ', #dc' + id + ', #ac' + id + ', #rc' + id + + ', #sp' + id + ', #hp' + id + ', #cr' + id + ', #rl' + id) + .remove(); + var comment = div.data('comment'); + comment.username = '[deleted]'; + comment.text = '[deleted]'; + div.data('comment', comment); + }, + error: function(request, textStatus, error) { + showError('Oops, there was a problem deleting the comment.'); + } + }); + } + + function showProposal(id) { + $('#sp' + id).hide(); + $('#hp' + id).show(); + $('#pr' + id).slideDown('fast'); + } + + function hideProposal(id) { + $('#hp' + id).hide(); + $('#sp' + id).show(); + $('#pr' + id).slideUp('fast'); + } + + function showProposeChange(id) { + $('#pc' + id).hide(); + $('#hc' + id).show(); + var textarea = $('#pt' + id); + textarea.val(textarea.data('source')); + $.fn.autogrow.resize(textarea[0]); + textarea.slideDown('fast'); + } + + function hideProposeChange(id) { + $('#hc' + id).hide(); + $('#pc' + id).show(); + var textarea = $('#pt' + id); + textarea.val('').removeAttr('disabled'); + textarea.slideUp('fast'); + } + + function toggleCommentMarkupBox(id) { + $('#mb' + id).toggle(); + } + + /** Handle when the user clicks on a sort by link. */ + function handleReSort(link) { + var classes = link.attr('class').split(/\s+/); + for (var i=0; i<classes.length; i++) { + if (classes[i] != 'sort-option') { + by = classes[i].substring(2); + } + } + setComparator(); + // Save/update the sortBy cookie. + var expiration = new Date(); + expiration.setDate(expiration.getDate() + 365); + document.cookie= 'sortBy=' + escape(by) + + ';expires=' + expiration.toUTCString(); + $('ul.comment-ul').each(function(index, ul) { + var comments = getChildren($(ul), true); + comments = sortComments(comments); + appendComments(comments, $(ul).empty()); + }); + } + + /** + * Function to process a vote when a user clicks an arrow. + */ + function handleVote(link) { + if (!opts.voting) { + showError("You'll need to login to vote."); + return; + } + + var id = link.attr('id'); + if (!id) { + // Didn't click on one of the voting arrows. + return; + } + // If it is an unvote, the new vote value is 0, + // Otherwise it's 1 for an upvote, or -1 for a downvote. + var value = 0; + if (id.charAt(1) != 'u') { + value = id.charAt(0) == 'u' ? 1 : -1; + } + // The data to be sent to the server. + var d = { + comment_id: id.substring(2), + value: value + }; + + // Swap the vote and unvote links. + link.hide(); + $('#' + id.charAt(0) + (id.charAt(1) == 'u' ? 'v' : 'u') + d.comment_id) + .show(); + + // The div the comment is displayed in. + var div = $('div#cd' + d.comment_id); + var data = div.data('comment'); + + // If this is not an unvote, and the other vote arrow has + // already been pressed, unpress it. + if ((d.value !== 0) && (data.vote === d.value * -1)) { + $('#' + (d.value == 1 ? 'd' : 'u') + 'u' + d.comment_id).hide(); + $('#' + (d.value == 1 ? 'd' : 'u') + 'v' + d.comment_id).show(); + } + + // Update the comments rating in the local data. + data.rating += (data.vote === 0) ? d.value : (d.value - data.vote); + data.vote = d.value; + div.data('comment', data); + + // Change the rating text. + div.find('.rating:first') + .text(data.rating + ' point' + (data.rating == 1 ? '' : 's')); + + // Send the vote information to the server. + $.ajax({ + type: "POST", + url: opts.processVoteURL, + data: d, + error: function(request, textStatus, error) { + showError('Oops, there was a problem casting that vote.'); + } + }); + } + + /** + * Open a reply form used to reply to an existing comment. + */ + function openReply(id) { + // Swap out the reply link for the hide link + $('#rl' + id).hide(); + $('#cr' + id).show(); + + // Add the reply li to the children ul. + var div = $(renderTemplate(replyTemplate, {id: id})).hide(); + $('#cl' + id) + .prepend(div) + // Setup the submit handler for the reply form. + .find('#rf' + id) + .submit(function(event) { + event.preventDefault(); + addComment($('#rf' + id)); + closeReply(id); + }) + .find('input[type=button]') + .click(function() { + closeReply(id); + }); + div.slideDown('fast', function() { + $('#rf' + id).find('textarea').focus(); + }); + } + + /** + * Close the reply form opened with openReply. + */ + function closeReply(id) { + // Remove the reply div from the DOM. + $('#rd' + id).slideUp('fast', function() { + $(this).remove(); + }); + + // Swap out the hide link for the reply link + $('#cr' + id).hide(); + $('#rl' + id).show(); + } + + /** + * Recursively sort a tree of comments using the comp comparator. + */ + function sortComments(comments) { + comments.sort(comp); + $.each(comments, function() { + this.children = sortComments(this.children); + }); + return comments; + } + + /** + * Get the children comments from a ul. If recursive is true, + * recursively include childrens' children. + */ + function getChildren(ul, recursive) { + var children = []; + ul.children().children("[id^='cd']") + .each(function() { + var comment = $(this).data('comment'); + if (recursive) + comment.children = getChildren($(this).find('#cl' + comment.id), true); + children.push(comment); + }); + return children; + } + + /** Create a div to display a comment in. */ + function createCommentDiv(comment) { + if (!comment.displayed && !opts.moderator) { + return $('<div class="moderate">Thank you! Your comment will show up ' + + 'once it is has been approved by a moderator.</div>'); + } + // Prettify the comment rating. + comment.pretty_rating = comment.rating + ' point' + + (comment.rating == 1 ? '' : 's'); + // Make a class (for displaying not yet moderated comments differently) + comment.css_class = comment.displayed ? '' : ' moderate'; + // Create a div for this comment. + var context = $.extend({}, opts, comment); + var div = $(renderTemplate(commentTemplate, context)); + + // If the user has voted on this comment, highlight the correct arrow. + if (comment.vote) { + var direction = (comment.vote == 1) ? 'u' : 'd'; + div.find('#' + direction + 'v' + comment.id).hide(); + div.find('#' + direction + 'u' + comment.id).show(); + } + + if (opts.moderator || comment.text != '[deleted]') { + div.find('a.reply').show(); + if (comment.proposal_diff) + div.find('#sp' + comment.id).show(); + if (opts.moderator && !comment.displayed) + div.find('#cm' + comment.id).show(); + if (opts.moderator || (opts.username == comment.username)) + div.find('#dc' + comment.id).show(); + } + return div; + } + + /** + * A simple template renderer. Placeholders such as <%id%> are replaced + * by context['id'] with items being escaped. Placeholders such as <#id#> + * are not escaped. + */ + function renderTemplate(template, context) { + var esc = $(document.createElement('div')); + + function handle(ph, escape) { + var cur = context; + $.each(ph.split('.'), function() { + cur = cur[this]; + }); + return escape ? esc.text(cur || "").html() : cur; + } + + return template.replace(/<([%#])([\w\.]*)\1>/g, function() { + return handle(arguments[2], arguments[1] == '%' ? true : false); + }); + } + + /** Flash an error message briefly. */ + function showError(message) { + $(document.createElement('div')).attr({'class': 'popup-error'}) + .append($(document.createElement('div')) + .attr({'class': 'error-message'}).text(message)) + .appendTo('body') + .fadeIn("slow") + .delay(2000) + .fadeOut("slow"); + } + + /** Add a link the user uses to open the comments popup. */ + $.fn.comment = function() { + return this.each(function() { + var id = $(this).attr('id').substring(1); + var count = COMMENT_METADATA[id]; + var title = count + ' comment' + (count == 1 ? '' : 's'); + var image = count > 0 ? opts.commentBrightImage : opts.commentImage; + var addcls = count == 0 ? ' nocomment' : ''; + $(this) + .append( + $(document.createElement('a')).attr({ + href: '#', + 'class': 'sphinx-comment-open' + addcls, + id: 'ao' + id + }) + .append($(document.createElement('img')).attr({ + src: image, + alt: 'comment', + title: title + })) + .click(function(event) { + event.preventDefault(); + show($(this).attr('id').substring(2)); + }) + ) + .append( + $(document.createElement('a')).attr({ + href: '#', + 'class': 'sphinx-comment-close hidden', + id: 'ah' + id + }) + .append($(document.createElement('img')).attr({ + src: opts.closeCommentImage, + alt: 'close', + title: 'close' + })) + .click(function(event) { + event.preventDefault(); + hide($(this).attr('id').substring(2)); + }) + ); + }); + }; + + var opts = { + processVoteURL: '/_process_vote', + addCommentURL: '/_add_comment', + getCommentsURL: '/_get_comments', + acceptCommentURL: '/_accept_comment', + deleteCommentURL: '/_delete_comment', + commentImage: '/static/_static/comment.png', + closeCommentImage: '/static/_static/comment-close.png', + loadingImage: '/static/_static/ajax-loader.gif', + commentBrightImage: '/static/_static/comment-bright.png', + upArrow: '/static/_static/up.png', + downArrow: '/static/_static/down.png', + upArrowPressed: '/static/_static/up-pressed.png', + downArrowPressed: '/static/_static/down-pressed.png', + voting: false, + moderator: false + }; + + if (typeof COMMENT_OPTIONS != "undefined") { + opts = jQuery.extend(opts, COMMENT_OPTIONS); + } + + var popupTemplate = '\ + <div class="sphinx-comments" id="sc<%id%>">\ + <p class="sort-options">\ + Sort by:\ + <a href="#" class="sort-option byrating">best rated</a>\ + <a href="#" class="sort-option byascage">newest</a>\ + <a href="#" class="sort-option byage">oldest</a>\ + </p>\ + <div class="comment-header">Comments</div>\ + <div class="comment-loading" id="cn<%id%>">\ + loading comments... <img src="<%loadingImage%>" alt="" /></div>\ + <ul id="cl<%id%>" class="comment-ul"></ul>\ + <div id="ca<%id%>">\ + <p class="add-a-comment">Add a comment\ + (<a href="#" class="comment-markup" id="ab<%id%>">markup</a>):</p>\ + <div class="comment-markup-box" id="mb<%id%>">\ + reStructured text markup: <i>*emph*</i>, <b>**strong**</b>, \ + <code>``code``</code>, \ + code blocks: <code>::</code> and an indented block after blank line</div>\ + <form method="post" id="cf<%id%>" class="comment-form" action="">\ + <textarea name="comment" cols="80"></textarea>\ + <p class="propose-button">\ + <a href="#" id="pc<%id%>" class="show-propose-change">\ + Propose a change ▹\ + </a>\ + <a href="#" id="hc<%id%>" class="hide-propose-change">\ + Propose a change ▿\ + </a>\ + </p>\ + <textarea name="proposal" id="pt<%id%>" cols="80"\ + spellcheck="false"></textarea>\ + <input type="submit" value="Add comment" />\ + <input type="hidden" name="node" value="<%id%>" />\ + <input type="hidden" name="parent" value="" />\ + </form>\ + </div>\ + </div>'; + + var commentTemplate = '\ + <div id="cd<%id%>" class="sphinx-comment<%css_class%>">\ + <div class="vote">\ + <div class="arrow">\ + <a href="#" id="uv<%id%>" class="vote" title="vote up">\ + <img src="<%upArrow%>" />\ + </a>\ + <a href="#" id="uu<%id%>" class="un vote" title="vote up">\ + <img src="<%upArrowPressed%>" />\ + </a>\ + </div>\ + <div class="arrow">\ + <a href="#" id="dv<%id%>" class="vote" title="vote down">\ + <img src="<%downArrow%>" id="da<%id%>" />\ + </a>\ + <a href="#" id="du<%id%>" class="un vote" title="vote down">\ + <img src="<%downArrowPressed%>" />\ + </a>\ + </div>\ + </div>\ + <div class="comment-content">\ + <p class="tagline comment">\ + <span class="user-id"><%username%></span>\ + <span class="rating"><%pretty_rating%></span>\ + <span class="delta"><%time.delta%></span>\ + </p>\ + <div class="comment-text comment"><#text#></div>\ + <p class="comment-opts comment">\ + <a href="#" class="reply hidden" id="rl<%id%>">reply ▹</a>\ + <a href="#" class="close-reply" id="cr<%id%>">reply ▿</a>\ + <a href="#" id="sp<%id%>" class="show-proposal">proposal ▹</a>\ + <a href="#" id="hp<%id%>" class="hide-proposal">proposal ▿</a>\ + <a href="#" id="dc<%id%>" class="delete-comment hidden">delete</a>\ + <span id="cm<%id%>" class="moderation hidden">\ + <a href="#" id="ac<%id%>" class="accept-comment">accept</a>\ + </span>\ + </p>\ + <pre class="proposal" id="pr<%id%>">\ +<#proposal_diff#>\ + </pre>\ + <ul class="comment-children" id="cl<%id%>"></ul>\ + </div>\ + <div class="clearleft"></div>\ + </div>\ + </div>'; + + var replyTemplate = '\ + <li>\ + <div class="reply-div" id="rd<%id%>">\ + <form id="rf<%id%>">\ + <textarea name="comment" cols="80"></textarea>\ + <input type="submit" value="Add reply" />\ + <input type="button" value="Cancel" />\ + <input type="hidden" name="parent" value="<%id%>" />\ + <input type="hidden" name="node" value="" />\ + </form>\ + </div>\ + </li>'; + + $(document).ready(function() { + init(); + }); +})(jQuery); + +$(document).ready(function() { + // add comment anchors for all paragraphs that are commentable + $('.sphinx-has-comment').comment(); + + // highlight search words in search results + $("div.context").each(function() { + var params = $.getQueryParameters(); + var terms = (params.q) ? params.q[0].split(/\s+/) : []; + var result = $(this); + $.each(terms, function() { + result.highlightText(this.toLowerCase(), 'highlighted'); + }); + }); + + // directly open comment window if requested + var anchor = document.location.hash; + if (anchor.substring(0, 9) == '#comment-') { + $('#ao' + anchor.substring(9)).click(); + document.location.hash = '#s' + anchor.substring(9); + } +});
Added: cassandra/site/src/doc/3.10/architecture/dynamo.html URL: http://svn.apache.org/viewvc/cassandra/site/src/doc/3.10/architecture/dynamo.html?rev=1757419&view=auto ============================================================================== --- cassandra/site/src/doc/3.10/architecture/dynamo.html (added) +++ cassandra/site/src/doc/3.10/architecture/dynamo.html Tue Aug 23 19:25:17 2016 @@ -0,0 +1,220 @@ +--- +layout: docpage + +title: "Documentation" + +is_homepage: false +is_sphinx_doc: true + +doc-parent: "Architecture" + +doc-title: "Dynamo" +doc-header-links: ' + <link rel="top" title="Apache Cassandra Documentation v3.10" href="../index.html"/> + <link rel="up" title="Architecture" href="index.html"/> + <link rel="next" title="Storage Engine" href="storage_engine.html"/> + <link rel="prev" title="Overview" href="overview.html"/> +' +doc-search-path: "../search.html" + +extra-footer: ' +<script type="text/javascript"> + var DOCUMENTATION_OPTIONS = { + URL_ROOT: "", + VERSION: "", + COLLAPSE_INDEX: false, + FILE_SUFFIX: ".html", + HAS_SOURCE: false, + SOURCELINK_SUFFIX: "" + }; +</script> +' + +--- +<div class="container-fluid"> + <div class="row"> + <div class="col-md-2"> + <div class="doc-navigation"> + <div class="doc-menu" role="navigation"> + <div class="navbar-header"> + <button type="button" class="pull-left navbar-toggle" data-toggle="collapse" data-target=".sidebar-navbar-collapse"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + </div> + <div class="navbar-collapse collapse sidebar-navbar-collapse"> + <form id="doc-search-form" class="navbar-form" action="../search.html" method="get" role="search"> + <div class="form-group"> + <input type="text" size="30" class="form-control input-sm" name="q" placeholder="Search docs"> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </div> + </form> + + + + <ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../getting_started/index.html">Getting Started</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="index.html">Architecture</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="overview.html">Overview</a></li> +<li class="toctree-l2 current"><a class="current reference internal" href="#">Dynamo</a><ul> +<li class="toctree-l3"><a class="reference internal" href="#gossip">Gossip</a></li> +<li class="toctree-l3"><a class="reference internal" href="#failure-detection">Failure Detection</a></li> +<li class="toctree-l3"><a class="reference internal" href="#token-ring-ranges">Token Ring/Ranges</a></li> +<li class="toctree-l3"><a class="reference internal" href="#replication">Replication</a></li> +<li class="toctree-l3"><a class="reference internal" href="#tunable-consistency">Tunable Consistency</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="storage_engine.html">Storage Engine</a></li> +<li class="toctree-l2"><a class="reference internal" href="guarantees.html">Guarantees</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../data_modeling/index.html">Data Modeling</a></li> +<li class="toctree-l1"><a class="reference internal" href="../cql/index.html">The Cassandra Query Language (CQL)</a></li> +<li class="toctree-l1"><a class="reference internal" href="../configuration/index.html">Configuring Cassandra</a></li> +<li class="toctree-l1"><a class="reference internal" href="../operating/index.html">Operating Cassandra</a></li> +<li class="toctree-l1"><a class="reference internal" href="../tools/index.html">Cassandra Tools</a></li> +<li class="toctree-l1"><a class="reference internal" href="../troubleshooting/index.html">Troubleshooting</a></li> +<li class="toctree-l1"><a class="reference internal" href="../development/index.html">Cassandra Development</a></li> +<li class="toctree-l1"><a class="reference internal" href="../faq/index.html">Frequently Asked Questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../bugs.html">Reporting Bugs and Contributing</a></li> +<li class="toctree-l1"><a class="reference internal" href="../contactus.html">Contact us</a></li> +</ul> + + + + </div><!--/.nav-collapse --> + </div> + </div> + </div> + <div class="col-md-8"> + <div class="content doc-content"> + <div class="container"> + + <div class="section" id="dynamo"> +<h1>Dynamo<a class="headerlink" href="#dynamo" title="Permalink to this headline">¶</a></h1> +<div class="section" id="gossip"> +<span id="id1"></span><h2>Gossip<a class="headerlink" href="#gossip" title="Permalink to this headline">¶</a></h2> +<div class="admonition-todo admonition" id="index-0"> +<p class="first admonition-title">Todo</p> +<p class="last">todo</p> +</div> +</div> +<div class="section" id="failure-detection"> +<h2>Failure Detection<a class="headerlink" href="#failure-detection" title="Permalink to this headline">¶</a></h2> +<div class="admonition-todo admonition" id="index-1"> +<p class="first admonition-title">Todo</p> +<p class="last">todo</p> +</div> +</div> +<div class="section" id="token-ring-ranges"> +<h2>Token Ring/Ranges<a class="headerlink" href="#token-ring-ranges" title="Permalink to this headline">¶</a></h2> +<div class="admonition-todo admonition" id="index-2"> +<p class="first admonition-title">Todo</p> +<p class="last">todo</p> +</div> +</div> +<div class="section" id="replication"> +<span id="replication-strategy"></span><h2>Replication<a class="headerlink" href="#replication" title="Permalink to this headline">¶</a></h2> +<p>The replication strategy of a keyspace determines which nodes are replicas for a given token range. The two main +replication strategies are <a class="reference internal" href="#simple-strategy"><span class="std std-ref">SimpleStrategy</span></a> and <a class="reference internal" href="#network-topology-strategy"><span class="std std-ref">NetworkTopologyStrategy</span></a>.</p> +<div class="section" id="simplestrategy"> +<span id="simple-strategy"></span><h3>SimpleStrategy<a class="headerlink" href="#simplestrategy" title="Permalink to this headline">¶</a></h3> +<p>SimpleStrategy allows a single integer <code class="docutils literal"><span class="pre">replication_factor</span></code> to be defined. This determines the number of nodes that +should contain a copy of each row. For example, if <code class="docutils literal"><span class="pre">replication_factor</span></code> is 3, then three different nodes should store +a copy of each row.</p> +<p>SimpleStrategy treats all nodes identically, ignoring any configured datacenters or racks. To determine the replicas +for a token range, Cassandra iterates through the tokens in the ring, starting with the token range of interest. For +each token, it checks whether the owning node has been added to the set of replicas, and if it has not, it is added to +the set. This process continues until <code class="docutils literal"><span class="pre">replication_factor</span></code> distinct nodes have been added to the set of replicas.</p> +</div> +<div class="section" id="networktopologystrategy"> +<span id="network-topology-strategy"></span><h3>NetworkTopologyStrategy<a class="headerlink" href="#networktopologystrategy" title="Permalink to this headline">¶</a></h3> +<p>NetworkTopologyStrategy allows a replication factor to be specified for each datacenter in the cluster. Even if your +cluster only uses a single datacenter, NetworkTopologyStrategy should be prefered over SimpleStrategy to make it easier +to add new physical or virtual datacenters to the cluster later.</p> +<p>In addition to allowing the replication factor to be specified per-DC, NetworkTopologyStrategy also attempts to choose +replicas within a datacenter from different racks. If the number of racks is greater than or equal to the replication +factor for the DC, each replica will be chosen from a different rack. Otherwise, each rack will hold at least one +replica, but some racks may hold more than one. Note that this rack-aware behavior has some potentially <a class="reference external" href="https://issues.apache.org/jira/browse/CASSANDRA-3810">surprising +implications</a>. For example, if there are not an even number of +nodes in each rack, the data load on the smallest rack may be much higher. Similarly, if a single node is bootstrapped +into a new rack, it will be considered a replica for the entire ring. For this reason, many operators choose to +configure all nodes on a single “rack”.</p> +</div> +</div> +<div class="section" id="tunable-consistency"> +<h2>Tunable Consistency<a class="headerlink" href="#tunable-consistency" title="Permalink to this headline">¶</a></h2> +<p>Cassandra supports a per-operation tradeoff between consistency and availability through <em>Consistency Levels</em>. +Essentially, an operation’s consistency level specifies how many of the replicas need to respond to the coordinator in +order to consider the operation a success.</p> +<p>The following consistency levels are available:</p> +<dl class="docutils"> +<dt><code class="docutils literal"><span class="pre">ONE</span></code></dt> +<dd>Only a single replica must respond.</dd> +<dt><code class="docutils literal"><span class="pre">TWO</span></code></dt> +<dd>Two replicas must respond.</dd> +<dt><code class="docutils literal"><span class="pre">THREE</span></code></dt> +<dd>Three replicas must respond.</dd> +<dt><code class="docutils literal"><span class="pre">QUORUM</span></code></dt> +<dd>A majority (n/2 + 1) of the replicas must respond.</dd> +<dt><code class="docutils literal"><span class="pre">ALL</span></code></dt> +<dd>All of the replicas must respond.</dd> +<dt><code class="docutils literal"><span class="pre">LOCAL_QUORUM</span></code></dt> +<dd>A majority of the replicas in the local datacenter (whichever datacenter the coordinator is in) must respond.</dd> +<dt><code class="docutils literal"><span class="pre">EACH_QUORUM</span></code></dt> +<dd>A majority of the replicas in each datacenter must respond.</dd> +<dt><code class="docutils literal"><span class="pre">LOCAL_ONE</span></code></dt> +<dd>Only a single replica must respond. In a multi-datacenter cluster, this also gaurantees that read requests are not +sent to replicas in a remote datacenter.</dd> +<dt><code class="docutils literal"><span class="pre">ANY</span></code></dt> +<dd>A single replica may respond, or the coordinator may store a hint. If a hint is stored, the coordinator will later +attempt to replay the hint and deliver the mutation to the replicas. This consistency level is only accepted for +write operations.</dd> +</dl> +<p>Write operations are always sent to all replicas, regardless of consistency level. The consistency level simply +controls how many responses the coordinator waits for before responding to the client.</p> +<p>For read operations, the coordinator generally only issues read commands to enough replicas to satisfy the consistency +level. There are a couple of exceptions to this:</p> +<ul class="simple"> +<li>Speculative retry may issue a redundant read request to an extra replica if the other replicas have not responded +within a specified time window.</li> +<li>Based on <code class="docutils literal"><span class="pre">read_repair_chance</span></code> and <code class="docutils literal"><span class="pre">dclocal_read_repair_chance</span></code> (part of a table’s schema), read requests may be +randomly sent to all replicas in order to repair potentially inconsistent data.</li> +</ul> +<div class="section" id="picking-consistency-levels"> +<h3>Picking Consistency Levels<a class="headerlink" href="#picking-consistency-levels" title="Permalink to this headline">¶</a></h3> +<p>It is common to pick read and write consistency levels that are high enough to overlap, resulting in “strong” +consistency. This is typically expressed as <code class="docutils literal"><span class="pre">W</span> <span class="pre">+</span> <span class="pre">R</span> <span class="pre">></span> <span class="pre">RF</span></code>, where <code class="docutils literal"><span class="pre">W</span></code> is the write consistency level, <code class="docutils literal"><span class="pre">R</span></code> is the +read consistency level, and <code class="docutils literal"><span class="pre">RF</span></code> is the replication factor. For example, if <code class="docutils literal"><span class="pre">RF</span> <span class="pre">=</span> <span class="pre">3</span></code>, a <code class="docutils literal"><span class="pre">QUORUM</span></code> request will +require responses from at least two of the three replicas. If <code class="docutils literal"><span class="pre">QUORUM</span></code> is used for both writes and reads, at least +one of the replicas is guaranteed to participate in <em>both</em> the write and the read request, which in turn guarantees that +the latest write will be read. In a multi-datacenter environment, <code class="docutils literal"><span class="pre">LOCAL_QUORUM</span></code> can be used to provide a weaker but +still useful guarantee: reads are guaranteed to see the latest write from within the same datacenter.</p> +<p>If this type of strong consistency isn’t required, lower consistency levels like <code class="docutils literal"><span class="pre">ONE</span></code> may be used to improve +throughput, latency, and availability.</p> +</div> +</div> +</div> + + + + + <div class="doc-prev-next-links" role="navigation" aria-label="footer navigation"> + + <a href="storage_engine.html" class="btn btn-default pull-right " role="button" title="Storage Engine" accesskey="n">Next <span class="glyphicon glyphicon-circle-arrow-right" aria-hidden="true"></span></a> + + + <a href="overview.html" class="btn btn-default" role="button" title="Overview" accesskey="p"><span class="glyphicon glyphicon-circle-arrow-left" aria-hidden="true"></span> Previous</a> + + </div> + + </div> + </div> + </div> + <div class="col-md-2"> + </div> + </div> +</div> \ No newline at end of file Added: cassandra/site/src/doc/3.10/architecture/guarantees.html URL: http://svn.apache.org/viewvc/cassandra/site/src/doc/3.10/architecture/guarantees.html?rev=1757419&view=auto ============================================================================== --- cassandra/site/src/doc/3.10/architecture/guarantees.html (added) +++ cassandra/site/src/doc/3.10/architecture/guarantees.html Tue Aug 23 19:25:17 2016 @@ -0,0 +1,115 @@ +--- +layout: docpage + +title: "Documentation" + +is_homepage: false +is_sphinx_doc: true + +doc-parent: "Architecture" + +doc-title: "Guarantees" +doc-header-links: ' + <link rel="top" title="Apache Cassandra Documentation v3.10" href="../index.html"/> + <link rel="up" title="Architecture" href="index.html"/> + <link rel="next" title="Data Modeling" href="../data_modeling/index.html"/> + <link rel="prev" title="Storage Engine" href="storage_engine.html"/> +' +doc-search-path: "../search.html" + +extra-footer: ' +<script type="text/javascript"> + var DOCUMENTATION_OPTIONS = { + URL_ROOT: "", + VERSION: "", + COLLAPSE_INDEX: false, + FILE_SUFFIX: ".html", + HAS_SOURCE: false, + SOURCELINK_SUFFIX: "" + }; +</script> +' + +--- +<div class="container-fluid"> + <div class="row"> + <div class="col-md-2"> + <div class="doc-navigation"> + <div class="doc-menu" role="navigation"> + <div class="navbar-header"> + <button type="button" class="pull-left navbar-toggle" data-toggle="collapse" data-target=".sidebar-navbar-collapse"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + </div> + <div class="navbar-collapse collapse sidebar-navbar-collapse"> + <form id="doc-search-form" class="navbar-form" action="../search.html" method="get" role="search"> + <div class="form-group"> + <input type="text" size="30" class="form-control input-sm" name="q" placeholder="Search docs"> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </div> + </form> + + + + <ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../getting_started/index.html">Getting Started</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="index.html">Architecture</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="overview.html">Overview</a></li> +<li class="toctree-l2"><a class="reference internal" href="dynamo.html">Dynamo</a></li> +<li class="toctree-l2"><a class="reference internal" href="storage_engine.html">Storage Engine</a></li> +<li class="toctree-l2 current"><a class="current reference internal" href="#">Guarantees</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../data_modeling/index.html">Data Modeling</a></li> +<li class="toctree-l1"><a class="reference internal" href="../cql/index.html">The Cassandra Query Language (CQL)</a></li> +<li class="toctree-l1"><a class="reference internal" href="../configuration/index.html">Configuring Cassandra</a></li> +<li class="toctree-l1"><a class="reference internal" href="../operating/index.html">Operating Cassandra</a></li> +<li class="toctree-l1"><a class="reference internal" href="../tools/index.html">Cassandra Tools</a></li> +<li class="toctree-l1"><a class="reference internal" href="../troubleshooting/index.html">Troubleshooting</a></li> +<li class="toctree-l1"><a class="reference internal" href="../development/index.html">Cassandra Development</a></li> +<li class="toctree-l1"><a class="reference internal" href="../faq/index.html">Frequently Asked Questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../bugs.html">Reporting Bugs and Contributing</a></li> +<li class="toctree-l1"><a class="reference internal" href="../contactus.html">Contact us</a></li> +</ul> + + + + </div><!--/.nav-collapse --> + </div> + </div> + </div> + <div class="col-md-8"> + <div class="content doc-content"> + <div class="container"> + + <div class="section" id="guarantees"> +<h1>Guarantees<a class="headerlink" href="#guarantees" title="Permalink to this headline">¶</a></h1> +<div class="admonition-todo admonition" id="index-0"> +<p class="first admonition-title">Todo</p> +<p class="last">todo</p> +</div> +</div> + + + + + <div class="doc-prev-next-links" role="navigation" aria-label="footer navigation"> + + <a href="../data_modeling/index.html" class="btn btn-default pull-right " role="button" title="Data Modeling" accesskey="n">Next <span class="glyphicon glyphicon-circle-arrow-right" aria-hidden="true"></span></a> + + + <a href="storage_engine.html" class="btn btn-default" role="button" title="Storage Engine" accesskey="p"><span class="glyphicon glyphicon-circle-arrow-left" aria-hidden="true"></span> Previous</a> + + </div> + + </div> + </div> + </div> + <div class="col-md-2"> + </div> + </div> +</div> \ No newline at end of file Added: cassandra/site/src/doc/3.10/architecture/index.html URL: http://svn.apache.org/viewvc/cassandra/site/src/doc/3.10/architecture/index.html?rev=1757419&view=auto ============================================================================== --- cassandra/site/src/doc/3.10/architecture/index.html (added) +++ cassandra/site/src/doc/3.10/architecture/index.html Tue Aug 23 19:25:17 2016 @@ -0,0 +1,129 @@ +--- +layout: docpage + +title: "Documentation" + +is_homepage: false +is_sphinx_doc: true + +doc-title: "Architecture" +doc-header-links: ' + <link rel="top" title="Apache Cassandra Documentation v3.10" href="../index.html"/> + <link rel="next" title="Overview" href="overview.html"/> + <link rel="prev" title="Client drivers" href="../getting_started/drivers.html"/> +' +doc-search-path: "../search.html" + +extra-footer: ' +<script type="text/javascript"> + var DOCUMENTATION_OPTIONS = { + URL_ROOT: "", + VERSION: "", + COLLAPSE_INDEX: false, + FILE_SUFFIX: ".html", + HAS_SOURCE: false, + SOURCELINK_SUFFIX: "" + }; +</script> +' + +--- +<div class="container-fluid"> + <div class="row"> + <div class="col-md-2"> + <div class="doc-navigation"> + <div class="doc-menu" role="navigation"> + <div class="navbar-header"> + <button type="button" class="pull-left navbar-toggle" data-toggle="collapse" data-target=".sidebar-navbar-collapse"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + </div> + <div class="navbar-collapse collapse sidebar-navbar-collapse"> + <form id="doc-search-form" class="navbar-form" action="../search.html" method="get" role="search"> + <div class="form-group"> + <input type="text" size="30" class="form-control input-sm" name="q" placeholder="Search docs"> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </div> + </form> + + + + <ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../getting_started/index.html">Getting Started</a></li> +<li class="toctree-l1 current"><a class="current reference internal" href="#">Architecture</a><ul> +<li class="toctree-l2"><a class="reference internal" href="overview.html">Overview</a></li> +<li class="toctree-l2"><a class="reference internal" href="dynamo.html">Dynamo</a></li> +<li class="toctree-l2"><a class="reference internal" href="storage_engine.html">Storage Engine</a></li> +<li class="toctree-l2"><a class="reference internal" href="guarantees.html">Guarantees</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../data_modeling/index.html">Data Modeling</a></li> +<li class="toctree-l1"><a class="reference internal" href="../cql/index.html">The Cassandra Query Language (CQL)</a></li> +<li class="toctree-l1"><a class="reference internal" href="../configuration/index.html">Configuring Cassandra</a></li> +<li class="toctree-l1"><a class="reference internal" href="../operating/index.html">Operating Cassandra</a></li> +<li class="toctree-l1"><a class="reference internal" href="../tools/index.html">Cassandra Tools</a></li> +<li class="toctree-l1"><a class="reference internal" href="../troubleshooting/index.html">Troubleshooting</a></li> +<li class="toctree-l1"><a class="reference internal" href="../development/index.html">Cassandra Development</a></li> +<li class="toctree-l1"><a class="reference internal" href="../faq/index.html">Frequently Asked Questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../bugs.html">Reporting Bugs and Contributing</a></li> +<li class="toctree-l1"><a class="reference internal" href="../contactus.html">Contact us</a></li> +</ul> + + + + </div><!--/.nav-collapse --> + </div> + </div> + </div> + <div class="col-md-8"> + <div class="content doc-content"> + <div class="container"> + + <div class="section" id="architecture"> +<h1>Architecture<a class="headerlink" href="#architecture" title="Permalink to this headline">¶</a></h1> +<p>This section describes the general architecture of Apache Cassandra.</p> +<div class="toctree-wrapper compound"> +<ul> +<li class="toctree-l1"><a class="reference internal" href="overview.html">Overview</a></li> +<li class="toctree-l1"><a class="reference internal" href="dynamo.html">Dynamo</a><ul> +<li class="toctree-l2"><a class="reference internal" href="dynamo.html#gossip">Gossip</a></li> +<li class="toctree-l2"><a class="reference internal" href="dynamo.html#failure-detection">Failure Detection</a></li> +<li class="toctree-l2"><a class="reference internal" href="dynamo.html#token-ring-ranges">Token Ring/Ranges</a></li> +<li class="toctree-l2"><a class="reference internal" href="dynamo.html#replication">Replication</a></li> +<li class="toctree-l2"><a class="reference internal" href="dynamo.html#tunable-consistency">Tunable Consistency</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="storage_engine.html">Storage Engine</a><ul> +<li class="toctree-l2"><a class="reference internal" href="storage_engine.html#commitlog">CommitLog</a></li> +<li class="toctree-l2"><a class="reference internal" href="storage_engine.html#memtables">Memtables</a></li> +<li class="toctree-l2"><a class="reference internal" href="storage_engine.html#sstables">SSTables</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="guarantees.html">Guarantees</a></li> +</ul> +</div> +</div> + + + + + <div class="doc-prev-next-links" role="navigation" aria-label="footer navigation"> + + <a href="overview.html" class="btn btn-default pull-right " role="button" title="Overview" accesskey="n">Next <span class="glyphicon glyphicon-circle-arrow-right" aria-hidden="true"></span></a> + + + <a href="../getting_started/drivers.html" class="btn btn-default" role="button" title="Client drivers" accesskey="p"><span class="glyphicon glyphicon-circle-arrow-left" aria-hidden="true"></span> Previous</a> + + </div> + + </div> + </div> + </div> + <div class="col-md-2"> + </div> + </div> +</div> \ No newline at end of file Added: cassandra/site/src/doc/3.10/architecture/overview.html URL: http://svn.apache.org/viewvc/cassandra/site/src/doc/3.10/architecture/overview.html?rev=1757419&view=auto ============================================================================== --- cassandra/site/src/doc/3.10/architecture/overview.html (added) +++ cassandra/site/src/doc/3.10/architecture/overview.html Tue Aug 23 19:25:17 2016 @@ -0,0 +1,115 @@ +--- +layout: docpage + +title: "Documentation" + +is_homepage: false +is_sphinx_doc: true + +doc-parent: "Architecture" + +doc-title: "Overview" +doc-header-links: ' + <link rel="top" title="Apache Cassandra Documentation v3.10" href="../index.html"/> + <link rel="up" title="Architecture" href="index.html"/> + <link rel="next" title="Dynamo" href="dynamo.html"/> + <link rel="prev" title="Architecture" href="index.html"/> +' +doc-search-path: "../search.html" + +extra-footer: ' +<script type="text/javascript"> + var DOCUMENTATION_OPTIONS = { + URL_ROOT: "", + VERSION: "", + COLLAPSE_INDEX: false, + FILE_SUFFIX: ".html", + HAS_SOURCE: false, + SOURCELINK_SUFFIX: "" + }; +</script> +' + +--- +<div class="container-fluid"> + <div class="row"> + <div class="col-md-2"> + <div class="doc-navigation"> + <div class="doc-menu" role="navigation"> + <div class="navbar-header"> + <button type="button" class="pull-left navbar-toggle" data-toggle="collapse" data-target=".sidebar-navbar-collapse"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + </div> + <div class="navbar-collapse collapse sidebar-navbar-collapse"> + <form id="doc-search-form" class="navbar-form" action="../search.html" method="get" role="search"> + <div class="form-group"> + <input type="text" size="30" class="form-control input-sm" name="q" placeholder="Search docs"> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </div> + </form> + + + + <ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../getting_started/index.html">Getting Started</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="index.html">Architecture</a><ul class="current"> +<li class="toctree-l2 current"><a class="current reference internal" href="#">Overview</a></li> +<li class="toctree-l2"><a class="reference internal" href="dynamo.html">Dynamo</a></li> +<li class="toctree-l2"><a class="reference internal" href="storage_engine.html">Storage Engine</a></li> +<li class="toctree-l2"><a class="reference internal" href="guarantees.html">Guarantees</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../data_modeling/index.html">Data Modeling</a></li> +<li class="toctree-l1"><a class="reference internal" href="../cql/index.html">The Cassandra Query Language (CQL)</a></li> +<li class="toctree-l1"><a class="reference internal" href="../configuration/index.html">Configuring Cassandra</a></li> +<li class="toctree-l1"><a class="reference internal" href="../operating/index.html">Operating Cassandra</a></li> +<li class="toctree-l1"><a class="reference internal" href="../tools/index.html">Cassandra Tools</a></li> +<li class="toctree-l1"><a class="reference internal" href="../troubleshooting/index.html">Troubleshooting</a></li> +<li class="toctree-l1"><a class="reference internal" href="../development/index.html">Cassandra Development</a></li> +<li class="toctree-l1"><a class="reference internal" href="../faq/index.html">Frequently Asked Questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../bugs.html">Reporting Bugs and Contributing</a></li> +<li class="toctree-l1"><a class="reference internal" href="../contactus.html">Contact us</a></li> +</ul> + + + + </div><!--/.nav-collapse --> + </div> + </div> + </div> + <div class="col-md-8"> + <div class="content doc-content"> + <div class="container"> + + <div class="section" id="overview"> +<h1>Overview<a class="headerlink" href="#overview" title="Permalink to this headline">¶</a></h1> +<div class="admonition-todo admonition" id="index-0"> +<p class="first admonition-title">Todo</p> +<p class="last">todo</p> +</div> +</div> + + + + + <div class="doc-prev-next-links" role="navigation" aria-label="footer navigation"> + + <a href="dynamo.html" class="btn btn-default pull-right " role="button" title="Dynamo" accesskey="n">Next <span class="glyphicon glyphicon-circle-arrow-right" aria-hidden="true"></span></a> + + + <a href="index.html" class="btn btn-default" role="button" title="Architecture" accesskey="p"><span class="glyphicon glyphicon-circle-arrow-left" aria-hidden="true"></span> Previous</a> + + </div> + + </div> + </div> + </div> + <div class="col-md-2"> + </div> + </div> +</div> \ No newline at end of file Added: cassandra/site/src/doc/3.10/architecture/storage_engine.html URL: http://svn.apache.org/viewvc/cassandra/site/src/doc/3.10/architecture/storage_engine.html?rev=1757419&view=auto ============================================================================== --- cassandra/site/src/doc/3.10/architecture/storage_engine.html (added) +++ cassandra/site/src/doc/3.10/architecture/storage_engine.html Tue Aug 23 19:25:17 2016 @@ -0,0 +1,166 @@ +--- +layout: docpage + +title: "Documentation" + +is_homepage: false +is_sphinx_doc: true + +doc-parent: "Architecture" + +doc-title: "Storage Engine" +doc-header-links: ' + <link rel="top" title="Apache Cassandra Documentation v3.10" href="../index.html"/> + <link rel="up" title="Architecture" href="index.html"/> + <link rel="next" title="Guarantees" href="guarantees.html"/> + <link rel="prev" title="Dynamo" href="dynamo.html"/> +' +doc-search-path: "../search.html" + +extra-footer: ' +<script type="text/javascript"> + var DOCUMENTATION_OPTIONS = { + URL_ROOT: "", + VERSION: "", + COLLAPSE_INDEX: false, + FILE_SUFFIX: ".html", + HAS_SOURCE: false, + SOURCELINK_SUFFIX: "" + }; +</script> +' + +--- +<div class="container-fluid"> + <div class="row"> + <div class="col-md-2"> + <div class="doc-navigation"> + <div class="doc-menu" role="navigation"> + <div class="navbar-header"> + <button type="button" class="pull-left navbar-toggle" data-toggle="collapse" data-target=".sidebar-navbar-collapse"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + </div> + <div class="navbar-collapse collapse sidebar-navbar-collapse"> + <form id="doc-search-form" class="navbar-form" action="../search.html" method="get" role="search"> + <div class="form-group"> + <input type="text" size="30" class="form-control input-sm" name="q" placeholder="Search docs"> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </div> + </form> + + + + <ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../getting_started/index.html">Getting Started</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="index.html">Architecture</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="overview.html">Overview</a></li> +<li class="toctree-l2"><a class="reference internal" href="dynamo.html">Dynamo</a></li> +<li class="toctree-l2 current"><a class="current reference internal" href="#">Storage Engine</a><ul> +<li class="toctree-l3"><a class="reference internal" href="#commitlog">CommitLog</a></li> +<li class="toctree-l3"><a class="reference internal" href="#memtables">Memtables</a></li> +<li class="toctree-l3"><a class="reference internal" href="#sstables">SSTables</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="guarantees.html">Guarantees</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../data_modeling/index.html">Data Modeling</a></li> +<li class="toctree-l1"><a class="reference internal" href="../cql/index.html">The Cassandra Query Language (CQL)</a></li> +<li class="toctree-l1"><a class="reference internal" href="../configuration/index.html">Configuring Cassandra</a></li> +<li class="toctree-l1"><a class="reference internal" href="../operating/index.html">Operating Cassandra</a></li> +<li class="toctree-l1"><a class="reference internal" href="../tools/index.html">Cassandra Tools</a></li> +<li class="toctree-l1"><a class="reference internal" href="../troubleshooting/index.html">Troubleshooting</a></li> +<li class="toctree-l1"><a class="reference internal" href="../development/index.html">Cassandra Development</a></li> +<li class="toctree-l1"><a class="reference internal" href="../faq/index.html">Frequently Asked Questions</a></li> +<li class="toctree-l1"><a class="reference internal" href="../bugs.html">Reporting Bugs and Contributing</a></li> +<li class="toctree-l1"><a class="reference internal" href="../contactus.html">Contact us</a></li> +</ul> + + + + </div><!--/.nav-collapse --> + </div> + </div> + </div> + <div class="col-md-8"> + <div class="content doc-content"> + <div class="container"> + + <div class="section" id="storage-engine"> +<h1>Storage Engine<a class="headerlink" href="#storage-engine" title="Permalink to this headline">¶</a></h1> +<div class="section" id="commitlog"> +<span id="commit-log"></span><h2>CommitLog<a class="headerlink" href="#commitlog" title="Permalink to this headline">¶</a></h2> +<div class="admonition-todo admonition" id="index-0"> +<p class="first admonition-title">Todo</p> +<p class="last">todo</p> +</div> +</div> +<div class="section" id="memtables"> +<span id="id1"></span><h2>Memtables<a class="headerlink" href="#memtables" title="Permalink to this headline">¶</a></h2> +<p>Memtables are in-memory structures where Cassandra buffers writes. In general, there is one active memtable per table. +Eventually, memtables are flushed onto disk and become immutable <a class="reference internal" href="#sstables">SSTables</a>. This can be triggered in several +ways:</p> +<ul class="simple"> +<li>The memory usage of the memtables exceeds the configured threshold (see <code class="docutils literal"><span class="pre">memtable_cleanup_threshold</span></code>)</li> +<li>The <a class="reference internal" href="#commit-log"><span class="std std-ref">CommitLog</span></a> approaches its maximum size, and forces memtable flushes in order to allow commitlog segments to +be freed</li> +</ul> +<p>Memtables may be stored entirely on-heap or partially off-heap, depending on <code class="docutils literal"><span class="pre">memtable_allocation_type</span></code>.</p> +</div> +<div class="section" id="sstables"> +<h2>SSTables<a class="headerlink" href="#sstables" title="Permalink to this headline">¶</a></h2> +<p>SSTables are the immutable data files that Cassandra uses for persisting data on disk.</p> +<p>As SSTables are flushed to disk from <a class="reference internal" href="#memtables"><span class="std std-ref">Memtables</span></a> or are streamed from other nodes, Cassandra triggers compactions +which combine multiple SSTables into one. Once the new SSTable has been written, the old SSTables can be removed.</p> +<p>Each SSTable is comprised of multiple components stored in separate files:</p> +<dl class="docutils"> +<dt><code class="docutils literal"><span class="pre">Data.db</span></code></dt> +<dd>The actual data, i.e. the contents of rows.</dd> +<dt><code class="docutils literal"><span class="pre">Index.db</span></code></dt> +<dd>An index from partition keys to positions in the <code class="docutils literal"><span class="pre">Data.db</span></code> file. For wide partitions, this may also include an +index to rows within a partition.</dd> +<dt><code class="docutils literal"><span class="pre">Summary.db</span></code></dt> +<dd>A sampling of (by default) every 128th entry in the <code class="docutils literal"><span class="pre">Index.db</span></code> file.</dd> +<dt><code class="docutils literal"><span class="pre">Filter.db</span></code></dt> +<dd>A Bloom Filter of the partition keys in the SSTable.</dd> +<dt><code class="docutils literal"><span class="pre">CompressionInfo.db</span></code></dt> +<dd>Metadata about the offsets and lengths of compression chunks in the <code class="docutils literal"><span class="pre">Data.db</span></code> file.</dd> +<dt><code class="docutils literal"><span class="pre">Statistics.db</span></code></dt> +<dd>Stores metadata about the SSTable, including information about timestamps, tombstones, clustering keys, compaction, +repair, compression, TTLs, and more.</dd> +<dt><code class="docutils literal"><span class="pre">Digest.crc32</span></code></dt> +<dd>A CRC-32 digest of the <code class="docutils literal"><span class="pre">Data.db</span></code> file.</dd> +<dt><code class="docutils literal"><span class="pre">TOC.txt</span></code></dt> +<dd>A plain text list of the component files for the SSTable.</dd> +</dl> +<p>Within the <code class="docutils literal"><span class="pre">Data.db</span></code> file, rows are organized by partition. These partitions are sorted in token order (i.e. by a +hash of the partition key when the default partitioner, <code class="docutils literal"><span class="pre">Murmur3Partition</span></code>, is used). Within a partition, rows are +stored in the order of their clustering keys.</p> +<p>SSTables can be optionally compressed using block-based compression.</p> +</div> +</div> + + + + + <div class="doc-prev-next-links" role="navigation" aria-label="footer navigation"> + + <a href="guarantees.html" class="btn btn-default pull-right " role="button" title="Guarantees" accesskey="n">Next <span class="glyphicon glyphicon-circle-arrow-right" aria-hidden="true"></span></a> + + + <a href="dynamo.html" class="btn btn-default" role="button" title="Dynamo" accesskey="p"><span class="glyphicon glyphicon-circle-arrow-left" aria-hidden="true"></span> Previous</a> + + </div> + + </div> + </div> + </div> + <div class="col-md-2"> + </div> + </div> +</div> \ No newline at end of file Added: cassandra/site/src/doc/3.10/bugs.html URL: http://svn.apache.org/viewvc/cassandra/site/src/doc/3.10/bugs.html?rev=1757419&view=auto ============================================================================== --- cassandra/site/src/doc/3.10/bugs.html (added) +++ cassandra/site/src/doc/3.10/bugs.html Tue Aug 23 19:25:17 2016 @@ -0,0 +1,110 @@ +--- +layout: docpage + +title: "Documentation" + +is_homepage: false +is_sphinx_doc: true + +doc-title: "Reporting Bugs and Contributing" +doc-header-links: ' + <link rel="top" title="Apache Cassandra Documentation v3.10" href="index.html"/> + <link rel="next" title="Contact us" href="contactus.html"/> + <link rel="prev" title="Frequently Asked Questions" href="faq/index.html"/> +' +doc-search-path: "search.html" + +extra-footer: ' +<script type="text/javascript"> + var DOCUMENTATION_OPTIONS = { + URL_ROOT: "", + VERSION: "", + COLLAPSE_INDEX: false, + FILE_SUFFIX: ".html", + HAS_SOURCE: false, + SOURCELINK_SUFFIX: "" + }; +</script> +' + +--- +<div class="container-fluid"> + <div class="row"> + <div class="col-md-2"> + <div class="doc-navigation"> + <div class="doc-menu" role="navigation"> + <div class="navbar-header"> + <button type="button" class="pull-left navbar-toggle" data-toggle="collapse" data-target=".sidebar-navbar-collapse"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + </div> + <div class="navbar-collapse collapse sidebar-navbar-collapse"> + <form id="doc-search-form" class="navbar-form" action="search.html" method="get" role="search"> + <div class="form-group"> + <input type="text" size="30" class="form-control input-sm" name="q" placeholder="Search docs"> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </div> + </form> + + + + <ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="getting_started/index.html">Getting Started</a></li> +<li class="toctree-l1"><a class="reference internal" href="architecture/index.html">Architecture</a></li> +<li class="toctree-l1"><a class="reference internal" href="data_modeling/index.html">Data Modeling</a></li> +<li class="toctree-l1"><a class="reference internal" href="cql/index.html">The Cassandra Query Language (CQL)</a></li> +<li class="toctree-l1"><a class="reference internal" href="configuration/index.html">Configuring Cassandra</a></li> +<li class="toctree-l1"><a class="reference internal" href="operating/index.html">Operating Cassandra</a></li> +<li class="toctree-l1"><a class="reference internal" href="tools/index.html">Cassandra Tools</a></li> +<li class="toctree-l1"><a class="reference internal" href="troubleshooting/index.html">Troubleshooting</a></li> +<li class="toctree-l1"><a class="reference internal" href="development/index.html">Cassandra Development</a></li> +<li class="toctree-l1"><a class="reference internal" href="faq/index.html">Frequently Asked Questions</a></li> +<li class="toctree-l1 current"><a class="current reference internal" href="#">Reporting Bugs and Contributing</a></li> +<li class="toctree-l1"><a class="reference internal" href="contactus.html">Contact us</a></li> +</ul> + + + + </div><!--/.nav-collapse --> + </div> + </div> + </div> + <div class="col-md-8"> + <div class="content doc-content"> + <div class="container"> + + <div class="section" id="reporting-bugs-and-contributing"> +<h1>Reporting Bugs and Contributing<a class="headerlink" href="#reporting-bugs-and-contributing" title="Permalink to this headline">¶</a></h1> +<p>If you encounter a problem with Cassandra, the first places to ask for help are the <a class="reference internal" href="contactus.html#mailing-lists"><span class="std std-ref">user mailing list</span></a> and the <code class="docutils literal"><span class="pre">#cassandra</span></code> <a class="reference internal" href="contactus.html#irc-channels"><span class="std std-ref">IRC channel</span></a>.</p> +<p>If, after having asked for help, you suspect that you have found a bug in Cassandra, you should report it by opening a +ticket through the <a class="reference external" href="https://issues.apache.org/jira/browse/CASSANDRA">Apache Cassandra JIRA</a>. Please provide as much +details as you can on your problem, and don’t forget to indicate which version of Cassandra you are running and on which +environment.</p> +<p>Further details on how to contribute can be found at our <a class="reference internal" href="development/index.html"><span class="doc">Cassandra Development</span></a> section. Please note that the source of +this documentation is part of the Cassandra git repository and hence contributions to the documentation should follow the +same path.</p> +</div> + + + + + <div class="doc-prev-next-links" role="navigation" aria-label="footer navigation"> + + <a href="contactus.html" class="btn btn-default pull-right " role="button" title="Contact us" accesskey="n">Next <span class="glyphicon glyphicon-circle-arrow-right" aria-hidden="true"></span></a> + + + <a href="faq/index.html" class="btn btn-default" role="button" title="Frequently Asked Questions" accesskey="p"><span class="glyphicon glyphicon-circle-arrow-left" aria-hidden="true"></span> Previous</a> + + </div> + + </div> + </div> + </div> + <div class="col-md-2"> + </div> + </div> +</div> \ No newline at end of file
