auser-poolparty 1.3.1 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (424) hide show
  1. data/VERSION.yml +1 -1
  2. data/bin/cloud-compile +6 -1
  3. data/config/jeweler.rb +1 -3
  4. data/lib/cloud_providers/cloud_provider_instance.rb +11 -1
  5. data/lib/dependency_resolvers/chef/resources/chef_recipe.rb +51 -0
  6. data/lib/dependency_resolvers/chef.rb +12 -3
  7. data/lib/mixins/callbacks.rb +6 -2
  8. data/lib/poolparty/plugins/apache2/passenger_site.rb +2 -2
  9. data/test/fixtures/chef/recipes/sudo/attributes/sudoers.rb +30 -0
  10. data/test/fixtures/chef/recipes/sudo/recipes/default.rb +33 -0
  11. data/test/fixtures/chef/recipes/sudo/templates/default/sudoers.erb +22 -0
  12. data/test/lib/dependency_resolvers/chef/resources/chef_recipe_test.rb +21 -0
  13. data/test/lib/dependency_resolvers/chef_test.rb +8 -1
  14. data/vendor/gems/thrift/CHANGELOG +1 -0
  15. data/vendor/gems/thrift/Makefile.am +25 -6
  16. data/vendor/gems/thrift/Manifest +81 -0
  17. data/vendor/gems/thrift/README +17 -111
  18. data/vendor/gems/thrift/Rakefile +104 -0
  19. data/vendor/gems/thrift/{lib/hs/Setup.lhs → benchmark/Benchmark.thrift} +5 -4
  20. data/vendor/gems/thrift/benchmark/benchmark.rb +271 -0
  21. data/vendor/gems/thrift/benchmark/client.rb +74 -0
  22. data/vendor/gems/thrift/benchmark/server.rb +82 -0
  23. data/vendor/gems/thrift/benchmark/thin_server.rb +44 -0
  24. data/vendor/gems/thrift/ext/binary_protocol_accelerated.c +474 -0
  25. data/vendor/gems/thrift/{lib/cocoa/src/protocol/TProtocolException.m → ext/binary_protocol_accelerated.h} +1 -4
  26. data/vendor/gems/thrift/ext/compact_protocol.c +665 -0
  27. data/vendor/gems/thrift/{lib/cocoa/src/protocol/TProtocolException.h → ext/compact_protocol.h} +1 -6
  28. data/vendor/gems/thrift/ext/constants.h +95 -0
  29. data/vendor/gems/thrift/{contrib/fb303/Makefile.am → ext/extconf.rb} +8 -13
  30. data/vendor/gems/thrift/{compiler/cpp/src/platform.h → ext/macros.h} +18 -13
  31. data/vendor/gems/thrift/ext/memory_buffer.c +76 -0
  32. data/vendor/gems/thrift/{lib/csharp/src/Protocol/TMessageType.cs → ext/memory_buffer.h} +2 -13
  33. data/vendor/gems/thrift/ext/protocol.c +185 -0
  34. data/vendor/gems/thrift/{lib/csharp/src/TProcessor.cs → ext/protocol.h} +2 -11
  35. data/vendor/gems/thrift/ext/struct.c +606 -0
  36. data/vendor/gems/thrift/ext/struct.h +67 -0
  37. data/vendor/gems/thrift/ext/thrift_native.c +194 -0
  38. data/vendor/gems/thrift/lib/thrift/client.rb +62 -0
  39. data/vendor/gems/thrift/{contrib/fb303/py/fb303_scripts/__init__.py → lib/thrift/core_ext/fixnum.rb} +13 -4
  40. data/vendor/gems/thrift/{contrib/fb303/global_footer.mk → lib/thrift/core_ext.rb} +4 -2
  41. data/vendor/gems/thrift/lib/thrift/exceptions.rb +82 -0
  42. data/vendor/gems/thrift/lib/thrift/processor.rb +57 -0
  43. data/vendor/gems/thrift/lib/thrift/protocol/base_protocol.rb +290 -0
  44. data/vendor/gems/thrift/lib/thrift/protocol/binary_protocol.rb +225 -0
  45. data/vendor/gems/thrift/{cleanup.sh → lib/thrift/protocol/binary_protocol_accelerated.rb} +19 -42
  46. data/vendor/gems/thrift/lib/thrift/protocol/compact_protocol.rb +422 -0
  47. data/vendor/gems/thrift/lib/thrift/serializer/deserializer.rb +33 -0
  48. data/vendor/gems/thrift/{bootstrap.sh → lib/thrift/serializer/serializer.rb} +17 -18
  49. data/vendor/gems/thrift/lib/thrift/server/base_server.rb +31 -0
  50. data/vendor/gems/thrift/lib/thrift/server/mongrel_http_server.rb +58 -0
  51. data/vendor/gems/thrift/lib/thrift/server/nonblocking_server.rb +296 -0
  52. data/vendor/gems/thrift/lib/thrift/server/simple_server.rb +43 -0
  53. data/vendor/gems/thrift/lib/thrift/server/thread_pool_server.rb +75 -0
  54. data/vendor/gems/thrift/lib/thrift/server/threaded_server.rb +47 -0
  55. data/vendor/gems/thrift/lib/thrift/struct.rb +298 -0
  56. data/vendor/gems/thrift/{contrib/fb303/bootstrap.sh → lib/thrift/thrift_native.rb} +5 -7
  57. data/vendor/gems/thrift/lib/{erl/Makefile → thrift/transport/base_server_transport.rb} +20 -20
  58. data/vendor/gems/thrift/lib/thrift/transport/base_transport.rb +70 -0
  59. data/vendor/gems/thrift/lib/thrift/transport/buffered_transport.rb +77 -0
  60. data/vendor/gems/thrift/lib/thrift/transport/framed_transport.rb +90 -0
  61. data/vendor/gems/thrift/lib/thrift/transport/http_client_transport.rb +45 -0
  62. data/vendor/gems/thrift/lib/thrift/transport/io_stream_transport.rb +39 -0
  63. data/vendor/gems/thrift/lib/thrift/transport/memory_buffer_transport.rb +96 -0
  64. data/vendor/gems/thrift/lib/thrift/transport/server_socket.rb +63 -0
  65. data/vendor/gems/thrift/lib/thrift/transport/socket.rb +136 -0
  66. data/vendor/gems/thrift/lib/{java/Makefile.am → thrift/transport/unix_server_socket.rb} +39 -17
  67. data/vendor/gems/thrift/{contrib/fb303/global_header.mk → lib/thrift/transport/unix_socket.rb} +23 -21
  68. data/vendor/gems/thrift/lib/thrift/types.rb +101 -0
  69. data/vendor/gems/thrift/lib/thrift.rb +59 -0
  70. data/vendor/gems/thrift/script/proto_benchmark.rb +121 -0
  71. data/vendor/gems/thrift/{lib/Makefile.am → script/read_struct.rb} +24 -36
  72. data/vendor/gems/thrift/{contrib/fb303/py/setup.py → script/write_struct.rb} +8 -5
  73. data/vendor/gems/thrift/setup.rb +1585 -0
  74. data/vendor/gems/thrift/spec/ThriftSpec.thrift +84 -0
  75. data/vendor/gems/thrift/spec/base_protocol_spec.rb +160 -0
  76. data/vendor/gems/thrift/spec/base_transport_spec.rb +351 -0
  77. data/vendor/gems/thrift/{contrib/fb303/py/Makefile.am → spec/binary_protocol_accelerated_spec.rb} +22 -25
  78. data/vendor/gems/thrift/spec/binary_protocol_spec.rb +63 -0
  79. data/vendor/gems/thrift/spec/binary_protocol_spec_shared.rb +375 -0
  80. data/vendor/gems/thrift/spec/client_spec.rb +100 -0
  81. data/vendor/gems/thrift/spec/compact_protocol_spec.rb +117 -0
  82. data/vendor/gems/thrift/spec/exception_spec.rb +142 -0
  83. data/vendor/gems/thrift/spec/http_client_spec.rb +49 -0
  84. data/vendor/gems/thrift/spec/mongrel_http_server_spec.rb +117 -0
  85. data/vendor/gems/thrift/spec/nonblocking_server_spec.rb +265 -0
  86. data/vendor/gems/thrift/spec/processor_spec.rb +83 -0
  87. data/vendor/gems/thrift/spec/serializer_spec.rb +69 -0
  88. data/vendor/gems/thrift/spec/server_socket_spec.rb +80 -0
  89. data/vendor/gems/thrift/spec/server_spec.rb +160 -0
  90. data/vendor/gems/thrift/spec/socket_spec.rb +61 -0
  91. data/vendor/gems/thrift/spec/socket_spec_shared.rb +104 -0
  92. data/vendor/gems/thrift/spec/spec_helper.rb +60 -0
  93. data/vendor/gems/thrift/spec/struct_spec.rb +252 -0
  94. data/vendor/gems/thrift/spec/types_spec.rb +116 -0
  95. data/vendor/gems/thrift/spec/unix_socket_spec.rb +108 -0
  96. data/vendor/gems/trollop/FAQ.txt +84 -0
  97. data/vendor/gems/trollop/History.txt +101 -0
  98. data/vendor/gems/trollop/Manifest.txt +7 -0
  99. data/vendor/gems/trollop/README.txt +40 -0
  100. data/vendor/gems/trollop/Rakefile +36 -0
  101. data/vendor/gems/trollop/lib/trollop.rb +739 -0
  102. data/vendor/gems/trollop/release-script.txt +13 -0
  103. data/vendor/gems/trollop/test/test_trollop.rb +1048 -0
  104. data/vendor/gems/trollop/www/index.html +172 -0
  105. metadata +123 -347
  106. data/vendor/gems/thrift/CHANGES +0 -35
  107. data/vendor/gems/thrift/CONTRIBUTORS +0 -77
  108. data/vendor/gems/thrift/DISCLAIMER +0 -6
  109. data/vendor/gems/thrift/LICENSE +0 -202
  110. data/vendor/gems/thrift/NEWS +0 -79
  111. data/vendor/gems/thrift/NOTICE +0 -26
  112. data/vendor/gems/thrift/aclocal/ax_boost_base.m4 +0 -198
  113. data/vendor/gems/thrift/aclocal/ax_javac_and_java.m4 +0 -107
  114. data/vendor/gems/thrift/aclocal/ax_lib_event.m4 +0 -194
  115. data/vendor/gems/thrift/aclocal/ax_lib_zlib.m4 +0 -173
  116. data/vendor/gems/thrift/aclocal/ax_signed_right_shift.m4 +0 -127
  117. data/vendor/gems/thrift/aclocal/ax_thrift_internal.m4 +0 -39
  118. data/vendor/gems/thrift/compiler/cpp/Makefile.am +0 -136
  119. data/vendor/gems/thrift/compiler/cpp/README +0 -39
  120. data/vendor/gems/thrift/compiler/cpp/src/generate/t_cocoa_generator.cc +0 -2331
  121. data/vendor/gems/thrift/compiler/cpp/src/generate/t_cpp_generator.cc +0 -3003
  122. data/vendor/gems/thrift/compiler/cpp/src/generate/t_csharp_generator.cc +0 -1700
  123. data/vendor/gems/thrift/compiler/cpp/src/generate/t_erl_generator.cc +0 -932
  124. data/vendor/gems/thrift/compiler/cpp/src/generate/t_generator.cc +0 -173
  125. data/vendor/gems/thrift/compiler/cpp/src/generate/t_generator.h +0 -321
  126. data/vendor/gems/thrift/compiler/cpp/src/generate/t_hs_generator.cc +0 -1445
  127. data/vendor/gems/thrift/compiler/cpp/src/generate/t_html_generator.cc +0 -637
  128. data/vendor/gems/thrift/compiler/cpp/src/generate/t_java_generator.cc +0 -3069
  129. data/vendor/gems/thrift/compiler/cpp/src/generate/t_ocaml_generator.cc +0 -1673
  130. data/vendor/gems/thrift/compiler/cpp/src/generate/t_oop_generator.h +0 -77
  131. data/vendor/gems/thrift/compiler/cpp/src/generate/t_perl_generator.cc +0 -1812
  132. data/vendor/gems/thrift/compiler/cpp/src/generate/t_php_generator.cc +0 -2281
  133. data/vendor/gems/thrift/compiler/cpp/src/generate/t_py_generator.cc +0 -2310
  134. data/vendor/gems/thrift/compiler/cpp/src/generate/t_rb_generator.cc +0 -1114
  135. data/vendor/gems/thrift/compiler/cpp/src/generate/t_st_generator.cc +0 -1071
  136. data/vendor/gems/thrift/compiler/cpp/src/generate/t_xsd_generator.cc +0 -354
  137. data/vendor/gems/thrift/compiler/cpp/src/globals.h +0 -117
  138. data/vendor/gems/thrift/compiler/cpp/src/main.cc +0 -1207
  139. data/vendor/gems/thrift/compiler/cpp/src/main.h +0 -103
  140. data/vendor/gems/thrift/compiler/cpp/src/md5.c +0 -381
  141. data/vendor/gems/thrift/compiler/cpp/src/md5.h +0 -91
  142. data/vendor/gems/thrift/compiler/cpp/src/parse/t_base_type.h +0 -137
  143. data/vendor/gems/thrift/compiler/cpp/src/parse/t_const.h +0 -59
  144. data/vendor/gems/thrift/compiler/cpp/src/parse/t_const_value.h +0 -121
  145. data/vendor/gems/thrift/compiler/cpp/src/parse/t_container.h +0 -56
  146. data/vendor/gems/thrift/compiler/cpp/src/parse/t_doc.h +0 -51
  147. data/vendor/gems/thrift/compiler/cpp/src/parse/t_enum.h +0 -59
  148. data/vendor/gems/thrift/compiler/cpp/src/parse/t_enum_value.h +0 -64
  149. data/vendor/gems/thrift/compiler/cpp/src/parse/t_field.h +0 -150
  150. data/vendor/gems/thrift/compiler/cpp/src/parse/t_function.h +0 -93
  151. data/vendor/gems/thrift/compiler/cpp/src/parse/t_list.h +0 -56
  152. data/vendor/gems/thrift/compiler/cpp/src/parse/t_map.h +0 -64
  153. data/vendor/gems/thrift/compiler/cpp/src/parse/t_program.h +0 -223
  154. data/vendor/gems/thrift/compiler/cpp/src/parse/t_scope.h +0 -86
  155. data/vendor/gems/thrift/compiler/cpp/src/parse/t_service.h +0 -68
  156. data/vendor/gems/thrift/compiler/cpp/src/parse/t_set.h +0 -55
  157. data/vendor/gems/thrift/compiler/cpp/src/parse/t_struct.h +0 -127
  158. data/vendor/gems/thrift/compiler/cpp/src/parse/t_type.h +0 -176
  159. data/vendor/gems/thrift/compiler/cpp/src/parse/t_typedef.h +0 -70
  160. data/vendor/gems/thrift/compiler/cpp/src/thriftl.ll +0 -303
  161. data/vendor/gems/thrift/compiler/cpp/src/thrifty.yy +0 -1140
  162. data/vendor/gems/thrift/configure.ac +0 -255
  163. data/vendor/gems/thrift/contrib/fb303/LICENSE +0 -16
  164. data/vendor/gems/thrift/contrib/fb303/README +0 -37
  165. data/vendor/gems/thrift/contrib/fb303/acinclude.m4 +0 -258
  166. data/vendor/gems/thrift/contrib/fb303/aclocal/ax_boost_base.m4 +0 -198
  167. data/vendor/gems/thrift/contrib/fb303/configure.ac +0 -115
  168. data/vendor/gems/thrift/contrib/fb303/cpp/FacebookBase.cpp +0 -124
  169. data/vendor/gems/thrift/contrib/fb303/cpp/FacebookBase.h +0 -103
  170. data/vendor/gems/thrift/contrib/fb303/cpp/Makefile.am +0 -84
  171. data/vendor/gems/thrift/contrib/fb303/cpp/ServiceTracker.cpp +0 -481
  172. data/vendor/gems/thrift/contrib/fb303/cpp/ServiceTracker.h +0 -215
  173. data/vendor/gems/thrift/contrib/fb303/if/fb303.thrift +0 -112
  174. data/vendor/gems/thrift/contrib/fb303/java/FacebookBase.java +0 -103
  175. data/vendor/gems/thrift/contrib/fb303/java/build.xml +0 -84
  176. data/vendor/gems/thrift/contrib/fb303/php/FacebookBase.php +0 -89
  177. data/vendor/gems/thrift/contrib/fb303/py/fb303/FacebookBase.py +0 -82
  178. data/vendor/gems/thrift/contrib/fb303/py/fb303_scripts/fb303_simple_mgmt.py +0 -195
  179. data/vendor/gems/thrift/contrib/thrift.el +0 -126
  180. data/vendor/gems/thrift/contrib/thrift.spec +0 -206
  181. data/vendor/gems/thrift/contrib/thrift.vim +0 -91
  182. data/vendor/gems/thrift/contrib/thrift_dump.cpp +0 -91
  183. data/vendor/gems/thrift/doc/lgpl-2.1.txt +0 -504
  184. data/vendor/gems/thrift/doc/otp-base-license.txt +0 -20
  185. data/vendor/gems/thrift/doc/thrift.bnf +0 -96
  186. data/vendor/gems/thrift/doc/thrift.tex +0 -1057
  187. data/vendor/gems/thrift/lib/cocoa/README +0 -21
  188. data/vendor/gems/thrift/lib/cocoa/src/TApplicationException.h +0 -44
  189. data/vendor/gems/thrift/lib/cocoa/src/TApplicationException.m +0 -130
  190. data/vendor/gems/thrift/lib/cocoa/src/TException.h +0 -34
  191. data/vendor/gems/thrift/lib/cocoa/src/TException.m +0 -64
  192. data/vendor/gems/thrift/lib/cocoa/src/TProcessor.h +0 -29
  193. data/vendor/gems/thrift/lib/cocoa/src/TProcessorFactory.h +0 -27
  194. data/vendor/gems/thrift/lib/cocoa/src/TSharedProcessorFactory.h +0 -27
  195. data/vendor/gems/thrift/lib/cocoa/src/TSharedProcessorFactory.m +0 -51
  196. data/vendor/gems/thrift/lib/cocoa/src/protocol/TBinaryProtocol.h +0 -51
  197. data/vendor/gems/thrift/lib/cocoa/src/protocol/TBinaryProtocol.m +0 -477
  198. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocol.h +0 -148
  199. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolFactory.h +0 -29
  200. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolUtil.h +0 -29
  201. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolUtil.m +0 -104
  202. data/vendor/gems/thrift/lib/cocoa/src/server/TSocketServer.h +0 -50
  203. data/vendor/gems/thrift/lib/cocoa/src/server/TSocketServer.m +0 -153
  204. data/vendor/gems/thrift/lib/cocoa/src/transport/THTTPClient.h +0 -42
  205. data/vendor/gems/thrift/lib/cocoa/src/transport/THTTPClient.m +0 -159
  206. data/vendor/gems/thrift/lib/cocoa/src/transport/TNSFileHandleTransport.h +0 -35
  207. data/vendor/gems/thrift/lib/cocoa/src/transport/TNSFileHandleTransport.m +0 -91
  208. data/vendor/gems/thrift/lib/cocoa/src/transport/TNSStreamTransport.h +0 -38
  209. data/vendor/gems/thrift/lib/cocoa/src/transport/TNSStreamTransport.m +0 -89
  210. data/vendor/gems/thrift/lib/cocoa/src/transport/TSocketClient.h +0 -32
  211. data/vendor/gems/thrift/lib/cocoa/src/transport/TSocketClient.m +0 -58
  212. data/vendor/gems/thrift/lib/cocoa/src/transport/TTransport.h +0 -36
  213. data/vendor/gems/thrift/lib/cocoa/src/transport/TTransportException.h +0 -30
  214. data/vendor/gems/thrift/lib/cocoa/src/transport/TTransportException.m +0 -43
  215. data/vendor/gems/thrift/lib/cpp/Makefile.am +0 -158
  216. data/vendor/gems/thrift/lib/cpp/README +0 -67
  217. data/vendor/gems/thrift/lib/cpp/src/TLogging.h +0 -163
  218. data/vendor/gems/thrift/lib/cpp/src/TProcessor.h +0 -53
  219. data/vendor/gems/thrift/lib/cpp/src/TReflectionLocal.h +0 -96
  220. data/vendor/gems/thrift/lib/cpp/src/Thrift.cpp +0 -148
  221. data/vendor/gems/thrift/lib/cpp/src/Thrift.h +0 -191
  222. data/vendor/gems/thrift/lib/cpp/src/concurrency/Exception.h +0 -60
  223. data/vendor/gems/thrift/lib/cpp/src/concurrency/FunctionRunner.h +0 -77
  224. data/vendor/gems/thrift/lib/cpp/src/concurrency/Monitor.cpp +0 -137
  225. data/vendor/gems/thrift/lib/cpp/src/concurrency/Monitor.h +0 -84
  226. data/vendor/gems/thrift/lib/cpp/src/concurrency/Mutex.cpp +0 -160
  227. data/vendor/gems/thrift/lib/cpp/src/concurrency/Mutex.h +0 -114
  228. data/vendor/gems/thrift/lib/cpp/src/concurrency/PosixThreadFactory.cpp +0 -314
  229. data/vendor/gems/thrift/lib/cpp/src/concurrency/PosixThreadFactory.h +0 -130
  230. data/vendor/gems/thrift/lib/cpp/src/concurrency/Thread.h +0 -125
  231. data/vendor/gems/thrift/lib/cpp/src/concurrency/ThreadManager.cpp +0 -493
  232. data/vendor/gems/thrift/lib/cpp/src/concurrency/ThreadManager.h +0 -169
  233. data/vendor/gems/thrift/lib/cpp/src/concurrency/TimerManager.cpp +0 -284
  234. data/vendor/gems/thrift/lib/cpp/src/concurrency/TimerManager.h +0 -122
  235. data/vendor/gems/thrift/lib/cpp/src/concurrency/Util.cpp +0 -55
  236. data/vendor/gems/thrift/lib/cpp/src/concurrency/Util.h +0 -100
  237. data/vendor/gems/thrift/lib/cpp/src/concurrency/test/Tests.cpp +0 -155
  238. data/vendor/gems/thrift/lib/cpp/src/concurrency/test/ThreadFactoryTests.h +0 -354
  239. data/vendor/gems/thrift/lib/cpp/src/concurrency/test/ThreadManagerTests.h +0 -379
  240. data/vendor/gems/thrift/lib/cpp/src/concurrency/test/TimerManagerTests.h +0 -155
  241. data/vendor/gems/thrift/lib/cpp/src/processor/PeekProcessor.cpp +0 -122
  242. data/vendor/gems/thrift/lib/cpp/src/processor/PeekProcessor.h +0 -77
  243. data/vendor/gems/thrift/lib/cpp/src/processor/StatsProcessor.h +0 -264
  244. data/vendor/gems/thrift/lib/cpp/src/protocol/TBase64Utils.cpp +0 -79
  245. data/vendor/gems/thrift/lib/cpp/src/protocol/TBase64Utils.h +0 -42
  246. data/vendor/gems/thrift/lib/cpp/src/protocol/TBinaryProtocol.cpp +0 -394
  247. data/vendor/gems/thrift/lib/cpp/src/protocol/TBinaryProtocol.h +0 -254
  248. data/vendor/gems/thrift/lib/cpp/src/protocol/TCompactProtocol.cpp +0 -736
  249. data/vendor/gems/thrift/lib/cpp/src/protocol/TCompactProtocol.h +0 -279
  250. data/vendor/gems/thrift/lib/cpp/src/protocol/TDebugProtocol.cpp +0 -346
  251. data/vendor/gems/thrift/lib/cpp/src/protocol/TDebugProtocol.h +0 -225
  252. data/vendor/gems/thrift/lib/cpp/src/protocol/TDenseProtocol.cpp +0 -762
  253. data/vendor/gems/thrift/lib/cpp/src/protocol/TDenseProtocol.h +0 -253
  254. data/vendor/gems/thrift/lib/cpp/src/protocol/TJSONProtocol.cpp +0 -998
  255. data/vendor/gems/thrift/lib/cpp/src/protocol/TJSONProtocol.h +0 -340
  256. data/vendor/gems/thrift/lib/cpp/src/protocol/TOneWayProtocol.h +0 -304
  257. data/vendor/gems/thrift/lib/cpp/src/protocol/TProtocol.h +0 -438
  258. data/vendor/gems/thrift/lib/cpp/src/protocol/TProtocolException.h +0 -104
  259. data/vendor/gems/thrift/lib/cpp/src/protocol/TProtocolTap.h +0 -187
  260. data/vendor/gems/thrift/lib/cpp/src/server/TNonblockingServer.cpp +0 -750
  261. data/vendor/gems/thrift/lib/cpp/src/server/TNonblockingServer.h +0 -435
  262. data/vendor/gems/thrift/lib/cpp/src/server/TServer.cpp +0 -38
  263. data/vendor/gems/thrift/lib/cpp/src/server/TServer.h +0 -213
  264. data/vendor/gems/thrift/lib/cpp/src/server/TSimpleServer.cpp +0 -118
  265. data/vendor/gems/thrift/lib/cpp/src/server/TSimpleServer.h +0 -70
  266. data/vendor/gems/thrift/lib/cpp/src/server/TThreadPoolServer.cpp +0 -217
  267. data/vendor/gems/thrift/lib/cpp/src/server/TThreadPoolServer.h +0 -79
  268. data/vendor/gems/thrift/lib/cpp/src/server/TThreadedServer.cpp +0 -243
  269. data/vendor/gems/thrift/lib/cpp/src/server/TThreadedServer.h +0 -74
  270. data/vendor/gems/thrift/lib/cpp/src/transport/TBufferTransports.cpp +0 -370
  271. data/vendor/gems/thrift/lib/cpp/src/transport/TBufferTransports.h +0 -667
  272. data/vendor/gems/thrift/lib/cpp/src/transport/TFDTransport.cpp +0 -77
  273. data/vendor/gems/thrift/lib/cpp/src/transport/TFDTransport.h +0 -73
  274. data/vendor/gems/thrift/lib/cpp/src/transport/TFileTransport.cpp +0 -953
  275. data/vendor/gems/thrift/lib/cpp/src/transport/TFileTransport.h +0 -442
  276. data/vendor/gems/thrift/lib/cpp/src/transport/THttpClient.cpp +0 -348
  277. data/vendor/gems/thrift/lib/cpp/src/transport/THttpClient.h +0 -111
  278. data/vendor/gems/thrift/lib/cpp/src/transport/TServerSocket.cpp +0 -368
  279. data/vendor/gems/thrift/lib/cpp/src/transport/TServerSocket.h +0 -76
  280. data/vendor/gems/thrift/lib/cpp/src/transport/TServerTransport.h +0 -92
  281. data/vendor/gems/thrift/lib/cpp/src/transport/TShortReadTransport.h +0 -96
  282. data/vendor/gems/thrift/lib/cpp/src/transport/TSimpleFileTransport.cpp +0 -54
  283. data/vendor/gems/thrift/lib/cpp/src/transport/TSimpleFileTransport.h +0 -41
  284. data/vendor/gems/thrift/lib/cpp/src/transport/TSocket.cpp +0 -591
  285. data/vendor/gems/thrift/lib/cpp/src/transport/TSocket.h +0 -242
  286. data/vendor/gems/thrift/lib/cpp/src/transport/TSocketPool.cpp +0 -235
  287. data/vendor/gems/thrift/lib/cpp/src/transport/TSocketPool.h +0 -191
  288. data/vendor/gems/thrift/lib/cpp/src/transport/TTransport.h +0 -224
  289. data/vendor/gems/thrift/lib/cpp/src/transport/TTransportException.cpp +0 -31
  290. data/vendor/gems/thrift/lib/cpp/src/transport/TTransportException.h +0 -117
  291. data/vendor/gems/thrift/lib/cpp/src/transport/TTransportUtils.cpp +0 -178
  292. data/vendor/gems/thrift/lib/cpp/src/transport/TTransportUtils.h +0 -287
  293. data/vendor/gems/thrift/lib/cpp/src/transport/TZlibTransport.cpp +0 -299
  294. data/vendor/gems/thrift/lib/cpp/src/transport/TZlibTransport.h +0 -219
  295. data/vendor/gems/thrift/lib/cpp/thrift-nb.pc.in +0 -30
  296. data/vendor/gems/thrift/lib/cpp/thrift-z.pc.in +0 -30
  297. data/vendor/gems/thrift/lib/cpp/thrift.pc.in +0 -29
  298. data/vendor/gems/thrift/lib/csharp/Makefile.am +0 -70
  299. data/vendor/gems/thrift/lib/csharp/README +0 -26
  300. data/vendor/gems/thrift/lib/csharp/ThriftMSBuildTask/Properties/AssemblyInfo.cs +0 -55
  301. data/vendor/gems/thrift/lib/csharp/ThriftMSBuildTask/ThriftBuild.cs +0 -242
  302. data/vendor/gems/thrift/lib/csharp/ThriftMSBuildTask/ThriftMSBuildTask.csproj +0 -62
  303. data/vendor/gems/thrift/lib/csharp/src/Collections/THashSet.cs +0 -142
  304. data/vendor/gems/thrift/lib/csharp/src/Protocol/TBase.cs +0 -34
  305. data/vendor/gems/thrift/lib/csharp/src/Protocol/TBinaryProtocol.cs +0 -392
  306. data/vendor/gems/thrift/lib/csharp/src/Protocol/TField.cs +0 -58
  307. data/vendor/gems/thrift/lib/csharp/src/Protocol/TList.cs +0 -50
  308. data/vendor/gems/thrift/lib/csharp/src/Protocol/TMap.cs +0 -58
  309. data/vendor/gems/thrift/lib/csharp/src/Protocol/TMessage.cs +0 -58
  310. data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocol.cs +0 -87
  311. data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocolException.cs +0 -61
  312. data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocolFactory.cs +0 -29
  313. data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocolUtil.cs +0 -94
  314. data/vendor/gems/thrift/lib/csharp/src/Protocol/TSet.cs +0 -50
  315. data/vendor/gems/thrift/lib/csharp/src/Protocol/TStruct.cs +0 -42
  316. data/vendor/gems/thrift/lib/csharp/src/Protocol/TType.cs +0 -40
  317. data/vendor/gems/thrift/lib/csharp/src/Server/TServer.cs +0 -135
  318. data/vendor/gems/thrift/lib/csharp/src/Server/TSimpleServer.cs +0 -148
  319. data/vendor/gems/thrift/lib/csharp/src/Server/TThreadPoolServer.cs +0 -186
  320. data/vendor/gems/thrift/lib/csharp/src/Server/TThreadedServer.cs +0 -234
  321. data/vendor/gems/thrift/lib/csharp/src/TApplicationException.cs +0 -131
  322. data/vendor/gems/thrift/lib/csharp/src/Thrift.csproj +0 -73
  323. data/vendor/gems/thrift/lib/csharp/src/Thrift.sln +0 -35
  324. data/vendor/gems/thrift/lib/csharp/src/Transport/TBufferedTransport.cs +0 -100
  325. data/vendor/gems/thrift/lib/csharp/src/Transport/TServerSocket.cs +0 -157
  326. data/vendor/gems/thrift/lib/csharp/src/Transport/TServerTransport.cs +0 -39
  327. data/vendor/gems/thrift/lib/csharp/src/Transport/TSocket.cs +0 -144
  328. data/vendor/gems/thrift/lib/csharp/src/Transport/TStreamTransport.cs +0 -103
  329. data/vendor/gems/thrift/lib/csharp/src/Transport/TTransport.cs +0 -66
  330. data/vendor/gems/thrift/lib/csharp/src/Transport/TTransportException.cs +0 -64
  331. data/vendor/gems/thrift/lib/csharp/src/Transport/TTransportFactory.cs +0 -38
  332. data/vendor/gems/thrift/lib/erl/README +0 -56
  333. data/vendor/gems/thrift/lib/erl/build/beamver +0 -59
  334. data/vendor/gems/thrift/lib/erl/build/buildtargets.mk +0 -15
  335. data/vendor/gems/thrift/lib/erl/build/colors.mk +0 -24
  336. data/vendor/gems/thrift/lib/erl/build/docs.mk +0 -12
  337. data/vendor/gems/thrift/lib/erl/build/mime.types +0 -98
  338. data/vendor/gems/thrift/lib/erl/build/otp.mk +0 -146
  339. data/vendor/gems/thrift/lib/erl/build/otp_subdir.mk +0 -85
  340. data/vendor/gems/thrift/lib/erl/build/raw_test.mk +0 -29
  341. data/vendor/gems/thrift/lib/erl/include/thrift_constants.hrl +0 -54
  342. data/vendor/gems/thrift/lib/erl/include/thrift_protocol.hrl +0 -31
  343. data/vendor/gems/thrift/lib/erl/src/Makefile +0 -116
  344. data/vendor/gems/thrift/lib/erl/src/test_handler.erl +0 -26
  345. data/vendor/gems/thrift/lib/erl/src/test_service.erl +0 -29
  346. data/vendor/gems/thrift/lib/erl/src/thrift.app.src +0 -44
  347. data/vendor/gems/thrift/lib/erl/src/thrift.appup.src +0 -1
  348. data/vendor/gems/thrift/lib/erl/src/thrift_base64_transport.erl +0 -64
  349. data/vendor/gems/thrift/lib/erl/src/thrift_binary_protocol.erl +0 -325
  350. data/vendor/gems/thrift/lib/erl/src/thrift_buffered_transport.erl +0 -180
  351. data/vendor/gems/thrift/lib/erl/src/thrift_client.erl +0 -384
  352. data/vendor/gems/thrift/lib/erl/src/thrift_disk_log_transport.erl +0 -118
  353. data/vendor/gems/thrift/lib/erl/src/thrift_file_transport.erl +0 -87
  354. data/vendor/gems/thrift/lib/erl/src/thrift_framed_transport.erl +0 -208
  355. data/vendor/gems/thrift/lib/erl/src/thrift_http_transport.erl +0 -199
  356. data/vendor/gems/thrift/lib/erl/src/thrift_memory_buffer.erl +0 -164
  357. data/vendor/gems/thrift/lib/erl/src/thrift_processor.erl +0 -188
  358. data/vendor/gems/thrift/lib/erl/src/thrift_protocol.erl +0 -356
  359. data/vendor/gems/thrift/lib/erl/src/thrift_server.erl +0 -183
  360. data/vendor/gems/thrift/lib/erl/src/thrift_service.erl +0 -25
  361. data/vendor/gems/thrift/lib/erl/src/thrift_socket_server.erl +0 -249
  362. data/vendor/gems/thrift/lib/erl/src/thrift_socket_transport.erl +0 -119
  363. data/vendor/gems/thrift/lib/erl/src/thrift_transport.erl +0 -57
  364. data/vendor/gems/thrift/lib/erl/vsn.mk +0 -1
  365. data/vendor/gems/thrift/lib/hs/README +0 -82
  366. data/vendor/gems/thrift/lib/hs/TODO +0 -2
  367. data/vendor/gems/thrift/lib/hs/Thrift.cabal +0 -20
  368. data/vendor/gems/thrift/lib/hs/src/Thrift/Protocol/Binary.hs +0 -147
  369. data/vendor/gems/thrift/lib/hs/src/Thrift/Protocol.hs +0 -191
  370. data/vendor/gems/thrift/lib/hs/src/Thrift/Server.hs +0 -65
  371. data/vendor/gems/thrift/lib/hs/src/Thrift/Transport/Handle.hs +0 -58
  372. data/vendor/gems/thrift/lib/hs/src/Thrift/Transport.hs +0 -60
  373. data/vendor/gems/thrift/lib/hs/src/Thrift.hs +0 -111
  374. data/vendor/gems/thrift/lib/java/README +0 -43
  375. data/vendor/gems/thrift/lib/java/build.xml +0 -195
  376. data/vendor/gems/thrift/lib/java/ivy.xml +0 -8
  377. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/IntRangeSet.java +0 -171
  378. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TApplicationException.java +0 -123
  379. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TBase.java +0 -66
  380. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TBaseHelper.java +0 -102
  381. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TByteArrayOutputStream.java +0 -46
  382. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TDeserializer.java +0 -94
  383. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TException.java +0 -45
  384. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TFieldRequirementType.java +0 -30
  385. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TProcessor.java +0 -32
  386. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TProcessorFactory.java +0 -39
  387. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TSerializer.java +0 -110
  388. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/FieldMetaData.java +0 -69
  389. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/FieldValueMetaData.java +0 -42
  390. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/ListMetaData.java +0 -29
  391. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/MapMetaData.java +0 -31
  392. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/SetMetaData.java +0 -29
  393. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/StructMetaData.java +0 -31
  394. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TBase64Utils.java +0 -128
  395. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TBinaryProtocol.java +0 -331
  396. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TCompactProtocol.java +0 -741
  397. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TField.java +0 -48
  398. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TJSONProtocol.java +0 -927
  399. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TList.java +0 -38
  400. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TMap.java +0 -40
  401. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TMessage.java +0 -48
  402. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TMessageType.java +0 -31
  403. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocol.java +0 -146
  404. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocolException.java +0 -81
  405. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocolFactory.java +0 -30
  406. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocolUtil.java +0 -158
  407. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TSet.java +0 -42
  408. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TSimpleJSONProtocol.java +0 -384
  409. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TStruct.java +0 -36
  410. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TType.java +0 -40
  411. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/THsHaServer.java +0 -304
  412. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TNonblockingServer.java +0 -772
  413. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TServer.java +0 -126
  414. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TSimpleServer.java +0 -145
  415. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java +0 -271
  416. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TFramedTransport.java +0 -126
  417. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/THttpClient.java +0 -157
  418. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TIOStreamTransport.java +0 -159
  419. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TMemoryBuffer.java +0 -98
  420. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingServerSocket.java +0 -160
  421. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingServerTransport.java +0 -31
  422. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingSocket.java +0 -213
  423. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingTransport.java +0 -31
  424. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TServerSocket.java +0 -145
@@ -1,750 +0,0 @@
1
- /*
2
- * Licensed to the Apache Software Foundation (ASF) under one
3
- * or more contributor license agreements. See the NOTICE file
4
- * distributed with this work for additional information
5
- * regarding copyright ownership. The ASF licenses this file
6
- * to you under the Apache License, Version 2.0 (the
7
- * "License"); you may not use this file except in compliance
8
- * with the License. You may obtain a copy of the License at
9
- *
10
- * http://www.apache.org/licenses/LICENSE-2.0
11
- *
12
- * Unless required by applicable law or agreed to in writing,
13
- * software distributed under the License is distributed on an
14
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
- * KIND, either express or implied. See the License for the
16
- * specific language governing permissions and limitations
17
- * under the License.
18
- */
19
-
20
- #include "TNonblockingServer.h"
21
- #include <concurrency/Exception.h>
22
-
23
- #include <iostream>
24
- #include <sys/socket.h>
25
- #include <netinet/in.h>
26
- #include <netinet/tcp.h>
27
- #include <netdb.h>
28
- #include <fcntl.h>
29
- #include <errno.h>
30
- #include <assert.h>
31
-
32
- namespace apache { namespace thrift { namespace server {
33
-
34
- using namespace apache::thrift::protocol;
35
- using namespace apache::thrift::transport;
36
- using namespace apache::thrift::concurrency;
37
- using namespace std;
38
-
39
- class TConnection::Task: public Runnable {
40
- public:
41
- Task(boost::shared_ptr<TProcessor> processor,
42
- boost::shared_ptr<TProtocol> input,
43
- boost::shared_ptr<TProtocol> output,
44
- int taskHandle) :
45
- processor_(processor),
46
- input_(input),
47
- output_(output),
48
- taskHandle_(taskHandle) {}
49
-
50
- void run() {
51
- try {
52
- while (processor_->process(input_, output_)) {
53
- if (!input_->getTransport()->peek()) {
54
- break;
55
- }
56
- }
57
- } catch (TTransportException& ttx) {
58
- cerr << "TNonblockingServer client died: " << ttx.what() << endl;
59
- } catch (TException& x) {
60
- cerr << "TNonblockingServer exception: " << x.what() << endl;
61
- } catch (...) {
62
- cerr << "TNonblockingServer uncaught exception." << endl;
63
- }
64
-
65
- // Signal completion back to the libevent thread via a socketpair
66
- int8_t b = 0;
67
- if (-1 == send(taskHandle_, &b, sizeof(int8_t), 0)) {
68
- GlobalOutput.perror("TNonblockingServer::Task: send ", errno);
69
- }
70
- if (-1 == ::close(taskHandle_)) {
71
- GlobalOutput.perror("TNonblockingServer::Task: close, possible resource leak ", errno);
72
- }
73
- }
74
-
75
- private:
76
- boost::shared_ptr<TProcessor> processor_;
77
- boost::shared_ptr<TProtocol> input_;
78
- boost::shared_ptr<TProtocol> output_;
79
- int taskHandle_;
80
- };
81
-
82
- void TConnection::init(int socket, short eventFlags, TNonblockingServer* s) {
83
- socket_ = socket;
84
- server_ = s;
85
- appState_ = APP_INIT;
86
- eventFlags_ = 0;
87
-
88
- readBufferPos_ = 0;
89
- readWant_ = 0;
90
-
91
- writeBuffer_ = NULL;
92
- writeBufferSize_ = 0;
93
- writeBufferPos_ = 0;
94
-
95
- socketState_ = SOCKET_RECV;
96
- appState_ = APP_INIT;
97
-
98
- taskHandle_ = -1;
99
-
100
- // Set flags, which also registers the event
101
- setFlags(eventFlags);
102
-
103
- // get input/transports
104
- factoryInputTransport_ = s->getInputTransportFactory()->getTransport(inputTransport_);
105
- factoryOutputTransport_ = s->getOutputTransportFactory()->getTransport(outputTransport_);
106
-
107
- // Create protocol
108
- inputProtocol_ = s->getInputProtocolFactory()->getProtocol(factoryInputTransport_);
109
- outputProtocol_ = s->getOutputProtocolFactory()->getProtocol(factoryOutputTransport_);
110
- }
111
-
112
- void TConnection::workSocket() {
113
- int flags=0, got=0, left=0, sent=0;
114
- uint32_t fetch = 0;
115
-
116
- switch (socketState_) {
117
- case SOCKET_RECV:
118
- // It is an error to be in this state if we already have all the data
119
- assert(readBufferPos_ < readWant_);
120
-
121
- // Double the buffer size until it is big enough
122
- if (readWant_ > readBufferSize_) {
123
- while (readWant_ > readBufferSize_) {
124
- readBufferSize_ *= 2;
125
- }
126
- readBuffer_ = (uint8_t*)std::realloc(readBuffer_, readBufferSize_);
127
- if (readBuffer_ == NULL) {
128
- GlobalOutput("TConnection::workSocket() realloc");
129
- close();
130
- return;
131
- }
132
- }
133
-
134
- // Read from the socket
135
- fetch = readWant_ - readBufferPos_;
136
- got = recv(socket_, readBuffer_ + readBufferPos_, fetch, 0);
137
-
138
- if (got > 0) {
139
- // Move along in the buffer
140
- readBufferPos_ += got;
141
-
142
- // Check that we did not overdo it
143
- assert(readBufferPos_ <= readWant_);
144
-
145
- // We are done reading, move onto the next state
146
- if (readBufferPos_ == readWant_) {
147
- transition();
148
- }
149
- return;
150
- } else if (got == -1) {
151
- // Blocking errors are okay, just move on
152
- if (errno == EAGAIN || errno == EWOULDBLOCK) {
153
- return;
154
- }
155
-
156
- if (errno != ECONNRESET) {
157
- GlobalOutput.perror("TConnection::workSocket() recv -1 ", errno);
158
- }
159
- }
160
-
161
- // Whenever we get down here it means a remote disconnect
162
- close();
163
-
164
- return;
165
-
166
- case SOCKET_SEND:
167
- // Should never have position past size
168
- assert(writeBufferPos_ <= writeBufferSize_);
169
-
170
- // If there is no data to send, then let us move on
171
- if (writeBufferPos_ == writeBufferSize_) {
172
- GlobalOutput("WARNING: Send state with no data to send\n");
173
- transition();
174
- return;
175
- }
176
-
177
- flags = 0;
178
- #ifdef MSG_NOSIGNAL
179
- // Note the use of MSG_NOSIGNAL to suppress SIGPIPE errors, instead we
180
- // check for the EPIPE return condition and close the socket in that case
181
- flags |= MSG_NOSIGNAL;
182
- #endif // ifdef MSG_NOSIGNAL
183
-
184
- left = writeBufferSize_ - writeBufferPos_;
185
- sent = send(socket_, writeBuffer_ + writeBufferPos_, left, flags);
186
-
187
- if (sent <= 0) {
188
- // Blocking errors are okay, just move on
189
- if (errno == EAGAIN || errno == EWOULDBLOCK) {
190
- return;
191
- }
192
- if (errno != EPIPE) {
193
- GlobalOutput.perror("TConnection::workSocket() send -1 ", errno);
194
- }
195
- close();
196
- return;
197
- }
198
-
199
- writeBufferPos_ += sent;
200
-
201
- // Did we overdo it?
202
- assert(writeBufferPos_ <= writeBufferSize_);
203
-
204
- // We are done!
205
- if (writeBufferPos_ == writeBufferSize_) {
206
- transition();
207
- }
208
-
209
- return;
210
-
211
- default:
212
- GlobalOutput.printf("Shit Got Ill. Socket State %d", socketState_);
213
- assert(0);
214
- }
215
- }
216
-
217
- /**
218
- * This is called when the application transitions from one state into
219
- * another. This means that it has finished writing the data that it needed
220
- * to, or finished receiving the data that it needed to.
221
- */
222
- void TConnection::transition() {
223
-
224
- int sz = 0;
225
-
226
- // Switch upon the state that we are currently in and move to a new state
227
- switch (appState_) {
228
-
229
- case APP_READ_REQUEST:
230
- // We are done reading the request, package the read buffer into transport
231
- // and get back some data from the dispatch function
232
- // If we've used these transport buffers enough times, reset them to avoid bloating
233
-
234
- inputTransport_->resetBuffer(readBuffer_, readBufferPos_);
235
- ++numReadsSinceReset_;
236
- if (numWritesSinceReset_ < 512) {
237
- outputTransport_->resetBuffer();
238
- } else {
239
- // reset the capacity of the output transport if we used it enough times that it might be bloated
240
- try {
241
- outputTransport_->resetBuffer(true);
242
- numWritesSinceReset_ = 0;
243
- } catch (TTransportException &ttx) {
244
- GlobalOutput.printf("TTransportException: TMemoryBuffer::resetBuffer() %s", ttx.what());
245
- close();
246
- return;
247
- }
248
- }
249
-
250
- // Prepend four bytes of blank space to the buffer so we can
251
- // write the frame size there later.
252
- outputTransport_->getWritePtr(4);
253
- outputTransport_->wroteBytes(4);
254
-
255
- if (server_->isThreadPoolProcessing()) {
256
- // We are setting up a Task to do this work and we will wait on it
257
- int sv[2];
258
- if (-1 == socketpair(AF_LOCAL, SOCK_STREAM, 0, sv)) {
259
- GlobalOutput.perror("TConnection::socketpair() failed ", errno);
260
- // Now we will fall through to the APP_WAIT_TASK block with no response
261
- } else {
262
- // Create task and dispatch to the thread manager
263
- boost::shared_ptr<Runnable> task =
264
- boost::shared_ptr<Runnable>(new Task(server_->getProcessor(),
265
- inputProtocol_,
266
- outputProtocol_,
267
- sv[1]));
268
- // The application is now waiting on the task to finish
269
- appState_ = APP_WAIT_TASK;
270
-
271
- // Create an event to be notified when the task finishes
272
- event_set(&taskEvent_,
273
- taskHandle_ = sv[0],
274
- EV_READ,
275
- TConnection::taskHandler,
276
- this);
277
-
278
- // Attach to the base
279
- event_base_set(server_->getEventBase(), &taskEvent_);
280
-
281
- // Add the event and start up the server
282
- if (-1 == event_add(&taskEvent_, 0)) {
283
- GlobalOutput("TNonblockingServer::serve(): coult not event_add");
284
- return;
285
- }
286
- try {
287
- server_->addTask(task);
288
- } catch (IllegalStateException & ise) {
289
- // The ThreadManager is not ready to handle any more tasks (it's probably shutting down).
290
- GlobalOutput.printf("IllegalStateException: Server::process() %s", ise.what());
291
- close();
292
- }
293
-
294
- // Set this connection idle so that libevent doesn't process more
295
- // data on it while we're still waiting for the threadmanager to
296
- // finish this task
297
- setIdle();
298
- return;
299
- }
300
- } else {
301
- try {
302
- // Invoke the processor
303
- server_->getProcessor()->process(inputProtocol_, outputProtocol_);
304
- } catch (TTransportException &ttx) {
305
- GlobalOutput.printf("TTransportException: Server::process() %s", ttx.what());
306
- close();
307
- return;
308
- } catch (TException &x) {
309
- GlobalOutput.printf("TException: Server::process() %s", x.what());
310
- close();
311
- return;
312
- } catch (...) {
313
- GlobalOutput.printf("Server::process() unknown exception");
314
- close();
315
- return;
316
- }
317
- }
318
-
319
- // Intentionally fall through here, the call to process has written into
320
- // the writeBuffer_
321
-
322
- case APP_WAIT_TASK:
323
- // We have now finished processing a task and the result has been written
324
- // into the outputTransport_, so we grab its contents and place them into
325
- // the writeBuffer_ for actual writing by the libevent thread
326
-
327
- // Get the result of the operation
328
- outputTransport_->getBuffer(&writeBuffer_, &writeBufferSize_);
329
-
330
- // If the function call generated return data, then move into the send
331
- // state and get going
332
- // 4 bytes were reserved for frame size
333
- if (writeBufferSize_ > 4) {
334
-
335
- // Move into write state
336
- writeBufferPos_ = 0;
337
- socketState_ = SOCKET_SEND;
338
-
339
- // Put the frame size into the write buffer
340
- int32_t frameSize = (int32_t)htonl(writeBufferSize_ - 4);
341
- memcpy(writeBuffer_, &frameSize, 4);
342
-
343
- // Socket into write mode
344
- appState_ = APP_SEND_RESULT;
345
- setWrite();
346
-
347
- // Try to work the socket immediately
348
- // workSocket();
349
-
350
- return;
351
- }
352
-
353
- // In this case, the request was oneway and we should fall through
354
- // right back into the read frame header state
355
- goto LABEL_APP_INIT;
356
-
357
- case APP_SEND_RESULT:
358
-
359
- ++numWritesSinceReset_;
360
-
361
- // N.B.: We also intentionally fall through here into the INIT state!
362
-
363
- LABEL_APP_INIT:
364
- case APP_INIT:
365
-
366
- // reset the input buffer if we used it enough times that it might be bloated
367
- if (numReadsSinceReset_ > 512)
368
- {
369
- void * new_buffer = std::realloc(readBuffer_, 1024);
370
- if (new_buffer == NULL) {
371
- GlobalOutput("TConnection::transition() realloc");
372
- close();
373
- return;
374
- }
375
- readBuffer_ = (uint8_t*) new_buffer;
376
- readBufferSize_ = 1024;
377
- numReadsSinceReset_ = 0;
378
- }
379
-
380
- // Clear write buffer variables
381
- writeBuffer_ = NULL;
382
- writeBufferPos_ = 0;
383
- writeBufferSize_ = 0;
384
-
385
- // Set up read buffer for getting 4 bytes
386
- readBufferPos_ = 0;
387
- readWant_ = 4;
388
-
389
- // Into read4 state we go
390
- socketState_ = SOCKET_RECV;
391
- appState_ = APP_READ_FRAME_SIZE;
392
-
393
- // Register read event
394
- setRead();
395
-
396
- // Try to work the socket right away
397
- // workSocket();
398
-
399
- return;
400
-
401
- case APP_READ_FRAME_SIZE:
402
- // We just read the request length, deserialize it
403
- sz = *(int32_t*)readBuffer_;
404
- sz = (int32_t)ntohl(sz);
405
-
406
- if (sz <= 0) {
407
- GlobalOutput.printf("TConnection:transition() Negative frame size %d, remote side not using TFramedTransport?", sz);
408
- close();
409
- return;
410
- }
411
-
412
- // Reset the read buffer
413
- readWant_ = (uint32_t)sz;
414
- readBufferPos_= 0;
415
-
416
- // Move into read request state
417
- appState_ = APP_READ_REQUEST;
418
-
419
- // Work the socket right away
420
- // workSocket();
421
-
422
- return;
423
-
424
- default:
425
- GlobalOutput.printf("Totally Fucked. Application State %d", appState_);
426
- assert(0);
427
- }
428
- }
429
-
430
- void TConnection::setFlags(short eventFlags) {
431
- // Catch the do nothing case
432
- if (eventFlags_ == eventFlags) {
433
- return;
434
- }
435
-
436
- // Delete a previously existing event
437
- if (eventFlags_ != 0) {
438
- if (event_del(&event_) == -1) {
439
- GlobalOutput("TConnection::setFlags event_del");
440
- return;
441
- }
442
- }
443
-
444
- // Update in memory structure
445
- eventFlags_ = eventFlags;
446
-
447
- // Do not call event_set if there are no flags
448
- if (!eventFlags_) {
449
- return;
450
- }
451
-
452
- /**
453
- * event_set:
454
- *
455
- * Prepares the event structure &event to be used in future calls to
456
- * event_add() and event_del(). The event will be prepared to call the
457
- * eventHandler using the 'sock' file descriptor to monitor events.
458
- *
459
- * The events can be either EV_READ, EV_WRITE, or both, indicating
460
- * that an application can read or write from the file respectively without
461
- * blocking.
462
- *
463
- * The eventHandler will be called with the file descriptor that triggered
464
- * the event and the type of event which will be one of: EV_TIMEOUT,
465
- * EV_SIGNAL, EV_READ, EV_WRITE.
466
- *
467
- * The additional flag EV_PERSIST makes an event_add() persistent until
468
- * event_del() has been called.
469
- *
470
- * Once initialized, the &event struct can be used repeatedly with
471
- * event_add() and event_del() and does not need to be reinitialized unless
472
- * the eventHandler and/or the argument to it are to be changed. However,
473
- * when an ev structure has been added to libevent using event_add() the
474
- * structure must persist until the event occurs (assuming EV_PERSIST
475
- * is not set) or is removed using event_del(). You may not reuse the same
476
- * ev structure for multiple monitored descriptors; each descriptor needs
477
- * its own ev.
478
- */
479
- event_set(&event_, socket_, eventFlags_, TConnection::eventHandler, this);
480
- event_base_set(server_->getEventBase(), &event_);
481
-
482
- // Add the event
483
- if (event_add(&event_, 0) == -1) {
484
- GlobalOutput("TConnection::setFlags(): could not event_add");
485
- }
486
- }
487
-
488
- /**
489
- * Closes a connection
490
- */
491
- void TConnection::close() {
492
- // Delete the registered libevent
493
- if (event_del(&event_) == -1) {
494
- GlobalOutput("TConnection::close() event_del");
495
- }
496
-
497
- // Close the socket
498
- if (socket_ > 0) {
499
- ::close(socket_);
500
- }
501
- socket_ = 0;
502
-
503
- // close any factory produced transports
504
- factoryInputTransport_->close();
505
- factoryOutputTransport_->close();
506
-
507
- // Give this object back to the server that owns it
508
- server_->returnConnection(this);
509
- }
510
-
511
- void TConnection::checkIdleBufferMemLimit(uint32_t limit) {
512
- if (readBufferSize_ > limit) {
513
- readBufferSize_ = limit;
514
- readBuffer_ = (uint8_t*)std::realloc(readBuffer_, readBufferSize_);
515
- if (readBuffer_ == NULL) {
516
- GlobalOutput("TConnection::checkIdleBufferMemLimit() realloc");
517
- close();
518
- }
519
- }
520
- }
521
-
522
- /**
523
- * Creates a new connection either by reusing an object off the stack or
524
- * by allocating a new one entirely
525
- */
526
- TConnection* TNonblockingServer::createConnection(int socket, short flags) {
527
- // Check the stack
528
- if (connectionStack_.empty()) {
529
- return new TConnection(socket, flags, this);
530
- } else {
531
- TConnection* result = connectionStack_.top();
532
- connectionStack_.pop();
533
- result->init(socket, flags, this);
534
- return result;
535
- }
536
- }
537
-
538
- /**
539
- * Returns a connection to the stack
540
- */
541
- void TNonblockingServer::returnConnection(TConnection* connection) {
542
- if (connectionStackLimit_ &&
543
- (connectionStack_.size() >= connectionStackLimit_)) {
544
- delete connection;
545
- } else {
546
- connection->checkIdleBufferMemLimit(idleBufferMemLimit_);
547
- connectionStack_.push(connection);
548
- }
549
- }
550
-
551
- /**
552
- * Server socket had something happen. We accept all waiting client
553
- * connections on fd and assign TConnection objects to handle those requests.
554
- */
555
- void TNonblockingServer::handleEvent(int fd, short which) {
556
- // Make sure that libevent didn't fuck up the socket handles
557
- assert(fd == serverSocket_);
558
-
559
- // Server socket accepted a new connection
560
- socklen_t addrLen;
561
- struct sockaddr addr;
562
- addrLen = sizeof(addr);
563
-
564
- // Going to accept a new client socket
565
- int clientSocket;
566
-
567
- // Accept as many new clients as possible, even though libevent signaled only
568
- // one, this helps us to avoid having to go back into the libevent engine so
569
- // many times
570
- while ((clientSocket = accept(fd, &addr, &addrLen)) != -1) {
571
-
572
- // Explicitly set this socket to NONBLOCK mode
573
- int flags;
574
- if ((flags = fcntl(clientSocket, F_GETFL, 0)) < 0 ||
575
- fcntl(clientSocket, F_SETFL, flags | O_NONBLOCK) < 0) {
576
- GlobalOutput.perror("thriftServerEventHandler: set O_NONBLOCK (fcntl) ", errno);
577
- close(clientSocket);
578
- return;
579
- }
580
-
581
- // Create a new TConnection for this client socket.
582
- TConnection* clientConnection =
583
- createConnection(clientSocket, EV_READ | EV_PERSIST);
584
-
585
- // Fail fast if we could not create a TConnection object
586
- if (clientConnection == NULL) {
587
- GlobalOutput.printf("thriftServerEventHandler: failed TConnection factory");
588
- close(clientSocket);
589
- return;
590
- }
591
-
592
- // Put this client connection into the proper state
593
- clientConnection->transition();
594
- }
595
-
596
- // Done looping accept, now we have to make sure the error is due to
597
- // blocking. Any other error is a problem
598
- if (errno != EAGAIN && errno != EWOULDBLOCK) {
599
- GlobalOutput.perror("thriftServerEventHandler: accept() ", errno);
600
- }
601
- }
602
-
603
- /**
604
- * Creates a socket to listen on and binds it to the local port.
605
- */
606
- void TNonblockingServer::listenSocket() {
607
- int s;
608
- struct addrinfo hints, *res, *res0;
609
- int error;
610
-
611
- char port[sizeof("65536") + 1];
612
- memset(&hints, 0, sizeof(hints));
613
- hints.ai_family = PF_UNSPEC;
614
- hints.ai_socktype = SOCK_STREAM;
615
- hints.ai_flags = AI_PASSIVE | AI_ADDRCONFIG;
616
- sprintf(port, "%d", port_);
617
-
618
- // Wildcard address
619
- error = getaddrinfo(NULL, port, &hints, &res0);
620
- if (error) {
621
- string errStr = "TNonblockingServer::serve() getaddrinfo " + string(gai_strerror(error));
622
- GlobalOutput(errStr.c_str());
623
- return;
624
- }
625
-
626
- // Pick the ipv6 address first since ipv4 addresses can be mapped
627
- // into ipv6 space.
628
- for (res = res0; res; res = res->ai_next) {
629
- if (res->ai_family == AF_INET6 || res->ai_next == NULL)
630
- break;
631
- }
632
-
633
- // Create the server socket
634
- s = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
635
- if (s == -1) {
636
- freeaddrinfo(res0);
637
- throw TException("TNonblockingServer::serve() socket() -1");
638
- }
639
-
640
- #ifdef IPV6_V6ONLY
641
- int zero = 0;
642
- if (-1 == setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, &zero, sizeof(zero))) {
643
- GlobalOutput("TServerSocket::listen() IPV6_V6ONLY");
644
- }
645
- #endif // #ifdef IPV6_V6ONLY
646
-
647
-
648
- int one = 1;
649
-
650
- // Set reuseaddr to avoid 2MSL delay on server restart
651
- setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));
652
-
653
- if (bind(s, res->ai_addr, res->ai_addrlen) == -1) {
654
- close(s);
655
- freeaddrinfo(res0);
656
- throw TException("TNonblockingServer::serve() bind");
657
- }
658
-
659
- // Done with the addr info
660
- freeaddrinfo(res0);
661
-
662
- // Set up this file descriptor for listening
663
- listenSocket(s);
664
- }
665
-
666
- /**
667
- * Takes a socket created by listenSocket() and sets various options on it
668
- * to prepare for use in the server.
669
- */
670
- void TNonblockingServer::listenSocket(int s) {
671
- // Set socket to nonblocking mode
672
- int flags;
673
- if ((flags = fcntl(s, F_GETFL, 0)) < 0 ||
674
- fcntl(s, F_SETFL, flags | O_NONBLOCK) < 0) {
675
- close(s);
676
- throw TException("TNonblockingServer::serve() O_NONBLOCK");
677
- }
678
-
679
- int one = 1;
680
- struct linger ling = {0, 0};
681
-
682
- // Keepalive to ensure full result flushing
683
- setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, &one, sizeof(one));
684
-
685
- // Turn linger off to avoid hung sockets
686
- setsockopt(s, SOL_SOCKET, SO_LINGER, &ling, sizeof(ling));
687
-
688
- // Set TCP nodelay if available, MAC OS X Hack
689
- // See http://lists.danga.com/pipermail/memcached/2005-March/001240.html
690
- #ifndef TCP_NOPUSH
691
- setsockopt(s, IPPROTO_TCP, TCP_NODELAY, &one, sizeof(one));
692
- #endif
693
-
694
- if (listen(s, LISTEN_BACKLOG) == -1) {
695
- close(s);
696
- throw TException("TNonblockingServer::serve() listen");
697
- }
698
-
699
- // Cool, this socket is good to go, set it as the serverSocket_
700
- serverSocket_ = s;
701
- }
702
-
703
- /**
704
- * Register the core libevent events onto the proper base.
705
- */
706
- void TNonblockingServer::registerEvents(event_base* base) {
707
- assert(serverSocket_ != -1);
708
- assert(!eventBase_);
709
- eventBase_ = base;
710
-
711
- // Print some libevent stats
712
- GlobalOutput.printf("libevent %s method %s",
713
- event_get_version(),
714
- event_get_method());
715
-
716
- // Register the server event
717
- event_set(&serverEvent_,
718
- serverSocket_,
719
- EV_READ | EV_PERSIST,
720
- TNonblockingServer::eventHandler,
721
- this);
722
- event_base_set(eventBase_, &serverEvent_);
723
-
724
- // Add the event and start up the server
725
- if (-1 == event_add(&serverEvent_, 0)) {
726
- throw TException("TNonblockingServer::serve(): coult not event_add");
727
- }
728
- }
729
-
730
- /**
731
- * Main workhorse function, starts up the server listening on a port and
732
- * loops over the libevent handler.
733
- */
734
- void TNonblockingServer::serve() {
735
- // Init socket
736
- listenSocket();
737
-
738
- // Initialize libevent core
739
- registerEvents(static_cast<event_base*>(event_init()));
740
-
741
- // Run the preServe event
742
- if (eventHandler_ != NULL) {
743
- eventHandler_->preServe();
744
- }
745
-
746
- // Run libevent engine, never returns, invokes calls to eventHandler
747
- event_base_loop(eventBase_, 0);
748
- }
749
-
750
- }}} // apache::thrift::server