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.
- data/VERSION.yml +1 -1
- data/examples/monitored_cloud.rb +1 -1
- data/examples/thrift/thrift_example.rb +1 -1
- data/lib/proto/command_interface_handler.rb +1 -1
- data/vendor/gems/thrift/CHANGES +35 -0
- data/vendor/gems/thrift/CONTRIBUTORS +77 -0
- data/vendor/gems/thrift/DISCLAIMER +6 -0
- data/vendor/gems/thrift/LICENSE +202 -0
- data/vendor/gems/thrift/Makefile.am +28 -0
- data/vendor/gems/thrift/NEWS +79 -0
- data/vendor/gems/thrift/NOTICE +26 -0
- data/vendor/gems/thrift/README +137 -0
- data/vendor/gems/thrift/aclocal/ax_boost_base.m4 +198 -0
- data/vendor/gems/thrift/aclocal/ax_javac_and_java.m4 +107 -0
- data/vendor/gems/thrift/aclocal/ax_lib_event.m4 +194 -0
- data/vendor/gems/thrift/aclocal/ax_lib_zlib.m4 +173 -0
- data/vendor/gems/thrift/aclocal/ax_signed_right_shift.m4 +127 -0
- data/vendor/gems/thrift/aclocal/ax_thrift_internal.m4 +39 -0
- data/vendor/gems/thrift/bootstrap.sh +35 -0
- data/vendor/gems/thrift/cleanup.sh +58 -0
- data/vendor/gems/thrift/compiler/cpp/Makefile.am +136 -0
- data/vendor/gems/thrift/compiler/cpp/README +39 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_cocoa_generator.cc +2331 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_cpp_generator.cc +3003 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_csharp_generator.cc +1700 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_erl_generator.cc +932 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_generator.cc +173 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_generator.h +321 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_hs_generator.cc +1445 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_html_generator.cc +637 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_java_generator.cc +3069 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_ocaml_generator.cc +1673 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_oop_generator.h +77 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_perl_generator.cc +1812 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_php_generator.cc +2281 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_py_generator.cc +2310 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_rb_generator.cc +1114 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_st_generator.cc +1071 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_xsd_generator.cc +354 -0
- data/vendor/gems/thrift/compiler/cpp/src/globals.h +117 -0
- data/vendor/gems/thrift/compiler/cpp/src/main.cc +1207 -0
- data/vendor/gems/thrift/compiler/cpp/src/main.h +103 -0
- data/vendor/gems/thrift/compiler/cpp/src/md5.c +381 -0
- data/vendor/gems/thrift/compiler/cpp/src/md5.h +91 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_base_type.h +137 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_const.h +59 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_const_value.h +121 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_container.h +56 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_doc.h +51 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_enum.h +59 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_enum_value.h +64 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_field.h +150 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_function.h +93 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_list.h +56 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_map.h +64 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_program.h +223 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_scope.h +86 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_service.h +68 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_set.h +55 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_struct.h +127 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_type.h +176 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_typedef.h +70 -0
- data/vendor/gems/thrift/compiler/cpp/src/platform.h +36 -0
- data/vendor/gems/thrift/compiler/cpp/src/thriftl.ll +303 -0
- data/vendor/gems/thrift/compiler/cpp/src/thrifty.yy +1140 -0
- data/vendor/gems/thrift/configure.ac +255 -0
- data/vendor/gems/thrift/contrib/fb303/LICENSE +16 -0
- data/vendor/gems/thrift/contrib/fb303/Makefile.am +31 -0
- data/vendor/gems/thrift/contrib/fb303/README +37 -0
- data/vendor/gems/thrift/contrib/fb303/acinclude.m4 +258 -0
- data/vendor/gems/thrift/contrib/fb303/aclocal/ax_boost_base.m4 +198 -0
- data/vendor/gems/thrift/contrib/fb303/bootstrap.sh +26 -0
- data/vendor/gems/thrift/contrib/fb303/configure.ac +115 -0
- data/vendor/gems/thrift/contrib/fb303/cpp/FacebookBase.cpp +124 -0
- data/vendor/gems/thrift/contrib/fb303/cpp/FacebookBase.h +103 -0
- data/vendor/gems/thrift/contrib/fb303/cpp/Makefile.am +84 -0
- data/vendor/gems/thrift/contrib/fb303/cpp/ServiceTracker.cpp +481 -0
- data/vendor/gems/thrift/contrib/fb303/cpp/ServiceTracker.h +215 -0
- data/vendor/gems/thrift/contrib/fb303/global_footer.mk +21 -0
- data/vendor/gems/thrift/contrib/fb303/global_header.mk +38 -0
- data/vendor/gems/thrift/contrib/fb303/if/fb303.thrift +112 -0
- data/vendor/gems/thrift/contrib/fb303/java/FacebookBase.java +103 -0
- data/vendor/gems/thrift/contrib/fb303/java/build.xml +84 -0
- data/vendor/gems/thrift/contrib/fb303/php/FacebookBase.php +89 -0
- data/vendor/gems/thrift/contrib/fb303/py/Makefile.am +44 -0
- data/vendor/gems/thrift/contrib/fb303/py/fb303/FacebookBase.py +82 -0
- data/vendor/gems/thrift/contrib/fb303/py/fb303_scripts/__init__.py +20 -0
- data/vendor/gems/thrift/contrib/fb303/py/fb303_scripts/fb303_simple_mgmt.py +195 -0
- data/vendor/gems/thrift/contrib/fb303/py/setup.py +27 -0
- data/vendor/gems/thrift/contrib/thrift.el +126 -0
- data/vendor/gems/thrift/contrib/thrift.spec +206 -0
- data/vendor/gems/thrift/contrib/thrift.vim +91 -0
- data/vendor/gems/thrift/contrib/thrift_dump.cpp +91 -0
- data/vendor/gems/thrift/doc/lgpl-2.1.txt +504 -0
- data/vendor/gems/thrift/doc/otp-base-license.txt +20 -0
- data/vendor/gems/thrift/doc/thrift.bnf +96 -0
- data/vendor/gems/thrift/doc/thrift.tex +1057 -0
- data/vendor/gems/thrift/lib/Makefile.am +55 -0
- data/vendor/gems/thrift/lib/cocoa/README +21 -0
- data/vendor/gems/thrift/lib/cocoa/src/TApplicationException.h +44 -0
- data/vendor/gems/thrift/lib/cocoa/src/TApplicationException.m +130 -0
- data/vendor/gems/thrift/lib/cocoa/src/TException.h +34 -0
- data/vendor/gems/thrift/lib/cocoa/src/TException.m +64 -0
- data/vendor/gems/thrift/lib/cocoa/src/TProcessor.h +29 -0
- data/vendor/gems/thrift/lib/cocoa/src/TProcessorFactory.h +27 -0
- data/vendor/gems/thrift/lib/cocoa/src/TSharedProcessorFactory.h +27 -0
- data/vendor/gems/thrift/lib/cocoa/src/TSharedProcessorFactory.m +51 -0
- data/vendor/gems/thrift/lib/cocoa/src/protocol/TBinaryProtocol.h +51 -0
- data/vendor/gems/thrift/lib/cocoa/src/protocol/TBinaryProtocol.m +477 -0
- data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocol.h +148 -0
- data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolException.h +25 -0
- data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolException.m +23 -0
- data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolFactory.h +29 -0
- data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolUtil.h +29 -0
- data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolUtil.m +104 -0
- data/vendor/gems/thrift/lib/cocoa/src/server/TSocketServer.h +50 -0
- data/vendor/gems/thrift/lib/cocoa/src/server/TSocketServer.m +153 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/THTTPClient.h +42 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/THTTPClient.m +159 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/TNSFileHandleTransport.h +35 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/TNSFileHandleTransport.m +91 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/TNSStreamTransport.h +38 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/TNSStreamTransport.m +89 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/TSocketClient.h +32 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/TSocketClient.m +58 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/TTransport.h +36 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/TTransportException.h +30 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/TTransportException.m +43 -0
- data/vendor/gems/thrift/lib/cpp/Makefile.am +158 -0
- data/vendor/gems/thrift/lib/cpp/README +67 -0
- data/vendor/gems/thrift/lib/cpp/src/TLogging.h +163 -0
- data/vendor/gems/thrift/lib/cpp/src/TProcessor.h +53 -0
- data/vendor/gems/thrift/lib/cpp/src/TReflectionLocal.h +96 -0
- data/vendor/gems/thrift/lib/cpp/src/Thrift.cpp +148 -0
- data/vendor/gems/thrift/lib/cpp/src/Thrift.h +191 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/Exception.h +60 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/FunctionRunner.h +77 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/Monitor.cpp +137 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/Monitor.h +84 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/Mutex.cpp +160 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/Mutex.h +114 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/PosixThreadFactory.cpp +314 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/PosixThreadFactory.h +130 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/Thread.h +125 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/ThreadManager.cpp +493 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/ThreadManager.h +169 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/TimerManager.cpp +284 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/TimerManager.h +122 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/Util.cpp +55 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/Util.h +100 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/test/Tests.cpp +155 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/test/ThreadFactoryTests.h +354 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/test/ThreadManagerTests.h +379 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/test/TimerManagerTests.h +155 -0
- data/vendor/gems/thrift/lib/cpp/src/processor/PeekProcessor.cpp +122 -0
- data/vendor/gems/thrift/lib/cpp/src/processor/PeekProcessor.h +77 -0
- data/vendor/gems/thrift/lib/cpp/src/processor/StatsProcessor.h +264 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TBase64Utils.cpp +79 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TBase64Utils.h +42 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TBinaryProtocol.cpp +394 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TBinaryProtocol.h +254 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TCompactProtocol.cpp +736 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TCompactProtocol.h +279 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TDebugProtocol.cpp +346 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TDebugProtocol.h +225 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TDenseProtocol.cpp +762 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TDenseProtocol.h +253 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TJSONProtocol.cpp +998 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TJSONProtocol.h +340 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TOneWayProtocol.h +304 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TProtocol.h +438 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TProtocolException.h +104 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TProtocolTap.h +187 -0
- data/vendor/gems/thrift/lib/cpp/src/server/TNonblockingServer.cpp +750 -0
- data/vendor/gems/thrift/lib/cpp/src/server/TNonblockingServer.h +435 -0
- data/vendor/gems/thrift/lib/cpp/src/server/TServer.cpp +38 -0
- data/vendor/gems/thrift/lib/cpp/src/server/TServer.h +213 -0
- data/vendor/gems/thrift/lib/cpp/src/server/TSimpleServer.cpp +118 -0
- data/vendor/gems/thrift/lib/cpp/src/server/TSimpleServer.h +70 -0
- data/vendor/gems/thrift/lib/cpp/src/server/TThreadPoolServer.cpp +217 -0
- data/vendor/gems/thrift/lib/cpp/src/server/TThreadPoolServer.h +79 -0
- data/vendor/gems/thrift/lib/cpp/src/server/TThreadedServer.cpp +243 -0
- data/vendor/gems/thrift/lib/cpp/src/server/TThreadedServer.h +74 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TBufferTransports.cpp +370 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TBufferTransports.h +667 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TFDTransport.cpp +77 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TFDTransport.h +73 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TFileTransport.cpp +953 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TFileTransport.h +442 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/THttpClient.cpp +348 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/THttpClient.h +111 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TServerSocket.cpp +368 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TServerSocket.h +76 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TServerTransport.h +92 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TShortReadTransport.h +96 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TSimpleFileTransport.cpp +54 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TSimpleFileTransport.h +41 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TSocket.cpp +591 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TSocket.h +242 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TSocketPool.cpp +235 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TSocketPool.h +191 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TTransport.h +224 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TTransportException.cpp +31 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TTransportException.h +117 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TTransportUtils.cpp +178 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TTransportUtils.h +287 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TZlibTransport.cpp +299 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TZlibTransport.h +219 -0
- data/vendor/gems/thrift/lib/cpp/thrift-nb.pc.in +30 -0
- data/vendor/gems/thrift/lib/cpp/thrift-z.pc.in +30 -0
- data/vendor/gems/thrift/lib/cpp/thrift.pc.in +29 -0
- data/vendor/gems/thrift/lib/csharp/Makefile.am +70 -0
- data/vendor/gems/thrift/lib/csharp/README +26 -0
- data/vendor/gems/thrift/lib/csharp/ThriftMSBuildTask/Properties/AssemblyInfo.cs +55 -0
- data/vendor/gems/thrift/lib/csharp/ThriftMSBuildTask/ThriftBuild.cs +242 -0
- data/vendor/gems/thrift/lib/csharp/ThriftMSBuildTask/ThriftMSBuildTask.csproj +62 -0
- data/vendor/gems/thrift/lib/csharp/src/Collections/THashSet.cs +142 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TBase.cs +34 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TBinaryProtocol.cs +392 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TField.cs +58 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TList.cs +50 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TMap.cs +58 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TMessage.cs +58 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TMessageType.cs +31 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocol.cs +87 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocolException.cs +61 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocolFactory.cs +29 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocolUtil.cs +94 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TSet.cs +50 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TStruct.cs +42 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TType.cs +40 -0
- data/vendor/gems/thrift/lib/csharp/src/Server/TServer.cs +135 -0
- data/vendor/gems/thrift/lib/csharp/src/Server/TSimpleServer.cs +148 -0
- data/vendor/gems/thrift/lib/csharp/src/Server/TThreadPoolServer.cs +186 -0
- data/vendor/gems/thrift/lib/csharp/src/Server/TThreadedServer.cs +234 -0
- data/vendor/gems/thrift/lib/csharp/src/TApplicationException.cs +131 -0
- data/vendor/gems/thrift/lib/csharp/src/TProcessor.cs +29 -0
- data/vendor/gems/thrift/lib/csharp/src/Thrift.csproj +73 -0
- data/vendor/gems/thrift/lib/csharp/src/Thrift.sln +35 -0
- data/vendor/gems/thrift/lib/csharp/src/Transport/TBufferedTransport.cs +100 -0
- data/vendor/gems/thrift/lib/csharp/src/Transport/TServerSocket.cs +157 -0
- data/vendor/gems/thrift/lib/csharp/src/Transport/TServerTransport.cs +39 -0
- data/vendor/gems/thrift/lib/csharp/src/Transport/TSocket.cs +144 -0
- data/vendor/gems/thrift/lib/csharp/src/Transport/TStreamTransport.cs +103 -0
- data/vendor/gems/thrift/lib/csharp/src/Transport/TTransport.cs +66 -0
- data/vendor/gems/thrift/lib/csharp/src/Transport/TTransportException.cs +64 -0
- data/vendor/gems/thrift/lib/csharp/src/Transport/TTransportFactory.cs +38 -0
- data/vendor/gems/thrift/lib/erl/Makefile +37 -0
- data/vendor/gems/thrift/lib/erl/README +56 -0
- data/vendor/gems/thrift/lib/erl/build/beamver +59 -0
- data/vendor/gems/thrift/lib/erl/build/buildtargets.mk +15 -0
- data/vendor/gems/thrift/lib/erl/build/colors.mk +24 -0
- data/vendor/gems/thrift/lib/erl/build/docs.mk +12 -0
- data/vendor/gems/thrift/lib/erl/build/mime.types +98 -0
- data/vendor/gems/thrift/lib/erl/build/otp.mk +146 -0
- data/vendor/gems/thrift/lib/erl/build/otp_subdir.mk +85 -0
- data/vendor/gems/thrift/lib/erl/build/raw_test.mk +29 -0
- data/vendor/gems/thrift/lib/erl/include/thrift_constants.hrl +54 -0
- data/vendor/gems/thrift/lib/erl/include/thrift_protocol.hrl +31 -0
- data/vendor/gems/thrift/lib/erl/src/Makefile +116 -0
- data/vendor/gems/thrift/lib/erl/src/test_handler.erl +26 -0
- data/vendor/gems/thrift/lib/erl/src/test_service.erl +29 -0
- data/vendor/gems/thrift/lib/erl/src/thrift.app.src +44 -0
- data/vendor/gems/thrift/lib/erl/src/thrift.appup.src +1 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_base64_transport.erl +64 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_binary_protocol.erl +325 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_buffered_transport.erl +180 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_client.erl +384 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_disk_log_transport.erl +118 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_file_transport.erl +87 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_framed_transport.erl +208 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_http_transport.erl +199 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_memory_buffer.erl +164 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_processor.erl +188 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_protocol.erl +356 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_server.erl +183 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_service.erl +25 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_socket_server.erl +249 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_socket_transport.erl +119 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_transport.erl +57 -0
- data/vendor/gems/thrift/lib/erl/vsn.mk +1 -0
- data/vendor/gems/thrift/lib/hs/README +82 -0
- data/vendor/gems/thrift/lib/hs/Setup.lhs +23 -0
- data/vendor/gems/thrift/lib/hs/TODO +2 -0
- data/vendor/gems/thrift/lib/hs/Thrift.cabal +20 -0
- data/vendor/gems/thrift/lib/hs/src/Thrift.hs +111 -0
- data/vendor/gems/thrift/lib/hs/src/Thrift/Protocol.hs +191 -0
- data/vendor/gems/thrift/lib/hs/src/Thrift/Protocol/Binary.hs +147 -0
- data/vendor/gems/thrift/lib/hs/src/Thrift/Server.hs +65 -0
- data/vendor/gems/thrift/lib/hs/src/Thrift/Transport.hs +60 -0
- data/vendor/gems/thrift/lib/hs/src/Thrift/Transport/Handle.hs +58 -0
- data/vendor/gems/thrift/lib/java/Makefile.am +38 -0
- data/vendor/gems/thrift/lib/java/README +43 -0
- data/vendor/gems/thrift/lib/java/build.xml +195 -0
- data/vendor/gems/thrift/lib/java/ivy.xml +8 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/IntRangeSet.java +171 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TApplicationException.java +123 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TBase.java +66 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TBaseHelper.java +102 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TByteArrayOutputStream.java +46 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TDeserializer.java +94 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TException.java +45 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TFieldRequirementType.java +30 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TProcessor.java +32 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TProcessorFactory.java +39 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TSerializer.java +110 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/FieldMetaData.java +69 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/FieldValueMetaData.java +42 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/ListMetaData.java +29 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/MapMetaData.java +31 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/SetMetaData.java +29 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/StructMetaData.java +31 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TBase64Utils.java +128 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TBinaryProtocol.java +331 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TCompactProtocol.java +741 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TField.java +48 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TJSONProtocol.java +927 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TList.java +38 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TMap.java +40 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TMessage.java +48 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TMessageType.java +31 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocol.java +146 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocolException.java +81 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocolFactory.java +30 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocolUtil.java +158 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TSet.java +42 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TSimpleJSONProtocol.java +384 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TStruct.java +36 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TType.java +40 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/THsHaServer.java +304 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TNonblockingServer.java +772 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TServer.java +126 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TSimpleServer.java +145 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java +271 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TFramedTransport.java +126 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/THttpClient.java +157 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TIOStreamTransport.java +159 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TMemoryBuffer.java +98 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingServerSocket.java +160 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingServerTransport.java +31 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingSocket.java +213 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingTransport.java +31 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TServerSocket.java +145 -0
- metadata +348 -37
- data/vendor/gems/trollop/FAQ.txt +0 -35
- data/vendor/gems/trollop/History.txt +0 -84
- data/vendor/gems/trollop/Manifest.txt +0 -7
- data/vendor/gems/trollop/README.txt +0 -38
- data/vendor/gems/trollop/Rakefile +0 -36
- data/vendor/gems/trollop/lib/trollop.rb +0 -695
- data/vendor/gems/trollop/release-script.txt +0 -13
- data/vendor/gems/trollop/test/test_trollop.rb +0 -957
- 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
|
+
|