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,442 @@
|
|
|
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_TRANSPORT_TFILETRANSPORT_H_
|
|
21
|
+
#define _THRIFT_TRANSPORT_TFILETRANSPORT_H_ 1
|
|
22
|
+
|
|
23
|
+
#include "TTransport.h"
|
|
24
|
+
#include "Thrift.h"
|
|
25
|
+
#include "TProcessor.h"
|
|
26
|
+
|
|
27
|
+
#include <string>
|
|
28
|
+
#include <stdio.h>
|
|
29
|
+
|
|
30
|
+
#include <pthread.h>
|
|
31
|
+
|
|
32
|
+
#include <boost/shared_ptr.hpp>
|
|
33
|
+
|
|
34
|
+
namespace apache { namespace thrift { namespace transport {
|
|
35
|
+
|
|
36
|
+
using apache::thrift::TProcessor;
|
|
37
|
+
using apache::thrift::protocol::TProtocolFactory;
|
|
38
|
+
|
|
39
|
+
// Data pertaining to a single event
|
|
40
|
+
typedef struct eventInfo {
|
|
41
|
+
uint8_t* eventBuff_;
|
|
42
|
+
uint32_t eventSize_;
|
|
43
|
+
uint32_t eventBuffPos_;
|
|
44
|
+
|
|
45
|
+
eventInfo():eventBuff_(NULL), eventSize_(0), eventBuffPos_(0){};
|
|
46
|
+
~eventInfo() {
|
|
47
|
+
if (eventBuff_) {
|
|
48
|
+
delete[] eventBuff_;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
} eventInfo;
|
|
52
|
+
|
|
53
|
+
// information about current read state
|
|
54
|
+
typedef struct readState {
|
|
55
|
+
eventInfo* event_;
|
|
56
|
+
|
|
57
|
+
// keep track of event size
|
|
58
|
+
uint8_t eventSizeBuff_[4];
|
|
59
|
+
uint8_t eventSizeBuffPos_;
|
|
60
|
+
bool readingSize_;
|
|
61
|
+
|
|
62
|
+
// read buffer variables
|
|
63
|
+
int32_t bufferPtr_;
|
|
64
|
+
int32_t bufferLen_;
|
|
65
|
+
|
|
66
|
+
// last successful dispatch point
|
|
67
|
+
int32_t lastDispatchPtr_;
|
|
68
|
+
|
|
69
|
+
void resetState(uint32_t lastDispatchPtr) {
|
|
70
|
+
readingSize_ = true;
|
|
71
|
+
eventSizeBuffPos_ = 0;
|
|
72
|
+
lastDispatchPtr_ = lastDispatchPtr;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
void resetAllValues() {
|
|
76
|
+
resetState(0);
|
|
77
|
+
bufferPtr_ = 0;
|
|
78
|
+
bufferLen_ = 0;
|
|
79
|
+
if (event_) {
|
|
80
|
+
delete(event_);
|
|
81
|
+
}
|
|
82
|
+
event_ = 0;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
readState() {
|
|
86
|
+
event_ = 0;
|
|
87
|
+
resetAllValues();
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
~readState() {
|
|
91
|
+
if (event_) {
|
|
92
|
+
delete(event_);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
} readState;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* TFileTransportBuffer - buffer class used by TFileTransport for queueing up events
|
|
100
|
+
* to be written to disk. Should be used in the following way:
|
|
101
|
+
* 1) Buffer created
|
|
102
|
+
* 2) Buffer written to (addEvent)
|
|
103
|
+
* 3) Buffer read from (getNext)
|
|
104
|
+
* 4) Buffer reset (reset)
|
|
105
|
+
* 5) Go back to 2, or destroy buffer
|
|
106
|
+
*
|
|
107
|
+
* The buffer should never be written to after it is read from, unless it is reset first.
|
|
108
|
+
* Note: The above rules are enforced mainly for debugging its sole client TFileTransport
|
|
109
|
+
* which uses the buffer in this way.
|
|
110
|
+
*
|
|
111
|
+
*/
|
|
112
|
+
class TFileTransportBuffer {
|
|
113
|
+
public:
|
|
114
|
+
TFileTransportBuffer(uint32_t size);
|
|
115
|
+
~TFileTransportBuffer();
|
|
116
|
+
|
|
117
|
+
bool addEvent(eventInfo *event);
|
|
118
|
+
eventInfo* getNext();
|
|
119
|
+
void reset();
|
|
120
|
+
bool isFull();
|
|
121
|
+
bool isEmpty();
|
|
122
|
+
|
|
123
|
+
private:
|
|
124
|
+
TFileTransportBuffer(); // should not be used
|
|
125
|
+
|
|
126
|
+
enum mode {
|
|
127
|
+
WRITE,
|
|
128
|
+
READ
|
|
129
|
+
};
|
|
130
|
+
mode bufferMode_;
|
|
131
|
+
|
|
132
|
+
uint32_t writePoint_;
|
|
133
|
+
uint32_t readPoint_;
|
|
134
|
+
uint32_t size_;
|
|
135
|
+
eventInfo** buffer_;
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Abstract interface for transports used to read files
|
|
140
|
+
*/
|
|
141
|
+
class TFileReaderTransport : virtual public TTransport {
|
|
142
|
+
public:
|
|
143
|
+
virtual int32_t getReadTimeout() = 0;
|
|
144
|
+
virtual void setReadTimeout(int32_t readTimeout) = 0;
|
|
145
|
+
|
|
146
|
+
virtual uint32_t getNumChunks() = 0;
|
|
147
|
+
virtual uint32_t getCurChunk() = 0;
|
|
148
|
+
virtual void seekToChunk(int32_t chunk) = 0;
|
|
149
|
+
virtual void seekToEnd() = 0;
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Abstract interface for transports used to write files
|
|
154
|
+
*/
|
|
155
|
+
class TFileWriterTransport : virtual public TTransport {
|
|
156
|
+
public:
|
|
157
|
+
virtual uint32_t getChunkSize() = 0;
|
|
158
|
+
virtual void setChunkSize(uint32_t chunkSize) = 0;
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* File implementation of a transport. Reads and writes are done to a
|
|
163
|
+
* file on disk.
|
|
164
|
+
*
|
|
165
|
+
*/
|
|
166
|
+
class TFileTransport : public TFileReaderTransport,
|
|
167
|
+
public TFileWriterTransport {
|
|
168
|
+
public:
|
|
169
|
+
TFileTransport(std::string path, bool readOnly=false);
|
|
170
|
+
~TFileTransport();
|
|
171
|
+
|
|
172
|
+
// TODO: what is the correct behaviour for this?
|
|
173
|
+
// the log file is generally always open
|
|
174
|
+
bool isOpen() {
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
void write(const uint8_t* buf, uint32_t len);
|
|
179
|
+
void flush();
|
|
180
|
+
|
|
181
|
+
uint32_t readAll(uint8_t* buf, uint32_t len);
|
|
182
|
+
uint32_t read(uint8_t* buf, uint32_t len);
|
|
183
|
+
|
|
184
|
+
// log-file specific functions
|
|
185
|
+
void seekToChunk(int32_t chunk);
|
|
186
|
+
void seekToEnd();
|
|
187
|
+
uint32_t getNumChunks();
|
|
188
|
+
uint32_t getCurChunk();
|
|
189
|
+
|
|
190
|
+
// for changing the output file
|
|
191
|
+
void resetOutputFile(int fd, std::string filename, int64_t offset);
|
|
192
|
+
|
|
193
|
+
// Setter/Getter functions for user-controllable options
|
|
194
|
+
void setReadBuffSize(uint32_t readBuffSize) {
|
|
195
|
+
if (readBuffSize) {
|
|
196
|
+
readBuffSize_ = readBuffSize;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
uint32_t getReadBuffSize() {
|
|
200
|
+
return readBuffSize_;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
static const int32_t TAIL_READ_TIMEOUT = -1;
|
|
204
|
+
static const int32_t NO_TAIL_READ_TIMEOUT = 0;
|
|
205
|
+
void setReadTimeout(int32_t readTimeout) {
|
|
206
|
+
readTimeout_ = readTimeout;
|
|
207
|
+
}
|
|
208
|
+
int32_t getReadTimeout() {
|
|
209
|
+
return readTimeout_;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
void setChunkSize(uint32_t chunkSize) {
|
|
213
|
+
if (chunkSize) {
|
|
214
|
+
chunkSize_ = chunkSize;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
uint32_t getChunkSize() {
|
|
218
|
+
return chunkSize_;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
void setEventBufferSize(uint32_t bufferSize) {
|
|
222
|
+
if (bufferAndThreadInitialized_) {
|
|
223
|
+
GlobalOutput("Cannot change the buffer size after writer thread started");
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
eventBufferSize_ = bufferSize;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
uint32_t getEventBufferSize() {
|
|
230
|
+
return eventBufferSize_;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
void setFlushMaxUs(uint32_t flushMaxUs) {
|
|
234
|
+
if (flushMaxUs) {
|
|
235
|
+
flushMaxUs_ = flushMaxUs;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
uint32_t getFlushMaxUs() {
|
|
239
|
+
return flushMaxUs_;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
void setFlushMaxBytes(uint32_t flushMaxBytes) {
|
|
243
|
+
if (flushMaxBytes) {
|
|
244
|
+
flushMaxBytes_ = flushMaxBytes;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
uint32_t getFlushMaxBytes() {
|
|
248
|
+
return flushMaxBytes_;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
void setMaxEventSize(uint32_t maxEventSize) {
|
|
252
|
+
maxEventSize_ = maxEventSize;
|
|
253
|
+
}
|
|
254
|
+
uint32_t getMaxEventSize() {
|
|
255
|
+
return maxEventSize_;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
void setMaxCorruptedEvents(uint32_t maxCorruptedEvents) {
|
|
259
|
+
maxCorruptedEvents_ = maxCorruptedEvents;
|
|
260
|
+
}
|
|
261
|
+
uint32_t getMaxCorruptedEvents() {
|
|
262
|
+
return maxCorruptedEvents_;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
void setEofSleepTimeUs(uint32_t eofSleepTime) {
|
|
266
|
+
if (eofSleepTime) {
|
|
267
|
+
eofSleepTime_ = eofSleepTime;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
uint32_t getEofSleepTimeUs() {
|
|
271
|
+
return eofSleepTime_;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
private:
|
|
275
|
+
// helper functions for writing to a file
|
|
276
|
+
void enqueueEvent(const uint8_t* buf, uint32_t eventLen, bool blockUntilFlush);
|
|
277
|
+
bool swapEventBuffers(struct timespec* deadline);
|
|
278
|
+
bool initBufferAndWriteThread();
|
|
279
|
+
|
|
280
|
+
// control for writer thread
|
|
281
|
+
static void* startWriterThread(void* ptr) {
|
|
282
|
+
(((TFileTransport*)ptr)->writerThread());
|
|
283
|
+
return 0;
|
|
284
|
+
}
|
|
285
|
+
void writerThread();
|
|
286
|
+
|
|
287
|
+
// helper functions for reading from a file
|
|
288
|
+
eventInfo* readEvent();
|
|
289
|
+
|
|
290
|
+
// event corruption-related functions
|
|
291
|
+
bool isEventCorrupted();
|
|
292
|
+
void performRecovery();
|
|
293
|
+
|
|
294
|
+
// Utility functions
|
|
295
|
+
void openLogFile();
|
|
296
|
+
void getNextFlushTime(struct timespec* ts_next_flush);
|
|
297
|
+
|
|
298
|
+
// Class variables
|
|
299
|
+
readState readState_;
|
|
300
|
+
uint8_t* readBuff_;
|
|
301
|
+
eventInfo* currentEvent_;
|
|
302
|
+
|
|
303
|
+
uint32_t readBuffSize_;
|
|
304
|
+
static const uint32_t DEFAULT_READ_BUFF_SIZE = 1 * 1024 * 1024;
|
|
305
|
+
|
|
306
|
+
int32_t readTimeout_;
|
|
307
|
+
static const int32_t DEFAULT_READ_TIMEOUT_MS = 200;
|
|
308
|
+
|
|
309
|
+
// size of chunks that file will be split up into
|
|
310
|
+
uint32_t chunkSize_;
|
|
311
|
+
static const uint32_t DEFAULT_CHUNK_SIZE = 16 * 1024 * 1024;
|
|
312
|
+
|
|
313
|
+
// size of event buffers
|
|
314
|
+
uint32_t eventBufferSize_;
|
|
315
|
+
static const uint32_t DEFAULT_EVENT_BUFFER_SIZE = 10000;
|
|
316
|
+
|
|
317
|
+
// max number of microseconds that can pass without flushing
|
|
318
|
+
uint32_t flushMaxUs_;
|
|
319
|
+
static const uint32_t DEFAULT_FLUSH_MAX_US = 3000000;
|
|
320
|
+
|
|
321
|
+
// max number of bytes that can be written without flushing
|
|
322
|
+
uint32_t flushMaxBytes_;
|
|
323
|
+
static const uint32_t DEFAULT_FLUSH_MAX_BYTES = 1000 * 1024;
|
|
324
|
+
|
|
325
|
+
// max event size
|
|
326
|
+
uint32_t maxEventSize_;
|
|
327
|
+
static const uint32_t DEFAULT_MAX_EVENT_SIZE = 0;
|
|
328
|
+
|
|
329
|
+
// max number of corrupted events per chunk
|
|
330
|
+
uint32_t maxCorruptedEvents_;
|
|
331
|
+
static const uint32_t DEFAULT_MAX_CORRUPTED_EVENTS = 0;
|
|
332
|
+
|
|
333
|
+
// sleep duration when EOF is hit
|
|
334
|
+
uint32_t eofSleepTime_;
|
|
335
|
+
static const uint32_t DEFAULT_EOF_SLEEP_TIME_US = 500 * 1000;
|
|
336
|
+
|
|
337
|
+
// sleep duration when a corrupted event is encountered
|
|
338
|
+
uint32_t corruptedEventSleepTime_;
|
|
339
|
+
static const uint32_t DEFAULT_CORRUPTED_SLEEP_TIME_US = 1 * 1000 * 1000;
|
|
340
|
+
|
|
341
|
+
// writer thread id
|
|
342
|
+
pthread_t writerThreadId_;
|
|
343
|
+
|
|
344
|
+
// buffers to hold data before it is flushed. Each element of the buffer stores a msg that
|
|
345
|
+
// needs to be written to the file. The buffers are swapped by the writer thread.
|
|
346
|
+
TFileTransportBuffer *dequeueBuffer_;
|
|
347
|
+
TFileTransportBuffer *enqueueBuffer_;
|
|
348
|
+
|
|
349
|
+
// conditions used to block when the buffer is full or empty
|
|
350
|
+
pthread_cond_t notFull_, notEmpty_;
|
|
351
|
+
volatile bool closing_;
|
|
352
|
+
|
|
353
|
+
// To keep track of whether the buffer has been flushed
|
|
354
|
+
pthread_cond_t flushed_;
|
|
355
|
+
volatile bool forceFlush_;
|
|
356
|
+
|
|
357
|
+
// Mutex that is grabbed when enqueueing and swapping the read/write buffers
|
|
358
|
+
pthread_mutex_t mutex_;
|
|
359
|
+
|
|
360
|
+
// File information
|
|
361
|
+
std::string filename_;
|
|
362
|
+
int fd_;
|
|
363
|
+
|
|
364
|
+
// Whether the writer thread and buffers have been initialized
|
|
365
|
+
bool bufferAndThreadInitialized_;
|
|
366
|
+
|
|
367
|
+
// Offset within the file
|
|
368
|
+
off_t offset_;
|
|
369
|
+
|
|
370
|
+
// event corruption information
|
|
371
|
+
uint32_t lastBadChunk_;
|
|
372
|
+
uint32_t numCorruptedEventsInChunk_;
|
|
373
|
+
|
|
374
|
+
bool readOnly_;
|
|
375
|
+
};
|
|
376
|
+
|
|
377
|
+
// Exception thrown when EOF is hit
|
|
378
|
+
class TEOFException : public TTransportException {
|
|
379
|
+
public:
|
|
380
|
+
TEOFException():
|
|
381
|
+
TTransportException(TTransportException::END_OF_FILE) {};
|
|
382
|
+
};
|
|
383
|
+
|
|
384
|
+
|
|
385
|
+
// wrapper class to process events from a file containing thrift events
|
|
386
|
+
class TFileProcessor {
|
|
387
|
+
public:
|
|
388
|
+
/**
|
|
389
|
+
* Constructor that defaults output transport to null transport
|
|
390
|
+
*
|
|
391
|
+
* @param processor processes log-file events
|
|
392
|
+
* @param protocolFactory protocol factory
|
|
393
|
+
* @param inputTransport file transport
|
|
394
|
+
*/
|
|
395
|
+
TFileProcessor(boost::shared_ptr<TProcessor> processor,
|
|
396
|
+
boost::shared_ptr<TProtocolFactory> protocolFactory,
|
|
397
|
+
boost::shared_ptr<TFileReaderTransport> inputTransport);
|
|
398
|
+
|
|
399
|
+
TFileProcessor(boost::shared_ptr<TProcessor> processor,
|
|
400
|
+
boost::shared_ptr<TProtocolFactory> inputProtocolFactory,
|
|
401
|
+
boost::shared_ptr<TProtocolFactory> outputProtocolFactory,
|
|
402
|
+
boost::shared_ptr<TFileReaderTransport> inputTransport);
|
|
403
|
+
|
|
404
|
+
/**
|
|
405
|
+
* Constructor
|
|
406
|
+
*
|
|
407
|
+
* @param processor processes log-file events
|
|
408
|
+
* @param protocolFactory protocol factory
|
|
409
|
+
* @param inputTransport input file transport
|
|
410
|
+
* @param output output transport
|
|
411
|
+
*/
|
|
412
|
+
TFileProcessor(boost::shared_ptr<TProcessor> processor,
|
|
413
|
+
boost::shared_ptr<TProtocolFactory> protocolFactory,
|
|
414
|
+
boost::shared_ptr<TFileReaderTransport> inputTransport,
|
|
415
|
+
boost::shared_ptr<TTransport> outputTransport);
|
|
416
|
+
|
|
417
|
+
/**
|
|
418
|
+
* processes events from the file
|
|
419
|
+
*
|
|
420
|
+
* @param numEvents number of events to process (0 for unlimited)
|
|
421
|
+
* @param tail tails the file if true
|
|
422
|
+
*/
|
|
423
|
+
void process(uint32_t numEvents, bool tail);
|
|
424
|
+
|
|
425
|
+
/**
|
|
426
|
+
* process events until the end of the chunk
|
|
427
|
+
*
|
|
428
|
+
*/
|
|
429
|
+
void processChunk();
|
|
430
|
+
|
|
431
|
+
private:
|
|
432
|
+
boost::shared_ptr<TProcessor> processor_;
|
|
433
|
+
boost::shared_ptr<TProtocolFactory> inputProtocolFactory_;
|
|
434
|
+
boost::shared_ptr<TProtocolFactory> outputProtocolFactory_;
|
|
435
|
+
boost::shared_ptr<TFileReaderTransport> inputTransport_;
|
|
436
|
+
boost::shared_ptr<TTransport> outputTransport_;
|
|
437
|
+
};
|
|
438
|
+
|
|
439
|
+
|
|
440
|
+
}}} // apache::thrift::transport
|
|
441
|
+
|
|
442
|
+
#endif // _THRIFT_TRANSPORT_TFILETRANSPORT_H_
|
|
@@ -0,0 +1,348 @@
|
|
|
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 <cstdlib>
|
|
21
|
+
#include <sstream>
|
|
22
|
+
|
|
23
|
+
#include "THttpClient.h"
|
|
24
|
+
#include "TSocket.h"
|
|
25
|
+
|
|
26
|
+
namespace apache { namespace thrift { namespace transport {
|
|
27
|
+
|
|
28
|
+
using namespace std;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Http client implementation.
|
|
32
|
+
*
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
// Yeah, yeah, hacky to put these here, I know.
|
|
36
|
+
static const char* CRLF = "\r\n";
|
|
37
|
+
static const int CRLF_LEN = 2;
|
|
38
|
+
|
|
39
|
+
THttpClient::THttpClient(boost::shared_ptr<TTransport> transport, string host, string path) :
|
|
40
|
+
transport_(transport),
|
|
41
|
+
host_(host),
|
|
42
|
+
path_(path),
|
|
43
|
+
readHeaders_(true),
|
|
44
|
+
chunked_(false),
|
|
45
|
+
chunkedDone_(false),
|
|
46
|
+
chunkSize_(0),
|
|
47
|
+
contentLength_(0),
|
|
48
|
+
httpBuf_(NULL),
|
|
49
|
+
httpPos_(0),
|
|
50
|
+
httpBufLen_(0),
|
|
51
|
+
httpBufSize_(1024) {
|
|
52
|
+
init();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
THttpClient::THttpClient(string host, int port, string path) :
|
|
56
|
+
host_(host),
|
|
57
|
+
path_(path),
|
|
58
|
+
readHeaders_(true),
|
|
59
|
+
chunked_(false),
|
|
60
|
+
chunkedDone_(false),
|
|
61
|
+
chunkSize_(0),
|
|
62
|
+
contentLength_(0),
|
|
63
|
+
httpBuf_(NULL),
|
|
64
|
+
httpPos_(0),
|
|
65
|
+
httpBufLen_(0),
|
|
66
|
+
httpBufSize_(1024) {
|
|
67
|
+
transport_ = boost::shared_ptr<TTransport>(new TSocket(host, port));
|
|
68
|
+
init();
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
void THttpClient::init() {
|
|
72
|
+
httpBuf_ = (char*)std::malloc(httpBufSize_+1);
|
|
73
|
+
if (httpBuf_ == NULL) {
|
|
74
|
+
throw TTransportException("Out of memory.");
|
|
75
|
+
}
|
|
76
|
+
httpBuf_[httpBufLen_] = '\0';
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
THttpClient::~THttpClient() {
|
|
80
|
+
if (httpBuf_ != NULL) {
|
|
81
|
+
std::free(httpBuf_);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
uint32_t THttpClient::read(uint8_t* buf, uint32_t len) {
|
|
86
|
+
if (readBuffer_.available_read() == 0) {
|
|
87
|
+
readBuffer_.resetBuffer();
|
|
88
|
+
uint32_t got = readMoreData();
|
|
89
|
+
if (got == 0) {
|
|
90
|
+
return 0;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return readBuffer_.read(buf, len);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
void THttpClient::readEnd() {
|
|
97
|
+
// Read any pending chunked data (footers etc.)
|
|
98
|
+
if (chunked_) {
|
|
99
|
+
while (!chunkedDone_) {
|
|
100
|
+
readChunked();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
uint32_t THttpClient::readMoreData() {
|
|
106
|
+
// Get more data!
|
|
107
|
+
refill();
|
|
108
|
+
|
|
109
|
+
if (readHeaders_) {
|
|
110
|
+
readHeaders();
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (chunked_) {
|
|
114
|
+
return readChunked();
|
|
115
|
+
} else {
|
|
116
|
+
return readContent(contentLength_);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
uint32_t THttpClient::readChunked() {
|
|
121
|
+
uint32_t length = 0;
|
|
122
|
+
|
|
123
|
+
char* line = readLine();
|
|
124
|
+
uint32_t chunkSize = parseChunkSize(line);
|
|
125
|
+
if (chunkSize == 0) {
|
|
126
|
+
readChunkedFooters();
|
|
127
|
+
} else {
|
|
128
|
+
// Read data content
|
|
129
|
+
length += readContent(chunkSize);
|
|
130
|
+
// Read trailing CRLF after content
|
|
131
|
+
readLine();
|
|
132
|
+
}
|
|
133
|
+
return length;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
void THttpClient::readChunkedFooters() {
|
|
137
|
+
// End of data, read footer lines until a blank one appears
|
|
138
|
+
while (true) {
|
|
139
|
+
char* line = readLine();
|
|
140
|
+
if (strlen(line) == 0) {
|
|
141
|
+
chunkedDone_ = true;
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
uint32_t THttpClient::parseChunkSize(char* line) {
|
|
148
|
+
char* semi = strchr(line, ';');
|
|
149
|
+
if (semi != NULL) {
|
|
150
|
+
*semi = '\0';
|
|
151
|
+
}
|
|
152
|
+
int size = 0;
|
|
153
|
+
sscanf(line, "%x", &size);
|
|
154
|
+
return (uint32_t)size;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
uint32_t THttpClient::readContent(uint32_t size) {
|
|
158
|
+
uint32_t need = size;
|
|
159
|
+
while (need > 0) {
|
|
160
|
+
uint32_t avail = httpBufLen_ - httpPos_;
|
|
161
|
+
if (avail == 0) {
|
|
162
|
+
// We have given all the data, reset position to head of the buffer
|
|
163
|
+
httpPos_ = 0;
|
|
164
|
+
httpBufLen_ = 0;
|
|
165
|
+
refill();
|
|
166
|
+
|
|
167
|
+
// Now have available however much we read
|
|
168
|
+
avail = httpBufLen_;
|
|
169
|
+
}
|
|
170
|
+
uint32_t give = avail;
|
|
171
|
+
if (need < give) {
|
|
172
|
+
give = need;
|
|
173
|
+
}
|
|
174
|
+
readBuffer_.write((uint8_t*)(httpBuf_+httpPos_), give);
|
|
175
|
+
httpPos_ += give;
|
|
176
|
+
need -= give;
|
|
177
|
+
}
|
|
178
|
+
return size;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
char* THttpClient::readLine() {
|
|
182
|
+
while (true) {
|
|
183
|
+
char* eol = NULL;
|
|
184
|
+
|
|
185
|
+
eol = strstr(httpBuf_+httpPos_, CRLF);
|
|
186
|
+
|
|
187
|
+
// No CRLF yet?
|
|
188
|
+
if (eol == NULL) {
|
|
189
|
+
// Shift whatever we have now to front and refill
|
|
190
|
+
shift();
|
|
191
|
+
refill();
|
|
192
|
+
} else {
|
|
193
|
+
// Return pointer to next line
|
|
194
|
+
*eol = '\0';
|
|
195
|
+
char* line = httpBuf_+httpPos_;
|
|
196
|
+
httpPos_ = (eol-httpBuf_) + CRLF_LEN;
|
|
197
|
+
return line;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
void THttpClient::shift() {
|
|
204
|
+
if (httpBufLen_ > httpPos_) {
|
|
205
|
+
// Shift down remaining data and read more
|
|
206
|
+
uint32_t length = httpBufLen_ - httpPos_;
|
|
207
|
+
memmove(httpBuf_, httpBuf_+httpPos_, length);
|
|
208
|
+
httpBufLen_ = length;
|
|
209
|
+
} else {
|
|
210
|
+
httpBufLen_ = 0;
|
|
211
|
+
}
|
|
212
|
+
httpPos_ = 0;
|
|
213
|
+
httpBuf_[httpBufLen_] = '\0';
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
void THttpClient::refill() {
|
|
217
|
+
uint32_t avail = httpBufSize_ - httpBufLen_;
|
|
218
|
+
if (avail <= (httpBufSize_ / 4)) {
|
|
219
|
+
httpBufSize_ *= 2;
|
|
220
|
+
httpBuf_ = (char*)std::realloc(httpBuf_, httpBufSize_+1);
|
|
221
|
+
if (httpBuf_ == NULL) {
|
|
222
|
+
throw TTransportException("Out of memory.");
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// Read more data
|
|
227
|
+
uint32_t got = transport_->read((uint8_t*)(httpBuf_+httpBufLen_), httpBufSize_-httpBufLen_);
|
|
228
|
+
httpBufLen_ += got;
|
|
229
|
+
httpBuf_[httpBufLen_] = '\0';
|
|
230
|
+
|
|
231
|
+
if (got == 0) {
|
|
232
|
+
throw TTransportException("Could not refill buffer");
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
void THttpClient::readHeaders() {
|
|
237
|
+
// Initialize headers state variables
|
|
238
|
+
contentLength_ = 0;
|
|
239
|
+
chunked_ = false;
|
|
240
|
+
chunkedDone_ = false;
|
|
241
|
+
chunkSize_ = 0;
|
|
242
|
+
|
|
243
|
+
// Control state flow
|
|
244
|
+
bool statusLine = true;
|
|
245
|
+
bool finished = false;
|
|
246
|
+
|
|
247
|
+
// Loop until headers are finished
|
|
248
|
+
while (true) {
|
|
249
|
+
char* line = readLine();
|
|
250
|
+
|
|
251
|
+
if (strlen(line) == 0) {
|
|
252
|
+
if (finished) {
|
|
253
|
+
readHeaders_ = false;
|
|
254
|
+
return;
|
|
255
|
+
} else {
|
|
256
|
+
// Must have been an HTTP 100, keep going for another status line
|
|
257
|
+
statusLine = true;
|
|
258
|
+
}
|
|
259
|
+
} else {
|
|
260
|
+
if (statusLine) {
|
|
261
|
+
statusLine = false;
|
|
262
|
+
finished = parseStatusLine(line);
|
|
263
|
+
} else {
|
|
264
|
+
parseHeader(line);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
bool THttpClient::parseStatusLine(char* status) {
|
|
271
|
+
char* http = status;
|
|
272
|
+
|
|
273
|
+
char* code = strchr(http, ' ');
|
|
274
|
+
if (code == NULL) {
|
|
275
|
+
throw TTransportException(string("Bad Status: ") + status);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
*code = '\0';
|
|
279
|
+
while (*(code++) == ' ');
|
|
280
|
+
|
|
281
|
+
char* msg = strchr(code, ' ');
|
|
282
|
+
if (msg == NULL) {
|
|
283
|
+
throw TTransportException(string("Bad Status: ") + status);
|
|
284
|
+
}
|
|
285
|
+
*msg = '\0';
|
|
286
|
+
|
|
287
|
+
if (strcmp(code, "200") == 0) {
|
|
288
|
+
// HTTP 200 = OK, we got the response
|
|
289
|
+
return true;
|
|
290
|
+
} else if (strcmp(code, "100") == 0) {
|
|
291
|
+
// HTTP 100 = continue, just keep reading
|
|
292
|
+
return false;
|
|
293
|
+
} else {
|
|
294
|
+
throw TTransportException(string("Bad Status: ") + status);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
void THttpClient::parseHeader(char* header) {
|
|
299
|
+
char* colon = strchr(header, ':');
|
|
300
|
+
if (colon == NULL) {
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
uint32_t sz = colon - header;
|
|
304
|
+
char* value = colon+1;
|
|
305
|
+
|
|
306
|
+
if (strncmp(header, "Transfer-Encoding", sz) == 0) {
|
|
307
|
+
if (strstr(value, "chunked") != NULL) {
|
|
308
|
+
chunked_ = true;
|
|
309
|
+
}
|
|
310
|
+
} else if (strncmp(header, "Content-Length", sz) == 0) {
|
|
311
|
+
chunked_ = false;
|
|
312
|
+
contentLength_ = atoi(value);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
void THttpClient::write(const uint8_t* buf, uint32_t len) {
|
|
317
|
+
writeBuffer_.write(buf, len);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
void THttpClient::flush() {
|
|
321
|
+
// Fetch the contents of the write buffer
|
|
322
|
+
uint8_t* buf;
|
|
323
|
+
uint32_t len;
|
|
324
|
+
writeBuffer_.getBuffer(&buf, &len);
|
|
325
|
+
|
|
326
|
+
// Construct the HTTP header
|
|
327
|
+
std::ostringstream h;
|
|
328
|
+
h <<
|
|
329
|
+
"POST " << path_ << " HTTP/1.1" << CRLF <<
|
|
330
|
+
"Host: " << host_ << CRLF <<
|
|
331
|
+
"Content-Type: application/x-thrift" << CRLF <<
|
|
332
|
+
"Content-Length: " << len << CRLF <<
|
|
333
|
+
"Accept: application/x-thrift" << CRLF <<
|
|
334
|
+
"User-Agent: C++/THttpClient" << CRLF <<
|
|
335
|
+
CRLF;
|
|
336
|
+
string header = h.str();
|
|
337
|
+
|
|
338
|
+
// Write the header, then the data, then flush
|
|
339
|
+
transport_->write((const uint8_t*)header.c_str(), header.size());
|
|
340
|
+
transport_->write(buf, len);
|
|
341
|
+
transport_->flush();
|
|
342
|
+
|
|
343
|
+
// Reset the buffer and header variables
|
|
344
|
+
writeBuffer_.resetBuffer();
|
|
345
|
+
readHeaders_ = true;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
}}} // apache::thrift::transport
|