You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2016/05/04 10:41:01 UTC

[01/50] [abbrv] incubator-tinkerpop git commit: syncd with master [Forced Update!]

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-946 5c64faa2e -> 27391ec63 (forced update)


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/cbf6cc19/docs/static/images/tinkerpop3.graffle
----------------------------------------------------------------------
diff --cc docs/static/images/tinkerpop3.graffle
index 28831dd,61d9db9..de98d34
--- a/docs/static/images/tinkerpop3.graffle
+++ b/docs/static/images/tinkerpop3.graffle
@@@ -20,31758 -20,7417 +20,39162 @@@
  	<key>GuidesVisible</key>
  	<string>YES</string>
  	<key>ImageCounter</key>
- 	<integer>115</integer>
 -	<integer>108</integer>
++	<integer>120</integer>
  	<key>Images</key>
  	<array>
  		<dict>
  			<key>Extension</key>
  			<string>tiff</string>
  			<key>ID</key>
 -			<integer>107</integer>
++			<integer>119</integer>
+ 			<key>RawData</key>
+ 			<data>
 -			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
++			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
++			AAFTAAMAAAAEAACM0odzAAcAAAy4AACM2gAAAAAACAAIAAgACAAA
++			SlwAAEGbAAAACAAASmQAAQABAAEAAQAADLhhcHBsAhAAAG1udHJS
++			R0IgWFlaIAfgAAEABAAOABgALGFjc3BBUFBMAAAAAAAAAAAAAAAA
++			AAAAAAAAAAAAAAAAAAD21gABAAAAANMtYXBwbAAAAAAAAAAAAAAA
++			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWRl
++			c2MAAAFQAAAAYmRzY20AAAG0AAABnmNwcnQAAANUAAAAJHd0cHQA
++			AAN4AAAAFHJYWVoAAAOMAAAAFGdYWVoAAAOgAAAAFGJYWVoAAAO0
++			AAAAFHJUUkMAAAPIAAAIDGFhcmcAAAvUAAAAIHZjZ3QAAAv0AAAA
++			MG5kaW4AAAwkAAAAPmNoYWQAAAxkAAAALG1tb2QAAAyQAAAAKGJU
++			UkMAAAPIAAAIDGdUUkMAAAPIAAAIDGFhYmcAAAvUAAAAIGFhZ2cA
++			AAvUAAAAIGRlc2MAAAAAAAAACERpc3BsYXkAAAAAAAAAAAAAAAAA
++			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
++			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtbHVjAAAAAAAA
++			AB4AAAAMc2tTSwAAACYAAAF4Y2FFUwAAACYAAAF4aGVJTAAAACYA
++			AAF4cHRCUgAAACYAAAF4aXRJVAAAACYAAAF4aHVIVQAAACYAAAF4
++			dWtVQQAAACYAAAF4a29LUgAAACYAAAF4bmJOTwAAACYAAAF4Y3ND
++			WgAAACYAAAF4emhUVwAAACYAAAF4ZGVERQAAACYAAAF4cm9STwAA
++			ACYAAAF4c3ZTRQAAACYAAAF4emhDTgAAACYAAAF4amFKUAAAACYA
++			AAF4YXIAAAAAACYAAAF4ZWxHUgAAACYAAAF4cHRQVAAAACYAAAF4
++			bmxOTAAAACYAAAF4ZnJGUgAAACYAAAF4ZXNFUwAAACYAAAF4dGhU
++			SAAAACYAAAF4dHJUUgAAACYAAAF4ZmlGSQAAACYAAAF4aHJIUgAA
++			ACYAAAF4cGxQTAAAACYAAAF4cnVSVQAAACYAAAF4ZW5VUwAAACYA
++			AAF4ZGFESwAAACYAAAF4AFQAaAB1AG4AZABlAHIAYgBvAGwAdAAg
++			AEQAaQBzAHAAbABhAHkAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxl
++			LCBJbmMuLCAyMDE2AFhZWiAAAAAAAADzFgABAAAAARbKWFlaIAAA
++			AAAAAHHAAAA5igAAAWdYWVogAAAAAAAAYSMAALnmAAAT9lhZWiAA
++			AAAAAAAj8gAADJAAAL3QY3VydgAAAAAAAAQAAAAABQAKAA8AFAAZ
++			AB4AIwAoAC0AMgA2ADsAQABFAEoATwBUAFkAXgBjAGgAbQByAHcA
++			fACBAIYAiwCQAJUAmgCfAKMAqACtALIAtwC8AMEAxgDLANAA1QDb
++			AOAA5QDrAPAA9gD7AQEBBwENARMBGQEfASUBKwEyATgBPgFFAUwB
++			UgFZAWABZwFuAXUBfAGDAYsBkgGaAaEBqQGxAbkBwQHJAdEB2QHh
++			AekB8gH6AgMCDAIUAh0CJgIvAjgCQQJLAlQCXQJnAnECegKEAo4C
++			mAKiAqwCtgLBAssC1QLgAusC9QMAAwsDFgMhAy0DOANDA08DWgNm
++			A3IDfgOKA5YDogOuA7oDxwPTA+AD7AP5BAYEEwQgBC0EOwRIBFUE
++			YwRxBH4EjASaBKgEtgTEBNME4QTwBP4FDQUcBSsFOgVJBVgFZwV3
++			BYYFlgWmBbUFxQXVBeUF9gYGBhYGJwY3BkgGWQZqBnsGjAadBq8G
++			wAbRBuMG9QcHBxkHKwc9B08HYQd0B4YHmQesB78H0gflB/gICwgf
++			CDIIRghaCG4IggiWCKoIvgjSCOcI+wkQCSUJOglPCWQJeQmPCaQJ
++			ugnPCeUJ+woRCicKPQpUCmoKgQqYCq4KxQrcCvMLCwsiCzkLUQtp
++			C4ALmAuwC8gL4Qv5DBIMKgxDDFwMdQyODKcMwAzZDPMNDQ0mDUAN
++			Wg10DY4NqQ3DDd4N+A4TDi4OSQ5kDn8Omw62DtIO7g8JDyUPQQ9e
++			D3oPlg+zD88P7BAJECYQQxBhEH4QmxC5ENcQ9RETETERTxFtEYwR
++			qhHJEegSBxImEkUSZBKEEqMSwxLjEwMTIxNDE2MTgxOkE8UT5RQG
++			FCcUSRRqFIsUrRTOFPAVEhU0FVYVeBWbFb0V4BYDFiYWSRZsFo8W
++			shbWFvoXHRdBF2UXiReuF9IX9xgbGEAYZRiKGK8Y1Rj6GSAZRRlr
++			GZEZtxndGgQaKhpRGncanhrFGuwbFBs7G2MbihuyG9ocAhwqHFIc
++			exyjHMwc9R0eHUcdcB2ZHcMd7B4WHkAeah6UHr4e6R8THz4faR+U
++			H78f6iAVIEEgbCCYIMQg8CEcIUghdSGhIc4h+yInIlUigiKvIt0j
++			CiM4I2YjlCPCI/AkHyRNJHwkqyTaJQklOCVoJZclxyX3JicmVyaH
++			Jrcm6CcYJ0kneierJ9woDSg/KHEooijUKQYpOClrKZ0p0CoCKjUq
++			aCqbKs8rAis2K2krnSvRLAUsOSxuLKIs1y0MLUEtdi2rLeEuFi5M
++			LoIuty7uLyQvWi+RL8cv/jA1MGwwpDDbMRIxSjGCMbox8jIqMmMy
++			mzLUMw0zRjN/M7gz8TQrNGU0njTYNRM1TTWHNcI1/TY3NnI2rjbp
++			NyQ3YDecN9c4FDhQOIw4yDkFOUI5fzm8Ofk6Njp0OrI67zstO2s7
++			qjvoPCc8ZTykPOM9Ij1hPaE94D4gPmA+oD7gPyE/YT+iP+JAI0Bk
++			QKZA50EpQWpBrEHuQjBCckK1QvdDOkN9Q8BEA0RHRIpEzkUSRVVF
++			mkXeRiJGZ0arRvBHNUd7R8BIBUhLSJFI10kdSWNJqUnwSjdKfUrE
++			SwxLU0uaS+JMKkxyTLpNAk1KTZNN3E4lTm5Ot08AT0lPk0/dUCdQ
++			cVC7UQZRUFGbUeZSMVJ8UsdTE1NfU6pT9lRCVI9U21UoVXVVwlYP
++			VlxWqVb3V0RXklfgWC9YfVjLWRpZaVm4WgdaVlqmWvVbRVuVW+Vc
++			NVyGXNZdJ114XcleGl5sXr1fD19hX7NgBWBXYKpg/GFPYaJh9WJJ
++			Ypxi8GNDY5dj62RAZJRk6WU9ZZJl52Y9ZpJm6Gc9Z5Nn6Wg/aJZo
++			7GlDaZpp8WpIap9q92tPa6dr/2xXbK9tCG1gbbluEm5rbsRvHm94
++			b9FwK3CGcOBxOnGVcfByS3KmcwFzXXO4dBR0cHTMdSh1hXXhdj52
++			m3b4d1Z3s3gReG54zHkqeYl553pGeqV7BHtje8J8IXyBfOF9QX2h
++			fgF+Yn7CfyN/hH/lgEeAqIEKgWuBzYIwgpKC9INXg7qEHYSAhOOF
++			R4Wrhg6GcobXhzuHn4gEiGmIzokziZmJ/opkisqLMIuWi/yMY4zK
++			jTGNmI3/jmaOzo82j56QBpBukNaRP5GokhGSepLjk02TtpQglIqU
++			9JVflcmWNJaflwqXdZfgmEyYuJkkmZCZ/JpomtWbQpuvnByciZz3
++			nWSd0p5Anq6fHZ+Ln/qgaaDYoUehtqImopajBqN2o+akVqTHpTil
++			qaYapoum/adup+CoUqjEqTepqaocqo+rAqt1q+msXKzQrUStuK4t
++			rqGvFq+LsACwdbDqsWCx1rJLssKzOLOutCW0nLUTtYq2AbZ5tvC3
++			aLfguFm40blKucK6O7q1uy67p7whvJu9Fb2Pvgq+hL7/v3q/9cBw
++			wOzBZ8Hjwl/C28NYw9TEUcTOxUvFyMZGxsPHQce/yD3IvMk6ybnK
++			OMq3yzbLtsw1zLXNNc21zjbOts83z7jQOdC60TzRvtI/0sHTRNPG
++			1EnUy9VO1dHWVdbY11zX4Nhk2OjZbNnx2nba+9uA3AXcit0Q3Zbe
++			HN6i3ynfr+A24L3hROHM4lPi2+Nj4+vkc+T85YTmDeaW5x/nqegy
++			6LzpRunQ6lvq5etw6/vshu0R7ZzuKO6070DvzPBY8OXxcvH/8ozz
++			GfOn9DT0wvVQ9d72bfb794r4Gfio+Tj5x/pX+uf7d/wH/Jj9Kf26
++			/kv+3P9t//9wYXJhAAAAAAADAAAAAmZmAADypwAADVkAABPQAAAK
++			DnZjZ3QAAAAAAAAAAQABAAAAAAAAAAEAAAABAAAAAAAAAAEAAAAB
++			AAAAAAAAAAEAAG5kaW4AAAAAAAAANgAAp0AAAFWAAABMwAAAnsAA
++			ACWAAAAMwAAAUAAAAFRAAAIzMwACMzMAAjMzAAAAAAAAAABzZjMy
++			AAAAAAABDHIAAAX4///zHQAAB7oAAP1y///7nf///aQAAAPZAADA
++			cW1tb2QAAAAAAAAGEAAAkicYMRWf0KQDAAAAAAAAAAAAAAAAAAAA
++			AAA=
++			</data>
++		</dict>
++		<dict>
++			<key>Extension</key>
++			<string>tiff</string>
++			<key>ID</key>
++			<integer>118</integer>
++			<key>RawData</key>
++			<data>
++			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
++			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
++			INB1bPB6gMoMLKgEYETKCE4O4AARUIB6wBEIYAAX0IwABSjZgggR
++			ARoXgAAeAeD6wlJvwJK7AAoywLELIAAVMLh6zbDEIcAABgLaAcQc
++			Yd4AASwTQYglUG8HMHaEyFEIARUIUIkI0CEJIgsJkJ0KEKRHYTB5
++			oEQtYdJykFxz6BSBgMgNISytJ1rvJvgQgP7nwgYF0SgAAacS6A8I
++			YBBqwc4c7bjbzEgAASQSwYS6jhggzbSJoPKKAgbcAcsV6A4EsWTG
++			IbRUQgkUZrgcwc5rIkMRyv0SIgsSivMS6NyA0TUTkTzbp2MUMUcU
++			qZJHYTgS4NQFKG6HMQpoRgI44MZoAaqAwDQDQB4AANwNLrwggA8c
++			67zBKBAEcdilQbgbggoUQUwZYAAawa4dAkQE4EwC71wLoGwgqQ0Z
++			6BBK4WAAAJ8g4AAYgYrPAWgXEbokMb8cMcccogcc6DjDKF8diosd
++			8eAgkeUeke0fBOwTpsQFYhAhUa5frJLJYMwNQTEWyBAH4HpKoJII
++			xKIYUnAAAH8naPoQMnwAAP0oKYqY8UwgoJ4JaXAHIHCWgTcpoAAM
++			0qCMYK0qcLcLrEzswQgW4kUmQ7cmoFrOsnMnYH8nsn8oKuggiYyZ
++			C6pMoTQSwNAEzRzSElJXYBgBrJQNYN4UCMSHgPQOrxCUrCbpRZie
++			AUInzyEb5C7xogqcqi0cKRD6bE7DKLCzBGT6xbMCY6cZQADmMM4g
++			gTDqYAAcAcKkKcqc7kQgbcwIoAC38JyJMDUMBkBDx3LIAgUvsv4B
++			0wLpcwkwzfkxD4Dxwgcxii0osyEdIAEyaxRGQAEy488zUzggsz7q
++			k0SkJPQSoSIMADYegebR8uZPCbINwOYUgdatqDiCiDT1CCwJAgoE
++			E9iqqq4noaM+JCkSorRwpmEDoYM/LdgZyLwbc/xLhLovIUVAbKIL
++			oLrYgaSMQVAVaLzbqjAPAOajgghIBJk54nKQyRoAACNDYuLM5yAV
++			tEAAAV9EaL4aSfkgQrZa834goQYQ7UIerG0Ib1AQAPc9Qgk9g7bN
++			wn0+LdcYQrc+xSxTE/Jrk/k/s/5LqSwvFAYUVAtA7YtBVBhPaywf
++			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
++			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1s
++			dWMAAAAAAAAAHgAAAAxza1NLAAAAJgAAAXhjYUVTAAAAJgAAAXho
++			ZUlMAAAAJgAAAXhwdEJSAAAAJgAAAXhpdElUAAAAJgAAAXhodUhV
++			AAAAJgAAAXh1a1VBAAAAJgAAAXhrb0tSAAAAJgAAAXhuYk5PAAAA
++			JgAAAXhjc0NaAAAAJgAAAXh6aFRXAAAAJgAAAXhkZURFAAAAJgAA
++			AXhyb1JPAAAAJgAAAXhzdlNFAAAAJgAAAXh6aENOAAAAJgAAAXhq
++			YUpQAAAAJgAAAXhhcgAAAAAAJgAAAXhlbEdSAAAAJgAAAXhwdFBU
++			AAAAJgAAAXhubE5MAAAAJgAAAXhmckZSAAAAJgAAAXhlc0VTAAAA
++			JgAAAXh0aFRIAAAAJgAAAXh0clRSAAAAJgAAAXhmaUZJAAAAJgAA
++			AXhockhSAAAAJgAAAXhwbFBMAAAAJgAAAXhydVJVAAAAJgAAAXhl
++			blVTAAAAJgAAAXhkYURLAAAAJgAAAXgAVABoAHUAbgBkAGUAcgBi
++			AG8AbAB0ACAARABpAHMAcABsAGEAeQAAdGV4dAAAAABDb3B5cmln
++			aHQgQXBwbGUsIEluYy4sIDIwMTYAWFlaIAAAAAAAAPMWAAEAAAAB
++			FspYWVogAAAAAAAAccAAADmKAAABZ1hZWiAAAAAAAABhIwAAueYA
++			ABP2WFlaIAAAAAAAACPyAAAMkAAAvdBjdXJ2AAAAAAAABAAAAAAF
++			AAoADwAUABkAHgAjACgALQAyADYAOwBAAEUASgBPAFQAWQBeAGMA
++			aABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8AowCoAK0AsgC3ALwAwQDG
++			AMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIB
++			OAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHB
++			AckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcC
++			cQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4
++			A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAE
++			LQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6
++			BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoG
++			ewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfS
++			B+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8J
++			ZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsL
++			CyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM
++			8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7u
++			DwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMR
++			MRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxOD
++			E6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMW
++			JhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjV
++			GPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib
++			2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7p
++			HxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7Iici
++			VSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXH
++			JfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWsp
++			nSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12
++			Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIx
++			ujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9
++			Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6
++			sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9h
++			P6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdE
++			ikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mp
++			SfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBP
++			SU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1Tb
++			VShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa
++			9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8
++			YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1n
++			k2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4S
++			bmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1
++			KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwh
++			fIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eD
++			uoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyosw
++			i5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOT
++			TZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtC
++			m6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj
++			5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axc
++			rNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1
++			irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6E
++			vv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/I
++			Pci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+
++			0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724Dc
++			BdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN
++			5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw
++			5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3
++			/Af8mP0p/br+S/7c/23//3BhcmEAAAAAAAMAAAACZmYAAPKnAAAN
++			WQAAE9AAAAoOdmNndAAAAAAAAAABAAEAAAAAAAAAAQAAAAEAAAAA
++			AAAAAQAAAAEAAAAAAAAAAQAAbmRpbgAAAAAAAAA2AACnQAAAVYAA
++			AEzAAACewAAAJYAAAAzAAABQAAAAVEAAAjMzAAIzMwACMzMAAAAA
++			AAAAAHNmMzIAAAAAAAEMcgAABfj///MdAAAHugAA/XL///ud///9
++			pAAAA9kAAMBxbW1vZAAAAAAAAAYQAACSJxgxFZ/QpAMAAAAAAAAA
++			AAAAAAAAAAAAAA==
++			</data>
++		</dict>
++		<dict>
++			<key>Extension</key>
++			<string>tiff</string>
++			<key>ID</key>
++			<integer>117</integer>
++			<key>RawData</key>
++			<data>
++			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
+ 			kyKmuMqLeXFl5Az3ECfm++B

<TRUNCATED>
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/cbf6cc19/pom.xml
----------------------------------------------------------------------



[20/50] [abbrv] incubator-tinkerpop git commit: added a line border around Gremlin Gym logo. Looks much better in the tutorial. CTR.

Posted by sp...@apache.org.
added a line border around Gremlin Gym logo. Looks much better in the tutorial. CTR.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/e2ee81c8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/e2ee81c8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/e2ee81c8

Branch: refs/heads/TINKERPOP-946
Commit: e2ee81c8b378bef3e0c74d41378585abb67f8f47
Parents: 0392734
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Apr 28 09:01:43 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Apr 28 09:01:43 2016 -0600

----------------------------------------------------------------------
 docs/static/images/gremlin-gym.png | Bin 694710 -> 809112 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/e2ee81c8/docs/static/images/gremlin-gym.png
----------------------------------------------------------------------
diff --git a/docs/static/images/gremlin-gym.png b/docs/static/images/gremlin-gym.png
index 00b453b..ada4a52 100644
Binary files a/docs/static/images/gremlin-gym.png and b/docs/static/images/gremlin-gym.png differ


[39/50] [abbrv] incubator-tinkerpop git commit: CTR: Removed wrong entry from .dockerignore file.

Posted by sp...@apache.org.
CTR: Removed wrong entry from .dockerignore file.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/00b8ea25
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/00b8ea25
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/00b8ea25

Branch: refs/heads/TINKERPOP-946
Commit: 00b8ea25e70b51892af4e470d2bda370ddc3853c
Parents: 14966d7
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Tue May 3 12:20:49 2016 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Tue May 3 12:20:49 2016 +0200

----------------------------------------------------------------------
 .dockerignore | 1 -
 1 file changed, 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/00b8ea25/.dockerignore
----------------------------------------------------------------------
diff --git a/.dockerignore b/.dockerignore
index 4749818..afe0e54 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -8,6 +8,5 @@
 .settings
 **/_bsp/
 docs/*.asciidoc
-**/ext
 Dockerfile
 .dockerignore


[12/50] [abbrv] incubator-tinkerpop git commit: Added init-tp-spark.sh to console distribution.

Posted by sp...@apache.org.
Added init-tp-spark.sh to console distribution.

This shell script was referenced in the docs but was not contained in the console zip. Moved the source location of the script to spark-gremlin as that seemed consistent with how things were being done for external configuration files (i.e. hadoop-gremlin config stuff).


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/14966d78
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/14966d78
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/14966d78

Branch: refs/heads/TINKERPOP-946
Commit: 14966d789e859db709f5a6426f88c6722ebe1a2b
Parents: 5f9d2f9
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Apr 27 08:13:47 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Apr 27 08:17:51 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  1 +
 bin/init-tp-spark.sh                            | 75 --------------------
 .../reference/implementations-hadoop.asciidoc   |  2 +-
 gremlin-console/src/assembly/distribution.xml   |  9 +++
 gremlin-console/src/assembly/standalone.xml     |  5 ++
 spark-gremlin/src/main/bin/init-tp-spark.sh     | 75 ++++++++++++++++++++
 6 files changed, 91 insertions(+), 76 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/14966d78/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 422eb47..5600245 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,7 @@ image::https://raw.githubusercontent.com/apache/incubator-tinkerpop/master/docs/
 TinkerPop 3.1.3 (NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+* Added `init-tp-spark.sh` to Gremlin Console binary distribution.
 * Fixed bug where use of `:x` in a Gremlin Console initialization script would generate a stack trace.
 * Added configuration options to Gremlin Driver and Server to override the SSL configuration with an `SslContext`.
 * Added driver configuration settings for SSL: `keyCertChainFile`, `keyFile` and `keyPassword`.

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/14966d78/bin/init-tp-spark.sh
----------------------------------------------------------------------
diff --git a/bin/init-tp-spark.sh b/bin/init-tp-spark.sh
deleted file mode 100755
index 51eca6b..0000000
--- a/bin/init-tp-spark.sh
+++ /dev/null
@@ -1,75 +0,0 @@
-#!/bin/bash
-#
-#
-# 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.
-#
-
-if [ -z $2 ]; then
-  echo
-  echo "Usage:"
-  echo
-  echo "  $0 SPARK_HOME SPARK_NODE_1 SPARK_NODE_2 ..."
-  echo
-  echo "Example:"
-  echo
-  echo "  $0 /usr/local/spark-1.5.2-bin-hadoop2.6 spark@master spark@slave1 spark@slave2 spark@slave3"
-  echo
-  exit 1
-fi
-
-if [ -z ${HADOOP_GREMLIN_LIBS} ]; then
-  echo
-  echo "HADOOP_GREMLIN_LIBS is not set; thus no jars to deploy."
-  echo
-  exit 1
-fi
-
-LOCAL_SPARK_GREMLIN_LIBS=$(tr ':' $'\n' <<< ${HADOOP_GREMLIN_LIBS} | grep 'spark-gremlin')
-LIB_DIRNAME="hadoop-gremlin-libs"
-TMP_DIR=/tmp/init-tp-spark
-TMP_DIR2=${TMP_DIR}/${LIB_DIRNAME}
-
-mkdir -p ${TMP_DIR2}
-cp -R ${LOCAL_SPARK_GREMLIN_LIBS}/*.jar ${TMP_DIR2}
-
-DIR=`dirname $0`
-
-SPARK_HOME=${1}
-SPARK_LIBS=${SPARK_HOME}/lib
-SPARK_NODES=${@:2}
-
-cat > ${TMP_DIR}/init-conf.sh <<EOF
-#!/bin/bash
-
-if [ ! -f "${SPARK_HOME}/conf/spark-env.sh" ]; then
-  cp ${SPARK_HOME}/conf/spark-env.sh.template ${SPARK_HOME}/conf/spark-env.sh
-fi
-grep -F GREMLIN_LIBS ${SPARK_HOME}/conf/spark-env.sh > /dev/null || {
-  echo >> ${SPARK_HOME}/conf/spark-env.sh
-  echo "GREMLIN_LIBS=\\\$(find ${SPARK_LIBS}/${LIB_DIRNAME} -name '*.jar' | paste -sd ':')" >> ${SPARK_HOME}/conf/spark-env.sh
-  echo "export SPARK_CLASSPATH=\\\${SPARK_CLASSPATH}:\\\${GREMLIN_LIBS}" >> ${SPARK_HOME}/conf/spark-env.sh
-}
-EOF
-
-for node in ${SPARK_NODES}
-do
-  rsync -az --delete ${TMP_DIR2} ${node}:${SPARK_LIBS}
-  ssh ${node} "bash -s" -- < ${TMP_DIR}/init-conf.sh
-done
-
-rm -rf ${TMP_DIR}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/14966d78/docs/src/reference/implementations-hadoop.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/implementations-hadoop.asciidoc b/docs/src/reference/implementations-hadoop.asciidoc
index 41b003d..8c591e2 100644
--- a/docs/src/reference/implementations-hadoop.asciidoc
+++ b/docs/src/reference/implementations-hadoop.asciidoc
@@ -283,7 +283,7 @@ Furthermore the `lib/` directory should be distributed across all machines in th
 provides a helper script, which takes the Spark installation directory and the the Spark machines as input:
 
 [source,shell]
-bin/init-tp-spark.sh /usr/local/spark spark@10.0.0.1 spark@10.0.0.2 spark@10.0.0.3
+bin/hadoop/init-tp-spark.sh /usr/local/spark spark@10.0.0.1 spark@10.0.0.2 spark@10.0.0.3
 
 Once the `lib/` directory is distributed, `SparkGraphComputer` can be used as follows.
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/14966d78/gremlin-console/src/assembly/distribution.xml
----------------------------------------------------------------------
diff --git a/gremlin-console/src/assembly/distribution.xml b/gremlin-console/src/assembly/distribution.xml
index bb3e77d..ab161fb 100644
--- a/gremlin-console/src/assembly/distribution.xml
+++ b/gremlin-console/src/assembly/distribution.xml
@@ -30,6 +30,15 @@ limitations under the License.
             </includes>
         </fileSet>
         <fileSet>
+            <fileMode>0775</fileMode>
+            <directory>target/apache-${project.artifactId}-${project.version}-standalone/bin/hadoop</directory>
+            <outputDirectory>bin/hadoop</outputDirectory>
+            <includes>
+                <include>*.sh</include>
+                <include>*.bat</include>
+            </includes>
+        </fileSet>
+        <fileSet>
             <directory>src/main/static/licenses</directory>
             <outputDirectory>licenses</outputDirectory>
         </fileSet>

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/14966d78/gremlin-console/src/assembly/standalone.xml
----------------------------------------------------------------------
diff --git a/gremlin-console/src/assembly/standalone.xml b/gremlin-console/src/assembly/standalone.xml
index ca27a51..e4115d5 100644
--- a/gremlin-console/src/assembly/standalone.xml
+++ b/gremlin-console/src/assembly/standalone.xml
@@ -28,6 +28,11 @@ limitations under the License.
             <fileMode>0755</fileMode>
         </fileSet>
         <fileSet>
+            <directory>../spark-gremlin/src/main/bin</directory>
+            <outputDirectory>/bin/hadoop</outputDirectory>
+            <fileMode>0755</fileMode>
+        </fileSet>
+        <fileSet>
             <directory>conf</directory>
             <outputDirectory>/conf</outputDirectory>
         </fileSet>

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/14966d78/spark-gremlin/src/main/bin/init-tp-spark.sh
----------------------------------------------------------------------
diff --git a/spark-gremlin/src/main/bin/init-tp-spark.sh b/spark-gremlin/src/main/bin/init-tp-spark.sh
new file mode 100755
index 0000000..51eca6b
--- /dev/null
+++ b/spark-gremlin/src/main/bin/init-tp-spark.sh
@@ -0,0 +1,75 @@
+#!/bin/bash
+#
+#
+# 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.
+#
+
+if [ -z $2 ]; then
+  echo
+  echo "Usage:"
+  echo
+  echo "  $0 SPARK_HOME SPARK_NODE_1 SPARK_NODE_2 ..."
+  echo
+  echo "Example:"
+  echo
+  echo "  $0 /usr/local/spark-1.5.2-bin-hadoop2.6 spark@master spark@slave1 spark@slave2 spark@slave3"
+  echo
+  exit 1
+fi
+
+if [ -z ${HADOOP_GREMLIN_LIBS} ]; then
+  echo
+  echo "HADOOP_GREMLIN_LIBS is not set; thus no jars to deploy."
+  echo
+  exit 1
+fi
+
+LOCAL_SPARK_GREMLIN_LIBS=$(tr ':' $'\n' <<< ${HADOOP_GREMLIN_LIBS} | grep 'spark-gremlin')
+LIB_DIRNAME="hadoop-gremlin-libs"
+TMP_DIR=/tmp/init-tp-spark
+TMP_DIR2=${TMP_DIR}/${LIB_DIRNAME}
+
+mkdir -p ${TMP_DIR2}
+cp -R ${LOCAL_SPARK_GREMLIN_LIBS}/*.jar ${TMP_DIR2}
+
+DIR=`dirname $0`
+
+SPARK_HOME=${1}
+SPARK_LIBS=${SPARK_HOME}/lib
+SPARK_NODES=${@:2}
+
+cat > ${TMP_DIR}/init-conf.sh <<EOF
+#!/bin/bash
+
+if [ ! -f "${SPARK_HOME}/conf/spark-env.sh" ]; then
+  cp ${SPARK_HOME}/conf/spark-env.sh.template ${SPARK_HOME}/conf/spark-env.sh
+fi
+grep -F GREMLIN_LIBS ${SPARK_HOME}/conf/spark-env.sh > /dev/null || {
+  echo >> ${SPARK_HOME}/conf/spark-env.sh
+  echo "GREMLIN_LIBS=\\\$(find ${SPARK_LIBS}/${LIB_DIRNAME} -name '*.jar' | paste -sd ':')" >> ${SPARK_HOME}/conf/spark-env.sh
+  echo "export SPARK_CLASSPATH=\\\${SPARK_CLASSPATH}:\\\${GREMLIN_LIBS}" >> ${SPARK_HOME}/conf/spark-env.sh
+}
+EOF
+
+for node in ${SPARK_NODES}
+do
+  rsync -az --delete ${TMP_DIR2} ${node}:${SPARK_LIBS}
+  ssh ${node} "bash -s" -- < ${TMP_DIR}/init-conf.sh
+done
+
+rm -rf ${TMP_DIR}


[33/50] [abbrv] incubator-tinkerpop git commit: Merge remote-tracking branch 'origin/tp31'

Posted by sp...@apache.org.
Merge remote-tracking branch 'origin/tp31'

Conflicts:
	docs/src/reference/gremlin-applications.asciidoc


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/7348e472
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/7348e472
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/7348e472

Branch: refs/heads/TINKERPOP-946
Commit: 7348e4722096f8130b147b2bcdbafb0c4ff0355a
Parents: 66a6ef4 704b023
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon May 2 10:15:53 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon May 2 10:15:53 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  2 +
 bin/init-tp-spark.sh                            | 75 --------------------
 .../src/reference/gremlin-applications.asciidoc |  3 +-
 .../reference/implementations-hadoop.asciidoc   |  2 +-
 .../upgrade/release-3.1.x-incubating.asciidoc   | 25 +++++++
 gremlin-console/src/assembly/distribution.xml   |  9 +++
 gremlin-console/src/assembly/standalone.xml     |  5 ++
 .../groovy/plugin/DriverRemoteAcceptor.java     | 32 ++++++---
 .../groovy/plugin/DriverRemoteAcceptorTest.java | 23 ++++++
 spark-gremlin/src/main/bin/init-tp-spark.sh     | 75 ++++++++++++++++++++
 10 files changed, 165 insertions(+), 86 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/7348e472/CHANGELOG.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/7348e472/docs/src/reference/gremlin-applications.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/7348e472/docs/src/reference/implementations-hadoop.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/7348e472/spark-gremlin/src/main/bin/init-tp-spark.sh
----------------------------------------------------------------------
diff --cc spark-gremlin/src/main/bin/init-tp-spark.sh
index 0000000,51eca6b..670a2a9
mode 000000,100755..100755
--- a/spark-gremlin/src/main/bin/init-tp-spark.sh
+++ b/spark-gremlin/src/main/bin/init-tp-spark.sh
@@@ -1,0 -1,75 +1,75 @@@
+ #!/bin/bash
+ #
+ #
+ # 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.
+ #
+ 
+ if [ -z $2 ]; then
+   echo
+   echo "Usage:"
+   echo
+   echo "  $0 SPARK_HOME SPARK_NODE_1 SPARK_NODE_2 ..."
+   echo
+   echo "Example:"
+   echo
 -  echo "  $0 /usr/local/spark-1.5.2-bin-hadoop2.6 spark@master spark@slave1 spark@slave2 spark@slave3"
++  echo "  $0 /usr/local/spark-1.6.1-bin-hadoop2.6 spark@master spark@slave1 spark@slave2 spark@slave3"
+   echo
+   exit 1
+ fi
+ 
+ if [ -z ${HADOOP_GREMLIN_LIBS} ]; then
+   echo
+   echo "HADOOP_GREMLIN_LIBS is not set; thus no jars to deploy."
+   echo
+   exit 1
+ fi
+ 
+ LOCAL_SPARK_GREMLIN_LIBS=$(tr ':' $'\n' <<< ${HADOOP_GREMLIN_LIBS} | grep 'spark-gremlin')
+ LIB_DIRNAME="hadoop-gremlin-libs"
+ TMP_DIR=/tmp/init-tp-spark
+ TMP_DIR2=${TMP_DIR}/${LIB_DIRNAME}
+ 
+ mkdir -p ${TMP_DIR2}
+ cp -R ${LOCAL_SPARK_GREMLIN_LIBS}/*.jar ${TMP_DIR2}
+ 
+ DIR=`dirname $0`
+ 
+ SPARK_HOME=${1}
+ SPARK_LIBS=${SPARK_HOME}/lib
+ SPARK_NODES=${@:2}
+ 
+ cat > ${TMP_DIR}/init-conf.sh <<EOF
+ #!/bin/bash
+ 
+ if [ ! -f "${SPARK_HOME}/conf/spark-env.sh" ]; then
+   cp ${SPARK_HOME}/conf/spark-env.sh.template ${SPARK_HOME}/conf/spark-env.sh
+ fi
+ grep -F GREMLIN_LIBS ${SPARK_HOME}/conf/spark-env.sh > /dev/null || {
+   echo >> ${SPARK_HOME}/conf/spark-env.sh
+   echo "GREMLIN_LIBS=\\\$(find ${SPARK_LIBS}/${LIB_DIRNAME} -name '*.jar' | paste -sd ':')" >> ${SPARK_HOME}/conf/spark-env.sh
+   echo "export SPARK_CLASSPATH=\\\${SPARK_CLASSPATH}:\\\${GREMLIN_LIBS}" >> ${SPARK_HOME}/conf/spark-env.sh
+ }
+ EOF
+ 
+ for node in ${SPARK_NODES}
+ do
+   rsync -az --delete ${TMP_DIR2} ${node}:${SPARK_LIBS}
+   ssh ${node} "bash -s" -- < ${TMP_DIR}/init-conf.sh
+ done
+ 
+ rm -rf ${TMP_DIR}


[27/50] [abbrv] incubator-tinkerpop git commit: Update upgrade docs for Console changes

Posted by sp...@apache.org.
Update upgrade docs for Console changes


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/cd709ecb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/cd709ecb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/cd709ecb

Branch: refs/heads/TINKERPOP-946
Commit: cd709ecb549d88d13dce0694c2d2d25de70baaf4
Parents: 0e513cb
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Apr 28 15:02:17 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Apr 28 15:02:17 2016 -0400

----------------------------------------------------------------------
 .../upgrade/release-3.2.x-incubating.asciidoc   | 41 ++++++++++++++++++++
 1 file changed, 41 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/cd709ecb/docs/src/upgrade/release-3.2.x-incubating.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/release-3.2.x-incubating.asciidoc b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
index 87e6cc8..7772e0f 100644
--- a/docs/src/upgrade/release-3.2.x-incubating.asciidoc
+++ b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
@@ -29,6 +29,47 @@ TinkerPop 3.2.1
 
 Please see the link:https://github.com/apache/incubator-tinkerpop/blob/3.2.1-incubating/CHANGELOG.asciidoc#tinkerpop-313-release-date-MONTH-DAY-YEAR[changelog] for a complete list of all the modifications that are part of this release.
 
+Upgrading for Users
+~~~~~~~~~~~~~~~~~~~
+
+Gremlin Console Flags
++++++++++++++++++++++
+
+Gremlin Console had several methods for executing scripts from file at the start-up of `bin/gremlin.sh`. There were
+two options:
+
+[source,text]
+bin/gremlin.sh script.groovy    <1>
+bin/gremlin.sh -e script.groovy <2>
+
+<1> The `script.groovy` would be executed as a console initialization script setting the console up for use and leaving
+it open when the script completed successfully or closing it if the script failed.
+<2> The `script.groovy` would be executed by the `ScriptExecutor` which meant that commands for the Gremlin Console,
+such as `:remote` and `:>` would not be respected.
+
+Changes in this version of TinkerPop have added much more flexibility here and only a minor breaking change should be
+considered when using this version. First of all, recognize that hese two lines are currently equivalent:
+
+[source,text]
+bin/gremlin.sh script.groovy
+bin/gremlin.sh -i script.groovy
+
+but users should start to explicitly specify the `-i` flag as TinkerPop will eventually remove the old syntax. Despite
+the one used beware of the fact that neither will close the console on script failure anymore. In that sense, this
+behavior represents a breaking change to consider. To ensure the console closes on failure or success, a script will
+have to use the `-e` option.
+
+The console also has a number of new features in addition to `-e` and `-i`:
+
+* View the available flags for the console with `-h`.
+* Control console output with `-D`, `-Q` and -`V`
+* Get line numbers on script failures passed to `-i` and `-e`.
+
+See: link:https://issues.apache.org/jira/browse/TINKERPOP-1268[TINKERPOP-1268],
+link:https://issues.apache.org/jira/browse/TINKERPOP-1155[TINKERPOP-1155], link:https://issues.apache.org/jira/browse/TINKERPOP-1156[TINKERPOP-1156],
+link:https://issues.apache.org/jira/browse/TINKERPOP-1157[TINKERPOP-1157],
+link:http://tinkerpop.apache.org/docs/3.2.1-incubating/reference/#interactive-mode[Reference Documentation - Interactive Mode],
+link:http://tinkerpop.apache.org/docs/3.2.1-incubating/reference/#execution-mode[Reference Documentation - Execution Mode]
 
 TinkerPop 3.2.0
 ---------------


[48/50] [abbrv] incubator-tinkerpop git commit: Cleaned up OptOuts around traversal interruption test for giraph/spark.

Posted by sp...@apache.org.
Cleaned up OptOuts around traversal interruption test for giraph/spark.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/af4a1208
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/af4a1208
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/af4a1208

Branch: refs/heads/TINKERPOP-946
Commit: af4a120810850eeb9374ff76c915b8b106248f45
Parents: dfa278d
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Apr 22 15:49:29 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Tue May 3 07:58:20 2016 -0400

----------------------------------------------------------------------
 .../apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java   | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/af4a1208/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java
----------------------------------------------------------------------
diff --git a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java
index 08bbeeb..fce3953 100644
--- a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java
+++ b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java
@@ -182,10 +182,10 @@ import java.util.stream.Stream;
         reason = "Spark executes map and combine in a lazy fashion and thus, fails the blocking aspect of this test",
         computers = {"org.apache.tinkerpop.gremlin.spark.process.computer.SparkGraphComputer"})
 @Graph.OptOut(
-        test = "org.apache.tinkerpop.gremlin.process.computer.TraversalInterruptionComputerTest",
+        test = "org.apache.tinkerpop.gremlin.process.traversal.TraversalInterruptionComputerTest",
         method = "*",
         reason = "This test makes an use of a sideEffect to enforce when a thread interruption is triggered and thus isn't applicable to HadoopGraph",
-        computers = {"org.apache.tinkerpop.gremlin.spark.process.computer.SparkGraphComputer"})
+        computers = {"org.apache.tinkerpop.gremlin.spark.process.computer.SparkGraphComputer", "org.apache.tinkerpop.gremlin.giraph.process.computer.GiraphGraphComputer"})
 public final class HadoopGraph implements Graph {
 
     public static final Logger LOGGER = LoggerFactory.getLogger(HadoopGraph.class);


[22/50] [abbrv] incubator-tinkerpop git commit: Better exception messaging on failure of -e.

Posted by sp...@apache.org.
Better exception messaging on failure of -e.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/1ed70437
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/1ed70437
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/1ed70437

Branch: refs/heads/TINKERPOP-946
Commit: 1ed7043721214b04ebb278ae45503fc893f2b960
Parents: b6853f0
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Apr 28 14:01:53 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Apr 28 14:01:53 2016 -0400

----------------------------------------------------------------------
 .../org/apache/tinkerpop/gremlin/console/Console.groovy       | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/1ed70437/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
----------------------------------------------------------------------
diff --git a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
index a35c44a..21ebc64 100644
--- a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
+++ b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
@@ -332,11 +332,14 @@ class Console {
                     lineNumber++
                     groovy.execute(line)
                 } catch (Exception ex) {
-                    io.err.println("Invalid line in $scriptFile at [$lineNumber: $line] - ${ex.message}")
+                    io.err.println("Error in $scriptFile at [$lineNumber: $line] - ${ex.message}")
                     if (interactive)
                         break
-                    else
+                    else {
+                        ex.printStackTrace(io.err)
                         System.exit(1)
+                    }
+
                 }
             }
 


[37/50] [abbrv] incubator-tinkerpop git commit: Added default args bindings when passing a script to the console.

Posted by sp...@apache.org.
Added default args bindings when passing a script to the console.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/1e83a321
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/1e83a321
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/1e83a321

Branch: refs/heads/TINKERPOP-946
Commit: 1e83a3212f97dfe4ab3c601814a47028885c6e63
Parents: cd709ec
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon May 2 12:43:45 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon May 2 12:43:45 2016 -0400

----------------------------------------------------------------------
 .../groovy/org/apache/tinkerpop/gremlin/console/Console.groovy     | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/1e83a321/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
----------------------------------------------------------------------
diff --git a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
index 7ab8b57..564df32 100644
--- a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
+++ b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
@@ -322,6 +322,8 @@ class Console {
             if (scriptAndArgs.size() > 1) {
                 List<String> args = scriptAndArgs.subList(1, scriptAndArgs.size())
                 groovy.execute("args = [\"" + args.join('\",\"') + "\"]")
+            } else {
+                groovy.execute("args = []")
             }
 
             final File file = new File(scriptFile)


[50/50] [abbrv] incubator-tinkerpop git commit: Removed another redundant interruption check.

Posted by sp...@apache.org.
Removed another redundant interruption check.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/27391ec6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/27391ec6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/27391ec6

Branch: refs/heads/TINKERPOP-946
Commit: 27391ec63cc3a233f82114df143d6752f7626cd7
Parents: ca93b27
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed May 4 06:39:12 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed May 4 06:39:12 2016 -0400

----------------------------------------------------------------------
 .../process/computer/traversal/step/map/ComputerResultStep.java    | 2 --
 1 file changed, 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/27391ec6/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
index c8b56a2..b5fd8e8 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
@@ -25,7 +25,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalInterruptedException;
 import org.apache.tinkerpop.gremlin.structure.Element;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.Property;
@@ -63,7 +62,6 @@ public final class ComputerResultStep<S> extends AbstractStep<ComputerResult, S>
     @Override
     protected Traverser.Admin<S> processNextStart() throws NoSuchElementException {
         while (true) {
-            if(Thread.interrupted()) throw new TraversalInterruptedException();
             if (this.currentIterator.hasNext())
                 return this.currentIterator.next();
             else {


[03/50] [abbrv] incubator-tinkerpop git commit: finished the tutorial. Its epic.

Posted by sp...@apache.org.
finished the tutorial. Its epic.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/ce1adced
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/ce1adced
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/ce1adced

Branch: refs/heads/TINKERPOP-946
Commit: ce1adcedc12f3c630f284c8caee293342c465e23
Parents: cbf6cc1
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Apr 21 08:35:06 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Apr 21 08:35:06 2016 -0600

----------------------------------------------------------------------
 .../gremlin-language-variants/index.asciidoc    | 129 ++++++++++++++++---
 docs/static/images/python-logo.png              | Bin 0 -> 9957 bytes
 2 files changed, 108 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ce1adced/docs/src/tutorials/gremlin-language-variants/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/tutorials/gremlin-language-variants/index.asciidoc b/docs/src/tutorials/gremlin-language-variants/index.asciidoc
index 0bf4a66..2cd4c4e 100644
--- a/docs/src/tutorials/gremlin-language-variants/index.asciidoc
+++ b/docs/src/tutorials/gremlin-language-variants/index.asciidoc
@@ -465,10 +465,10 @@ The interested reader can solve the aforementioned problems as a training exerci
 Using Python and GremlinServer
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-The JVM is a wonderful piece of technology that has, over the years, become a meeting ground for developers from all
-language communities. However, not all applications will use the JVM. Given that Apache TinkerPop is a Java-framework,
-there must be a way for two different virtual machines to communicate traversals and their results. This section presents
-the second Gremlin language variant implementation model which does just that.
+image:python-logo.png[width=125,float=left] The JVM is a wonderful piece of technology that has, over the years,
+become a meeting ground for developers from numerous language communities. However, not all applications will use the JVM.
+Given that Apache TinkerPop is a Java-framework, there must be a way for two different virtual machines to communicate
+traversals and their results. This section presents the second Gremlin language variant implementation model which does just that.
 
 NOTE: Apache TinkerPop is a JVM-based graph computing framework. Most graph databases and processors today are built
 on the JVM. This makes it easy for these graph system providers to implement Apache TinkerPop. However, TinkerPop is more
@@ -561,8 +561,7 @@ methods.each{ method ->
   } else {
   pythonClass.append(
 """  def ${method}(self, *args):
-    self.traversalSourceString = self.traversalSourceString + ".${method}(" + Helper.stringify(*args) + ")"
-    return self
+    return PythonGraphTraversalSource(self.gremlinServerURI, self.traversalSourceString + ".${method}(" + Helper.stringify(*args) + ")")
 """)
   }
 }; []
@@ -582,11 +581,7 @@ pythonClass.append(
     self.gremlinServerURI = gremlinServerURI
     self.result = None
   def __repr__(self):
-    temp = self.traversalString;
-    self.traversalString = self.traversalString + ".toString()"
-    temp2 = self.toList()[0]
-    self.traversalString = temp
-    return temp2
+    return self.traversalString;
   def __getitem__(self,index):
     if type(index) is int:
       return self.range(indices,indices+1)
@@ -600,11 +595,20 @@ pythonClass.append(
     return IOLoop.current().run_sync(lambda: Helper.submit(self.gremlinServerURI, self.traversalString))
 """)
 methods.each{ method ->
-  pythonClass.append(
+  returnType = (GraphTraversal.getMethods() as Set).findAll{it.name.equals(invertedMethodMap[method])}.collect{it.returnType}[0]
+  if(null != returnType && Traversal.isAssignableFrom(returnType)) {
+    pythonClass.append(
 """  def ${method}(self, *args):
     self.traversalString = self.traversalString + ".${invertedMethodMap[method]}(" + Helper.stringify(*args) + ")"
     return self
 """)
+  } else {
+    pythonClass.append(
+"""  def ${method}(self, *args):
+    self.traversalString = self.traversalString + ".${invertedMethodMap[method]}(" + Helper.stringify(*args) + ")"
+    return self.toList()
+""")
+  }
 }; []
 pythonClass.append("\n\n")
 
@@ -623,8 +627,7 @@ methods.each{ method ->
 pythonClass.append("\n\n")
 
 // save to a python file
-file = new File("/Users/marko/Desktop/JYTHON-TUTORIAL/gremlin-python.py")
-// file = new File("/usr/local/apache-gremlin-console-x.y.z-standalone/lib/gremlin-python.py")
+file = new File("/usr/local/apache-gremlin-console-x.y.z-standalone/lib/gremlin-python.py")
 file.delete()
 pythonClass.eachLine{ file.append(it + "\n") }
 ----
@@ -637,6 +640,44 @@ The generated file is available at link:../../resources/gremlin-python.py[gremli
 virtual machine (not just Jython), Gremlin traversals can be expressed in native Python and a legal Gremlin-Groovy
 string is created behind the scenes.
 
+Be sure that GremlinServer is running and has a GraphSON endpoint. The following serializers were added to `conf/gremlin-server-modern.yaml`.
+
+[source,yaml]
+- { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v1.0+json
+- { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { useMapperFromGraph: graph }}        # application/json
+
+Then GremlinServer was started.
+
+[source,bash]
+----
+$ bin/gremlin-server.sh conf/gremlin-server-modern.yaml
+[INFO] GremlinServer -
+         \,,,/
+         (o o)
+-----oOOo-(3)-oOOo-----
+
+[INFO] GremlinServer - Configuring Gremlin Server from conf/gremlin-server-modern.yaml
+[INFO] MetricManager - Configured Metrics Slf4jReporter configured with interval=180000ms and loggerName=org.apache.tinkerpop.gremlin.server.Settings$Slf4jReporterMetrics
+[INFO] GraphManager - Graph [graph] was successfully configured via [conf/tinkergraph-empty.properties].
+[INFO] ServerGremlinExecutor - Initialized Gremlin thread pool.  Threads in pool named with pattern gremlin-*
+[INFO] ScriptEngines - Loaded gremlin-groovy ScriptEngine
+[INFO] GremlinExecutor - Initialized gremlin-groovy ScriptEngine with scripts/generate-modern.groovy
+[INFO] ServerGremlinExecutor - Initialized GremlinExecutor and configured ScriptEngines.
+[INFO] ServerGremlinExecutor - A GraphTraversalSource is now bound to [g] with graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
+[INFO] OpLoader - Adding the standard OpProcessor.
+[INFO] OpLoader - Adding the control OpProcessor.
+[INFO] OpLoader - Adding the session OpProcessor.
+[INFO] OpLoader - Adding the traversal OpProcessor.
+[INFO] GremlinServer - Executing start up LifeCycleHook
+[INFO] Logger$info - Loading 'modern' graph data.
+[INFO] AbstractChannelizer - Configured application/vnd.gremlin-v1.0+gryo with org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0
+[INFO] AbstractChannelizer - Configured application/vnd.gremlin-v1.0+gryo-stringd with org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0
+[INFO] AbstractChannelizer - Configured application/vnd.gremlin-v1.0+json with org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0
+[INFO] AbstractChannelizer - Configured application/json with org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0
+[INFO] GremlinServer$1 - Gremlin Server configured with worker thread pool of 1, gremlin pool of 8 and boss thread pool of 1.
+[INFO] GremlinServer$1 - Channel started at port 8182.
+----
+
 [source,python]
 ----
 Python 2.7.2 (default, Oct 11 2012, 20:14:37)
@@ -647,10 +688,26 @@ Type "help", "copyright", "credits" or "license" for more information.
 >>> g
 graphtraversalsource[ws://localhost:8182/, g]
 # nested traversal with Python slicing and attribute interception extensions
->>> g.V().hasLabel("person").repeat(__.out()).times(2).name[0:2]
-g.V().hasLabel("person").repeat(__.out()).times(2).values("name").range(0, 2)
->>> g.V().hasLabel("person").repeat(__.out()).times(2).name[0:2].toList()
-[u'ripple', u'lop']
+>>> g.V().repeat(__.both("created")).times(2).name[1:3].path()
+g.V().repeat(__.both("created")).times(2).values("name").range(1, 3).path()
+>>> g.V().hasLabel("person").repeat(__.both()).times(2).name[0:2].toList()
+[u'marko', u'josh']
+# PythonGraphTraversalSource works as expected -- an example using Gremlin-Python w/ OLAP
+>>> g = g.withComputer()
+>>> g
+graphtraversalsource[ws://localhost:8182/, g.withComputer()]
+>>> g.V().hasLabel("person").repeat(__.both()).times(2).name[0:2].toList()
+[u'ripple', u'marko']
+# a complex, nested multi-line traversal
+>>> g.V().match( \
+...     __._as("a").out("created")._as("b"), \
+...     __._as("b")._in("created")._as("c"), \
+...     __._as("a").out("knows")._as("c")). \
+...   select("c"). \
+...   union(__._in("knows"),__.out("created")). \
+...   name.toList()
+[u'marko', u'ripple', u'lop']
+>>>
 ----
 
 NOTE: The string that is generated for submission to a GremlinServer or `RemoteConnection` does not have to be a
@@ -659,8 +716,38 @@ location. It is recommended that a Gremlin-Groovy string be constructed as Greml
 Apache TinkerPop and is guaranteed to always be aligned with Gremlin-Java.
 
 Finally, for the sake of brevity, Gremlin-Python is simple and as such, incurs a few peculiarities that the interested
-reader can remedy as an exercise.
+reader may want to remedy as an exercise.
 
 * `P`, `T`, `Order`, etc. are handled via string analysis and are used as `has("age","P.gt(36)")`. It would be better to create `P`, `T`, etc. Python classes that yield the appropriate string representation.
-* Results are retrieved using `toList()`. This simple implementation does not account for GremlinServer's result batching and is thus, not optimal for large result sets.
-* Results are only retrieved using `toList()`. Other aggregation terminal methods should be implemented as well. For example, `toSet()`.
\ No newline at end of file
+* Results are retrieved using `toList()`. This simple implementation does not account for GremlinServer's result batching and is thus, is not optimal for large result sets.
+* While terminal methods such as `next()`, `hasNext()`, `toSet()`, etc. work, they simply rely on `toList()` in an awkward way.
+
+Gremlin Language Variant Conventions
+------------------------------------
+
+Every programming language is different and a Gremlin language variant must ride the fine line between leveraging the
+conventions of the host language and ensuring consistency with Gremlin-Java. A collection of conventions for navigating
+this dual-language bridge are provided.
+
+* If camelCase is not an accepted method naming convention in the host language, then the host language's convention should be used instead. For instance, in a Gremlin-Ruby implementation, `outE("created")` should be `out_e("created")`.
+* If Gremlin-Java step names conflict with the host language's reserved words, then a consistent amelioration should be used. For instance, in Python `as` is a reserved word, thus, Gremlin-Python uses `_as`.
+* If the host language does not use dot-notion for method chaining, then its method chaining convention should be used instead of going the route of operator overloading. For instance, a Gremlin-PHP implementation should do `$g->V()->out()`.
+* If a programming language does not support method overloading, then varargs and type introspection should be used. In Gremlin-Python, `*args` does just this and that is why there are not 200 methods off of `PythonGraphTraversal`.
+
+Finally, note that Gremlin-Jython and Gremlin-Python (as presented in this tutorial) were only manually tested. This
+means that there are most likely errors in the translation and thus, some traversals may break. A future addition to this
+tutorial will explain how to leverage TinkerPop's `ProcessStandardSuite` and `ProcessComputerSuite` to test not only
+JVM-based language variants, but also non-JVM variants. In doing so, every Gremlin language variant's syntax and
+semantics will be validated and deemed an accurate representation of Gremlin-Java within another host language.
+
+Conclusion
+----------
+
+Gremlin is a simple language because it relies two fundamental programming language constructs: function composition
+and function nesting. Because of this foundation, it is relatively easy to implement Gremlin in any modern programming
+language. Two ways of doing this were presented in this tutorial. One using Jython (on the JVM) and one using Python
+(on CPython). It is strongly recommended that language variant designers leverage (especially when not on the JVM)
+leverage the reflection-based source code generation technique presented. This method ensures that the language
+variant is always in sync with the corresponding Apache TinkerPop Gremlin-Java release version. Moreover, it reduces
+the chances of having missing methods or poorly implemented methods. While Gremlin is simple, there are nearly 200
+steps in `GraphTraversal` and thus, its complexity is realized in the diversity of the atomic step operations it supports.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ce1adced/docs/static/images/python-logo.png
----------------------------------------------------------------------
diff --git a/docs/static/images/python-logo.png b/docs/static/images/python-logo.png
new file mode 100644
index 0000000..f503912
Binary files /dev/null and b/docs/static/images/python-logo.png differ


[32/50] [abbrv] incubator-tinkerpop git commit: Changed timeout 'none' to a zero setting.

Posted by sp...@apache.org.
Changed timeout 'none' to a zero setting.

Added more validation and fixed grammatical error in console output.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/704b023e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/704b023e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/704b023e

Branch: refs/heads/TINKERPOP-946
Commit: 704b023e8967656116d2c1437ed96c47bc83708f
Parents: 2284ea9
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon May 2 07:19:38 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon May 2 07:19:38 2016 -0400

----------------------------------------------------------------------
 .../gremlin/console/groovy/plugin/DriverRemoteAcceptor.java  | 8 ++++----
 .../console/groovy/plugin/DriverRemoteAcceptorTest.java      | 5 +++++
 2 files changed, 9 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/704b023e/gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/groovy/plugin/DriverRemoteAcceptor.java
----------------------------------------------------------------------
diff --git a/gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/groovy/plugin/DriverRemoteAcceptor.java b/gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/groovy/plugin/DriverRemoteAcceptor.java
index ed98011..5a0f6ef 100644
--- a/gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/groovy/plugin/DriverRemoteAcceptor.java
+++ b/gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/groovy/plugin/DriverRemoteAcceptor.java
@@ -29,7 +29,6 @@ import org.apache.tinkerpop.gremlin.groovy.plugin.RemoteException;
 import org.apache.commons.lang.exception.ExceptionUtils;
 import org.apache.tinkerpop.gremlin.structure.util.ElementHelper;
 import org.codehaus.groovy.tools.shell.Groovysh;
-import org.codehaus.groovy.tools.shell.Parser;
 
 import javax.security.sasl.SaslException;
 import java.io.FileNotFoundException;
@@ -53,7 +52,7 @@ import java.util.stream.Stream;
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
 public class DriverRemoteAcceptor implements RemoteAcceptor {
-    public static final int NO_TIMEOUT = -1;
+    public static final int NO_TIMEOUT = 0;
 
     private Cluster currentCluster;
     private Client currentClient;
@@ -120,7 +119,8 @@ public class DriverRemoteAcceptor implements RemoteAcceptor {
                 // in the sense that it will no longer be promoted. support for it will be removed at a later date
                 timeout = arguments.get(0).equals(TOKEN_MAX) ? Integer.MAX_VALUE :
                         arguments.get(0).equals(TOKEN_NONE) ? NO_TIMEOUT : Integer.parseInt(arguments.get(0));
-                return timeout == NO_TIMEOUT ? "Remote timeout is disable" : "Set remote timeout to " + timeout + "ms";
+                if (timeout < NO_TIMEOUT) throw new RemoteException("The value for the timeout cannot be less than " + NO_TIMEOUT);
+                return timeout == NO_TIMEOUT ? "Remote timeout is disabled" : "Set remote timeout to " + timeout + "ms";
             } catch (Exception ignored) {
                 throw new RemoteException(errorMessage);
             }
@@ -188,7 +188,7 @@ public class DriverRemoteAcceptor implements RemoteAcceptor {
     private List<Result> send(final String gremlin) throws SaslException {
         try {
             final ResultSet rs = this.currentClient.submitAsync(gremlin, aliases, Collections.emptyMap()).get();
-            return timeout > 0 ? rs.all().get(timeout, TimeUnit.MILLISECONDS) : rs.all().get();
+            return timeout > NO_TIMEOUT ? rs.all().get(timeout, TimeUnit.MILLISECONDS) : rs.all().get();
         } catch(TimeoutException ignored) {
             throw new IllegalStateException("Request timed out while processing - increase the timeout with the :remote command");
         } catch (Exception e) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/704b023e/gremlin-console/src/test/java/org/apache/tinkerpop/gremlin/console/groovy/plugin/DriverRemoteAcceptorTest.java
----------------------------------------------------------------------
diff --git a/gremlin-console/src/test/java/org/apache/tinkerpop/gremlin/console/groovy/plugin/DriverRemoteAcceptorTest.java b/gremlin-console/src/test/java/org/apache/tinkerpop/gremlin/console/groovy/plugin/DriverRemoteAcceptorTest.java
index 987a932..4bac249 100644
--- a/gremlin-console/src/test/java/org/apache/tinkerpop/gremlin/console/groovy/plugin/DriverRemoteAcceptorTest.java
+++ b/gremlin-console/src/test/java/org/apache/tinkerpop/gremlin/console/groovy/plugin/DriverRemoteAcceptorTest.java
@@ -126,6 +126,11 @@ public class DriverRemoteAcceptorTest {
         assertEquals(123456, acceptor.getTimeout());
     }
 
+    @Test(expected = RemoteException.class)
+    public void shouldConfigureTimeoutNotLessThanNoTimeout() throws Exception {
+        acceptor.configure(Arrays.asList("timeout", "-1"));
+    }
+
     @Test
     public void shouldConnect() throws Exception {
         // there is no gremlin server running for this test, but gremlin-driver lazily connects so this should


[04/50] [abbrv] incubator-tinkerpop git commit: added latest version of the gremlin-python generated source file.

Posted by sp...@apache.org.
added latest version of the gremlin-python generated source file.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/099e110a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/099e110a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/099e110a

Branch: refs/heads/TINKERPOP-946
Commit: 099e110a22c94d987a0af17c71b961bf91edad75
Parents: ce1adce
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Apr 21 09:00:12 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Apr 21 09:00:12 2016 -0600

----------------------------------------------------------------------
 docs/static/resources/gremlin-python.py | 397 ++++++++++++++-------------
 1 file changed, 209 insertions(+), 188 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/099e110a/docs/static/resources/gremlin-python.py
----------------------------------------------------------------------
diff --git a/docs/static/resources/gremlin-python.py b/docs/static/resources/gremlin-python.py
index 5abb4c2..4c57e01 100644
--- a/docs/static/resources/gremlin-python.py
+++ b/docs/static/resources/gremlin-python.py
@@ -15,6 +15,10 @@ See the License for the specific language governing permissions and
 limitations under the License.
 '''
 
+from tornado import gen
+from tornado.ioloop import IOLoop
+from gremlinclient.tornado_client import submit
+
 class Helper(object):
   @staticmethod
   def stringOrObject(arg):
@@ -37,84 +41,81 @@ class Helper(object):
       return Helper.stringOrObject(args[0])
     else:
       return ", ".join(Helper.stringOrObject(i) for i in args)
+  @staticmethod
+  @gen.coroutine
+  def submit(gremlinServerURI, traversalString):
+    response = yield submit(gremlinServerURI, traversalString)
+    while True:
+      result = yield response.read()
+      if result is None:
+        break
+      raise gen.Return(result.data)
 
 class PythonGraphTraversalSource(object):
-  def __init__(self, traversalSourceString):
+  def __init__(self, gremlinServerURI, traversalSourceString):
+    self.gremlinServerURI = gremlinServerURI
     self.traversalSourceString = traversalSourceString
   def __repr__(self):
-    return self.traversalSourceString
+    return "graphtraversalsource[" + self.gremlinServerURI + ", " + self.traversalSourceString + "]"
   def toString(self, *args):
-    self.traversalSourceString = self.traversalSourceString + ".toString(" + Helper.stringify(*args) + ")"
-    return self
+    return PythonGraphTraversalSource(self.gremlinServerURI, self.traversalSourceString + ".toString(" + Helper.stringify(*args) + ")")
+  def clone(self, *args):
+    return PythonGraphTraversalSource(self.gremlinServerURI, self.traversalSourceString + ".clone(" + Helper.stringify(*args) + ")")
   def V(self, *args):
-    return PythonGraphTraversal(self.traversalSourceString + ".V(" + Helper.stringify(*args) + ")")
+    return PythonGraphTraversal(self.traversalSourceString + ".V(" + Helper.stringify(*args) + ")", self.gremlinServerURI)
   def E(self, *args):
-    return PythonGraphTraversal(self.traversalSourceString + ".E(" + Helper.stringify(*args) + ")")
-  def getGraphComputer(self, *args):
-    self.traversalSourceString = self.traversalSourceString + ".getGraphComputer(" + Helper.stringify(*args) + ")"
-    return self
-  def getGraph(self, *args):
-    self.traversalSourceString = self.traversalSourceString + ".getGraph(" + Helper.stringify(*args) + ")"
-    return self
+    return PythonGraphTraversal(self.traversalSourceString + ".E(" + Helper.stringify(*args) + ")", self.gremlinServerURI)
   def build(self, *args):
-    self.traversalSourceString = self.traversalSourceString + ".build(" + Helper.stringify(*args) + ")"
-    return self
+    return PythonGraphTraversalSource(self.gremlinServerURI, self.traversalSourceString + ".build(" + Helper.stringify(*args) + ")")
+  def getStrategies(self, *args):
+    return PythonGraphTraversalSource(self.gremlinServerURI, self.traversalSourceString + ".getStrategies(" + Helper.stringify(*args) + ")")
+  def addV(self, *args):
+    return PythonGraphTraversal(self.traversalSourceString + ".addV(" + Helper.stringify(*args) + ")", self.gremlinServerURI)
+  def getGraph(self, *args):
+    return PythonGraphTraversalSource(self.gremlinServerURI, self.traversalSourceString + ".getGraph(" + Helper.stringify(*args) + ")")
   def inject(self, *args):
-    return PythonGraphTraversal(self.traversalSourceString + ".inject(" + Helper.stringify(*args) + ")")
-  def tx(self, *args):
-    self.traversalSourceString = self.traversalSourceString + ".tx(" + Helper.stringify(*args) + ")"
-    return self
+    return PythonGraphTraversal(self.traversalSourceString + ".inject(" + Helper.stringify(*args) + ")", self.gremlinServerURI)
   def computer(self, *args):
-    self.traversalSourceString = self.traversalSourceString + ".computer(" + Helper.stringify(*args) + ")"
-    return self
-  def standard(self, *args):
-    self.traversalSourceString = self.traversalSourceString + ".standard(" + Helper.stringify(*args) + ")"
-    return self
+    return PythonGraphTraversalSource(self.gremlinServerURI, self.traversalSourceString + ".computer(" + Helper.stringify(*args) + ")")
+  def tx(self, *args):
+    return PythonGraphTraversalSource(self.gremlinServerURI, self.traversalSourceString + ".tx(" + Helper.stringify(*args) + ")")
+  def withComputer(self, *args):
+    return PythonGraphTraversalSource(self.gremlinServerURI, self.traversalSourceString + ".withComputer(" + Helper.stringify(*args) + ")")
+  def withStrategies(self, *args):
+    return PythonGraphTraversalSource(self.gremlinServerURI, self.traversalSourceString + ".withStrategies(" + Helper.stringify(*args) + ")")
+  def withoutStrategies(self, *args):
+    return PythonGraphTraversalSource(self.gremlinServerURI, self.traversalSourceString + ".withoutStrategies(" + Helper.stringify(*args) + ")")
   def withSideEffect(self, *args):
-    self.traversalSourceString = self.traversalSourceString + ".withSideEffect(" + Helper.stringify(*args) + ")"
-    return self
+    return PythonGraphTraversalSource(self.gremlinServerURI, self.traversalSourceString + ".withSideEffect(" + Helper.stringify(*args) + ")")
   def withSack(self, *args):
-    self.traversalSourceString = self.traversalSourceString + ".withSack(" + Helper.stringify(*args) + ")"
-    return self
+    return PythonGraphTraversalSource(self.gremlinServerURI, self.traversalSourceString + ".withSack(" + Helper.stringify(*args) + ")")
   def withBulk(self, *args):
-    self.traversalSourceString = self.traversalSourceString + ".withBulk(" + Helper.stringify(*args) + ")"
-    return self
+    return PythonGraphTraversalSource(self.gremlinServerURI, self.traversalSourceString + ".withBulk(" + Helper.stringify(*args) + ")")
   def withPath(self, *args):
-    self.traversalSourceString = self.traversalSourceString + ".withPath(" + Helper.stringify(*args) + ")"
-    return self
-  def getStrategies(self, *args):
-    self.traversalSourceString = self.traversalSourceString + ".getStrategies(" + Helper.stringify(*args) + ")"
-    return self
-  def asBuilder(self, *args):
-    self.traversalSourceString = self.traversalSourceString + ".asBuilder(" + Helper.stringify(*args) + ")"
-    return self
-  def addV(self, *args):
-    return PythonGraphTraversal(self.traversalSourceString + ".addV(" + Helper.stringify(*args) + ")")
+    return PythonGraphTraversalSource(self.gremlinServerURI, self.traversalSourceString + ".withPath(" + Helper.stringify(*args) + ")")
+  def standard(self, *args):
+    return PythonGraphTraversalSource(self.gremlinServerURI, self.traversalSourceString + ".standard(" + Helper.stringify(*args) + ")")
   def wait(self, *args):
-    self.traversalSourceString = self.traversalSourceString + ".wait(" + Helper.stringify(*args) + ")"
-    return self
+    return PythonGraphTraversalSource(self.gremlinServerURI, self.traversalSourceString + ".wait(" + Helper.stringify(*args) + ")")
   def equals(self, *args):
-    self.traversalSourceString = self.traversalSourceString + ".equals(" + Helper.stringify(*args) + ")"
-    return self
+    return PythonGraphTraversalSource(self.gremlinServerURI, self.traversalSourceString + ".equals(" + Helper.stringify(*args) + ")")
   def hashCode(self, *args):
-    self.traversalSourceString = self.traversalSourceString + ".hashCode(" + Helper.stringify(*args) + ")"
-    return self
+    return PythonGraphTraversalSource(self.gremlinServerURI, self.traversalSourceString + ".hashCode(" + Helper.stringify(*args) + ")")
   def getClass(self, *args):
-    self.traversalSourceString = self.traversalSourceString + ".getClass(" + Helper.stringify(*args) + ")"
-    return self
+    return PythonGraphTraversalSource(self.gremlinServerURI, self.traversalSourceString + ".getClass(" + Helper.stringify(*args) + ")")
   def notify(self, *args):
-    self.traversalSourceString = self.traversalSourceString + ".notify(" + Helper.stringify(*args) + ")"
-    return self
+    return PythonGraphTraversalSource(self.gremlinServerURI, self.traversalSourceString + ".notify(" + Helper.stringify(*args) + ")")
   def notifyAll(self, *args):
-    self.traversalSourceString = self.traversalSourceString + ".notifyAll(" + Helper.stringify(*args) + ")"
-    return self
+    return PythonGraphTraversalSource(self.gremlinServerURI, self.traversalSourceString + ".notifyAll(" + Helper.stringify(*args) + ")")
 
 
 class PythonGraphTraversal(object):
-  def __init__(self, traversalString):
+  def __init__(self, traversalString, gremlinServerURI=None):
     self.traversalString = traversalString
+    self.gremlinServerURI = gremlinServerURI
+    self.result = None
   def __repr__(self):
-    return self.traversalString
+    return self.traversalString;
   def __getitem__(self,index):
     if type(index) is int:
       return self.range(indices,indices+1)
@@ -124,6 +125,8 @@ class PythonGraphTraversal(object):
       raise TypeError("index must be int or slice")
   def __getattr__(self,key):
     return self.values(key)
+  def toList(self):
+    return IOLoop.current().run_sync(lambda: Helper.submit(self.gremlinServerURI, self.traversalString))
   def group(self, *args):
     self.traversalString = self.traversalString + ".group(" + Helper.stringify(*args) + ")"
     return self
@@ -205,75 +208,21 @@ class PythonGraphTraversal(object):
   def id(self, *args):
     self.traversalString = self.traversalString + ".id(" + Helper.stringify(*args) + ")"
     return self
-  def _is(self, *args):
-    self.traversalString = self.traversalString + ".is(" + Helper.stringify(*args) + ")"
+  def outE(self, *args):
+    self.traversalString = self.traversalString + ".outE(" + Helper.stringify(*args) + ")"
     return self
-  def until(self, *args):
-    self.traversalString = self.traversalString + ".until(" + Helper.stringify(*args) + ")"
+  def toE(self, *args):
+    self.traversalString = self.traversalString + ".toE(" + Helper.stringify(*args) + ")"
+    return self
+  def inE(self, *args):
+    self.traversalString = self.traversalString + ".inE(" + Helper.stringify(*args) + ")"
     return self
   def property(self, *args):
     self.traversalString = self.traversalString + ".property(" + Helper.stringify(*args) + ")"
     return self
-  def label(self, *args):
-    self.traversalString = self.traversalString + ".label(" + Helper.stringify(*args) + ")"
-    return self
-  def cap(self, *args):
-    self.traversalString = self.traversalString + ".cap(" + Helper.stringify(*args) + ")"
-    return self
-  def propertyMap(self, *args):
-    self.traversalString = self.traversalString + ".propertyMap(" + Helper.stringify(*args) + ")"
-    return self
-  def inject(self, *args):
-    self.traversalString = self.traversalString + ".inject(" + Helper.stringify(*args) + ")"
-    return self
-  def drop(self, *args):
-    self.traversalString = self.traversalString + ".drop(" + Helper.stringify(*args) + ")"
-    return self
-  def times(self, *args):
-    self.traversalString = self.traversalString + ".times(" + Helper.stringify(*args) + ")"
-    return self
-  def select(self, *args):
-    self.traversalString = self.traversalString + ".select(" + Helper.stringify(*args) + ")"
-    return self
-  def asAdmin(self, *args):
-    self.traversalString = self.traversalString + ".asAdmin(" + Helper.stringify(*args) + ")"
-    return self
-  def constant(self, *args):
-    self.traversalString = self.traversalString + ".constant(" + Helper.stringify(*args) + ")"
-    return self
-  def properties(self, *args):
-    self.traversalString = self.traversalString + ".properties(" + Helper.stringify(*args) + ")"
-    return self
-  def to(self, *args):
-    self.traversalString = self.traversalString + ".to(" + Helper.stringify(*args) + ")"
-    return self
-  def _from(self, *args):
-    self.traversalString = self.traversalString + ".from(" + Helper.stringify(*args) + ")"
-    return self
-  def _not(self, *args):
-    self.traversalString = self.traversalString + ".not(" + Helper.stringify(*args) + ")"
-    return self
-  def option(self, *args):
-    self.traversalString = self.traversalString + ".option(" + Helper.stringify(*args) + ")"
-    return self
-  def _as(self, *args):
-    self.traversalString = self.traversalString + ".as(" + Helper.stringify(*args) + ")"
-    return self
-  def choose(self, *args):
-    self.traversalString = self.traversalString + ".choose(" + Helper.stringify(*args) + ")"
-    return self
   def both(self, *args):
     self.traversalString = self.traversalString + ".both(" + Helper.stringify(*args) + ")"
     return self
-  def toE(self, *args):
-    self.traversalString = self.traversalString + ".toE(" + Helper.stringify(*args) + ")"
-    return self
-  def outE(self, *args):
-    self.traversalString = self.traversalString + ".outE(" + Helper.stringify(*args) + ")"
-    return self
-  def inE(self, *args):
-    self.traversalString = self.traversalString + ".inE(" + Helper.stringify(*args) + ")"
-    return self
   def bothE(self, *args):
     self.traversalString = self.traversalString + ".bothE(" + Helper.stringify(*args) + ")"
     return self
@@ -304,6 +253,9 @@ class PythonGraphTraversal(object):
   def loops(self, *args):
     self.traversalString = self.traversalString + ".loops(" + Helper.stringify(*args) + ")"
     return self
+  def project(self, *args):
+    self.traversalString = self.traversalString + ".project(" + Helper.stringify(*args) + ")"
+    return self
   def unfold(self, *args):
     self.traversalString = self.traversalString + ".unfold(" + Helper.stringify(*args) + ")"
     return self
@@ -376,6 +328,9 @@ class PythonGraphTraversal(object):
   def branch(self, *args):
     self.traversalString = self.traversalString + ".branch(" + Helper.stringify(*args) + ")"
     return self
+  def optional(self, *args):
+    self.traversalString = self.traversalString + ".optional(" + Helper.stringify(*args) + ")"
+    return self
   def coalesce(self, *args):
     self.traversalString = self.traversalString + ".coalesce(" + Helper.stringify(*args) + ")"
     return self
@@ -388,12 +343,51 @@ class PythonGraphTraversal(object):
   def local(self, *args):
     self.traversalString = self.traversalString + ".local(" + Helper.stringify(*args) + ")"
     return self
+  def pageRank(self, *args):
+    self.traversalString = self.traversalString + ".pageRank(" + Helper.stringify(*args) + ")"
+    return self
+  def peerPressure(self, *args):
+    self.traversalString = self.traversalString + ".peerPressure(" + Helper.stringify(*args) + ")"
+    return self
   def barrier(self, *args):
     self.traversalString = self.traversalString + ".barrier(" + Helper.stringify(*args) + ")"
     return self
   def by(self, *args):
     self.traversalString = self.traversalString + ".by(" + Helper.stringify(*args) + ")"
     return self
+  def option(self, *args):
+    self.traversalString = self.traversalString + ".option(" + Helper.stringify(*args) + ")"
+    return self
+  def choose(self, *args):
+    self.traversalString = self.traversalString + ".choose(" + Helper.stringify(*args) + ")"
+    return self
+  def cap(self, *args):
+    self.traversalString = self.traversalString + ".cap(" + Helper.stringify(*args) + ")"
+    return self
+  def inject(self, *args):
+    self.traversalString = self.traversalString + ".inject(" + Helper.stringify(*args) + ")"
+    return self
+  def drop(self, *args):
+    self.traversalString = self.traversalString + ".drop(" + Helper.stringify(*args) + ")"
+    return self
+  def times(self, *args):
+    self.traversalString = self.traversalString + ".times(" + Helper.stringify(*args) + ")"
+    return self
+  def _as(self, *args):
+    self.traversalString = self.traversalString + ".as(" + Helper.stringify(*args) + ")"
+    return self
+  def label(self, *args):
+    self.traversalString = self.traversalString + ".label(" + Helper.stringify(*args) + ")"
+    return self
+  def propertyMap(self, *args):
+    self.traversalString = self.traversalString + ".propertyMap(" + Helper.stringify(*args) + ")"
+    return self
+  def constant(self, *args):
+    self.traversalString = self.traversalString + ".constant(" + Helper.stringify(*args) + ")"
+    return self
+  def until(self, *args):
+    self.traversalString = self.traversalString + ".until(" + Helper.stringify(*args) + ")"
+    return self
   def has(self, *args):
     self.traversalString = self.traversalString + ".has(" + Helper.stringify(*args) + ")"
     return self
@@ -409,39 +403,60 @@ class PythonGraphTraversal(object):
   def iterate(self, *args):
     self.traversalString = self.traversalString + ".iterate(" + Helper.stringify(*args) + ")"
     return self
+  def properties(self, *args):
+    self.traversalString = self.traversalString + ".properties(" + Helper.stringify(*args) + ")"
+    return self
+  def to(self, *args):
+    self.traversalString = self.traversalString + ".to(" + Helper.stringify(*args) + ")"
+    return self
+  def _from(self, *args):
+    self.traversalString = self.traversalString + ".from(" + Helper.stringify(*args) + ")"
+    return self
+  def _not(self, *args):
+    self.traversalString = self.traversalString + ".not(" + Helper.stringify(*args) + ")"
+    return self
+  def _is(self, *args):
+    self.traversalString = self.traversalString + ".is(" + Helper.stringify(*args) + ")"
+    return self
+  def select(self, *args):
+    self.traversalString = self.traversalString + ".select(" + Helper.stringify(*args) + ")"
+    return self
+  def asAdmin(self, *args):
+    self.traversalString = self.traversalString + ".asAdmin(" + Helper.stringify(*args) + ")"
+    return self
+  def program(self, *args):
+    self.traversalString = self.traversalString + ".program(" + Helper.stringify(*args) + ")"
+    return self
   def next(self, *args):
     self.traversalString = self.traversalString + ".next(" + Helper.stringify(*args) + ")"
-    return self
+    return self.toList()
   def fill(self, *args):
     self.traversalString = self.traversalString + ".fill(" + Helper.stringify(*args) + ")"
-    return self
+    return self.toList()
   def forEachRemaining(self, *args):
     self.traversalString = self.traversalString + ".forEachRemaining(" + Helper.stringify(*args) + ")"
-    return self
-  def toList(self, *args):
-    self.traversalString = self.traversalString + ".toList(" + Helper.stringify(*args) + ")"
-    return self
+    return self.toList()
   def toSet(self, *args):
     self.traversalString = self.traversalString + ".toSet(" + Helper.stringify(*args) + ")"
-    return self
+    return self.toList()
   def tryNext(self, *args):
     self.traversalString = self.traversalString + ".tryNext(" + Helper.stringify(*args) + ")"
-    return self
-  def toBulkSet(self, *args):
-    self.traversalString = self.traversalString + ".toBulkSet(" + Helper.stringify(*args) + ")"
-    return self
-  def toStream(self, *args):
-    self.traversalString = self.traversalString + ".toStream(" + Helper.stringify(*args) + ")"
-    return self
+    return self.toList()
   def explain(self, *args):
     self.traversalString = self.traversalString + ".explain(" + Helper.stringify(*args) + ")"
-    return self
+    return self.toList()
+  def toStream(self, *args):
+    self.traversalString = self.traversalString + ".toStream(" + Helper.stringify(*args) + ")"
+    return self.toList()
+  def toBulkSet(self, *args):
+    self.traversalString = self.traversalString + ".toBulkSet(" + Helper.stringify(*args) + ")"
+    return self.toList()
   def remove(self, *args):
     self.traversalString = self.traversalString + ".remove(" + Helper.stringify(*args) + ")"
-    return self
+    return self.toList()
   def hasNext(self, *args):
     self.traversalString = self.traversalString + ".hasNext(" + Helper.stringify(*args) + ")"
-    return self
+    return self.toList()
 
 
 class __(object):
@@ -474,7 +489,7 @@ class __(object):
     return PythonGraphTraversal("__").identity(*args)
   @staticmethod
   def _in(*args):
-    return PythonGraphTraversal("__").in(*args)
+    return PythonGraphTraversal("__")._in(*args)
   @staticmethod
   def out(*args):
     return PythonGraphTraversal("__").out(*args)
@@ -519,77 +534,29 @@ class __(object):
     return PythonGraphTraversal("__").tail(*args)
   @staticmethod
   def _and(*args):
-    return PythonGraphTraversal("__").and(*args)
+    return PythonGraphTraversal("__")._and(*args)
   @staticmethod
   def _or(*args):
-    return PythonGraphTraversal("__").or(*args)
+    return PythonGraphTraversal("__")._or(*args)
   @staticmethod
   def id(*args):
     return PythonGraphTraversal("__").id(*args)
   @staticmethod
-  def _is(*args):
-    return PythonGraphTraversal("__").is(*args)
+  def outE(*args):
+    return PythonGraphTraversal("__").outE(*args)
   @staticmethod
-  def until(*args):
-    return PythonGraphTraversal("__").until(*args)
+  def toE(*args):
+    return PythonGraphTraversal("__").toE(*args)
   @staticmethod
-  def __(*args):
-    return PythonGraphTraversal("__").__(*args)
+  def inE(*args):
+    return PythonGraphTraversal("__").inE(*args)
   @staticmethod
   def property(*args):
     return PythonGraphTraversal("__").property(*args)
   @staticmethod
-  def label(*args):
-    return PythonGraphTraversal("__").label(*args)
-  @staticmethod
-  def cap(*args):
-    return PythonGraphTraversal("__").cap(*args)
-  @staticmethod
-  def propertyMap(*args):
-    return PythonGraphTraversal("__").propertyMap(*args)
-  @staticmethod
-  def inject(*args):
-    return PythonGraphTraversal("__").inject(*args)
-  @staticmethod
-  def drop(*args):
-    return PythonGraphTraversal("__").drop(*args)
-  @staticmethod
-  def times(*args):
-    return PythonGraphTraversal("__").times(*args)
-  @staticmethod
-  def select(*args):
-    return PythonGraphTraversal("__").select(*args)
-  @staticmethod
-  def constant(*args):
-    return PythonGraphTraversal("__").constant(*args)
-  @staticmethod
-  def properties(*args):
-    return PythonGraphTraversal("__").properties(*args)
-  @staticmethod
-  def to(*args):
-    return PythonGraphTraversal("__").to(*args)
-  @staticmethod
-  def _not(*args):
-    return PythonGraphTraversal("__").not(*args)
-  @staticmethod
-  def _as(*args):
-    return PythonGraphTraversal("__").as(*args)
-  @staticmethod
-  def choose(*args):
-    return PythonGraphTraversal("__").choose(*args)
-  @staticmethod
   def both(*args):
     return PythonGraphTraversal("__").both(*args)
   @staticmethod
-  def toE(*args):
-    return PythonGraphTraversal("__").toE(*args)
-  @staticmethod
-  def outE(*args):
-    return PythonGraphTraversal("__").outE(*args)
-  @staticmethod
-  def inE(*args):
-    return PythonGraphTraversal("__").inE(*args)
-  @staticmethod
   def bothE(*args):
     return PythonGraphTraversal("__").bothE(*args)
   @staticmethod
@@ -620,6 +587,9 @@ class __(object):
   def loops(*args):
     return PythonGraphTraversal("__").loops(*args)
   @staticmethod
+  def project(*args):
+    return PythonGraphTraversal("__").project(*args)
+  @staticmethod
   def unfold(*args):
     return PythonGraphTraversal("__").unfold(*args)
   @staticmethod
@@ -692,6 +662,9 @@ class __(object):
   def branch(*args):
     return PythonGraphTraversal("__").branch(*args)
   @staticmethod
+  def optional(*args):
+    return PythonGraphTraversal("__").optional(*args)
+  @staticmethod
   def coalesce(*args):
     return PythonGraphTraversal("__").coalesce(*args)
   @staticmethod
@@ -707,6 +680,39 @@ class __(object):
   def barrier(*args):
     return PythonGraphTraversal("__").barrier(*args)
   @staticmethod
+  def choose(*args):
+    return PythonGraphTraversal("__").choose(*args)
+  @staticmethod
+  def cap(*args):
+    return PythonGraphTraversal("__").cap(*args)
+  @staticmethod
+  def inject(*args):
+    return PythonGraphTraversal("__").inject(*args)
+  @staticmethod
+  def drop(*args):
+    return PythonGraphTraversal("__").drop(*args)
+  @staticmethod
+  def times(*args):
+    return PythonGraphTraversal("__").times(*args)
+  @staticmethod
+  def _as(*args):
+    return PythonGraphTraversal("__")._as(*args)
+  @staticmethod
+  def label(*args):
+    return PythonGraphTraversal("__").label(*args)
+  @staticmethod
+  def propertyMap(*args):
+    return PythonGraphTraversal("__").propertyMap(*args)
+  @staticmethod
+  def constant(*args):
+    return PythonGraphTraversal("__").constant(*args)
+  @staticmethod
+  def until(*args):
+    return PythonGraphTraversal("__").until(*args)
+  @staticmethod
+  def __(*args):
+    return PythonGraphTraversal("__").__(*args)
+  @staticmethod
   def has(*args):
     return PythonGraphTraversal("__").has(*args)
   @staticmethod
@@ -719,6 +725,21 @@ class __(object):
   def flatMap(*args):
     return PythonGraphTraversal("__").flatMap(*args)
   @staticmethod
+  def properties(*args):
+    return PythonGraphTraversal("__").properties(*args)
+  @staticmethod
+  def to(*args):
+    return PythonGraphTraversal("__").to(*args)
+  @staticmethod
+  def _not(*args):
+    return PythonGraphTraversal("__")._not(*args)
+  @staticmethod
+  def _is(*args):
+    return PythonGraphTraversal("__")._is(*args)
+  @staticmethod
+  def select(*args):
+    return PythonGraphTraversal("__").select(*args)
+  @staticmethod
   def wait(*args):
     return PythonGraphTraversal("__").wait(*args)
   @staticmethod


[29/50] [abbrv] incubator-tinkerpop git commit: an untested addEdge method is now tested and the NPE thrown is now not there. Thank you @dalaro.

Posted by sp...@apache.org.
an untested addEdge method is now tested and the NPE thrown is now not there. Thank you @dalaro.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/82295fe1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/82295fe1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/82295fe1

Branch: refs/heads/TINKERPOP-946
Commit: 82295fe1eaaeab86517c191c1d44dfe3f0b34d2a
Parents: 0563ec3
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Fri Apr 29 10:37:51 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Fri Apr 29 10:37:51 2016 -0600

----------------------------------------------------------------------
 .../gremlin/structure/util/star/StarGraph.java      |  4 +++-
 .../gremlin/structure/util/star/StarGraphTest.java  | 16 ++++++++++++++++
 2 files changed, 19 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/82295fe1/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraph.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraph.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraph.java
index a8a72ff..f516630 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraph.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraph.java
@@ -290,7 +290,9 @@ public final class StarGraph implements Graph, Serializable {
         public Edge addEdge(final String label, final Vertex inVertex, final Object... keyValues) {
             final Edge edge = this.addOutEdge(label, inVertex, keyValues);
             if (inVertex.equals(this)) {
-                List<Edge> inE = inEdges.get(label);
+                if(null == this.inEdges)
+                    this.inEdges = new HashMap<>();
+                List<Edge> inE = this.inEdges.get(label);
                 if (null == inE) {
                     inE = new ArrayList<>();
                     this.inEdges.put(label, inE);

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/82295fe1/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphTest.java
index fda6e37..034afad 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphTest.java
@@ -229,8 +229,24 @@ public class StarGraphTest extends AbstractGremlinTest {
         TestHelper.validateVertexEquality(vertex, starGraph.getStarVertex(), true);
         TestHelper.validateVertexEquality(vertex, starGraphCopy.getStarVertex(), true);
         TestHelper.validateVertexEquality(starGraph.getStarVertex(), starGraphCopy.getStarVertex(), true);
+        // test native non-clone-based methods
+        final StarGraph starGraphNative = StarGraph.open();
+        Vertex v1 = starGraphNative.addVertex(T.label, "thing", T.id, "v1");
+        assertEquals("v1", v1.id());
+        assertEquals("thing", v1.label());
+        Edge e1 = v1.addEdge("self", v1, "name", "pipes");
+        assertEquals(2l, IteratorUtils.count(v1.vertices(Direction.BOTH, "self", "nothing")));
+        assertEquals(1l, IteratorUtils.count(v1.vertices(Direction.OUT)));
+        assertEquals(1l, IteratorUtils.count(v1.vertices(Direction.IN, "self")));
+        edgeIterator = v1.edges(Direction.BOTH);
+        TestHelper.validateEdgeEquality(e1, edgeIterator.next());
+        TestHelper.validateEdgeEquality(e1, edgeIterator.next());
+        assertFalse(edgeIterator.hasNext());
+        TestHelper.validateEdgeEquality(e1, v1.edges(Direction.OUT, "self", "nothing").next());
+        TestHelper.validateEdgeEquality(e1, v1.edges(Direction.IN).next());
     }
 
+
     private Pair<StarGraph, Integer> serializeDeserialize(final StarGraph starGraph) {
         final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
         try {


[28/50] [abbrv] incubator-tinkerpop git commit: fixed a self-loop bug in StarGraph. Added StarGraphTest.shouldHandleSelfLoops() to ensure correct behavior.

Posted by sp...@apache.org.
fixed a self-loop bug in StarGraph. Added StarGraphTest.shouldHandleSelfLoops() to ensure correct behavior.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/0563ec36
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/0563ec36
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/0563ec36

Branch: refs/heads/TINKERPOP-946
Commit: 0563ec36bb823d617acde6a15217c2b61471408d
Parents: 2451bb9
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Fri Apr 29 09:33:29 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Fri Apr 29 09:33:29 2016 -0600

----------------------------------------------------------------------
 .../gremlin/structure/util/star/StarGraph.java  | 17 +++--
 .../structure/util/star/StarGraphTest.java      | 70 ++++++++++++++++++++
 2 files changed, 82 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0563ec36/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraph.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraph.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraph.java
index c613dbb..a8a72ff 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraph.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraph.java
@@ -206,10 +206,8 @@ public final class StarGraph implements Graph, Serializable {
         });
 
         vertex.edges(Direction.OUT).forEachRemaining(edge -> {
-            if (!ElementHelper.areEqual(starVertex, edge.inVertex())) { // only do a self loop once
-                final Edge starEdge = starVertex.addOutEdge(edge.label(), starGraph.addVertex(T.id, edge.inVertex().id()), T.id, edge.id());
-                edge.properties().forEachRemaining(p -> starEdge.property(p.key(), p.value()));
-            }
+            final Edge starEdge = starVertex.addOutEdge(edge.label(), starGraph.addVertex(T.id, edge.inVertex().id()), T.id, edge.id());
+            edge.properties().forEachRemaining(p -> starEdge.property(p.key(), p.value()));
         });
         return starGraph;
     }
@@ -290,7 +288,16 @@ public final class StarGraph implements Graph, Serializable {
 
         @Override
         public Edge addEdge(final String label, final Vertex inVertex, final Object... keyValues) {
-            return this.addOutEdge(label, inVertex, keyValues);
+            final Edge edge = this.addOutEdge(label, inVertex, keyValues);
+            if (inVertex.equals(this)) {
+                List<Edge> inE = inEdges.get(label);
+                if (null == inE) {
+                    inE = new ArrayList<>();
+                    this.inEdges.put(label, inE);
+                }
+                inE.add(edge);
+            }
+            return edge;
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0563ec36/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphTest.java
index 2c5d6d2..fda6e37 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphTest.java
@@ -40,6 +40,7 @@ import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Random;
 import java.util.Set;
@@ -47,6 +48,7 @@ import java.util.UUID;
 import java.util.stream.Collectors;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -161,6 +163,74 @@ public class StarGraphTest extends AbstractGremlinTest {
         TestHelper.validateEquality(starVertex, createdVertex);
     }
 
+    @Test
+    @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_VERTICES)
+    @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_PROPERTY)
+    @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES)
+    @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_PROPERTY)
+    public void shouldHandleSelfLoops() {
+        assertEquals(0l, IteratorUtils.count(graph.vertices()));
+        assertEquals(0l, IteratorUtils.count(graph.edges()));
+        final Vertex vertex = graph.addVertex("person");
+        final VertexProperty<String> vertexProperty = vertex.property("name", "furnace");
+        final Edge edge = vertex.addEdge("self", vertex);
+        final Property<String> edgeProperty = edge.property("acl", "private");
+        assertEquals(1l, IteratorUtils.count(graph.vertices()));
+        assertEquals(1l, IteratorUtils.count(graph.edges()));
+        assertEquals(1l, IteratorUtils.count(vertex.properties()));
+        assertEquals(1l, IteratorUtils.count(edge.properties()));
+        assertEquals(vertexProperty, vertex.properties().next());
+        assertEquals(edgeProperty, edge.properties().next());
+        ///
+        final StarGraph starGraph = StarGraph.of(vertex);
+        final StarGraph.StarVertex starVertex = starGraph.getStarVertex();
+        final Edge starEdge = starVertex.edges(Direction.OUT).next();
+        assertEquals(vertex, starVertex);
+        assertEquals(edge, starEdge);
+        assertEquals(1l, IteratorUtils.count(starVertex.properties()));
+        assertEquals("furnace", starVertex.value("name"));
+        assertEquals(2l, IteratorUtils.count(starVertex.vertices(Direction.BOTH, "self")));
+        assertEquals(1l, IteratorUtils.count(starVertex.vertices(Direction.OUT, "self")));
+        assertEquals(1l, IteratorUtils.count(starVertex.vertices(Direction.IN, "self")));
+        Iterator<Vertex> vertexIterator = starVertex.vertices(Direction.BOTH, "self");
+        assertEquals(starVertex, vertexIterator.next());
+        assertEquals(starVertex, vertexIterator.next());
+        assertFalse(vertexIterator.hasNext());
+        assertEquals(starVertex, starVertex.vertices(Direction.OUT, "self").next());
+        assertEquals(starVertex, starVertex.vertices(Direction.IN, "self").next());
+        ///
+        assertEquals(2l, IteratorUtils.count(starVertex.vertices(Direction.BOTH)));
+        assertEquals(1l, IteratorUtils.count(starVertex.vertices(Direction.OUT)));
+        assertEquals(1l, IteratorUtils.count(starVertex.vertices(Direction.IN)));
+        vertexIterator = starVertex.vertices(Direction.BOTH);
+        assertEquals(starVertex, vertexIterator.next());
+        assertEquals(starVertex, vertexIterator.next());
+        assertFalse(vertexIterator.hasNext());
+        assertEquals(starVertex, starVertex.vertices(Direction.OUT).next());
+        assertEquals(starVertex, starVertex.vertices(Direction.IN).next());
+        ///
+        assertEquals(2l, IteratorUtils.count(starVertex.edges(Direction.BOTH, "self", "nothing")));
+        assertEquals(1l, IteratorUtils.count(starVertex.edges(Direction.OUT, "self", "nothing")));
+        assertEquals(1l, IteratorUtils.count(starVertex.edges(Direction.IN, "self", "nothing")));
+        Iterator<Edge> edgeIterator = starVertex.edges(Direction.BOTH, "self", "nothing");
+        Edge tempEdge = edgeIterator.next();
+        assertEquals(1l, IteratorUtils.count(tempEdge.properties()));
+        assertEquals("private", tempEdge.value("acl"));
+        assertEquals(starEdge, tempEdge);
+        tempEdge = edgeIterator.next();
+        assertEquals(1l, IteratorUtils.count(tempEdge.properties()));
+        assertEquals("private", tempEdge.value("acl"));
+        assertEquals(starEdge, tempEdge);
+        assertFalse(edgeIterator.hasNext());
+        assertEquals(starEdge, starVertex.edges(Direction.OUT, "self", "nothing").next());
+        assertEquals(starEdge, starVertex.edges(Direction.IN, "self", "nothing").next());
+        //
+        final StarGraph starGraphCopy = serializeDeserialize(starGraph).getValue0();
+        TestHelper.validateVertexEquality(vertex, starGraph.getStarVertex(), true);
+        TestHelper.validateVertexEquality(vertex, starGraphCopy.getStarVertex(), true);
+        TestHelper.validateVertexEquality(starGraph.getStarVertex(), starGraphCopy.getStarVertex(), true);
+    }
+
     private Pair<StarGraph, Integer> serializeDeserialize(final StarGraph starGraph) {
         final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
         try {


[21/50] [abbrv] incubator-tinkerpop git commit: Implemented more options for Gremlin Console startup.

Posted by sp...@apache.org.
Implemented more options for Gremlin Console startup.

Added -i for interactive mode and made -e execute in the Console rather than ScriptExecutor. Added switches to show/hide output and added a switch for "help". The existing method for -i still works as in "bin/gremlin.sh init.groovy"


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/b6853f05
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/b6853f05
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/b6853f05

Branch: refs/heads/TINKERPOP-946
Commit: b6853f052fc2efcf76f9d8e30bf95e6a22349fcc
Parents: b1493b5
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Apr 28 13:46:02 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Apr 28 13:46:02 2016 -0400

----------------------------------------------------------------------
 gremlin-console/pom.xml                         |   5 +
 gremlin-console/src/main/bin/gremlin.bat        |  41 +----
 gremlin-console/src/main/bin/gremlin.sh         |  19 +--
 .../tinkerpop/gremlin/console/Console.groovy    | 157 +++++++++++++++----
 4 files changed, 136 insertions(+), 86 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b6853f05/gremlin-console/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-console/pom.xml b/gremlin-console/pom.xml
index 1620bc5..98cccb0 100644
--- a/gremlin-console/pom.xml
+++ b/gremlin-console/pom.xml
@@ -42,6 +42,11 @@ limitations under the License.
             <version>4.5.1</version>
         </dependency>
         <dependency>
+            <groupId>commons-cli</groupId>
+            <artifactId>commons-cli</artifactId>
+            <version>1.2</version>
+        </dependency>
+        <dependency>
             <groupId>org.apache.tinkerpop</groupId>
             <artifactId>gremlin-driver</artifactId>
             <version>${project.version}</version>

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b6853f05/gremlin-console/src/main/bin/gremlin.bat
----------------------------------------------------------------------
diff --git a/gremlin-console/src/main/bin/gremlin.bat b/gremlin-console/src/main/bin/gremlin.bat
index 481d5ac..1d5e9bd 100644
--- a/gremlin-console/src/main/bin/gremlin.bat
+++ b/gremlin-console/src/main/bin/gremlin.bat
@@ -39,45 +39,6 @@ set JAVA_OPTIONS=-Xms32m -Xmx512m -Djline.terminal=none
 
 :: Launch the application
 
-if "%1" == "" goto console
-if "%1" == "-e" goto script
-if "%1" == "-v" goto version
-
-:console
-
 java %JAVA_OPTIONS% %JAVA_ARGS% -cp %LIBDIR%/*;%EXTDIR%; org.apache.tinkerpop.gremlin.console.Console %*
 
-set CLASSPATH=%OLD_CLASSPATH%
-goto :eof
-
-:script
-
-set strg=
-
-FOR %%X IN (%*) DO (
-CALL :concat %%X %1 %2
-)
-
-java %JAVA_OPTIONS% %JAVA_ARGS% -cp %LIBDIR%/*;%EXTDIR%; org.apache.tinkerpop.gremlin.groovy.jsr223.ScriptExecutor %strg%
-goto :eof
-
-:version
-java %JAVA_OPTIONS% %JAVA_ARGS% -cp %LIBDIR%/*;%EXTDIR%; org.apache.tinkerpop.gremlin.util.Gremlin
-
-goto :eof
-
-:concat
-
-if %1 == %2 goto skip
-
-SET strg=%strg% %1
-
-:concatsep
-
-if "%CP%" == "" (
-set CP=%LIBDIR%\%1
-)else (
-set CP=%CP%;%LIBDIR%\%1
-)
-
-:skip
+set CLASSPATH=%OLD_CLASSPATH%
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b6853f05/gremlin-console/src/main/bin/gremlin.sh
----------------------------------------------------------------------
diff --git a/gremlin-console/src/main/bin/gremlin.sh b/gremlin-console/src/main/bin/gremlin.sh
index 84ba8179..6ff0254 100755
--- a/gremlin-console/src/main/bin/gremlin.sh
+++ b/gremlin-console/src/main/bin/gremlin.sh
@@ -76,15 +76,8 @@ if [ -z "${SCRIPT_DEBUG:-}" ]; then
 fi
 
 # Process options
-MAIN_CLASS=org.apache.tinkerpop.gremlin.console.Console
-while getopts "elv" opt; do
+while getopts ":l" opt; do
     case "$opt" in
-    e) MAIN_CLASS=org.apache.tinkerpop.gremlin.groovy.jsr223.ScriptExecutor
-       # For compatibility with behavior pre-Titan-0.5.0, stop
-       # processing gremlin.sh arguments as soon as the -e switch is
-       # seen; everything following -e becomes arguments to the
-       # ScriptExecutor main class
-       break;;
     l) eval GREMLIN_LOG_LEVEL=\$$OPTIND
        OPTIND="$(( $OPTIND + 1 ))"
        if [ "$GREMLIN_LOG_LEVEL" = "TRACE" -o \
@@ -92,22 +85,18 @@ while getopts "elv" opt; do
 	   SCRIPT_DEBUG=y
        fi
        ;;
-    v) MAIN_CLASS=org.apache.tinkerpop.gremlin.util.Gremlin
     esac
 done
 
-# Remove processed options from $@. Anything after -e is preserved by the break;; in the case
-shift $(( $OPTIND - 1 ))
-
 JAVA_OPTIONS="${JAVA_OPTIONS} -Dtinkerpop.ext=${USER_EXT_DIR:-${SYSTEM_EXT_DIR}} -Dlog4j.configuration=conf/log4j-console.properties -Dgremlin.log4j.level=$GREMLIN_LOG_LEVEL"
 JAVA_OPTIONS=$(awk -v RS=' ' '!/^$/ {if (!x[$0]++) print}' <<< "${JAVA_OPTIONS}" | grep -v '^$' | paste -sd ' ' -)
 
 if [ -n "$SCRIPT_DEBUG" ]; then
+    # in debug mode enable debugging of :install command
+    JAVA_OPTIONS="${JAVA_OPTIONS} -Divy.message.logger.level=4 -Dgroovy.grape.report.downloads=true"
     echo "CLASSPATH: $CLASSPATH"
     set -x
 fi
 
-# include the following in $JAVA_OPTIONS "-Divy.message.logger.level=4 -Dgroovy.grape.report.downloads=true" to debug :install
-
 # Start the JVM, execute the application, and return its exit code
-exec $JAVA $JAVA_OPTIONS $MAIN_CLASS "$@"
+exec $JAVA $JAVA_OPTIONS org.apache.tinkerpop.gremlin.console.Console "$@"

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b6853f05/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
----------------------------------------------------------------------
diff --git a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
index a13e785..a35c44a 100644
--- a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
+++ b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
@@ -18,11 +18,18 @@
  */
 package org.apache.tinkerpop.gremlin.console
 
-import org.apache.tinkerpop.gremlin.console.commands.*
+import org.apache.commons.cli.Option
+import org.apache.tinkerpop.gremlin.console.commands.GremlinSetCommand
+import org.apache.tinkerpop.gremlin.console.commands.InstallCommand
+import org.apache.tinkerpop.gremlin.console.commands.PluginCommand
+import org.apache.tinkerpop.gremlin.console.commands.RemoteCommand
+import org.apache.tinkerpop.gremlin.console.commands.SubmitCommand
+import org.apache.tinkerpop.gremlin.console.commands.UninstallCommand
 import org.apache.tinkerpop.gremlin.console.plugin.PluggedIn
 import org.apache.tinkerpop.gremlin.groovy.loaders.GremlinLoader
 import org.apache.tinkerpop.gremlin.groovy.plugin.GremlinPlugin
 import jline.console.history.FileHistory
+import org.apache.tinkerpop.gremlin.util.Gremlin
 import org.apache.tinkerpop.gremlin.util.iterator.ArrayIterator
 import org.codehaus.groovy.tools.shell.AnsiDetector
 import org.codehaus.groovy.tools.shell.ExitNotification
@@ -30,6 +37,7 @@ import org.codehaus.groovy.tools.shell.Groovysh
 import org.codehaus.groovy.tools.shell.IO
 import org.codehaus.groovy.tools.shell.InteractiveShellRunner
 import org.codehaus.groovy.tools.shell.commands.SetCommand
+import org.codehaus.groovy.tools.shell.util.HelpFormatter
 import org.codehaus.groovy.tools.shell.util.Preferences
 import org.fusesource.jansi.Ansi
 import org.fusesource.jansi.AnsiConsole
@@ -67,15 +75,28 @@ class Console {
 
     private Iterator tempIterator = Collections.emptyIterator()
 
-    private final IO io = new IO(System.in, System.out, System.err)
+    private final IO io
     private final Groovysh groovy
+    private final boolean interactive
 
-
+    /**
+     * @deprecated As of release 3.2.1-incubating.
+     */
+    @Deprecated
     public Console(final String initScriptFile) {
-        io.out.println()
-        io.out.println("         \\,,,/")
-        io.out.println("         (o o)")
-        io.out.println("-----oOOo-(3)-oOOo-----")
+        this(new IO(System.in, System.out, System.err), initScriptFile.size() != null ? [initScriptFile] : null, true)
+    }
+
+    public Console(final IO io, final List<String> scriptAndArgs, final boolean interactive) {
+        this.io = io
+        this.interactive = interactive
+
+        if (!io.quiet) {
+            io.out.println()
+            io.out.println("         \\,,,/")
+            io.out.println("         (o o)")
+            io.out.println("-----oOOo-(3)-oOOo-----")
+        }
 
         maxIteration = Integer.parseInt(Preferences.get(PREFERENCE_ITERATION_MAX, Integer.toString(DEFAULT_ITERATION_MAX)))
         Preferences.addChangeListener(new PreferenceChangeListener() {
@@ -128,7 +149,9 @@ class Console {
 
                 if (activePlugins.contains(plugin.class.name)) {
                     pluggedIn.activate()
-                    io.out.println("plugin activated: " + plugin.getName())
+
+                    if (!io.quiet)
+                        io.out.println("plugin activated: " + plugin.getName())
                 }
             }
         }
@@ -137,13 +160,14 @@ class Console {
         // deactivated, and are thus hanging about
         mediator.writePluginState()
 
-        // start iterating results to show as output
-        showShellEvaluationOutput(true)
-
         try {
             // if the init script contains :x command it will throw an ExitNotification so init script execution
             // needs to appear in the try/catch
-            if (initScriptFile != null) initializeShellWithScript(initScriptFile)
+            if (scriptAndArgs != null && scriptAndArgs.size() > 0) executeInShell(scriptAndArgs)
+
+            // start iterating results to show as output
+            showShellEvaluationOutput(true)
+
             runner.run()
         } catch (ExitNotification ignored) {
             // occurs on exit
@@ -167,7 +191,7 @@ class Console {
             groovy.setResultHook(handleResultShowNothing)
     }
 
-    private def handlePrompt = { STANDARD_INPUT_PROMPT }
+    private def handlePrompt = { interactive ? STANDARD_INPUT_PROMPT : "" }
 
     private def handleResultShowNothing = { args -> null }
 
@@ -252,21 +276,28 @@ class Console {
                     io.err.println(e)
                 }
 
-                io.err.print("Display stack trace? [yN] ")
-                io.err.flush()
-                String line = new BufferedReader(io.in).readLine()
-                if (null == line)
-                    line = ""
-                io.err.print(line.trim())
-                io.err.println()
-                if (line.trim().equals("y") || line.trim().equals("Y")) {
+                if (interactive) {
+                    io.err.print("Display stack trace? [yN] ")
+                    io.err.flush()
+                    String line = new BufferedReader(io.in).readLine()
+                    if (null == line)
+                        line = ""
+                    io.err.print(line.trim())
+                    io.err.println()
+                    if (line.trim().equals("y") || line.trim().equals("Y")) {
+                        e.printStackTrace(io.err)
+                    }
+                } else {
                     e.printStackTrace(io.err)
+                    System.exit(1)
                 }
             } catch (Exception ignored) {
                 io.err.println("An undefined error has occurred: " + err)
+                if (!interactive) System.exit(1)
             }
         } else {
             io.err.println("An undefined error has occurred: " + err.toString())
+            if (!interactive) System.exit(1)
         }
 
         return null
@@ -284,27 +315,91 @@ class Console {
         return STANDARD_RESULT_PROMPT
     }
 
-    private void initializeShellWithScript(final String initScriptFile) {
+    private void executeInShell(final List<String> scriptAndArgs) {
+        final String scriptFile = scriptAndArgs[0]
         try {
-            final File file = new File(initScriptFile)
-            file.eachLine { line ->
+            // check if this script comes with arguments. if so then set them up in an "args" bundle
+            if (scriptAndArgs.size() > 1) {
+                List<String> args = scriptAndArgs.subList(1, scriptAndArgs.size())
+                groovy.execute("args = [\"" + args.join('\",\"') + "\"]")
+            }
+
+            final File file = new File(scriptFile)
+            int lineNumber = 0
+            def lines = file.readLines()
+            for (String line : lines) {
                 try {
+                    lineNumber++
                     groovy.execute(line)
                 } catch (Exception ex) {
-                    io.err.println("Bad line in Gremlin initialization file at [$line] - ${ex.message}")
-                    System.exit(1)
+                    io.err.println("Invalid line in $scriptFile at [$lineNumber: $line] - ${ex.message}")
+                    if (interactive)
+                        break
+                    else
+                        System.exit(1)
                 }
             }
+
+            if (!interactive) System.exit(0)
         } catch (FileNotFoundException ignored) {
-            io.err.println("Gremlin initialization file not found at [$initScriptFile].")
-            System.exit(1)
+            io.err.println("Gremlin file not found at [$scriptFile].")
+            if (!interactive) System.exit(1)
         } catch (Exception ex) {
-            io.err.println("Error starting Gremlin with initialization script at [$initScriptFile] - ${ex.message}")
-            System.exit(1)
+            io.err.println("Failure processing Gremlin script [$scriptFile] - ${ex.message}")
+            if (!interactive) System.exit(1)
         }
     }
 
     public static void main(final String[] args) {
-        new Console(args.length == 1 ? args[0] : null)
+        // need to do some up front processing to try to support "bin/gremlin.sh init.groovy" until this deprecated
+        // feature can be removed. ultimately this should be removed when a breaking change can go in
+        IO io = new IO(System.in, System.out, System.err)
+        if (args.length == 1 && !args[0].startsWith("-"))
+            new Console(io, [args[0]], true)
+
+        final CliBuilder cli = new CliBuilder(usage: 'gremlin.sh [options] [...]', formatter: new HelpFormatter(), stopAtNonOption: false)
+
+        // note that the inclusion of -l is really a setting handled by gremlin.sh and not by Console class itself.
+        // it is mainly listed here for informational purposes when the user starts things up with -h
+        cli.with {
+            h(longOpt: 'help', "Display this help message")
+            v(longOpt: 'version', "Display the version")
+            l("Set the logging level of components that use standard logging output independent of the Console")
+            V(longOpt: 'verbose', "Enable verbose Console output")
+            Q(longOpt: 'quiet', "Suppress superfluous Console output")
+            D(longOpt: 'debug', "Enabled debug Console output")
+            i(longOpt: 'interactive', argName: "SCRIPT ARG1 ARG2 ...", args: Option.UNLIMITED_VALUES, valueSeparator: ' ' as char, "Execute the specified script and leave the console open on completion")
+            e(longOpt: 'execute', argName: "SCRIPT ARG1 ARG2 ...", args: Option.UNLIMITED_VALUES, valueSeparator: ' ' as char, "Execute the specified script (SCRIPT ARG1 ARG2 ...) and close the console on completion")
+        }
+        OptionAccessor options = cli.parse(args)
+
+        if (options == null) {
+            // CliBuilder prints error, but does not exit
+            System.exit(22) // Invalid Args
+        }
+
+        if (options.h) {
+            cli.usage()
+            System.exit(0)
+        }
+
+        if (options.v) {
+            println("gremlin " + Gremlin.version())
+            System.exit(0)
+        }
+
+        if (options.V) io.verbosity = IO.Verbosity.VERBOSE
+        if (options.D) io.verbosity = IO.Verbosity.DEBUG
+        if (options.Q) io.verbosity = IO.Verbosity.QUIET
+
+        if (options.i && options.e) {
+            println("-i and -e options are mutually exclusive - provide one or the other")
+            System.exit(0)
+        }
+
+        List<String> scriptAndArgs = options.e ?
+                (options.es != null && options.es ? options.es : null) :
+                (options.is != null && options.is ? options.is : null)
+        new Console(io, scriptAndArgs, !options.e)
     }
 }


[11/50] [abbrv] incubator-tinkerpop git commit: Prevented error on use of :x in gremlin console init script.

Posted by sp...@apache.org.
Prevented error on use of :x in gremlin console init script.

A simple fix - the init script execution just needed to occur inside an existing try/catch block where normal script execution occurred. CTR


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/5f9d2f91
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/5f9d2f91
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/5f9d2f91

Branch: refs/heads/TINKERPOP-946
Commit: 5f9d2f9140fe32ce090ba774a09c7fb49dc74ac5
Parents: f23def3
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Apr 27 07:56:16 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Apr 27 07:56:16 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                                               | 1 +
 .../groovy/org/apache/tinkerpop/gremlin/console/Console.groovy   | 4 +++-
 2 files changed, 4 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5f9d2f91/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index d6ef48b..422eb47 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,7 @@ image::https://raw.githubusercontent.com/apache/incubator-tinkerpop/master/docs/
 TinkerPop 3.1.3 (NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+* Fixed bug where use of `:x` in a Gremlin Console initialization script would generate a stack trace.
 * Added configuration options to Gremlin Driver and Server to override the SSL configuration with an `SslContext`.
 * Added driver configuration settings for SSL: `keyCertChainFile`, `keyFile` and `keyPassword`.
 * Fixed bug where transaction managed sessions were not properly rolling back transactions for exceptions encountered during script evaluation.

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5f9d2f91/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
----------------------------------------------------------------------
diff --git a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
index 66b8b0e..a13e785 100644
--- a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
+++ b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
@@ -139,9 +139,11 @@ class Console {
 
         // start iterating results to show as output
         showShellEvaluationOutput(true)
-        if (initScriptFile != null) initializeShellWithScript(initScriptFile)
 
         try {
+            // if the init script contains :x command it will throw an ExitNotification so init script execution
+            // needs to appear in the try/catch
+            if (initScriptFile != null) initializeShellWithScript(initScriptFile)
             runner.run()
         } catch (ExitNotification ignored) {
             // occurs on exit


[23/50] [abbrv] incubator-tinkerpop git commit: Updated changelog.

Posted by sp...@apache.org.
Updated changelog.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/3ce732a3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/3ce732a3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/3ce732a3

Branch: refs/heads/TINKERPOP-946
Commit: 3ce732a3e7113ea707dc39755c2fa2f06a5682b3
Parents: 1ed7043
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Apr 28 14:08:44 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Apr 28 14:08:44 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                                             | 6 ++++++
 .../groovy/org/apache/tinkerpop/gremlin/console/Console.groovy | 2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/3ce732a3/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 6eb53da..6e3a1d5 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,12 @@ image::https://raw.githubusercontent.com/apache/incubator-tinkerpop/master/docs/
 TinkerPop 3.2.1 (NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+* Added support for interactive (`-i`) and execute (`-e`) modes for Gremlin Console.
+* Displayed line numbers for script execution failures of `-e` and `-i`.
+* Improved messaging around script execution errors in Gremlin Console.
+* Added "help" support to Gremlin Console with the `-h` flag.
+* Added options to better control verbosity of Gremlin Console output with `-Q`, `-V` and `-D`.
+* Deprecated the `ScriptExecutor` - the `-e` option to `gremlin.sh` is now handled by `Console`.
 * Added a Gremlin language variant tutorial teaching people how to embed Gremlin in a host programming language.
 
 [[release-3.2.0-incubating]]

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/3ce732a3/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
----------------------------------------------------------------------
diff --git a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
index 21ebc64..6e68d05 100644
--- a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
+++ b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
@@ -405,4 +405,4 @@ class Console {
                 (options.is != null && options.is ? options.is : null)
         new Console(io, scriptAndArgs, !options.e)
     }
-}
+}
\ No newline at end of file


[35/50] [abbrv] incubator-tinkerpop git commit: Updated CHANGELOG.

Posted by sp...@apache.org.
Updated CHANGELOG.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/9a948720
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/9a948720
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/9a948720

Branch: refs/heads/TINKERPOP-946
Commit: 9a948720e70bee953c50ad6e9c613943a5a7051b
Parents: 7427ae1
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Mon May 2 08:23:17 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Mon May 2 08:23:17 2016 -0600

----------------------------------------------------------------------
 CHANGELOG.asciidoc | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9a948720/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 1848fdf..4b282de 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,7 @@ image::https://raw.githubusercontent.com/apache/incubator-tinkerpop/master/docs/
 TinkerPop 3.1.3 (NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+* Fixed a self-loop bug in `StarGraph`.
 * Added configuration option for disabling `:remote` timeout with `:remote config timeout none`.
 * Added `init-tp-spark.sh` to Gremlin Console binary distribution.
 * Fixed bug where use of `:x` in a Gremlin Console initialization script would generate a stack trace.


[08/50] [abbrv] incubator-tinkerpop git commit: This closes #265

Posted by sp...@apache.org.
This closes #265


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/39f611c6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/39f611c6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/39f611c6

Branch: refs/heads/TINKERPOP-946
Commit: 39f611c6b2ef9141c77d3758c21c22a5afeeae89
Parents: e7b3267
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Apr 25 07:04:41 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Apr 25 07:04:41 2016 -0400

----------------------------------------------------------------------

----------------------------------------------------------------------



[41/50] [abbrv] incubator-tinkerpop git commit: Merge branch 'tp31'

Posted by sp...@apache.org.
Merge branch 'tp31'


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/899650bb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/899650bb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/899650bb

Branch: refs/heads/TINKERPOP-946
Commit: 899650bb52864bae7d837460446ab6e12ea63f63
Parents: 64b09df 383a7a2
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Tue May 3 12:22:17 2016 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Tue May 3 12:22:17 2016 +0200

----------------------------------------------------------------------
 .dockerignore | 1 -
 1 file changed, 1 deletion(-)
----------------------------------------------------------------------



[02/50] [abbrv] incubator-tinkerpop git commit: syncd with master

Posted by sp...@apache.org.
syncd with master


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/cbf6cc19
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/cbf6cc19
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/cbf6cc19

Branch: refs/heads/TINKERPOP-946
Commit: cbf6cc19321fd3375c5d910a9454ab75e722214c
Parents: e7b3267 b66d736
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Apr 21 07:17:05 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Apr 21 07:17:05 2016 -0600

----------------------------------------------------------------------
 .../gremlin-language-variants/index.asciidoc    |  666 ++
 docs/static/images/jython-logo.png              |  Bin 0 -> 15721 bytes
 docs/static/images/language-drivers.png         |  Bin 0 -> 124333 bytes
 docs/static/images/language-variants.png        |  Bin 0 -> 157258 bytes
 docs/static/images/tinkerpop3.graffle           | 8124 +++++++++++++++++-
 docs/static/resources/gremlin-jython.py         |  718 ++
 docs/static/resources/gremlin-python.py         |  743 ++
 pom.xml                                         |   23 +
 8 files changed, 10249 insertions(+), 25 deletions(-)
----------------------------------------------------------------------



[16/50] [abbrv] incubator-tinkerpop git commit: This closes #244

Posted by sp...@apache.org.
This closes #244


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/4073be36
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/4073be36
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/4073be36

Branch: refs/heads/TINKERPOP-946
Commit: 4073be369d57ea099ed9ec4acb224041873b049a
Parents: a950d95
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Apr 27 13:57:36 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Apr 27 13:57:36 2016 -0400

----------------------------------------------------------------------

----------------------------------------------------------------------



[46/50] [abbrv] incubator-tinkerpop git commit: Removed redundant interrupt checks.

Posted by sp...@apache.org.
Removed redundant interrupt checks.

Interruption checks in AbstractStep should be enough to cover all of these checks.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/ca93b274
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/ca93b274
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/ca93b274

Branch: refs/heads/TINKERPOP-946
Commit: ca93b274ec14d8f903f51d07bf33575b94062139
Parents: ac55d3d
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue May 3 07:36:51 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Tue May 3 07:58:20 2016 -0400

----------------------------------------------------------------------
 .../tinkerpop/gremlin/process/traversal/step/branch/LocalStep.java | 2 --
 .../gremlin/process/traversal/step/filter/FilterStep.java          | 2 --
 .../tinkerpop/gremlin/process/traversal/step/map/FlatMapStep.java  | 2 --
 .../tinkerpop/gremlin/process/traversal/step/map/GraphStep.java    | 2 --
 .../tinkerpop/gremlin/process/traversal/step/map/MatchStep.java    | 2 --
 .../gremlin/process/traversal/step/map/NoOpBarrierStep.java        | 2 --
 .../gremlin/process/traversal/step/util/ComputerAwareStep.java     | 2 --
 7 files changed, 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ca93b274/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/LocalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/LocalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/LocalStep.java
index e0a6520..e2affd4 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/LocalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/LocalStep.java
@@ -24,7 +24,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.process.traversal.util.FastNoSuchElementException;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalInterruptedException;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 
 import java.util.Collections;
@@ -62,7 +61,6 @@ public final class LocalStep<S, E> extends AbstractStep<S, E> implements Travers
             this.localTraversal.addStart(this.starts.next());
         }
         while (true) {
-            if(Thread.interrupted()) throw new TraversalInterruptedException();
             if (this.localTraversal.hasNext())
                 return this.localTraversal.getEndStep().next();
             else if (this.starts.hasNext()) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ca93b274/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/FilterStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/FilterStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/FilterStep.java
index d264ec7..e07d951 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/FilterStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/FilterStep.java
@@ -21,7 +21,6 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.filter;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalInterruptedException;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -35,7 +34,6 @@ public abstract class FilterStep<S> extends AbstractStep<S, S> {
     @Override
     protected Traverser.Admin<S> processNextStart() {
         while (true) {
-            if(Thread.interrupted()) throw new TraversalInterruptedException();
             final Traverser.Admin<S> traverser = this.starts.next();
             if (this.filter(traverser))
                 return traverser;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ca93b274/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/FlatMapStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/FlatMapStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/FlatMapStep.java
index ea66696..3d7dc24 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/FlatMapStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/FlatMapStep.java
@@ -21,7 +21,6 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.map;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalInterruptedException;
 import org.apache.tinkerpop.gremlin.util.iterator.EmptyIterator;
 
 import java.util.Iterator;
@@ -41,7 +40,6 @@ public abstract class FlatMapStep<S, E> extends AbstractStep<S, E> {
     @Override
     protected Traverser.Admin<E> processNextStart() {
         while (true) {
-            if(Thread.interrupted()) throw new TraversalInterruptedException();
             if (this.iterator.hasNext()) {
                 return this.head.split(this.iterator.next(), this);
             } else {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ca93b274/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphStep.java
index ea72fb3..3f169b0 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphStep.java
@@ -28,7 +28,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.GraphComputing;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.HasContainer;
 import org.apache.tinkerpop.gremlin.process.traversal.util.FastNoSuchElementException;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalInterruptedException;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Element;
 import org.apache.tinkerpop.gremlin.structure.T;
@@ -126,7 +125,6 @@ public class GraphStep<S, E extends Element> extends AbstractStep<S, E> implemen
     @Override
     protected Traverser.Admin<E> processNextStart() {
         while (true) {
-            if(Thread.interrupted()) throw new TraversalInterruptedException();
             if (this.iterator.hasNext()) {
                 return this.isStart ? this.getTraversal().getTraverserGenerator().generate(this.iterator.next(), (Step) this, 1l) : this.head.split(this.iterator.next(), this);
             } else {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ca93b274/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchStep.java
index 907764b..c6e3bbe 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchStep.java
@@ -31,7 +31,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.Connec
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalInterruptedException;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
 
@@ -447,7 +446,6 @@ public final class MatchStep<S, E> extends ComputerAwareStep<S, Map<String, E>>
         @Override
         protected Traverser.Admin<Object> processNextStart() throws NoSuchElementException {
             while (true) {
-                if(Thread.interrupted()) throw new TraversalInterruptedException();
                 final Traverser.Admin traverser = this.starts.next();
                 // no end label
                 if (null == this.matchKey) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ca93b274/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/NoOpBarrierStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/NoOpBarrierStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/NoOpBarrierStep.java
index cb2985b..bedf078 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/NoOpBarrierStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/NoOpBarrierStep.java
@@ -26,7 +26,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
 import org.apache.tinkerpop.gremlin.process.traversal.util.FastNoSuchElementException;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalInterruptedException;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 
 import java.util.Collections;
@@ -65,7 +64,6 @@ public final class NoOpBarrierStep<S> extends AbstractStep<S, S> implements Loca
     @Override
     public void processAllStarts() {
         while (this.starts.hasNext() && (this.maxBarrierSize == Integer.MAX_VALUE || this.barrier.size() < this.maxBarrierSize)) {
-            if(Thread.interrupted()) throw new TraversalInterruptedException();
             final Traverser.Admin<S> traverser = this.starts.next();
             traverser.setStepId(this.getNextStep().getId()); // when barrier is reloaded, the traversers should be at the next step
             this.barrier.add(traverser);

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ca93b274/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ComputerAwareStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ComputerAwareStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ComputerAwareStep.java
index 227ccf3..5acff58 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ComputerAwareStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ComputerAwareStep.java
@@ -21,7 +21,6 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.util;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.step.GraphComputing;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalInterruptedException;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 import org.apache.tinkerpop.gremlin.util.iterator.EmptyIterator;
 
@@ -42,7 +41,6 @@ public abstract class ComputerAwareStep<S, E> extends AbstractStep<S, E> impleme
     @Override
     protected Traverser.Admin<E> processNextStart() throws NoSuchElementException {
         while (true) {
-            if(Thread.interrupted()) throw new TraversalInterruptedException();
             if (this.previousIterator.hasNext())
                 return this.previousIterator.next();
             this.previousIterator = this.traverserStepIdAndLabelsSetByChild ? this.computerAlgorithm() : this.standardAlgorithm();


[17/50] [abbrv] incubator-tinkerpop git commit: minor update from a @spmallette recommendation.

Posted by sp...@apache.org.
minor update from a @spmallette recommendation.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/aa338c6e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/aa338c6e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/aa338c6e

Branch: refs/heads/TINKERPOP-946
Commit: aa338c6e27ab6ee61b4feb05dccb9d33eacb15e6
Parents: 0bf7156
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Apr 27 12:36:49 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Apr 27 12:36:49 2016 -0600

----------------------------------------------------------------------
 docs/src/tutorials/gremlin-language-variants/index.asciidoc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/aa338c6e/docs/src/tutorials/gremlin-language-variants/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/tutorials/gremlin-language-variants/index.asciidoc b/docs/src/tutorials/gremlin-language-variants/index.asciidoc
index 2098175..c10c51a 100644
--- a/docs/src/tutorials/gremlin-language-variants/index.asciidoc
+++ b/docs/src/tutorials/gremlin-language-variants/index.asciidoc
@@ -187,7 +187,7 @@ Gremlin-Jython and Gremlin-Python
 Using Jython and the JVM
 ~~~~~~~~~~~~~~~~~~~~~~~~
 
-image:jython-logo.png[width=200,float=left,link="http://www.jython.org/"] link:http://www.jython.org/[Jython] is a
+image:jython-logo.png[width=200,float=left,link="http://www.jython.org/"] link:http://www.jython.org/[Jython] provides a
 link:https://www.jcp.org/en/jsr/detail?id=223[JSR-223] `ScriptEngine` implementation that enables the evaluation of
 Python on the link:https://en.wikipedia.org/wiki/Java_virtual_machine[Java virtual machine]. In other words, Jython's
 virtual machine is not the standard link:https://wiki.python.org/moin/CPython[CPython] reference implementation


[06/50] [abbrv] incubator-tinkerpop git commit: sorry. another minor nothing. done for the day with this.

Posted by sp...@apache.org.
sorry. another minor nothing. done for the day with this.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/343a34bc
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/343a34bc
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/343a34bc

Branch: refs/heads/TINKERPOP-946
Commit: 343a34bc6a4bb07dc0e61604c811107f00530b33
Parents: cc66ba5
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Apr 21 09:41:39 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Apr 21 09:41:39 2016 -0600

----------------------------------------------------------------------
 docs/src/tutorials/gremlin-language-variants/index.asciidoc | 1 -
 1 file changed, 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/343a34bc/docs/src/tutorials/gremlin-language-variants/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/tutorials/gremlin-language-variants/index.asciidoc b/docs/src/tutorials/gremlin-language-variants/index.asciidoc
index dc384c2..4dc2aed 100644
--- a/docs/src/tutorials/gremlin-language-variants/index.asciidoc
+++ b/docs/src/tutorials/gremlin-language-variants/index.asciidoc
@@ -579,7 +579,6 @@ pythonClass.append(
   def __init__(self, traversalString, gremlinServerURI=None):
     self.traversalString = traversalString
     self.gremlinServerURI = gremlinServerURI
-    self.result = None
   def __repr__(self):
     return self.traversalString;
   def __getitem__(self,index):


[26/50] [abbrv] incubator-tinkerpop git commit: Fixed up sections for console interactive/execute modes.

Posted by sp...@apache.org.
Fixed up sections for console interactive/execute modes.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/0e513cbc
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/0e513cbc
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/0e513cbc

Branch: refs/heads/TINKERPOP-946
Commit: 0e513cbc47f0885a0484b194ce81d31218dec6dd
Parents: 620f478
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Apr 28 15:00:04 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Apr 28 15:00:04 2016 -0400

----------------------------------------------------------------------
 .../src/reference/gremlin-applications.asciidoc | 66 +++++++++++++++-----
 1 file changed, 51 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0e513cbc/docs/src/reference/gremlin-applications.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/gremlin-applications.asciidoc b/docs/src/reference/gremlin-applications.asciidoc
index ee05a01..cf6abaa 100644
--- a/docs/src/reference/gremlin-applications.asciidoc
+++ b/docs/src/reference/gremlin-applications.asciidoc
@@ -106,7 +106,7 @@ These plugins can only be deactivated.
 The Gremlin Console is loaded and ready for commands. Recall that the console hosts the Gremlin-Groovy language.
 Please review link:http://groovy.codehaus.org/[Groovy] for help on Groovy-related constructs. In short, Groovy is a
 superset of Java. What works in Java, works in Groovy. However, Groovy provides many shorthands to make it easier
-to interact with the Java API.  Moreoever, Gremlin provides many neat shorthands to make it easier to express paths
+to interact with the Java API.  Moreover, Gremlin provides many neat shorthands to make it easier to express paths
 through a property graph.
 
 [gremlin-groovy]
@@ -220,24 +220,22 @@ TIP: It is possible to manage plugin activation and deactivation by manually edi
 contains the class names of the "active" plugins.  It is also possible to clear dependencies added by `:install` by
 deleting them from the `ext` directory.
 
-Script Executor
-~~~~~~~~~~~~~~~
+[[execution-mode]]
+Execution Mode
+~~~~~~~~~~~~~~
 
-For automated tasks and batch executions of Gremlin, it can be useful to execute Gremlin scripts from the command
-line.  Consider the following file named `gremlin.groovy`:
+For automated tasks and batch executions of Gremlin, it can be useful to execute Gremlin scripts in "execution" mode
+from the command line.  Consider the following file named `gremlin.groovy`:
 
 [source,groovy]
 ----
-import org.apache.tinkerpop.gremlin.tinkergraph.structure.*
 graph = TinkerFactory.createModern()
 g = graph.traversal()
 g.V().each { println it }
 ----
 
-This script creates the toy graph and then iterates through all its vertices printing each to the system out.  Note
-that under this approach, "imports" need to be explicitly defined (except for "core" TinkerPop classes).  In addition,
-plugins and other dependencies should already be "installed" via console commands which cannot be used with this mode
-of execution.  To execute this script from the command line, `gremlin.sh` has the `-e` option used as follows:
+This script creates the toy graph and then iterates through all its vertices printing each to the system out.  To
+execute this script from the command line, `gremlin.sh` has the `-e` option used as follows:
 
 [source,bash]
 ----
@@ -257,7 +255,6 @@ to system out:
 
 [source,groovy]
 ----
-import org.apache.tinkerpop.gremlin.tinkergraph.structure.*
 graph = TinkerFactory.createModern()
 g = graph.traversal()
 g.V().has('name',args[0]).each { println it }
@@ -273,10 +270,49 @@ $ bin/gremlin.sh -e gremlin.groovy vadas
 v[2]
 ----
 
-NOTE: The `ScriptExecutor` is for Gremlin Groovy scripts only.  It is not possible to include Console plugin commands
-such as `:remote` or `:>` when using `-e` in these scripts. That does not mean that it is impossible to script such
-commands, it just means that they need to be scripted manually.  For example, instead of trying to use the `:remote`
-command, manually construct a <<connecting-via-java,Gremlin Driver>> `Client` and submit scripts from there.
+[[interactive-mode]]
+Interactive Mode
+~~~~~~~~~~~~~~~~
+
+The Gremlin Console can be started in an "interactive" mode. Interactive mode is like <<execution-mode, execution mode>>
+but the console will not exit at the completion of the script, even if the script completes unsuccessfully. In such a
+case, it will simply stop processing on the line that of the script that failed. In this way the state of the console
+is such that a user could examine the state of things up to the point of failure which might make the script easier to
+debug.
+
+In addition to debugging, interactive mode is a helpful way for users to initialize their console environment to
+avoid otherwise repetitive typing. For example, a user who spends a lot of time working with the TinkerPop "modern"
+graph might create a script called `init.groovy` like:
+
+[source,groovy]
+----
+graph = TinkerFactory.createModern()
+g = graph.traversal()
+----
+
+and then start Gremlin Console as follows:
+
+[source,text]
+----
+$ bin/gremlin.sh -i init.groovy
+
+         \,,,/
+         (o o)
+-----oOOo-(3)-oOOo-----
+plugin activated: tinkerpop.server
+plugin activated: tinkerpop.utilities
+plugin activated: tinkerpop.tinkergraph
+gremlin> g.V()
+==>v[1]
+==>v[2]
+==>v[3]
+==>v[4]
+==>v[5]
+==>v[6]
+----
+
+Note that the user can now reference `g` (and `graph` for that matter) at startup without having to directly type that
+variable initialization code into the console.
 
 [[gremlin-server]]
 Gremlin Server


[24/50] [abbrv] incubator-tinkerpop git commit: Allow override of verbosity to quiet when using -e.

Posted by sp...@apache.org.
Allow override of verbosity to quiet when using -e.

Only override if the verbosity is not explicitly set.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/05be605c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/05be605c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/05be605c

Branch: refs/heads/TINKERPOP-946
Commit: 05be605cd3df603772b15aad751310ea2d4b4b89
Parents: 3ce732a
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Apr 28 14:39:21 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Apr 28 14:39:21 2016 -0400

----------------------------------------------------------------------
 .../groovy/org/apache/tinkerpop/gremlin/console/Console.groovy   | 4 ++++
 1 file changed, 4 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/05be605c/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
----------------------------------------------------------------------
diff --git a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
index 6e68d05..7ab8b57 100644
--- a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
+++ b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Console.groovy
@@ -395,6 +395,10 @@ class Console {
         if (options.D) io.verbosity = IO.Verbosity.DEBUG
         if (options.Q) io.verbosity = IO.Verbosity.QUIET
 
+        // override verbosity if not explicitly set and -e is used
+        if (options.e && (!options.V && !options.D && !options.Q))
+            io.verbosity = IO.Verbosity.QUIET
+
         if (options.i && options.e) {
             println("-i and -e options are mutually exclusive - provide one or the other")
             System.exit(0)


[40/50] [abbrv] incubator-tinkerpop git commit: Merge branch 'tp31' of https://git-wip-us.apache.org/repos/asf/incubator-tinkerpop into tp31

Posted by sp...@apache.org.
Merge branch 'tp31' of https://git-wip-us.apache.org/repos/asf/incubator-tinkerpop into tp31


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/383a7a27
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/383a7a27
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/383a7a27

Branch: refs/heads/TINKERPOP-946
Commit: 383a7a2742f5fa98f61ad95963b19a6cf7eb9026
Parents: 00b8ea2 9a94872
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Tue May 3 12:21:47 2016 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Tue May 3 12:21:47 2016 +0200

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  2 +
 .../src/reference/gremlin-applications.asciidoc |  4 +-
 .../upgrade/release-3.1.x-incubating.asciidoc   | 25 ++++++
 .../groovy/plugin/DriverRemoteAcceptor.java     | 32 ++++++--
 .../groovy/plugin/DriverRemoteAcceptorTest.java | 23 ++++++
 .../gremlin/structure/util/star/StarGraph.java  | 19 +++--
 .../structure/util/star/StarGraphTest.java      | 86 ++++++++++++++++++++
 7 files changed, 175 insertions(+), 16 deletions(-)
----------------------------------------------------------------------



[45/50] [abbrv] incubator-tinkerpop git commit: Added support for Traversal interruption.

Posted by sp...@apache.org.
Added support for Traversal interruption.

Check for Thread.interrupted() in loops within steps and throw an unchecked TraversalInterruptedException. Would be better to throw InterruptedException but that would involve a breaking change which would be nice to avoid.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/fca7b11a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/fca7b11a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/fca7b11a

Branch: refs/heads/TINKERPOP-946
Commit: fca7b11ab69000dd7e9c8f25ab2daee76f2c1240
Parents: 08d54c6
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Apr 18 08:50:33 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Tue May 3 07:58:19 2016 -0400

----------------------------------------------------------------------
 .../benchmark/util/AbstractBenchmarkBase.java   |  2 +-
 .../traversal/step/map/ComputerResultStep.java  |  2 +
 .../traversal/step/map/VertexProgramStep.java   |  2 +
 .../traversal/step/branch/LocalStep.java        |  2 +
 .../traversal/step/filter/FilterStep.java       |  2 +
 .../process/traversal/step/map/FlatMapStep.java |  2 +
 .../process/traversal/step/map/GraphStep.java   |  2 +
 .../process/traversal/step/map/MatchStep.java   |  2 +
 .../traversal/step/map/NoOpBarrierStep.java     |  2 +
 .../traversal/step/util/AbstractStep.java       |  3 ++
 .../traversal/step/util/ComputerAwareStep.java  |  2 +
 .../util/TraversalInterruptedException.java     |  9 +++++
 .../traversal/util/DefaultTraversalTest.java    | 41 ++++++++++++++++++++
 13 files changed, 72 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/fca7b11a/gremlin-benchmark/src/main/java/org/apache/tinkerpop/benchmark/util/AbstractBenchmarkBase.java
----------------------------------------------------------------------
diff --git a/gremlin-benchmark/src/main/java/org/apache/tinkerpop/benchmark/util/AbstractBenchmarkBase.java b/gremlin-benchmark/src/main/java/org/apache/tinkerpop/benchmark/util/AbstractBenchmarkBase.java
index 5b73045..2f8bb66 100644
--- a/gremlin-benchmark/src/main/java/org/apache/tinkerpop/benchmark/util/AbstractBenchmarkBase.java
+++ b/gremlin-benchmark/src/main/java/org/apache/tinkerpop/benchmark/util/AbstractBenchmarkBase.java
@@ -50,7 +50,7 @@ public abstract class AbstractBenchmarkBase {
     protected static final String DEFAULT_BENCHMARK_DIRECTORY = "./benchmarks/";
 
     protected static final String[] JVM_ARGS = {
-            "-server", "-Xms1g", "-Xmx1g"
+            "-server", "-Xms2g", "-Xmx2g"
     };
 
     @Test

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/fca7b11a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
index b5fd8e8..c8b56a2 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
@@ -25,6 +25,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalInterruptedException;
 import org.apache.tinkerpop.gremlin.structure.Element;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.Property;
@@ -62,6 +63,7 @@ public final class ComputerResultStep<S> extends AbstractStep<ComputerResult, S>
     @Override
     protected Traverser.Admin<S> processNextStart() throws NoSuchElementException {
         while (true) {
+            if(Thread.interrupted()) throw new TraversalInterruptedException();
             if (this.currentIterator.hasNext())
                 return this.currentIterator.next();
             else {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/fca7b11a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
index f9e2936..ab095f2 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
@@ -31,6 +31,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.ProfileStep;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalInterruptedException;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 
 import java.util.NoSuchElementException;
@@ -83,6 +84,7 @@ public abstract class VertexProgramStep extends AbstractStep<ComputerResult, Com
     protected boolean previousTraversalVertexProgram() {
         Step<?, ?> currentStep = this;
         while (!(currentStep instanceof EmptyStep)) {
+            if(Thread.interrupted()) throw new TraversalInterruptedException();
             if (currentStep instanceof TraversalVertexProgramStep)
                 return true;
             currentStep = currentStep.getPreviousStep();

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/fca7b11a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/LocalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/LocalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/LocalStep.java
index e2affd4..e0a6520 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/LocalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/LocalStep.java
@@ -24,6 +24,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.process.traversal.util.FastNoSuchElementException;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalInterruptedException;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 
 import java.util.Collections;
@@ -61,6 +62,7 @@ public final class LocalStep<S, E> extends AbstractStep<S, E> implements Travers
             this.localTraversal.addStart(this.starts.next());
         }
         while (true) {
+            if(Thread.interrupted()) throw new TraversalInterruptedException();
             if (this.localTraversal.hasNext())
                 return this.localTraversal.getEndStep().next();
             else if (this.starts.hasNext()) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/fca7b11a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/FilterStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/FilterStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/FilterStep.java
index e07d951..d264ec7 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/FilterStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/FilterStep.java
@@ -21,6 +21,7 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.filter;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalInterruptedException;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -34,6 +35,7 @@ public abstract class FilterStep<S> extends AbstractStep<S, S> {
     @Override
     protected Traverser.Admin<S> processNextStart() {
         while (true) {
+            if(Thread.interrupted()) throw new TraversalInterruptedException();
             final Traverser.Admin<S> traverser = this.starts.next();
             if (this.filter(traverser))
                 return traverser;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/fca7b11a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/FlatMapStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/FlatMapStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/FlatMapStep.java
index 3d7dc24..ea66696 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/FlatMapStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/FlatMapStep.java
@@ -21,6 +21,7 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.map;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalInterruptedException;
 import org.apache.tinkerpop.gremlin.util.iterator.EmptyIterator;
 
 import java.util.Iterator;
@@ -40,6 +41,7 @@ public abstract class FlatMapStep<S, E> extends AbstractStep<S, E> {
     @Override
     protected Traverser.Admin<E> processNextStart() {
         while (true) {
+            if(Thread.interrupted()) throw new TraversalInterruptedException();
             if (this.iterator.hasNext()) {
                 return this.head.split(this.iterator.next(), this);
             } else {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/fca7b11a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphStep.java
index 3f169b0..ea72fb3 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphStep.java
@@ -28,6 +28,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.GraphComputing;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.HasContainer;
 import org.apache.tinkerpop.gremlin.process.traversal.util.FastNoSuchElementException;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalInterruptedException;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Element;
 import org.apache.tinkerpop.gremlin.structure.T;
@@ -125,6 +126,7 @@ public class GraphStep<S, E extends Element> extends AbstractStep<S, E> implemen
     @Override
     protected Traverser.Admin<E> processNextStart() {
         while (true) {
+            if(Thread.interrupted()) throw new TraversalInterruptedException();
             if (this.iterator.hasNext()) {
                 return this.isStart ? this.getTraversal().getTraverserGenerator().generate(this.iterator.next(), (Step) this, 1l) : this.head.split(this.iterator.next(), this);
             } else {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/fca7b11a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchStep.java
index c6e3bbe..907764b 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchStep.java
@@ -31,6 +31,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.Connec
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalInterruptedException;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
 
@@ -446,6 +447,7 @@ public final class MatchStep<S, E> extends ComputerAwareStep<S, Map<String, E>>
         @Override
         protected Traverser.Admin<Object> processNextStart() throws NoSuchElementException {
             while (true) {
+                if(Thread.interrupted()) throw new TraversalInterruptedException();
                 final Traverser.Admin traverser = this.starts.next();
                 // no end label
                 if (null == this.matchKey) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/fca7b11a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/NoOpBarrierStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/NoOpBarrierStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/NoOpBarrierStep.java
index bedf078..cb2985b 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/NoOpBarrierStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/NoOpBarrierStep.java
@@ -26,6 +26,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
 import org.apache.tinkerpop.gremlin.process.traversal.util.FastNoSuchElementException;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalInterruptedException;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 
 import java.util.Collections;
@@ -64,6 +65,7 @@ public final class NoOpBarrierStep<S> extends AbstractStep<S, S> implements Loca
     @Override
     public void processAllStarts() {
         while (this.starts.hasNext() && (this.maxBarrierSize == Integer.MAX_VALUE || this.barrier.size() < this.maxBarrierSize)) {
+            if(Thread.interrupted()) throw new TraversalInterruptedException();
             final Traverser.Admin<S> traverser = this.starts.next();
             traverser.setStepId(this.getNextStep().getId()); // when barrier is reloaded, the traversers should be at the next step
             this.barrier.add(traverser);

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/fca7b11a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java
index 8ad847a..2f83e9e 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java
@@ -22,6 +22,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.Step;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.util.EmptyTraversal;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalInterruptedException;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 
 import java.util.Collections;
@@ -123,6 +124,7 @@ public abstract class AbstractStep<S, E> implements Step<S, E> {
             }
         } else {
             while (true) {
+                if(Thread.interrupted()) throw new TraversalInterruptedException();
                 final Traverser.Admin<E> traverser = this.processNextStart();
                 if (null != traverser.get() && 0 != traverser.bulk())
                     return this.prepareTraversalForNextStep(traverser);
@@ -137,6 +139,7 @@ public abstract class AbstractStep<S, E> implements Step<S, E> {
         else {
             try {
                 while (true) {
+                    if(Thread.interrupted()) throw new TraversalInterruptedException();
                     this.nextEnd = this.processNextStart();
                     if (null != this.nextEnd.get() && 0 != this.nextEnd.bulk())
                         return true;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/fca7b11a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ComputerAwareStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ComputerAwareStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ComputerAwareStep.java
index 5acff58..227ccf3 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ComputerAwareStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ComputerAwareStep.java
@@ -21,6 +21,7 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.util;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.step.GraphComputing;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalInterruptedException;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 import org.apache.tinkerpop.gremlin.util.iterator.EmptyIterator;
 
@@ -41,6 +42,7 @@ public abstract class ComputerAwareStep<S, E> extends AbstractStep<S, E> impleme
     @Override
     protected Traverser.Admin<E> processNextStart() throws NoSuchElementException {
         while (true) {
+            if(Thread.interrupted()) throw new TraversalInterruptedException();
             if (this.previousIterator.hasNext())
                 return this.previousIterator.next();
             this.previousIterator = this.traverserStepIdAndLabelsSetByChild ? this.computerAlgorithm() : this.standardAlgorithm();

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/fca7b11a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalInterruptedException.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalInterruptedException.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalInterruptedException.java
new file mode 100644
index 0000000..216a762
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalInterruptedException.java
@@ -0,0 +1,9 @@
+package org.apache.tinkerpop.gremlin.process.traversal.util;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+
+/**
+ * Thrown if a {@link Traversal} is interrupted during execution. This is an unchecked exception.
+ */
+public class TraversalInterruptedException extends RuntimeException {
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/fca7b11a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalTest.java
index d252ccf..c1a4c6b 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalTest.java
@@ -28,17 +28,29 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
 import org.apache.tinkerpop.gremlin.util.function.ConstantSupplier;
 import org.apache.tinkerpop.gremlin.util.function.HashSetSupplier;
+import org.hamcrest.CoreMatchers;
 import org.junit.Test;
 
 import java.util.Arrays;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.Supplier;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.is;
+import static org.hamcrest.number.OrderingComparison.greaterThan;
+import static org.hamcrest.number.OrderingComparison.lessThan;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -46,6 +58,35 @@ import static org.junit.Assert.assertTrue;
 public class DefaultTraversalTest {
 
     @Test
+    public void shouldRespectThreadInterruption() throws Exception {
+        final AtomicBoolean exceptionThrown = new AtomicBoolean(false);
+        final AtomicInteger counter = new AtomicInteger(0);
+        final CountDownLatch startedIterating = new CountDownLatch(100);
+        final List<Integer> l = IntStream.range(0, 1000000).boxed().collect(Collectors.toList());
+        final Thread t = new Thread(() -> {
+            try {
+                __.inject(l).unfold().sideEffect(i -> {
+                    startedIterating.countDown();
+                    counter.incrementAndGet();
+                }).iterate();
+                fail("Traversal should have been interrupted");
+            } catch (Exception ex) {
+                exceptionThrown.set(ex instanceof TraversalInterruptedException);
+            }
+        });
+
+        t.start();
+        startedIterating.await();
+        t.interrupt();
+        t.join();
+
+        // ensure that some but not all of the traversal was iterated and that the right exception was tossed
+        assertThat(counter.get(), greaterThan(0));
+        assertThat(counter.get(), lessThan(1000000));
+        assertThat(exceptionThrown.get(), CoreMatchers.is(true));
+    }
+
+    @Test
     public void shouldCloneTraversalCorrectly() {
         final DefaultGraphTraversal<?, ?> original = new DefaultGraphTraversal<>();
         original.out().groupCount("m").values("name").count();


[30/50] [abbrv] incubator-tinkerpop git commit: added Ketrinas Gremlin Language Variants image. Updated tutorial. --dryRun is solid. Publishing full docs now. CTR.

Posted by sp...@apache.org.
added Ketrinas Gremlin Language Variants image. Updated tutorial. --dryRun is solid. Publishing full docs now. CTR.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/66a6ef49
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/66a6ef49
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/66a6ef49

Branch: refs/heads/TINKERPOP-946
Commit: 66a6ef49dbc823906c5d3ded44c0039533181ea9
Parents: e2ee81c
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Sun May 1 12:12:45 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Sun May 1 12:12:45 2016 -0600

----------------------------------------------------------------------
 .../gremlin-language-variants/index.asciidoc      |   2 ++
 docs/static/images/gremlin-house-of-mirrors.png   | Bin 0 -> 786997 bytes
 2 files changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/66a6ef49/docs/src/tutorials/gremlin-language-variants/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/tutorials/gremlin-language-variants/index.asciidoc b/docs/src/tutorials/gremlin-language-variants/index.asciidoc
index c10c51a..231ec67 100644
--- a/docs/src/tutorials/gremlin-language-variants/index.asciidoc
+++ b/docs/src/tutorials/gremlin-language-variants/index.asciidoc
@@ -31,6 +31,8 @@ have historically been. For instance, with Gremlin-Java, the developer is able t
 graph database queries at the same level of abstraction -- both written in Java. A simple example is presented below
 where the `MyApplication` Java class contains both application-level and database-level code written in Java.
 
+image::gremlin-house-of-mirrors.png[width=1024]
+
 WARNING: This is an advanced tutorial intended for experts knowledgeable in Gremlin in particular and TinkerPop in general.
 Moreover, the audience should understand advanced programming language concepts such as reflection, meta-programming,
 source code generation, and virtual machines.

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/66a6ef49/docs/static/images/gremlin-house-of-mirrors.png
----------------------------------------------------------------------
diff --git a/docs/static/images/gremlin-house-of-mirrors.png b/docs/static/images/gremlin-house-of-mirrors.png
new file mode 100644
index 0000000..efe854c
Binary files /dev/null and b/docs/static/images/gremlin-house-of-mirrors.png differ


[49/50] [abbrv] incubator-tinkerpop git commit: OLAP Traversals now support traversal interruption.

Posted by sp...@apache.org.
OLAP Traversals now support traversal interruption.

Implemented for SparkGraphComputer and TinkerGraphComputer.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/dfa278d1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/dfa278d1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/dfa278d1

Branch: refs/heads/TINKERPOP-946
Commit: dfa278d1c36a3705df8d331053be26aa0de14b7a
Parents: 608ce2b
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Apr 22 15:26:35 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Tue May 3 07:58:20 2016 -0400

----------------------------------------------------------------------
 .../traversal/step/map/VertexProgramStep.java   | 18 +++-
 gremlin-driver/pom.xml                          |  1 -
 .../gremlin/process/ProcessComputerSuite.java   |  4 +
 .../TraversalInterruptionComputerTest.java      | 97 ++++++++++++++++++++
 .../traversal/TraversalInterruptionTest.java    |  2 +-
 .../gremlin/hadoop/structure/HadoopGraph.java   |  5 +
 pom.xml                                         |  5 +
 .../process/computer/SparkGraphComputer.java    | 24 ++++-
 tinkergraph-gremlin/pom.xml                     |  4 +
 .../process/computer/TinkerGraphComputer.java   | 30 +++++-
 .../process/computer/TinkerWorkerPool.java      | 12 ++-
 11 files changed, 187 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/dfa278d1/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
index ab095f2..8fe7ed0 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/VertexProgramStep.java
@@ -36,9 +36,11 @@ import org.apache.tinkerpop.gremlin.structure.Graph;
 
 import java.util.NoSuchElementException;
 import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
+ * @author Stephen Mallette (http://stephen.genoprime.com)
  */
 public abstract class VertexProgramStep extends AbstractStep<ComputerResult, ComputerResult> implements VertexComputing {
 
@@ -52,21 +54,31 @@ public abstract class VertexProgramStep extends AbstractStep<ComputerResult, Com
 
     @Override
     protected Traverser.Admin<ComputerResult> processNextStart() throws NoSuchElementException {
+        Future<ComputerResult> future = null;
         try {
             if (this.first && this.getPreviousStep() instanceof EmptyStep) {
                 this.first = false;
                 final Graph graph = this.getTraversal().getGraph().get();
-                final ComputerResult result = this.generateComputer(graph).program(this.generateProgram(graph)).submit().get();
+                future = this.generateComputer(graph).program(this.generateProgram(graph)).submit();
+                final ComputerResult result = future.get();
                 this.processMemorySideEffects(result.memory());
                 return this.getTraversal().getTraverserGenerator().generate(result, this, 1l);
             } else {
                 final Traverser.Admin<ComputerResult> traverser = this.starts.next();
                 final Graph graph = traverser.get().graph();
-                final ComputerResult result = this.generateComputer(graph).program(this.generateProgram(graph)).submit().get();
+                future = this.generateComputer(graph).program(this.generateProgram(graph)).submit();
+                final ComputerResult result = future.get();
                 this.processMemorySideEffects(result.memory());
                 return traverser.split(result, this);
             }
-        } catch (final InterruptedException | ExecutionException e) {
+        } catch (InterruptedException ie) {
+            // the thread running the traversal took an interruption while waiting on the call the future.get().
+            // the future should then be cancelled with interruption so that the the GraphComputer that created
+            // the future knows we don't care about it anymore. The GraphComputer should attempt to respect this
+            // cancellation request.
+            if (future != null) future.cancel(true);
+            throw new TraversalInterruptedException();
+        } catch (ExecutionException e) {
             throw new IllegalStateException(e.getMessage(), e);
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/dfa278d1/gremlin-driver/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-driver/pom.xml b/gremlin-driver/pom.xml
index 515f765..ecbf25d 100644
--- a/gremlin-driver/pom.xml
+++ b/gremlin-driver/pom.xml
@@ -60,7 +60,6 @@ limitations under the License.
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-lang3</artifactId>
-            <version>3.3.1</version>
         </dependency>
         <!-- TEST -->
         <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/dfa278d1/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
index 8f85e62..4c183dc 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
@@ -26,6 +26,7 @@ import org.apache.tinkerpop.gremlin.process.computer.bulkloading.BulkLoaderVerte
 import org.apache.tinkerpop.gremlin.process.computer.clustering.peerpressure.PeerPressureVertexProgramTest;
 import org.apache.tinkerpop.gremlin.process.computer.ranking.pagerank.PageRankVertexProgramTest;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalInterruptionComputerTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.branch.BranchTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.branch.ChooseTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.branch.OptionalTest;
@@ -182,6 +183,9 @@ public class ProcessComputerSuite extends AbstractGremlinSuite {
             SubgraphTest.Traversals.class,
             TreeTest.Traversals.class,
 
+            // compliance
+            TraversalInterruptionComputerTest.class,
+
             // algorithms
             PageRankVertexProgramTest.class,
             PeerPressureVertexProgramTest.class,

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/dfa278d1/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalInterruptionComputerTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalInterruptionComputerTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalInterruptionComputerTest.java
new file mode 100644
index 0000000..c3a1042
--- /dev/null
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalInterruptionComputerTest.java
@@ -0,0 +1,97 @@
+/*
+ * 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.
+ */
+package org.apache.tinkerpop.gremlin.process.traversal;
+
+import org.apache.tinkerpop.gremlin.LoadGraphWith;
+import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalInterruptedException;
+import org.hamcrest.CoreMatchers;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import java.util.Arrays;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.function.Function;
+import java.util.function.UnaryOperator;
+
+import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.GRATEFUL;
+import static org.junit.Assert.assertThat;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+@RunWith(Parameterized.class)
+public class TraversalInterruptionComputerTest extends AbstractGremlinProcessTest {
+
+    @Parameterized.Parameters(name = "expectInterruption({0})")
+    public static Iterable<Object[]> data() {
+        return Arrays.asList(new Object[][]{
+                {"g_V", (Function<GraphTraversalSource, GraphTraversal<?,?>>) g -> g.V()},
+                {"g_V_out", (Function<GraphTraversalSource, GraphTraversal<?,?>>) g -> g.V().out()},
+                {"g_V_outE", (Function<GraphTraversalSource, GraphTraversal<?,?>>) g -> g.V().outE()},
+                {"g_V_in", (Function<GraphTraversalSource, GraphTraversal<?,?>>) g -> g.V().in()},
+                {"g_V_inE", (Function<GraphTraversalSource, GraphTraversal<?,?>>) g -> g.V().inE()},
+                {"g_V_properties", (Function<GraphTraversalSource, GraphTraversal<?,?>>) g -> g.V().properties()},
+                {"g_E", (Function<GraphTraversalSource, GraphTraversal<?,?>>) g -> g.E()},
+                {"g_E_outV", (Function<GraphTraversalSource, GraphTraversal<?,?>>) g -> g.E().outV()},
+                {"g_E_inV", (Function<GraphTraversalSource, GraphTraversal<?,?>>) g -> g.E().inV()},
+                {"g_E_properties", (Function<GraphTraversalSource, GraphTraversal<?,?>>) g -> g.E().properties()},
+        });
+    }
+
+    @Parameterized.Parameter(value = 0)
+    public String name;
+
+    @Parameterized.Parameter(value = 1)
+    public Function<GraphTraversalSource,GraphTraversal<?,?>> traversalMaker;
+
+    @Test
+    @LoadGraphWith(GRATEFUL)
+    public void shouldRespectThreadInterruptionInVertexStep() throws Exception {
+        final AtomicBoolean exceptionThrown = new AtomicBoolean(false);
+        final CountDownLatch startedIterating = new CountDownLatch(1);
+        final Thread t = new Thread(() -> {
+            try {
+                final Traversal traversal = traversalMaker.apply(g).sideEffect(traverser -> {
+                    startedIterating.countDown();
+                });
+                traversal.iterate();
+            } catch (Exception ex) {
+                exceptionThrown.set(ex instanceof TraversalInterruptedException);
+            }
+        }, name);
+
+        t.start();
+
+        // total time for test should not exceed 5 seconds - this prevents the test from just hanging and allows
+        // it to finish with failure
+        assertThat(startedIterating.await(5000, TimeUnit.MILLISECONDS), CoreMatchers.is(true));
+
+        t.interrupt();
+        t.join();
+
+        // ensure that some but not all of the traversal was iterated and that the right exception was tossed
+        assertThat(exceptionThrown.get(), CoreMatchers.is(true));
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/dfa278d1/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalInterruptionTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalInterruptionTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalInterruptionTest.java
index e9d584f..c508df2 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalInterruptionTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalInterruptionTest.java
@@ -97,7 +97,7 @@ public class TraversalInterruptionTest extends AbstractGremlinProcessTest {
             } catch (Exception ex) {
                 exceptionThrown.set(ex instanceof TraversalInterruptedException);
             }
-        });
+        }, name);
 
         t.start();
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/dfa278d1/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java
----------------------------------------------------------------------
diff --git a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java
index 3dd0d9a..08bbeeb 100644
--- a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java
+++ b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java
@@ -181,6 +181,11 @@ import java.util.stream.Stream;
         method = "shouldStartAndEndWorkersForVertexProgramAndMapReduce",
         reason = "Spark executes map and combine in a lazy fashion and thus, fails the blocking aspect of this test",
         computers = {"org.apache.tinkerpop.gremlin.spark.process.computer.SparkGraphComputer"})
+@Graph.OptOut(
+        test = "org.apache.tinkerpop.gremlin.process.computer.TraversalInterruptionComputerTest",
+        method = "*",
+        reason = "This test makes an use of a sideEffect to enforce when a thread interruption is triggered and thus isn't applicable to HadoopGraph",
+        computers = {"org.apache.tinkerpop.gremlin.spark.process.computer.SparkGraphComputer"})
 public final class HadoopGraph implements Graph {
 
     public static final Logger LOGGER = LoggerFactory.getLogger(HadoopGraph.class);

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/dfa278d1/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 28e932c..bd3584d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -499,6 +499,11 @@ limitations under the License.
                 <version>3.2.2</version>
             </dependency>
             <dependency>
+                <groupId>org.apache.commons</groupId>
+                <artifactId>commons-lang3</artifactId>
+                <version>3.3.1</version>
+            </dependency>
+            <dependency>
                 <groupId>org.apache.hadoop</groupId>
                 <artifactId>hadoop-core</artifactId>
                 <version>1.2.1</version>

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/dfa278d1/spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/process/computer/SparkGraphComputer.java
----------------------------------------------------------------------
diff --git a/spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/process/computer/SparkGraphComputer.java b/spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/process/computer/SparkGraphComputer.java
index 928a880..bc8bc50 100644
--- a/spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/process/computer/SparkGraphComputer.java
+++ b/spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/process/computer/SparkGraphComputer.java
@@ -21,6 +21,7 @@ package org.apache.tinkerpop.gremlin.spark.process.computer;
 import org.apache.commons.configuration.ConfigurationUtils;
 import org.apache.commons.configuration.FileConfiguration;
 import org.apache.commons.configuration.PropertiesConfiguration;
+import org.apache.commons.lang3.concurrent.BasicThreadFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
@@ -51,6 +52,7 @@ import org.apache.tinkerpop.gremlin.process.computer.Memory;
 import org.apache.tinkerpop.gremlin.process.computer.VertexProgram;
 import org.apache.tinkerpop.gremlin.process.computer.util.DefaultComputerResult;
 import org.apache.tinkerpop.gremlin.process.computer.util.MapMemory;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalInterruptedException;
 import org.apache.tinkerpop.gremlin.spark.process.computer.payload.ViewIncomingPayload;
 import org.apache.tinkerpop.gremlin.spark.structure.Spark;
 import org.apache.tinkerpop.gremlin.spark.structure.io.InputFormatRDD;
@@ -67,9 +69,11 @@ import org.apache.tinkerpop.gremlin.structure.io.Storage;
 
 import java.io.File;
 import java.io.IOException;
-import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.Executor;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
+import java.util.concurrent.ThreadFactory;
 import java.util.stream.Stream;
 
 /**
@@ -77,6 +81,15 @@ import java.util.stream.Stream;
  */
 public final class SparkGraphComputer extends AbstractHadoopGraphComputer {
 
+
+    private final ThreadFactory threadFactoryBoss = new BasicThreadFactory.Builder().namingPattern(SparkGraphComputer.class.getSimpleName() + "-boss").build();
+
+    /**
+     * An {@code ExecutorService} that schedules up background work. Since a {@link GraphComputer} is only used once
+     * for a {@link VertexProgram} a single threaded executor is sufficient.
+     */
+    private final ExecutorService computerService = Executors.newSingleThreadExecutor(threadFactoryBoss);
+
     private final org.apache.commons.configuration.Configuration sparkConfiguration;
     private boolean workersSet = false;
 
@@ -110,7 +123,7 @@ public final class SparkGraphComputer extends AbstractHadoopGraphComputer {
 
     private Future<ComputerResult> submitWithExecutor(Executor exec) {
         // create the completable future                                                   �
-        return CompletableFuture.<ComputerResult>supplyAsync(() -> {
+        return computerService.submit(() -> {
             final long startTime = System.currentTimeMillis();
             // apache and hadoop configurations that are used throughout the graph computer computation
             final org.apache.commons.configuration.Configuration apacheConfiguration = new HadoopConfiguration(this.sparkConfiguration);
@@ -219,7 +232,6 @@ public final class SparkGraphComputer extends AbstractHadoopGraphComputer {
                 if (!inputFromSpark || partitioned || filtered)
                     loadedGraphRDD = loadedGraphRDD.persist(StorageLevel.fromString(hadoopConfiguration.get(Constants.GREMLIN_SPARK_GRAPH_STORAGE_LEVEL, "MEMORY_ONLY")));
 
-
                 ////////////////////////////////
                 // process the vertex program //
                 ////////////////////////////////
@@ -235,6 +247,10 @@ public final class SparkGraphComputer extends AbstractHadoopGraphComputer {
                     ConfUtil.mergeApacheIntoHadoopConfiguration(vertexProgramConfiguration, hadoopConfiguration);
                     // execute the vertex program
                     while (true) {
+                        if (Thread.interrupted()) {
+                            sparkContext.cancelAllJobs();
+                            throw new TraversalInterruptedException();
+                        }
                         memory.setInExecute(true);
                         viewIncomingRDD = SparkExecutor.executeVertexProgramIteration(loadedGraphRDD, viewIncomingRDD, memory, vertexProgramConfiguration);
                         memory.setInExecute(false);
@@ -312,7 +328,7 @@ public final class SparkGraphComputer extends AbstractHadoopGraphComputer {
                 if (!apacheConfiguration.getBoolean(Constants.GREMLIN_SPARK_PERSIST_CONTEXT, false))
                     Spark.close();
             }
-        }, exec);
+        });
     }
 
     /////////////////

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/dfa278d1/tinkergraph-gremlin/pom.xml
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/pom.xml b/tinkergraph-gremlin/pom.xml
index dd48df6..0f3cecd 100644
--- a/tinkergraph-gremlin/pom.xml
+++ b/tinkergraph-gremlin/pom.xml
@@ -31,6 +31,10 @@ limitations under the License.
             <artifactId>gremlin-core</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+        </dependency>
         <!-- provided scope for gremlin-groovy because it is only used for purpose of scriptengine plugin in
              the console and server - in which case that jar should already be present -->
         <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/dfa278d1/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/computer/TinkerGraphComputer.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/computer/TinkerGraphComputer.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/computer/TinkerGraphComputer.java
index 5fb477c..2628ff1 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/computer/TinkerGraphComputer.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/computer/TinkerGraphComputer.java
@@ -18,6 +18,7 @@
  */
 package org.apache.tinkerpop.gremlin.tinkergraph.process.computer;
 
+import org.apache.commons.lang3.concurrent.BasicThreadFactory;
 import org.apache.tinkerpop.gremlin.process.computer.ComputerResult;
 import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
 import org.apache.tinkerpop.gremlin.process.computer.GraphFilter;
@@ -27,6 +28,7 @@ import org.apache.tinkerpop.gremlin.process.computer.util.ComputerGraph;
 import org.apache.tinkerpop.gremlin.process.computer.util.DefaultComputerResult;
 import org.apache.tinkerpop.gremlin.process.computer.util.GraphComputerHelper;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalInterruptedException;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
@@ -41,8 +43,10 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.Queue;
 import java.util.Set;
-import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
+import java.util.concurrent.ThreadFactory;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -62,6 +66,14 @@ public final class TinkerGraphComputer implements GraphComputer {
     private int workers = Runtime.getRuntime().availableProcessors();
     private final GraphFilter graphFilter = new GraphFilter();
 
+    private final ThreadFactory threadFactoryBoss = new BasicThreadFactory.Builder().namingPattern(TinkerGraphComputer.class.getSimpleName() + "-boss").build();
+
+    /**
+     * An {@code ExecutorService} that schedules up background work. Since a {@link GraphComputer} is only used once
+     * for a {@link VertexProgram} a single threaded executor is sufficient.
+     */
+    private final ExecutorService computerService = Executors.newSingleThreadExecutor(threadFactoryBoss);
+
     public TinkerGraphComputer(final TinkerGraph graph) {
         this.graph = graph;
     }
@@ -134,15 +146,17 @@ public final class TinkerGraphComputer implements GraphComputer {
 
         // initialize the memory
         this.memory = new TinkerMemory(this.vertexProgram, this.mapReducers);
-        return CompletableFuture.<ComputerResult>supplyAsync(() -> {
+        return computerService.submit(() -> {
             final long time = System.currentTimeMillis();
             final TinkerGraphComputerView view;
-            try (final TinkerWorkerPool workers = new TinkerWorkerPool(this.workers)) {
+            final TinkerWorkerPool workers = new TinkerWorkerPool(this.workers);
+            try {
                 if (null != this.vertexProgram) {
                     view = TinkerHelper.createGraphComputerView(this.graph, this.graphFilter, this.vertexProgram.getVertexComputeKeys());
                     // execute the vertex program
                     this.vertexProgram.setup(this.memory);
                     while (true) {
+                        if (Thread.interrupted()) throw new TraversalInterruptedException();
                         this.memory.completeSubRound();
                         workers.setVertexProgram(this.vertexProgram);
                         final SynchronizedIterator<Vertex> vertices = new SynchronizedIterator<>(this.graph.vertices());
@@ -150,6 +164,7 @@ public final class TinkerGraphComputer implements GraphComputer {
                             vertexProgram.workerIterationStart(this.memory.asImmutable());
                             while (true) {
                                 final Vertex vertex = vertices.next();
+                                if (Thread.interrupted()) throw new TraversalInterruptedException();
                                 if (null == vertex) break;
                                 vertexProgram.execute(
                                         ComputerGraph.vertexProgram(vertex, vertexProgram),
@@ -182,6 +197,7 @@ public final class TinkerGraphComputer implements GraphComputer {
                     workers.executeMapReduce(workerMapReduce -> {
                         workerMapReduce.workerStart(MapReduce.Stage.MAP);
                         while (true) {
+                            if (Thread.interrupted()) throw new TraversalInterruptedException();
                             final Vertex vertex = vertices.next();
                             if (null == vertex) break;
                             workerMapReduce.map(ComputerGraph.mapReduce(vertex), mapEmitter);
@@ -198,6 +214,7 @@ public final class TinkerGraphComputer implements GraphComputer {
                         workers.executeMapReduce(workerMapReduce -> {
                             workerMapReduce.workerStart(MapReduce.Stage.REDUCE);
                             while (true) {
+                                if (Thread.interrupted()) throw new TraversalInterruptedException();
                                 final Map.Entry<?, Queue<?>> entry = keyValues.next();
                                 if (null == entry) break;
                                 workerMapReduce.reduce(entry.getKey(), entry.getValue().iterator(), reduceEmitter);
@@ -217,9 +234,14 @@ public final class TinkerGraphComputer implements GraphComputer {
                 final Graph resultGraph = view.processResultGraphPersist(this.resultGraph, this.persist);
                 TinkerHelper.dropGraphComputerView(this.graph); // drop the view from the original source graph
                 return new DefaultComputerResult(resultGraph, this.memory.asImmutable());
-
+            } catch (InterruptedException ie) {
+                workers.closeNow();
+                throw new TraversalInterruptedException();
             } catch (Exception ex) {
+                workers.closeNow();
                 throw new RuntimeException(ex);
+            } finally {
+                workers.close();
             }
         });
     }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/dfa278d1/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/computer/TinkerWorkerPool.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/computer/TinkerWorkerPool.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/computer/TinkerWorkerPool.java
index e9341b4..3d851bf 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/computer/TinkerWorkerPool.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/computer/TinkerWorkerPool.java
@@ -59,7 +59,7 @@ public final class TinkerWorkerPool implements AutoCloseable {
         this.mapReducePool = new MapReducePool(mapReduce, this.numberOfWorkers);
     }
 
-    public void executeVertexProgram(final Consumer<VertexProgram> worker) {
+    public void executeVertexProgram(final Consumer<VertexProgram> worker) throws InterruptedException {
         for (int i = 0; i < this.numberOfWorkers; i++) {
             this.completionService.submit(() -> {
                 final VertexProgram vp = this.vertexProgramPool.take();
@@ -71,13 +71,15 @@ public final class TinkerWorkerPool implements AutoCloseable {
         for (int i = 0; i < this.numberOfWorkers; i++) {
             try {
                 this.completionService.take().get();
+            } catch (InterruptedException ie) {
+                throw ie;
             } catch (final Exception e) {
                 throw new IllegalStateException(e.getMessage(), e);
             }
         }
     }
 
-    public void executeMapReduce(final Consumer<MapReduce> worker) {
+    public void executeMapReduce(final Consumer<MapReduce> worker) throws InterruptedException {
         for (int i = 0; i < this.numberOfWorkers; i++) {
             this.completionService.submit(() -> {
                 final MapReduce mr = this.mapReducePool.take();
@@ -89,12 +91,18 @@ public final class TinkerWorkerPool implements AutoCloseable {
         for (int i = 0; i < this.numberOfWorkers; i++) {
             try {
                 this.completionService.take().get();
+            } catch (InterruptedException ie) {
+                throw ie;
             } catch (final Exception e) {
                 throw new IllegalStateException(e.getMessage(), e);
             }
         }
     }
 
+    public void closeNow() throws Exception {
+        this.workerPool.shutdownNow();
+    }
+
     @Override
     public void close() throws Exception {
         this.workerPool.shutdown();


[43/50] [abbrv] incubator-tinkerpop git commit: Added process tests for traversal interruption

Posted by sp...@apache.org.
Added process tests for traversal interruption

Covered GraphStep, VertexStep and PropertiesStep which should yield some coverage to provider implementations.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/a44157af
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/a44157af
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/a44157af

Branch: refs/heads/TINKERPOP-946
Commit: a44157af08ec331808236b57438b49b68d40a10c
Parents: fca7b11
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue Apr 19 19:09:20 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Tue May 3 07:58:19 2016 -0400

----------------------------------------------------------------------
 .../util/TraversalInterruptedException.java     |  18 +++
 .../traversal/util/DefaultTraversalTest.java    |   1 -
 .../process/traversal/CoreTraversalTest.java    | 130 +++++++++++++++++++
 3 files changed, 148 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a44157af/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalInterruptedException.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalInterruptedException.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalInterruptedException.java
index 216a762..f3db464 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalInterruptedException.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalInterruptedException.java
@@ -1,3 +1,21 @@
+/*
+ * 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.
+ */
 package org.apache.tinkerpop.gremlin.process.traversal.util;
 
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a44157af/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalTest.java
index c1a4c6b..6f6a6c6 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalTest.java
@@ -69,7 +69,6 @@ public class DefaultTraversalTest {
                     startedIterating.countDown();
                     counter.incrementAndGet();
                 }).iterate();
-                fail("Traversal should have been interrupted");
             } catch (Exception ex) {
                 exceptionThrown.set(ex instanceof TraversalInterruptedException);
             }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a44157af/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/CoreTraversalTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/CoreTraversalTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/CoreTraversalTest.java
index 930030e..200d94b 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/CoreTraversalTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/CoreTraversalTest.java
@@ -24,11 +24,13 @@ import org.apache.tinkerpop.gremlin.LoadGraphWith;
 import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalInterruptedException;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.Transaction;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
+import org.hamcrest.CoreMatchers;
 import org.junit.Test;
 
 import java.util.HashSet;
@@ -36,8 +38,12 @@ import java.util.List;
 import java.util.Map;
 import java.util.Random;
 import java.util.Set;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.stream.Collectors;
 
+import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.GRATEFUL;
 import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.*;
 import static org.apache.tinkerpop.gremlin.structure.Graph.Features.GraphFeatures.FEATURE_TRANSACTIONS;
@@ -56,6 +62,130 @@ import static org.junit.Assert.*;
 public class CoreTraversalTest extends AbstractGremlinProcessTest {
 
     @Test
+    @LoadGraphWith(GRATEFUL)
+    public void shouldRespectThreadInterruptionInGraphStep() throws Exception {
+        final AtomicBoolean exceptionThrown = new AtomicBoolean(false);
+        final CountDownLatch startedIterating = new CountDownLatch(1);
+        final Thread t = new Thread(() -> {
+            try {
+                final Traversal traversal = g.V().sideEffect(traverser -> {
+                    startedIterating.countDown();
+
+                    // ensure that the whole traversal doesn't iterate out before we get a chance to interrupt
+                    if (startedIterating.getCount() == 0) {
+                        try {
+                            Thread.sleep(3000);
+                        } catch (Exception ignored) {
+                            Thread.currentThread().interrupt();
+                        }
+                    }
+                });
+                traversal.iterate();
+            } catch (Exception ex) {
+                exceptionThrown.set(ex instanceof TraversalInterruptedException);
+            }
+        });
+
+        t.start();
+
+        // total time for test should not exceed 5 seconds - this prevents the test from just hanging and allows
+        // it to finish with failure
+        assertThat(startedIterating.await(5000, TimeUnit.MILLISECONDS), CoreMatchers.is(true));
+
+        t.interrupt();
+        t.join();
+
+        // ensure that some but not all of the traversal was iterated and that the right exception was tossed
+        assertThat(exceptionThrown.get(), CoreMatchers.is(true));
+    }
+
+    @Test
+    @LoadGraphWith(GRATEFUL)
+    public void shouldRespectThreadInterruptionInVertexStep() throws Exception {
+        final AtomicBoolean exceptionThrown = new AtomicBoolean(false);
+        final CountDownLatch startedIterating = new CountDownLatch(1);
+        final Thread t = new Thread(() -> {
+            try {
+                final AtomicBoolean first = new AtomicBoolean(true);
+                final Traversal traversal = g.V().sideEffect(traverser -> {
+                    // let the first iteration flow through
+                    if (!first.compareAndSet(true, false)) {
+                        // ensure that the whole traversal doesn't iterate out before we get a chance to interrupt
+                        // the next iteration should stop so we can force the interrupt to be handled by VertexStep
+                        try {
+                            Thread.sleep(3000);
+                        } catch (Exception ignored) {
+                            // make sure that the interrupt propagates in case the interrupt occurs during sleep.
+                            // this should ensure VertexStep gets to try to throw the TraversalInterruptedException
+                            Thread.currentThread().interrupt();
+                        }
+                    }
+                }).out().sideEffect(traverser -> {
+                    startedIterating.countDown();
+                });
+                traversal.iterate();
+            } catch (Exception ex) {
+                exceptionThrown.set(ex instanceof TraversalInterruptedException);
+            }
+        });
+
+        t.start();
+
+        // total time for test should not exceed 5 seconds - this prevents the test from just hanging and allows
+        // it to finish with failure
+        assertThat(startedIterating.await(5000, TimeUnit.MILLISECONDS), CoreMatchers.is(true));
+
+        t.interrupt();
+        t.join();
+
+        // ensure that some but not all of the traversal was iterated and that the right exception was tossed
+        assertThat(exceptionThrown.get(), CoreMatchers.is(true));
+    }
+
+    @Test
+    @LoadGraphWith(GRATEFUL)
+    public void shouldRespectThreadInterruptionInPropertyStep() throws Exception {
+        final AtomicBoolean exceptionThrown = new AtomicBoolean(false);
+        final CountDownLatch startedIterating = new CountDownLatch(1);
+        final Thread t = new Thread(() -> {
+            try {
+                final AtomicBoolean first = new AtomicBoolean(true);
+                final Traversal traversal = g.V().sideEffect(traverser -> {
+                    // let the first iteration flow through
+                    if (!first.compareAndSet(true, false)) {
+                        // ensure that the whole traversal doesn't iterate out before we get a chance to interrupt
+                        // the next iteration should stop so we can force the interrupt to be handled by PropertyStep
+                        try {
+                            Thread.sleep(3000);
+                        } catch (Exception ignored) {
+                            // make sure that the interrupt propagates in case the interrupt occurs during sleep.
+                            // this should ensure PropertyStep gets to try to throw the TraversalInterruptedException
+                            Thread.currentThread().interrupt();
+                        }
+                    }
+                }).properties().sideEffect(traverser -> {
+                    startedIterating.countDown();
+                });
+                traversal.iterate();
+            } catch (Exception ex) {
+                exceptionThrown.set(ex instanceof TraversalInterruptedException);
+            }
+        });
+
+        t.start();
+
+        // total time for test should not exceed 5 seconds - this prevents the test from just hanging and allows
+        // it to finish with failure
+        assertThat(startedIterating.await(5000, TimeUnit.MILLISECONDS), CoreMatchers.is(true));
+
+        t.interrupt();
+        t.join();
+
+        // ensure that some but not all of the traversal was iterated and that the right exception was tossed
+        assertThat(exceptionThrown.get(), CoreMatchers.is(true));
+    }
+
+    @Test
     @LoadGraphWith
     public void shouldNeverPropagateANoBulkTraverser() {
         assertFalse(g.V().dedup().sideEffect(t -> t.asAdmin().setBulk(0)).hasNext());


[05/50] [abbrv] incubator-tinkerpop git commit: minor nothings -- just added links and some internal ahref anchors.

Posted by sp...@apache.org.
minor nothings -- just added links and some internal ahref anchors.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/cc66ba5f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/cc66ba5f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/cc66ba5f

Branch: refs/heads/TINKERPOP-946
Commit: cc66ba5f8a42e6fd0b130adb87ed8d4702674491
Parents: 099e110
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Apr 21 09:38:31 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Apr 21 09:38:31 2016 -0600

----------------------------------------------------------------------
 docs/src/tutorials/gremlin-language-variants/index.asciidoc | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/cc66ba5f/docs/src/tutorials/gremlin-language-variants/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/tutorials/gremlin-language-variants/index.asciidoc b/docs/src/tutorials/gremlin-language-variants/index.asciidoc
index 2cd4c4e..dc384c2 100644
--- a/docs/src/tutorials/gremlin-language-variants/index.asciidoc
+++ b/docs/src/tutorials/gremlin-language-variants/index.asciidoc
@@ -176,7 +176,7 @@ Gremlin-Jython and Gremlin-Python
 Using Jython and the JVM
 ~~~~~~~~~~~~~~~~~~~~~~~~
 
-image:jython-logo.png[width=200,float=left] link:http://www.jython.org/[Jython] is a
+image:jython-logo.png[width=200,float=left,link="http://www.jython.org/"] link:http://www.jython.org/[Jython] is a
 link:https://www.jcp.org/en/jsr/detail?id=223[JSR-223] `ScriptEngine` implementation that enables the evaluation of
 Python on the link:https://en.wikipedia.org/wiki/Java_virtual_machine[Java virtual machine]. In other words, Jython's
 virtual machine is not the standard link:https://wiki.python.org/moin/CPython[CPython] reference implementation
@@ -465,7 +465,7 @@ The interested reader can solve the aforementioned problems as a training exerci
 Using Python and GremlinServer
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-image:python-logo.png[width=125,float=left] The JVM is a wonderful piece of technology that has, over the years,
+image:python-logo.png[width=125,float=left,link="https://www.python.org/"] The JVM is a wonderful piece of technology that has, over the years,
 become a meeting ground for developers from numerous language communities. However, not all applications will use the JVM.
 Given that Apache TinkerPop is a Java-framework, there must be a way for two different virtual machines to communicate
 traversals and their results. This section presents the second Gremlin language variant implementation model which does just that.
@@ -722,6 +722,7 @@ reader may want to remedy as an exercise.
 * Results are retrieved using `toList()`. This simple implementation does not account for GremlinServer's result batching and is thus, is not optimal for large result sets.
 * While terminal methods such as `next()`, `hasNext()`, `toSet()`, etc. work, they simply rely on `toList()` in an awkward way.
 
+[[gremlin-language-variant-conventions]]
 Gremlin Language Variant Conventions
 ------------------------------------
 


[42/50] [abbrv] incubator-tinkerpop git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-tinkerpop

Posted by sp...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-tinkerpop


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/08d54c6b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/08d54c6b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/08d54c6b

Branch: refs/heads/TINKERPOP-946
Commit: 08d54c6b0a0567689d331dd1fa2507ff310efe5f
Parents: 899650b 3225fbc
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Tue May 3 12:22:36 2016 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Tue May 3 12:22:36 2016 +0200

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   6 +
 .../src/reference/gremlin-applications.asciidoc |  66 ++++++--
 .../the-gremlin-console/index.asciidoc          |  11 +-
 .../upgrade/release-3.2.x-incubating.asciidoc   |  41 +++++
 gremlin-console/pom.xml                         |   5 +
 gremlin-console/src/main/bin/gremlin.bat        |  41 +----
 gremlin-console/src/main/bin/gremlin.sh         |  19 +--
 .../tinkerpop/gremlin/console/Console.groovy    | 168 +++++++++++++++----
 .../gremlin/groovy/jsr223/ScriptExecutor.java   |   2 +
 9 files changed, 252 insertions(+), 107 deletions(-)
----------------------------------------------------------------------



[31/50] [abbrv] incubator-tinkerpop git commit: Added option for "none" on remote timeouts.

Posted by sp...@apache.org.
Added option for "none" on remote timeouts.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/2284ea90
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/2284ea90
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/2284ea90

Branch: refs/heads/TINKERPOP-946
Commit: 2284ea90b5f3c93c2d0699cce67f7e481382d8d3
Parents: 14966d7
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue Apr 26 07:35:23 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon May 2 06:59:59 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  1 +
 .../src/reference/gremlin-applications.asciidoc |  4 +--
 .../upgrade/release-3.1.x-incubating.asciidoc   | 25 ++++++++++++++++
 .../groovy/plugin/DriverRemoteAcceptor.java     | 30 ++++++++++++++------
 .../groovy/plugin/DriverRemoteAcceptorTest.java | 18 ++++++++++++
 5 files changed, 68 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2284ea90/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 5600245..1848fdf 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,7 @@ image::https://raw.githubusercontent.com/apache/incubator-tinkerpop/master/docs/
 TinkerPop 3.1.3 (NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+* Added configuration option for disabling `:remote` timeout with `:remote config timeout none`.
 * Added `init-tp-spark.sh` to Gremlin Console binary distribution.
 * Fixed bug where use of `:x` in a Gremlin Console initialization script would generate a stack trace.
 * Added configuration options to Gremlin Driver and Server to override the SSL configuration with an `SslContext`.

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2284ea90/docs/src/reference/gremlin-applications.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/gremlin-applications.asciidoc b/docs/src/reference/gremlin-applications.asciidoc
index 410dfe1..a894335 100644
--- a/docs/src/reference/gremlin-applications.asciidoc
+++ b/docs/src/reference/gremlin-applications.asciidoc
@@ -467,8 +467,8 @@ The Gremlin Server `:remote config` command for the driver has the following con
 !`reset` !Clears any aliases that were supplied in previous configurations of the remote.
 !`show` !Shows the current set of aliases which is returned as a `Map`
 !=========================================================
-|timeout |Specifies the length of time in milliseconds a will wait for a response from the server. Specify "max" to
-essentially have no timeout.
+|timeout |Specifies the length of time in milliseconds a will wait for a response from the server. Specify "none" to
+have no timeout. By default, this setting uses "none".
 |=========================================================
 
 [[console-aliases]]

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2284ea90/docs/src/upgrade/release-3.1.x-incubating.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/release-3.1.x-incubating.asciidoc b/docs/src/upgrade/release-3.1.x-incubating.asciidoc
index 070cc52..4de6dbd 100644
--- a/docs/src/upgrade/release-3.1.x-incubating.asciidoc
+++ b/docs/src/upgrade/release-3.1.x-incubating.asciidoc
@@ -29,6 +29,31 @@ TinkerPop 3.1.3
 
 Please see the link:https://github.com/apache/incubator-tinkerpop/blob/3.1.2-incubating/CHANGELOG.asciidoc#tinkerpop-313-release-date-MONTH-DAY-YEAR[changelog] for a complete list of all the modifications that are part of this release.
 
+Upgrading for Users
+~~~~~~~~~~~~~~~~~~~
+
+Remote Timeout
+^^^^^^^^^^^^^^
+
+Disabling the timeout for a `:remote` to Gremlin Server was previously accomplished by setting the timeout to `max` as
+in:
+
+[source,text]
+:remote config timeout max
+
+where `max` would set the timeout to be `Integer.MAX_VALUE`. While this feature is still supported, it has been
+deprecated in favor of the new configuration option of `none`, as in:
+
+[source,text]
+:remote config timeout none
+
+The use of `none` completely disables the timeout rather than just setting an arbitrarily high one. Note that it is
+still possible to get a timeout on a request if the server timeout limits are reached. The console timeout value only
+refers to how long the console will wait for a response from the server before giving up. By default, the timeout is
+set to `none`.
+
+See: https://issues.apache.org/jira/browse/TINKERPOP-1267[TINKERPOP-1267]
+
 Upgrading for Providers
 ~~~~~~~~~~~~~~~~~~~~~~~
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2284ea90/gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/groovy/plugin/DriverRemoteAcceptor.java
----------------------------------------------------------------------
diff --git a/gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/groovy/plugin/DriverRemoteAcceptor.java b/gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/groovy/plugin/DriverRemoteAcceptor.java
index c92d5b3..ed98011 100644
--- a/gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/groovy/plugin/DriverRemoteAcceptor.java
+++ b/gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/groovy/plugin/DriverRemoteAcceptor.java
@@ -21,6 +21,7 @@ package org.apache.tinkerpop.gremlin.console.groovy.plugin;
 import org.apache.tinkerpop.gremlin.driver.Client;
 import org.apache.tinkerpop.gremlin.driver.Cluster;
 import org.apache.tinkerpop.gremlin.driver.Result;
+import org.apache.tinkerpop.gremlin.driver.ResultSet;
 import org.apache.tinkerpop.gremlin.driver.exception.ResponseException;
 import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode;
 import org.apache.tinkerpop.gremlin.groovy.plugin.RemoteAcceptor;
@@ -52,15 +53,23 @@ import java.util.stream.Stream;
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
 public class DriverRemoteAcceptor implements RemoteAcceptor {
+    public static final int NO_TIMEOUT = -1;
+
     private Cluster currentCluster;
     private Client currentClient;
-    private int timeout = 180000;
+    private int timeout = NO_TIMEOUT;
     private Map<String,String> aliases = new HashMap<>();
     private Optional<String> session = Optional.empty();
 
     private static final String TOKEN_RESET = "reset";
     private static final String TOKEN_SHOW = "show";
+
+    /**
+     * @deprecated As of 3.1.3-incubating, replaced by "none" option
+     */
+    @Deprecated
     private static final String TOKEN_MAX = "max";
+    private static final String TOKEN_NONE = "none";
     private static final String TOKEN_TIMEOUT = "timeout";
     private static final String TOKEN_ALIAS = "alias";
     private static final String TOKEN_SESSION = "session";
@@ -104,13 +113,14 @@ public class DriverRemoteAcceptor implements RemoteAcceptor {
         final List<String> arguments = args.subList(1, args.size());
 
         if (option.equals(TOKEN_TIMEOUT)) {
-            final String errorMessage = "The timeout option expects a positive integer representing milliseconds or 'max' as an argument";
+            final String errorMessage = "The timeout option expects a positive integer representing milliseconds or 'none' as an argument";
             if (arguments.size() != 1) throw new RemoteException(errorMessage);
             try {
-                final int to = arguments.get(0).equals(TOKEN_MAX) ? Integer.MAX_VALUE : Integer.parseInt(arguments.get(0));
-                if (to <= 0) throw new RemoteException(errorMessage);
-                this.timeout = to;
-                return "Set remote timeout to " + to + "ms";
+                // first check for MAX timeout then NONE and finally parse the config to int. "max" is now "deprecated"
+                // in the sense that it will no longer be promoted. support for it will be removed at a later date
+                timeout = arguments.get(0).equals(TOKEN_MAX) ? Integer.MAX_VALUE :
+                        arguments.get(0).equals(TOKEN_NONE) ? NO_TIMEOUT : Integer.parseInt(arguments.get(0));
+                return timeout == NO_TIMEOUT ? "Remote timeout is disable" : "Set remote timeout to " + timeout + "ms";
             } catch (Exception ignored) {
                 throw new RemoteException(errorMessage);
             }
@@ -171,10 +181,14 @@ public class DriverRemoteAcceptor implements RemoteAcceptor {
         if (this.currentCluster != null) this.currentCluster.close();
     }
 
+    public int getTimeout() {
+        return timeout;
+    }
+
     private List<Result> send(final String gremlin) throws SaslException {
         try {
-            return this.currentClient.submitAsync(gremlin, aliases, Collections.emptyMap()).get()
-                    .all().get(this.timeout, TimeUnit.MILLISECONDS);
+            final ResultSet rs = this.currentClient.submitAsync(gremlin, aliases, Collections.emptyMap()).get();
+            return timeout > 0 ? rs.all().get(timeout, TimeUnit.MILLISECONDS) : rs.all().get();
         } catch(TimeoutException ignored) {
             throw new IllegalStateException("Request timed out while processing - increase the timeout with the :remote command");
         } catch (Exception e) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2284ea90/gremlin-console/src/test/java/org/apache/tinkerpop/gremlin/console/groovy/plugin/DriverRemoteAcceptorTest.java
----------------------------------------------------------------------
diff --git a/gremlin-console/src/test/java/org/apache/tinkerpop/gremlin/console/groovy/plugin/DriverRemoteAcceptorTest.java b/gremlin-console/src/test/java/org/apache/tinkerpop/gremlin/console/groovy/plugin/DriverRemoteAcceptorTest.java
index d341098..987a932 100644
--- a/gremlin-console/src/test/java/org/apache/tinkerpop/gremlin/console/groovy/plugin/DriverRemoteAcceptorTest.java
+++ b/gremlin-console/src/test/java/org/apache/tinkerpop/gremlin/console/groovy/plugin/DriverRemoteAcceptorTest.java
@@ -109,6 +109,24 @@ public class DriverRemoteAcceptorTest {
     }
 
     @Test
+    public void shouldConfigureTimeoutToMax() throws Exception {
+        acceptor.configure(Arrays.asList("timeout", "max"));
+        assertEquals(Integer.MAX_VALUE, acceptor.getTimeout());
+    }
+
+    @Test
+    public void shouldConfigureTimeoutToNone() throws Exception {
+        acceptor.configure(Arrays.asList("timeout", "none"));
+        assertEquals(DriverRemoteAcceptor.NO_TIMEOUT, acceptor.getTimeout());
+    }
+
+    @Test
+    public void shouldConfigureTimeout() throws Exception {
+        acceptor.configure(Arrays.asList("timeout", "123456"));
+        assertEquals(123456, acceptor.getTimeout());
+    }
+
+    @Test
     public void shouldConnect() throws Exception {
         // there is no gremlin server running for this test, but gremlin-driver lazily connects so this should
         // be ok to just validate that a connection is created


[10/50] [abbrv] incubator-tinkerpop git commit: Removed a note about deprecation in dev docs that didn't make sense.

Posted by sp...@apache.org.
Removed a note about deprecation in dev docs that didn't make sense.

Deprecation work need not be tied to a JIRA ticket with a "breaking" label. If we deprecated properly, there should be no breaking change and hence no need for the label.  CTR


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/f23def3a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/f23def3a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/f23def3a

Branch: refs/heads/TINKERPOP-946
Commit: f23def3afbd658024a8d08294048beb4566c4800
Parents: 606b59a
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue Apr 26 07:43:24 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Tue Apr 26 07:43:24 2016 -0400

----------------------------------------------------------------------
 docs/src/dev/developer/contributing.asciidoc | 3 ---
 1 file changed, 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f23def3a/docs/src/dev/developer/contributing.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/developer/contributing.asciidoc b/docs/src/dev/developer/contributing.asciidoc
index b33aeb9..ffc8156 100644
--- a/docs/src/dev/developer/contributing.asciidoc
+++ b/docs/src/dev/developer/contributing.asciidoc
@@ -270,9 +270,6 @@ replaced then the comment can simply read "not replaced".  Additional comments t
 encouraged.
 ** `@see <a href="https://issues.apache.org/jira/browse/TINKERPOP-XXX">TINKERPOP-XXX</a>` - supply a link to the
 JIRA issue for reference.
-* All deprecation should typically be tied to a JIRA issue with a "breaking" label - the issue itself does not need to
-specifically or solely be about "deprecation" but it should be documented very clearly in the comments what was
-deprecated and what the path forward should be.
 * Be sure that deprecated methods are still under test - consider using javadoc/comments in the tests themselves to
 call out this fact.
 * Create a new JIRA issue to track removal of the deprecation for future evaluation - this issue should have the


[36/50] [abbrv] incubator-tinkerpop git commit: Merge branch 'tp31'

Posted by sp...@apache.org.
Merge branch 'tp31'


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/64b09df0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/64b09df0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/64b09df0

Branch: refs/heads/TINKERPOP-946
Commit: 64b09df013333b3018892ed1bf1ca44485d5e9c9
Parents: 7348e47 9a94872
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Mon May 2 08:24:16 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Mon May 2 08:24:16 2016 -0600

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  1 +
 .../gremlin/structure/util/star/StarGraph.java  | 19 +++--
 .../structure/util/star/StarGraphTest.java      | 86 ++++++++++++++++++++
 3 files changed, 101 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/64b09df0/CHANGELOG.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/64b09df0/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraph.java
----------------------------------------------------------------------


[34/50] [abbrv] incubator-tinkerpop git commit: Merge branch 'TINKERPOP-1284' into tp31

Posted by sp...@apache.org.
Merge branch 'TINKERPOP-1284' into tp31


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/7427ae1e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/7427ae1e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/7427ae1e

Branch: refs/heads/TINKERPOP-946
Commit: 7427ae1eb3e4580dfbe838e6c48ed11f162a6e74
Parents: 704b023 82295fe
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Mon May 2 08:22:24 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Mon May 2 08:22:24 2016 -0600

----------------------------------------------------------------------
 .../gremlin/structure/util/star/StarGraph.java  | 19 +++--
 .../structure/util/star/StarGraphTest.java      | 86 ++++++++++++++++++++
 2 files changed, 100 insertions(+), 5 deletions(-)
----------------------------------------------------------------------



[44/50] [abbrv] incubator-tinkerpop git commit: Refactored Traversal interruption tests.

Posted by sp...@apache.org.
Refactored Traversal interruption tests.

Provided better coverage and easier maintenance by making the tests parameterized.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/608ce2b6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/608ce2b6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/608ce2b6

Branch: refs/heads/TINKERPOP-946
Commit: 608ce2b631dbb3ac2c1e67527e74c71426df4e20
Parents: a44157a
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Apr 20 07:52:01 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Tue May 3 07:58:19 2016 -0400

----------------------------------------------------------------------
 .../process/AbstractGremlinProcessTest.java     |   8 +-
 .../gremlin/process/ProcessStandardSuite.java   |   2 +
 .../process/traversal/CoreTraversalTest.java    | 130 -------------------
 .../traversal/TraversalInterruptionTest.java    | 114 ++++++++++++++++
 4 files changed, 123 insertions(+), 131 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/608ce2b6/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/AbstractGremlinProcessTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/AbstractGremlinProcessTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/AbstractGremlinProcessTest.java
index 0c0f19d..201822c 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/AbstractGremlinProcessTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/AbstractGremlinProcessTest.java
@@ -72,10 +72,16 @@ public abstract class AbstractGremlinProcessTest extends AbstractGremlinTest {
 
         try {
             // ignore tests that aren't supported by a specific TraversalEngine
-            final IgnoreEngine ignoreEngine = this.getClass().getMethod(name.getMethodName()).getAnnotation(IgnoreEngine.class);
+            final String testName = name.getMethodName();
+
+            // tests that are parameterized have a square bracket with parameterized name appended to the actual
+            // test method name. have to strip that off so that reflection can find it
+            final String methodName = testName.contains("[") ? testName.substring(0, testName.indexOf('[')) : testName;
+            final IgnoreEngine ignoreEngine = this.getClass().getMethod(methodName).getAnnotation(IgnoreEngine.class);
             if (ignoreEngine != null)
                 assumeTrue(String.format("This test is ignored for %s", ignoreEngine.value()), !ignoreEngine.value().equals(GraphManager.getTraversalEngineType()));
         } catch (NoSuchMethodException nsme) {
+            // some tests are parameterized
             throw new RuntimeException(String.format("Could not find test method %s in test case %s", name.getMethodName(), this.getClass().getName()));
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/608ce2b6/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessStandardSuite.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessStandardSuite.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessStandardSuite.java
index 5bd1f5a..644555d 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessStandardSuite.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessStandardSuite.java
@@ -21,6 +21,7 @@ package org.apache.tinkerpop.gremlin.process;
 import org.apache.tinkerpop.gremlin.AbstractGremlinSuite;
 import org.apache.tinkerpop.gremlin.process.traversal.CoreTraversalTest;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalInterruptionTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.branch.BranchTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.branch.ChooseTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.branch.OptionalTest;
@@ -173,6 +174,7 @@ public class ProcessStandardSuite extends AbstractGremlinSuite {
 
             // compliance
             CoreTraversalTest.class,
+            TraversalInterruptionTest.class,
 
             // decorations
             ElementIdStrategyProcessTest.class,

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/608ce2b6/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/CoreTraversalTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/CoreTraversalTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/CoreTraversalTest.java
index 200d94b..930030e 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/CoreTraversalTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/CoreTraversalTest.java
@@ -24,13 +24,11 @@ import org.apache.tinkerpop.gremlin.LoadGraphWith;
 import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalInterruptedException;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.Transaction;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
-import org.hamcrest.CoreMatchers;
 import org.junit.Test;
 
 import java.util.HashSet;
@@ -38,12 +36,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Random;
 import java.util.Set;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.stream.Collectors;
 
-import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.GRATEFUL;
 import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.*;
 import static org.apache.tinkerpop.gremlin.structure.Graph.Features.GraphFeatures.FEATURE_TRANSACTIONS;
@@ -62,130 +56,6 @@ import static org.junit.Assert.*;
 public class CoreTraversalTest extends AbstractGremlinProcessTest {
 
     @Test
-    @LoadGraphWith(GRATEFUL)
-    public void shouldRespectThreadInterruptionInGraphStep() throws Exception {
-        final AtomicBoolean exceptionThrown = new AtomicBoolean(false);
-        final CountDownLatch startedIterating = new CountDownLatch(1);
-        final Thread t = new Thread(() -> {
-            try {
-                final Traversal traversal = g.V().sideEffect(traverser -> {
-                    startedIterating.countDown();
-
-                    // ensure that the whole traversal doesn't iterate out before we get a chance to interrupt
-                    if (startedIterating.getCount() == 0) {
-                        try {
-                            Thread.sleep(3000);
-                        } catch (Exception ignored) {
-                            Thread.currentThread().interrupt();
-                        }
-                    }
-                });
-                traversal.iterate();
-            } catch (Exception ex) {
-                exceptionThrown.set(ex instanceof TraversalInterruptedException);
-            }
-        });
-
-        t.start();
-
-        // total time for test should not exceed 5 seconds - this prevents the test from just hanging and allows
-        // it to finish with failure
-        assertThat(startedIterating.await(5000, TimeUnit.MILLISECONDS), CoreMatchers.is(true));
-
-        t.interrupt();
-        t.join();
-
-        // ensure that some but not all of the traversal was iterated and that the right exception was tossed
-        assertThat(exceptionThrown.get(), CoreMatchers.is(true));
-    }
-
-    @Test
-    @LoadGraphWith(GRATEFUL)
-    public void shouldRespectThreadInterruptionInVertexStep() throws Exception {
-        final AtomicBoolean exceptionThrown = new AtomicBoolean(false);
-        final CountDownLatch startedIterating = new CountDownLatch(1);
-        final Thread t = new Thread(() -> {
-            try {
-                final AtomicBoolean first = new AtomicBoolean(true);
-                final Traversal traversal = g.V().sideEffect(traverser -> {
-                    // let the first iteration flow through
-                    if (!first.compareAndSet(true, false)) {
-                        // ensure that the whole traversal doesn't iterate out before we get a chance to interrupt
-                        // the next iteration should stop so we can force the interrupt to be handled by VertexStep
-                        try {
-                            Thread.sleep(3000);
-                        } catch (Exception ignored) {
-                            // make sure that the interrupt propagates in case the interrupt occurs during sleep.
-                            // this should ensure VertexStep gets to try to throw the TraversalInterruptedException
-                            Thread.currentThread().interrupt();
-                        }
-                    }
-                }).out().sideEffect(traverser -> {
-                    startedIterating.countDown();
-                });
-                traversal.iterate();
-            } catch (Exception ex) {
-                exceptionThrown.set(ex instanceof TraversalInterruptedException);
-            }
-        });
-
-        t.start();
-
-        // total time for test should not exceed 5 seconds - this prevents the test from just hanging and allows
-        // it to finish with failure
-        assertThat(startedIterating.await(5000, TimeUnit.MILLISECONDS), CoreMatchers.is(true));
-
-        t.interrupt();
-        t.join();
-
-        // ensure that some but not all of the traversal was iterated and that the right exception was tossed
-        assertThat(exceptionThrown.get(), CoreMatchers.is(true));
-    }
-
-    @Test
-    @LoadGraphWith(GRATEFUL)
-    public void shouldRespectThreadInterruptionInPropertyStep() throws Exception {
-        final AtomicBoolean exceptionThrown = new AtomicBoolean(false);
-        final CountDownLatch startedIterating = new CountDownLatch(1);
-        final Thread t = new Thread(() -> {
-            try {
-                final AtomicBoolean first = new AtomicBoolean(true);
-                final Traversal traversal = g.V().sideEffect(traverser -> {
-                    // let the first iteration flow through
-                    if (!first.compareAndSet(true, false)) {
-                        // ensure that the whole traversal doesn't iterate out before we get a chance to interrupt
-                        // the next iteration should stop so we can force the interrupt to be handled by PropertyStep
-                        try {
-                            Thread.sleep(3000);
-                        } catch (Exception ignored) {
-                            // make sure that the interrupt propagates in case the interrupt occurs during sleep.
-                            // this should ensure PropertyStep gets to try to throw the TraversalInterruptedException
-                            Thread.currentThread().interrupt();
-                        }
-                    }
-                }).properties().sideEffect(traverser -> {
-                    startedIterating.countDown();
-                });
-                traversal.iterate();
-            } catch (Exception ex) {
-                exceptionThrown.set(ex instanceof TraversalInterruptedException);
-            }
-        });
-
-        t.start();
-
-        // total time for test should not exceed 5 seconds - this prevents the test from just hanging and allows
-        // it to finish with failure
-        assertThat(startedIterating.await(5000, TimeUnit.MILLISECONDS), CoreMatchers.is(true));
-
-        t.interrupt();
-        t.join();
-
-        // ensure that some but not all of the traversal was iterated and that the right exception was tossed
-        assertThat(exceptionThrown.get(), CoreMatchers.is(true));
-    }
-
-    @Test
     @LoadGraphWith
     public void shouldNeverPropagateANoBulkTraverser() {
         assertFalse(g.V().dedup().sideEffect(t -> t.asAdmin().setBulk(0)).hasNext());

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/608ce2b6/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalInterruptionTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalInterruptionTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalInterruptionTest.java
new file mode 100644
index 0000000..e9d584f
--- /dev/null
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalInterruptionTest.java
@@ -0,0 +1,114 @@
+/*
+ * 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.
+ */
+package org.apache.tinkerpop.gremlin.process.traversal;
+
+import org.apache.tinkerpop.gremlin.LoadGraphWith;
+import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalInterruptedException;
+import org.hamcrest.CoreMatchers;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import java.util.Arrays;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.function.Function;
+import java.util.function.UnaryOperator;
+
+import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.GRATEFUL;
+import static org.junit.Assert.assertThat;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+@RunWith(Parameterized.class)
+public class TraversalInterruptionTest extends AbstractGremlinProcessTest {
+
+    @Parameterized.Parameters(name = "expectInterruption({0})")
+    public static Iterable<Object[]> data() {
+        return Arrays.asList(new Object[][]{
+                {"g_V", (Function<GraphTraversalSource, GraphTraversal<?,?>>) g -> g.V(), (UnaryOperator<GraphTraversal<?,?>>) t -> t},
+                {"g_V_out", (Function<GraphTraversalSource, GraphTraversal<?,?>>) g -> g.V(), (UnaryOperator<GraphTraversal<?,?>>) t -> t.out()},
+                {"g_V_outE", (Function<GraphTraversalSource, GraphTraversal<?,?>>) g -> g.V(), (UnaryOperator<GraphTraversal<?,?>>) t -> t.outE()},
+                {"g_V_in", (Function<GraphTraversalSource, GraphTraversal<?,?>>) g -> g.V(), (UnaryOperator<GraphTraversal<?,?>>) t -> t.in()},
+                {"g_V_inE", (Function<GraphTraversalSource, GraphTraversal<?,?>>) g -> g.V(), (UnaryOperator<GraphTraversal<?,?>>) t -> t.inE()},
+                {"g_V_properties", (Function<GraphTraversalSource, GraphTraversal<?,?>>) g -> g.V(), (UnaryOperator<GraphTraversal<?,?>>) t -> t.properties()},
+                {"g_E", (Function<GraphTraversalSource, GraphTraversal<?,?>>) g -> g.E(), (UnaryOperator<GraphTraversal<?,?>>) t -> t},
+                {"g_E_outV", (Function<GraphTraversalSource, GraphTraversal<?,?>>) g -> g.E(), (UnaryOperator<GraphTraversal<?,?>>) t -> t.outV()},
+                {"g_E_inV", (Function<GraphTraversalSource, GraphTraversal<?,?>>) g -> g.E(), (UnaryOperator<GraphTraversal<?,?>>) t -> t.inV()},
+                {"g_E_properties", (Function<GraphTraversalSource, GraphTraversal<?,?>>) g -> g.E(), (UnaryOperator<GraphTraversal<?,?>>) t -> t.properties()},
+        });
+    }
+
+    @Parameterized.Parameter(value = 0)
+    public String name;
+
+    @Parameterized.Parameter(value = 1)
+    public Function<GraphTraversalSource,GraphTraversal<?,?>> traversalBeforePause;
+
+    @Parameterized.Parameter(value = 2)
+    public UnaryOperator<GraphTraversal<?,?>> traversalAfterPause;
+
+    @Test
+    @LoadGraphWith(GRATEFUL)
+    public void shouldRespectThreadInterruptionInVertexStep() throws Exception {
+        final AtomicBoolean exceptionThrown = new AtomicBoolean(false);
+        final CountDownLatch startedIterating = new CountDownLatch(1);
+        final Thread t = new Thread(() -> {
+            try {
+                final AtomicBoolean first = new AtomicBoolean(true);
+                final Traversal traversal = traversalAfterPause.apply(traversalBeforePause.apply(g).sideEffect(traverser -> {
+                    // let the first iteration flow through
+                    if (!first.compareAndSet(true, false)) {
+                        // ensure that the whole traversal doesn't iterate out before we get a chance to interrupt
+                        // the next iteration should stop so we can force the interrupt to be handled by VertexStep
+                        try {
+                            Thread.sleep(3000);
+                        } catch (Exception ignored) {
+                            // make sure that the interrupt propagates in case the interrupt occurs during sleep.
+                            // this should ensure VertexStep gets to try to throw the TraversalInterruptedException
+                            Thread.currentThread().interrupt();
+                        }
+                    }
+                })).sideEffect(traverser -> {
+                    startedIterating.countDown();
+                });
+                traversal.iterate();
+            } catch (Exception ex) {
+                exceptionThrown.set(ex instanceof TraversalInterruptedException);
+            }
+        });
+
+        t.start();
+
+        // total time for test should not exceed 5 seconds - this prevents the test from just hanging and allows
+        // it to finish with failure
+        assertThat(startedIterating.await(5000, TimeUnit.MILLISECONDS), CoreMatchers.is(true));
+
+        t.interrupt();
+        t.join();
+
+        // ensure that some but not all of the traversal was iterated and that the right exception was tossed
+        assertThat(exceptionThrown.get(), CoreMatchers.is(true));
+    }
+}


[47/50] [abbrv] incubator-tinkerpop git commit: Added a couple more OptOuts.

Posted by sp...@apache.org.
Added a couple more OptOuts.

The interruption tests are not good for RemoteGraph or HadoopGraph. The interruption models are different there given their different processing. Those might need specific testing.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/ac55d3d7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/ac55d3d7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/ac55d3d7

Branch: refs/heads/TINKERPOP-946
Commit: ac55d3d7eaf5a6fda75b11c5bd2720c461a543ea
Parents: af4a120
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Sat Apr 30 06:31:27 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Tue May 3 07:58:20 2016 -0400

----------------------------------------------------------------------
 .../apache/tinkerpop/gremlin/process/remote/RemoteGraph.java | 8 ++++++++
 .../tinkerpop/gremlin/hadoop/structure/HadoopGraph.java      | 6 +++++-
 2 files changed, 13 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ac55d3d7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java
index 78512e2..f46fe90 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java
@@ -93,6 +93,14 @@ import java.util.Iterator;
         test = "org.apache.tinkerpop.gremlin.process.computer.GraphComputerTest",
         method = "*",
         reason = "RemoteGraph does not support direct Graph.compute() access")
+@Graph.OptOut(
+        test = "org.apache.tinkerpop.gremlin.process.traversal.TraversalInterruptionTest",
+        method = "*",
+        reason = "The interruption model in the test can't guarantee interruption at the right time with RemoteGraph.")
+@Graph.OptOut(
+        test = "org.apache.tinkerpop.gremlin.process.traversal.TraversalInterruptionComputerTest",
+        method = "*",
+        reason = "The interruption model in the test can't guarantee interruption at the right time with RemoteGraph.")
 public class RemoteGraph implements Graph {
 
     private final RemoteConnection connection;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ac55d3d7/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java
----------------------------------------------------------------------
diff --git a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java
index fce3953..bf2f08b 100644
--- a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java
+++ b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java
@@ -182,9 +182,13 @@ import java.util.stream.Stream;
         reason = "Spark executes map and combine in a lazy fashion and thus, fails the blocking aspect of this test",
         computers = {"org.apache.tinkerpop.gremlin.spark.process.computer.SparkGraphComputer"})
 @Graph.OptOut(
+        test = "org.apache.tinkerpop.gremlin.process.traversal.TraversalInterruptionTest",
+        method = "*",
+        reason = "The interruption model in the test can't guarantee interruption at the right time with HadoopGraph.")
+@Graph.OptOut(
         test = "org.apache.tinkerpop.gremlin.process.traversal.TraversalInterruptionComputerTest",
         method = "*",
-        reason = "This test makes an use of a sideEffect to enforce when a thread interruption is triggered and thus isn't applicable to HadoopGraph",
+        reason = "This test makes use of a sideEffect to enforce when a thread interruption is triggered and thus isn't applicable to HadoopGraph",
         computers = {"org.apache.tinkerpop.gremlin.spark.process.computer.SparkGraphComputer", "org.apache.tinkerpop.gremlin.giraph.process.computer.GiraphGraphComputer"})
 public final class HadoopGraph implements Graph {
 


[09/50] [abbrv] incubator-tinkerpop git commit: Added versions to NOTICE

Posted by sp...@apache.org.
Added versions to NOTICE

This made NOTICE consistent with LICENSE which also had versions. CTR


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/606b59ad
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/606b59ad
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/606b59ad

Branch: refs/heads/TINKERPOP-946
Commit: 606b59ad24e6713dc7f527eac3e6be9e3e08de70
Parents: 697b501
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Apr 25 07:56:00 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Apr 25 07:56:22 2016 -0400

----------------------------------------------------------------------
 gremlin-console/src/main/static/NOTICE | 14 +++++++-------
 gremlin-server/src/main/static/NOTICE  | 12 ++++++------
 2 files changed, 13 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/606b59ad/gremlin-console/src/main/static/NOTICE
----------------------------------------------------------------------
diff --git a/gremlin-console/src/main/static/NOTICE b/gremlin-console/src/main/static/NOTICE
index 3139931..da608d0 100644
--- a/gremlin-console/src/main/static/NOTICE
+++ b/gremlin-console/src/main/static/NOTICE
@@ -5,20 +5,20 @@ This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
 
 ------------------------------------------------------------------------
-Apache Commons Codec (AL ASF)
+Apache Commons Codec 1.9 (AL ASF)
 ------------------------------------------------------------------------
 src/test/org/apache/commons/codec/language/DoubleMetaphoneTest.java
 contains test data from http://aspell.net/test/orig/batch0.tab.
 Copyright (C) 2002 Kevin Atkinson (kevina@gnu.org)
 
 ------------------------------------------------------------------------
-Apache Commons Lang (AL ASF)
+Apache Commons Lang 3.3.1/2.6 (AL ASF)
 ------------------------------------------------------------------------
 This product includes software from the Spring Framework,
 under the Apache License 2.0 (see: StringUtils.containsWhitespace())
 
 ------------------------------------------------------------------------
-Apache Groovy (AL ASF)
+Apache Groovy 2.4.6 (AL ASF)
 ------------------------------------------------------------------------
 This product includes/uses ANTLR (http://www.antlr2.org/)
 developed by Terence Parr 1989-2006
@@ -29,13 +29,13 @@ Licensed under the Creative Commons Attribution Licence v2.5
 http://creativecommons.org/licenses/by/2.5/
 
 ------------------------------------------------------------------------
-Apache Http Components Core (AL ASF)
+Apache Http Components Core 4.4.3 (AL ASF)
 ------------------------------------------------------------------------
 This project contains annotations derived from JCIP-ANNOTATIONS
 Copyright (c) 2005 Brian Goetz and Tim Peierls. See http://www.jcip.net
 
 ------------------------------------------------------------------------
-Apache Ivy (AL ASF)
+Apache Ivy 2.3.0 (AL ASF)
 ------------------------------------------------------------------------
 Portions of Ivy were originally developed by
 Jayasoft SARL (http://www.jayasoft.fr/)
@@ -49,12 +49,12 @@ The original software and related information is available
 at http://www.jcraft.com/jsch/.
 
 ------------------------------------------------------------------------
-JavaTuples
+JavaTuples 1.2
 ------------------------------------------------------------------------
 Copyright (c) 2010, The JAVATUPLES team (http://www.javatuples.org)
 
 ------------------------------------------------------------------------
-Netty
+Netty 4.0.34
 ------------------------------------------------------------------------
 Copyright 2014 The Netty Project
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/606b59ad/gremlin-server/src/main/static/NOTICE
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/static/NOTICE b/gremlin-server/src/main/static/NOTICE
index 13a3bc6..4833ad5 100644
--- a/gremlin-server/src/main/static/NOTICE
+++ b/gremlin-server/src/main/static/NOTICE
@@ -5,13 +5,13 @@ This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
 
 ------------------------------------------------------------------------
-Apache Commons Lang (AL ASF)
+Apache Commons Lang 3.3.1/2.6 (AL ASF)
 ------------------------------------------------------------------------
 This product includes software from the Spring Framework,
 under the Apache License 2.0 (see: StringUtils.containsWhitespace())
 
 ------------------------------------------------------------------------
-Apache Groovy (AL ASF)
+Apache Groovy 2.4.6 (AL ASF)
 ------------------------------------------------------------------------
 This product includes/uses ANTLR (http://www.antlr2.org/)
 developed by Terence Parr 1989-2006
@@ -22,7 +22,7 @@ Licensed under the Creative Commons Attribution Licence v2.5
 http://creativecommons.org/licenses/by/2.5/
 
 ------------------------------------------------------------------------
-Apache Ivy (AL ASF)
+Apache Ivy 2.3.0 (AL ASF)
 ------------------------------------------------------------------------
 Portions of Ivy were originally developed by
 Jayasoft SARL (http://www.jayasoft.fr/)
@@ -36,12 +36,12 @@ The original software and related information is available
 at http://www.jcraft.com/jsch/.
 
 ------------------------------------------------------------------------
-JavaTuples
+JavaTuples 1.2
 ------------------------------------------------------------------------
 Copyright (c) 2010, The JAVATUPLES team (http://www.javatuples.org)
 
 ------------------------------------------------------------------------
-Metrics
+Metrics 3.0.2
 ------------------------------------------------------------------------
 Copyright 2010-2013 Coda Hale and Yammer, Inc., 2014-2015 Dropwizard Team
 
@@ -55,6 +55,6 @@ LongAdder), which was released with the following comments:
     http://creativecommons.org/publicdomain/zero/1.0/
 
 ------------------------------------------------------------------------
-Netty
+Netty 4.0.34
 ------------------------------------------------------------------------
 Copyright 2014 The Netty Project


[15/50] [abbrv] incubator-tinkerpop git commit: updated CHANGELOG and merged master.

Posted by sp...@apache.org.
updated CHANGELOG and merged master.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/0bf7156f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/0bf7156f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/0bf7156f

Branch: refs/heads/TINKERPOP-946
Commit: 0bf7156f779b169066b61236b715518501a16622
Parents: b5efb2a a950d95
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Apr 27 08:27:02 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Apr 27 08:27:02 2016 -0600

----------------------------------------------------------------------
 CHANGELOG.asciidoc                                    |  3 ++-
 docs/src/dev/developer/contributing.asciidoc          |  3 ---
 .../apache/tinkerpop/gremlin/console/Console.groovy   |  4 +++-
 gremlin-console/src/main/static/NOTICE                | 14 +++++++-------
 gremlin-server/src/main/static/NOTICE                 | 12 ++++++------
 5 files changed, 18 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0bf7156f/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --cc CHANGELOG.asciidoc
index 634915b,c6b01c7..6eb53da
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@@ -26,7 -26,7 +26,7 @@@ image::https://raw.githubusercontent.co
  TinkerPop 3.2.1 (NOT OFFICIALLY RELEASED YET)
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
--
++* Added a Gremlin language variant tutorial teaching people how to embed Gremlin in a host programming language.
  
  [[release-3.2.0-incubating]]
  TinkerPop 3.2.0 (Release Date: April 8, 2016)


[18/50] [abbrv] incubator-tinkerpop git commit: Merge branch 'TINKERPOP-1232'

Posted by sp...@apache.org.
Merge branch 'TINKERPOP-1232'


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/03927341
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/03927341
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/03927341

Branch: refs/heads/TINKERPOP-946
Commit: 03927341c1113d65ae22159c9c3f1f8845916999
Parents: 4073be3 aa338c6
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Apr 27 16:46:11 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Apr 27 16:46:11 2016 -0600

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |    4 +-
 docs/src/dev/developer/index.asciidoc           |    4 +-
 docs/src/dev/provider/index.asciidoc            |    4 +-
 docs/src/reference/index.asciidoc               |    2 +-
 .../tutorials/getting-started/index.asciidoc    |    4 +-
 .../gremlin-language-variants/index.asciidoc    |  780 ++
 .../the-gremlin-console/index.asciidoc          |    4 +-
 docs/src/upgrade/index.asciidoc                 |    2 +-
 docs/static/images/jython-logo.png              |  Bin 0 -> 15721 bytes
 docs/static/images/language-drivers.png         |  Bin 0 -> 124333 bytes
 docs/static/images/language-variants.png        |  Bin 0 -> 157258 bytes
 docs/static/images/python-logo.png              |  Bin 0 -> 9957 bytes
 docs/static/images/tinkerpop3.graffle           | 8124 +++++++++++++++++-
 docs/static/resources/gremlin-jython.py         |  721 ++
 docs/static/resources/gremlin-python.py         |  764 ++
 pom.xml                                         |   23 +
 16 files changed, 10403 insertions(+), 33 deletions(-)
----------------------------------------------------------------------



[07/50] [abbrv] incubator-tinkerpop git commit: one more run through -- tessted all the code chunks again (found a bug in the Jython section -- phew. fixed). Added some text about gremlin-lang-driver and gremlin-lang naming conventions. A few more code c

Posted by sp...@apache.org.
one more run through -- tessted all the code chunks again (found a bug in the Jython section -- phew. fixed). Added some text about gremlin-lang-driver and gremlin-lang naming conventions. A few more code call outs, but not as many as I would like.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/adce6cfa
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/adce6cfa
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/adce6cfa

Branch: refs/heads/TINKERPOP-946
Commit: adce6cfada83f1593a3fda13f8dcfac579d2fcc5
Parents: 343a34b
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Apr 21 11:22:16 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Apr 21 11:22:16 2016 -0600

----------------------------------------------------------------------
 .../gremlin-language-variants/index.asciidoc    |  44 ++--
 docs/static/resources/gremlin-jython.py         | 227 ++++++++++---------
 2 files changed, 145 insertions(+), 126 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/adce6cfa/docs/src/tutorials/gremlin-language-variants/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/tutorials/gremlin-language-variants/index.asciidoc b/docs/src/tutorials/gremlin-language-variants/index.asciidoc
index 4dc2aed..b35a671 100644
--- a/docs/src/tutorials/gremlin-language-variants/index.asciidoc
+++ b/docs/src/tutorials/gremlin-language-variants/index.asciidoc
@@ -331,7 +331,7 @@ pythonClass.append("from org.apache.tinkerpop.gremlin.process.traversal.dsl.grap
 //////////////////////////
 // GraphTraversalSource //
 //////////////////////////
-methods = GraphTraversalSource.getMethods().collect{methodMap[it.name]} as Set; []
+methods = GraphTraversalSource.getMethods().collect{it.name} as Set; []
 pythonClass.append(
 """class JythonGraphTraversalSource(object):
   def __init__(self, traversalSource):
@@ -416,7 +416,7 @@ methods.each{ method ->
 pythonClass.append("\n\n")
 
 // save to a python file
-file = new File("/usr/local/apache-gremlin-console-x.y.z-standalone/lib/gremlin-jython.py")
+file = new File("/tmp/gremlin-jython.py")                                    //// <6>
 file.delete()
 pythonClass.eachLine{ file.append(it + "\n") }
 ----
@@ -426,6 +426,7 @@ pythonClass.eachLine{ file.append(it + "\n") }
 <3> Use Java reflection to get all the methods of `GraphTraversal`.
 <4> If the method is a fluent traversal-method, then mutate the underlying/wrapped `GraphTraversal` instance accordingly.
 <5> If the method is not a fluent traversal-method, return the result of applying the method.
+<6> Save the string representation of the Jython source code to `gremlin-jython.py`.
 
 From the Jython console, `gremlin-jython.py` is loaded and a complete Gremlin language variant is born: **Gremlin-Jython**.
 The generated file is available at link:../../resources/gremlin-jython.py[gremlin-jython.py].
@@ -435,7 +436,8 @@ The generated file is available at link:../../resources/gremlin-jython.py[gremli
 Jython 2.7.0 (default:9987c746f838, Apr 29 2015, 02:25:11)
 [Java HotSpot(TM) 64-Bit Server VM (Oracle Corporation)] on java1.8.0_40
 Type "help", "copyright", "credits" or "license" for more information.
->>> execfile("/usr/local/apache-gremlin-console-x.y.z-standalone/lib/gremlin-jython.py")
+>>> execfile("/tmp/gremlin-jython.py")
+>>> from org.apache.tinkerpop.gremlin.tinkergraph.structure import TinkerFactory
 >>> graph = TinkerFactory.createModern()
 >>> g = JythonGraphTraversalSource(graph.traversal())
 # using the Gremlin-Jython __getattr__ and __getitem__ extensions and anonymous traversals
@@ -460,6 +462,12 @@ The interested reader can solve the aforementioned problems as a training exerci
 * `__` is always required for anonymous traversals and thus, `repeat(__.both())` can not be replaced by `repeat(both())`.
 ** By placing the `@staticmethods` outside of the `__` Jython class, the methods would be globally scoped (analogous to `import static` in Java).
 
+NOTE: Another technique that can be leveraged in most link:https://en.wikipedia.org/wiki/Dynamic_programming_language[dynamic languages]
+is to use meta-programming and intercept all method calls to the variant's traversal classes. From there, the name of the
+method that was called, along with its parameters, are used to dynamically construct a method call to the wrapped traversals.
+In this way, there is no need to create a wrapper method for each method in `GraphTraversalSource`, `GraphTraversal`, and `__`.
+The drawback of this technique is that not all methods are fluent and those that are not, might need special handling.
+Moreover, runtime reflection is typically not efficient.
 
 [[using-python-and-gremlin-server]]
 Using Python and GremlinServer
@@ -626,20 +634,27 @@ methods.each{ method ->
 pythonClass.append("\n\n")
 
 // save to a python file
-file = new File("/usr/local/apache-gremlin-console-x.y.z-standalone/lib/gremlin-python.py")
+file = new File("/tmp/gremlin-python.py")                                                //// <3>
 file.delete()
 pythonClass.eachLine{ file.append(it + "\n") }
 ----
 
 <1> The `Helper` class contains static methods that are generally useful to the other classes. This could have been a separate file, but was included in the Groovy script so that the tutorial's code is consolidated.
 <2> `toList()`'s method `def` is not generated programmatically, but instead is hardcoded and uses the gremlinclient driver to communicate with GremlinServer.
+<3> Save the string representation of the Python source code to `gremlin-python.py`.
 
 When the above Groovy script is evaluated in GremlinConsole, **Gremlin-Python** is born.
 The generated file is available at link:../../resources/gremlin-python.py[gremlin-python.py]. Now, from any Python
 virtual machine (not just Jython), Gremlin traversals can be expressed in native Python and a legal Gremlin-Groovy
 string is created behind the scenes.
 
-Be sure that GremlinServer is running and has a GraphSON endpoint. The following serializers were added to `conf/gremlin-server-modern.yaml`.
+NOTE: The string that is generated for submission to a GremlinServer or `RemoteConnection` does not have to be a
+Gremlin-Groovy string. However, it must be a string that has a respective `ScriptEngine` that is enabled on the remote
+location. It is recommended that a Gremlin-Groovy string be constructed as Gremlin-Groovy is maintained by
+Apache TinkerPop and is guaranteed to always be aligned with Gremlin-Java.
+
+Be sure that GremlinServer is running and has a link:http://tinkerpop.apache.org/docs/x.y.z/reference/#graphson-reader-writer[GraphSON]
+endpoint. The following serializers were added to `conf/gremlin-server-modern.yaml`.
 
 [source,yaml]
 - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v1.0+json
@@ -682,7 +697,8 @@ $ bin/gremlin-server.sh conf/gremlin-server-modern.yaml
 Python 2.7.2 (default, Oct 11 2012, 20:14:37)
 [GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
 Type "help", "copyright", "credits" or "license" for more information.
->>> execfile("/usr/local/apache-gremlin-console-x.y.z-standalone/lib/gremlin-python.py")
+>>> execfile("/tmp/gremlin-python.py")
+# PythonGraphTraversalSource requires a GremlinServer endpoint and a traversal alias
 >>> g = PythonGraphTraversalSource("ws://localhost:8182/", "g")
 >>> g
 graphtraversalsource[ws://localhost:8182/, g]
@@ -709,11 +725,6 @@ graphtraversalsource[ws://localhost:8182/, g.withComputer()]
 >>>
 ----
 
-NOTE: The string that is generated for submission to a GremlinServer or `RemoteConnection` does not have to be a
-Gremlin-Groovy string. However, it must be a string that has a respective `ScriptEngine` that is enabled on the remote
-location. It is recommended that a Gremlin-Groovy string be constructed as Gremlin-Groovy is maintained by
-Apache TinkerPop and is guaranteed to always be aligned with Gremlin-Java.
-
 Finally, for the sake of brevity, Gremlin-Python is simple and as such, incurs a few peculiarities that the interested
 reader may want to remedy as an exercise.
 
@@ -734,6 +745,11 @@ this dual-language bridge are provided.
 * If the host language does not use dot-notion for method chaining, then its method chaining convention should be used instead of going the route of operator overloading. For instance, a Gremlin-PHP implementation should do `$g->V()->out()`.
 * If a programming language does not support method overloading, then varargs and type introspection should be used. In Gremlin-Python, `*args` does just this and that is why there are not 200 methods off of `PythonGraphTraversal`.
 
+As stated in <<language-drivers-vs-language-variants,"Language Drivers vs. Language Variants">>, drivers and variants should
+be separate libraries. A proposed naming convention for each library type is `gremlin-<language>-driver` and
+`gremlin-<language>`. Unfortunately, numerous drivers and languages already exist for Gremlin that don't use this convention.
+However, moving forward, it might be good to be explicit in the naming so its obvious to users what is what.
+
 Finally, note that Gremlin-Jython and Gremlin-Python (as presented in this tutorial) were only manually tested. This
 means that there are most likely errors in the translation and thus, some traversals may break. A future addition to this
 tutorial will explain how to leverage TinkerPop's `ProcessStandardSuite` and `ProcessComputerSuite` to test not only
@@ -743,11 +759,11 @@ semantics will be validated and deemed an accurate representation of Gremlin-Jav
 Conclusion
 ----------
 
-Gremlin is a simple language because it relies two fundamental programming language constructs: function composition
+Gremlin is a simple language because it uses two fundamental programming language constructs: function composition
 and function nesting. Because of this foundation, it is relatively easy to implement Gremlin in any modern programming
 language. Two ways of doing this were presented in this tutorial. One using Jython (on the JVM) and one using Python
 (on CPython). It is strongly recommended that language variant designers leverage (especially when not on the JVM)
-leverage the reflection-based source code generation technique presented. This method ensures that the language
+the reflection-based source code generation technique presented. This method ensures that the language
 variant is always in sync with the corresponding Apache TinkerPop Gremlin-Java release version. Moreover, it reduces
-the chances of having missing methods or poorly implemented methods. While Gremlin is simple, there are nearly 200
+the chance of missing methods or creating poorly implemented methods. While Gremlin is simple, there are nearly 200
 steps in `GraphTraversal` and thus, its complexity is realized in the diversity of the atomic step operations it supports.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/adce6cfa/docs/static/resources/gremlin-jython.py
----------------------------------------------------------------------
diff --git a/docs/static/resources/gremlin-jython.py b/docs/static/resources/gremlin-jython.py
index c04b411..41d31ee 100644
--- a/docs/static/resources/gremlin-jython.py
+++ b/docs/static/resources/gremlin-jython.py
@@ -15,6 +15,8 @@ See the License for the specific language governing permissions and
 limitations under the License.
 '''
 
+from org.apache.tinkerpop.gremlin.process.traversal import *
+from org.apache.tinkerpop.gremlin.structure import *
 from org.apache.tinkerpop.gremlin.process.traversal.dsl.graph import __ as anon
 
 class JythonGraphTraversalSource(object):
@@ -31,12 +33,8 @@ class JythonGraphTraversalSource(object):
     return JythonGraphTraversal(self.traversalSource.V(*args))
   def E(self, *args):
     return JythonGraphTraversal(self.traversalSource.E(*args))
-  def getStrategies(self, *args):
-    return self.traversalSource.getStrategies(*args)
-  def addV(self, *args):
-    return JythonGraphTraversal(self.traversalSource.addV(*args))
-  def getGraph(self, *args):
-    return self.traversalSource.getGraph(*args)
+  def build(self, *args):
+    return self.traversalSource.build(*args)
   def withSack(self, *args):
     self.traversalSource = self.traversalSource.withSack(*args)
     return self
@@ -62,10 +60,14 @@ class JythonGraphTraversalSource(object):
     return self
   def standard(self, *args):
     return self.traversalSource.standard(*args)
-  def build(self, *args):
-    return self.traversalSource.build(*args)
   def inject(self, *args):
     return JythonGraphTraversal(self.traversalSource.inject(*args))
+  def getStrategies(self, *args):
+    return self.traversalSource.getStrategies(*args)
+  def addV(self, *args):
+    return JythonGraphTraversal(self.traversalSource.addV(*args))
+  def getGraph(self, *args):
+    return self.traversalSource.getGraph(*args)
   def tx(self, *args):
     return self.traversalSource.tx(*args)
   def wait(self, *args):
@@ -175,48 +177,49 @@ class JythonGraphTraversal(object):
   def id(self, *args):
     self.traversal = self.traversal.id(*args)
     return self
-  def label(self, *args):
-    self.traversal = self.traversal.label(*args)
-    return self
-  def has(self, *args):
-    self.traversal = self.traversal.has(*args)
-    return self
-  def union(self, *args):
-    self.traversal = self.traversal.union(*args)
-    return self
-  def groupCount(self, *args):
-    self.traversal = self.traversal.groupCount(*args)
-    return self
-  def flatMap(self, *args):
-    self.traversal = self.traversal.flatMap(*args)
+  def option(self, *args):
+    self.traversal = self.traversal.option(*args)
     return self
-  def iterate(self, *args):
-    self.traversal = self.traversal.iterate(*args)
+  def _not(self, *args):
+    return self.traversal.not(*args)
+  def property(self, *args):
+    self.traversal = self.traversal.property(*args)
     return self
-  def until(self, *args):
-    self.traversal = self.traversal.until(*args)
+  def program(self, *args):
+    self.traversal = self.traversal.program(*args)
     return self
-  def asAdmin(self, *args):
-    self.traversal = self.traversal.asAdmin(*args)
+  def label(self, *args):
+    self.traversal = self.traversal.label(*args)
     return self
   def choose(self, *args):
     self.traversal = self.traversal.choose(*args)
     return self
-  def program(self, *args):
-    self.traversal = self.traversal.program(*args)
+  def propertyMap(self, *args):
+    self.traversal = self.traversal.propertyMap(*args)
     return self
-  def both(self, *args):
-    self.traversal = self.traversal.both(*args)
+  def inject(self, *args):
+    self.traversal = self.traversal.inject(*args)
     return self
-  def toE(self, *args):
-    self.traversal = self.traversal.toE(*args)
+  def drop(self, *args):
+    self.traversal = self.traversal.drop(*args)
+    return self
+  def times(self, *args):
+    self.traversal = self.traversal.times(*args)
+    return self
+  def select(self, *args):
+    self.traversal = self.traversal.select(*args)
     return self
+  def _as(self, *args):
+    return self.traversal.as(*args)
   def outE(self, *args):
     self.traversal = self.traversal.outE(*args)
     return self
   def inE(self, *args):
     self.traversal = self.traversal.inE(*args)
     return self
+  def toE(self, *args):
+    self.traversal = self.traversal.toE(*args)
+    return self
   def bothE(self, *args):
     self.traversal = self.traversal.bothE(*args)
     return self
@@ -226,6 +229,9 @@ class JythonGraphTraversal(object):
   def outV(self, *args):
     self.traversal = self.traversal.outV(*args)
     return self
+  def both(self, *args):
+    self.traversal = self.traversal.both(*args)
+    return self
   def bothV(self, *args):
     self.traversal = self.traversal.bothV(*args)
     return self
@@ -349,36 +355,11 @@ class JythonGraphTraversal(object):
   def by(self, *args):
     self.traversal = self.traversal.by(*args)
     return self
-  def propertyMap(self, *args):
-    self.traversal = self.traversal.propertyMap(*args)
-    return self
-  def select(self, *args):
-    self.traversal = self.traversal.select(*args)
-    return self
-  def _as(self, *args):
-    return self.traversal.as(*args)
-  def property(self, *args):
-    self.traversal = self.traversal.property(*args)
-    return self
-  def inject(self, *args):
-    self.traversal = self.traversal.inject(*args)
-    return self
-  def drop(self, *args):
-    self.traversal = self.traversal.drop(*args)
-    return self
-  def times(self, *args):
-    self.traversal = self.traversal.times(*args)
-    return self
-  def option(self, *args):
-    self.traversal = self.traversal.option(*args)
-    return self
-  def cap(self, *args):
-    self.traversal = self.traversal.cap(*args)
-    return self
   def _is(self, *args):
     return self.traversal.is(*args)
-  def _not(self, *args):
-    return self.traversal.not(*args)
+  def until(self, *args):
+    self.traversal = self.traversal.until(*args)
+    return self
   def constant(self, *args):
     self.traversal = self.traversal.constant(*args)
     return self
@@ -390,6 +371,27 @@ class JythonGraphTraversal(object):
     return self
   def _from(self, *args):
     return self.traversal.from(*args)
+  def has(self, *args):
+    self.traversal = self.traversal.has(*args)
+    return self
+  def union(self, *args):
+    self.traversal = self.traversal.union(*args)
+    return self
+  def groupCount(self, *args):
+    self.traversal = self.traversal.groupCount(*args)
+    return self
+  def flatMap(self, *args):
+    self.traversal = self.traversal.flatMap(*args)
+    return self
+  def iterate(self, *args):
+    self.traversal = self.traversal.iterate(*args)
+    return self
+  def cap(self, *args):
+    self.traversal = self.traversal.cap(*args)
+    return self
+  def asAdmin(self, *args):
+    self.traversal = self.traversal.asAdmin(*args)
+    return self
   def next(self, *args):
     return self.traversal.next(*args)
   def fill(self, *args):
@@ -398,16 +400,16 @@ class JythonGraphTraversal(object):
     return self.traversal.forEachRemaining(*args)
   def toList(self, *args):
     return self.traversal.toList(*args)
+  def toSet(self, *args):
+    return self.traversal.toSet(*args)
+  def toBulkSet(self, *args):
+    return self.traversal.toBulkSet(*args)
   def tryNext(self, *args):
     return self.traversal.tryNext(*args)
   def toStream(self, *args):
     return self.traversal.toStream(*args)
-  def toBulkSet(self, *args):
-    return self.traversal.toBulkSet(*args)
   def explain(self, *args):
     return self.traversal.explain(*args)
-  def toSet(self, *args):
-    return self.traversal.toSet(*args)
   def remove(self, *args):
     return self.traversal.remove(*args)
   def hasNext(self, *args):
@@ -497,35 +499,35 @@ class __(object):
   def id(*args):
     return anon.id(*args)
   @staticmethod
-  def label(*args):
-    return anon.label(*args)
+  def _not(*args):
+    return anon.not(*args)
   @staticmethod
-  def has(*args):
-    return anon.has(*args)
+  def property(*args):
+    return anon.property(*args)
   @staticmethod
-  def union(*args):
-    return anon.union(*args)
+  def label(*args):
+    return anon.label(*args)
   @staticmethod
-  def groupCount(*args):
-    return anon.groupCount(*args)
+  def choose(*args):
+    return anon.choose(*args)
   @staticmethod
-  def flatMap(*args):
-    return anon.flatMap(*args)
+  def propertyMap(*args):
+    return anon.propertyMap(*args)
   @staticmethod
-  def until(*args):
-    return anon.until(*args)
+  def inject(*args):
+    return anon.inject(*args)
   @staticmethod
-  def __(*args):
-    return anon.__(*args)
+  def drop(*args):
+    return anon.drop(*args)
   @staticmethod
-  def choose(*args):
-    return anon.choose(*args)
+  def times(*args):
+    return anon.times(*args)
   @staticmethod
-  def both(*args):
-    return anon.both(*args)
+  def select(*args):
+    return anon.select(*args)
   @staticmethod
-  def toE(*args):
-    return anon.toE(*args)
+  def _as(*args):
+    return anon.as(*args)
   @staticmethod
   def outE(*args):
     return anon.outE(*args)
@@ -533,6 +535,9 @@ class __(object):
   def inE(*args):
     return anon.inE(*args)
   @staticmethod
+  def toE(*args):
+    return anon.toE(*args)
+  @staticmethod
   def bothE(*args):
     return anon.bothE(*args)
   @staticmethod
@@ -542,6 +547,9 @@ class __(object):
   def outV(*args):
     return anon.outV(*args)
   @staticmethod
+  def both(*args):
+    return anon.both(*args)
+  @staticmethod
   def bothV(*args):
     return anon.bothV(*args)
   @staticmethod
@@ -656,35 +664,14 @@ class __(object):
   def barrier(*args):
     return anon.barrier(*args)
   @staticmethod
-  def propertyMap(*args):
-    return anon.propertyMap(*args)
-  @staticmethod
-  def select(*args):
-    return anon.select(*args)
-  @staticmethod
-  def _as(*args):
-    return anon.as(*args)
-  @staticmethod
-  def property(*args):
-    return anon.property(*args)
-  @staticmethod
-  def inject(*args):
-    return anon.inject(*args)
-  @staticmethod
-  def drop(*args):
-    return anon.drop(*args)
-  @staticmethod
-  def times(*args):
-    return anon.times(*args)
-  @staticmethod
-  def cap(*args):
-    return anon.cap(*args)
-  @staticmethod
   def _is(*args):
     return anon.is(*args)
   @staticmethod
-  def _not(*args):
-    return anon.not(*args)
+  def until(*args):
+    return anon.until(*args)
+  @staticmethod
+  def __(*args):
+    return anon.__(*args)
   @staticmethod
   def constant(*args):
     return anon.constant(*args)
@@ -695,6 +682,21 @@ class __(object):
   def to(*args):
     return anon.to(*args)
   @staticmethod
+  def has(*args):
+    return anon.has(*args)
+  @staticmethod
+  def union(*args):
+    return anon.union(*args)
+  @staticmethod
+  def groupCount(*args):
+    return anon.groupCount(*args)
+  @staticmethod
+  def flatMap(*args):
+    return anon.flatMap(*args)
+  @staticmethod
+  def cap(*args):
+    return anon.cap(*args)
+  @staticmethod
   def wait(*args):
     return anon.wait(*args)
   @staticmethod
@@ -716,3 +718,4 @@ class __(object):
   def notifyAll(*args):
     return anon.notifyAll(*args)
 
+


[19/50] [abbrv] incubator-tinkerpop git commit: Deprecate ScriptExecutor.

Posted by sp...@apache.org.
Deprecate ScriptExecutor.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/b1493b5b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/b1493b5b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/b1493b5b

Branch: refs/heads/TINKERPOP-946
Commit: b1493b5b40434ff82c89790e3142819d569119ed
Parents: 0392734
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Apr 28 07:39:55 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Apr 28 07:39:55 2016 -0400

----------------------------------------------------------------------
 .../org/apache/tinkerpop/gremlin/groovy/jsr223/ScriptExecutor.java | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b1493b5b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/ScriptExecutor.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/ScriptExecutor.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/ScriptExecutor.java
index 1d30a5d..8b0b7fd 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/ScriptExecutor.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/ScriptExecutor.java
@@ -33,7 +33,9 @@ import java.util.List;
  * @author Pavel A. Yaskevich
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  * @author Stephen Mallette (http://stephen.genoprime.com)
+ * @deprecated As of release 3.2.1, replaced by direct execution via gremlin.sh
  */
+@Deprecated
 public class ScriptExecutor {
     public static void main(final String[] arguments) throws IOException {
         if (arguments.length == 0) {


[14/50] [abbrv] incubator-tinkerpop git commit: All the index.asciidocs of the docs now have the TinkerPop logo HREF to tinkerpop.apache.org. Also, they have x.y.z version numbers like the reference docs. Finished up gremlin-language-variants tutorial. K

Posted by sp...@apache.org.
All the index.asciidocs of the docs now have the TinkerPop logo HREF to tinkerpop.apache.org. Also, they have x.y.z version numbers like the reference docs. Finished up gremlin-language-variants tutorial. Ketrina has a banner graphic for the tutorial coming in a couple of weeks that I will CTR add then.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/b5efb2a2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/b5efb2a2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/b5efb2a2

Branch: refs/heads/TINKERPOP-946
Commit: b5efb2a2aa96fcfe77dd31e5d7dba3798f3dd16e
Parents: adce6cf
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Apr 27 08:24:29 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Apr 27 08:24:29 2016 -0600

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  2 +-
 docs/src/dev/developer/index.asciidoc           |  4 +-
 docs/src/dev/provider/index.asciidoc            |  4 +-
 docs/src/reference/index.asciidoc               |  2 +-
 .../tutorials/getting-started/index.asciidoc    |  4 +-
 .../gremlin-language-variants/index.asciidoc    | 59 ++++++++++++--------
 .../the-gremlin-console/index.asciidoc          |  4 +-
 docs/src/upgrade/index.asciidoc                 |  2 +-
 8 files changed, 50 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b5efb2a2/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index d9fc838..634915b 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -108,7 +108,7 @@ This release also includes changes from <<release-3-1-2-incubating, 3.1.2-incuba
 * Added `ScriptTraversal` which allows for delayed compilation of script-based `Traversals`.
 * Simplified `VertexProgram` implementations with a `PureTraversal`-model and deprecated `ConfigurationTraversal`.
 * Simplified script-based `Traversals` via `ScriptTraversal` and deprecated `TraversalScriptFunction` and `TraversalScriptHelper`.
-* Added `TimesModulating` interface which allows the `Step` to decicde how a `times()`-modulation should be handled.
+* Added `TimesModulating` interface which allows the `Step` to decide how a `times()`-modulation should be handled.
 * Added `ByModulating` interface which allows the `Step` to decide how a `by()`-modulation should be handled. (*breaking*)
 * Simplified the `by()`-modulation patterns of `OrderGlobalStep` and `OrderLocalStep`.
 * Added `GraphComputerTest.shouldSupportPreExistingComputeKeys()` to ensure existing compute keys are "revived." (*breaking*)

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b5efb2a2/docs/src/dev/developer/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/developer/index.asciidoc b/docs/src/dev/developer/index.asciidoc
index a9eb1f3..aa01c6e 100644
--- a/docs/src/dev/developer/index.asciidoc
+++ b/docs/src/dev/developer/index.asciidoc
@@ -14,7 +14,9 @@ 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.
 ////
-image::apache-tinkerpop-logo.png[width=500]
+image::apache-tinkerpop-logo.png[width=500,link="http://tinkerpop.apache.org"]
+
+*x.y.z*
 
 :toc-position: left
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b5efb2a2/docs/src/dev/provider/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/provider/index.asciidoc b/docs/src/dev/provider/index.asciidoc
index f816fe1..675b1c3 100644
--- a/docs/src/dev/provider/index.asciidoc
+++ b/docs/src/dev/provider/index.asciidoc
@@ -14,7 +14,9 @@ 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.
 ////
-image::apache-tinkerpop-logo.png[width=500]
+image::apache-tinkerpop-logo.png[width=500,link="http://tinkerpop.apache.org"]
+
+*x.y.z*
 
 :toc-position: left
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b5efb2a2/docs/src/reference/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/index.asciidoc b/docs/src/reference/index.asciidoc
index 0006403..eefbd00 100644
--- a/docs/src/reference/index.asciidoc
+++ b/docs/src/reference/index.asciidoc
@@ -14,7 +14,7 @@ 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.
 ////
-image::apache-tinkerpop-logo.png[width=500]
+image::apache-tinkerpop-logo.png[width=500,link="http://tinkerpop.apache.org"]
 
 *x.y.z*
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b5efb2a2/docs/src/tutorials/getting-started/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/tutorials/getting-started/index.asciidoc b/docs/src/tutorials/getting-started/index.asciidoc
index 7b82751..fd07ef4 100644
--- a/docs/src/tutorials/getting-started/index.asciidoc
+++ b/docs/src/tutorials/getting-started/index.asciidoc
@@ -15,7 +15,9 @@ See the License for the specific language governing permissions and
 limitations under the License.
 ////
 
-image::apache-tinkerpop-logo.png[width=500]
+image::apache-tinkerpop-logo.png[width=500,link="http://tinkerpop.apache.org"]
+
+*x.y.z*
 
 Getting Started
 ---------------

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b5efb2a2/docs/src/tutorials/gremlin-language-variants/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/tutorials/gremlin-language-variants/index.asciidoc b/docs/src/tutorials/gremlin-language-variants/index.asciidoc
index b35a671..2098175 100644
--- a/docs/src/tutorials/gremlin-language-variants/index.asciidoc
+++ b/docs/src/tutorials/gremlin-language-variants/index.asciidoc
@@ -17,6 +17,8 @@ limitations under the License.
 
 image::apache-tinkerpop-logo.png[width=500,link="http://tinkerpop.apache.org"]
 
+*x.y.z*
+
 Gremlin Language Variants
 -------------------------
 
@@ -38,20 +40,23 @@ source code generation, and virtual machines.
 public class MyApplication {
 
   public static void run(final String[] args) {
+
     // assumes args[0] is a configuration file location
     Graph graph = GraphFactory.open(args[0]);
     GraphTraversalSource g = graph.traversal();
 
-    // assumes that args[1] is a vertex id
-    double averageRating =
-      g.V(args[1]).out("created").inE("rated").
-        values("stars").mean().next();
-
-    String personName = g.V(args[1]).values("name").next();
-
-    System.out.println("Average rating of " + personName + " projects is: " + averageRating);
+    // assumes that args[1] and args[2] are range boundaries
+    Iterator<Map<String,Double>> result =
+      g.V().hasLabel("product").
+        order().by("unitPrice", incr).
+        range(Integer.valueOf(args[1]), Integer.valueOf(args[2])).
+        valueMap("name", "unitPrice")
+
+    while(result.hasNext()) {
+      Map<String,Double> map = result.next();
+      System.out.println(map.get("name") + " " + map.get("unitPrice"));
+    }
   }
-
 }
 ----
 
@@ -68,23 +73,29 @@ in other database and analytics query languages.
 public class MyApplication {
 
   public static void run(final String[] args) {
+
     // assumes args[0] is a URI to the database
     Connection connection = DriverManager.getConnection(args[0])
     Statement statement = connection.createStatement();
 
-    // assumes that args[1] is a vertex id
+    // assumes that args[1] and args[2] are range boundaries
     ResultSet result = statement.executeQuery(
-      "SELECT p.name as NAME, AVG(c.stars) as AVERAGE FROM PERSONS p" +
-        "INNER JOIN CREATED c ON c.person = p.id " +
-        "WHERE p.id = '" + args[1] + "'");
-
-    result.next();
-    double averageRating = result.getDouble("AVERAGE");
-    String personName = result.getString("NAME");
-
-    System.out.println("Average rating of " + personName + " projects is: " + averageRating);
+      "SELECT Products.ProductName, Products.UnitPrice \n" +
+      "  FROM (SELECT ROW_NUMBER() \n" +
+      "                   OVER ( \n" +
+      "                     ORDER BY UnitPrice) AS [ROW_NUMBER], \n" +
+      "                 ProductID \n" +
+      "            FROM Products) AS SortedProducts \n" +
+      "      INNER JOIN Products \n" +
+      "              ON Products.ProductID = SortedProducts.ProductID \n" +
+      "   WHERE [ROW_NUMBER] BETWEEN " + args[1] + " AND " + args[2] + " \n" +
+      "ORDER BY [ROW_NUMBER]"
+
+    while(result.hasNext()) {
+      result.next();
+      System.out.println(result.getString("Products.ProductName") + " " + result.getDouble("Products.UnitPrice"));
+    }
   }
-
 }
 ----
 
@@ -759,11 +770,11 @@ semantics will be validated and deemed an accurate representation of Gremlin-Jav
 Conclusion
 ----------
 
-Gremlin is a simple language because it uses two fundamental programming language constructs: function composition
-and function nesting. Because of this foundation, it is relatively easy to implement Gremlin in any modern programming
-language. Two ways of doing this were presented in this tutorial. One using Jython (on the JVM) and one using Python
+Gremlin is a simple language because it uses two fundamental programming language constructs: *function composition*
+and *function nesting*. Because of this foundation, it is relatively easy to implement Gremlin in any modern programming
+language. Two ways of doing this for the Python language were presented in this tutorial. One using Jython (on the JVM) and one using Python
 (on CPython). It is strongly recommended that language variant designers leverage (especially when not on the JVM)
 the reflection-based source code generation technique presented. This method ensures that the language
 variant is always in sync with the corresponding Apache TinkerPop Gremlin-Java release version. Moreover, it reduces
 the chance of missing methods or creating poorly implemented methods. While Gremlin is simple, there are nearly 200
-steps in `GraphTraversal` and thus, its complexity is realized in the diversity of the atomic step operations it supports.
\ No newline at end of file
+steps in `GraphTraversal`. As such, computational means of host language embedding are strongly advised.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b5efb2a2/docs/src/tutorials/the-gremlin-console/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/tutorials/the-gremlin-console/index.asciidoc b/docs/src/tutorials/the-gremlin-console/index.asciidoc
index 8159e92..db6d04e 100644
--- a/docs/src/tutorials/the-gremlin-console/index.asciidoc
+++ b/docs/src/tutorials/the-gremlin-console/index.asciidoc
@@ -15,7 +15,9 @@ See the License for the specific language governing permissions and
 limitations under the License.
 ////
 
-image::apache-tinkerpop-logo.png[width=500]
+image::apache-tinkerpop-logo.png[width=500,link="http://tinkerpop.apache.org"]
+
+*x.y.z*
 
 The Gremlin Console
 -------------------

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b5efb2a2/docs/src/upgrade/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/index.asciidoc b/docs/src/upgrade/index.asciidoc
index ee0c6d3..59dd5e1 100644
--- a/docs/src/upgrade/index.asciidoc
+++ b/docs/src/upgrade/index.asciidoc
@@ -14,7 +14,7 @@ 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.
 ////
-image::apache-tinkerpop-logo.png[width=500]
+image::apache-tinkerpop-logo.png[width=500,link="http://tinkerpop.apache.org"]
 
 :toc-position: left
 


[13/50] [abbrv] incubator-tinkerpop git commit: Merge remote-tracking branch 'origin/tp31'

Posted by sp...@apache.org.
Merge remote-tracking branch 'origin/tp31'


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/a950d95f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/a950d95f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/a950d95f

Branch: refs/heads/TINKERPOP-946
Commit: a950d95fbcccfd3bf2fd29977ab65060bede10d5
Parents: 39f611c 5f9d2f9
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Apr 27 08:40:57 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Apr 27 08:40:57 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                                    |  1 +
 docs/src/dev/developer/contributing.asciidoc          |  3 ---
 .../apache/tinkerpop/gremlin/console/Console.groovy   |  4 +++-
 gremlin-console/src/main/static/NOTICE                | 14 +++++++-------
 gremlin-server/src/main/static/NOTICE                 | 12 ++++++------
 5 files changed, 17 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a950d95f/CHANGELOG.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a950d95f/docs/src/dev/developer/contributing.asciidoc
----------------------------------------------------------------------


[25/50] [abbrv] incubator-tinkerpop git commit: Use -i as this is now the preferred way of starting interactive mode

Posted by sp...@apache.org.
Use -i as this is now the preferred way of starting interactive mode


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/620f4787
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/620f4787
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/620f4787

Branch: refs/heads/TINKERPOP-946
Commit: 620f4787b3b6da01679e2f6b80aa3b1a9693f33a
Parents: 05be605
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Apr 28 14:59:37 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Apr 28 14:59:37 2016 -0400

----------------------------------------------------------------------
 docs/src/tutorials/the-gremlin-console/index.asciidoc | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/620f4787/docs/src/tutorials/the-gremlin-console/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/tutorials/the-gremlin-console/index.asciidoc b/docs/src/tutorials/the-gremlin-console/index.asciidoc
index db6d04e..8a90056 100644
--- a/docs/src/tutorials/the-gremlin-console/index.asciidoc
+++ b/docs/src/tutorials/the-gremlin-console/index.asciidoc
@@ -616,11 +616,12 @@ Display stack trace? [yN] n
 ----
 
 TIP: If you find that you always work with a particular library, consider starting the console with an initialization
-script that prepares your environment for you. An "initialization script" is just a Groovy script that contains the
-initial commands to execute when the console starts.  Following the use case, it would be nice if the initialization
-script contained the `import` statement for the driver and possibly the code to get the `Session` object ready for use.
-Start the Gremlin Console with that script by just adding it as an argument on the command line:
-`bin/gremlin.sh init.groovy`.
+script that prepares your environment for you and start Gremlin Console in
+link:http://tinkerpop.apache.org/docs/x.y.z/reference/#interactive-mode[interactive mode]. An "initialization script"
+is just a Groovy script that contains the initial commands to execute when the console starts.  Following the use case,
+it would be nice if the initialization script contained the `import` statement for the driver and possibly the code to
+get the `Session` object ready for use. Start the Gremlin Console with that script by just adding it as an argument on
+the command line: `bin/gremlin.sh -i init.groovy`.
 
 This use case focused on using a Cassandra related library, but it should be evident that it would be equally
 straightforward to perform this same data dump to link:https://hbase.apache.org/[HBase],


[38/50] [abbrv] incubator-tinkerpop git commit: Merge remote-tracking branch 'origin/TINKERPOP-1268'

Posted by sp...@apache.org.
Merge remote-tracking branch 'origin/TINKERPOP-1268'


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/3225fbc5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/3225fbc5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/3225fbc5

Branch: refs/heads/TINKERPOP-946
Commit: 3225fbc5995156818b73ee757b91768ae7087f00
Parents: 64b09df 1e83a32
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon May 2 14:09:56 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon May 2 14:09:56 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   6 +
 .../src/reference/gremlin-applications.asciidoc |  66 ++++++--
 .../the-gremlin-console/index.asciidoc          |  11 +-
 .../upgrade/release-3.2.x-incubating.asciidoc   |  41 +++++
 gremlin-console/pom.xml                         |   5 +
 gremlin-console/src/main/bin/gremlin.bat        |  41 +----
 gremlin-console/src/main/bin/gremlin.sh         |  19 +--
 .../tinkerpop/gremlin/console/Console.groovy    | 168 +++++++++++++++----
 .../gremlin/groovy/jsr223/ScriptExecutor.java   |   2 +
 9 files changed, 252 insertions(+), 107 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/3225fbc5/CHANGELOG.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/3225fbc5/docs/src/reference/gremlin-applications.asciidoc
----------------------------------------------------------------------