From 1b0cb631233c9973b6428320429460f705417fae Mon Sep 17 00:00:00 2001 From: Kaveh Vahedipour Date: Wed, 3 Feb 2016 10:15:54 +0100 Subject: [PATCH] minor changes of LOG and namespaces --- arangod/Agency/AgencyCommon.h | 45 +++++++++ arangod/RestHandler/RestAgencyHandler.cpp | 107 ++++++++++++++++++++++ arangod/RestHandler/RestAgencyHandler.h | 53 +++++++++++ m4/ax_compiler_vendor.m4 | 87 ++++++++++++++++++ 4 files changed, 292 insertions(+) create mode 100644 arangod/Agency/AgencyCommon.h create mode 100644 arangod/RestHandler/RestAgencyHandler.cpp create mode 100644 arangod/RestHandler/RestAgencyHandler.h create mode 100644 m4/ax_compiler_vendor.m4 diff --git a/arangod/Agency/AgencyCommon.h b/arangod/Agency/AgencyCommon.h new file mode 100644 index 0000000000..d3538382ba --- /dev/null +++ b/arangod/Agency/AgencyCommon.h @@ -0,0 +1,45 @@ +//////////////////////////////////////////////////////////////////////////////// +/// DISCLAIMER +/// +/// Copyright 2014-2016 ArangoDB GmbH, Cologne, Germany +/// Copyright 2004-2014 triAGENS GmbH, Cologne, Germany +/// +/// Licensed 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. +/// +/// Copyright holder is ArangoDB GmbH, Cologne, Germany +/// +/// @author Kaveh Vahedipour +//////////////////////////////////////////////////////////////////////////////// + +#ifndef __ARANGODB_CONSENSUS_AGENCY_COMMON__ +#define __ARANGODB_CONSENSUS_AGENCY_COMMON__ + +#include +#include + +namespace arangodb { +namespace consensus { + + /** + * @brief Agent configuration + */ + template struct Config { + T min_ping; + T max_ping; + std::vector end_points; + Config (T min_p, T max_p) : min_ping(min_p), max_ping(max_p) {} + }; + +}} +#endif // __ARANGODB_CONSENSUS_AGENT__ + diff --git a/arangod/RestHandler/RestAgencyHandler.cpp b/arangod/RestHandler/RestAgencyHandler.cpp new file mode 100644 index 0000000000..26ae7fe71c --- /dev/null +++ b/arangod/RestHandler/RestAgencyHandler.cpp @@ -0,0 +1,107 @@ +//////////////////////////////////////////////////////////////////////////////// +/// DISCLAIMER +/// +/// Copyright 2014-2016 ArangoDB GmbH, Cologne, Germany +/// Copyright 2004-2014 triAGENS GmbH, Cologne, Germany +/// +/// Licensed 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. +/// +/// Copyright holder is ArangoDB GmbH, Cologne, Germany +/// +/// @author Kaveh Vahedipour +//////////////////////////////////////////////////////////////////////////////// + +#include "Rest/AnyServer.h" +#include "Rest/HttpRequest.h" +#include "Rest/Version.h" +#include "RestAgencyHandler.h" + +#include "Agency/Agent.h" + +#include +#include + +#include "Basics/Logger.h" + +using namespace arangodb; + +using namespace arangodb::basics; +using namespace arangodb::rest; +using namespace arangodb::consensus; + +//////////////////////////////////////////////////////////////////////////////// +/// @brief ArangoDB server +//////////////////////////////////////////////////////////////////////////////// + +extern AnyServer* ArangoInstance; + + +RestAgencyHandler::RestAgencyHandler(HttpRequest* request, Agent* agent) + : RestBaseHandler(request), _agent(agent) { +} + +bool RestAgencyHandler::isDirect() const { return false; } + +HttpHandler::status_t RestAgencyHandler::execute() { + try { + VPackBuilder result; + result.add(VPackValue(VPackValueType::Object)); + + + // Empty request + if (_request->suffix().size() == 0) { + LOG(WARN) << "Empty request to agency. Must ask for vote, log or " + "configure"; + generateError(HttpResponse::NOT_FOUND,404); + return status_t(HANDLER_DONE); + } else if (_request->suffix().size() > 1) { // path size >= 2 + LOG(WARN) << "Agency handles a single suffix: vote, log or configure"; + generateError(HttpResponse::NOT_FOUND,404); + return status_t(HANDLER_DONE); + } else { + if (_request->suffix()[0].compare("vote") == 0) { //vote4me + LOG(WARN) << "Vote request"; + bool found; + char const* termStr = _request->value("term", found); + if (!found) { // For now: don't like this + LOG(WARN) << "No term specified"; // should be handled by + generateError(HttpResponse::BAD,400); // Agent rather than Rest + return status_t(HANDLER_DONE); // handler. + } + char const* idStr = _request->value("id", found); + if (!found) { + LOG(WARN) << "No id specified"; + generateError(HttpResponse::BAD,400); + return status_t(HANDLER_DONE); + } + if (_agent->vote(std::stoul(idStr), std::stoul(termStr))) { + result.add("vote", VPackValue("YES")); + } else { + result.add("vote", VPackValue("NO")); + } + } /*else { + + + + } else if (_request->suffix()[0].compare("log") == 0) { // log replication + } else if (_request->suffix()[0].compare("configure") == 0) {} // cluster conf*/ + } + + result.close(); + VPackSlice s = result.slice(); + generateResult(s); + } catch (...) { + // Ignore this error + } + return status_t(HANDLER_DONE); +} diff --git a/arangod/RestHandler/RestAgencyHandler.h b/arangod/RestHandler/RestAgencyHandler.h new file mode 100644 index 0000000000..6a4d3cc4a2 --- /dev/null +++ b/arangod/RestHandler/RestAgencyHandler.h @@ -0,0 +1,53 @@ +//////////////////////////////////////////////////////////////////////////////// +/// DISCLAIMER +/// +/// Copyright 2014-2016 ArangoDB GmbH, Cologne, Germany +/// Copyright 2004-2014 triAGENS GmbH, Cologne, Germany +/// +/// Licensed 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. +/// +/// Copyright holder is ArangoDB GmbH, Cologne, Germany +/// +/// @author Kaveh Vahedipour +//////////////////////////////////////////////////////////////////////////////// + +#ifndef ARANGOD_REST_HANDLER_REST_AGENCY_HANDLER_H +#define ARANGOD_REST_HANDLER_REST_AGENCY_HANDLER_H 1 + +#include "RestHandler/RestBaseHandler.h" +#include "Agency/Agent.h" + +namespace arangodb { + +//////////////////////////////////////////////////////////////////////////////// +/// @brief version request handler +//////////////////////////////////////////////////////////////////////////////// + +class RestAgencyHandler : public arangodb::RestBaseHandler { + public: + + explicit RestAgencyHandler(arangodb::rest::HttpRequest*, + arangodb::consensus::Agent*); + + bool isDirect() const override; + + status_t execute() override; + + private: + + consensus::Agent* _agent; + +}; +} + +#endif diff --git a/m4/ax_compiler_vendor.m4 b/m4/ax_compiler_vendor.m4 new file mode 100644 index 0000000000..39ca3c0f33 --- /dev/null +++ b/m4/ax_compiler_vendor.m4 @@ -0,0 +1,87 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_compiler_vendor.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_COMPILER_VENDOR +# +# DESCRIPTION +# +# Determine the vendor of the C/C++ compiler, e.g., gnu, intel, ibm, sun, +# hp, borland, comeau, dec, cray, kai, lcc, metrowerks, sgi, microsoft, +# watcom, etc. The vendor is returned in the cache variable +# $ax_cv_c_compiler_vendor for C and $ax_cv_cxx_compiler_vendor for C++. +# +# LICENSE +# +# Copyright (c) 2008 Steven G. Johnson +# Copyright (c) 2008 Matteo Frigo +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 15 + +AC_DEFUN([AX_COMPILER_VENDOR], +[AC_CACHE_CHECK([for _AC_LANG compiler vendor], ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor, + dnl Please add if possible support to ax_compiler_version.m4 + [# note: don't check for gcc first since some other compilers define __GNUC__ + vendors="intel: __ICC,__ECC,__INTEL_COMPILER + ibm: __xlc__,__xlC__,__IBMC__,__IBMCPP__ + pathscale: __PATHCC__,__PATHSCALE__ + clang: __clang__ + cray: _CRAYC + fujitsu: __FUJITSU + gnu: __GNUC__ + sun: __SUNPRO_C,__SUNPRO_CC + hp: __HP_cc,__HP_aCC + dec: __DECC,__DECCXX,__DECC_VER,__DECCXX_VER + borland: __BORLANDC__,__CODEGEARC__,__TURBOC__ + comeau: __COMO__ + kai: __KCC + lcc: __LCC__ + sgi: __sgi,sgi + microsoft: _MSC_VER + metrowerks: __MWERKS__ + watcom: __WATCOMC__ + portland: __PGI + tcc: __TINYC__ + unknown: UNKNOWN" + for ventest in $vendors; do + case $ventest in + *:) vendor=$ventest; continue ;; + *) vencpp="defined("`echo $ventest | sed 's/,/) || defined(/g'`")" ;; + esac + AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[ + #if !($vencpp) + thisisanerror; + #endif + ])], [break]) + done + ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor=`echo $vendor | cut -d: -f1` + ]) +])