auser-poolparty 1.3.0 → 1.3.1

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 (353) hide show
  1. data/VERSION.yml +1 -1
  2. data/examples/monitored_cloud.rb +1 -1
  3. data/examples/thrift/thrift_example.rb +1 -1
  4. data/lib/proto/command_interface_handler.rb +1 -1
  5. data/vendor/gems/thrift/CHANGES +35 -0
  6. data/vendor/gems/thrift/CONTRIBUTORS +77 -0
  7. data/vendor/gems/thrift/DISCLAIMER +6 -0
  8. data/vendor/gems/thrift/LICENSE +202 -0
  9. data/vendor/gems/thrift/Makefile.am +28 -0
  10. data/vendor/gems/thrift/NEWS +79 -0
  11. data/vendor/gems/thrift/NOTICE +26 -0
  12. data/vendor/gems/thrift/README +137 -0
  13. data/vendor/gems/thrift/aclocal/ax_boost_base.m4 +198 -0
  14. data/vendor/gems/thrift/aclocal/ax_javac_and_java.m4 +107 -0
  15. data/vendor/gems/thrift/aclocal/ax_lib_event.m4 +194 -0
  16. data/vendor/gems/thrift/aclocal/ax_lib_zlib.m4 +173 -0
  17. data/vendor/gems/thrift/aclocal/ax_signed_right_shift.m4 +127 -0
  18. data/vendor/gems/thrift/aclocal/ax_thrift_internal.m4 +39 -0
  19. data/vendor/gems/thrift/bootstrap.sh +35 -0
  20. data/vendor/gems/thrift/cleanup.sh +58 -0
  21. data/vendor/gems/thrift/compiler/cpp/Makefile.am +136 -0
  22. data/vendor/gems/thrift/compiler/cpp/README +39 -0
  23. data/vendor/gems/thrift/compiler/cpp/src/generate/t_cocoa_generator.cc +2331 -0
  24. data/vendor/gems/thrift/compiler/cpp/src/generate/t_cpp_generator.cc +3003 -0
  25. data/vendor/gems/thrift/compiler/cpp/src/generate/t_csharp_generator.cc +1700 -0
  26. data/vendor/gems/thrift/compiler/cpp/src/generate/t_erl_generator.cc +932 -0
  27. data/vendor/gems/thrift/compiler/cpp/src/generate/t_generator.cc +173 -0
  28. data/vendor/gems/thrift/compiler/cpp/src/generate/t_generator.h +321 -0
  29. data/vendor/gems/thrift/compiler/cpp/src/generate/t_hs_generator.cc +1445 -0
  30. data/vendor/gems/thrift/compiler/cpp/src/generate/t_html_generator.cc +637 -0
  31. data/vendor/gems/thrift/compiler/cpp/src/generate/t_java_generator.cc +3069 -0
  32. data/vendor/gems/thrift/compiler/cpp/src/generate/t_ocaml_generator.cc +1673 -0
  33. data/vendor/gems/thrift/compiler/cpp/src/generate/t_oop_generator.h +77 -0
  34. data/vendor/gems/thrift/compiler/cpp/src/generate/t_perl_generator.cc +1812 -0
  35. data/vendor/gems/thrift/compiler/cpp/src/generate/t_php_generator.cc +2281 -0
  36. data/vendor/gems/thrift/compiler/cpp/src/generate/t_py_generator.cc +2310 -0
  37. data/vendor/gems/thrift/compiler/cpp/src/generate/t_rb_generator.cc +1114 -0
  38. data/vendor/gems/thrift/compiler/cpp/src/generate/t_st_generator.cc +1071 -0
  39. data/vendor/gems/thrift/compiler/cpp/src/generate/t_xsd_generator.cc +354 -0
  40. data/vendor/gems/thrift/compiler/cpp/src/globals.h +117 -0
  41. data/vendor/gems/thrift/compiler/cpp/src/main.cc +1207 -0
  42. data/vendor/gems/thrift/compiler/cpp/src/main.h +103 -0
  43. data/vendor/gems/thrift/compiler/cpp/src/md5.c +381 -0
  44. data/vendor/gems/thrift/compiler/cpp/src/md5.h +91 -0
  45. data/vendor/gems/thrift/compiler/cpp/src/parse/t_base_type.h +137 -0
  46. data/vendor/gems/thrift/compiler/cpp/src/parse/t_const.h +59 -0
  47. data/vendor/gems/thrift/compiler/cpp/src/parse/t_const_value.h +121 -0
  48. data/vendor/gems/thrift/compiler/cpp/src/parse/t_container.h +56 -0
  49. data/vendor/gems/thrift/compiler/cpp/src/parse/t_doc.h +51 -0
  50. data/vendor/gems/thrift/compiler/cpp/src/parse/t_enum.h +59 -0
  51. data/vendor/gems/thrift/compiler/cpp/src/parse/t_enum_value.h +64 -0
  52. data/vendor/gems/thrift/compiler/cpp/src/parse/t_field.h +150 -0
  53. data/vendor/gems/thrift/compiler/cpp/src/parse/t_function.h +93 -0
  54. data/vendor/gems/thrift/compiler/cpp/src/parse/t_list.h +56 -0
  55. data/vendor/gems/thrift/compiler/cpp/src/parse/t_map.h +64 -0
  56. data/vendor/gems/thrift/compiler/cpp/src/parse/t_program.h +223 -0
  57. data/vendor/gems/thrift/compiler/cpp/src/parse/t_scope.h +86 -0
  58. data/vendor/gems/thrift/compiler/cpp/src/parse/t_service.h +68 -0
  59. data/vendor/gems/thrift/compiler/cpp/src/parse/t_set.h +55 -0
  60. data/vendor/gems/thrift/compiler/cpp/src/parse/t_struct.h +127 -0
  61. data/vendor/gems/thrift/compiler/cpp/src/parse/t_type.h +176 -0
  62. data/vendor/gems/thrift/compiler/cpp/src/parse/t_typedef.h +70 -0
  63. data/vendor/gems/thrift/compiler/cpp/src/platform.h +36 -0
  64. data/vendor/gems/thrift/compiler/cpp/src/thriftl.ll +303 -0
  65. data/vendor/gems/thrift/compiler/cpp/src/thrifty.yy +1140 -0
  66. data/vendor/gems/thrift/configure.ac +255 -0
  67. data/vendor/gems/thrift/contrib/fb303/LICENSE +16 -0
  68. data/vendor/gems/thrift/contrib/fb303/Makefile.am +31 -0
  69. data/vendor/gems/thrift/contrib/fb303/README +37 -0
  70. data/vendor/gems/thrift/contrib/fb303/acinclude.m4 +258 -0
  71. data/vendor/gems/thrift/contrib/fb303/aclocal/ax_boost_base.m4 +198 -0
  72. data/vendor/gems/thrift/contrib/fb303/bootstrap.sh +26 -0
  73. data/vendor/gems/thrift/contrib/fb303/configure.ac +115 -0
  74. data/vendor/gems/thrift/contrib/fb303/cpp/FacebookBase.cpp +124 -0
  75. data/vendor/gems/thrift/contrib/fb303/cpp/FacebookBase.h +103 -0
  76. data/vendor/gems/thrift/contrib/fb303/cpp/Makefile.am +84 -0
  77. data/vendor/gems/thrift/contrib/fb303/cpp/ServiceTracker.cpp +481 -0
  78. data/vendor/gems/thrift/contrib/fb303/cpp/ServiceTracker.h +215 -0
  79. data/vendor/gems/thrift/contrib/fb303/global_footer.mk +21 -0
  80. data/vendor/gems/thrift/contrib/fb303/global_header.mk +38 -0
  81. data/vendor/gems/thrift/contrib/fb303/if/fb303.thrift +112 -0
  82. data/vendor/gems/thrift/contrib/fb303/java/FacebookBase.java +103 -0
  83. data/vendor/gems/thrift/contrib/fb303/java/build.xml +84 -0
  84. data/vendor/gems/thrift/contrib/fb303/php/FacebookBase.php +89 -0
  85. data/vendor/gems/thrift/contrib/fb303/py/Makefile.am +44 -0
  86. data/vendor/gems/thrift/contrib/fb303/py/fb303/FacebookBase.py +82 -0
  87. data/vendor/gems/thrift/contrib/fb303/py/fb303_scripts/__init__.py +20 -0
  88. data/vendor/gems/thrift/contrib/fb303/py/fb303_scripts/fb303_simple_mgmt.py +195 -0
  89. data/vendor/gems/thrift/contrib/fb303/py/setup.py +27 -0
  90. data/vendor/gems/thrift/contrib/thrift.el +126 -0
  91. data/vendor/gems/thrift/contrib/thrift.spec +206 -0
  92. data/vendor/gems/thrift/contrib/thrift.vim +91 -0
  93. data/vendor/gems/thrift/contrib/thrift_dump.cpp +91 -0
  94. data/vendor/gems/thrift/doc/lgpl-2.1.txt +504 -0
  95. data/vendor/gems/thrift/doc/otp-base-license.txt +20 -0
  96. data/vendor/gems/thrift/doc/thrift.bnf +96 -0
  97. data/vendor/gems/thrift/doc/thrift.tex +1057 -0
  98. data/vendor/gems/thrift/lib/Makefile.am +55 -0
  99. data/vendor/gems/thrift/lib/cocoa/README +21 -0
  100. data/vendor/gems/thrift/lib/cocoa/src/TApplicationException.h +44 -0
  101. data/vendor/gems/thrift/lib/cocoa/src/TApplicationException.m +130 -0
  102. data/vendor/gems/thrift/lib/cocoa/src/TException.h +34 -0
  103. data/vendor/gems/thrift/lib/cocoa/src/TException.m +64 -0
  104. data/vendor/gems/thrift/lib/cocoa/src/TProcessor.h +29 -0
  105. data/vendor/gems/thrift/lib/cocoa/src/TProcessorFactory.h +27 -0
  106. data/vendor/gems/thrift/lib/cocoa/src/TSharedProcessorFactory.h +27 -0
  107. data/vendor/gems/thrift/lib/cocoa/src/TSharedProcessorFactory.m +51 -0
  108. data/vendor/gems/thrift/lib/cocoa/src/protocol/TBinaryProtocol.h +51 -0
  109. data/vendor/gems/thrift/lib/cocoa/src/protocol/TBinaryProtocol.m +477 -0
  110. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocol.h +148 -0
  111. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolException.h +25 -0
  112. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolException.m +23 -0
  113. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolFactory.h +29 -0
  114. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolUtil.h +29 -0
  115. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolUtil.m +104 -0
  116. data/vendor/gems/thrift/lib/cocoa/src/server/TSocketServer.h +50 -0
  117. data/vendor/gems/thrift/lib/cocoa/src/server/TSocketServer.m +153 -0
  118. data/vendor/gems/thrift/lib/cocoa/src/transport/THTTPClient.h +42 -0
  119. data/vendor/gems/thrift/lib/cocoa/src/transport/THTTPClient.m +159 -0
  120. data/vendor/gems/thrift/lib/cocoa/src/transport/TNSFileHandleTransport.h +35 -0
  121. data/vendor/gems/thrift/lib/cocoa/src/transport/TNSFileHandleTransport.m +91 -0
  122. data/vendor/gems/thrift/lib/cocoa/src/transport/TNSStreamTransport.h +38 -0
  123. data/vendor/gems/thrift/lib/cocoa/src/transport/TNSStreamTransport.m +89 -0
  124. data/vendor/gems/thrift/lib/cocoa/src/transport/TSocketClient.h +32 -0
  125. data/vendor/gems/thrift/lib/cocoa/src/transport/TSocketClient.m +58 -0
  126. data/vendor/gems/thrift/lib/cocoa/src/transport/TTransport.h +36 -0
  127. data/vendor/gems/thrift/lib/cocoa/src/transport/TTransportException.h +30 -0
  128. data/vendor/gems/thrift/lib/cocoa/src/transport/TTransportException.m +43 -0
  129. data/vendor/gems/thrift/lib/cpp/Makefile.am +158 -0
  130. data/vendor/gems/thrift/lib/cpp/README +67 -0
  131. data/vendor/gems/thrift/lib/cpp/src/TLogging.h +163 -0
  132. data/vendor/gems/thrift/lib/cpp/src/TProcessor.h +53 -0
  133. data/vendor/gems/thrift/lib/cpp/src/TReflectionLocal.h +96 -0
  134. data/vendor/gems/thrift/lib/cpp/src/Thrift.cpp +148 -0
  135. data/vendor/gems/thrift/lib/cpp/src/Thrift.h +191 -0
  136. data/vendor/gems/thrift/lib/cpp/src/concurrency/Exception.h +60 -0
  137. data/vendor/gems/thrift/lib/cpp/src/concurrency/FunctionRunner.h +77 -0
  138. data/vendor/gems/thrift/lib/cpp/src/concurrency/Monitor.cpp +137 -0
  139. data/vendor/gems/thrift/lib/cpp/src/concurrency/Monitor.h +84 -0
  140. data/vendor/gems/thrift/lib/cpp/src/concurrency/Mutex.cpp +160 -0
  141. data/vendor/gems/thrift/lib/cpp/src/concurrency/Mutex.h +114 -0
  142. data/vendor/gems/thrift/lib/cpp/src/concurrency/PosixThreadFactory.cpp +314 -0
  143. data/vendor/gems/thrift/lib/cpp/src/concurrency/PosixThreadFactory.h +130 -0
  144. data/vendor/gems/thrift/lib/cpp/src/concurrency/Thread.h +125 -0
  145. data/vendor/gems/thrift/lib/cpp/src/concurrency/ThreadManager.cpp +493 -0
  146. data/vendor/gems/thrift/lib/cpp/src/concurrency/ThreadManager.h +169 -0
  147. data/vendor/gems/thrift/lib/cpp/src/concurrency/TimerManager.cpp +284 -0
  148. data/vendor/gems/thrift/lib/cpp/src/concurrency/TimerManager.h +122 -0
  149. data/vendor/gems/thrift/lib/cpp/src/concurrency/Util.cpp +55 -0
  150. data/vendor/gems/thrift/lib/cpp/src/concurrency/Util.h +100 -0
  151. data/vendor/gems/thrift/lib/cpp/src/concurrency/test/Tests.cpp +155 -0
  152. data/vendor/gems/thrift/lib/cpp/src/concurrency/test/ThreadFactoryTests.h +354 -0
  153. data/vendor/gems/thrift/lib/cpp/src/concurrency/test/ThreadManagerTests.h +379 -0
  154. data/vendor/gems/thrift/lib/cpp/src/concurrency/test/TimerManagerTests.h +155 -0
  155. data/vendor/gems/thrift/lib/cpp/src/processor/PeekProcessor.cpp +122 -0
  156. data/vendor/gems/thrift/lib/cpp/src/processor/PeekProcessor.h +77 -0
  157. data/vendor/gems/thrift/lib/cpp/src/processor/StatsProcessor.h +264 -0
  158. data/vendor/gems/thrift/lib/cpp/src/protocol/TBase64Utils.cpp +79 -0
  159. data/vendor/gems/thrift/lib/cpp/src/protocol/TBase64Utils.h +42 -0
  160. data/vendor/gems/thrift/lib/cpp/src/protocol/TBinaryProtocol.cpp +394 -0
  161. data/vendor/gems/thrift/lib/cpp/src/protocol/TBinaryProtocol.h +254 -0
  162. data/vendor/gems/thrift/lib/cpp/src/protocol/TCompactProtocol.cpp +736 -0
  163. data/vendor/gems/thrift/lib/cpp/src/protocol/TCompactProtocol.h +279 -0
  164. data/vendor/gems/thrift/lib/cpp/src/protocol/TDebugProtocol.cpp +346 -0
  165. data/vendor/gems/thrift/lib/cpp/src/protocol/TDebugProtocol.h +225 -0
  166. data/vendor/gems/thrift/lib/cpp/src/protocol/TDenseProtocol.cpp +762 -0
  167. data/vendor/gems/thrift/lib/cpp/src/protocol/TDenseProtocol.h +253 -0
  168. data/vendor/gems/thrift/lib/cpp/src/protocol/TJSONProtocol.cpp +998 -0
  169. data/vendor/gems/thrift/lib/cpp/src/protocol/TJSONProtocol.h +340 -0
  170. data/vendor/gems/thrift/lib/cpp/src/protocol/TOneWayProtocol.h +304 -0
  171. data/vendor/gems/thrift/lib/cpp/src/protocol/TProtocol.h +438 -0
  172. data/vendor/gems/thrift/lib/cpp/src/protocol/TProtocolException.h +104 -0
  173. data/vendor/gems/thrift/lib/cpp/src/protocol/TProtocolTap.h +187 -0
  174. data/vendor/gems/thrift/lib/cpp/src/server/TNonblockingServer.cpp +750 -0
  175. data/vendor/gems/thrift/lib/cpp/src/server/TNonblockingServer.h +435 -0
  176. data/vendor/gems/thrift/lib/cpp/src/server/TServer.cpp +38 -0
  177. data/vendor/gems/thrift/lib/cpp/src/server/TServer.h +213 -0
  178. data/vendor/gems/thrift/lib/cpp/src/server/TSimpleServer.cpp +118 -0
  179. data/vendor/gems/thrift/lib/cpp/src/server/TSimpleServer.h +70 -0
  180. data/vendor/gems/thrift/lib/cpp/src/server/TThreadPoolServer.cpp +217 -0
  181. data/vendor/gems/thrift/lib/cpp/src/server/TThreadPoolServer.h +79 -0
  182. data/vendor/gems/thrift/lib/cpp/src/server/TThreadedServer.cpp +243 -0
  183. data/vendor/gems/thrift/lib/cpp/src/server/TThreadedServer.h +74 -0
  184. data/vendor/gems/thrift/lib/cpp/src/transport/TBufferTransports.cpp +370 -0
  185. data/vendor/gems/thrift/lib/cpp/src/transport/TBufferTransports.h +667 -0
  186. data/vendor/gems/thrift/lib/cpp/src/transport/TFDTransport.cpp +77 -0
  187. data/vendor/gems/thrift/lib/cpp/src/transport/TFDTransport.h +73 -0
  188. data/vendor/gems/thrift/lib/cpp/src/transport/TFileTransport.cpp +953 -0
  189. data/vendor/gems/thrift/lib/cpp/src/transport/TFileTransport.h +442 -0
  190. data/vendor/gems/thrift/lib/cpp/src/transport/THttpClient.cpp +348 -0
  191. data/vendor/gems/thrift/lib/cpp/src/transport/THttpClient.h +111 -0
  192. data/vendor/gems/thrift/lib/cpp/src/transport/TServerSocket.cpp +368 -0
  193. data/vendor/gems/thrift/lib/cpp/src/transport/TServerSocket.h +76 -0
  194. data/vendor/gems/thrift/lib/cpp/src/transport/TServerTransport.h +92 -0
  195. data/vendor/gems/thrift/lib/cpp/src/transport/TShortReadTransport.h +96 -0
  196. data/vendor/gems/thrift/lib/cpp/src/transport/TSimpleFileTransport.cpp +54 -0
  197. data/vendor/gems/thrift/lib/cpp/src/transport/TSimpleFileTransport.h +41 -0
  198. data/vendor/gems/thrift/lib/cpp/src/transport/TSocket.cpp +591 -0
  199. data/vendor/gems/thrift/lib/cpp/src/transport/TSocket.h +242 -0
  200. data/vendor/gems/thrift/lib/cpp/src/transport/TSocketPool.cpp +235 -0
  201. data/vendor/gems/thrift/lib/cpp/src/transport/TSocketPool.h +191 -0
  202. data/vendor/gems/thrift/lib/cpp/src/transport/TTransport.h +224 -0
  203. data/vendor/gems/thrift/lib/cpp/src/transport/TTransportException.cpp +31 -0
  204. data/vendor/gems/thrift/lib/cpp/src/transport/TTransportException.h +117 -0
  205. data/vendor/gems/thrift/lib/cpp/src/transport/TTransportUtils.cpp +178 -0
  206. data/vendor/gems/thrift/lib/cpp/src/transport/TTransportUtils.h +287 -0
  207. data/vendor/gems/thrift/lib/cpp/src/transport/TZlibTransport.cpp +299 -0
  208. data/vendor/gems/thrift/lib/cpp/src/transport/TZlibTransport.h +219 -0
  209. data/vendor/gems/thrift/lib/cpp/thrift-nb.pc.in +30 -0
  210. data/vendor/gems/thrift/lib/cpp/thrift-z.pc.in +30 -0
  211. data/vendor/gems/thrift/lib/cpp/thrift.pc.in +29 -0
  212. data/vendor/gems/thrift/lib/csharp/Makefile.am +70 -0
  213. data/vendor/gems/thrift/lib/csharp/README +26 -0
  214. data/vendor/gems/thrift/lib/csharp/ThriftMSBuildTask/Properties/AssemblyInfo.cs +55 -0
  215. data/vendor/gems/thrift/lib/csharp/ThriftMSBuildTask/ThriftBuild.cs +242 -0
  216. data/vendor/gems/thrift/lib/csharp/ThriftMSBuildTask/ThriftMSBuildTask.csproj +62 -0
  217. data/vendor/gems/thrift/lib/csharp/src/Collections/THashSet.cs +142 -0
  218. data/vendor/gems/thrift/lib/csharp/src/Protocol/TBase.cs +34 -0
  219. data/vendor/gems/thrift/lib/csharp/src/Protocol/TBinaryProtocol.cs +392 -0
  220. data/vendor/gems/thrift/lib/csharp/src/Protocol/TField.cs +58 -0
  221. data/vendor/gems/thrift/lib/csharp/src/Protocol/TList.cs +50 -0
  222. data/vendor/gems/thrift/lib/csharp/src/Protocol/TMap.cs +58 -0
  223. data/vendor/gems/thrift/lib/csharp/src/Protocol/TMessage.cs +58 -0
  224. data/vendor/gems/thrift/lib/csharp/src/Protocol/TMessageType.cs +31 -0
  225. data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocol.cs +87 -0
  226. data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocolException.cs +61 -0
  227. data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocolFactory.cs +29 -0
  228. data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocolUtil.cs +94 -0
  229. data/vendor/gems/thrift/lib/csharp/src/Protocol/TSet.cs +50 -0
  230. data/vendor/gems/thrift/lib/csharp/src/Protocol/TStruct.cs +42 -0
  231. data/vendor/gems/thrift/lib/csharp/src/Protocol/TType.cs +40 -0
  232. data/vendor/gems/thrift/lib/csharp/src/Server/TServer.cs +135 -0
  233. data/vendor/gems/thrift/lib/csharp/src/Server/TSimpleServer.cs +148 -0
  234. data/vendor/gems/thrift/lib/csharp/src/Server/TThreadPoolServer.cs +186 -0
  235. data/vendor/gems/thrift/lib/csharp/src/Server/TThreadedServer.cs +234 -0
  236. data/vendor/gems/thrift/lib/csharp/src/TApplicationException.cs +131 -0
  237. data/vendor/gems/thrift/lib/csharp/src/TProcessor.cs +29 -0
  238. data/vendor/gems/thrift/lib/csharp/src/Thrift.csproj +73 -0
  239. data/vendor/gems/thrift/lib/csharp/src/Thrift.sln +35 -0
  240. data/vendor/gems/thrift/lib/csharp/src/Transport/TBufferedTransport.cs +100 -0
  241. data/vendor/gems/thrift/lib/csharp/src/Transport/TServerSocket.cs +157 -0
  242. data/vendor/gems/thrift/lib/csharp/src/Transport/TServerTransport.cs +39 -0
  243. data/vendor/gems/thrift/lib/csharp/src/Transport/TSocket.cs +144 -0
  244. data/vendor/gems/thrift/lib/csharp/src/Transport/TStreamTransport.cs +103 -0
  245. data/vendor/gems/thrift/lib/csharp/src/Transport/TTransport.cs +66 -0
  246. data/vendor/gems/thrift/lib/csharp/src/Transport/TTransportException.cs +64 -0
  247. data/vendor/gems/thrift/lib/csharp/src/Transport/TTransportFactory.cs +38 -0
  248. data/vendor/gems/thrift/lib/erl/Makefile +37 -0
  249. data/vendor/gems/thrift/lib/erl/README +56 -0
  250. data/vendor/gems/thrift/lib/erl/build/beamver +59 -0
  251. data/vendor/gems/thrift/lib/erl/build/buildtargets.mk +15 -0
  252. data/vendor/gems/thrift/lib/erl/build/colors.mk +24 -0
  253. data/vendor/gems/thrift/lib/erl/build/docs.mk +12 -0
  254. data/vendor/gems/thrift/lib/erl/build/mime.types +98 -0
  255. data/vendor/gems/thrift/lib/erl/build/otp.mk +146 -0
  256. data/vendor/gems/thrift/lib/erl/build/otp_subdir.mk +85 -0
  257. data/vendor/gems/thrift/lib/erl/build/raw_test.mk +29 -0
  258. data/vendor/gems/thrift/lib/erl/include/thrift_constants.hrl +54 -0
  259. data/vendor/gems/thrift/lib/erl/include/thrift_protocol.hrl +31 -0
  260. data/vendor/gems/thrift/lib/erl/src/Makefile +116 -0
  261. data/vendor/gems/thrift/lib/erl/src/test_handler.erl +26 -0
  262. data/vendor/gems/thrift/lib/erl/src/test_service.erl +29 -0
  263. data/vendor/gems/thrift/lib/erl/src/thrift.app.src +44 -0
  264. data/vendor/gems/thrift/lib/erl/src/thrift.appup.src +1 -0
  265. data/vendor/gems/thrift/lib/erl/src/thrift_base64_transport.erl +64 -0
  266. data/vendor/gems/thrift/lib/erl/src/thrift_binary_protocol.erl +325 -0
  267. data/vendor/gems/thrift/lib/erl/src/thrift_buffered_transport.erl +180 -0
  268. data/vendor/gems/thrift/lib/erl/src/thrift_client.erl +384 -0
  269. data/vendor/gems/thrift/lib/erl/src/thrift_disk_log_transport.erl +118 -0
  270. data/vendor/gems/thrift/lib/erl/src/thrift_file_transport.erl +87 -0
  271. data/vendor/gems/thrift/lib/erl/src/thrift_framed_transport.erl +208 -0
  272. data/vendor/gems/thrift/lib/erl/src/thrift_http_transport.erl +199 -0
  273. data/vendor/gems/thrift/lib/erl/src/thrift_memory_buffer.erl +164 -0
  274. data/vendor/gems/thrift/lib/erl/src/thrift_processor.erl +188 -0
  275. data/vendor/gems/thrift/lib/erl/src/thrift_protocol.erl +356 -0
  276. data/vendor/gems/thrift/lib/erl/src/thrift_server.erl +183 -0
  277. data/vendor/gems/thrift/lib/erl/src/thrift_service.erl +25 -0
  278. data/vendor/gems/thrift/lib/erl/src/thrift_socket_server.erl +249 -0
  279. data/vendor/gems/thrift/lib/erl/src/thrift_socket_transport.erl +119 -0
  280. data/vendor/gems/thrift/lib/erl/src/thrift_transport.erl +57 -0
  281. data/vendor/gems/thrift/lib/erl/vsn.mk +1 -0
  282. data/vendor/gems/thrift/lib/hs/README +82 -0
  283. data/vendor/gems/thrift/lib/hs/Setup.lhs +23 -0
  284. data/vendor/gems/thrift/lib/hs/TODO +2 -0
  285. data/vendor/gems/thrift/lib/hs/Thrift.cabal +20 -0
  286. data/vendor/gems/thrift/lib/hs/src/Thrift.hs +111 -0
  287. data/vendor/gems/thrift/lib/hs/src/Thrift/Protocol.hs +191 -0
  288. data/vendor/gems/thrift/lib/hs/src/Thrift/Protocol/Binary.hs +147 -0
  289. data/vendor/gems/thrift/lib/hs/src/Thrift/Server.hs +65 -0
  290. data/vendor/gems/thrift/lib/hs/src/Thrift/Transport.hs +60 -0
  291. data/vendor/gems/thrift/lib/hs/src/Thrift/Transport/Handle.hs +58 -0
  292. data/vendor/gems/thrift/lib/java/Makefile.am +38 -0
  293. data/vendor/gems/thrift/lib/java/README +43 -0
  294. data/vendor/gems/thrift/lib/java/build.xml +195 -0
  295. data/vendor/gems/thrift/lib/java/ivy.xml +8 -0
  296. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/IntRangeSet.java +171 -0
  297. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TApplicationException.java +123 -0
  298. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TBase.java +66 -0
  299. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TBaseHelper.java +102 -0
  300. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TByteArrayOutputStream.java +46 -0
  301. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TDeserializer.java +94 -0
  302. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TException.java +45 -0
  303. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TFieldRequirementType.java +30 -0
  304. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TProcessor.java +32 -0
  305. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TProcessorFactory.java +39 -0
  306. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TSerializer.java +110 -0
  307. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/FieldMetaData.java +69 -0
  308. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/FieldValueMetaData.java +42 -0
  309. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/ListMetaData.java +29 -0
  310. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/MapMetaData.java +31 -0
  311. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/SetMetaData.java +29 -0
  312. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/StructMetaData.java +31 -0
  313. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TBase64Utils.java +128 -0
  314. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TBinaryProtocol.java +331 -0
  315. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TCompactProtocol.java +741 -0
  316. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TField.java +48 -0
  317. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TJSONProtocol.java +927 -0
  318. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TList.java +38 -0
  319. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TMap.java +40 -0
  320. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TMessage.java +48 -0
  321. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TMessageType.java +31 -0
  322. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocol.java +146 -0
  323. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocolException.java +81 -0
  324. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocolFactory.java +30 -0
  325. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocolUtil.java +158 -0
  326. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TSet.java +42 -0
  327. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TSimpleJSONProtocol.java +384 -0
  328. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TStruct.java +36 -0
  329. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TType.java +40 -0
  330. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/THsHaServer.java +304 -0
  331. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TNonblockingServer.java +772 -0
  332. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TServer.java +126 -0
  333. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TSimpleServer.java +145 -0
  334. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java +271 -0
  335. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TFramedTransport.java +126 -0
  336. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/THttpClient.java +157 -0
  337. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TIOStreamTransport.java +159 -0
  338. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TMemoryBuffer.java +98 -0
  339. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingServerSocket.java +160 -0
  340. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingServerTransport.java +31 -0
  341. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingSocket.java +213 -0
  342. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingTransport.java +31 -0
  343. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TServerSocket.java +145 -0
  344. metadata +348 -37
  345. data/vendor/gems/trollop/FAQ.txt +0 -35
  346. data/vendor/gems/trollop/History.txt +0 -84
  347. data/vendor/gems/trollop/Manifest.txt +0 -7
  348. data/vendor/gems/trollop/README.txt +0 -38
  349. data/vendor/gems/trollop/Rakefile +0 -36
  350. data/vendor/gems/trollop/lib/trollop.rb +0 -695
  351. data/vendor/gems/trollop/release-script.txt +0 -13
  352. data/vendor/gems/trollop/test/test_trollop.rb +0 -957
  353. data/vendor/gems/trollop/www/index.html +0 -167
@@ -0,0 +1,125 @@
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
+ #ifndef _THRIFT_CONCURRENCY_THREAD_H_
21
+ #define _THRIFT_CONCURRENCY_THREAD_H_ 1
22
+
23
+ #include <stdint.h>
24
+ #include <boost/shared_ptr.hpp>
25
+ #include <boost/weak_ptr.hpp>
26
+
27
+ namespace apache { namespace thrift { namespace concurrency {
28
+
29
+ class Thread;
30
+
31
+ /**
32
+ * Minimal runnable class. More or less analogous to java.lang.Runnable.
33
+ *
34
+ * @version $Id:$
35
+ */
36
+ class Runnable {
37
+
38
+ public:
39
+ virtual ~Runnable() {};
40
+ virtual void run() = 0;
41
+
42
+ /**
43
+ * Gets the thread object that is hosting this runnable object - can return
44
+ * an empty boost::shared pointer if no references remain on thet thread object
45
+ */
46
+ virtual boost::shared_ptr<Thread> thread() { return thread_.lock(); }
47
+
48
+ /**
49
+ * Sets the thread that is executing this object. This is only meant for
50
+ * use by concrete implementations of Thread.
51
+ */
52
+ virtual void thread(boost::shared_ptr<Thread> value) { thread_ = value; }
53
+
54
+ private:
55
+ boost::weak_ptr<Thread> thread_;
56
+ };
57
+
58
+ /**
59
+ * Minimal thread class. Returned by thread factory bound to a Runnable object
60
+ * and ready to start execution. More or less analogous to java.lang.Thread
61
+ * (minus all the thread group, priority, mode and other baggage, since that
62
+ * is difficult to abstract across platforms and is left for platform-specific
63
+ * ThreadFactory implemtations to deal with
64
+ *
65
+ * @see apache::thrift::concurrency::ThreadFactory)
66
+ */
67
+ class Thread {
68
+
69
+ public:
70
+
71
+ typedef uint64_t id_t;
72
+
73
+ virtual ~Thread() {};
74
+
75
+ /**
76
+ * Starts the thread. Does platform specific thread creation and
77
+ * configuration then invokes the run method of the Runnable object bound
78
+ * to this thread.
79
+ */
80
+ virtual void start() = 0;
81
+
82
+ /**
83
+ * Join this thread. Current thread blocks until this target thread
84
+ * completes.
85
+ */
86
+ virtual void join() = 0;
87
+
88
+ /**
89
+ * Gets the thread's platform-specific ID
90
+ */
91
+ virtual id_t getId() = 0;
92
+
93
+ /**
94
+ * Gets the runnable object this thread is hosting
95
+ */
96
+ virtual boost::shared_ptr<Runnable> runnable() const { return _runnable; }
97
+
98
+ protected:
99
+ virtual void runnable(boost::shared_ptr<Runnable> value) { _runnable = value; }
100
+
101
+ private:
102
+ boost::shared_ptr<Runnable> _runnable;
103
+
104
+ };
105
+
106
+ /**
107
+ * Factory to create platform-specific thread object and bind them to Runnable
108
+ * object for execution
109
+ */
110
+ class ThreadFactory {
111
+
112
+ public:
113
+ virtual ~ThreadFactory() {}
114
+ virtual boost::shared_ptr<Thread> newThread(boost::shared_ptr<Runnable> runnable) const = 0;
115
+
116
+ /** Gets the current thread id or unknown_thread_id if the current thread is not a thrift thread */
117
+
118
+ static const Thread::id_t unknown_thread_id;
119
+
120
+ virtual Thread::id_t getCurrentThreadId() const = 0;
121
+ };
122
+
123
+ }}} // apache::thrift::concurrency
124
+
125
+ #endif // #ifndef _THRIFT_CONCURRENCY_THREAD_H_
@@ -0,0 +1,493 @@
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 "ThreadManager.h"
21
+ #include "Exception.h"
22
+ #include "Monitor.h"
23
+
24
+ #include <boost/shared_ptr.hpp>
25
+
26
+ #include <assert.h>
27
+ #include <queue>
28
+ #include <set>
29
+
30
+ #if defined(DEBUG)
31
+ #include <iostream>
32
+ #endif //defined(DEBUG)
33
+
34
+ namespace apache { namespace thrift { namespace concurrency {
35
+
36
+ using boost::shared_ptr;
37
+ using boost::dynamic_pointer_cast;
38
+
39
+ /**
40
+ * ThreadManager class
41
+ *
42
+ * This class manages a pool of threads. It uses a ThreadFactory to create
43
+ * threads. It never actually creates or destroys worker threads, rather
44
+ * it maintains statistics on number of idle threads, number of active threads,
45
+ * task backlog, and average wait and service times.
46
+ *
47
+ * @version $Id:$
48
+ */
49
+ class ThreadManager::Impl : public ThreadManager {
50
+
51
+ public:
52
+ Impl() :
53
+ workerCount_(0),
54
+ workerMaxCount_(0),
55
+ idleCount_(0),
56
+ pendingTaskCountMax_(0),
57
+ state_(ThreadManager::UNINITIALIZED) {}
58
+
59
+ ~Impl() { stop(); }
60
+
61
+ void start();
62
+
63
+ void stop() { stopImpl(false); }
64
+
65
+ void join() { stopImpl(true); }
66
+
67
+ const ThreadManager::STATE state() const {
68
+ return state_;
69
+ }
70
+
71
+ shared_ptr<ThreadFactory> threadFactory() const {
72
+ Synchronized s(monitor_);
73
+ return threadFactory_;
74
+ }
75
+
76
+ void threadFactory(shared_ptr<ThreadFactory> value) {
77
+ Synchronized s(monitor_);
78
+ threadFactory_ = value;
79
+ }
80
+
81
+ void addWorker(size_t value);
82
+
83
+ void removeWorker(size_t value);
84
+
85
+ size_t idleWorkerCount() const {
86
+ return idleCount_;
87
+ }
88
+
89
+ size_t workerCount() const {
90
+ Synchronized s(monitor_);
91
+ return workerCount_;
92
+ }
93
+
94
+ size_t pendingTaskCount() const {
95
+ Synchronized s(monitor_);
96
+ return tasks_.size();
97
+ }
98
+
99
+ size_t totalTaskCount() const {
100
+ Synchronized s(monitor_);
101
+ return tasks_.size() + workerCount_ - idleCount_;
102
+ }
103
+
104
+ size_t pendingTaskCountMax() const {
105
+ Synchronized s(monitor_);
106
+ return pendingTaskCountMax_;
107
+ }
108
+
109
+ void pendingTaskCountMax(const size_t value) {
110
+ Synchronized s(monitor_);
111
+ pendingTaskCountMax_ = value;
112
+ }
113
+
114
+ bool canSleep();
115
+
116
+ void add(shared_ptr<Runnable> value, int64_t timeout);
117
+
118
+ void remove(shared_ptr<Runnable> task);
119
+
120
+ private:
121
+ void stopImpl(bool join);
122
+
123
+ size_t workerCount_;
124
+ size_t workerMaxCount_;
125
+ size_t idleCount_;
126
+ size_t pendingTaskCountMax_;
127
+
128
+ ThreadManager::STATE state_;
129
+ shared_ptr<ThreadFactory> threadFactory_;
130
+
131
+
132
+ friend class ThreadManager::Task;
133
+ std::queue<shared_ptr<Task> > tasks_;
134
+ Monitor monitor_;
135
+ Monitor workerMonitor_;
136
+
137
+ friend class ThreadManager::Worker;
138
+ std::set<shared_ptr<Thread> > workers_;
139
+ std::set<shared_ptr<Thread> > deadWorkers_;
140
+ std::map<const Thread::id_t, shared_ptr<Thread> > idMap_;
141
+ };
142
+
143
+ class ThreadManager::Task : public Runnable {
144
+
145
+ public:
146
+ enum STATE {
147
+ WAITING,
148
+ EXECUTING,
149
+ CANCELLED,
150
+ COMPLETE
151
+ };
152
+
153
+ Task(shared_ptr<Runnable> runnable) :
154
+ runnable_(runnable),
155
+ state_(WAITING) {}
156
+
157
+ ~Task() {}
158
+
159
+ void run() {
160
+ if (state_ == EXECUTING) {
161
+ runnable_->run();
162
+ state_ = COMPLETE;
163
+ }
164
+ }
165
+
166
+ private:
167
+ shared_ptr<Runnable> runnable_;
168
+ friend class ThreadManager::Worker;
169
+ STATE state_;
170
+ };
171
+
172
+ class ThreadManager::Worker: public Runnable {
173
+ enum STATE {
174
+ UNINITIALIZED,
175
+ STARTING,
176
+ STARTED,
177
+ STOPPING,
178
+ STOPPED
179
+ };
180
+
181
+ public:
182
+ Worker(ThreadManager::Impl* manager) :
183
+ manager_(manager),
184
+ state_(UNINITIALIZED),
185
+ idle_(false) {}
186
+
187
+ ~Worker() {}
188
+
189
+ private:
190
+ bool isActive() const {
191
+ return
192
+ (manager_->workerCount_ <= manager_->workerMaxCount_) ||
193
+ (manager_->state_ == JOINING && !manager_->tasks_.empty());
194
+ }
195
+
196
+ public:
197
+ /**
198
+ * Worker entry point
199
+ *
200
+ * As long as worker thread is running, pull tasks off the task queue and
201
+ * execute.
202
+ */
203
+ void run() {
204
+ bool active = false;
205
+ bool notifyManager = false;
206
+
207
+ /**
208
+ * Increment worker semaphore and notify manager if worker count reached
209
+ * desired max
210
+ *
211
+ * Note: We have to release the monitor and acquire the workerMonitor
212
+ * since that is what the manager blocks on for worker add/remove
213
+ */
214
+ {
215
+ Synchronized s(manager_->monitor_);
216
+ active = manager_->workerCount_ < manager_->workerMaxCount_;
217
+ if (active) {
218
+ manager_->workerCount_++;
219
+ notifyManager = manager_->workerCount_ == manager_->workerMaxCount_;
220
+ }
221
+ }
222
+
223
+ if (notifyManager) {
224
+ Synchronized s(manager_->workerMonitor_);
225
+ manager_->workerMonitor_.notify();
226
+ notifyManager = false;
227
+ }
228
+
229
+ while (active) {
230
+ shared_ptr<ThreadManager::Task> task;
231
+
232
+ /**
233
+ * While holding manager monitor block for non-empty task queue (Also
234
+ * check that the thread hasn't been requested to stop). Once the queue
235
+ * is non-empty, dequeue a task, release monitor, and execute. If the
236
+ * worker max count has been decremented such that we exceed it, mark
237
+ * ourself inactive, decrement the worker count and notify the manager
238
+ * (technically we're notifying the next blocked thread but eventually
239
+ * the manager will see it.
240
+ */
241
+ {
242
+ Synchronized s(manager_->monitor_);
243
+ active = isActive();
244
+
245
+ while (active && manager_->tasks_.empty()) {
246
+ manager_->idleCount_++;
247
+ idle_ = true;
248
+ manager_->monitor_.wait();
249
+ active = isActive();
250
+ idle_ = false;
251
+ manager_->idleCount_--;
252
+ }
253
+
254
+ if (active) {
255
+ if (!manager_->tasks_.empty()) {
256
+ task = manager_->tasks_.front();
257
+ manager_->tasks_.pop();
258
+ if (task->state_ == ThreadManager::Task::WAITING) {
259
+ task->state_ = ThreadManager::Task::EXECUTING;
260
+ }
261
+
262
+ /* If we have a pending task max and we just dropped below it, wakeup any
263
+ thread that might be blocked on add. */
264
+ if (manager_->pendingTaskCountMax_ != 0 &&
265
+ manager_->tasks_.size() == manager_->pendingTaskCountMax_ - 1) {
266
+ manager_->monitor_.notify();
267
+ }
268
+ }
269
+ } else {
270
+ idle_ = true;
271
+ manager_->workerCount_--;
272
+ notifyManager = (manager_->workerCount_ == manager_->workerMaxCount_);
273
+ }
274
+ }
275
+
276
+ if (task != NULL) {
277
+ if (task->state_ == ThreadManager::Task::EXECUTING) {
278
+ try {
279
+ task->run();
280
+ } catch(...) {
281
+ // XXX need to log this
282
+ }
283
+ }
284
+ }
285
+ }
286
+
287
+ {
288
+ Synchronized s(manager_->workerMonitor_);
289
+ manager_->deadWorkers_.insert(this->thread());
290
+ if (notifyManager) {
291
+ manager_->workerMonitor_.notify();
292
+ }
293
+ }
294
+
295
+ return;
296
+ }
297
+
298
+ private:
299
+ ThreadManager::Impl* manager_;
300
+ friend class ThreadManager::Impl;
301
+ STATE state_;
302
+ bool idle_;
303
+ };
304
+
305
+
306
+ void ThreadManager::Impl::addWorker(size_t value) {
307
+ std::set<shared_ptr<Thread> > newThreads;
308
+ for (size_t ix = 0; ix < value; ix++) {
309
+ class ThreadManager::Worker;
310
+ shared_ptr<ThreadManager::Worker> worker = shared_ptr<ThreadManager::Worker>(new ThreadManager::Worker(this));
311
+ newThreads.insert(threadFactory_->newThread(worker));
312
+ }
313
+
314
+ {
315
+ Synchronized s(monitor_);
316
+ workerMaxCount_ += value;
317
+ workers_.insert(newThreads.begin(), newThreads.end());
318
+ }
319
+
320
+ for (std::set<shared_ptr<Thread> >::iterator ix = newThreads.begin(); ix != newThreads.end(); ix++) {
321
+ shared_ptr<ThreadManager::Worker> worker = dynamic_pointer_cast<ThreadManager::Worker, Runnable>((*ix)->runnable());
322
+ worker->state_ = ThreadManager::Worker::STARTING;
323
+ (*ix)->start();
324
+ idMap_.insert(std::pair<const Thread::id_t, shared_ptr<Thread> >((*ix)->getId(), *ix));
325
+ }
326
+
327
+ {
328
+ Synchronized s(workerMonitor_);
329
+ while (workerCount_ != workerMaxCount_) {
330
+ workerMonitor_.wait();
331
+ }
332
+ }
333
+ }
334
+
335
+ void ThreadManager::Impl::start() {
336
+
337
+ if (state_ == ThreadManager::STOPPED) {
338
+ return;
339
+ }
340
+
341
+ {
342
+ Synchronized s(monitor_);
343
+ if (state_ == ThreadManager::UNINITIALIZED) {
344
+ if (threadFactory_ == NULL) {
345
+ throw InvalidArgumentException();
346
+ }
347
+ state_ = ThreadManager::STARTED;
348
+ monitor_.notifyAll();
349
+ }
350
+
351
+ while (state_ == STARTING) {
352
+ monitor_.wait();
353
+ }
354
+ }
355
+ }
356
+
357
+ void ThreadManager::Impl::stopImpl(bool join) {
358
+ bool doStop = false;
359
+ if (state_ == ThreadManager::STOPPED) {
360
+ return;
361
+ }
362
+
363
+ {
364
+ Synchronized s(monitor_);
365
+ if (state_ != ThreadManager::STOPPING &&
366
+ state_ != ThreadManager::JOINING &&
367
+ state_ != ThreadManager::STOPPED) {
368
+ doStop = true;
369
+ state_ = join ? ThreadManager::JOINING : ThreadManager::STOPPING;
370
+ }
371
+ }
372
+
373
+ if (doStop) {
374
+ removeWorker(workerCount_);
375
+ }
376
+
377
+ // XXX
378
+ // should be able to block here for transition to STOPPED since we're no
379
+ // using shared_ptrs
380
+
381
+ {
382
+ Synchronized s(monitor_);
383
+ state_ = ThreadManager::STOPPED;
384
+ }
385
+
386
+ }
387
+
388
+ void ThreadManager::Impl::removeWorker(size_t value) {
389
+ std::set<shared_ptr<Thread> > removedThreads;
390
+ {
391
+ Synchronized s(monitor_);
392
+ if (value > workerMaxCount_) {
393
+ throw InvalidArgumentException();
394
+ }
395
+
396
+ workerMaxCount_ -= value;
397
+
398
+ if (idleCount_ < value) {
399
+ for (size_t ix = 0; ix < idleCount_; ix++) {
400
+ monitor_.notify();
401
+ }
402
+ } else {
403
+ monitor_.notifyAll();
404
+ }
405
+ }
406
+
407
+ {
408
+ Synchronized s(workerMonitor_);
409
+
410
+ while (workerCount_ != workerMaxCount_) {
411
+ workerMonitor_.wait();
412
+ }
413
+
414
+ for (std::set<shared_ptr<Thread> >::iterator ix = deadWorkers_.begin(); ix != deadWorkers_.end(); ix++) {
415
+ workers_.erase(*ix);
416
+ idMap_.erase((*ix)->getId());
417
+ }
418
+
419
+ deadWorkers_.clear();
420
+ }
421
+ }
422
+
423
+ bool ThreadManager::Impl::canSleep() {
424
+ const Thread::id_t id = threadFactory_->getCurrentThreadId();
425
+ return idMap_.find(id) == idMap_.end();
426
+ }
427
+
428
+ void ThreadManager::Impl::add(shared_ptr<Runnable> value, int64_t timeout) {
429
+ Synchronized s(monitor_);
430
+
431
+ if (state_ != ThreadManager::STARTED) {
432
+ throw IllegalStateException();
433
+ }
434
+
435
+ if (pendingTaskCountMax_ > 0 && (tasks_.size() >= pendingTaskCountMax_)) {
436
+ if (canSleep() && timeout >= 0) {
437
+ while (pendingTaskCountMax_ > 0 && tasks_.size() >= pendingTaskCountMax_) {
438
+ monitor_.wait(timeout);
439
+ }
440
+ } else {
441
+ throw TooManyPendingTasksException();
442
+ }
443
+ }
444
+
445
+ tasks_.push(shared_ptr<ThreadManager::Task>(new ThreadManager::Task(value)));
446
+
447
+ // If idle thread is available notify it, otherwise all worker threads are
448
+ // running and will get around to this task in time.
449
+ if (idleCount_ > 0) {
450
+ monitor_.notify();
451
+ }
452
+ }
453
+
454
+ void ThreadManager::Impl::remove(shared_ptr<Runnable> task) {
455
+ Synchronized s(monitor_);
456
+ if (state_ != ThreadManager::STARTED) {
457
+ throw IllegalStateException();
458
+ }
459
+ }
460
+
461
+ class SimpleThreadManager : public ThreadManager::Impl {
462
+
463
+ public:
464
+ SimpleThreadManager(size_t workerCount=4, size_t pendingTaskCountMax=0) :
465
+ workerCount_(workerCount),
466
+ pendingTaskCountMax_(pendingTaskCountMax),
467
+ firstTime_(true) {
468
+ }
469
+
470
+ void start() {
471
+ ThreadManager::Impl::pendingTaskCountMax(pendingTaskCountMax_);
472
+ ThreadManager::Impl::start();
473
+ addWorker(workerCount_);
474
+ }
475
+
476
+ private:
477
+ const size_t workerCount_;
478
+ const size_t pendingTaskCountMax_;
479
+ bool firstTime_;
480
+ Monitor monitor_;
481
+ };
482
+
483
+
484
+ shared_ptr<ThreadManager> ThreadManager::newThreadManager() {
485
+ return shared_ptr<ThreadManager>(new ThreadManager::Impl());
486
+ }
487
+
488
+ shared_ptr<ThreadManager> ThreadManager::newSimpleThreadManager(size_t count, size_t pendingTaskCountMax) {
489
+ return shared_ptr<ThreadManager>(new SimpleThreadManager(count, pendingTaskCountMax));
490
+ }
491
+
492
+ }}} // apache::thrift::concurrency
493
+