aboutsummaryrefslogtreecommitdiff
path: root/contrib/native/client/src/clientlib
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/clientlib
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/clientlib')
-rw-r--r--contrib/native/client/src/clientlib/CMakeLists.txt7
-rw-r--r--contrib/native/client/src/clientlib/drillClient.cpp155
-rw-r--r--contrib/native/client/src/clientlib/drillClientImpl.cpp49
-rw-r--r--contrib/native/client/src/clientlib/drillClientImpl.hpp3
-rw-r--r--contrib/native/client/src/clientlib/drillConfig.cpp151
-rw-r--r--contrib/native/client/src/clientlib/drillError.cpp41
-rw-r--r--contrib/native/client/src/clientlib/saslAuthenticatorImpl.cpp10
-rw-r--r--contrib/native/client/src/clientlib/userProperties.cpp44
-rw-r--r--contrib/native/client/src/clientlib/utils.cpp1
-rw-r--r--contrib/native/client/src/clientlib/zookeeperClient.cpp5
10 files changed, 278 insertions, 188 deletions
diff --git a/contrib/native/client/src/clientlib/CMakeLists.txt b/contrib/native/client/src/clientlib/CMakeLists.txt
index 343bb4d8c..6124fc898 100644
--- a/contrib/native/client/src/clientlib/CMakeLists.txt
+++ b/contrib/native/client/src/clientlib/CMakeLists.txt
@@ -20,14 +20,17 @@
set (CLIENTLIB_SRC_FILES
${CMAKE_CURRENT_SOURCE_DIR}/decimalUtils.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/drillConfig.cpp
${CMAKE_CURRENT_SOURCE_DIR}/drillClient.cpp
${CMAKE_CURRENT_SOURCE_DIR}/drillClientImpl.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/drillError.cpp
${CMAKE_CURRENT_SOURCE_DIR}/fieldmeta.cpp
${CMAKE_CURRENT_SOURCE_DIR}/metadata.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/recordBatch.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/rpcMessage.cpp
${CMAKE_CURRENT_SOURCE_DIR}/errmsgs.cpp
${CMAKE_CURRENT_SOURCE_DIR}/logger.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/recordBatch.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/rpcMessage.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/userProperties.cpp
${CMAKE_CURRENT_SOURCE_DIR}/utils.cpp
${CMAKE_CURRENT_SOURCE_DIR}/saslAuthenticatorImpl.cpp
${CMAKE_CURRENT_SOURCE_DIR}/zookeeperClient.cpp)
diff --git a/contrib/native/client/src/clientlib/drillClient.cpp b/contrib/native/client/src/clientlib/drillClient.cpp
index 8eb909b49..429a17886 100644
--- a/contrib/native/client/src/clientlib/drillClient.cpp
+++ b/contrib/native/client/src/clientlib/drillClient.cpp
@@ -17,25 +17,19 @@
*/
#include <stdlib.h>
-#include <boost/assign.hpp>
#include "drill/common.hpp"
#include "drill/drillClient.hpp"
#include "drill/fieldmeta.hpp"
#include "drill/recordBatch.hpp"
+#include "drill/userProperties.hpp"
#include "drillClientImpl.hpp"
+#include "env.h"
#include "errmsgs.hpp"
#include "logger.hpp"
#include "Types.pb.h"
namespace Drill{
-DrillClientError* DrillClientError::getErrorObject(const exec::shared::DrillPBError& e){
- std::string s=Drill::getMessage(ERR_QRY_FAILURE, e.message().c_str());
- DrillClientError* err=NULL;
- err=new DrillClientError(QRY_FAILURE, QRY_ERROR_START+QRY_FAILURE, s);
- return err;
-}
-
DrillClientInitializer::DrillClientInitializer(){
GOOGLE_PROTOBUF_VERIFY_VERSION;
srand(time(NULL));
@@ -45,151 +39,6 @@ DrillClientInitializer::~DrillClientInitializer(){
google::protobuf::ShutdownProtobufLibrary();
}
-// Initialize static member of DrillClientConfig
-logLevel_t DrillClientConfig::s_logLevel=LOG_ERROR;
-const char* DrillClientConfig::s_saslPluginPath = NULL;
-uint64_t DrillClientConfig::s_bufferLimit=MAX_MEM_ALLOC_SIZE;
-int32_t DrillClientConfig::s_socketTimeout=0;
-int32_t DrillClientConfig::s_handshakeTimeout=5;
-int32_t DrillClientConfig::s_queryTimeout=180;
-int32_t DrillClientConfig::s_heartbeatFrequency=15; // 15 seconds
-std::string DrillClientConfig::s_clientName(DRILL_CONNECTOR_NAME);
-std::string DrillClientConfig::s_applicationName;
-
-boost::mutex DrillClientConfig::s_mutex;
-
-DrillClientConfig::DrillClientConfig(){
- // Do not initialize logging. The Logger object is static and may
- // not have been initialized yet
- //initLogging(NULL);
-}
-
-DrillClientConfig::~DrillClientConfig(){
-}
-
-void DrillClientConfig::initLogging(const char* path){
- getLogger().init(path);
-}
-
-void DrillClientConfig::setLogLevel(logLevel_t l){
- boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
- s_logLevel=l;
- getLogger().m_level=l;
- //boost::log::core::get()->set_filter(boost::log::trivial::severity >= s_logLevel);
-}
-
-void DrillClientConfig::setSaslPluginPath(const char *path){
- boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
- s_saslPluginPath = path;
-}
-
-const char* DrillClientConfig::getSaslPluginPath(){
- boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
- return s_saslPluginPath;
-}
-
-void DrillClientConfig::setBufferLimit(uint64_t l){
- boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
- s_bufferLimit=l;
-}
-
-uint64_t DrillClientConfig::getBufferLimit(){
- boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
- return s_bufferLimit;
-}
-
-void DrillClientConfig::setSocketTimeout(int32_t t){
- boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
- s_socketTimeout=t;
-}
-
-void DrillClientConfig::setHandshakeTimeout(int32_t t){
- if (t > 0) {
- boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
- s_handshakeTimeout = t;
- }
-}
-
-void DrillClientConfig::setQueryTimeout(int32_t t){
- if (t>0){
- boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
- s_queryTimeout=t;
- }
-}
-
-void DrillClientConfig::setHeartbeatFrequency(int32_t t){
- if (t>=0){
- boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
- s_heartbeatFrequency=t;
- }
-}
-
-int32_t DrillClientConfig::getSocketTimeout(){
- boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
- return s_socketTimeout;
-}
-
-int32_t DrillClientConfig::getHandshakeTimeout(){
- boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
- return s_handshakeTimeout;
-}
-
-int32_t DrillClientConfig::getQueryTimeout(){
- boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
- return s_queryTimeout;
-}
-
-int32_t DrillClientConfig::getHeartbeatFrequency(){
- boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
- return s_heartbeatFrequency;
-}
-
-logLevel_t DrillClientConfig::getLogLevel(){
- boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
- return s_logLevel;
-}
-
-const std::string& DrillClientConfig::getClientName() {
- boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
- return s_clientName;
-}
-
-void DrillClientConfig::setClientName(const std::string& name) {
- boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
- s_clientName = name;
-}
-
-const std::string& DrillClientConfig::getApplicationName() {
- boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
- return s_applicationName;
-}
-
-void DrillClientConfig::setApplicationName(const std::string& name) {
- boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
- s_applicationName = name;
-}
-
-//Using boost assign to initialize maps.
-const std::map<std::string, uint32_t> DrillUserProperties::USER_PROPERTIES=boost::assign::map_list_of
- ( USERPROP_USERNAME, USERPROP_FLAGS_SERVERPROP|USERPROP_FLAGS_USERNAME|USERPROP_FLAGS_STRING )
- ( USERPROP_PASSWORD, USERPROP_FLAGS_SERVERPROP|USERPROP_FLAGS_PASSWORD)
- ( USERPROP_SCHEMA, USERPROP_FLAGS_SERVERPROP|USERPROP_FLAGS_STRING)
- ( USERPROP_IMPERSONATION_TARGET, USERPROP_FLAGS_SERVERPROP|USERPROP_FLAGS_STRING)
- ( USERPROP_AUTH_MECHANISM, USERPROP_FLAGS_STRING)
- ( USERPROP_SERVICE_NAME, USERPROP_FLAGS_STRING)
- ( USERPROP_SERVICE_HOST, USERPROP_FLAGS_STRING)
- ( USERPROP_USESSL, USERPROP_FLAGS_BOOLEAN|USERPROP_FLAGS_SSLPROP)
- ( USERPROP_FILEPATH, USERPROP_FLAGS_STRING|USERPROP_FLAGS_SSLPROP|USERPROP_FLAGS_FILEPATH)
- ( USERPROP_FILENAME, USERPROP_FLAGS_STRING|USERPROP_FLAGS_SSLPROP|USERPROP_FLAGS_FILENAME)
- ( USERPROP_SASL_ENCRYPT, USERPROP_FLAGS_STRING)
-;
-
-bool DrillUserProperties::validate(std::string& err){
- bool ret=true;
- //We can add additional validation for any params here
- return ret;
-}
-
RecordIterator::~RecordIterator(){
if(m_pColDefs!=NULL){
for(std::vector<Drill::FieldMetadata*>::iterator it=m_pColDefs->begin();
diff --git a/contrib/native/client/src/clientlib/drillClientImpl.cpp b/contrib/native/client/src/clientlib/drillClientImpl.cpp
index 1ccc29fb4..39ac847c6 100644
--- a/contrib/native/client/src/clientlib/drillClientImpl.cpp
+++ b/contrib/native/client/src/clientlib/drillClientImpl.cpp
@@ -536,19 +536,9 @@ bool DrillClientImpl::clientNeedsEncryption(const DrillUserProperties* userPrope
return needsEncryption;
}
- // Loop through the property to find USERPROP_SASL_ENCRYPT and it's value
- for (size_t i = 0; i < userProperties->size(); i++) {
- const std::string key = userProperties->keyAt(i);
- std::string value = userProperties->valueAt(i);
-
- if(USERPROP_SASL_ENCRYPT == key) {
- boost::algorithm::to_lower(value);
-
- if(0 == value.compare("true")) {
- needsEncryption = true;
- }
- }
- }
+ std::string val;
+ needsEncryption = userProperties->isPropSet(USERPROP_SASL_ENCRYPT) &&
+ boost::iequals(userProperties->getProp(USERPROP_SASL_ENCRYPT, val), "true") ;
return needsEncryption;
}
@@ -581,33 +571,33 @@ connectionStatus_t DrillClientImpl::validateHandshake(DrillUserProperties* prope
exec::user::UserProperties* userProperties = u2b.mutable_properties();
std::map<char,int>::iterator it;
- for(size_t i=0; i<properties->size(); i++){
- std::map<std::string,uint32_t>::const_iterator it=DrillUserProperties::USER_PROPERTIES.find(properties->keyAt(i));
+ for (std::map<std::string,std::string>::const_iterator propIter=properties->begin(); propIter!=properties->end(); ++propIter){
+ std::string currKey=propIter->first;
+ std::string currVal=propIter->second;
+ std::map<std::string,uint32_t>::const_iterator it=DrillUserProperties::USER_PROPERTIES.find(currKey);
if(it==DrillUserProperties::USER_PROPERTIES.end()){
- DRILL_MT_LOG(DRILL_LOG(LOG_INFO) << "Connection property ("<< properties->keyAt(i)
+ DRILL_MT_LOG(DRILL_LOG(LOG_INFO) << "Connection property ("<< currKey
<< ") is unknown" << std::endl;)
-
exec::user::Property* connProp = userProperties->add_properties();
- connProp->set_key(properties->keyAt(i));
- connProp->set_value(properties->valueAt(i));
-
+ connProp->set_key(currKey);
+ connProp->set_value(currVal);
continue;
}
if(IS_BITSET((*it).second,USERPROP_FLAGS_SERVERPROP)){
exec::user::Property* connProp = userProperties->add_properties();
- connProp->set_key(properties->keyAt(i));
- connProp->set_value(properties->valueAt(i));
+ connProp->set_key(currKey);
+ connProp->set_value(currVal);
//Username(but not the password) also needs to be set in UserCredentials
if(IS_BITSET((*it).second,USERPROP_FLAGS_USERNAME)){
exec::shared::UserCredentials* creds = u2b.mutable_credentials();
- username=properties->valueAt(i);
+ username=currVal;
creds->set_user_name(username);
//u2b.set_credentials(&creds);
}
if(IS_BITSET((*it).second,USERPROP_FLAGS_PASSWORD)){
- DRILL_MT_LOG(DRILL_LOG(LOG_INFO) << properties->keyAt(i) << ": ********** " << std::endl;)
+ DRILL_MT_LOG(DRILL_LOG(LOG_INFO) << currKey << ": ********** " << std::endl;)
}else{
- DRILL_MT_LOG(DRILL_LOG(LOG_INFO) << properties->keyAt(i) << ":" << properties->valueAt(i) << std::endl;)
+ DRILL_MT_LOG(DRILL_LOG(LOG_INFO) << currKey << ":" << currVal << std::endl;)
}
}// Server properties
}
@@ -2725,10 +2715,13 @@ connectionStatus_t PooledDrillClientImpl::validateHandshake(DrillUserProperties*
// Keep a copy of the user properties
if(props!=NULL){
m_pUserProperties = boost::shared_ptr<DrillUserProperties>(new DrillUserProperties);
- for(size_t i=0; i<props->size(); i++){
+ //for(size_t i=0; i<props->size(); i++){
+ for(std::map<std::string, std::string>::const_iterator propIter = props->begin(); propIter != props->end(); ++propIter){
+ std::string currKey=propIter->first;
+ std::string currVal=propIter->second;
m_pUserProperties->setProperty(
- props->keyAt(i),
- props->valueAt(i)
+ currKey,
+ currVal
);
}
}
diff --git a/contrib/native/client/src/clientlib/drillClientImpl.hpp b/contrib/native/client/src/clientlib/drillClientImpl.hpp
index efa4e6641..dacc2c30a 100644
--- a/contrib/native/client/src/clientlib/drillClientImpl.hpp
+++ b/contrib/native/client/src/clientlib/drillClientImpl.hpp
@@ -41,8 +41,9 @@
#include <boost/asio/deadline_timer.hpp>
#include <boost/function.hpp>
#include <boost/thread.hpp>
-
#include "drill/drillClient.hpp"
+#include "drill/drillConfig.hpp"
+#include "drill/drillError.hpp"
#include "drill/preparedStatement.hpp"
#include "collectionsImpl.hpp"
#include "metadata.hpp"
diff --git a/contrib/native/client/src/clientlib/drillConfig.cpp b/contrib/native/client/src/clientlib/drillConfig.cpp
new file mode 100644
index 000000000..abaa79aff
--- /dev/null
+++ b/contrib/native/client/src/clientlib/drillConfig.cpp
@@ -0,0 +1,151 @@
+/*
+ * 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.
+ */
+
+
+#include "drill/common.hpp"
+#include "drill/drillConfig.hpp"
+#include "env.h"
+#include "logger.hpp"
+
+namespace Drill{
+
+// Initialize static member of DrillClientConfig
+logLevel_t DrillClientConfig::s_logLevel=LOG_ERROR;
+uint64_t DrillClientConfig::s_bufferLimit=MAX_MEM_ALLOC_SIZE;
+int32_t DrillClientConfig::s_socketTimeout=0;
+int32_t DrillClientConfig::s_handshakeTimeout=5;
+int32_t DrillClientConfig::s_queryTimeout=180;
+int32_t DrillClientConfig::s_heartbeatFrequency=15; // 15 seconds
+const char* DrillClientConfig::s_saslPluginPath = NULL;
+std::string DrillClientConfig::s_clientName(DRILL_CONNECTOR_NAME);
+std::string DrillClientConfig::s_applicationName;
+
+
+boost::mutex DrillClientConfig::s_mutex;
+
+DrillClientConfig::DrillClientConfig(){
+ // Do not initialize logging. The Logger object is static and may
+ // not have been initialized yet
+ //initLogging(NULL);
+}
+
+DrillClientConfig::~DrillClientConfig(){
+}
+
+void DrillClientConfig::initLogging(const char* path){
+ getLogger().init(path);
+}
+
+void DrillClientConfig::setLogLevel(logLevel_t l){
+ boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
+ s_logLevel=l;
+ getLogger().m_level=l;
+}
+
+void DrillClientConfig::setBufferLimit(uint64_t l){
+ boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
+ s_bufferLimit=l;
+}
+
+uint64_t DrillClientConfig::getBufferLimit(){
+ boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
+ return s_bufferLimit;
+}
+
+void DrillClientConfig::setSocketTimeout(int32_t t){
+ boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
+ s_socketTimeout=t;
+}
+
+void DrillClientConfig::setHandshakeTimeout(int32_t t){
+ if (t > 0) {
+ boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
+ s_handshakeTimeout = t;
+ }
+}
+
+void DrillClientConfig::setQueryTimeout(int32_t t){
+ if (t>0){
+ boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
+ s_queryTimeout=t;
+ }
+}
+
+void DrillClientConfig::setHeartbeatFrequency(int32_t t){
+ if (t>0){
+ boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
+ s_heartbeatFrequency=t;
+ }
+}
+
+int32_t DrillClientConfig::getSocketTimeout(){
+ boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
+ return s_socketTimeout;
+}
+
+int32_t DrillClientConfig::getHandshakeTimeout(){
+ boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
+ return s_handshakeTimeout;
+}
+
+int32_t DrillClientConfig::getQueryTimeout(){
+ boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
+ return s_queryTimeout;
+}
+
+int32_t DrillClientConfig::getHeartbeatFrequency(){
+ boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
+ return s_heartbeatFrequency;
+}
+
+logLevel_t DrillClientConfig::getLogLevel(){
+ boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
+ return s_logLevel;
+}
+
+void DrillClientConfig::setSaslPluginPath(const char *path){
+ boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
+ s_saslPluginPath = path;
+}
+
+const char* DrillClientConfig::getSaslPluginPath(){
+ boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
+ return s_saslPluginPath;
+}
+
+const std::string& DrillClientConfig::getClientName() {
+ boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
+ return s_clientName;
+}
+
+void DrillClientConfig::setClientName(const std::string& name) {
+ boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
+ s_clientName = name;
+}
+
+const std::string& DrillClientConfig::getApplicationName() {
+ boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
+ return s_applicationName;
+}
+
+void DrillClientConfig::setApplicationName(const std::string& name) {
+ boost::lock_guard<boost::mutex> configLock(DrillClientConfig::s_mutex);
+ s_applicationName = name;
+}
+
+} // namespace Drill
diff --git a/contrib/native/client/src/clientlib/drillError.cpp b/contrib/native/client/src/clientlib/drillError.cpp
new file mode 100644
index 000000000..046eb5330
--- /dev/null
+++ b/contrib/native/client/src/clientlib/drillError.cpp
@@ -0,0 +1,41 @@
+/*
+ * 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.
+ */
+
+
+#include "drill/drillError.hpp"
+#include "errmsgs.hpp"
+#include "logger.hpp"
+#include "UserBitShared.pb.h"
+
+namespace exec{
+ namespace shared{
+ class DrillPBError;
+ };
+};
+
+namespace Drill{
+
+DrillClientError* DrillClientError::getErrorObject(const exec::shared::DrillPBError& e){
+ std::string s=Drill::getMessage(ERR_QRY_FAILURE, e.message().c_str());
+ DrillClientError* err=NULL;
+ err=new DrillClientError(QRY_FAILURE, QRY_ERROR_START+QRY_FAILURE, s);
+ return err;
+}
+
+
+} // namespace Drill
diff --git a/contrib/native/client/src/clientlib/saslAuthenticatorImpl.cpp b/contrib/native/client/src/clientlib/saslAuthenticatorImpl.cpp
index c5dc3aced..78f99b619 100644
--- a/contrib/native/client/src/clientlib/saslAuthenticatorImpl.cpp
+++ b/contrib/native/client/src/clientlib/saslAuthenticatorImpl.cpp
@@ -20,6 +20,7 @@
#include <algorithm>
#include <boost/algorithm/string.hpp>
#include <boost/assign.hpp>
+#include "drill/userProperties.hpp"
#include "saslAuthenticatorImpl.hpp"
#include "drillClientImpl.hpp"
@@ -123,10 +124,11 @@ int SaslAuthenticatorImpl::init(const std::vector<std::string>& mechanisms, exec
std::string authMechanismToUse;
std::string serviceName;
std::string serviceHost;
- for (size_t i = 0; i < m_pUserProperties->size(); i++) {
- const std::string key = m_pUserProperties->keyAt(i);
- const std::string value = m_pUserProperties->valueAt(i);
-
+ for (std::map<std::string, std::string>::const_iterator it=m_pUserProperties->begin();
+ it!=m_pUserProperties->end();
+ ++it){
+ const std::string key = it->first;
+ const std::string value = it->second;
if (USERPROP_SERVICE_HOST == key) {
serviceHost = value;
} else if (USERPROP_SERVICE_NAME == key) {
diff --git a/contrib/native/client/src/clientlib/userProperties.cpp b/contrib/native/client/src/clientlib/userProperties.cpp
new file mode 100644
index 000000000..07497ef55
--- /dev/null
+++ b/contrib/native/client/src/clientlib/userProperties.cpp
@@ -0,0 +1,44 @@
+/*
+ * 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.
+ */
+
+#include <boost/assign.hpp>
+#include "drill/userProperties.hpp"
+
+namespace Drill{
+
+//Using boost assign to initialize maps.
+const std::map<std::string, uint32_t> DrillUserProperties::USER_PROPERTIES=boost::assign::map_list_of
+ ( USERPROP_USERNAME, USERPROP_FLAGS_SERVERPROP|USERPROP_FLAGS_USERNAME|USERPROP_FLAGS_STRING )
+ ( USERPROP_PASSWORD, USERPROP_FLAGS_SERVERPROP|USERPROP_FLAGS_PASSWORD)
+ ( USERPROP_SCHEMA, USERPROP_FLAGS_SERVERPROP|USERPROP_FLAGS_STRING)
+ ( USERPROP_IMPERSONATION_TARGET, USERPROP_FLAGS_SERVERPROP|USERPROP_FLAGS_STRING)
+ ( USERPROP_AUTH_MECHANISM, USERPROP_FLAGS_STRING)
+ ( USERPROP_SERVICE_NAME, USERPROP_FLAGS_STRING)
+ ( USERPROP_SERVICE_HOST, USERPROP_FLAGS_STRING)
+ ( USERPROP_USESSL, USERPROP_FLAGS_BOOLEAN|USERPROP_FLAGS_SSLPROP)
+ ( USERPROP_CERTFILEPATH, USERPROP_FLAGS_STRING|USERPROP_FLAGS_SSLPROP|USERPROP_FLAGS_FILEPATH)
+ ( USERPROP_SASL_ENCRYPT, USERPROP_FLAGS_STRING)
+;
+
+bool DrillUserProperties::validate(std::string& err){
+ bool ret=true;
+ //We can add additional validation for any params here
+ return ret;
+}
+
+} // namespace Drill
diff --git a/contrib/native/client/src/clientlib/utils.cpp b/contrib/native/client/src/clientlib/utils.cpp
index 11aa2c272..137be6521 100644
--- a/contrib/native/client/src/clientlib/utils.cpp
+++ b/contrib/native/client/src/clientlib/utils.cpp
@@ -21,6 +21,7 @@
#include "utils.hpp"
#include "logger.hpp"
#include "drill/common.hpp"
+#include "drill/drillConfig.hpp"
#if defined _WIN32 || defined _WIN64
//Windows header files redefine 'max'
diff --git a/contrib/native/client/src/clientlib/zookeeperClient.cpp b/contrib/native/client/src/clientlib/zookeeperClient.cpp
index 535bebcad..cd2ac0055 100644
--- a/contrib/native/client/src/clientlib/zookeeperClient.cpp
+++ b/contrib/native/client/src/clientlib/zookeeperClient.cpp
@@ -18,6 +18,7 @@
#include <boost/bind.hpp>
#include <drill/drillClient.hpp>
+#include <drill/drillConfig.hpp>
#include "zookeeperClient.hpp"
#include "errmsgs.hpp"
@@ -158,6 +159,10 @@ int ZookeeperClient::getEndPoint(const std::string& drillbit, exec::DrillbitEndp
drillServiceInstance.ParseFromArray(buffer, buffer_len);
endpoint=drillServiceInstance.endpoint();
+ if(p_zh!=NULL && m_state==ZOO_CONNECTED_STATE){
+ DRILL_LOG(LOG_TRACE) << drillServiceInstance.DebugString() << std::endl;
+ }
+
return 0;
}