aboutsummaryrefslogtreecommitdiff
path: root/contrib/native/client/src/include
diff options
context:
space:
mode:
authorParth Chandra <parthc@apache.org>2017-06-07 11:09:10 -0700
committerParth Chandra <parthc@apache.org>2017-10-11 19:27:47 -0700
commitac3f0ce2683906db908d861e3f93700d8ac0f6d6 (patch)
treea4cdb95451c761021fb0b9b8a8384d485376fcb6 /contrib/native/client/src/include
parenta62f96d944c7bb63d2bfdaec10ff571153b071c9 (diff)
DRILL-5431: SSL Support (C++) - Refactoring of C++ client.
Move classes out of drillclient to their own files Fix build on MacOS to suppress warnings from boost code Refactoring of user properties to use a map
Diffstat (limited to 'contrib/native/client/src/include')
-rw-r--r--contrib/native/client/src/include/drill/drillClient.hpp143
-rw-r--r--contrib/native/client/src/include/drill/drillConfig.hpp153
-rw-r--r--contrib/native/client/src/include/drill/drillError.hpp72
-rw-r--r--contrib/native/client/src/include/drill/drillc.hpp3
-rw-r--r--contrib/native/client/src/include/drill/userProperties.hpp76
5 files changed, 308 insertions, 139 deletions
diff --git a/contrib/native/client/src/include/drill/drillClient.hpp b/contrib/native/client/src/include/drill/drillClient.hpp
index f09d7f5ec..ceaf50d43 100644
--- a/contrib/native/client/src/include/drill/drillClient.hpp
+++ b/contrib/native/client/src/include/drill/drillClient.hpp
@@ -35,9 +35,12 @@ namespace exec{
namespace Drill{
//struct UserServerEndPoint;
+class DrillClientConfig;
+class DrillClientError;
class DrillClientImplBase;
class DrillClientImpl;
class DrillClientQueryResult;
+class DrillUserProperties;
class FieldMetadata;
class PreparedStatement;
class RecordBatch;
@@ -49,23 +52,6 @@ enum QueryType{
PHYSICAL = 3
};
-class DECLSPEC_DRILL_CLIENT DrillClientError{
- public:
- static const uint32_t CONN_ERROR_START = 100;
- static const uint32_t QRY_ERROR_START = 200;
-
- DrillClientError(uint32_t s, uint32_t e, char* m){status=s; errnum=e; msg=m;};
- DrillClientError(uint32_t s, uint32_t e, std::string m){status=s; errnum=e; msg=m;};
-
- static DrillClientError* getErrorObject(const exec::shared::DrillPBError& e);
-
- // To get the error number we add a error range start number to
- // the status code returned (either status_t or connectionStatus_t)
- uint32_t status; // could be either status_t or connectionStatus_t
- uint32_t errnum;
- std::string msg;
-};
-
// Only one instance of this class exists. A static member of DrillClientImpl;
class DECLSPEC_DRILL_CLIENT DrillClientInitializer{
public:
@@ -73,127 +59,6 @@ class DECLSPEC_DRILL_CLIENT DrillClientInitializer{
~DrillClientInitializer();
};
-// Only one instance of this class exists. A static member of DrillClientImpl;
-class DECLSPEC_DRILL_CLIENT DrillClientConfig{
- public:
- DrillClientConfig();
- ~DrillClientConfig();
- static void initLogging(const char* path);
- static void setLogLevel(logLevel_t l);
- static void setSaslPluginPath(const char* path);
- static const char* getSaslPluginPath();
- static void setBufferLimit(uint64_t l);
- static uint64_t getBufferLimit();
- static void setSocketTimeout(int32_t l);
- static void setHandshakeTimeout(int32_t l);
- static void setQueryTimeout(int32_t l);
- static void setHeartbeatFrequency(int32_t l);
- static int32_t getSocketTimeout();
- static int32_t getHandshakeTimeout();
- static int32_t getQueryTimeout();
- static int32_t getHeartbeatFrequency();
- static logLevel_t getLogLevel();
-
- /**
- * Return the client name sent to the server when connecting
- *
- * @return the current client name
- */
- static const std::string& getClientName();
-
- /**
- * Set the client name to be sent to the server when connecting.
- *
- * Only new connections will use the new value. Existing connections
- * will be left unchanged.
- *
- * @param name the name to be send to the server
- */
- static void setClientName(const std::string& name);
-
- /**
- * Return the application name sent to the server when connecting
- *
- * @return the current application name
- */
- static const std::string& getApplicationName();
-
- /**
- * Set the application name to be sent to the server when connecting.
- *
- * Only new connections will use the new value. Existing connections
- * will be left unchanged.
- *
- * @param name the name to be send to the server
- */
- static void setApplicationName(const std::string& name);
-
-
-
- private:
- // The logging level
- static logLevel_t s_logLevel;
- // The total amount of memory to be allocated by an instance of DrillClient.
- // For future use. Currently, not enforced.
- static uint64_t s_bufferLimit;
-
- static const char* s_saslPluginPath;
-
- /**
- * DrillClient configures timeout (in seconds) in a fine granularity.
- * Disabled by setting the value to zero.
- *
- * s_socketTimout: (default 0)
- * set SO_RCVTIMEO and SO_SNDTIMEO socket options and place a
- * timeout on socket receives and sends. It is disabled by default.
- *
- * s_handshakeTimeout: (default 5)
- * place a timeout on validating handshake. When an endpoint (host:port)
- * is reachable but drillbit hangs or running another service. It will
- * avoid the client hanging.
- *
- * s_queryTimeout: (default 180)
- * place a timeout on waiting result of querying.
- *
- * s_heartbeatFrequency: (default 30)
- * Seconds of idle activity after which a heartbeat is sent to the drillbit
- */
- static int32_t s_socketTimeout;
- static int32_t s_handshakeTimeout;
- static int32_t s_queryTimeout;
- static int32_t s_heartbeatFrequency;
- static boost::mutex s_mutex;
-
- // The client name (default to DRILL_CONNECTOR_NAME)
- static std::string s_clientName;
- // The application name (default to <empty>)
- static std::string s_applicationName;
-};
-
-
-class DECLSPEC_DRILL_CLIENT DrillUserProperties{
- public:
- static const std::map<std::string, uint32_t> USER_PROPERTIES;
-
- DrillUserProperties(){};
-
- void setProperty( const std::string& propName, const std::string& propValue){
- std::pair< std::string, std::string> in = make_pair(propName, propValue);
- m_properties.push_back(in);
- }
-
- size_t size() const { return m_properties.size(); }
-
- const std::string& keyAt(size_t i) const { return m_properties.at(i).first; }
-
- const std::string& valueAt(size_t i) const { return m_properties.at(i).second; }
-
- bool validate(std::string& err);
-
- private:
- std::vector< std::pair< std::string, std::string> > m_properties;
-};
-
/*
* Handle to the Query submitted for execution.
* */
@@ -1248,7 +1113,7 @@ class DECLSPEC_DRILL_CLIENT DrillClient{
*/
DEPRECATED connectionStatus_t connect(const char* connectStr, const char* defaultSchema=NULL);
- /*
+ /*
* Connect the client to a Drillbit using connection string and a set of user properties.
* The connection string format can be found in comments of
* [DRILL-780](https://issues.apache.org/jira/browse/DRILL-780)
diff --git a/contrib/native/client/src/include/drill/drillConfig.hpp b/contrib/native/client/src/include/drill/drillConfig.hpp
new file mode 100644
index 000000000..669267d86
--- /dev/null
+++ b/contrib/native/client/src/include/drill/drillConfig.hpp
@@ -0,0 +1,153 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef DRILL_CONFIG_H
+#define DRILL_CONFIG_H
+
+#include "drill/common.hpp"
+#include <boost/thread.hpp>
+
+
+
+#if defined _WIN32 || defined __CYGWIN__
+ #ifdef DRILL_CLIENT_EXPORTS
+ #define DECLSPEC_DRILL_CLIENT __declspec(dllexport)
+ #else
+ #ifdef USE_STATIC_LIBDRILL
+ #define DECLSPEC_DRILL_CLIENT
+ #else
+ #define DECLSPEC_DRILL_CLIENT __declspec(dllimport)
+ #endif
+ #endif
+#else
+ #if __GNUC__ >= 4
+ #define DECLSPEC_DRILL_CLIENT __attribute__ ((visibility ("default")))
+ #else
+ #define DECLSPEC_DRILL_CLIENT
+ #endif
+#endif
+
+namespace exec{
+ namespace shared{
+ class DrillPBError;
+ };
+};
+
+namespace Drill{
+
+// Only one instance of this class exists. A static member of DrillClientImpl;
+
+class DECLSPEC_DRILL_CLIENT DrillClientConfig{
+ public:
+ DrillClientConfig();
+ ~DrillClientConfig();
+ static void initLogging(const char* path);
+ static void setLogLevel(logLevel_t l);
+ static void setSaslPluginPath(const char* path);
+ static const char* getSaslPluginPath();
+ static void setBufferLimit(uint64_t l);
+ static uint64_t getBufferLimit();
+ static void setSocketTimeout(int32_t l);
+ static void setHandshakeTimeout(int32_t l);
+ static void setQueryTimeout(int32_t l);
+ static void setHeartbeatFrequency(int32_t l);
+ static int32_t getSocketTimeout();
+ static int32_t getHandshakeTimeout();
+ static int32_t getQueryTimeout();
+ static int32_t getHeartbeatFrequency();
+ static logLevel_t getLogLevel();
+ /**
+ * Return the client name sent to the server when connecting
+ *
+ * @return the current client name
+ */
+ static const std::string& getClientName();
+
+ /**
+ * Set the client name to be sent to the server when connecting.
+ *
+ * Only new connections will use the new value. Existing connections
+ * will be left unchanged.
+ *
+ * @param name the name to be send to the server
+ */
+ static void setClientName(const std::string& name);
+
+ /**
+ * Return the application name sent to the server when connecting
+ *
+ * @return the current application name
+ */
+ static const std::string& getApplicationName();
+
+ /**
+ * Set the application name to be sent to the server when connecting.
+ *
+ * Only new connections will use the new value. Existing connections
+ * will be left unchanged.
+ *
+ * @param name the name to be send to the server
+ */
+ static void setApplicationName(const std::string& name);
+
+
+ private:
+ // The logging level
+ static logLevel_t s_logLevel;
+ // The total amount of memory to be allocated by an instance of DrillClient.
+ // For future use. Currently, not enforced.
+ static uint64_t s_bufferLimit;
+
+ static const char* s_saslPluginPath;
+
+ /**
+ * DrillClient configures timeout (in seconds) in a fine granularity.
+ * Disabled by setting the value to zero.
+ *
+ * s_socketTimout: (default 0)
+ * set SO_RCVTIMEO and SO_SNDTIMEO socket options and place a
+ * timeout on socket receives and sends. It is disabled by default.
+ *
+ * s_handshakeTimeout: (default 5)
+ * place a timeout on validating handshake. When an endpoint (host:port)
+ * is reachable but drillbit hangs or running another service. It will
+ * avoid the client hanging.
+ *
+ * s_queryTimeout: (default 180)
+ * place a timeout on waiting result of querying.
+ *
+ * s_heartbeatFrequency: (default 30)
+ * Seconds of idle activity after which a heartbeat is sent to the drillbit
+ */
+ static int32_t s_socketTimeout;
+ static int32_t s_handshakeTimeout;
+ static int32_t s_queryTimeout;
+ static int32_t s_heartbeatFrequency;
+ static boost::mutex s_mutex;
+ // The client name (default to DRILL_CONNECTOR_NAME)
+ static std::string s_clientName;
+ // The application name (default to <empty>)
+ static std::string s_applicationName;
+};
+
+
+
+} // namespace Drill
+
+#endif
diff --git a/contrib/native/client/src/include/drill/drillError.hpp b/contrib/native/client/src/include/drill/drillError.hpp
new file mode 100644
index 000000000..072df1c31
--- /dev/null
+++ b/contrib/native/client/src/include/drill/drillError.hpp
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef DRILL_ERROR_H
+#define DRILL_ERROR_H
+
+#include "drill/common.hpp"
+
+#if defined _WIN32 || defined __CYGWIN__
+ #ifdef DRILL_CLIENT_EXPORTS
+ #define DECLSPEC_DRILL_CLIENT __declspec(dllexport)
+ #else
+ #ifdef USE_STATIC_LIBDRILL
+ #define DECLSPEC_DRILL_CLIENT
+ #else
+ #define DECLSPEC_DRILL_CLIENT __declspec(dllimport)
+ #endif
+ #endif
+#else
+ #if __GNUC__ >= 4
+ #define DECLSPEC_DRILL_CLIENT __attribute__ ((visibility ("default")))
+ #else
+ #define DECLSPEC_DRILL_CLIENT
+ #endif
+#endif
+
+namespace exec{
+ namespace shared{
+ class DrillPBError;
+ };
+};
+
+namespace Drill{
+
+class DECLSPEC_DRILL_CLIENT DrillClientError{
+ public:
+ static const uint32_t CONN_ERROR_START = 100;
+ static const uint32_t QRY_ERROR_START = 200;
+
+ DrillClientError(uint32_t s, uint32_t e, char* m){status=s; errnum=e; msg=m;};
+ DrillClientError(uint32_t s, uint32_t e, std::string m){status=s; errnum=e; msg=m;};
+ //copy ctor
+ DrillClientError(const DrillClientError& err){status=err.status; errnum=err.errnum; msg=err.msg;};
+
+ static DrillClientError* getErrorObject(const exec::shared::DrillPBError& e);
+
+ // To get the error number we add a error range start number to
+ // the status code returned (either status_t or connectionStatus_t)
+ uint32_t status; // could be either status_t or connectionStatus_t
+ uint32_t errnum;
+ std::string msg;
+};
+
+} // namespace Drill
+
+#endif
diff --git a/contrib/native/client/src/include/drill/drillc.hpp b/contrib/native/client/src/include/drill/drillc.hpp
index c8593f599..21a18e7d8 100644
--- a/contrib/native/client/src/include/drill/drillc.hpp
+++ b/contrib/native/client/src/include/drill/drillc.hpp
@@ -20,10 +20,13 @@
#define DRILL_CLIENT_ALL_H
#include "drill/common.hpp"
+#include "drill/drillConfig.hpp"
+#include "drill/drillError.hpp"
#include "drill/drillClient.hpp"
#include "drill/fieldmeta.hpp"
#include "drill/preparedStatement.hpp"
#include "drill/recordBatch.hpp"
+#include "drill/userProperties.hpp"
#include "drill/protobuf/Types.pb.h"
#endif
diff --git a/contrib/native/client/src/include/drill/userProperties.hpp b/contrib/native/client/src/include/drill/userProperties.hpp
new file mode 100644
index 000000000..3490dce7a
--- /dev/null
+++ b/contrib/native/client/src/include/drill/userProperties.hpp
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef USER_PROPERTIES_H
+#define USER_PROPERTIES_H
+
+#include <map>
+#include "drill/common.hpp"
+
+namespace Drill{
+
+class DECLSPEC_DRILL_CLIENT DrillUserProperties{
+ public:
+ static const std::map<std::string, uint32_t> USER_PROPERTIES;
+
+ DrillUserProperties(){};
+
+ void setProperty( const std::string& propName, const std::string& propValue){
+ std::pair< std::string, std::string> in = make_pair(propName, propValue);
+ m_properties.insert(in);
+ }
+
+ size_t size() const { return m_properties.size(); }
+
+ //const std::string& keyAt(size_t i) const { return m_properties.at(i).first; }
+
+ //const std::string& valueAt(size_t i) const { return m_properties.at(i).second; }
+
+ const bool isPropSet(const std::string& key) const{
+ bool isSet=true;
+ auto f= m_properties.find(key);
+ if(f==m_properties.end()){
+ isSet=false;
+ }
+ return isSet;
+ }
+ const std::string& getProp(const std::string& key, std::string& value) const{
+ auto f= m_properties.find(key);
+ if(f!=m_properties.end()){
+ value=f->second;
+ }
+ return value;
+ }
+
+ bool validate(std::string& err);
+
+ std::map<std::string,std::string>::const_iterator begin() const{
+ return m_properties.begin();
+ }
+
+ std::map<std::string,std::string>::const_iterator end() const{
+ return m_properties.end();
+ }
+
+ private:
+ std::map< std::string, std::string > m_properties;
+};
+
+
+} // namespace Drill
+#endif // USER_PROPERTIES_H
+