Added: tinkerpop/site/docs/3.2.6-SNAPSHOT/upgrade/index.html URL: http://svn.apache.org/viewvc/tinkerpop/site/docs/3.2.6-SNAPSHOT/upgrade/index.html?rev=1799018&view=auto ============================================================================== --- tinkerpop/site/docs/3.2.6-SNAPSHOT/upgrade/index.html (added) +++ tinkerpop/site/docs/3.2.6-SNAPSHOT/upgrade/index.html Sat Jun 17 18:56:29 2017 @@ -0,0 +1,4469 @@ +<!DOCTYPE html> +<html lang="en"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<meta name="generator" content="Asciidoctor 0.1.4"> +<meta name="viewport" content="width=device-width, initial-scale=1.0"> +<title>TinkerPop Upgrade Information</title> +<style> +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/*! normalize.css v2.1.2 | MIT License | git.io/normalize */ +/* ========================================================================== HTML5 display definitions ========================================================================== */ +/** Correct `block` display not defined in IE 8/9. */ +@import url(http://cdnjs.cloudflare.com/ajax/libs/font-awesome/3.2.1/css/font-awesome.css); +article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; } + +/** Correct `inline-block` display not defined in IE 8/9. */ +audio, canvas, video { display: inline-block; } + +/** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */ +audio:not([controls]) { display: none; height: 0; } + +/** Address `[hidden]` styling not present in IE 8/9. Hide the `template` element in IE, Safari, and Firefox < 22. */ +[hidden], template { display: none; } + +script { display: none !important; } + +/* ========================================================================== Base ========================================================================== */ +/** 1. Set default font family to sans-serif. 2. Prevent iOS text size adjust after orientation change, without disabling user zoom. */ +html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ } + +/** Remove default margin. */ +body { margin: 0; } + +/* ========================================================================== Links ========================================================================== */ +/** Remove the gray background color from active links in IE 10. */ +a { background: transparent; } + +/** Address `outline` inconsistency between Chrome and other browsers. */ +a:focus { outline: thin dotted; } + +/** Improve readability when focused and also mouse hovered in all browsers. */ +a:active, a:hover { outline: 0; } + +/* ========================================================================== Typography ========================================================================== */ +/** Address variable `h1` font-size and margin within `section` and `article` contexts in Firefox 4+, Safari 5, and Chrome. */ +h1 { font-size: 2em; margin: 0.67em 0; } + +/** Address styling not present in IE 8/9, Safari 5, and Chrome. */ +abbr[title] { border-bottom: 1px dotted; } + +/** Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. */ +b, strong { font-weight: bold; } + +/** Address styling not present in Safari 5 and Chrome. */ +dfn { font-style: italic; } + +/** Address differences between Firefox and other browsers. */ +hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; } + +/** Address styling not present in IE 8/9. */ +mark { background: #ff0; color: #000; } + +/** Correct font family set oddly in Safari 5 and Chrome. */ +code, kbd, pre, samp { font-family: monospace, serif; font-size: 1em; } + +/** Improve readability of pre-formatted text in all browsers. */ +pre { white-space: pre-wrap; } + +/** Set consistent quote types. */ +q { quotes: "\201C" "\201D" "\2018" "\2019"; } + +/** Address inconsistent and variable font size in all browsers. */ +small { font-size: 80%; } + +/** Prevent `sub` and `sup` affecting `line-height` in all browsers. */ +sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } + +sup { top: -0.5em; } + +sub { bottom: -0.25em; } + +/* ========================================================================== Embedded content ========================================================================== */ +/** Remove border when inside `a` element in IE 8/9. */ +img { border: 0; } + +/** Correct overflow displayed oddly in IE 9. */ +svg:not(:root) { overflow: hidden; } + +/* ========================================================================== Figures ========================================================================== */ +/** Address margin not present in IE 8/9 and Safari 5. */ +figure { margin: 0; } + +/* ========================================================================== Forms ========================================================================== */ +/** Define consistent border, margin, and padding. */ +fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; } + +/** 1. Correct `color` not being inherited in IE 8/9. 2. Remove padding so people aren't caught out if they zero out fieldsets. */ +legend { border: 0; /* 1 */ padding: 0; /* 2 */ } + +/** 1. Correct font family not being inherited in all browsers. 2. Correct font size not being inherited in all browsers. 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. */ +button, input, select, textarea { font-family: inherit; /* 1 */ font-size: 100%; /* 2 */ margin: 0; /* 3 */ } + +/** Address Firefox 4+ setting `line-height` on `input` using `!important` in the UA stylesheet. */ +button, input { line-height: normal; } + +/** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. Correct `select` style inheritance in Firefox 4+ and Opera. */ +button, select { text-transform: none; } + +/** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. */ +button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ } + +/** Re-set default cursor for disabled elements. */ +button[disabled], html input[disabled] { cursor: default; } + +/** 1. Address box sizing set to `content-box` in IE 8/9. 2. Remove excess padding in IE 8/9. */ +input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } + +/** 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome (include `-moz` to future-proof). */ +input[type="search"] { -webkit-appearance: textfield; /* 1 */ -moz-box-sizing: content-box; -webkit-box-sizing: content-box; /* 2 */ box-sizing: content-box; } + +/** Remove inner padding and search cancel button in Safari 5 and Chrome on OS X. */ +input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } + +/** Remove inner padding and border in Firefox 4+. */ +button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; } + +/** 1. Remove default vertical scrollbar in IE 8/9. 2. Improve readability and alignment in all browsers. */ +textarea { overflow: auto; /* 1 */ vertical-align: top; /* 2 */ } + +/* ========================================================================== Tables ========================================================================== */ +/** Remove most spacing between table cells. */ +table { border-collapse: collapse; border-spacing: 0; } + +meta.foundation-mq-small { font-family: "only screen and (min-width: 768px)"; width: 768px; } + +meta.foundation-mq-medium { font-family: "only screen and (min-width:1280px)"; width: 1280px; } + +meta.foundation-mq-large { font-family: "only screen and (min-width:1440px)"; width: 1440px; } + +*, *:before, *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } + +html, body { font-size: 100%; } + +body { background: white; color: #222222; padding: 0; margin: 0; font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; font-weight: normal; font-style: normal; line-height: 1; position: relative; cursor: auto; } + +a:hover { cursor: pointer; } + +img, object, embed { max-width: 100%; height: auto; } + +object, embed { height: 100%; } + +img { -ms-interpolation-mode: bicubic; } + +#map_canvas img, #map_canvas embed, #map_canvas object, .map_canvas img, .map_canvas embed, .map_canvas object { max-width: none !important; } + +.left { float: left !important; } + +.right { float: right !important; } + +.text-left { text-align: left !important; } + +.text-right { text-align: right !important; } + +.text-center { text-align: center !important; } + +.text-justify { text-align: justify !important; } + +.hide { display: none; } + +.antialiased, body { -webkit-font-smoothing: antialiased; } + +img { display: inline-block; vertical-align: middle; } + +textarea { height: auto; min-height: 50px; } + +select { width: 100%; } + +p.lead, .paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { font-size: 1.21875em; line-height: 1.6; } + +.subheader, #content #toctitle, .admonitionblock td.content > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .mathblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, .sidebarblock > .title, .tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title, .tableblock > caption { line-height: 1.4; color: #6c818f; font-weight: 300; margin-top: 0.2em; margin-bottom: 0.5em; } + +/* Typography resets */ +div, dl, dt, dd, ul, ol, li, h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6, pre, form, p, blockquote, th, td { margin: 0; padding: 0; direction: ltr; } + +/* Default Link Styles */ +a { color: #444444; text-decoration: underline; line-height: inherit; } +a:hover, a:focus { color: #111111; } +a img { border: none; } + +/* Default paragraph styles */ +p { font-family: inherit; font-weight: normal; font-size: 1em; line-height: 1.5; margin-bottom: 1.25em; text-rendering: optimizeLegibility; } +p aside { font-size: 0.875em; line-height: 1.35; font-style: italic; } + +/* Default header styles */ +h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { font-family: ff-meta-web-pro-1, ff-meta-web-pro-2, Arial, "Helvetica Neue", sans-serif; font-weight: bold; font-style: normal; color: #465158; text-rendering: optimizeLegibility; margin-top: 1em; margin-bottom: 0.5em; line-height: 1.2125em; } +h1 small, h2 small, h3 small, #toctitle small, .sidebarblock > .content > .title small, h4 small, h5 small, h6 small { font-size: 60%; color: #909ea7; line-height: 0; } + +h1 { font-size: 2.125em; } + +h2 { font-size: 1.6875em; } + +h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.375em; } + +h4 { font-size: 1.125em; } + +h5 { font-size: 1.125em; } + +h6 { font-size: 1em; } + +hr { border: solid #dddddd; border-width: 1px 0 0; clear: both; margin: 1.25em 0 1.1875em; height: 0; } + +/* Helpful Typography Defaults */ +em, i { font-style: italic; line-height: inherit; } + +strong, b { font-weight: bold; line-height: inherit; } + +small { font-size: 60%; line-height: inherit; } + +code { font-family: "Consolas", "Deja Vu Sans Mono", "Bitstream Vera Sans Mono", monospace; font-weight: normal; color: #444444; } + +/* Lists */ +ul, ol, dl { font-size: 1em; line-height: 1.5; margin-bottom: 1.25em; list-style-position: outside; font-family: inherit; } + +ul, ol { margin-left: 0; } +ul.no-bullet, ol.no-bullet { margin-left: 0; } + +/* Unordered Lists */ +ul li ul, ul li ol { margin-left: 1.25em; margin-bottom: 0; font-size: 1em; /* Override nested font-size change */ } +ul.square li ul, ul.circle li ul, ul.disc li ul { list-style: inherit; } +ul.square { list-style-type: square; } +ul.circle { list-style-type: circle; } +ul.disc { list-style-type: disc; } +ul.no-bullet { list-style: none; } + +/* Ordered Lists */ +ol li ul, ol li ol { margin-left: 1.25em; margin-bottom: 0; } + +/* Definition Lists */ +dl dt { margin-bottom: 0.3em; font-weight: bold; } +dl dd { margin-bottom: 0.75em; } + +/* Abbreviations */ +abbr, acronym { text-transform: uppercase; font-size: 90%; color: black; border-bottom: 1px dotted #dddddd; cursor: help; } + +abbr { text-transform: none; } + +/* Blockquotes */ +blockquote { margin: 0 0 1.25em; padding: 0.5625em 1.25em 0 1.1875em; border-left: 1px solid #dddddd; } +blockquote cite { display: block; font-size: 0.8125em; color: #748590; } +blockquote cite:before { content: "\2014 \0020"; } +blockquote cite a, blockquote cite a:visited { color: #748590; } + +blockquote, blockquote p { line-height: 1.5; color: #909ea7; } + +/* Microformats */ +.vcard { display: inline-block; margin: 0 0 1.25em 0; border: 1px solid #dddddd; padding: 0.625em 0.75em; } +.vcard li { margin: 0; display: block; } +.vcard .fn { font-weight: bold; font-size: 0.9375em; } + +.vevent .summary { font-weight: bold; } +.vevent abbr { cursor: auto; text-decoration: none; font-weight: bold; border: none; padding: 0 0.0625em; } + +@media only screen and (min-width: 768px) { h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; } + h1 { font-size: 2.75em; } + h2 { font-size: 2.3125em; } + h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.6875em; } + h4 { font-size: 1.4375em; } } +/* Print styles. Inlined to avoid required HTTP connection: www.phpied.com/delay-loading-your-print-css/ Credit to Paul Irish and HTML5 Boilerplate (html5boilerplate.com) +*/ +.print-only { display: none !important; } + +@media print { * { background: transparent !important; color: #000 !important; /* Black prints faster: h5bp.com/s */ box-shadow: none !important; text-shadow: none !important; } + a, a:visited { text-decoration: underline; } + a[href]:after { content: " (" attr(href) ")"; } + abbr[title]:after { content: " (" attr(title) ")"; } + .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; } + pre, blockquote { border: 1px solid #999; page-break-inside: avoid; } + thead { display: table-header-group; /* h5bp.com/t */ } + tr, img { page-break-inside: avoid; } + img { max-width: 100% !important; } + @page { margin: 0.5cm; } + p, h2, h3, #toctitle, .sidebarblock > .content > .title { orphans: 3; widows: 3; } + h2, h3, #toctitle, .sidebarblock > .content > .title { page-break-after: avoid; } + .hide-on-print { display: none !important; } + .print-only { display: block !important; } + .hide-for-print { display: none !important; } + .show-for-print { display: inherit !important; } } +/* Tables */ +table { background: white; margin-bottom: 1.25em; border: solid 0 #dddddd; } +table thead, table tfoot { background: none; font-weight: bold; } +table thead tr th, table thead tr td, table tfoot tr th, table tfoot tr td { padding: 1px 8px 1px 5px; font-size: 1em; color: #222222; text-align: left; } +table tr th, table tr td { padding: 1px 8px 1px 5px; font-size: 1em; color: #222222; } +table tr.even, table tr.alt, table tr:nth-of-type(even) { background: none; } +table thead tr th, table tfoot tr th, table tbody tr td, table tr td, table tfoot tr td { display: table-cell; line-height: 1.5; } + +.clearfix:before, .clearfix:after, .float-group:before, .float-group:after { content: " "; display: table; } +.clearfix:after, .float-group:after { clear: both; } + +*:not(pre) > code { font-size: 0.95em; padding: 0; white-space: nowrap; background-color: #f2f2f2; border: 0 solid #dddddd; -webkit-border-radius: 6px; border-radius: 6px; text-shadow: none; } + +pre, pre > code { line-height: 1.2; color: inherit; font-family: "Consolas", "Deja Vu Sans Mono", "Bitstream Vera Sans Mono", monospace; font-weight: normal; } + +.keyseq { color: #333333; } + +kbd:not(.keyseq) { display: inline-block; color: black; font-size: 0.75em; line-height: 1.4; background-color: #F7F7F7; border: 1px solid #ccc; -webkit-border-radius: 3px; border-radius: 3px; -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 2px white inset; box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 2px white inset; margin: -0.15em 0.15em 0 0.15em; padding: 0.2em 0.6em 0.2em 0.5em; vertical-align: middle; white-space: nowrap; } + +.keyseq kbd:first-child { margin-left: 0; } + +.keyseq kbd:last-child { margin-right: 0; } + +.menuseq, .menu { color: black; } + +b.button:before, b.button:after { position: relative; top: -1px; font-weight: normal; } + +b.button:before { content: "["; padding: 0 3px 0 2px; } + +b.button:after { content: "]"; padding: 0 2px 0 3px; } + +p a > code:hover { color: #373737; } + +#header, #content, #footnotes, #footer { width: 100%; margin-left: auto; margin-right: auto; margin-top: 0; margin-bottom: 0; max-width: 62.5em; *zoom: 1; position: relative; padding-left: 0.9375em; padding-right: 0.9375em; } +#header:before, #header:after, #content:before, #content:after, #footnotes:before, #footnotes:after, #footer:before, #footer:after { content: " "; display: table; } +#header:after, #content:after, #footnotes:after, #footer:after { clear: both; } + +#header { margin-bottom: 2.5em; } +#header > h1 { color: #111111; font-weight: bold; border-bottom: 1px solid #dddddd; margin-bottom: -28px; padding-bottom: 32px; } +#header span { color: #909ea7; } +#header #revnumber { text-transform: capitalize; } +#header br { display: none; } +#header br + span { padding-left: 3px; } +#header br + span:before { content: "\2013 \0020"; } +#header br + span.author { padding-left: 0; } +#header br + span.author:before { content: ", "; } + +#toc { border-bottom: 1px solid #dddddd; padding-bottom: 1.25em; } +#toc > ul { margin-left: 0.25em; } +#toc ul.sectlevel0 > li > a { font-style: italic; } +#toc ul.sectlevel0 ul.sectlevel1 { margin-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; } +#toc ul { list-style-type: none; } + +#toctitle { color: #6c818f; } + +@media only screen and (min-width: 768px) { body.toc2 { padding-left: 15em; padding-right: 0; } + #toc.toc2 { position: fixed; width: 15em; left: 0; top: 0; border-right: 1px solid #dddddd; border-bottom: 0; z-index: 1000; padding: 1em; height: 100%; overflow: auto; } + #toc.toc2 #toctitle { margin-top: 0; font-size: 1.2em; } + #toc.toc2 > ul { font-size: .90em; } + #toc.toc2 ul ul { margin-left: 0; padding-left: 1em; } + #toc.toc2 ul.sectlevel0 ul.sectlevel1 { padding-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; } + body.toc2.toc-right { padding-left: 0; padding-right: 15em; } + body.toc2.toc-right #toc.toc2 { border-right: 0; border-left: 1px solid #dddddd; left: auto; right: 0; } } +@media only screen and (min-width: 1280px) { body.toc2 { padding-left: 20em; padding-right: 0; } + #toc.toc2 { width: 20em; } + #toc.toc2 #toctitle { font-size: 1.375em; } + #toc.toc2 > ul { font-size: 0.95em; } + #toc.toc2 ul ul { padding-left: 1.25em; } + body.toc2.toc-right { padding-left: 0; padding-right: 20em; } } +#content #toc { border-style: solid; border-width: 1px; border-color: #d9d9d9; margin-bottom: 1.25em; padding: 1.25em; background: #f2f2f2; border-width: 0; -webkit-border-radius: 6px; border-radius: 6px; } +#content #toc > :first-child { margin-top: 0; } +#content #toc > :last-child { margin-bottom: 0; } +#content #toc a { text-decoration: none; } + +#content #toctitle { font-weight: bold; font-family: ff-meta-web-pro-1, ff-meta-web-pro-2, Arial, "Helvetica Neue", sans-serif; font-size: 1em; padding-left: 0.125em; } + +#footer { max-width: 100%; background-color: black; padding: 1.25em; } + +#footer-text { color: white; line-height: 1.35; } + +.sect1 { padding-bottom: 1.25em; } + +.sect1 + .sect1 { border-top: 1px solid #dddddd; } + +#content h1 > a.anchor, h2 > a.anchor, h3 > a.anchor, #toctitle > a.anchor, .sidebarblock > .content > .title > a.anchor, h4 > a.anchor, h5 > a.anchor, h6 > a.anchor { position: absolute; width: 1em; margin-left: -1em; display: block; text-decoration: none; visibility: hidden; text-align: center; font-weight: normal; } +#content h1 > a.anchor:before, h2 > a.anchor:before, h3 > a.anchor:before, #toctitle > a.anchor:before, .sidebarblock > .content > .title > a.anchor:before, h4 > a.anchor:before, h5 > a.anchor:before, h6 > a.anchor:before { content: '\00A7'; font-size: .85em; vertical-align: text-top; display: block; margin-top: 0.05em; } +#content h1:hover > a.anchor, #content h1 > a.anchor:hover, h2:hover > a.anchor, h2 > a.anchor:hover, h3:hover > a.anchor, #toctitle:hover > a.anchor, .sidebarblock > .content > .title:hover > a.anchor, h3 > a.anchor:hover, #toctitle > a.anchor:hover, .sidebarblock > .content > .title > a.anchor:hover, h4:hover > a.anchor, h4 > a.anchor:hover, h5:hover > a.anchor, h5 > a.anchor:hover, h6:hover > a.anchor, h6 > a.anchor:hover { visibility: visible; } +#content h1 > a.link, h2 > a.link, h3 > a.link, #toctitle > a.link, .sidebarblock > .content > .title > a.link, h4 > a.link, h5 > a.link, h6 > a.link { color: #465158; text-decoration: none; } +#content h1 > a.link:hover, h2 > a.link:hover, h3 > a.link:hover, #toctitle > a.link:hover, .sidebarblock > .content > .title > a.link:hover, h4 > a.link:hover, h5 > a.link:hover, h6 > a.link:hover { color: #3b444a; } + +.imageblock, .literalblock, .listingblock, .mathblock, .verseblock, .videoblock { margin-bottom: 1.25em; } + +.admonitionblock td.content > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .mathblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, .sidebarblock > .title, .tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { text-align: left; font-weight: bold; } + +.tableblock > caption { text-align: left; font-weight: bold; white-space: nowrap; overflow: visible; max-width: 0; } + +table.tableblock #preamble > .sectionbody > .paragraph:first-of-type p { font-size: inherit; } + +.admonitionblock > table { border: 0; background: none; width: 100%; } +.admonitionblock > table td.icon { text-align: center; width: 80px; } +.admonitionblock > table td.icon img { max-width: none; } +.admonitionblock > table td.icon .title { font-weight: bold; text-transform: uppercase; } +.admonitionblock > table td.content { padding-left: 1.125em; padding-right: 1.25em; border-left: 1px solid #dddddd; color: #909ea7; } +.admonitionblock > table td.content > :last-child > :last-child { margin-bottom: 0; } + +.exampleblock > .content { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: white; -webkit-border-radius: 6px; border-radius: 6px; } +.exampleblock > .content > :first-child { margin-top: 0; } +.exampleblock > .content > :last-child { margin-bottom: 0; } +.exampleblock > .content h1, .exampleblock > .content h2, .exampleblock > .content h3, .exampleblock > .content #toctitle, .sidebarblock.exampleblock > .content > .title, .exampleblock > .content h4, .exampleblock > .content h5, .exampleblock > .content h6, .exampleblock > .content p { color: #333333; } +.exampleblock > .content h1, .exampleblock > .content h2, .exampleblock > .content h3, .exampleblock > .content #toctitle, .sidebarblock.exampleblock > .content > .title, .exampleblock > .content h4, .exampleblock > .content h5, .exampleblock > .content h6 { line-height: 1; margin-bottom: 0.625em; } +.exampleblock > .content h1.subheader, .exampleblock > .content h2.subheader, .exampleblock > .content h3.subheader, .exampleblock > .content .subheader#toctitle, .sidebarblock.exampleblock > .content > .subheader.title, .exampleblock > .content h4.subheader, .exampleblock > .content h5.subheader, .exampleblock > .content h6.subheader { line-height: 1.4; } + +.exampleblock.result > .content { -webkit-box-shadow: 0 1px 8px #d9d9d9; box-shadow: 0 1px 8px #d9d9d9; } + +.sidebarblock { border-style: solid; border-width: 1px; border-color: #d9d9d9; margin-bottom: 1.25em; padding: 1.25em; background: #f2f2f2; -webkit-border-radius: 6px; border-radius: 6px; } +.sidebarblock > :first-child { margin-top: 0; } +.sidebarblock > :last-child { margin-bottom: 0; } +.sidebarblock h1, .sidebarblock h2, .sidebarblock h3, .sidebarblock #toctitle, .sidebarblock > .content > .title, .sidebarblock h4, .sidebarblock h5, .sidebarblock h6, .sidebarblock p { color: #333333; } +.sidebarblock h1, .sidebarblock h2, .sidebarblock h3, .sidebarblock #toctitle, .sidebarblock > .content > .title, .sidebarblock h4, .sidebarblock h5, .sidebarblock h6 { line-height: 1; margin-bottom: 0.625em; } +.sidebarblock h1.subheader, .sidebarblock h2.subheader, .sidebarblock h3.subheader, .sidebarblock .subheader#toctitle, .sidebarblock > .content > .subheader.title, .sidebarblock h4.subheader, .sidebarblock h5.subheader, .sidebarblock h6.subheader { line-height: 1.4; } +.sidebarblock > .content > .title { color: #6c818f; margin-top: 0; line-height: 1.5; } + +.exampleblock > .content > :last-child > :last-child, .exampleblock > .content .olist > ol > li:last-child > :last-child, .exampleblock > .content .ulist > ul > li:last-child > :last-child, .exampleblock > .content .qlist > ol > li:last-child > :last-child, .sidebarblock > .content > :last-child > :last-child, .sidebarblock > .content .olist > ol > li:last-child > :last-child, .sidebarblock > .content .ulist > ul > li:last-child > :last-child, .sidebarblock > .content .qlist > ol > li:last-child > :last-child { margin-bottom: 0; } + +.literalblock pre:not([class]), .listingblock pre:not([class]) { background: #eeeeee; } +.literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { border-width: 1px; border-style: solid; border-color: #cccccc; -webkit-border-radius: 6px; border-radius: 6px; padding: 0.5em; word-wrap: break-word; } +.literalblock pre.nowrap, .literalblock pre[class].nowrap, .listingblock pre.nowrap, .listingblock pre[class].nowrap { overflow-x: auto; white-space: pre; word-wrap: normal; } +.literalblock pre > code, .literalblock pre[class] > code, .listingblock pre > code, .listingblock pre[class] > code { display: block; } +@media only screen { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 0.76em; } } +@media only screen and (min-width: 768px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 0.855em; } } +@media only screen and (min-width: 1280px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 0.95em; } } + +.listingblock pre.highlight { padding: 0; } +.listingblock pre.highlight > code { padding: 0.5em; } + +.listingblock > .content { position: relative; } + +.listingblock:hover code[class*=" language-"]:before { text-transform: uppercase; font-size: 0.9em; color: #999; position: absolute; top: 0.375em; right: 0.375em; } + +.listingblock:hover code.asciidoc:before { content: "asciidoc"; } +.listingblock:hover code.clojure:before { content: "clojure"; } +.listingblock:hover code.css:before { content: "css"; } +.listingblock:hover code.groovy:before { content: "groovy"; } +.listingblock:hover code.html:before { content: "html"; } +.listingblock:hover code.java:before { content: "java"; } +.listingblock:hover code.javascript:before { content: "javascript"; } +.listingblock:hover code.python:before { content: "python"; } +.listingblock:hover code.ruby:before { content: "ruby"; } +.listingblock:hover code.sass:before { content: "sass"; } +.listingblock:hover code.scss:before { content: "scss"; } +.listingblock:hover code.xml:before { content: "xml"; } +.listingblock:hover code.yaml:before { content: "yaml"; } + +.listingblock.terminal pre .command:before { content: attr(data-prompt); padding-right: 0.5em; color: #999; } + +.listingblock.terminal pre .command:not([data-prompt]):before { content: '$'; } + +table.pyhltable { border: 0; margin-bottom: 0; } + +table.pyhltable td { vertical-align: top; padding-top: 0; padding-bottom: 0; } + +table.pyhltable td.code { padding-left: .75em; padding-right: 0; } + +.highlight.pygments .lineno, table.pyhltable td:not(.code) { color: #999; padding-left: 0; padding-right: .5em; border-right: 1px solid #dddddd; } + +.highlight.pygments .lineno { display: inline-block; margin-right: .25em; } + +table.pyhltable .linenodiv { background-color: transparent !important; padding-right: 0 !important; } + +.quoteblock { margin: 0 0 1.25em; padding: 0.5625em 1.25em 0 1.1875em; border-left: 1px solid #dddddd; } +.quoteblock blockquote { margin: 0 0 1.25em 0; padding: 0 0 0.5625em 0; border: 0; } +.quoteblock blockquote > .paragraph:last-child p { margin-bottom: 0; } +.quoteblock .attribution { margin-top: -.25em; padding-bottom: 0.5625em; font-size: 0.8125em; color: #748590; } +.quoteblock .attribution br { display: none; } +.quoteblock .attribution cite { display: block; margin-bottom: 0.625em; } + +table thead th, table tfoot th { font-weight: bold; } + +table.tableblock.grid-all { border-collapse: separate; border-spacing: 1px; -webkit-border-radius: 6px; border-radius: 6px; border-top: 0 solid #dddddd; border-bottom: 0 solid #dddddd; } + +table.tableblock.frame-topbot, table.tableblock.frame-none { border-left: 0; border-right: 0; } + +table.tableblock.frame-sides, table.tableblock.frame-none { border-top: 0; border-bottom: 0; } + +table.tableblock td .paragraph:last-child p > p:last-child, table.tableblock th > p:last-child, table.tableblock td > p:last-child { margin-bottom: 0; } + +th.tableblock.halign-left, td.tableblock.halign-left { text-align: left; } + +th.tableblock.halign-right, td.tableblock.halign-right { text-align: right; } + +th.tableblock.halign-center, td.tableblock.halign-center { text-align: center; } + +th.tableblock.valign-top, td.tableblock.valign-top { vertical-align: top; } + +th.tableblock.valign-bottom, td.tableblock.valign-bottom { vertical-align: bottom; } + +th.tableblock.valign-middle, td.tableblock.valign-middle { vertical-align: middle; } + +tbody tr th { display: table-cell; line-height: 1.5; background: none; } + +tbody tr th, tbody tr th p, tfoot tr th, tfoot tr th p { color: #222222; font-weight: bold; } + +td > div.verse { white-space: pre; } + +ol { margin-left: 0.25em; } + +ul li ol { margin-left: 0; } + +dl dd { margin-left: 1.125em; } + +dl dd:last-child, dl dd:last-child > :last-child { margin-bottom: 0; } + +ol > li p, ul > li p, ul dd, ol dd, .olist .olist, .ulist .ulist, .ulist .olist, .olist .ulist { margin-bottom: 0.625em; } + +ul.unstyled, ol.unnumbered, ul.checklist, ul.none { list-style-type: none; } + +ul.unstyled, ol.unnumbered, ul.checklist { margin-left: 0.625em; } + +ul.checklist li > p:first-child > i[class^="icon-check"]:first-child, ul.checklist li > p:first-child > input[type="checkbox"]:first-child { margin-right: 0.25em; } + +ul.checklist li > p:first-child > input[type="checkbox"]:first-child { position: relative; top: 1px; } + +ul.inline { margin: 0 auto 0.625em auto; margin-left: -1.375em; margin-right: 0; padding: 0; list-style: none; overflow: hidden; } +ul.inline > li { list-style: none; float: left; margin-left: 1.375em; display: block; } +ul.inline > li > * { display: block; } + +.unstyled dl dt { font-weight: normal; font-style: normal; } + +ol.arabic { list-style-type: decimal; } + +ol.decimal { list-style-type: decimal-leading-zero; } + +ol.loweralpha { list-style-type: lower-alpha; } + +ol.upperalpha { list-style-type: upper-alpha; } + +ol.lowerroman { list-style-type: lower-roman; } + +ol.upperroman { list-style-type: upper-roman; } + +ol.lowergreek { list-style-type: lower-greek; } + +.hdlist > table, .colist > table { border: 0; background: none; } +.hdlist > table > tbody > tr, .colist > table > tbody > tr { background: none; } + +td.hdlist1 { padding-right: .75em; font-weight: bold; } + +td.hdlist1, td.hdlist2 { vertical-align: top; } + +.literalblock + .colist, .listingblock + .colist { margin-top: -0.5em; } + +.colist > table tr > td:first-of-type { padding: 0 .75em; line-height: 1; } +.colist > table tr > td:last-of-type { padding: 0.25em 0; } + +.qanda > ol > li > p > em:only-child { color: #373737; } + +.thumb, .th { line-height: 0; display: inline-block; border: solid 4px white; -webkit-box-shadow: 0 0 0 1px #dddddd; box-shadow: 0 0 0 1px #dddddd; } + +.imageblock.left, .imageblock[style*="float: left"] { margin: 0.25em 0.625em 1.25em 0; } +.imageblock.right, .imageblock[style*="float: right"] { margin: 0.25em 0 1.25em 0.625em; } +.imageblock > .title { margin-bottom: 0; } +.imageblock.thumb, .imageblock.th { border-width: 6px; } +.imageblock.thumb > .title, .imageblock.th > .title { padding: 0 0.125em; } + +.image.left, .image.right { margin-top: 0.25em; margin-bottom: 0.25em; display: inline-block; line-height: 0; } +.image.left { margin-right: 0.625em; } +.image.right { margin-left: 0.625em; } + +a.image { text-decoration: none; } + +span.footnote, span.footnoteref { vertical-align: super; font-size: 0.875em; } +span.footnote a, span.footnoteref a { text-decoration: none; } + +#footnotes { padding-top: 0.75em; padding-bottom: 0.75em; margin-bottom: 0.625em; } +#footnotes hr { width: 20%; min-width: 6.25em; margin: -.25em 0 .75em 0; border-width: 1px 0 0 0; } +#footnotes .footnote { padding: 0 0.375em; line-height: 1.3; font-size: 0.875em; margin-left: 1.2em; text-indent: -1.2em; margin-bottom: .2em; } +#footnotes .footnote a:first-of-type { font-weight: bold; text-decoration: none; } +#footnotes .footnote:last-of-type { margin-bottom: 0; } + +#content #footnotes { margin-top: -0.625em; margin-bottom: 0; padding: 0.75em 0; } + +.gist .file-data > table { border: none; background: #fff; width: 100%; margin-bottom: 0; } +.gist .file-data > table td.line-data { width: 99%; } + +div.unbreakable { page-break-inside: avoid; } + +.big { font-size: larger; } + +.small { font-size: smaller; } + +.underline { text-decoration: underline; } + +.overline { text-decoration: overline; } + +.line-through { text-decoration: line-through; } + +.aqua { color: #00bfbf; } + +.aqua-background { background-color: #00fafa; } + +.black { color: black; } + +.black-background { background-color: black; } + +.blue { color: #0000bf; } + +.blue-background { background-color: #0000fa; } + +.fuchsia { color: #bf00bf; } + +.fuchsia-background { background-color: #fa00fa; } + +.gray { color: #606060; } + +.gray-background { background-color: #7d7d7d; } + +.green { color: #006000; } + +.green-background { background-color: #007d00; } + +.lime { color: #00bf00; } + +.lime-background { background-color: #00fa00; } + +.maroon { color: #600000; } + +.maroon-background { background-color: #7d0000; } + +.navy { color: #000060; } + +.navy-background { background-color: #00007d; } + +.olive { color: #606000; } + +.olive-background { background-color: #7d7d00; } + +.purple { color: #600060; } + +.purple-background { background-color: #7d007d; } + +.red { color: #bf0000; } + +.red-background { background-color: #fa0000; } + +.silver { color: #909090; } + +.silver-background { background-color: #bcbcbc; } + +.teal { color: #006060; } + +.teal-background { background-color: #007d7d; } + +.white { color: #bfbfbf; } + +.white-background { background-color: #fafafa; } + +.yellow { color: #bfbf00; } + +.yellow-background { background-color: #fafa00; } + +span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } + +.admonitionblock td.icon [class^="icon-"]:before { font-size: 2.5em; text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); cursor: default; } +.admonitionblock td.icon .icon-note:before { content: "\f05a"; color: #444444; color: #333333; } +.admonitionblock td.icon .icon-tip:before { content: "\f0eb"; text-shadow: 1px 1px 2px rgba(155, 155, 0, 0.8); color: #111; } +.admonitionblock td.icon .icon-warning:before { content: "\f071"; color: #bf6900; } +.admonitionblock td.icon .icon-caution:before { content: "\f06d"; color: #bf3400; } +.admonitionblock td.icon .icon-important:before { content: "\f06a"; color: #bf0000; } + +.conum { display: inline-block; color: white !important; background-color: black; -webkit-border-radius: 100px; border-radius: 100px; text-align: center; width: 20px; height: 20px; font-size: 12px; font-weight: bold; line-height: 20px; font-family: Arial, sans-serif; font-style: normal; position: relative; top: -2px; letter-spacing: -1px; } +.conum * { color: white !important; } +.conum + b { display: none; } +.conum:after { content: attr(data-value); } +.conum:not([data-value]):empty { display: none; } + +.listingblock code { white-space: pre; overflow: auto; overflow-wrap: normal; /* needed for webkit browsers */ } + +#toc ul.sectlevel0 > li > a { font-style: normal; font-weight: bold; } + +h4 { color: #6c818f; } + +.literalblock > .content > pre, .listingblock > .content > pre { -webkit-border-radius: 6px; border-radius: 6px; margin-left: 2em; margin-right: 2em; } + +.admonitionblock { margin-left: 2em; margin-right: 2em; } +.admonitionblock > table { border: 1px solid #609060; border-top-width: 1.5em; background-color: #e9ffe9; border-collapse: separate; -webkit-border-radius: 0; border-radius: 0; } +.admonitionblock > table td.icon { padding-top: .5em; padding-bottom: .5em; } +.admonitionblock > table td.content { padding: .5em 1em; color: black; font-size: .9em; border-left: none; } + +.sidebarblock { background-color: #e8ecef; border-color: #ccc; } +.sidebarblock > .content > .title { color: #444444; } + +table.tableblock.grid-all { border-collapse: collapse; -webkit-border-radius: 0; border-radius: 0; } +table.tableblock.grid-all th.tableblock, table.tableblock.grid-all td.tableblock { border-bottom: 1px solid #aaa; } + +#footer { background-color: #465158; padding: 2em; } + +#footer-text { color: #eee; font-size: 0.8em; text-align: center; } +</style> +<style> +/* Foundation stylesheet for CodeRay (to match GitHub theme) | MIT License | http://foundation.zurb.com */ +table.CodeRay { border-collapse: collapse; padding: 2px; margin-bottom: 0; border: 0; background: transparent; } +table.CodeRay td { padding: 0 .5em; vertical-align: top; } +table.CodeRay td.line-numbers { text-align: right; color: #999; border-right: 1px solid #e5e5e5; padding-left: 0; } +span.line-numbers { border-right: 1px solid #E5E5E5; color: #999; display: inline-block; margin-right: 0.5em; padding-right: 0.5em; } +.CodeRay td.line-numbers strong, .CodeRay span.line-numbers strong { font-weight: normal; } +.CodeRay .debug { color: white !important; background: blue !important; } +.CodeRay .annotation { color: #007; } +.CodeRay .attribute-name { color: #f08; } +.CodeRay .attribute-value { color: #700; } +.CodeRay .binary { color: #509; } +.CodeRay .comment { color: #999; font-style: italic; } +.CodeRay .char { color: #04D; } +.CodeRay .char .content { color: #04D; } +.CodeRay .char .delimiter { color: #039; } +.CodeRay .class { color: #458; } +.CodeRay .complex { color: #A08; } +.CodeRay .constant { color: teal; } +.CodeRay .color { color: #0A0; } +.CodeRay .class-variable { color: #369; } +.CodeRay .decorator { color: #B0B; } +.CodeRay .definition { color: #099; } +.CodeRay .directive { color: #088; } +.CodeRay .delimiter { color: black; } +.CodeRay .doc { color: #970; } +.CodeRay .doctype { color: #34b; } +.CodeRay .doc-string { color: #D42; } +.CodeRay .escape { color: #666; } +.CodeRay .entity { color: #800; } +.CodeRay .error { color: #808; } +.CodeRay .exception { color: #C00; } +.CodeRay .filename { color: #099; } +.CodeRay .function { color: #900; } +.CodeRay .global-variable { color: teal; } +.CodeRay .hex { color: #058; } +.CodeRay .integer { color: #099; } +.CodeRay .include { color: #B44; } +.CodeRay .inline { color: black; } +.CodeRay .inline .inline { background: #ccc; } +.CodeRay .inline .inline .inline { background: #bbb; } +.CodeRay .inline .inline-delimiter { color: #D14; } +.CodeRay .inline-delimiter { color: #D14; } +.CodeRay .important { color: #f00; } +.CodeRay .interpreted { color: #B2B; } +.CodeRay .instance-variable { color: teal; } +.CodeRay .label { color: #970; } +.CodeRay .local-variable { color: #963; } +.CodeRay .octal { color: #40E; } +.CodeRay .predefined { color: #369; } +.CodeRay .preprocessor { color: #579; } +.CodeRay .pseudo-class { color: #00C; } +.CodeRay .predefined-type { color: #074; } +.CodeRay .reserved, .keyword { color: #000; } +.CodeRay .key { color: #808; } +.CodeRay .key .delimiter { color: #606; } +.CodeRay .key .char { color: #80f; } +.CodeRay .value { color: #088; } +.CodeRay .regexp { background-color: #fff0ff; } +.CodeRay .regexp .content { color: #808; } +.CodeRay .regexp .delimiter { color: #404; } +.CodeRay .regexp .modifier { color: #C2C; } +.CodeRay .regexp .function { color: #404; font-weight: bold; } +.CodeRay .string { color: #D20; } +.CodeRay .string .string { } +.CodeRay .string .string .string { background-color: #ffd0d0; } +.CodeRay .string .content { color: #D14; } +.CodeRay .string .char { color: #D14; } +.CodeRay .string .delimiter { color: #D14; } +.CodeRay .shell { color: #D14; } +.CodeRay .shell .content { } +.CodeRay .shell .delimiter { color: #D14; } +.CodeRay .symbol { color: #990073; } +.CodeRay .symbol .content { color: #A60; } +.CodeRay .symbol .delimiter { color: #630; } +.CodeRay .tag, .CodeRay .attribute-name { color: #070; } +.CodeRay .tag-special { color: #D70; } +.CodeRay .type { color: #339; } +.CodeRay .variable { color: #036; } +.CodeRay .insert { background: #afa; } +.CodeRay .delete { background: #faa; } +.CodeRay .change { color: #aaf; background: #007; } +.CodeRay .head { color: #f8f; background: #505; } +.CodeRay .insert .insert { color: #080; } +.CodeRay .delete .delete { color: #800; } +.CodeRay .change .change { color: #66f; } +.CodeRay .head .head { color: #f4f; } + +</style> +</head> +<body class="book toc2 toc-left"> +<div id="header"> +<div id="toc" class="toc2"> +<div id="toctitle">Table of Contents</div> +<ul class="sectlevel0"> +<li><a href="#_tinkerpop_upgrade_information">TinkerPop Upgrade Information</a></li> +<li><a href="#_tinkerpop_3_2_0">TinkerPop 3.2.0</a></li> +<li> +<ul class="sectlevel1"> +<li><a href="#_tinkerpop_3_2_6">TinkerPop 3.2.6</a></li> +<li> +<ul class="sectlevel2"> +<li><a href="#_upgrading_for_users">Upgrading for Users</a></li> +<li><a href="#_upgrading_for_providers">Upgrading for Providers</a></li> +</ul> +</li> +<li><a href="#_tinkerpop_3_2_5">TinkerPop 3.2.5</a></li> +<li> +<ul class="sectlevel2"> +<li><a href="#_upgrading_for_users_2">Upgrading for Users</a></li> +<li> +<ul class="sectlevel3"> +<li><a href="#_graphson_path_serialization">GraphSON Path Serialization</a></li> +<li><a href="#_dsl_support">DSL Support</a></li> +<li><a href="#_authentication_configuration">Authentication Configuration</a></li> +<li><a href="#_default_maximum_parameters">Default Maximum Parameters</a></li> +<li><a href="#_gremlinscriptengine_metrics">GremlinScriptEngine Metrics</a></li> +<li><a href="#_additional_error_information">Additional Error Information</a></li> +<li><a href="#_gremlin_console_scripting">Gremlin Console Scripting</a></li> +<li><a href="#_path_support_for_by_from_to_modulation">Path support for by()-, from()-, to()-modulation</a></li> +<li><a href="#_graphmanager_versus_defaultgraphmanager">GraphManager versus DefaultGraphManager</a></li> +<li><a href="#_gremlin_python_driver">Gremlin-Python Driver</a></li> +</ul> +</li> +<li><a href="#_upgrading_for_providers_2">Upgrading for Providers</a></li> +<li> +<ul class="sectlevel4"> +<li><a href="#_simplepathstep_and_cyclicpathstep_now_pathfilterstep">SimplePathStep and CyclicPathStep now PathFilterStep</a></li> +<li><a href="#_lazybarrierstrategy_no_longer_end_appends_barriers">LazyBarrierStrategy No Longer End Appends Barriers</a></li> +</ul> +</li> +</ul> +</li> +<li><a href="#_tinkerpop_3_2_4">TinkerPop 3.2.4</a></li> +<li> +<ul class="sectlevel2"> +<li><a href="#_upgrading_for_users_3">Upgrading for Users</a></li> +<li> +<ul class="sectlevel3"> +<li><a href="#_tinkergraph_deserialization">TinkerGraph Deserialization</a></li> +<li><a href="#_traversal_promises">Traversal Promises</a></li> +<li><a href="#_if_then_semantics_with_choose_step">If/Then-Semantics with Choose Step</a></li> +<li><a href="#_fastnosuchelementexception_converted_to_regular_nosuchelementexception">FastNoSuchElementException converted to regular NoSuchElementException</a></li> +<li><a href="#_scriptengine_support_in_gremlin_core">ScriptEngine support in gremlin-core</a></li> +<li><a href="#_ssl_client_authentication">SSL Client Authentication</a></li> +</ul> +</li> +<li><a href="#_upgrading_for_providers_3">Upgrading for Providers</a></li> +<li> +<ul class="sectlevel3"> +<li><a href="#_graph_database_providers">Graph Database Providers</a></li> +<li><a href="#_drivers_providers">Drivers Providers</a></li> +</ul> +</li> +</ul> +</li> +<li><a href="#_tinkerpop_3_2_3">TinkerPop 3.2.3</a></li> +<li> +<ul class="sectlevel2"> +<li><a href="#_upgrading_for_users_4">Upgrading for Users</a></li> +<li> +<ul class="sectlevel3"> +<li><a href="#_renamed_null_result_preference">Renamed Null Result Preference</a></li> +<li><a href="#_java_driver_keep_alive">Java Driver Keep-Alive</a></li> +<li><a href="#_where_step_supports_by_modulation">Where Step Supports By-Modulation</a></li> +<li><a href="#_change_in_has_method_signatures">Change In has() Method Signatures</a></li> +<li><a href="#_deprecated_reconnectinitialdelay">Deprecated reconnectInitialDelay</a></li> +<li><a href="#_traversalsource_close">TraversalSource.close()</a></li> +<li><a href="#_io_reference_documentation">IO Reference Documentation</a></li> +</ul> +</li> +<li><a href="#_upgrading_for_providers_4">Upgrading for Providers</a></li> +<li> +<ul class="sectlevel3"> +<li><a href="#_graph_system_providers">Graph System Providers</a></li> +</ul> +</li> +</ul> +</li> +<li><a href="#_tinkerpop_3_2_2">TinkerPop 3.2.2</a></li> +<li> +<ul class="sectlevel2"> +<li><a href="#_upgrading_for_users_5">Upgrading for Users</a></li> +<li> +<ul class="sectlevel3"> +<li><a href="#_graphson_2_0">GraphSON 2.0</a></li> +<li><a href="#_log4j_dependencies">Log4j Dependencies</a></li> +<li><a href="#_default_for_gremlinpool">Default for gremlinPool</a></li> +<li><a href="#_new_console_features">New Console Features</a></li> +</ul> +</li> +<li><a href="#_upgrading_for_providers_5">Upgrading for Providers</a></li> +<li> +<ul class="sectlevel3"> +<li><a href="#_graph_system_providers_2">Graph System Providers</a></li> +<li><a href="#_drivers_providers_2">Drivers Providers</a></li> +</ul> +</li> +</ul> +</li> +<li><a href="#_tinkerpop_3_2_1">TinkerPop 3.2.1</a></li> +<li> +<ul class="sectlevel2"> +<li><a href="#_upgrading_for_users_6">Upgrading for Users</a></li> +<li> +<ul class="sectlevel3"> +<li><a href="#_gephi_plugin">Gephi Plugin</a></li> +<li><a href="#_gryomapper_construction">GryoMapper Construction</a></li> +<li><a href="#_traversalvertexprogram">TraversalVertexProgram</a></li> +<li><a href="#_interrupting_traversals">Interrupting Traversals</a></li> +<li><a href="#_gremlin_console_flags">Gremlin Console Flags</a></li> +</ul> +</li> +<li><a href="#_upgrading_for_providers_6">Upgrading for Providers</a></li> +<li> +<ul class="sectlevel3"> +<li><a href="#_graph_system_providers_3">Graph System Providers</a></li> +<li><a href="#_graph_database_providers_2">Graph Database Providers</a></li> +<li><a href="#_graph_language_providers">Graph Language Providers</a></li> +</ul> +</li> +</ul> +</li> +<li><a href="#_tinkerpop_3_2_0_2">TinkerPop 3.2.0</a></li> +<li> +<ul class="sectlevel2"> +<li><a href="#_upgrading_for_users_7">Upgrading for Users</a></li> +<li> +<ul class="sectlevel3"> +<li><a href="#_hadoop_filesystem_variable">Hadoop FileSystem Variable</a></li> +<li><a href="#_hadoop_configurations">Hadoop Configurations</a></li> +<li><a href="#_traversalsideeffects_update">TraversalSideEffects Update</a></li> +<li><a href="#_profilestep_update_and_graphtraversal_api_change">ProfileStep Update and GraphTraversal API Change</a></li> +<li><a href="#_branchstep_bug_fix">BranchStep Bug Fix</a></li> +<li><a href="#_memorycomputekey_and_vertexcomputekey">MemoryComputeKey and VertexComputeKey</a></li> +<li><a href="#_sparkgraphcomputer_and_giraphgraphcomputer_persistence">SparkGraphComputer and GiraphGraphComputer Persistence</a></li> +<li><a href="#_remotegraph">RemoteGraph</a></li> +</ul> +</li> +<li><a href="#_upgrading_for_providers_7">Upgrading for Providers</a></li> +<li> +<ul class="sectlevel3"> +<li><a href="#_graph_system_providers_4">Graph System Providers</a></li> +<li><a href="#_graph_processor_providers">Graph Processor Providers</a></li> +<li><a href="#_graph_language_providers_2">Graph Language Providers</a></li> +</ul> +</li> +</ul> +</li> +</ul> +</li> +<li><a href="#_tinkerpop_3_1_0">TinkerPop 3.1.0</a></li> +<li> +<ul class="sectlevel1"> +<li><a href="#_tinkerpop_3_1_7">TinkerPop 3.1.7</a></li> +<li> +<ul class="sectlevel2"> +<li><a href="#_upgrading_for_users_8">Upgrading for Users</a></li> +<li> +<ul class="sectlevel3"> +<li><a href="#_graphml_xslt">GraphML XSLT</a></li> +</ul> +</li> +</ul> +</li> +<li><a href="#_tinkerpop_3_1_6">TinkerPop 3.1.6</a></li> +<li> +<ul class="sectlevel2"> +<li><a href="#_upgrading_for_providers_8">Upgrading for Providers</a></li> +<li> +<ul class="sectlevel3"> +<li><a href="#_driver_providers">Driver Providers</a></li> +</ul> +</li> +</ul> +</li> +<li><a href="#_tinkerpop_3_1_5">TinkerPop 3.1.5</a></li> +<li> +<ul class="sectlevel2"> +<li><a href="#_upgrading_for_users_9">Upgrading for Users</a></li> +<li> +<ul class="sectlevel3"> +<li><a href="#_java_driver_and_close">Java Driver and close()</a></li> +</ul> +</li> +</ul> +</li> +<li><a href="#_tinkerpop_3_1_4">TinkerPop 3.1.4</a></li> +<li> +<ul class="sectlevel2"> +<li><a href="#_upgrading_for_users_10">Upgrading for Users</a></li> +<li> +<ul class="sectlevel3"> +<li><a href="#_gremlin_server_workers">Gremlin Server Workers</a></li> +</ul> +</li> +</ul> +</li> +<li><a href="#_tinkerpop_3_1_3">TinkerPop 3.1.3</a></li> +<li> +<ul class="sectlevel2"> +<li><a href="#_upgrading_for_users_11">Upgrading for Users</a></li> +<li> +<ul class="sectlevel3"> +<li><a href="#_reserved_gremlin_server_keys">Reserved Gremlin Server Keys</a></li> +<li><a href="#_remote_timeout">Remote Timeout</a></li> +<li><a href="#_gremlin_server_workers_2">Gremlin Server Workers</a></li> +</ul> +</li> +<li><a href="#_upgrading_for_providers_9">Upgrading for Providers</a></li> +<li> +<ul class="sectlevel3"> +<li><a href="#_graph_database_providers_3">Graph Database Providers</a></li> +<li><a href="#_graph_language_providers_3">Graph Language Providers</a></li> +<li><a href="#_driver_providers_2">Driver Providers</a></li> +</ul> +</li> +</ul> +</li> +<li><a href="#_tinkerpop_3_1_2">TinkerPop 3.1.2</a></li> +<li> +<ul class="sectlevel2"> +<li><a href="#_upgrading_for_users_12">Upgrading for Users</a></li> +<li> +<ul class="sectlevel3"> +<li><a href="#_aliasing_sessions">Aliasing Sessions</a></li> +<li><a href="#_remote_console">Remote Console</a></li> +<li><a href="#_console_remote_sessions">Console Remote Sessions</a></li> +<li><a href="#_tinkerpop_archetypes">TinkerPop Archetypes</a></li> +<li><a href="#_session_transaction_management">Session Transaction Management</a></li> +<li><a href="#_session_timeout_setting">Session Timeout Setting</a></li> +</ul> +</li> +<li><a href="#_upgrading_for_providers_10">Upgrading for Providers</a></li> +<li> +<ul class="sectlevel3"> +<li><a href="#_all_providers">All Providers</a></li> +<li><a href="#_graph_system_providers_5">Graph System Providers</a></li> +<li><a href="#_driver_providers_3">Driver Providers</a></li> +<li><a href="#_plugin_providers">Plugin Providers</a></li> +</ul> +</li> +</ul> +</li> +<li><a href="#_tinkerpop_3_1_1">TinkerPop 3.1.1</a></li> +<li> +<ul class="sectlevel2"> +<li><a href="#_upgrading_for_users_13">Upgrading for Users</a></li> +<li> +<ul class="sectlevel3"> +<li><a href="#_storage_i_o">Storage I/O</a></li> +<li><a href="#_gremlin_server_transaction_management">Gremlin Server Transaction Management</a></li> +<li><a href="#_deprecated_credentialsdblocation">Deprecated credentialsDbLocation</a></li> +<li><a href="#_tinkergraph_supports_any_i_o">TinkerGraph Supports Any I/O</a></li> +<li><a href="#_authenticator_method_deprecation">Authenticator Method Deprecation</a></li> +<li><a href="#_spark_persistence_updates">Spark Persistence Updates</a></li> +<li><a href="#_logging">Logging</a></li> +<li><a href="#_gremlin_server_sandboxing">Gremlin Server Sandboxing</a></li> +<li><a href="#_deprecated_supportsaddproperty">Deprecated supportsAddProperty()</a></li> +</ul> +</li> +<li><a href="#_upgrading_for_providers_11">Upgrading for Providers</a></li> +<li> +<ul class="sectlevel3"> +<li><a href="#_graph_system_providers_6">Graph System Providers</a></li> +<li><a href="#_graph_database_providers_4">Graph Database Providers</a></li> +<li><a href="#_graph_processor_providers_2">Graph Processor Providers</a></li> +</ul> +</li> +</ul> +</li> +<li><a href="#_tinkerpop_3_1_0_2">TinkerPop 3.1.0</a></li> +<li> +<ul class="sectlevel2"> +<li><a href="#_upgrading_for_users_14">Upgrading for Users</a></li> +<li> +<ul class="sectlevel3"> +<li><a href="#_shading_jackson">Shading Jackson</a></li> +<li><a href="#_partitionstrategy_and_vertexproperty">PartitionStrategy and VertexProperty</a></li> +<li><a href="#_gremlin_server_and_epoll">Gremlin Server and Epoll</a></li> +<li><a href="#_rebindings_deprecated">Rebindings Deprecated</a></li> +<li><a href="#_configurable_driver_channelizer">Configurable Driver Channelizer</a></li> +<li><a href="#_graphson_and_strict_option">GraphSON and Strict Option</a></li> +<li><a href="#_transaction_close_default_behavior">Transaction.close() Default Behavior</a></li> +<li><a href="#_threadlocal_transaction_settings">ThreadLocal Transaction Settings</a></li> +<li><a href="#_hadoop_gremlin">Hadoop-Gremlin</a></li> +<li><a href="#_spark_gremlin">Spark-Gremlin</a></li> +<li><a href="#_tinkergraph_serialization">TinkerGraph Serialization</a></li> +<li><a href="#_deprecation_in_tinkergraph">Deprecation in TinkerGraph</a></li> +<li><a href="#_deprecation_in_gremlin_groovy">Deprecation in Gremlin-Groovy</a></li> +<li><a href="#_gephi_traversal_visualization">Gephi Traversal Visualization</a></li> +<li><a href="#_alterations_to_graphtraversal">Alterations to GraphTraversal</a></li> +<li><a href="#_aliasing_remotes_in_the_console">Aliasing Remotes in the Console</a></li> +</ul> +</li> +<li><a href="#_upgrading_for_providers_12">Upgrading for Providers</a></li> +<li> +<ul class="sectlevel3"> +<li><a href="#_graph_system_providers_7">Graph System Providers</a></li> +<li><a href="#_driver_providers_4">Driver Providers</a></li> +</ul> +</li> +</ul> +</li> +</ul> +</li> +<li><a href="#_tinkerpop_3_0_0">TinkerPop 3.0.0</a></li> +<li> +<ul class="sectlevel1"> +<li><a href="#_tinkerpop_3_0_2">TinkerPop 3.0.2</a></li> +<li> +<ul class="sectlevel2"> +<li><a href="#_upgrading_for_users_15">Upgrading for Users</a></li> +<li> +<ul class="sectlevel3"> +<li><a href="#_bulkloadervertexprogram_blvp">BulkLoaderVertexProgram (BLVP)</a></li> +<li><a href="#_tinkergraph">TinkerGraph</a></li> +<li><a href="#_gremlin_driver_and_server">Gremlin Driver and Server</a></li> +</ul> +</li> +<li><a href="#_upgrading_for_providers_13">Upgrading for Providers</a></li> +<li> +<ul class="sectlevel3"> +<li><a href="#_graph_driver_providers">Graph Driver Providers</a></li> +</ul> +</li> +</ul> +</li> +<li><a href="#_tinkerpop_3_0_1">TinkerPop 3.0.1</a></li> +<li> +<ul class="sectlevel2"> +<li><a href="#_upgrading_for_users_16">Upgrading for Users</a></li> +<li> +<ul class="sectlevel3"> +<li><a href="#_gremlin_server">Gremlin Server</a></li> +<li><a href="#_neo4j">Neo4j</a></li> +</ul> +</li> +<li><a href="#_upgrading_for_providers_14">Upgrading for Providers</a></li> +<li> +<ul class="sectlevel3"> +<li><a href="#_graph_system_providers_8">Graph System Providers</a></li> +<li><a href="#_graph_driver_providers_2">Graph Driver Providers</a></li> +</ul> +</li> +</ul> +</li> +</ul> +</li> +</ul> +</div> +</div> +<div id="content"> +<div class="imageblock"> +<div class="content"> +<a class="image" href="http://tinkerpop.apache.org"><img src="../images/apache-tinkerpop-logo.png" alt="apache tinkerpop logo" width="500"></a> +</div> +</div> +<h1 id="_tinkerpop_upgrade_information" class="sect0">TinkerPop Upgrade Information</h1> +<div class="paragraph"> +<p>This document helps users of TinkerPop to understand the changes that come with each software release. It outlines +new features, how to resolve breaking changes and other information specific to a release. This document is useful +to end-users who are building applications on TinkerPop, but it is equally useful to TinkerPop providers, who +build libraries and other systems on the core APIs and protocols that TinkerPop exposes.</p> +</div> +<div class="paragraph"> +<p>These providers include:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>Graph System Provider</p> +<div class="ulist"> +<ul> +<li> +<p>Graph Database Provider</p> +</li> +<li> +<p>Graph Processor Provider</p> +</li> +</ul> +</div> +</li> +<li> +<p>Graph Driver Provider</p> +</li> +<li> +<p>Graph Language Provider</p> +</li> +<li> +<p>Graph Plugin Provider</p> +</li> +</ul> +</div> +<h1 id="_tinkerpop_3_2_0" class="sect0">TinkerPop 3.2.0</h1> +<div class="imageblock"> +<div class="content"> +<img src="https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/images/nine-inch-gremlins.png" alt="nine inch gremlins" width="225"> +</div> +</div> +<div class="paragraph"> +<p><strong>Nine Inch Gremlins</strong></p> +</div> +<div class="sect1"> +<h2 id="_tinkerpop_3_2_6">TinkerPop 3.2.6</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p><strong>Release Date: NOT OFFICIALLY RELEASED YET</strong></p> +</div> +<div class="sect2"> +<h3 id="_upgrading_for_users">Upgrading for Users</h3> + +</div> +<div class="sect2"> +<h3 id="_upgrading_for_providers">Upgrading for Providers</h3> + +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_tinkerpop_3_2_5">TinkerPop 3.2.5</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p><strong>Release Date: June 12, 2017</strong></p> +</div> +<div class="paragraph"> +<p>Please see the <a href="https://github.com/apache/tinkerpop/blob/3.2.5/CHANGELOG.asciidoc#release-3-2-5">changelog</a> for a complete list of all the modifications that are part of this release.</p> +</div> +<div class="sect2"> +<h3 id="_upgrading_for_users_2">Upgrading for Users</h3> +<div class="sect3"> +<h4 id="_graphson_path_serialization">GraphSON Path Serialization</h4> +<div class="paragraph"> +<p>Serialization of <code>Path</code> with GraphSON was inconsistent with Gryo in that all the properties on any elements of +the <code>Path</code> were being included. With Gryo that, correctly, was not happening as that could be extraordinarily +expensive. GraphSON serialization has now been modified to properly not include properties. That change can cause +breaks in application code if that application code tries to access properties on elements in a <code>Path</code> as they +will no longer be there. Applications that require the properties will need to alter their Gremlin to better +restrict the data they want to retrieve.</p> +</div> +<div class="paragraph"> +<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-1676">TINKERPOP-1676</a></p> +</div> +</div> +<div class="sect3"> +<h4 id="_dsl_support">DSL Support</h4> +<div class="paragraph"> +<p>It has always been possible to construct Domain Specific Languages (DSLs) with Gremlin, but the approach has required +a somewhat deep understanding of the TinkerPop code base and it is not something that has had a recommeded method +for implementation. With this release, TinkerPop simplifies DSL development and provides the best practices for their +implementation.</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="CodeRay"><code class="java language-java"><span class="comment">// standard Gremlin</span> +g.V().hasLabel(<span class="string"><span class="delimiter">'</span><span class="content">person</span><span class="delimiter">'</span></span>). + where(outE(<span class="string"><span class="delimiter">"</span><span class="content">created</span><span class="delimiter">"</span></span>).count().is(P.gte(<span class="integer">2</span>))).count() + +<span class="comment">// the same traversal as above written as a DSL</span> +social.persons().where(createdAtLeast(<span class="integer">2</span>)).count()</code></pre> +</div> +</div> +<div class="paragraph"> +<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-786">TINKERPOP-786</a>, +<a href="http://tinkerpop.apache.org/docs/3.2.5/dev/reference/#dsl">Reference Documentation</a></p> +</div> +</div> +<div class="sect3"> +<h4 id="_authentication_configuration">Authentication Configuration</h4> +<div class="paragraph"> +<p>The server settings previously used <code>authentication.className</code> to set an authenticator for the the two provided +authentication handler and channelizer classes to use. This has been deprecated in favor of <code>authentication.authenticator</code>. +A class that extends <code>AbstractAuthenticationHandler</code> may also now be provided as <code>authentication.authenticationHandler</code> +to be used in either of the provided channelizer classes to handle the provided authenticator</p> +</div> +<div class="paragraph"> +<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-1657">TINKERPOP-1657</a></p> +</div> +</div> +<div class="sect3"> +<h4 id="_default_maximum_parameters">Default Maximum Parameters</h4> +<div class="paragraph"> +<p>It was learned that compilation for scripts with large numbers of parameters is more expensive than those with less +parameters. It therefore becomes possible to make some mistakes with how Gremlin Server is used. A new setting on +the <code>StandardOpProcessor</code> and <code>SessionOpProcessor</code> called <code>maxParameters</code> controls the number of parameters that can +be passed in on a request. This setting is defaulted to sixteen.</p> +</div> +<div class="paragraph"> +<p>Users upgrading to this version may notice errors in their applications if they use more than sixteen parameters. To +fix this problem simply reconfigure Gremlin Server with a configuration as follows:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="CodeRay"><code class="yaml language-yaml"><span class="key">processors</span>: + - <span class="string"><span class="content">{ className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { maxParameters: 64 }}</span></span> + - <span class="string"><span class="content">{ className: org.apache.tinkerpop.gremlin.server.op.standard.StandardOpProcessor, config: { maxParameters: 64 }}</span></span></code></pre> +</div> +</div> +<div class="paragraph"> +<p>The above configuration allows sixty-four parameters to be passed on each request.</p> +</div> +<div class="paragraph"> +<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-1663">TINKERPOP-1663</a></p> +</div> +</div> +<div class="sect3"> +<h4 id="_gremlinscriptengine_metrics">GremlinScriptEngine Metrics</h4> +<div class="paragraph"> +<p>The <code>GremlinScriptEngine</code> has a number of new metrics about its cache size and script compilation times which should +be helpful in understanding usage problems. As <code>GremlinScriptEngine</code> instances are used in Gremlin Server these metrics +are naturally exposed as part of the standard <a href="http://tinkerpop.apache.org/docs/current/reference/#_metrics">metrics</a> +set. Note that metrics are captured for both sessionless requests as well as for each individual session that is opened.</p> +</div> +<div class="paragraph"> +<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-1644">TINKERPOP-1644</a></p> +</div> +</div> +<div class="sect3"> +<h4 id="_additional_error_information">Additional Error Information</h4> +<div class="paragraph"> +<p>Additional information on error responses from Gremlin Server should help make debugging errors easier. Error responses +now have both the exception hierarchy and the stack trace that was generated on the server. In this way, receiving an +error on a client doesn’t mean having to rifle through Gremlin Server logs to try to find the associated error.</p> +</div> +<div class="paragraph"> +<p>This change has been applied to all Gremlin Server protocols. For the binary protocol and the Java driver this change +means that the <code>ResponseException</code> thrown from calls to <code>submit()</code> requests to the server now have the following +methods:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="CodeRay"><code class="java language-java"><span class="directive">public</span> Optional<<span class="predefined-type">String</span>> getRemoteStackTrace() + +<span class="directive">public</span> Optional<<span class="predefined-type">List</span><<span class="predefined-type">String</span>>> getRemoteExceptionHierarchy()</code></pre> +</div> +</div> +<div class="paragraph"> +<p>The HTTP protocol has also been updated and returns both <code>exceptions</code> and <code>stackTrace</code> fields in the response:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="CodeRay"><code class="js language-js">{ + <span class="key"><span class="delimiter">"</span><span class="content">message</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">Division by zero</span><span class="delimiter">"</span></span>, + <span class="key"><span class="delimiter">"</span><span class="content">Exception-Class</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">java.lang.ArithmeticException</span><span class="delimiter">"</span></span>, + <span class="key"><span class="delimiter">"</span><span class="content">exceptions</span><span class="delimiter">"</span></span>: [<span class="string"><span class="delimiter">"</span><span class="content">java.lang.ArithmeticException</span><span class="delimiter">"</span></span>], + <span class="key"><span class="delimiter">"</span><span class="content">stackTrace</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">java.lang.ArithmeticException: Division by zero</span><span class="char">\n</span><span class="char">\t</span><span class="content">at java.math.BigDecimal.divide(BigDecimal.java:1742)</span><span class="char">\n</span><span class="char">\t</span><span class="content">at org.codehaus.groovy.runtime.typehandling.BigDecimalMath.divideImpl(BigDecimalMath.java:68)</span><span class="char">\n</span><span class="char">\t</span><span class="content">at org.codehaus.groovy.runtime.typehandling.IntegerMath.divideImpl(IntegerMath.java:49)</span><span class="char">\n</span><span class="char">\t</span><span class="content">at org.codehaus.groovy.runtime.dgmimpl.NumberNumberDiv$NumberNumber.invoke(NumberNumberDiv.java:323)</span><span class="char">\n</span><span class="ch ar">\t</span><span class="content">at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:56)</span><span class="char">\n</span><span class="char">\t</span><span class="content">at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)</span><span class="char">\n</span><span class="char">\t</span><span class="content">at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)</span><span class="char">\n</span><span class="char">\t</span><span class="content">at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)</span><span class="char">\n</span><span class="char">\t</span><span class="content">at Script4.run(Script4.groovy:1)</span><span class="char">\n</span><span class="char">\t</span><span class="content">at org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval(GremlinGroovyScriptEngine.java:834)</span><span class="char">\n</span><sp an class="char">\t</span><span class="content">at org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval(GremlinGroovyScriptEngine.java:547)</span><span class="char">\n</span><span class="char">\t</span><span class="content">at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:233)</span><span class="char">\n</span><span class="char">\t</span><span class="content">at org.apache.tinkerpop.gremlin.groovy.engine.ScriptEngines.eval(ScriptEngines.java:120)</span><span class="char">\n</span><span class="char">\t</span><span class="content">at org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor.lambda$eval$2(GremlinExecutor.java:314)</span><span class="char">\n</span><span class="char">\t</span><span class="content">at java.util.concurrent.FutureTask.run(FutureTask.java:266)</span><span class="char">\n</span><span class="char">\t</span><span class="content">at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)</span><spa n class="char">\n</span><span class="char">\t</span><span class="content">at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)</span><span class="char">\n</span><span class="char">\t</span><span class="content">at java.lang.Thread.run(Thread.java:745)</span><span class="char">\n</span><span class="delimiter">"</span></span> +}</code></pre> +</div> +</div> +<div class="paragraph"> +<p>Note that the <code>Exception-Class</code> which was added in a previous version has been deprecated and replaced by these new +fields.</p> +</div> +<div class="paragraph"> +<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-1044">TINKERPOP-1044</a></p> +</div> +</div> +<div class="sect3"> +<h4 id="_gremlin_console_scripting">Gremlin Console Scripting</h4> +<div class="paragraph"> +<p>The <code>gremlin.sh</code> command has two flags, <code>-i</code> and <code>-e</code>, which are used to pass a script and arguments into the Gremlin +Console for execution. Those flags now allow for passing multiple scripts and related arguments to be supplied which +can yield greater flexibilty in automation tasks.</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="CodeRay"><code class="bash language-bash">$ bin/gremlin.sh -i y.groovy 1 2 3 -i x.groovy +$ bin/gremlin.sh -e y.groovy 1 2 3 -e x.groovy</code></pre> +</div> +</div> +<div class="paragraph"> +<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-1653">TINKERPOP-1653</a></p> +</div> +</div> +<div class="sect3"> +<h4 id="_path_support_for_by_from_to_modulation">Path support for by()-, from()-, to()-modulation</h4> +<div class="paragraph"> +<p>It is now possible to extract analyze sub-paths using <code>from()</code> and <code>to()</code> modulations with respective, path-based steps. +Likewise, <code>simplePath()</code> and <code>cyclicPath()</code> now support, along with <code>from()</code> and <code>to()</code>, <code>by()</code>-modulation so the cyclicity +is determined by projections of the path data. This extension is fully backwards compatible.</p> +</div> +<div class="paragraph"> +<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-1387">TINKERPOP-1387</a></p> +</div> +</div> +<div class="sect3"> +<h4 id="_graphmanager_versus_defaultgraphmanager">GraphManager versus DefaultGraphManager</h4> +<div class="paragraph"> +<p>Gremlin Server previously implemented its own final <code>GraphManager</code> class. Now, the <code>GraphManager</code> has been changed to +an interface, and users can supply their own <code>GraphManager</code> implementations in their YAML. The previous <code>GraphManager</code> +class was meant be used by classes internal to Gremlin Server, but it was public so if it was used for some reason by +usrs then then a compile error can be expected. To correct this problem, which will likely manifest as a compile error +when trying to create a <code>new GraphManager()</code> instance, simply change the code to <code>new DefaultGraphManager(Settings)</code>.</p> +</div> +<div class="paragraph"> +<p>In addition to the change mentioned above, several methods on <code>GraphManager</code> were deprecated:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><code>getGraphs()</code> should be replaced by the combination of <code>getGraphNames()</code> and then <code>getGraph(String)</code></p> +</li> +<li> +<p><code>getTraversalSources()</code> is similarly replaced and should instead use a combinatio of <code>getTraversalSourceNames()</code> and +<code>getTraversalSource(String)</code></p> +</li> +</ul> +</div> +<div class="paragraph"> +<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-1438">TINKERPOP-1438</a></p> +</div> +</div> +<div class="sect3"> +<h4 id="_gremlin_python_driver">Gremlin-Python Driver</h4> +<div class="paragraph"> +<p>Gremlin-Python now offers a more complete driver implementation that uses connection pooling and +the Python <code>concurrent.futures</code> module to provide asynchronous I/0 using threading. The default underlying +websocket client implementation is still provided by Tornado, but it is trivial to plug in another client by +defining the <code>Transport</code> interface.</p> +</div> +<div class="paragraph"> +<p>Using the <code>DriverRemoteConnection</code> class is the exact same as in previous versions; however, +<code>DriverRemoteConnection</code> now uses the new <code>Client</code> class to submit messages to the server.</p> +</div> +<div class="paragraph"> +<p>The <code>Client</code> class implementation/interface is based on the Java Driver, with some restrictions. +Most notably, Gremlin-Python does not yet implement the <code>Cluster</code> class. Instead, <code>Client</code> is +instantiated directly. Usage is as follows:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="CodeRay"><code class="python language-python"><span class="keyword">from</span> <span class="include">gremlin_python.driver</span> <span class="keyword">import</span> <span class="include">client</span> + +client = client.Client(<span class="string"><span class="delimiter">'</span><span class="content">ws://localhost:8182/gremlin</span><span class="delimiter">'</span></span>, <span class="string"><span class="delimiter">'</span><span class="content">g</span><span class="delimiter">'</span></span>) +result_set = client.submit(<span class="string"><span class="delimiter">'</span><span class="content">1 + 1</span><span class="delimiter">'</span></span>) +future_results = result_set.all() <span class="comment"># returns a concurrent.futures.Future</span> +results = future_results.result() <span class="comment"># returns a list</span> +<span class="keyword">assert</span> results == [<span class="integer">2</span>] +client.close() <span class="comment"># don't forget to close underlying connections</span></code></pre> +</div> +</div> +<div class="paragraph"> +<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-1599">TINKERPOP-1599</a></p> +</div> +</div> +</div> +<div class="sect2"> +<h3 id="_upgrading_for_providers_2">Upgrading for Providers</h3> +<div class="sect4"> +<h5 id="_simplepathstep_and_cyclicpathstep_now_pathfilterstep">SimplePathStep and CyclicPathStep now PathFilterStep</h5> +<div class="paragraph"> +<p>The Gremlin traversal machine use to support two step instructions: <code>SimplePathStep</code> and <code>CyclicPathStep</code>. These have +been replaced by a high-level instruction called <code>PathFilterStep</code> which is boolean configured for simple or cyclic paths. +Furthermore, <code>PathFilterStep</code> also support <code>from()</code>-, <code>to()</code>-, and <code>by()</code>-modulation.</p> +</div> +</div> +<div class="sect4"> +<h5 id="_lazybarrierstrategy_no_longer_end_appends_barriers">LazyBarrierStrategy No Longer End Appends Barriers</h5> +<div class="paragraph"> +<p><code>LazyBarrierStrategy</code> was trying to do to much by considering <code>Traverser</code> effects on network I/O by appending an +<code>NoOpBarrierStrategy</code> to the end of the root traversal. This should not be accomplished by <code>LazyBarrierStrategy</code>, +but instead by <code>RemoteStrategy</code>. <code>RemoteStrategy</code> now tries to barrier-append. This may effect the reasoninig logic in +some <code>ProviderStrategies</code>. Most likely not, but just be aware.</p> +</div> +<div class="paragraph"> +<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-1627">TINKERPOP-1627</a></p> +</div> +</div> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_tinkerpop_3_2_4">TinkerPop 3.2.4</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p><strong>Release Date: February 8, 2017</strong></p> +</div> +<div class="paragraph"> +<p>Please see the <a href="https://github.com/apache/tinkerpop/blob/3.2.4/CHANGELOG.asciidoc#release-3-2-4">changelog</a> for a complete list of all the modifications that are part of this release.</p> +</div> +<div class="sect2"> +<h3 id="_upgrading_for_users_3">Upgrading for Users</h3> +<div class="sect3"> +<h4 id="_tinkergraph_deserialization">TinkerGraph Deserialization</h4> +<div class="paragraph"> +<p>A TinkerGraph deserialized from Gryo or GraphSON is now configured with multi-properties enabled. This change allows +TinkerGraphs returned from Gremlin Server to properly return multi-properties, which was a problem seen when +subgraphing a graph that contained properties with a setting other than <code>Cardinality.single</code>.</p> +</div> +<div class="paragraph"> +<p>This change could be considered breaking in the odd chance that a TinkerGraph returned from Gremlin Server was later +mutated, because calls to <code>property(k,v)</code> would default to <code>Cardinality.list</code> instead of <code>Cardinality.single</code>. In the +event that this is a problem, simple change calls to <code>property(k,v)</code> to <code>property(Cardinality.single,k,v)</code> and +explicitly set the <code>Cardinality</code>.</p> +</div> +<div class="paragraph"> +<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-1587">TINKERPOP-1587</a></p> +</div> +</div> +<div class="sect3"> +<h4 id="_traversal_promises">Traversal Promises</h4> +<div class="paragraph"> +<p>The <code>Traversal</code> API now has a new <code>promise()</code> method. These methods return a promise in the form of a +<code>CompleteableFuture</code>. Usage is as follows:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="CodeRay"><code class="groovy language-groovy">gremlin> promise = g.V().out().promise{<span class="local-variable">it</span>.next()} +==>java.util.concurrent.CompletableFuture<span class="error">@</span><span class="integer">4</span>aa3d36[Completed normally] +gremlin> promise.join() +==>v[<span class="integer">3</span>] +gremlin> promise.isDone() +==><span class="predefined-constant">true</span> +gremlin> g.V().out().promise{<span class="local-variable">it</span>.toList()}.thenApply{<span class="local-variable">it</span>.size()}.get() +==><span class="integer">6</span></code></pre> +</div> +</div> +<div class="paragraph"> +<p>At this time, this method is only used for traversals that are configured using <code>withRemote()</code>.</p> +</div> +<div class="paragraph"> +<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-1490">TINKERPOP-1490</a></p> +</div> +</div> +<div class="sect3"> +<h4 id="_if_then_semantics_with_choose_step">If/Then-Semantics with Choose Step</h4> +<div class="paragraph"> +<p>Gremlin’s <code>choose()</code>-step supports if/then/else-semantics. Thus, to effect if/then-semantics, <code>identity()</code> was required. +Thus, the following two traversals below are equivalent with the later being possible in this release.</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="CodeRay"><code class="groovy language-groovy">g.V().choose(hasLabel(<span class="string"><span class="delimiter">'</span><span class="content">person</span><span class="delimiter">'</span></span>),out(<span class="string"><span class="delimiter">'</span><span class="content">created</span><span class="delimiter">'</span></span>),identity()) +g.V().choose(hasLabel(<span class="string"><span class="delimiter">'</span><span class="content">person</span><span class="delimiter">'</span></span>),out(<span class="string"><span class="delimiter">'</span><span class="content">created</span><span class="delimiter">'</span></span>))</code></pre> +</div> +</div> +<div class="paragraph"> +<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-1508">TINKERPOP-1508</a></p> +</div> +</div> +<div class="sect3"> +<h4 id="_fastnosuchelementexception_converted_to_regular_nosuchelementexception">FastNoSuchElementException converted to regular NoSuchElementException</h4> +<div class="paragraph"> +<p>Previously, a call to <code>Traversal.next()</code> that did not have a result would throw a <code>FastNoSuchElementException</code>. +This has been changed to a regular <code>NoSuchElementException</code> that includes the stack trace. Code that explicitly catches +<code>FastNoSuchElementException</code> should be converted to check for the more general class of <code>NoSuchElementException</code>.</p> +</div> +<div class="paragraph"> +<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-1330">TINKERPOP-1330</a></p> +</div> +</div> +<div class="sect3"> +<h4 id="_scriptengine_support_in_gremlin_core">ScriptEngine support in gremlin-core</h4> +<div class="paragraph"> +<p><code>ScriptEngine</code> and <code>GremlinPlugin</code> infrastructure has been moved from gremlin-groovy to gremlin-core to allow for +better re-use across different Gremlin Language Variants. At this point, this change is non-breaking as it was +implemented through deprecation.</p> +</div> +<div class="paragraph"> +<p>The basic concept of a <code>ScriptEngine</code> has been replaced by the notion of a <code>GremlinScriptEngine</code> (i.e. a +"ScriptEngine" that is specifically tuned for executing Gremlin-related scripts). "ScriptEngine" infrastructure has +been developed to help support this new interface, specifically <code>GremlinScriptEngineFactory</code> and +<code>GremlinScriptEngineManager</code>. Prefer use of this infrastructure when instantiating a <code>GremlinScriptEngine</code> rather +than trying to instantiate directly.</p> +</div> +<div class="paragraph"> +<p>For example, rather than instantiate a <code>GremlinGroovyScriptEngine</code> with the constructor:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="CodeRay"><code class="java language-java">GremlinScriptEngine engine = <span class="keyword">new</span> GremlinGroovyScriptEngine();</code></pre> +</div> +</div> +<div class="paragraph"> +<p>prefer to instantiate it as follows:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="CodeRay"><code class="java language-java">GremlinScriptEngineManager manager = <span class="keyword">new</span> CachedGremlinScriptEngineManager(); +GremlinScriptEngine engine = manager.getEngineByName(<span class="string"><span class="delimiter">"</span><span class="content">gremlin-groovy</span><span class="delimiter">"</span></span>);</code></pre> +</div> +</div> +<div class="paragraph"> +<p>Related to the addition of <code>GremlinScriptEngine</code>, <code>org.apache.tinkerpop.gremlin.groovy.plugin.GremlinPlugin</code> in +gremlin-groovy has been deprecated and then replaced by <code>org.apache.tinkerpop.gremlin.jsr223.GremlinPlugin</code>. The new +version of <code>GremlinPlugin</code> is similar but does carry some new methods to implement that involves the new <code>Customizer</code> +interface. The <code>Customizer</code> interface is the way in which <code>GremlinScriptEngine</code> instance can be configured with +imports, initialization scripts, compiler options, etc.</p> +</div> +<div class="paragraph"> +<p>Note that a <code>GremlinPlugin</code> can be applied to a <code>GremlinScriptEngine</code> by adding it to the <code>GremlinScriptEngineManager</code> +that creates it.</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="CodeRay"><code class="java language-java">GremlinScriptEngineManager manager = <span class="keyword">new</span> CachedGremlinScriptEngineManager(); +manager.addPlugin(ImportGremlinPlugin.build().classImports(java.awt.Color.class).create()); +GremlinScriptEngine engine = manager.getEngineByName(<span class="string"><span class="delimiter">"</span><span class="content">gremlin-groovy</span><span class="delimiter">"</span></span>);</code></pre> +</div> +</div> +<div class="paragraph"> +<p>All of this new infrastructure is currently optional on the 3.2.x line of code. More detailed documentation will for +these changes will be supplied as part of 3.3.0 when these features become mandatory and the deprecated code is +removed.</p> +</div> +<div class="paragraph"> +<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-1562">TINKERPOP-1562</a></p> +</div> +</div> +<div class="sect3"> +<h4 id="_ssl_client_authentication">SSL Client Authentication</h4> +<div class="paragraph"> +<p>Added new server configuration option <code>ssl.needClientAuth</code>.</p> +</div> +<div class="paragraph"> +<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-1602">TINKERPOP-1602</a></p> +</div> +</div> +</div> +<div class="sect2"> +<h3 id="_upgrading_for_providers_3">Upgrading for Providers</h3> +<div class="sect3"> +<h4 id="_graph_database_providers">Graph Database Providers</h4> +<div class="sect4"> +<h5 id="_closeableiterator">CloseableIterator</h5> +<div class="paragraph"> +<p>Prior to TinkerPop 3.x, Blueprints had the notion of a <code>CloseableIterable</code> which exposed a way for Graph Providers +to offer a way to release resources that might have been opened when returning vertices and edges. That interface was +never exposed in TinkerPop 3.x, but has now been made available via the new <code>CloseableIterator</code>. Providers may choose +to use this interface or not when returning values from <code>Graph.vertices()</code> and <code>Graph.edges()</code>.</p> +</div> +<div class="paragraph"> +<p>It will be up to users to know whether or not they need to call <code>close()</code>. Of course, users should typically not be +operating with the Graph Structure API, so it’s unlikely that they would be calling these methods directly in the +first place. It is more likely that users will be calling <code>Traversal.close()</code>. This method will essentially iterate +the steps of the <code>Traversal</code> and simply call <code>close()</code> on any steps that implement <code>AutoCloseable</code>. By default, +<code>GraphStep</code> now implements <code>AutoCloseable</code> which most Graph Providers will extend upon (as was done with TinkerGraph’s +<code>TinkerGraphStep</code>), so the integration should largely come for free if the provider simply returns a +<code>CloseableIterator</code> from <code>Graph.vertices()</code> and <code>Graph.edges()</code>.</p> +</div> +<div class="paragraph"> +<p>See: <a href="https://issues.apache.org/jira/browse/TINKERPOP-1589">TINKERPOP-1589</a></p> +</div> +</div> +<div class="sect4"> +<h5 id="_hascontainer_andp_splitting">HasContainer AndP Splitting</h5> +<div class="paragraph"> +<p>Previously, <code>GraphTraversal</code> made it easy for providers to analyze <code>P</code>-predicates in <code>HasContainers</code>, but always +splitting <code>AndP</code> predicates into their component parts. This helper behavior is no longer provided because, +1.) <code>AndP</code> can be inserted into a <code>XXXStep</code> in other ways, 2.) the providers <code>XXXStep</code> should process <code>AndP</code> +regardless of <code>GraphTraversal</code> helper, and 3.) the <code>GraphTraversal</code> helper did not recursively split.
[... 2816 lines stripped ...]
