mirror of
https://github.com/facebook/rocksdb.git
synced 2024-11-29 18:33:58 +00:00
Cleanup thrift header files.
Move thrift api from thrift/leveldb.thrift to thrift/if/leveldb.thrift Summary: Test Plan: Reviewers: CC: Task ID: # Blame Rev:
This commit is contained in:
parent
d11b637f34
commit
bfaa1bd26c
|
@ -1,5 +1,7 @@
|
||||||
This directory has the thrift server code that exposes leveldb apis.
|
This directory has the thrift server code that exposes leveldb apis.
|
||||||
|
|
||||||
|
The thrift api is specified in thrift/if/leveldb.thrift.
|
||||||
|
|
||||||
The thrift header files are in ./thrift/lib. These are part of
|
The thrift header files are in ./thrift/lib. These are part of
|
||||||
Apache Thrift code base and are needed for compilation of the leveldb
|
Apache Thrift code base and are needed for compilation of the leveldb
|
||||||
thrift server. The thrift libraries are copied into ./thrift/libs.
|
thrift server. The thrift libraries are copied into ./thrift/libs.
|
||||||
|
@ -16,3 +18,8 @@ enviroment variables appropriately:
|
||||||
You can run the leveldb server unit tests by
|
You can run the leveldb server unit tests by
|
||||||
./leveldb_server_test
|
./leveldb_server_test
|
||||||
|
|
||||||
|
You can regenerate the thrift cpp files by doing the following
|
||||||
|
|
||||||
|
cd ./thrift
|
||||||
|
thrift --gen cpp if/leveldb.thrift
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,19 @@ extern const std::map<int, const char*> _CompressionType_VALUES_TO_NAMES;
|
||||||
|
|
||||||
extern const std::map<const char*, int, apache::thrift::ltstr> _CompressionType_NAMES_TO_VALUES;
|
extern const std::map<const char*, int, apache::thrift::ltstr> _CompressionType_NAMES_TO_VALUES;
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
namespace apache { namespace thrift {
|
||||||
|
template<>
|
||||||
|
inline constexpr ::Tleveldb::CompressionType TEnumTraits< ::Tleveldb::CompressionType>::min() {
|
||||||
|
return ::Tleveldb::CompressionType::kNoCompression;
|
||||||
|
}
|
||||||
|
template<>
|
||||||
|
inline constexpr ::Tleveldb::CompressionType TEnumTraits< ::Tleveldb::CompressionType>::max() {
|
||||||
|
return ::Tleveldb::CompressionType::kSnappyCompression;
|
||||||
|
}
|
||||||
|
}} // apache:thrift
|
||||||
|
|
||||||
|
namespace Tleveldb {
|
||||||
enum Code {
|
enum Code {
|
||||||
kOk = 0,
|
kOk = 0,
|
||||||
kNotFound = 1,
|
kNotFound = 1,
|
||||||
|
@ -42,6 +55,19 @@ extern const std::map<int, const char*> _Code_VALUES_TO_NAMES;
|
||||||
|
|
||||||
extern const std::map<const char*, int, apache::thrift::ltstr> _Code_NAMES_TO_VALUES;
|
extern const std::map<const char*, int, apache::thrift::ltstr> _Code_NAMES_TO_VALUES;
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
namespace apache { namespace thrift {
|
||||||
|
template<>
|
||||||
|
inline constexpr ::Tleveldb::Code TEnumTraits< ::Tleveldb::Code>::min() {
|
||||||
|
return ::Tleveldb::Code::kOk;
|
||||||
|
}
|
||||||
|
template<>
|
||||||
|
inline constexpr ::Tleveldb::Code TEnumTraits< ::Tleveldb::Code>::max() {
|
||||||
|
return ::Tleveldb::Code::kEnd;
|
||||||
|
}
|
||||||
|
}} // apache:thrift
|
||||||
|
|
||||||
|
namespace Tleveldb {
|
||||||
enum IteratorType {
|
enum IteratorType {
|
||||||
seekToFirst = 0,
|
seekToFirst = 0,
|
||||||
seekToLast = 1,
|
seekToLast = 1,
|
||||||
|
@ -52,6 +78,19 @@ extern const std::map<int, const char*> _IteratorType_VALUES_TO_NAMES;
|
||||||
|
|
||||||
extern const std::map<const char*, int, apache::thrift::ltstr> _IteratorType_NAMES_TO_VALUES;
|
extern const std::map<const char*, int, apache::thrift::ltstr> _IteratorType_NAMES_TO_VALUES;
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
namespace apache { namespace thrift {
|
||||||
|
template<>
|
||||||
|
inline constexpr ::Tleveldb::IteratorType TEnumTraits< ::Tleveldb::IteratorType>::min() {
|
||||||
|
return ::Tleveldb::IteratorType::seekToFirst;
|
||||||
|
}
|
||||||
|
template<>
|
||||||
|
inline constexpr ::Tleveldb::IteratorType TEnumTraits< ::Tleveldb::IteratorType>::max() {
|
||||||
|
return ::Tleveldb::IteratorType::seekToKey;
|
||||||
|
}
|
||||||
|
}} // apache:thrift
|
||||||
|
|
||||||
|
namespace Tleveldb {
|
||||||
typedef std::string Text;
|
typedef std::string Text;
|
||||||
|
|
||||||
typedef std::string Bytes;
|
typedef std::string Bytes;
|
||||||
|
|
|
@ -1,46 +0,0 @@
|
||||||
# TARGETS file for thrift/lib/cpp
|
|
||||||
|
|
||||||
cpp_library (
|
|
||||||
name = "thrift_exception",
|
|
||||||
srcs = [
|
|
||||||
"TApplicationException.cpp",
|
|
||||||
],
|
|
||||||
external_deps = [
|
|
||||||
('boost', None),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_library (
|
|
||||||
name = "thrift",
|
|
||||||
srcs = [
|
|
||||||
"VirtualProfiling.cpp",
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
"@/thrift/lib/cpp:thrift_base",
|
|
||||||
"@/thrift/lib/cpp/concurrency",
|
|
||||||
"@/thrift/lib/cpp/processor",
|
|
||||||
"@/thrift/lib/cpp/protocol",
|
|
||||||
"@/thrift/lib/cpp/server",
|
|
||||||
"@/thrift/lib/cpp/transport",
|
|
||||||
"@/thrift/lib/cpp:thrift_exception",
|
|
||||||
]
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_library (
|
|
||||||
name = "thrift_base",
|
|
||||||
srcs = [
|
|
||||||
"Thrift.cpp",
|
|
||||||
"EventHandlerBase.cpp",
|
|
||||||
],
|
|
||||||
external_deps = [
|
|
||||||
('boost', None),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_library(
|
|
||||||
name = "reflection",
|
|
||||||
srcs = [],
|
|
||||||
deps = [
|
|
||||||
"@/thrift/lib/thrift:reflection-cpp",
|
|
||||||
],
|
|
||||||
)
|
|
|
@ -77,6 +77,16 @@ struct TEnumTraits {
|
||||||
* Note the use of helper function 'findValue(...)', below.
|
* Note the use of helper function 'findValue(...)', below.
|
||||||
*/
|
*/
|
||||||
static bool findValue(const char* name, T* outValue);
|
static bool findValue(const char* name, T* outValue);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the minimum value.
|
||||||
|
*/
|
||||||
|
static constexpr T min();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the maximum value.
|
||||||
|
*/
|
||||||
|
static constexpr T max();
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
* Helper method used by codegen implementation of findName, Supports
|
* Helper method used by codegen implementation of findName, Supports
|
||||||
|
@ -216,6 +226,12 @@ extern TOutput GlobalOutput;
|
||||||
* Should never be instantiated, only caught.
|
* Should never be instantiated, only caught.
|
||||||
*/
|
*/
|
||||||
class TException : public std::exception {
|
class TException : public std::exception {
|
||||||
|
public:
|
||||||
|
TException() {}
|
||||||
|
TException(TException&&) {}
|
||||||
|
TException(const TException&) {}
|
||||||
|
TException& operator=(const TException&) { return *this; }
|
||||||
|
TException& operator=(TException&&) { return *this; }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,103 +0,0 @@
|
||||||
# The base async library
|
|
||||||
cpp_library(
|
|
||||||
name = 'async_base',
|
|
||||||
srcs = [
|
|
||||||
'TAsyncServerSocket.cpp',
|
|
||||||
'TAsyncSignalHandler.cpp',
|
|
||||||
'TAsyncSocket.cpp',
|
|
||||||
'TAsyncTimeout.cpp',
|
|
||||||
'TBinaryAsyncChannel.cpp',
|
|
||||||
'THeaderAsyncChannel.cpp',
|
|
||||||
'TEventBase.cpp',
|
|
||||||
'TEventBaseManager.cpp',
|
|
||||||
'TEventHandler.cpp',
|
|
||||||
'TFramedAsyncChannel.cpp',
|
|
||||||
'TNotificationPipe.cpp',
|
|
||||||
'TUnframedAsyncChannel.cpp',
|
|
||||||
'THttpAsyncChannel.cpp',
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
'@/folly/experimental/io',
|
|
||||||
'@/thrift/lib/cpp:thrift_base',
|
|
||||||
'@/thrift/lib/cpp/transport',
|
|
||||||
'@/thrift/lib/cpp/transport:header',
|
|
||||||
'@/thrift/lib/cpp/protocol',
|
|
||||||
'@/thrift/lib/cpp/server',
|
|
||||||
'@/thrift/lib/cpp/util:httpparser',
|
|
||||||
],
|
|
||||||
external_deps = [ ('libevent', None) ],
|
|
||||||
)
|
|
||||||
|
|
||||||
# TEventServer library (async name is used all over), now depends on ssl
|
|
||||||
cpp_library(
|
|
||||||
name = 'async',
|
|
||||||
srcs = [
|
|
||||||
'TEventConnection.cpp',
|
|
||||||
'TEventServer.cpp',
|
|
||||||
'TEventTask.cpp',
|
|
||||||
'TEventWorker.cpp',
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
':async_ssl',
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_library (
|
|
||||||
name = "async_ssl",
|
|
||||||
srcs = [
|
|
||||||
'TAsyncSSLServerSocket.cpp',
|
|
||||||
'TAsyncSSLSocket.cpp',
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
":async_base",
|
|
||||||
"@/thrift/lib/cpp/transport:transport_ssl",
|
|
||||||
],
|
|
||||||
external_deps = [ ("openssl", None, "ssl"),
|
|
||||||
("openssl", None, "crypto") ],
|
|
||||||
)
|
|
||||||
|
|
||||||
# This library is the same as async_ssl, except that it has the debug
|
|
||||||
# logging level set to 4, whereas async_ssl has debug logging disabled.
|
|
||||||
cpp_library (
|
|
||||||
name = "async_ssl_log",
|
|
||||||
srcs = [
|
|
||||||
'TAsyncSSLServerSocket.cpp',
|
|
||||||
'TAsyncSSLSocket.cpp',
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
":async_base",
|
|
||||||
"@/thrift/lib/cpp/transport:transport_ssl",
|
|
||||||
],
|
|
||||||
external_deps = [ ("openssl", None, "ssl"),
|
|
||||||
("openssl", None, "crypto") ],
|
|
||||||
preprocessor_flags = [
|
|
||||||
"-DT_GLOBAL_DEBUGGING_LEVEL=4"
|
|
||||||
],
|
|
||||||
output_subdir = "async_ssl_log",
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_library(
|
|
||||||
name = 'zlib',
|
|
||||||
srcs = [
|
|
||||||
'TZlibAsyncChannel.cpp',
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
':async',
|
|
||||||
'@/thrift/lib/cpp/transport:zlib',
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
# Parts of the async library that depend on C++11 features.
|
|
||||||
# This is separate from the main async library for now so that users who cannot
|
|
||||||
# depend on C++11 features yet will still be able to use the bulk of the async
|
|
||||||
# library.
|
|
||||||
cpp_library(
|
|
||||||
name = 'async_cxx11',
|
|
||||||
srcs = [
|
|
||||||
'TAsyncTimeoutSet.cpp',
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
':async_base',
|
|
||||||
'@/folly',
|
|
||||||
],
|
|
||||||
)
|
|
|
@ -103,6 +103,12 @@ class TAsyncChannel {
|
||||||
return sendAndRecvMessage(cob, cob, sendBuf, recvBuf);
|
return sendAndRecvMessage(cob, cob, sendBuf, recvBuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cancel pending callbacks. Use this when the channel is closing because the
|
||||||
|
* server had been shut down.
|
||||||
|
*/
|
||||||
|
virtual void cancelCallbacks() = 0;
|
||||||
|
|
||||||
// TODO(dreiss): Make this nonvirtual when TFramedSocketAsyncChannel gets
|
// TODO(dreiss): Make this nonvirtual when TFramedSocketAsyncChannel gets
|
||||||
// renamed to TFramedAsyncChannel.
|
// renamed to TFramedAsyncChannel.
|
||||||
virtual boost::shared_ptr<TAsyncTransport> getTransport() = 0;
|
virtual boost::shared_ptr<TAsyncTransport> getTransport() = 0;
|
||||||
|
|
|
@ -120,6 +120,14 @@ class TAsyncSSLSocket : public TAsyncSocket {
|
||||||
TAsyncSSLSocket* sslSocket_;
|
TAsyncSSLSocket* sslSocket_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* These are passed to the application via errno, so values have to be
|
||||||
|
* outside the valid errno range
|
||||||
|
*/
|
||||||
|
enum SSLError {
|
||||||
|
SSL_CLIENT_RENEGOTIATION_ATTEMPT = 0x8001
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a client TAsyncSSLSocket
|
* Create a client TAsyncSSLSocket
|
||||||
*/
|
*/
|
||||||
|
@ -128,6 +136,8 @@ class TAsyncSSLSocket : public TAsyncSocket {
|
||||||
TAsyncSocket(evb),
|
TAsyncSocket(evb),
|
||||||
corked_(false),
|
corked_(false),
|
||||||
server_(false),
|
server_(false),
|
||||||
|
handshakeComplete_(false),
|
||||||
|
renegotiateAttempted_(false),
|
||||||
sslState_(STATE_UNINIT),
|
sslState_(STATE_UNINIT),
|
||||||
ctx_(ctx),
|
ctx_(ctx),
|
||||||
handshakeCallback_(NULL),
|
handshakeCallback_(NULL),
|
||||||
|
@ -176,7 +186,7 @@ class TAsyncSSLSocket : public TAsyncSocket {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: implement support for SSL renegosiation.
|
* TODO: implement support for SSL renegotiation.
|
||||||
*
|
*
|
||||||
* This involves proper handling of the SSL_ERROR_WANT_READ/WRITE
|
* This involves proper handling of the SSL_ERROR_WANT_READ/WRITE
|
||||||
* code as a result of SSL_write/read(), instead of returning an
|
* code as a result of SSL_write/read(), instead of returning an
|
||||||
|
@ -293,6 +303,41 @@ class TAsyncSSLSocket : public TAsyncSocket {
|
||||||
*/
|
*/
|
||||||
bool getSSLSessionReused() const;
|
bool getSSLSessionReused() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the negociated cipher name for this SSL connection.
|
||||||
|
* Returns the cipher used or the constant value "NONE" when no SSL session
|
||||||
|
* has been established.
|
||||||
|
*/
|
||||||
|
const char *getNegotiatedCipherName() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the SSL version for this connection.
|
||||||
|
* Possible return values are SSL2_VERSION, SSL3_VERSION, TLS1_VERSION,
|
||||||
|
* with hexa representations 0x200, 0x300, 0x301,
|
||||||
|
* or 0 if no SSL session has been established.
|
||||||
|
*/
|
||||||
|
int getSSLVersion() const;
|
||||||
|
|
||||||
|
/* Get the number of bytes read from the wire (including protocol
|
||||||
|
* overhead). Returns 0 once the connection has been closed.
|
||||||
|
*/
|
||||||
|
unsigned long getBytesRead() const {
|
||||||
|
if (ssl_ != NULL) {
|
||||||
|
return BIO_number_read(SSL_get_rbio(ssl_));
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get the number of bytes written to the wire (including protocol
|
||||||
|
* overhead). Returns 0 once the connection has been closed.
|
||||||
|
*/
|
||||||
|
unsigned long getBytesWritten() const {
|
||||||
|
if (ssl_ != NULL) {
|
||||||
|
return BIO_number_written(SSL_get_wbio(ssl_));
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
virtual void attachEventBase(TEventBase* eventBase) {
|
virtual void attachEventBase(TEventBase* eventBase) {
|
||||||
TAsyncSocket::attachEventBase(eventBase);
|
TAsyncSocket::attachEventBase(eventBase);
|
||||||
handshakeTimeout_.attachEventBase(eventBase);
|
handshakeTimeout_.attachEventBase(eventBase);
|
||||||
|
@ -339,10 +384,18 @@ class TAsyncSSLSocket : public TAsyncSocket {
|
||||||
|
|
||||||
void invokeHandshakeCallback();
|
void invokeHandshakeCallback();
|
||||||
|
|
||||||
|
static void sslInfoCallback(const SSL *ssl, int type, int val);
|
||||||
|
|
||||||
// Whether we've applied the TCP_CORK option to the socket
|
// Whether we've applied the TCP_CORK option to the socket
|
||||||
bool corked_;
|
bool corked_;
|
||||||
// SSL related members.
|
// SSL related members.
|
||||||
bool server_;
|
bool server_;
|
||||||
|
// Used to prevent client-initiated renegotiation. Note that TAsyncSSLSocket
|
||||||
|
// doesn't fully support renegotiation, so we could just fail all attempts
|
||||||
|
// to enforce this. Once it is supported, we should make it an option
|
||||||
|
// to disable client-initiated renegotiation.
|
||||||
|
bool handshakeComplete_;
|
||||||
|
bool renegotiateAttempted_;
|
||||||
SSLStateEnum sslState_;
|
SSLStateEnum sslState_;
|
||||||
boost::shared_ptr<transport::SSLContext> ctx_;
|
boost::shared_ptr<transport::SSLContext> ctx_;
|
||||||
// Callback for SSL_accept() or SSL_connect()
|
// Callback for SSL_accept() or SSL_connect()
|
||||||
|
|
|
@ -285,6 +285,32 @@ class TAsyncSocket : public TAsyncTransport,
|
||||||
return sendTimeout_;
|
return sendTimeout_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the maximum number of reads to execute from the underlying
|
||||||
|
* socket each time the TEventBase detects that new ingress data is
|
||||||
|
* available. The default is unlimited, but callers can use this method
|
||||||
|
* to limit the amount of data read from the socket per event loop
|
||||||
|
* iteration.
|
||||||
|
*
|
||||||
|
* @param maxReads Maximum number of reads per data-available event;
|
||||||
|
* a value of zero means unlimited.
|
||||||
|
*/
|
||||||
|
void setMaxReadsPerEvent(uint16_t maxReads) {
|
||||||
|
maxReadsPerEvent_ = maxReads;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the maximum number of reads this object will execute from
|
||||||
|
* the underlying socket each time the TEventBase detects that new
|
||||||
|
* ingress data is available.
|
||||||
|
*
|
||||||
|
* @returns Maximum number of reads per data-available event; a value
|
||||||
|
* of zero means unlimited.
|
||||||
|
*/
|
||||||
|
uint16_t getMaxReadsPerEvent() const {
|
||||||
|
return maxReadsPerEvent_;
|
||||||
|
}
|
||||||
|
|
||||||
// Methods inherited from TAsyncTransport
|
// Methods inherited from TAsyncTransport
|
||||||
// See the documentation in TAsyncTransport.h
|
// See the documentation in TAsyncTransport.h
|
||||||
virtual void setReadCallback(ReadCallback* callback);
|
virtual void setReadCallback(ReadCallback* callback);
|
||||||
|
@ -298,6 +324,7 @@ class TAsyncSocket : public TAsyncTransport,
|
||||||
|
|
||||||
virtual void close();
|
virtual void close();
|
||||||
virtual void closeNow();
|
virtual void closeNow();
|
||||||
|
virtual void closeWithReset();
|
||||||
virtual void shutdownWrite();
|
virtual void shutdownWrite();
|
||||||
virtual void shutdownWriteNow();
|
virtual void shutdownWriteNow();
|
||||||
|
|
||||||
|
@ -333,6 +360,24 @@ class TAsyncSocket : public TAsyncTransport,
|
||||||
*/
|
*/
|
||||||
int setNoDelay(bool noDelay);
|
int setNoDelay(bool noDelay);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Forces ACKs to be sent immediately
|
||||||
|
*
|
||||||
|
* @return Returns 0 if the TCP_QUICKACK flag was successfully updated,
|
||||||
|
* or a non-zero errno value on error.
|
||||||
|
*/
|
||||||
|
int setQuickAck(bool quickack);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the send bufsize
|
||||||
|
*/
|
||||||
|
int setSendBufSize(size_t bufsize);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the recv bufsize
|
||||||
|
*/
|
||||||
|
int setRecvBufSize(size_t bufsize);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generic API for reading a socket option.
|
* Generic API for reading a socket option.
|
||||||
*
|
*
|
||||||
|
@ -459,6 +504,19 @@ class TAsyncSocket : public TAsyncTransport,
|
||||||
*/
|
*/
|
||||||
virtual ssize_t performRead(void* buf, size_t buflen);
|
virtual ssize_t performRead(void* buf, size_t buflen);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Populate an iovec array from an IOBuf and attempt to write it.
|
||||||
|
*
|
||||||
|
* @param callback Write completion/error callback.
|
||||||
|
* @param vec Target iovec array; caller retains ownership.
|
||||||
|
* @param count Number of IOBufs to write, beginning at start of buf.
|
||||||
|
* @param buf Chain of iovecs.
|
||||||
|
* @param cork Whether to delay the output until a subsequent
|
||||||
|
* non-corked write.
|
||||||
|
*/
|
||||||
|
void writeChainImpl(WriteCallback* callback, iovec* vec,
|
||||||
|
size_t count, std::unique_ptr<folly::IOBuf>&& buf, bool cork);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write as much data as possible to the socket without blocking,
|
* Write as much data as possible to the socket without blocking,
|
||||||
* and queue up any leftover data to send when the socket can
|
* and queue up any leftover data to send when the socket can
|
||||||
|
@ -536,6 +594,7 @@ class TAsyncSocket : public TAsyncTransport,
|
||||||
uint16_t eventFlags_; ///< TEventBase::HandlerFlags settings
|
uint16_t eventFlags_; ///< TEventBase::HandlerFlags settings
|
||||||
int fd_; ///< The socket file descriptor
|
int fd_; ///< The socket file descriptor
|
||||||
uint32_t sendTimeout_; ///< The send timeout, in milliseconds
|
uint32_t sendTimeout_; ///< The send timeout, in milliseconds
|
||||||
|
uint16_t maxReadsPerEvent_; ///< Max reads per event loop iteration
|
||||||
TEventBase* eventBase_; ///< The TEventBase
|
TEventBase* eventBase_; ///< The TEventBase
|
||||||
WriteTimeout writeTimeout_; ///< A timeout for connect and write
|
WriteTimeout writeTimeout_; ///< A timeout for connect and write
|
||||||
IoHandler ioHandler_; ///< A TEventHandler to monitor the fd
|
IoHandler ioHandler_; ///< A TEventHandler to monitor the fd
|
||||||
|
|
|
@ -286,6 +286,20 @@ class TAsyncTransport {
|
||||||
*/
|
*/
|
||||||
virtual void closeNow() = 0;
|
virtual void closeNow() = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reset the transport immediately.
|
||||||
|
*
|
||||||
|
* This closes the transport immediately, sending a reset to the remote peer
|
||||||
|
* if possible to indicate abnormal shutdown.
|
||||||
|
*
|
||||||
|
* Note that not all subclasses implement this reset functionality: some
|
||||||
|
* subclasses may treat reset() the same as closeNow(). Subclasses that use
|
||||||
|
* TCP transports should terminate the connection with a TCP reset.
|
||||||
|
*/
|
||||||
|
virtual void closeWithReset() {
|
||||||
|
closeNow();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Perform a half-shutdown of the write side of the transport.
|
* Perform a half-shutdown of the write side of the transport.
|
||||||
*
|
*
|
||||||
|
|
|
@ -246,6 +246,11 @@ class TEventServer : public apache::thrift::server::TServer {
|
||||||
*/
|
*/
|
||||||
uint32_t maxNumMsgsInPipe_;
|
uint32_t maxNumMsgsInPipe_;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The max number of active connections for each worker
|
||||||
|
*/
|
||||||
|
int32_t maxNumActiveConnectionsPerWorker_;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The transport type to use
|
* The transport type to use
|
||||||
*/
|
*/
|
||||||
|
@ -320,6 +325,7 @@ class TEventServer : public apache::thrift::server::TServer {
|
||||||
queuingMode_(false),
|
queuingMode_(false),
|
||||||
acceptRateAdjustSpeed_(0),
|
acceptRateAdjustSpeed_(0),
|
||||||
maxNumMsgsInPipe_(T_MAX_NUM_MESSAGES_IN_PIPE),
|
maxNumMsgsInPipe_(T_MAX_NUM_MESSAGES_IN_PIPE),
|
||||||
|
maxNumActiveConnectionsPerWorker_(0),
|
||||||
transportType_(T_ASYNC_DEFAULT_TRANSPORT_TYPE) {
|
transportType_(T_ASYNC_DEFAULT_TRANSPORT_TYPE) {
|
||||||
processor->setAsyncServer(this);
|
processor->setAsyncServer(this);
|
||||||
}
|
}
|
||||||
|
@ -360,6 +366,7 @@ class TEventServer : public apache::thrift::server::TServer {
|
||||||
queuingMode_(false),
|
queuingMode_(false),
|
||||||
acceptRateAdjustSpeed_(0),
|
acceptRateAdjustSpeed_(0),
|
||||||
maxNumMsgsInPipe_(T_MAX_NUM_MESSAGES_IN_PIPE),
|
maxNumMsgsInPipe_(T_MAX_NUM_MESSAGES_IN_PIPE),
|
||||||
|
maxNumActiveConnectionsPerWorker_(0),
|
||||||
transportType_(T_ASYNC_DEFAULT_TRANSPORT_TYPE) {
|
transportType_(T_ASYNC_DEFAULT_TRANSPORT_TYPE) {
|
||||||
processor->setAsyncServer(this);
|
processor->setAsyncServer(this);
|
||||||
|
|
||||||
|
@ -407,6 +414,7 @@ class TEventServer : public apache::thrift::server::TServer {
|
||||||
queuingMode_(false),
|
queuingMode_(false),
|
||||||
acceptRateAdjustSpeed_(0),
|
acceptRateAdjustSpeed_(0),
|
||||||
maxNumMsgsInPipe_(T_MAX_NUM_MESSAGES_IN_PIPE),
|
maxNumMsgsInPipe_(T_MAX_NUM_MESSAGES_IN_PIPE),
|
||||||
|
maxNumActiveConnectionsPerWorker_(0),
|
||||||
transportType_(T_ASYNC_DEFAULT_TRANSPORT_TYPE) {
|
transportType_(T_ASYNC_DEFAULT_TRANSPORT_TYPE) {
|
||||||
processor->setAsyncServer(this);
|
processor->setAsyncServer(this);
|
||||||
|
|
||||||
|
@ -452,6 +460,7 @@ class TEventServer : public apache::thrift::server::TServer {
|
||||||
queuingMode_(false),
|
queuingMode_(false),
|
||||||
acceptRateAdjustSpeed_(0),
|
acceptRateAdjustSpeed_(0),
|
||||||
maxNumMsgsInPipe_(T_MAX_NUM_MESSAGES_IN_PIPE),
|
maxNumMsgsInPipe_(T_MAX_NUM_MESSAGES_IN_PIPE),
|
||||||
|
maxNumActiveConnectionsPerWorker_(0),
|
||||||
transportType_(T_ASYNC_DEFAULT_TRANSPORT_TYPE) {
|
transportType_(T_ASYNC_DEFAULT_TRANSPORT_TYPE) {
|
||||||
processor->setAsyncServer(this);
|
processor->setAsyncServer(this);
|
||||||
|
|
||||||
|
@ -498,6 +507,7 @@ class TEventServer : public apache::thrift::server::TServer {
|
||||||
queuingMode_(true),
|
queuingMode_(true),
|
||||||
acceptRateAdjustSpeed_(0),
|
acceptRateAdjustSpeed_(0),
|
||||||
maxNumMsgsInPipe_(T_MAX_NUM_MESSAGES_IN_PIPE),
|
maxNumMsgsInPipe_(T_MAX_NUM_MESSAGES_IN_PIPE),
|
||||||
|
maxNumActiveConnectionsPerWorker_(0),
|
||||||
transportType_(T_ASYNC_DEFAULT_TRANSPORT_TYPE) {
|
transportType_(T_ASYNC_DEFAULT_TRANSPORT_TYPE) {
|
||||||
setProtocolFactory(protocolFactory);
|
setProtocolFactory(protocolFactory);
|
||||||
setThreadManager(threadManager);
|
setThreadManager(threadManager);
|
||||||
|
@ -542,6 +552,7 @@ class TEventServer : public apache::thrift::server::TServer {
|
||||||
queuingMode_(true),
|
queuingMode_(true),
|
||||||
acceptRateAdjustSpeed_(0),
|
acceptRateAdjustSpeed_(0),
|
||||||
maxNumMsgsInPipe_(T_MAX_NUM_MESSAGES_IN_PIPE),
|
maxNumMsgsInPipe_(T_MAX_NUM_MESSAGES_IN_PIPE),
|
||||||
|
maxNumActiveConnectionsPerWorker_(0),
|
||||||
transportType_(T_ASYNC_DEFAULT_TRANSPORT_TYPE) {
|
transportType_(T_ASYNC_DEFAULT_TRANSPORT_TYPE) {
|
||||||
setDuplexProtocolFactory(duplexProtocolFactory);
|
setDuplexProtocolFactory(duplexProtocolFactory);
|
||||||
setThreadManager(threadManager);
|
setThreadManager(threadManager);
|
||||||
|
@ -671,6 +682,21 @@ class TEventServer : public apache::thrift::server::TServer {
|
||||||
maxNumMsgsInPipe_ = num;
|
maxNumMsgsInPipe_ = num;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the maxmum number of active connections each TAsyncWorker can have
|
||||||
|
*/
|
||||||
|
int32_t getMaxNumActiveConnectionsPerWorker() const {
|
||||||
|
return maxNumActiveConnectionsPerWorker_;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the maxmum number of active connections each TAsyncWorker can have.
|
||||||
|
* Zero means unlimited
|
||||||
|
*/
|
||||||
|
void setMaxNumActiveConnectionsPerWorker(int32_t num) {
|
||||||
|
maxNumActiveConnectionsPerWorker_ = num;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the speed of adjusting connection accept rate.
|
* Get the speed of adjusting connection accept rate.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -129,6 +129,9 @@ class TEventWorker :
|
||||||
*/
|
*/
|
||||||
ConnectionMap activeConnectionMap_;
|
ConnectionMap activeConnectionMap_;
|
||||||
|
|
||||||
|
// Max number of active connections
|
||||||
|
int32_t maxNumActiveConnections_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -156,7 +159,8 @@ class TEventWorker :
|
||||||
server_(server),
|
server_(server),
|
||||||
eventBase_(),
|
eventBase_(),
|
||||||
workerID_(workerID),
|
workerID_(workerID),
|
||||||
transportType_(TEventServer::FRAMED) {
|
transportType_(TEventServer::FRAMED),
|
||||||
|
maxNumActiveConnections_(0) {
|
||||||
|
|
||||||
setDuplexProtocolFactory(protocolFactory);
|
setDuplexProtocolFactory(protocolFactory);
|
||||||
transportType_ = server->getTransportType();
|
transportType_ = server->getTransportType();
|
||||||
|
@ -174,7 +178,7 @@ class TEventWorker :
|
||||||
* of freeing up memory, so nothing to be done here but release the
|
* of freeing up memory, so nothing to be done here but release the
|
||||||
* connection stack.
|
* connection stack.
|
||||||
*/
|
*/
|
||||||
virtual ~TEventWorker();
|
virtual ~TEventWorker();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get my TAsyncProcessorFactory object.
|
* Get my TAsyncProcessorFactory object.
|
||||||
|
@ -212,6 +216,14 @@ class TEventWorker :
|
||||||
return workerID_;
|
return workerID_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setMaxNumActiveConnections(int32_t numActiveConnections) {
|
||||||
|
maxNumActiveConnections_ = numActiveConnections;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t getMaxNumActiveConnections() const {
|
||||||
|
return maxNumActiveConnections_;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dispose of a TEventConnection object.
|
* Dispose of a TEventConnection object.
|
||||||
* Will add to a pool of these objects or destroy as necessary.
|
* Will add to a pool of these objects or destroy as necessary.
|
||||||
|
|
|
@ -175,7 +175,7 @@ class TNotificationQueue {
|
||||||
FdType fdType = FdType::EVENTFD)
|
FdType fdType = FdType::EVENTFD)
|
||||||
: spinlock_(),
|
: spinlock_(),
|
||||||
eventfd_(-1),
|
eventfd_(-1),
|
||||||
pipeFds_({-1, -1}),
|
pipeFds_{-1, -1},
|
||||||
advisoryMaxQueueSize_(maxSize),
|
advisoryMaxQueueSize_(maxSize),
|
||||||
queue_() {
|
queue_() {
|
||||||
if (fdType == FdType::EVENTFD) {
|
if (fdType == FdType::EVENTFD) {
|
||||||
|
|
|
@ -194,7 +194,8 @@ class TStreamAsyncChannel : public TAsyncEventChannel,
|
||||||
protected TAsyncTransport::WriteCallback,
|
protected TAsyncTransport::WriteCallback,
|
||||||
protected TAsyncTimeout {
|
protected TAsyncTimeout {
|
||||||
public:
|
public:
|
||||||
TStreamAsyncChannel(const boost::shared_ptr<TAsyncTransport>& transport);
|
explicit TStreamAsyncChannel(
|
||||||
|
const boost::shared_ptr<TAsyncTransport>& transport);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper function to create a shared_ptr<TStreamAsyncChannel>.
|
* Helper function to create a shared_ptr<TStreamAsyncChannel>.
|
||||||
|
@ -328,6 +329,15 @@ class TStreamAsyncChannel : public TAsyncEventChannel,
|
||||||
return recvTimeout_;
|
return recvTimeout_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cancel pending callbacks. Use this when the channel is closing because the
|
||||||
|
* server had been shut down.
|
||||||
|
*/
|
||||||
|
virtual void cancelCallbacks() {
|
||||||
|
readCallback_ = NULL;
|
||||||
|
readErrorCallback_ = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the TAsyncTransport used by this channel.
|
* Get the TAsyncTransport used by this channel.
|
||||||
*/
|
*/
|
||||||
|
@ -407,6 +417,11 @@ class TStreamAsyncChannel : public TAsyncEventChannel,
|
||||||
return req;
|
return req;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void clearCallbacks() {
|
||||||
|
readCallback_ = NULL;
|
||||||
|
readErrorCallback_ = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void failAllReads();
|
void failAllReads();
|
||||||
|
|
||||||
boost::shared_ptr<TAsyncTransport> transport_;
|
boost::shared_ptr<TAsyncTransport> transport_;
|
||||||
|
|
|
@ -26,7 +26,8 @@ namespace apache { namespace thrift { namespace async {
|
||||||
|
|
||||||
class TZlibAsyncChannel : public TAsyncEventChannel {
|
class TZlibAsyncChannel : public TAsyncEventChannel {
|
||||||
public:
|
public:
|
||||||
TZlibAsyncChannel(const boost::shared_ptr<TAsyncEventChannel>& channel);
|
explicit TZlibAsyncChannel(
|
||||||
|
const boost::shared_ptr<TAsyncEventChannel>& channel);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper function to create a shared_ptr<TZlibAsyncChannel>.
|
* Helper function to create a shared_ptr<TZlibAsyncChannel>.
|
||||||
|
@ -85,6 +86,11 @@ class TZlibAsyncChannel : public TAsyncEventChannel {
|
||||||
channel_->setRecvTimeout(milliseconds);
|
channel_->setRecvTimeout(milliseconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual void cancelCallbacks() {
|
||||||
|
sendRequest_.cancelCallbacks();
|
||||||
|
recvRequest_.cancelCallbacks();
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/**
|
/**
|
||||||
* Protected destructor.
|
* Protected destructor.
|
||||||
|
@ -109,6 +115,11 @@ class TZlibAsyncChannel : public TAsyncEventChannel {
|
||||||
|
|
||||||
void send(TAsyncEventChannel* channel);
|
void send(TAsyncEventChannel* channel);
|
||||||
|
|
||||||
|
void cancelCallbacks() {
|
||||||
|
callback_ = NULL;
|
||||||
|
errorCallback_ = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void invokeCallback(VoidCallback callback);
|
void invokeCallback(VoidCallback callback);
|
||||||
void sendSuccess();
|
void sendSuccess();
|
||||||
|
@ -137,6 +148,11 @@ class TZlibAsyncChannel : public TAsyncEventChannel {
|
||||||
|
|
||||||
void recv(TAsyncEventChannel* channel);
|
void recv(TAsyncEventChannel* channel);
|
||||||
|
|
||||||
|
void cancelCallbacks() {
|
||||||
|
callback_ = NULL;
|
||||||
|
errorCallback_ = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void invokeCallback(VoidCallback callback);
|
void invokeCallback(VoidCallback callback);
|
||||||
void recvSuccess();
|
void recvSuccess();
|
||||||
|
|
|
@ -68,27 +68,37 @@ class PosixThreadFactory : public ThreadFactory {
|
||||||
DECREMENT = 8
|
DECREMENT = 8
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const POLICY kDefaultPolicy = ROUND_ROBIN;
|
||||||
|
static const PRIORITY kDefaultPriority = NORMAL;
|
||||||
|
static const int kDefaultStackSizeMB = 1;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Posix thread (pthread) factory. All threads created by a factory are reference-counted
|
* Posix thread (pthread) factory. All threads created by a factory are
|
||||||
* via boost::shared_ptr and boost::weak_ptr. The factory guarantees that threads and
|
* reference-counted via boost::shared_ptr and boost::weak_ptr. The factory
|
||||||
* the Runnable tasks they host will be properly cleaned up once the last strong reference
|
* guarantees that threads and the Runnable tasks they host will be properly
|
||||||
* to both is given up.
|
* cleaned up once the last strong reference to both is given up.
|
||||||
*
|
*
|
||||||
* Threads are created with the specified policy, priority, stack-size and detachable-mode
|
* Threads are created with the specified policy, priority, stack-size and
|
||||||
* detached means the thread is free-running and will release all system resources the
|
* detachable-mode detached means the thread is free-running and will release
|
||||||
* when it completes. A detachable thread is not joinable. The join method
|
* all system resources the when it completes. A detachable thread is not
|
||||||
* of a detachable thread will return immediately with no error.
|
* joinable. The join method of a detachable thread will return immediately
|
||||||
|
* with no error.
|
||||||
*
|
*
|
||||||
* By default threads are not joinable.
|
* By default threads are not joinable.
|
||||||
*/
|
*/
|
||||||
|
explicit PosixThreadFactory(POLICY policy=kDefaultPolicy,
|
||||||
explicit PosixThreadFactory(POLICY policy=ROUND_ROBIN,
|
PRIORITY priority=kDefaultPriority,
|
||||||
PRIORITY priority=NORMAL,
|
int stackSize=kDefaultStackSizeMB,
|
||||||
int stackSize=1,
|
|
||||||
bool detached=true);
|
bool detached=true);
|
||||||
|
|
||||||
|
explicit PosixThreadFactory(DetachState detached);
|
||||||
|
|
||||||
// From ThreadFactory;
|
// From ThreadFactory;
|
||||||
boost::shared_ptr<Thread> newThread(boost::shared_ptr<Runnable> runnable) const;
|
boost::shared_ptr<Thread> newThread(
|
||||||
|
const boost::shared_ptr<Runnable>& runnable) const;
|
||||||
|
boost::shared_ptr<Thread> newThread(
|
||||||
|
const boost::shared_ptr<Runnable>& runnable,
|
||||||
|
DetachState detachState) const;
|
||||||
|
|
||||||
// From ThreadFactory;
|
// From ThreadFactory;
|
||||||
Thread::id_t getCurrentThreadId() const;
|
Thread::id_t getCurrentThreadId() const;
|
||||||
|
@ -121,6 +131,7 @@ class PosixThreadFactory : public ThreadFactory {
|
||||||
* Sets detached mode of threads
|
* Sets detached mode of threads
|
||||||
*/
|
*/
|
||||||
virtual void setDetached(bool detached);
|
virtual void setDetached(bool detached);
|
||||||
|
virtual void setDetached(DetachState detached);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets current detached mode
|
* Gets current detached mode
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
# TARGETS file for thrift/lib/cpp/concurrency
|
|
||||||
|
|
||||||
cpp_library (
|
|
||||||
name = "concurrency",
|
|
||||||
srcs = [
|
|
||||||
"Util.cpp",
|
|
||||||
"Monitor.cpp",
|
|
||||||
"Mutex.cpp",
|
|
||||||
"PosixThreadFactory.cpp",
|
|
||||||
"ThreadManager.cpp",
|
|
||||||
"TimerManager.cpp"
|
|
||||||
],
|
|
||||||
deps = [ '@/common/base:profiler',
|
|
||||||
'@/thrift/lib/cpp:thrift_base' ],
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
|
@ -110,8 +110,18 @@ class Thread {
|
||||||
class ThreadFactory {
|
class ThreadFactory {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
enum DetachState {
|
||||||
|
ATTACHED,
|
||||||
|
DETACHED
|
||||||
|
};
|
||||||
|
|
||||||
virtual ~ThreadFactory() {}
|
virtual ~ThreadFactory() {}
|
||||||
virtual boost::shared_ptr<Thread> newThread(boost::shared_ptr<Runnable> runnable) const = 0;
|
virtual boost::shared_ptr<Thread> newThread(
|
||||||
|
const boost::shared_ptr<Runnable>& runnable) const = 0;
|
||||||
|
|
||||||
|
virtual boost::shared_ptr<Thread> newThread(
|
||||||
|
const boost::shared_ptr<Runnable>& runnable,
|
||||||
|
DetachState detachState) const = 0;
|
||||||
|
|
||||||
/** Gets the current thread id or unknown_thread_id if the current thread is not a thrift thread */
|
/** Gets the current thread id or unknown_thread_id if the current thread is not a thrift thread */
|
||||||
|
|
||||||
|
|
|
@ -1,45 +0,0 @@
|
||||||
# TARGETS file for thrift/lib/cpp/concurrency/test
|
|
||||||
|
|
||||||
cpp_binary (
|
|
||||||
name = "test",
|
|
||||||
srcs = [
|
|
||||||
"Tests.cpp"
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
"@/thrift/lib/cpp/concurrency"
|
|
||||||
]
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_unittest (
|
|
||||||
name = "test_mutex",
|
|
||||||
srcs = [
|
|
||||||
"RWMutexTest.cpp"
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
"@/thrift/lib/cpp/concurrency",
|
|
||||||
"@/thrift/lib/cpp:thrift",
|
|
||||||
],
|
|
||||||
external_deps = [
|
|
||||||
('boost', '>= 1.37', 'boost_unit_test_framework'),
|
|
||||||
],
|
|
||||||
type = 'boost',
|
|
||||||
owner = 'putivsky',
|
|
||||||
emails = ['adback-dev@lists.facebook.com',
|
|
||||||
'thrift-team@lists.facebook.com'],
|
|
||||||
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_unittest(
|
|
||||||
name = 'ThreadManagerTests',
|
|
||||||
srcs = [
|
|
||||||
'ThreadManagerTests.cpp',
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
'@/thrift/lib/cpp/concurrency',
|
|
||||||
],
|
|
||||||
external_deps = [
|
|
||||||
('boost', '>= 1.37', 'boost_unit_test_framework'),
|
|
||||||
],
|
|
||||||
type = 'boost',
|
|
||||||
emails = ['thrift-team@lists.facebook.com'],
|
|
||||||
)
|
|
|
@ -1,9 +0,0 @@
|
||||||
# TARGETS file for thrift/lib/cpp/processor
|
|
||||||
|
|
||||||
cpp_library (
|
|
||||||
name = "processor",
|
|
||||||
srcs = [
|
|
||||||
"PeekProcessor.cpp"
|
|
||||||
],
|
|
||||||
deps = [ "@/thrift/lib/cpp/transport" ]
|
|
||||||
)
|
|
|
@ -1,24 +0,0 @@
|
||||||
cpp_unittest(
|
|
||||||
name = 'ProcessorTest',
|
|
||||||
srcs = [
|
|
||||||
'EventLog.cpp',
|
|
||||||
'ProcessorTest.cpp',
|
|
||||||
'ServerThread.cpp',
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
':thrift',
|
|
||||||
'@/thrift/lib/cpp/server:nonblocking',
|
|
||||||
],
|
|
||||||
external_deps = [
|
|
||||||
# Versions of boost lower than 1.37 don't support BOOST_AUTO_TEST_CASE.
|
|
||||||
('boost', '>= 1.37', 'boost_unit_test_framework'),
|
|
||||||
],
|
|
||||||
type = 'boost',
|
|
||||||
emails = ['thrift-team@lists.facebook.com'],
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_library(
|
|
||||||
name = 'thrift',
|
|
||||||
thrift_srcs = { 'proc.thrift' : ['ParentService', 'ChildService']},
|
|
||||||
thrift_cpp_options = 'templates',
|
|
||||||
)
|
|
|
@ -1,18 +0,0 @@
|
||||||
# TARGETS file for thrift/lib/cpp/protocol
|
|
||||||
|
|
||||||
cpp_library (
|
|
||||||
name = "protocol",
|
|
||||||
srcs = [
|
|
||||||
"TBase64Utils.cpp",
|
|
||||||
"TDebugProtocol.cpp",
|
|
||||||
"TJSONProtocol.cpp",
|
|
||||||
"TSimpleJSONProtocol.cpp",
|
|
||||||
"THeaderProtocol.cpp",
|
|
||||||
"TPhpSerializeProtocol.cpp",
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
"@/thrift/lib/cpp/transport",
|
|
||||||
"@/thrift/lib/cpp/transport:header",
|
|
||||||
"@/thrift/lib/cpp:thrift_exception",
|
|
||||||
],
|
|
||||||
)
|
|
|
@ -37,6 +37,8 @@ class TCompactProtocolT
|
||||||
static const int8_t VERSION_N = 2;
|
static const int8_t VERSION_N = 2;
|
||||||
static const int8_t VERSION_LOW = 1;
|
static const int8_t VERSION_LOW = 1;
|
||||||
static const int8_t VERSION_DOUBLE_BE = 2;
|
static const int8_t VERSION_DOUBLE_BE = 2;
|
||||||
|
static const int8_t PROTOCOL_ID = static_cast<int8_t>(0x82);
|
||||||
|
static const int8_t VERSION_MASK = 0x1f; // 0001 1111
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// Normally we can define static const data members of integral
|
// Normally we can define static const data members of integral
|
||||||
|
@ -44,10 +46,8 @@ class TCompactProtocolT
|
||||||
// high bit is set (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49896)
|
// high bit is set (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49896)
|
||||||
// unless we cast to a value that fits in an int8_t (0x82 and 0xE0 are
|
// unless we cast to a value that fits in an int8_t (0x82 and 0xE0 are
|
||||||
// uint8_t)
|
// uint8_t)
|
||||||
static const int8_t PROTOCOL_ID = static_cast<int8_t>(0x82);
|
|
||||||
static const int8_t TYPE_MASK = static_cast<int8_t>(0xE0);
|
|
||||||
|
|
||||||
static const int8_t VERSION_MASK = 0x1f; // 0001 1111
|
static const int8_t TYPE_MASK = static_cast<int8_t>(0xE0);
|
||||||
static const int32_t TYPE_SHIFT_AMOUNT = 5;
|
static const int32_t TYPE_SHIFT_AMOUNT = 5;
|
||||||
|
|
||||||
Transport_* trans_;
|
Transport_* trans_;
|
||||||
|
|
|
@ -279,7 +279,7 @@ class THeaderProtocol
|
||||||
const boost::shared_ptr<TTransport>& outTrans,
|
const boost::shared_ptr<TTransport>& outTrans,
|
||||||
std::bitset<CLIENT_TYPES_LEN>* clientTypes) {
|
std::bitset<CLIENT_TYPES_LEN>* clientTypes) {
|
||||||
assert(dynamic_cast<THeaderTransport*>(inTrans.get()) == NULL
|
assert(dynamic_cast<THeaderTransport*>(inTrans.get()) == NULL
|
||||||
&& dynamic_cast<THeaderTransport*>(outTrans.get()) == NULL);
|
&& dynamic_cast<THeaderTransport*>(outTrans.get()) == NULL);
|
||||||
|
|
||||||
return boost::shared_ptr<THeaderTransport>(
|
return boost::shared_ptr<THeaderTransport>(
|
||||||
new THeaderTransport(inTrans, outTrans, clientTypes)
|
new THeaderTransport(inTrans, outTrans, clientTypes)
|
||||||
|
|
|
@ -1,24 +0,0 @@
|
||||||
# Copyright 2011 Facebook
|
|
||||||
# @author Tudor Bosman (tudorb@fb.com)
|
|
||||||
|
|
||||||
cpp_library(
|
|
||||||
name = "neutronium",
|
|
||||||
srcs = [
|
|
||||||
"Schema.cpp",
|
|
||||||
"Encoder.cpp",
|
|
||||||
"Decoder.cpp",
|
|
||||||
"InternTable.cpp",
|
|
||||||
],
|
|
||||||
thrift_srcs = {
|
|
||||||
"intern_table.thrift": [],
|
|
||||||
},
|
|
||||||
deps = [
|
|
||||||
"@/folly",
|
|
||||||
"@/folly/experimental/io",
|
|
||||||
"@/thrift/lib/cpp/protocol",
|
|
||||||
],
|
|
||||||
external_deps = [
|
|
||||||
("boost", None, "boost"),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
|
@ -1,41 +0,0 @@
|
||||||
# Copyright 2011 Facebook
|
|
||||||
# @author Tudor Bosman (tudorb@fb.com)
|
|
||||||
|
|
||||||
thrift_library(
|
|
||||||
name = "if",
|
|
||||||
thrift_srcs = {
|
|
||||||
"neutronium_test.thrift" : [],
|
|
||||||
},
|
|
||||||
languages = ["cpp"],
|
|
||||||
thrift_cpp_options = "templates=only,neutronium",
|
|
||||||
cpp_deps = [],
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_unittest(
|
|
||||||
name = "intern_table_test",
|
|
||||||
srcs = ["InternTableTest.cpp"],
|
|
||||||
deps = [
|
|
||||||
"@/thrift/lib/cpp/protocol/neutronium",
|
|
||||||
"@/external/gflags",
|
|
||||||
],
|
|
||||||
external_deps = [
|
|
||||||
("gtest", None, "gtest_main"),
|
|
||||||
],
|
|
||||||
type = 'gtest',
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_unittest(
|
|
||||||
name = "neutronium_test",
|
|
||||||
srcs = ["NeutroniumTest.cpp"],
|
|
||||||
deps = [
|
|
||||||
"@/thrift/lib/cpp/protocol/neutronium",
|
|
||||||
"@/thrift/lib/cpp/util",
|
|
||||||
":if-cpp",
|
|
||||||
"@/common/fbunit:old_folly_benchmark",
|
|
||||||
],
|
|
||||||
external_deps = [
|
|
||||||
("gtest", None),
|
|
||||||
],
|
|
||||||
type = 'gtest',
|
|
||||||
)
|
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
# TARGETS file for thrift/lib/cpp/server
|
|
||||||
|
|
||||||
cpp_library (
|
|
||||||
name = "server",
|
|
||||||
srcs = [
|
|
||||||
"TRpcTransportContext.cpp",
|
|
||||||
"TServer.cpp",
|
|
||||||
"TSimpleServer.cpp",
|
|
||||||
"TThreadedServer.cpp",
|
|
||||||
"TThreadPoolServer.cpp",
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
"@/thrift/lib/cpp/concurrency",
|
|
||||||
"@/thrift/lib/cpp/transport",
|
|
||||||
]
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_library (
|
|
||||||
name = "nonblocking",
|
|
||||||
srcs = [ "TNonblockingServer.cpp" ],
|
|
||||||
deps = [
|
|
||||||
":server",
|
|
||||||
"@/thrift/lib/cpp/concurrency",
|
|
||||||
"@/thrift/lib/cpp/transport",
|
|
||||||
"@/thrift/lib/cpp/transport:header",
|
|
||||||
"@/thrift/lib/cpp/protocol:protocol",
|
|
||||||
],
|
|
||||||
preprocessor_flags = [ "-DTCP_LOW_MIN_RTO=15" ],
|
|
||||||
external_deps = [ ('libevent', None) ],
|
|
||||||
)
|
|
|
@ -1,60 +0,0 @@
|
||||||
cpp_binary (
|
|
||||||
name = "aggregatorserver_test",
|
|
||||||
srcs = [
|
|
||||||
"AggregatorServerTest.cpp",
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
"@/thrift/lib/cpp/async",
|
|
||||||
"@/thrift/lib/cpp/concurrency",
|
|
||||||
"@/thrift/lib/cpp/protocol",
|
|
||||||
"@/thrift/lib/cpp/server:nonblocking",
|
|
||||||
"@/common/fb303/cpp:fb303",
|
|
||||||
"@/common/base:profiler",
|
|
||||||
":aggregator_test_thrift",
|
|
||||||
],
|
|
||||||
allocator='tcmalloc',
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_binary (
|
|
||||||
name = "aggregatorclient_test",
|
|
||||||
srcs = [
|
|
||||||
"AggregatorClientTest.cpp",
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
"@/thrift/lib/cpp/async",
|
|
||||||
"@/thrift/lib/cpp/concurrency",
|
|
||||||
"@/thrift/lib/cpp/protocol",
|
|
||||||
"@/common/fb303/cpp:fb303",
|
|
||||||
"@/common/base:profiler",
|
|
||||||
"@/common/client_mgmt:asyncclient",
|
|
||||||
"@/common/logging:logging",
|
|
||||||
":aggregator_test_thrift",
|
|
||||||
],
|
|
||||||
allocator='tcmalloc',
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_library (
|
|
||||||
name = "aggregator_test_thrift",
|
|
||||||
thrift_srcs = { "AggregatorTest.thrift" : [ "AggregatorTest" ] },
|
|
||||||
thrift_cpp_options = "cob_style",
|
|
||||||
deps = [
|
|
||||||
"@/common/fb303/if:fb303-cpp",
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_unittest(
|
|
||||||
name = "conn_ctx_test",
|
|
||||||
srcs = [
|
|
||||||
"ConnCtxTest.cpp",
|
|
||||||
],
|
|
||||||
thrift_srcs = { "connctx.thrift" : [ "ConnCtxService" ] },
|
|
||||||
deps = [
|
|
||||||
"@/thrift/lib/cpp/test:util",
|
|
||||||
"@/thrift/lib/cpp/util:nonblocking",
|
|
||||||
],
|
|
||||||
external_deps = [
|
|
||||||
('boost', '>= 1.37', 'boost_unit_test_framework'),
|
|
||||||
],
|
|
||||||
type = 'boost',
|
|
||||||
emails = ['thrift-team@lists.facebook.com'],
|
|
||||||
)
|
|
|
@ -1,167 +0,0 @@
|
||||||
cpp_unittest(
|
|
||||||
name = 'TEventBaseTest',
|
|
||||||
srcs = [
|
|
||||||
'TEventBaseTest.cpp',
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
':util',
|
|
||||||
'@/thrift/lib/cpp/async',
|
|
||||||
],
|
|
||||||
external_deps = [
|
|
||||||
('boost', '>= 1.37', 'boost_unit_test_framework'),
|
|
||||||
],
|
|
||||||
type = 'boost',
|
|
||||||
emails = ['thrift-team@lists.facebook.com'],
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_unittest(
|
|
||||||
name = 'TAsyncChannelTest',
|
|
||||||
srcs = [
|
|
||||||
'TAsyncChannelTest.cpp',
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
':util',
|
|
||||||
'@/thrift/lib/cpp/async',
|
|
||||||
],
|
|
||||||
external_deps = [
|
|
||||||
('boost', '>= 1.37', 'boost_unit_test_framework'),
|
|
||||||
],
|
|
||||||
type = 'boost',
|
|
||||||
emails = ['thrift-team@lists.facebook.com'],
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_unittest(
|
|
||||||
name = 'TAsyncChannelClientTest',
|
|
||||||
srcs = [
|
|
||||||
'TAsyncChannelClientTest.cpp',
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
':util',
|
|
||||||
'@/thrift/lib/cpp/async:zlib',
|
|
||||||
'@/thrift/lib/cpp/util:nonblocking',
|
|
||||||
'@/thrift/lib/cpp/util:httpparser',
|
|
||||||
'@/thrift/perf/cpp:load-handler',
|
|
||||||
],
|
|
||||||
external_deps = [
|
|
||||||
('boost', '>= 1.37', 'boost_unit_test_framework'),
|
|
||||||
],
|
|
||||||
type = 'boost',
|
|
||||||
emails = ['thrift-team@lists.facebook.com'],
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_unittest(
|
|
||||||
name = 'TAsyncSocketTest',
|
|
||||||
srcs = [
|
|
||||||
'TAsyncSocketTest.cpp',
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
':util',
|
|
||||||
'@/thrift/lib/cpp/async',
|
|
||||||
],
|
|
||||||
external_deps = [
|
|
||||||
('boost', '>= 1.37', 'boost_unit_test_framework'),
|
|
||||||
],
|
|
||||||
type = 'boost',
|
|
||||||
emails = ['thrift-team@lists.facebook.com'],
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_unittest(
|
|
||||||
name = 'TAsyncSSLSocketTest',
|
|
||||||
srcs = [
|
|
||||||
'TAsyncSSLSocketTest.cpp',
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
':util',
|
|
||||||
'@/thrift/lib/cpp/async:async_ssl',
|
|
||||||
],
|
|
||||||
external_deps = [
|
|
||||||
('boost', '>= 1.37', 'boost_unit_test_framework'),
|
|
||||||
],
|
|
||||||
type = 'boost',
|
|
||||||
emails = ['ti-bugs@lists.facebook.com',
|
|
||||||
'thrift-team@lists.facebook.com'],
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_unittest(
|
|
||||||
name = 'TAsyncTimeoutSetTest',
|
|
||||||
srcs = [
|
|
||||||
'TAsyncTimeoutSetTest.cpp',
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
':util',
|
|
||||||
'@/thrift/lib/cpp/async:async_cxx11',
|
|
||||||
],
|
|
||||||
type = 'boost',
|
|
||||||
emails = ['thrift-team@lists.facebook.com'],
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_unittest(
|
|
||||||
name = 'TNotificationQueueTest',
|
|
||||||
srcs = [
|
|
||||||
'TNotificationQueueTest.cpp',
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
':async_util',
|
|
||||||
'@/thrift/lib/cpp/async:async_cxx11',
|
|
||||||
],
|
|
||||||
type = 'boost',
|
|
||||||
emails = ['thrift-team@lists.facebook.com'],
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_unittest(
|
|
||||||
name = 'TNotificationPipeTest',
|
|
||||||
srcs = [
|
|
||||||
'TNotificationPipeTest.cpp',
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
':async_util',
|
|
||||||
':util',
|
|
||||||
'@/thrift/lib/cpp/async',
|
|
||||||
],
|
|
||||||
external_deps = [
|
|
||||||
('boost', '>= 1.37', 'boost_unit_test_framework'),
|
|
||||||
],
|
|
||||||
type = 'boost',
|
|
||||||
emails = ['thrift-team@lists.facebook.com'],
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_library(
|
|
||||||
name = 'util',
|
|
||||||
srcs = [
|
|
||||||
'NetworkUtil.cpp',
|
|
||||||
'SocketPair.cpp',
|
|
||||||
'TimeUtil.cpp',
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
'@/thrift/lib/cpp/transport',
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_library(
|
|
||||||
name = 'async_util',
|
|
||||||
srcs = [
|
|
||||||
'ScopedEventBaseThread.cpp',
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
'@/thrift/lib/cpp/async',
|
|
||||||
'@/thrift/lib/cpp/concurrency',
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_library (
|
|
||||||
name = "DebugProtocolLib",
|
|
||||||
thrift_srcs = {
|
|
||||||
"DebugProtocolTest.thrift" : "DebugProtocolService"
|
|
||||||
},
|
|
||||||
thrift_cpp_options = "templates"
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_binary (
|
|
||||||
name = "DebugProtocol",
|
|
||||||
srcs = [
|
|
||||||
"DebugProtocolTest.cpp",
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
":DebugProtocolLib",
|
|
||||||
],
|
|
||||||
)
|
|
|
@ -1,32 +0,0 @@
|
||||||
cpp_library(
|
|
||||||
name = 'loadgen',
|
|
||||||
srcs = [
|
|
||||||
'Controller.cpp',
|
|
||||||
'LatencyMonitor.cpp',
|
|
||||||
'LatencyScoreBoard.cpp',
|
|
||||||
'LoadConfig.cpp',
|
|
||||||
'loadgen.cpp',
|
|
||||||
'QpsMonitor.cpp',
|
|
||||||
'QpsScoreBoard.cpp',
|
|
||||||
'RNG.cpp',
|
|
||||||
'TerminalMonitor.cpp',
|
|
||||||
'WeightedLoadConfig.cpp',
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
'@/common/time:time',
|
|
||||||
],
|
|
||||||
external_deps = [
|
|
||||||
('boost', None, 'boost'),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_binary(
|
|
||||||
name = 'perftest',
|
|
||||||
srcs = [
|
|
||||||
'PerfTest.cpp',
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
':loadgen',
|
|
||||||
'@/common/config',
|
|
||||||
],
|
|
||||||
)
|
|
|
@ -1,88 +0,0 @@
|
||||||
# TARGETS file for thrift/lib/cpp/transport
|
|
||||||
|
|
||||||
cpp_library(
|
|
||||||
name = "transport",
|
|
||||||
srcs = [
|
|
||||||
"TFileTransport.cpp",
|
|
||||||
"TFDTransport.cpp",
|
|
||||||
"THttpClient.cpp",
|
|
||||||
"THttpServer.cpp",
|
|
||||||
"THttpTransport.cpp",
|
|
||||||
"TServerSocket.cpp",
|
|
||||||
"TSimpleFileTransport.cpp",
|
|
||||||
"TSocket.cpp",
|
|
||||||
"TSocketAddress.cpp",
|
|
||||||
"TSocketPool.cpp",
|
|
||||||
"TTransportException.cpp",
|
|
||||||
"TTransportUtils.cpp",
|
|
||||||
"TBufferTransports.cpp",
|
|
||||||
"TMemPagedFactory.cpp",
|
|
||||||
"TMemPagedTransport.cpp",
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
"@/thrift/lib/cpp:thrift_base",
|
|
||||||
"@/thrift/lib/cpp/concurrency",
|
|
||||||
"@/external/google_base",
|
|
||||||
],
|
|
||||||
preprocessor_flags = [ "-DTCP_LOW_MIN_RTO=15" ],
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_library(
|
|
||||||
name = "transport_ssl",
|
|
||||||
srcs = [
|
|
||||||
"TSSLSocket.cpp",
|
|
||||||
"TSSLServerSocket.cpp",
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
":transport",
|
|
||||||
"@/thrift/lib/cpp/concurrency",
|
|
||||||
],
|
|
||||||
external_deps = [ ('openssl', None, 'ssl') ],
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_library(
|
|
||||||
name = "header",
|
|
||||||
srcs = [ "THeaderTransport.cpp",
|
|
||||||
"THeader.cpp" ],
|
|
||||||
deps = [
|
|
||||||
":transport",
|
|
||||||
"@/folly/experimental/io:io",
|
|
||||||
"@/thrift/lib/cpp/util:internal_util",
|
|
||||||
],
|
|
||||||
external_deps = [ ('zlib', None, 'z'),
|
|
||||||
('snappy', None)
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_library(
|
|
||||||
name = "zlib",
|
|
||||||
srcs = [ "TZlibTransport.cpp" ],
|
|
||||||
deps = [
|
|
||||||
":transport",
|
|
||||||
],
|
|
||||||
external_deps = [ ('zlib', None, 'z') ],
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_library(
|
|
||||||
name = "hdfs_transport",
|
|
||||||
srcs = [ "HDFS.cpp",
|
|
||||||
"THDFSFileTransport.cpp",
|
|
||||||
],
|
|
||||||
|
|
||||||
system_deps = [ "-Lexternal/hadoop/latest/",
|
|
||||||
"-L$(JAVA_HOME)/jre/lib/amd64/server/",
|
|
||||||
"-Lexternal/jvm/",
|
|
||||||
"-ljvm",
|
|
||||||
"-lhdfs"
|
|
||||||
],
|
|
||||||
preprocessor_flags = [ "-I@@@JAVA_HOME@@@/include",
|
|
||||||
"-I@@@JAVA_HOME@@@/include/linux",
|
|
||||||
"-Iexternal/hadoop/latest",
|
|
||||||
],
|
|
||||||
shared_system_deps = [ "hdfs",
|
|
||||||
"jvm",
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
"@/thrift/lib/cpp:thrift_base",
|
|
||||||
],
|
|
||||||
)
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include <tr1/functional>
|
#include <tr1/functional>
|
||||||
|
|
||||||
#include "thrift/lib/cpp/protocol/TBinaryProtocol.h"
|
#include "thrift/lib/cpp/protocol/TBinaryProtocol.h"
|
||||||
|
#include "thrift/lib/cpp/protocol/TCompactProtocol.h"
|
||||||
#include "thrift/lib/cpp/protocol/TProtocolTypes.h"
|
#include "thrift/lib/cpp/protocol/TProtocolTypes.h"
|
||||||
|
|
||||||
#include "folly/experimental/io/IOBuf.h"
|
#include "folly/experimental/io/IOBuf.h"
|
||||||
|
@ -34,14 +35,15 @@
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
// Don't include the unknown client.
|
// Don't include the unknown client.
|
||||||
#define CLIENT_TYPES_LEN 4
|
#define CLIENT_TYPES_LEN 5
|
||||||
|
|
||||||
enum CLIENT_TYPE {
|
enum CLIENT_TYPE {
|
||||||
THRIFT_HEADER_CLIENT_TYPE = 0,
|
THRIFT_HEADER_CLIENT_TYPE = 0,
|
||||||
THRIFT_FRAMED_DEPRECATED = 1,
|
THRIFT_FRAMED_DEPRECATED = 1,
|
||||||
THRIFT_UNFRAMED_DEPRECATED = 2,
|
THRIFT_UNFRAMED_DEPRECATED = 2,
|
||||||
THRIFT_HTTP_CLIENT_TYPE = 3,
|
THRIFT_HTTP_CLIENT_TYPE = 3,
|
||||||
THRIFT_UNKNOWN_CLIENT_TYPE = 4,
|
THRIFT_FRAMED_COMPACT = 4,
|
||||||
|
THRIFT_UNKNOWN_CLIENT_TYPE = 5,
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace apache { namespace thrift { namespace transport {
|
namespace apache { namespace thrift { namespace transport {
|
||||||
|
@ -270,6 +272,12 @@ class THeader {
|
||||||
*/
|
*/
|
||||||
size_t getMaxWriteHeadersSize() const;
|
size_t getMaxWriteHeadersSize() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether the 1st byte of the protocol payload should be hadled
|
||||||
|
* as compact framed.
|
||||||
|
*/
|
||||||
|
bool compactFramed(uint32_t magic);
|
||||||
|
|
||||||
struct infoIdType {
|
struct infoIdType {
|
||||||
enum idType {
|
enum idType {
|
||||||
// start at 1 to avoid confusing header padding for an infoId
|
// start at 1 to avoid confusing header padding for an infoId
|
||||||
|
|
|
@ -1,69 +0,0 @@
|
||||||
cpp_unittest(
|
|
||||||
name = 'THeaderTest',
|
|
||||||
srcs = [
|
|
||||||
'THeaderTest.cpp',
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
'@/thrift/lib/cpp/transport:header',
|
|
||||||
],
|
|
||||||
external_deps = [
|
|
||||||
('boost', '>= 1.37', 'boost_unit_test_framework'),
|
|
||||||
],
|
|
||||||
type = 'boost',
|
|
||||||
emails = ['thrift-team@lists.facebook.com'],
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_unittest(
|
|
||||||
name = 'TSocketAddressTest',
|
|
||||||
srcs = [
|
|
||||||
'TSocketAddressTest.cpp',
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
'@/thrift/lib/cpp/transport',
|
|
||||||
],
|
|
||||||
external_deps = [
|
|
||||||
('boost', '>= 1.37', 'boost_unit_test_framework'),
|
|
||||||
],
|
|
||||||
type = 'boost',
|
|
||||||
emails = ['thrift-team@lists.facebook.com'],
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_unittest(
|
|
||||||
name = 'TSSLSocketTest',
|
|
||||||
srcs = [
|
|
||||||
'TSSLSocketTest.cpp',
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
'@/thrift/lib/cpp/transport:transport_ssl',
|
|
||||||
'@/thrift/lib/cpp/util',
|
|
||||||
],
|
|
||||||
external_deps = [
|
|
||||||
('boost', '>= 1.37', 'boost_unit_test_framework'),
|
|
||||||
],
|
|
||||||
type = 'boost',
|
|
||||||
emails = [
|
|
||||||
'ti-bugs@lists.facebook.com',
|
|
||||||
'thrift-team@lists.facebook.com',
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_unittest (
|
|
||||||
name = "TSocketPoolTest",
|
|
||||||
srcs = [
|
|
||||||
"TSocketPoolTest.cpp",
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
'@/common/fbunit',
|
|
||||||
'@/thrift/lib/cpp/transport',
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_binary (
|
|
||||||
name = "ttransport_test",
|
|
||||||
srcs = [
|
|
||||||
"TransportTest.cpp",
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
"@/thrift/lib/cpp/transport",
|
|
||||||
]
|
|
||||||
)
|
|
|
@ -1,74 +0,0 @@
|
||||||
cpp_library(
|
|
||||||
name = 'util',
|
|
||||||
srcs = [
|
|
||||||
'ScopedServerThread.cpp',
|
|
||||||
'ServerCreatorBase.cpp',
|
|
||||||
'SyncServerCreator.cpp',
|
|
||||||
'TSimpleServerCreator.cpp',
|
|
||||||
'TThreadedServerCreator.cpp',
|
|
||||||
'TThreadPoolServerCreator.cpp',
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
'@/thrift/lib/cpp/server',
|
|
||||||
'@/thrift/lib/cpp/protocol',
|
|
||||||
'@/folly',
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_library(
|
|
||||||
name = 'internal_util',
|
|
||||||
srcs = [
|
|
||||||
'VarintUtils.cpp',
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
'@/folly',
|
|
||||||
],
|
|
||||||
external_deps = [
|
|
||||||
('gflags', None, 'gflags'),
|
|
||||||
('glog', None, 'glog'),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_library(
|
|
||||||
name = 'nonblocking',
|
|
||||||
srcs = [
|
|
||||||
'TNonblockingServerCreator.cpp',
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
':util',
|
|
||||||
'@/thrift/lib/cpp/server:nonblocking',
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_library(
|
|
||||||
name = 'async',
|
|
||||||
srcs = [
|
|
||||||
'TEventServerCreator.cpp',
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
':util',
|
|
||||||
'@/thrift/lib/cpp/async',
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_library(
|
|
||||||
name = 'httpparser',
|
|
||||||
srcs = [
|
|
||||||
'THttpParser.cpp',
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
'@/thrift/lib/cpp/transport',
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
cpp_unittest(
|
|
||||||
name = 'ThriftSerializerTest',
|
|
||||||
srcs = [ 'ThriftSerializerTest.cpp' ],
|
|
||||||
thrift_srcs = { 'ThriftSerializerTest.thrift' : [ ] },
|
|
||||||
thrift_cpp_options = 'templates',
|
|
||||||
deps = [ '@/common/strings:strings',
|
|
||||||
'@/common/fbunit',
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
cpp_unittest(
|
|
||||||
name = 'ServerCreatorTest',
|
|
||||||
srcs = [
|
|
||||||
'ServerCreatorTest.cpp',
|
|
||||||
],
|
|
||||||
deps = [
|
|
||||||
'@/thrift/lib/cpp/util:async',
|
|
||||||
'@/thrift/lib/cpp/util:nonblocking',
|
|
||||||
'@/thrift/perf/cpp:load-handler',
|
|
||||||
'@/thrift/perf/cpp:async-load-handler',
|
|
||||||
],
|
|
||||||
external_deps = [
|
|
||||||
('boost', '>= 1.37', 'boost_unit_test_framework'),
|
|
||||||
],
|
|
||||||
type = 'boost',
|
|
||||||
emails = ['thrift-team@lists.facebook.com'],
|
|
||||||
)
|
|
Loading…
Reference in a new issue