You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by jb...@apache.org on 2018/12/18 17:20:23 UTC
[geode-native] branch develop updated: GEODE-5188 - Adds
benchmarking framework. (#293)
This is an automated email from the ASF dual-hosted git repository.
jbarrett pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode-native.git
The following commit(s) were added to refs/heads/develop by this push:
new e4b2577 GEODE-5188 - Adds benchmarking framework. (#293)
e4b2577 is described below
commit e4b2577305e015f38249db70c23b49b2a0523df6
Author: Jacob Barrett <jb...@pivotal.io>
AuthorDate: Tue Dec 18 09:20:18 2018 -0800
GEODE-5188 - Adds benchmarking framework. (#293)
* Prevent optimization of bench.
* Adds benchmark framework.
* Refactor for shared integration framework.
* Adds some get benchmarks.
* Fixes Rat checking
---
.ratCheck.sh | 12 --
.ratignore | 67 ++++++-----
.travis.yml | 4 +-
CMakeLists.txt | 15 ++-
.../uninstall-doxygen.ps1 => cmake/RatCheck.cmake | 23 ++--
cppcache/CMakeLists.txt | 6 +-
cppcache/README.md | 37 ++++++
.../benchmark/CMakeLists.txt | 26 +++--
cppcache/benchmark/GeodeHashBM.cpp | 45 +++++++
.../framework/Gfsh.cpp => benchmark/main.cpp} | 4 +-
.../integration/CMakeLists.txt | 16 +--
.../integration/benchmark/CMakeLists.txt | 24 ++--
cppcache/integration/benchmark/RegionBM.cpp | 130 +++++++++++++++++++++
.../Gfsh.cpp => integration/benchmark/main.cpp} | 4 +-
.../framework/.clang-tidy | 0
.../integration/framework/CMakeLists.txt | 50 +++++++-
.../framework/Cluster.cpp | 0
.../framework/Cluster.h | 2 +-
.../framework/Framework.cpp | 0
.../framework/Framework.h | 0
.../framework/Gfsh.cpp | 0
.../framework/Gfsh.h | 0
.../framework/GfshExecute.cpp | 4 +-
.../framework/GfshExecute.h | 0
.../framework/config.h.in | 0
.../test}/CMakeLists.txt | 35 +++---
.../test}/DataSerializableTest.cpp | 0
.../test}/EnableChunkHandlerThreadTest.cpp | 0
.../test}/ExampleTest.cpp | 8 +-
.../test}/FunctionExecutionTest.cpp | 0
.../test}/PdxInstanceTest.cpp | 5 +-
cppcache/integration/test/RegionGetAllTest.cpp | 94 +++++++++++++++
cppcache/integration/test/RegionPutAllTest.cpp | 102 ++++++++++++++++
.../test}/RegionPutGetAllTest.cpp | 8 +-
.../test}/RegisterKeysTest.cpp | 0
.../test}/StructTest.cpp | 7 +-
dependencies/CMakeLists.txt | 11 +-
dependencies/benchmark/CMakeLists.txt | 78 +++++++++++++
dependencies/benchmark/patches | 12 ++
dependencies/boost/CMakeLists.txt | 4 +-
dependencies/gtest/CMakeLists.txt | 42 +++----
.../rat/CMakeLists.txt | 22 ++--
docs/docker/Dockerfile | 16 +++
packer/solaris/changepasswd | 14 +++
packer/windows/Packer.psm1 | 1 +
packer/windows/add-user-build.ps1 | 1 +
packer/windows/cleanup.ps1 | 1 +
packer/windows/install-chocolatey.ps1 | 1 +
packer/windows/install-gemfire.ps1 | 1 +
.../windows/install-windows-8.1-2012-r2-wmf-5.ps1 | 1 +
packer/windows/setup-ec2config.ps1 | 1 +
packer/windows/uninstall-doxygen.ps1 | 2 +-
52 files changed, 764 insertions(+), 172 deletions(-)
diff --git a/.ratCheck.sh b/.ratCheck.sh
deleted file mode 100755
index 0fb3474..0000000
--- a/.ratCheck.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/bash
-
-SOURCE_DIR=.
-COUNT=`java -jar /apache-rat-0.12/apache-rat-0.12.jar -E ${SOURCE_DIR}/.ratignore -d ${SOURCE_DIR} | grep '== File:' | sed 's/== File://' | wc -l`
-
-if [ $COUNT -gt 0 ]
- then
- echo "Rat check failed, $COUNT files are missing Apache license headers"
-fi
-
-exit $COUNT
-
diff --git a/.ratignore b/.ratignore
index fefd090..dbf556f 100644
--- a/.ratignore
+++ b/.ratignore
@@ -1,40 +1,39 @@
-# text files
-.*\.clang-format$
-.*\.clang-tidy$
-.*\.cpackignore$
-.*\.gitignore$
-.*\.lcovrc$
-.*\.ratignore$
-.*\.lgtm.yml$
-.*\.ratCheck.sh$
+# rat -E only matches filename components
+# All matches are anchored automatically to who string
-.*md$
-.*json$
-.*deprecated_xml_instructions.txt$
+# /
+\.clang-format
+\.clang-tidy
+\.gitignore
+\.ratignore
+\.lgtm.yml
+\.lcovrc
+\.cpackignore
-# generated files
-.*Resources.Designer.cs$
-.*Settings.Designer.cs$
+# dependencies/*/
+patches
-# public domain
-.*CPPDictionary.hpp$
-.*CPPSymbol.hpp$
-.*CPP_parser.g$
-.*DictEntry.hpp$
-.*Dictionary.cpp$
-.*Dictionary.hpp$
-.*STDCTokenTypes.txt$
-.*Support.cpp$
+# packer/*/
+.*\.cloud-init
+.*\.json
-# expect script
-.*changepasswd$
-.*winrm.cloud-init$
+# docs/
+Gemfile.lock
+package-list
+.*\.md
+.*\.md.erb
-# doxygen
-.*package-list$
-.*testframeworkdox.txt$
-docs
+# contrib/pdxautoserializer
+# public domain sources
+CPPDictionary.hpp
+CPPSymbol.hpp
+CPP_parser.g
+DictEntry.hpp
+Dictionary.cpp
+Dictionary.hpp
+STDCTokenTypes.txt
+Support.cpp
-# patches
-.*patches$
-.*ACE.config.h.in$
+# well known build directories
+build
+cmake-build-.*
diff --git a/.travis.yml b/.travis.yml
index 826c049..304d967 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -29,8 +29,8 @@ env:
- SOURCE_DIR="/geode-native"
matrix:
- - DOCKER_COMMAND="cd ${SOURCE_DIR} && ./.ratCheck.sh"
- - DOCKER_COMMAND="mkdir build && cd build && cmake ${SOURCE_DIR} -DCMAKE_CXX_FLAGS=-stdlib=libc++ -DCMAKE_CXX_CLANG_TIDY=clang-tidy && cmake --build . -- -j2 && ./cppcache/test/apache-geode_unittests && git -C ${SOURCE_DIR} diff --exit-code"
+ - DOCKER_COMMAND="echo rat && mkdir build && cd build && cmake ${SOURCE_DIR} -DUSE_RAT=ON && cmake --build . --target rat-check"
+ - DOCKER_COMMAND="echo test && mkdir build && cd build && cmake ${SOURCE_DIR} -DCMAKE_CXX_FLAGS=-stdlib=libc++ -DCMAKE_CXX_CLANG_TIDY=clang-tidy && cmake --build . -- -j2 && ./cppcache/test/apache-geode_unittests && git -C ${SOURCE_DIR} diff --exit-code"
install:
- docker pull "${DOCKER_IMAGE}"
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1ae923b..2802259 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -17,7 +17,8 @@ cmake_minimum_required(VERSION 3.12)
project(nativeclient LANGUAGES C CXX)
option(USE_PCH "Use precompiled headers (PCH)." OFF)
-option(USE_CPP_COVERAGE "Enable profiling and coverage report analysis for apache-geode cpp library" OFF)
+option(USE_CPP_COVERAGE "Enable profiling and coverage report analysis for apache-geode cpp library." OFF)
+option(USE_RAT "Enable Apache Rat checking." OFF)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
@@ -40,6 +41,7 @@ endif()
set(CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION "4.5.2")
set(DOTNET_TARGET_FRAMEWORK_VERSION "4.5.2")
set(BUILD_BITS 64 CACHE STRING "Build for 64 (Geode default) or 32 bit.")
+option(BUILD_BENCHMARKS "Build benchmarks" ON)
set(PRODUCT_VENDOR "Apache" CACHE STRING "Product vendor")
set(PRODUCT_VENDOR_NAME "The Apache Software Foundation" CACHE STRING "Product vendor full legal name")
@@ -363,3 +365,14 @@ install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/templates/ DESTINATION templates
PATTERN "templates/security/CMakeLists.txt" EXCLUDE
PATTERN "templates/security/CMakeLists.txt.forInstall" EXCLUDE)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/templates/security/CMakeLists.txt.forInstall RENAME CMakeLists.txt DESTINATION templates/security)
+
+if (USE_RAT)
+ add_custom_target( rat-check
+ COMMAND ${CMAKE_COMMAND}
+ -DJava_JAVA_EXECUTABLE=${Java_JAVA_EXECUTABLE}
+ -DRat_JAR=${Rat_JAR}
+ -P cmake/RatCheck.cmake
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMENT "Checking source with Apache Rat."
+ )
+endif()
\ No newline at end of file
diff --git a/packer/windows/uninstall-doxygen.ps1 b/cmake/RatCheck.cmake
similarity index 62%
copy from packer/windows/uninstall-doxygen.ps1
copy to cmake/RatCheck.cmake
index 467d5f1..0590409 100644
--- a/packer/windows/uninstall-doxygen.ps1
+++ b/cmake/RatCheck.cmake
@@ -12,12 +12,21 @@
# 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.
-# Enable the system password to be retrieved from the AWS Console after this AMI is built and used to launch code
-
-$package = 'doxygen.install'
-$uninstallRegKey = 'HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\doxygen_is1'
+#
-Import-Module C:\ProgramData\chocolatey\helpers\chocolateyInstaller.psm1
-$uninstallPath = (Get-ItemProperty $uninstallRegKey UninstallString).UninstallString
-Uninstall-ChocolateyPackage $package 'exe' '/VERYSILENT' $uninstallPath
+execute_process(
+ COMMAND ${Java_JAVA_EXECUTABLE} -jar ${Rat_JAR} -d . -E .ratignore >
+ OUTPUT_VARIABLE ratOutput
+)
+set(pass FALSE)
+if (ratOutput MATCHES "([0-9]+) Unknown Licenses")
+ set(unknownLicenses ${CMAKE_MATCH_1})
+ if (unknownLicenses GREATER 0)
+ message(SEND_ERROR "${ratOutput}")
+ message(FATAL_ERROR "${unknownLicenses} Unknown licenses detected.")
+ endif()
+else()
+ message(SEND_ERROR "${ratOutput}")
+ message(FATAL_ERROR "Unknown failure")
+endif()
diff --git a/cppcache/CMakeLists.txt b/cppcache/CMakeLists.txt
index 1f97c41..e4afd54 100644
--- a/cppcache/CMakeLists.txt
+++ b/cppcache/CMakeLists.txt
@@ -129,5 +129,9 @@ add_subdirectory(shared)
add_subdirectory(static)
add_subdirectory(test)
add_subdirectory(internal)
+add_subdirectory(integration)
add_subdirectory(integration-test)
-add_subdirectory(integration-test-2)
+
+if (BUILD_BENCHMARKS)
+ add_subdirectory(benchmark)
+endif()
\ No newline at end of file
diff --git a/cppcache/README.md b/cppcache/README.md
new file mode 100644
index 0000000..e947804
--- /dev/null
+++ b/cppcache/README.md
@@ -0,0 +1,37 @@
+Contents
+========
+
+
+## Main sources
+
+# include/
+Public include header files for C++ library.
+
+# src/
+Sources for both static and shared C++ library.
+
+# shared/
+Shared library definition only. Should not contain any sources.
+
+# static/
+Static library definition only. Should not contain any sources.
+
+
+## Test and Benchmark sources
+
+# integration/
+Integration syle tests, benchmarks, and common sources. These are all "modern"
+single process style and shoult not use any of the "legacy" multiple process
+framework.
+
+## integrtion-test/
+Legacy integration tests written in the multiple process framework. No new tests
+should be added to this collections. Fixes and rewrites should be migrated to
+the new framework in the _integration/test_ directory metioned above.
+
+## test/
+Unit style tests.
+
+## benchmark/
+Unit style or micro benchmark tests.
+
diff --git a/packer/windows/install-chocolatey.ps1 b/cppcache/benchmark/CMakeLists.txt
similarity index 69%
copy from packer/windows/install-chocolatey.ps1
copy to cppcache/benchmark/CMakeLists.txt
index 9fa384d..5461abe 100644
--- a/packer/windows/install-chocolatey.ps1
+++ b/cppcache/benchmark/CMakeLists.txt
@@ -4,21 +4,31 @@
# 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.
-$ErrorActionPreference = "Stop"
-write-host "Installing Chocolatey"
+add_executable(cpp-benchmark
+ main.cpp
+ GeodeHashBM.cpp
+ )
-# Avoid bug in 7zip when running via WinRM
-$Env:chocolateyUseWindowsCompression = $true
+target_link_libraries(cpp-benchmark
+ PUBLIC
+ apache-geode-static
+ benchmark::benchmark
+ PRIVATE
+ _WarningsAsError
+ )
-iwr https://chocolatey.org/install.ps1 | iex
+target_include_directories(cpp-benchmark
+ PRIVATE
+ $<TARGET_PROPERTY:apache-geode-static,SOURCE_DIR>/../src
+ )
-write-host "Chocolatey Installed"
+add_clangformat(cpp-benchmark)
diff --git a/cppcache/benchmark/GeodeHashBM.cpp b/cppcache/benchmark/GeodeHashBM.cpp
new file mode 100644
index 0000000..9bb5cb0
--- /dev/null
+++ b/cppcache/benchmark/GeodeHashBM.cpp
@@ -0,0 +1,45 @@
+/*
+ * 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 <benchmark/benchmark.h>
+
+#include <geode/CacheableString.hpp>
+
+#include "util/string.hpp"
+
+using apache::geode::client::to_utf16;
+using apache::geode::client::internal::geode_hash;
+
+class GeodeHashBM : public benchmark::Fixture {};
+
+BENCHMARK_DEFINE_F(GeodeHashBM, std_string)(benchmark::State& state) {
+ std::string x(state.range(0), 'x');
+ for (auto _ : state) {
+ int hashcode;
+ benchmark::DoNotOptimize(hashcode = geode_hash<std::string>{}(x));
+ }
+}
+BENCHMARK_REGISTER_F(GeodeHashBM, std_string)->Range(8, 8 << 10);
+
+BENCHMARK_DEFINE_F(GeodeHashBM, std_u16string)(benchmark::State& state) {
+ std::u16string x(state.range(0), u'x');
+ for (auto _ : state) {
+ int hashcode;
+ benchmark::DoNotOptimize(hashcode = geode_hash<std::u16string>{}(x));
+ }
+}
+BENCHMARK_REGISTER_F(GeodeHashBM, std_u16string)->Range(8, 8 << 10);
diff --git a/cppcache/integration-test-2/framework/Gfsh.cpp b/cppcache/benchmark/main.cpp
similarity index 93%
copy from cppcache/integration-test-2/framework/Gfsh.cpp
copy to cppcache/benchmark/main.cpp
index d10798d..782f521 100644
--- a/cppcache/integration-test-2/framework/Gfsh.cpp
+++ b/cppcache/benchmark/main.cpp
@@ -15,4 +15,6 @@
* limitations under the License.
*/
-#include "Gfsh.h"
+#include <benchmark/benchmark.h>
+
+BENCHMARK_MAIN();
diff --git a/packer/windows/install-gemfire.ps1 b/cppcache/integration/CMakeLists.txt
similarity index 83%
copy from packer/windows/install-gemfire.ps1
copy to cppcache/integration/CMakeLists.txt
index 1a4ed54..c7e76eb 100644
--- a/packer/windows/install-gemfire.ps1
+++ b/cppcache/integration/CMakeLists.txt
@@ -4,18 +4,18 @@
# 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.
-$ErrorActionPreference = "Stop"
-Import-Module Packer -Force
-mkdir C:\gemfire
-cd C:\gemfire
-cmake -E tar zxf $Home\gemfire.tar.gz
-rm $Home\gemfire.tar.gz
+add_subdirectory(framework)
+add_subdirectory(test)
+
+if (BUILD_BENCHMARKS)
+ add_subdirectory(benchmark)
+endif()
diff --git a/packer/windows/install-chocolatey.ps1 b/cppcache/integration/benchmark/CMakeLists.txt
similarity index 73%
copy from packer/windows/install-chocolatey.ps1
copy to cppcache/integration/benchmark/CMakeLists.txt
index 9fa384d..c15ffeb 100644
--- a/packer/windows/install-chocolatey.ps1
+++ b/cppcache/integration/benchmark/CMakeLists.txt
@@ -4,21 +4,27 @@
# 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.
-$ErrorActionPreference = "Stop"
-write-host "Installing Chocolatey"
+add_executable(cpp-integration-benchmark
+ main.cpp
+ RegionBM.cpp
+ )
-# Avoid bug in 7zip when running via WinRM
-$Env:chocolateyUseWindowsCompression = $true
+target_link_libraries(cpp-integration-benchmark
+ PUBLIC
+ apache-geode
+ benchmark::benchmark
+ integration-framework
+ PRIVATE
+ _WarningsAsError
+ )
-iwr https://chocolatey.org/install.ps1 | iex
-
-write-host "Chocolatey Installed"
+add_clangformat(cpp-integration-benchmark)
diff --git a/cppcache/integration/benchmark/RegionBM.cpp b/cppcache/integration/benchmark/RegionBM.cpp
new file mode 100644
index 0000000..8ca972f
--- /dev/null
+++ b/cppcache/integration/benchmark/RegionBM.cpp
@@ -0,0 +1,130 @@
+/*
+ * 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 <benchmark/benchmark.h>
+#include <framework/Cluster.h>
+#include <framework/Gfsh.h>
+
+#include <boost/log/core.hpp>
+#include <boost/log/expressions.hpp>
+#include <boost/log/trivial.hpp>
+
+#include <geode/Cache.hpp>
+#include <geode/CacheableString.hpp>
+#include <geode/PoolManager.hpp>
+#include <geode/RegionFactory.hpp>
+#include <geode/RegionShortcut.hpp>
+
+using apache::geode::client::Cache;
+using apache::geode::client::CacheableInt32;
+using apache::geode::client::CacheableString;
+using apache::geode::client::Region;
+using apache::geode::client::RegionShortcut;
+
+namespace {
+
+class RegionBM : public benchmark::Fixture {
+ public:
+ RegionBM() {
+ boost::log::core::get()->set_filter(boost::log::trivial::severity >=
+ boost::log::trivial::warning);
+ }
+
+ using benchmark::Fixture::SetUp;
+ void SetUp(benchmark::State&) override {
+ if (!cluster) {
+ cluster = std::unique_ptr<Cluster>(
+ new Cluster(Name{name_}, LocatorCount{1}, ServerCount{1}));
+ cluster->getGfsh()
+ .create()
+ .region()
+ .withName("region")
+ .withType("REPLICATE")
+ .execute();
+
+ cache = std::unique_ptr<Cache>(new Cache(cluster->createCache()));
+ region = cache->createRegionFactory(RegionShortcut::PROXY)
+ .setPoolName("default")
+ .create("region");
+ }
+ }
+
+ using benchmark::Fixture::TearDown;
+ void TearDown(benchmark::State&) override {
+ if (cluster) {
+ region = nullptr;
+ cache = nullptr;
+ cluster = nullptr;
+ }
+ }
+
+ protected:
+ void SetName(const char* name) {
+ name_ = name;
+
+ Benchmark::SetName(name);
+ }
+
+ std::unique_ptr<Cluster> cluster;
+ std::unique_ptr<Cache> cache;
+ std::shared_ptr<Region> region;
+
+ private:
+ std::string name_;
+};
+
+BENCHMARK_F(RegionBM, put_string)(benchmark::State& state) {
+ auto key = CacheableString::create("key");
+ auto value = CacheableString::create("value");
+
+ for (auto _ : state) {
+ region->put(key, value);
+ }
+}
+
+BENCHMARK_F(RegionBM, put_int)(benchmark::State& state) {
+ auto key = CacheableInt32::create(1);
+ auto value = CacheableInt32::create(1);
+
+ for (auto _ : state) {
+ region->put(key, value);
+ }
+}
+
+BENCHMARK_F(RegionBM, get_string)(benchmark::State& state) {
+ auto key = CacheableString::create("key");
+ auto value = CacheableString::create("value");
+
+ region->put(key, value);
+
+ for (auto _ : state) {
+ region->get(key);
+ }
+}
+
+BENCHMARK_F(RegionBM, get_int)(benchmark::State& state) {
+ auto key = CacheableInt32::create(1);
+ auto value = CacheableInt32::create(1);
+
+ region->put(key, value);
+
+ for (auto _ : state) {
+ region->get(key);
+ }
+}
+
+} // namespace
diff --git a/cppcache/integration-test-2/framework/Gfsh.cpp b/cppcache/integration/benchmark/main.cpp
similarity index 93%
copy from cppcache/integration-test-2/framework/Gfsh.cpp
copy to cppcache/integration/benchmark/main.cpp
index d10798d..782f521 100644
--- a/cppcache/integration-test-2/framework/Gfsh.cpp
+++ b/cppcache/integration/benchmark/main.cpp
@@ -15,4 +15,6 @@
* limitations under the License.
*/
-#include "Gfsh.h"
+#include <benchmark/benchmark.h>
+
+BENCHMARK_MAIN();
diff --git a/cppcache/integration-test-2/framework/.clang-tidy b/cppcache/integration/framework/.clang-tidy
similarity index 100%
rename from cppcache/integration-test-2/framework/.clang-tidy
rename to cppcache/integration/framework/.clang-tidy
diff --git a/packer/windows/uninstall-doxygen.ps1 b/cppcache/integration/framework/CMakeLists.txt
similarity index 50%
copy from packer/windows/uninstall-doxygen.ps1
copy to cppcache/integration/framework/CMakeLists.txt
index 467d5f1..50b7d29 100644
--- a/packer/windows/uninstall-doxygen.ps1
+++ b/cppcache/integration/framework/CMakeLists.txt
@@ -12,12 +12,50 @@
# 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.
-# Enable the system password to be retrieved from the AWS Console after this AMI is built and used to launch code
-$package = 'doxygen.install'
-$uninstallRegKey = 'HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\doxygen_is1'
+configure_file(config.h.in config.h)
-Import-Module C:\ProgramData\chocolatey\helpers\chocolateyInstaller.psm1
-$uninstallPath = (Get-ItemProperty $uninstallRegKey UninstallString).UninstallString
-Uninstall-ChocolateyPackage $package 'exe' '/VERYSILENT' $uninstallPath
+add_library(integration-framework STATIC
+ Gfsh.cpp
+ Gfsh.h
+ Framework.cpp
+ Framework.h
+ Cluster.cpp
+ Cluster.h
+ GfshExecute.cpp
+ GfshExecute.h
+ )
+target_compile_definitions(integration-framework
+ PUBLIC
+ BOOST_ASIO_HAS_MOVE
+)
+
+target_include_directories(integration-framework
+ PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/..
+ PRIVATE
+ ${CMAKE_CURRENT_BINARY_DIR}
+
+)
+
+target_link_libraries(integration-framework
+ PUBLIC
+ apache-geode
+ GTest::GTest
+ Boost::boost
+ Boost::system
+ Boost::log
+ Boost::filesystem
+ PRIVATE
+ _WarningsAsError
+ internal
+)
+
+if(WIN32)
+ target_compile_definitions(integration-framework
+ PUBLIC
+ # Required for Boost.WinAPI
+ _WIN32_WINNT=0x06020000
+ )
+endif()
diff --git a/cppcache/integration-test-2/framework/Cluster.cpp b/cppcache/integration/framework/Cluster.cpp
similarity index 100%
rename from cppcache/integration-test-2/framework/Cluster.cpp
rename to cppcache/integration/framework/Cluster.cpp
diff --git a/cppcache/integration-test-2/framework/Cluster.h b/cppcache/integration/framework/Cluster.h
similarity index 99%
rename from cppcache/integration-test-2/framework/Cluster.h
rename to cppcache/integration/framework/Cluster.h
index a8aefad..06a8a84 100644
--- a/cppcache/integration-test-2/framework/Cluster.h
+++ b/cppcache/integration/framework/Cluster.h
@@ -23,7 +23,7 @@
#include <cstdint>
#include <string>
-#include <gtest/gtest.h>
+#include "gtest/gtest.h"
#include <geode/Cache.hpp>
#include <geode/PoolManager.hpp>
diff --git a/cppcache/integration-test-2/framework/Framework.cpp b/cppcache/integration/framework/Framework.cpp
similarity index 100%
rename from cppcache/integration-test-2/framework/Framework.cpp
rename to cppcache/integration/framework/Framework.cpp
diff --git a/cppcache/integration-test-2/framework/Framework.h b/cppcache/integration/framework/Framework.h
similarity index 100%
rename from cppcache/integration-test-2/framework/Framework.h
rename to cppcache/integration/framework/Framework.h
diff --git a/cppcache/integration-test-2/framework/Gfsh.cpp b/cppcache/integration/framework/Gfsh.cpp
similarity index 100%
rename from cppcache/integration-test-2/framework/Gfsh.cpp
rename to cppcache/integration/framework/Gfsh.cpp
diff --git a/cppcache/integration-test-2/framework/Gfsh.h b/cppcache/integration/framework/Gfsh.h
similarity index 100%
rename from cppcache/integration-test-2/framework/Gfsh.h
rename to cppcache/integration/framework/Gfsh.h
diff --git a/cppcache/integration-test-2/framework/GfshExecute.cpp b/cppcache/integration/framework/GfshExecute.cpp
similarity index 97%
rename from cppcache/integration-test-2/framework/GfshExecute.cpp
rename to cppcache/integration/framework/GfshExecute.cpp
index b9d8f69..5ae9023 100644
--- a/cppcache/integration-test-2/framework/GfshExecute.cpp
+++ b/cppcache/integration/framework/GfshExecute.cpp
@@ -55,11 +55,11 @@ void GfshExecute::execute(const std::string &command) {
std::string line;
while (outStream && std::getline(outStream, line)) {
- BOOST_LOG_TRIVIAL(debug) << "Gfsh::execute: " << line;
+ BOOST_LOG_TRIVIAL(trace) << "Gfsh::execute: " << line;
}
while (errStream && std::getline(errStream, line)) {
- BOOST_LOG_TRIVIAL(error) << "Gfsh::execute: " << line;
+ BOOST_LOG_TRIVIAL(debug) << "Gfsh::execute: " << line;
}
gfsh.wait();
diff --git a/cppcache/integration-test-2/framework/GfshExecute.h b/cppcache/integration/framework/GfshExecute.h
similarity index 100%
rename from cppcache/integration-test-2/framework/GfshExecute.h
rename to cppcache/integration/framework/GfshExecute.h
diff --git a/cppcache/integration-test-2/framework/config.h.in b/cppcache/integration/framework/config.h.in
similarity index 100%
rename from cppcache/integration-test-2/framework/config.h.in
rename to cppcache/integration/framework/config.h.in
diff --git a/cppcache/integration-test-2/CMakeLists.txt b/cppcache/integration/test/CMakeLists.txt
similarity index 68%
rename from cppcache/integration-test-2/CMakeLists.txt
rename to cppcache/integration/test/CMakeLists.txt
index ddd14ed..f2552ed 100644
--- a/cppcache/integration-test-2/CMakeLists.txt
+++ b/cppcache/integration/test/CMakeLists.txt
@@ -13,40 +13,33 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-configure_file(framework/config.h.in config.h)
-
-add_executable(integration-test-2
+add_executable(cpp-integration-test
ExampleTest.cpp
- framework/Gfsh.cpp
- framework/Gfsh.h
- framework/Framework.cpp
- framework/Framework.h
- framework/Cluster.cpp
- framework/Cluster.h
- framework/GfshExecute.cpp
- framework/GfshExecute.h
RegionPutGetAllTest.cpp
PdxInstanceTest.cpp
RegisterKeysTest.cpp
StructTest.cpp
EnableChunkHandlerThreadTest.cpp
DataSerializableTest.cpp
- FunctionExecutionTest.cpp)
+ FunctionExecutionTest.cpp
+ StructTest.cpp
+)
-target_compile_definitions(integration-test-2
+target_compile_definitions(cpp-integration-test
PUBLIC
BOOST_ASIO_HAS_MOVE
GTEST_ELLIPSIS_NEEDS_POD_
)
-target_include_directories(integration-test-2
+target_include_directories(cpp-integration-test
PUBLIC
${CMAKE_CURRENT_BINARY_DIR}
)
-target_link_libraries(integration-test-2
+target_link_libraries(cpp-integration-test
PUBLIC
apache-geode
+ integration-framework
testobject
ACE
GTest::GTest
@@ -61,28 +54,28 @@ target_link_libraries(integration-test-2
)
if(WIN32)
- target_compile_definitions(integration-test-2
+ target_compile_definitions(cpp-integration-test
PUBLIC
# Required for Boost.WinAPI
_WIN32_WINNT=0x06020000
)
foreach (_target apache-geode testobject)
- add_custom_command(TARGET integration-test-2 POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different
+ add_custom_command(TARGET cpp-integration-test POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different
"$<TARGET_FILE:${_target}>"
"$<$<CONFIG:Debug>:$<TARGET_PDB_FILE:${_target}>>"
- "$<TARGET_FILE_DIR:integration-test-2>")
+ "$<TARGET_FILE_DIR:cpp-integration-test>")
endforeach()
endif()
-set_target_properties(integration-test-2 PROPERTIES
+set_target_properties(cpp-integration-test PROPERTIES
CXX_VISIBILITY_PRESET hidden
VISIBILITY_INLINES_HIDDEN ON
FOLDER cpp/test/integration
)
-add_clangformat(integration-test-2)
+add_clangformat(cpp-integration-test)
enable_testing()
include(GoogleTest)
-gtest_discover_tests(integration-test-2)
\ No newline at end of file
+gtest_discover_tests(cpp-integration-test)
diff --git a/cppcache/integration-test-2/DataSerializableTest.cpp b/cppcache/integration/test/DataSerializableTest.cpp
similarity index 100%
rename from cppcache/integration-test-2/DataSerializableTest.cpp
rename to cppcache/integration/test/DataSerializableTest.cpp
diff --git a/cppcache/integration-test-2/EnableChunkHandlerThreadTest.cpp b/cppcache/integration/test/EnableChunkHandlerThreadTest.cpp
similarity index 100%
rename from cppcache/integration-test-2/EnableChunkHandlerThreadTest.cpp
rename to cppcache/integration/test/EnableChunkHandlerThreadTest.cpp
diff --git a/cppcache/integration-test-2/ExampleTest.cpp b/cppcache/integration/test/ExampleTest.cpp
similarity index 97%
rename from cppcache/integration-test-2/ExampleTest.cpp
rename to cppcache/integration/test/ExampleTest.cpp
index 6458ac1..bd96453 100644
--- a/cppcache/integration-test-2/ExampleTest.cpp
+++ b/cppcache/integration/test/ExampleTest.cpp
@@ -15,6 +15,10 @@
* limitations under the License.
*/
+#include <framework/Cluster.h>
+#include <framework/Framework.h>
+#include <framework/Gfsh.h>
+
#include <future>
#include <iostream>
#include <random>
@@ -27,10 +31,6 @@
#include <geode/RegionFactory.hpp>
#include <geode/RegionShortcut.hpp>
-#include "framework/Cluster.h"
-#include "framework/Framework.h"
-#include "framework/Gfsh.h"
-
namespace {
using apache::geode::client::Cache;
diff --git a/cppcache/integration-test-2/FunctionExecutionTest.cpp b/cppcache/integration/test/FunctionExecutionTest.cpp
similarity index 100%
rename from cppcache/integration-test-2/FunctionExecutionTest.cpp
rename to cppcache/integration/test/FunctionExecutionTest.cpp
diff --git a/cppcache/integration-test-2/PdxInstanceTest.cpp b/cppcache/integration/test/PdxInstanceTest.cpp
similarity index 99%
rename from cppcache/integration-test-2/PdxInstanceTest.cpp
rename to cppcache/integration/test/PdxInstanceTest.cpp
index dadbe32..b68a1a5 100644
--- a/cppcache/integration-test-2/PdxInstanceTest.cpp
+++ b/cppcache/integration/test/PdxInstanceTest.cpp
@@ -15,6 +15,9 @@
* limitations under the License.
*/
+#include <framework/Cluster.h>
+#include <framework/Gfsh.h>
+
#include <future>
#include <initializer_list>
#include <iostream>
@@ -33,8 +36,6 @@
#include "LocalRegion.hpp"
#include "NestedPdxObject.hpp"
#include "PdxType.hpp"
-#include "framework/Cluster.h"
-#include "framework/Gfsh.h"
namespace {
diff --git a/cppcache/integration/test/RegionGetAllTest.cpp b/cppcache/integration/test/RegionGetAllTest.cpp
new file mode 100644
index 0000000..b032f96
--- /dev/null
+++ b/cppcache/integration/test/RegionGetAllTest.cpp
@@ -0,0 +1,94 @@
+/*
+ * 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 <future>
+#include <iostream>
+#include <random>
+#include <thread>
+
+#include <gtest/gtest.h>
+
+#include <geode/Cache.hpp>
+#include <geode/PoolManager.hpp>
+#include <geode/RegionFactory.hpp>
+#include <geode/RegionShortcut.hpp>
+
+#include "framework/Cluster.h"
+#include "framework/Framework.h"
+#include "framework/Gfsh.h"
+
+namespace {
+
+using apache::geode::client::Cache;
+using apache::geode::client::CacheableString;
+using apache::geode::client::Pool;
+using apache::geode::client::Region;
+using apache::geode::client::RegionShortcut;
+
+using std::chrono::minutes;
+
+Cache createCache() {
+ using apache::geode::client::CacheFactory;
+
+ auto cache = CacheFactory()
+ .set("log-level", "none")
+ .set("statistic-sampling-enabled", "false")
+ .create();
+
+ return cache;
+}
+
+std::shared_ptr<Pool> createPool(Cluster& cluster, Cache& cache) {
+ auto poolFactory = cache.getPoolManager().createFactory();
+ cluster.applyLocators(poolFactory);
+ poolFactory.setPRSingleHopEnabled(true);
+ return poolFactory.create("default");
+}
+
+std::shared_ptr<Region> setupRegion(Cache& cache,
+ const std::shared_ptr<Pool>& pool) {
+ auto region = cache.createRegionFactory(RegionShortcut::PROXY)
+ .setPoolName(pool->getName())
+ .create("region");
+
+ return region;
+}
+
+TEST(RegionGetAllTest, getAllFromPartitionedRegion) {
+ Cluster cluster{LocatorCount{1}, ServerCount{2}};
+ cluster.getGfsh()
+ .create()
+ .region()
+ .withName("region")
+ .withType("PARTITION")
+ .execute();
+
+ auto cache = createCache();
+ auto pool = createPool(cluster, cache);
+ auto region = setupRegion(cache, pool);
+
+ region->put(1, "one");
+ region->put(2, "two");
+
+ auto keys = region->serverKeys();
+
+ for (int i = 0; i < 100; i++) {
+ auto all = region->getAll(keys);
+ }
+}
+
+} // namespace
diff --git a/cppcache/integration/test/RegionPutAllTest.cpp b/cppcache/integration/test/RegionPutAllTest.cpp
new file mode 100644
index 0000000..03bd31f
--- /dev/null
+++ b/cppcache/integration/test/RegionPutAllTest.cpp
@@ -0,0 +1,102 @@
+/*
+ * 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 <chrono>
+#include <future>
+#include <iostream>
+#include <random>
+#include <thread>
+
+#include <gtest/gtest.h>
+
+#include <geode/Cache.hpp>
+#include <geode/PoolManager.hpp>
+#include <geode/RegionFactory.hpp>
+#include <geode/RegionShortcut.hpp>
+
+#include "CacheRegionHelper.hpp"
+#include "framework/Cluster.h"
+#include "framework/Framework.h"
+#include "framework/Gfsh.h"
+
+namespace {
+
+using apache::geode::client::Cache;
+using apache::geode::client::Cacheable;
+using apache::geode::client::CacheableKey;
+using apache::geode::client::CacheableString;
+using apache::geode::client::HashMapOfCacheable;
+using apache::geode::client::Pool;
+using apache::geode::client::Region;
+using apache::geode::client::RegionShortcut;
+
+using std::chrono::minutes;
+
+Cache createCache() {
+ using apache::geode::client::CacheFactory;
+
+ auto cache = CacheFactory()
+ .set("log-level", "debug")
+ .set("statistic-sampling-enabled", "false")
+ .create();
+
+ return cache;
+}
+
+std::shared_ptr<Pool> createPool(Cluster& cluster, Cache& cache) {
+ auto poolFactory = cache.getPoolManager().createFactory();
+ cluster.applyLocators(poolFactory);
+ poolFactory.setPRSingleHopEnabled(true);
+ return poolFactory.create("default");
+}
+
+std::shared_ptr<Region> setupRegion(Cache& cache,
+ const std::shared_ptr<Pool>& pool) {
+ auto region = cache.createRegionFactory(RegionShortcut::PROXY)
+ .setPoolName(pool->getName())
+ .create("region");
+
+ return region;
+}
+
+TEST(RegionPutAllTest, putAllToPartitionedRegion) {
+ Cluster cluster{LocatorCount{1}, ServerCount{2}};
+ cluster.getGfsh()
+ .create()
+ .region()
+ .withName("region")
+ .withType("PARTITION")
+ .execute();
+
+ auto cache = createCache();
+ auto pool = createPool(cluster, cache);
+ auto region = setupRegion(cache, pool);
+
+ HashMapOfCacheable all;
+ for (int i = 0; i < 100; i++) {
+ region->put(CacheableKey::create(i), Cacheable::create(std::to_string(i)));
+ all.emplace(CacheableKey::create(i), Cacheable::create(std::to_string(i)));
+ }
+
+ for (int i = 0; i < 100; i++) {
+ // TODO some way force synchronous client metadata update first.
+ region->putAll(all);
+ std::this_thread::sleep_for(std::chrono::seconds(1));
+ }
+}
+
+} // namespace
diff --git a/cppcache/integration-test-2/RegionPutGetAllTest.cpp b/cppcache/integration/test/RegionPutGetAllTest.cpp
similarity index 98%
rename from cppcache/integration-test-2/RegionPutGetAllTest.cpp
rename to cppcache/integration/test/RegionPutGetAllTest.cpp
index 4b5633f..16ca0e7 100644
--- a/cppcache/integration-test-2/RegionPutGetAllTest.cpp
+++ b/cppcache/integration/test/RegionPutGetAllTest.cpp
@@ -15,6 +15,10 @@
* limitations under the License.
*/
+#include <framework/Cluster.h>
+#include <framework/Gfsh.h>
+
+#include <VariousPdxTypes.hpp>
#include <future>
#include <initializer_list>
#include <iostream>
@@ -29,10 +33,6 @@
#include <geode/RegionShortcut.hpp>
#include <geode/TypeRegistry.hpp>
-#include "VariousPdxTypes.hpp"
-#include "framework/Cluster.h"
-#include "framework/Gfsh.h"
-
namespace {
using apache::geode::client::Cache;
diff --git a/cppcache/integration-test-2/RegisterKeysTest.cpp b/cppcache/integration/test/RegisterKeysTest.cpp
similarity index 100%
rename from cppcache/integration-test-2/RegisterKeysTest.cpp
rename to cppcache/integration/test/RegisterKeysTest.cpp
diff --git a/cppcache/integration-test-2/StructTest.cpp b/cppcache/integration/test/StructTest.cpp
similarity index 97%
rename from cppcache/integration-test-2/StructTest.cpp
rename to cppcache/integration/test/StructTest.cpp
index 6f5d0d0..b65c6d7 100644
--- a/cppcache/integration-test-2/StructTest.cpp
+++ b/cppcache/integration/test/StructTest.cpp
@@ -15,6 +15,9 @@
* limitations under the License.
*/
+#include <framework/Cluster.h>
+#include <framework/Framework.h>
+#include <framework/Gfsh.h>
#include <hacks/range.h>
#include <iostream>
@@ -29,10 +32,6 @@
#include <geode/RegionShortcut.hpp>
#include <geode/Struct.hpp>
-#include "framework/Cluster.h"
-#include "framework/Framework.h"
-#include "framework/Gfsh.h"
-
namespace {
using apache::geode::client::Cache;
diff --git a/dependencies/CMakeLists.txt b/dependencies/CMakeLists.txt
index f86a418..9830e6b 100644
--- a/dependencies/CMakeLists.txt
+++ b/dependencies/CMakeLists.txt
@@ -12,6 +12,7 @@
# 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.
+
cmake_minimum_required( VERSION 3.10 )
project( dependencies LANGUAGES NONE )
@@ -26,10 +27,11 @@ set ( DEPENDENCIES
sqlite
doxygen
gtest
+ benchmark
)
-if ( "" STREQUAL "${USE_C++}" )
- set (DEPENDENCIES STLport ${DEPENDENCIES})
+if (USE_RAT)
+ list(APPEND DEPENDENCIES rat)
endif()
include(CheckCCompilerFlag)
@@ -61,8 +63,8 @@ if (WIN32)
elseif(MSVC14)
set(MSVC_VERSION 14)
endIF()
-
- set(DEPENDENCIES ${DEPENDENCIES} sqlite-netFx)
+
+ list(APPEND DEPENDENCIES sqlite-netFx)
endif()
# TODO autoconfig?
@@ -101,4 +103,3 @@ foreach(_D ${DEPENDENCIES})
endforeach(_D)
set(sqlite-netFx_SHARED_LIB ${sqlite-netFx_SHARED_LIB} PARENT_SCOPE)
-
diff --git a/dependencies/benchmark/CMakeLists.txt b/dependencies/benchmark/CMakeLists.txt
new file mode 100644
index 0000000..4bd80bb
--- /dev/null
+++ b/dependencies/benchmark/CMakeLists.txt
@@ -0,0 +1,78 @@
+# 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.
+
+project( benchmark LANGUAGES NONE )
+
+set( ${PROJECT_NAME}_VERSION 1.4.1 )
+set( ${PROJECT_NAME}_SHA265 61ae07eb5d4a0b02753419eb17a82b7d322786bb36ab62bd3df331a4d47c00a7 )
+set( ${PROJECT_NAME}_URL "https://github.com/google/benchmark/archive/v${${PROJECT_NAME}_VERSION}.zip" )
+set( ${PROJECT_NAME}_EXTERN ${PROJECT_NAME}-extern )
+set( ${PROJECT_NAME}_DEPENDS gtest_gtest )
+
+include(ExternalProject)
+
+if(CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64")
+endif()
+
+ExternalProject_Add( ${${PROJECT_NAME}_EXTERN}
+ URL ${${PROJECT_NAME}_URL}
+ URL_HASH SHA256=${${PROJECT_NAME}_SHA265}
+ UPDATE_COMMAND ""
+ CMAKE_ARGS
+ -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
+ -DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}
+ -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
+ -DCMAKE_BUILD_TYPE=$<CONFIG>
+ -DGTEST_ROOT=$<TARGET_PROPERTY:GTest::GTest,INTERFACE_INCLUDE_DIRECTORIES>/..
+ -DBENCHMARK_ENABLE_TESTING=OFF
+ DEPENDS ${${PROJECT_NAME}_DEPENDS}
+)
+
+ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} SOURCE_DIR )
+ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} INSTALL_DIR )
+
+if (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
+ set(PATCH_FILE ${CMAKE_CURRENT_SOURCE_DIR}/patches)
+ ExternalProject_Add_Step(${${PROJECT_NAME}_EXTERN} patches
+ ALWAYS 0
+ DEPENDEES download
+ DEPENDERS patch
+ DEPENDS ${PATCH_FILE}
+ BYPRODUCTS ${SOURCE_DIR}/CMakeLists.txt
+ WORKING_DIRECTORY ${SOURCE_DIR}
+ COMMAND ${PATCH} -u -N -p1 < ${PATCH_FILE}
+ )
+endif()
+
+add_library(${PROJECT_NAME} INTERFACE)
+target_include_directories(${PROJECT_NAME} SYSTEM INTERFACE
+ $<BUILD_INTERFACE:${INSTALL_DIR}/include>
+)
+target_link_libraries(${PROJECT_NAME} INTERFACE
+ ${INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}benchmark${CMAKE_STATIC_LIBRARY_SUFFIX}
+)
+if (WIN32)
+target_link_libraries(${PROJECT_NAME} INTERFACE
+ Shlwapi
+)
+elseif (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
+ target_link_libraries(${PROJECT_NAME} INTERFACE
+ kstat
+ )
+endif()
+add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXTERN})
+
+add_library(benchmark::benchmark ALIAS ${PROJECT_NAME})
diff --git a/dependencies/benchmark/patches b/dependencies/benchmark/patches
new file mode 100644
index 0000000..57907d4
--- /dev/null
+++ b/dependencies/benchmark/patches
@@ -0,0 +1,12 @@
+diff -ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt Tue Apr 3 22:12:47 2018
++++ b/CMakeLists.txt Sun May 6 00:15:34 2018
+@@ -120,6 +120,8 @@
+ set(CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL "${CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL} /LTCG")
+ set(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL} /LTCG")
+ endif()
++elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "SunPro")
++ add_cxx_compiler_flag(-std=c++11)
+ else()
+ # Try and enable C++11. Don't use C++14 because it doesn't work in some
+ # configurations.
diff --git a/dependencies/boost/CMakeLists.txt b/dependencies/boost/CMakeLists.txt
index 11db424..392998a 100644
--- a/dependencies/boost/CMakeLists.txt
+++ b/dependencies/boost/CMakeLists.txt
@@ -133,9 +133,11 @@ target_link_libraries(${PROJECT_NAME} INTERFACE
add_library(Boost::boost ALIAS boost)
add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXTERN})
+find_package(Threads REQUIRED)
+
add_boost_library(system DEPENDENCIES Boost::boost)
add_boost_library(atomic DEPENDENCIES Boost::boost)
-add_boost_library(thread DEPENDENCIES Boost::atomic Boost::boost)
+add_boost_library(thread DEPENDENCIES Threads::Threads Boost::atomic Boost::boost)
add_boost_library(filesystem DEPENDENCIES Boost::system Boost::boost)
add_boost_library(log DEPENDENCIES Boost::thread Boost::filesystem Boost::boost)
add_boost_library(log_setup DEPENDENCIES Boost::log)
diff --git a/dependencies/gtest/CMakeLists.txt b/dependencies/gtest/CMakeLists.txt
index b93c7ff..298995e 100644
--- a/dependencies/gtest/CMakeLists.txt
+++ b/dependencies/gtest/CMakeLists.txt
@@ -4,9 +4,9 @@
# 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.
@@ -27,47 +27,33 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
endif()
ExternalProject_Add( ${${PROJECT_NAME}_EXTERN}
- URL ${${PROJECT_NAME}_URL}
- URL_HASH SHA256=${${PROJECT_NAME}_SHA265}
- UPDATE_COMMAND ""
- INSTALL_COMMAND ""
- CMAKE_ARGS -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} -DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD} -Dgtest_force_shared_crt:BOOL=ON
+ URL ${${PROJECT_NAME}_URL}
+ URL_HASH SHA256=${${PROJECT_NAME}_SHA265}
+ CMAKE_ARGS
+ -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
+ -DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}
+ -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
+ -DCMAKE_BUILD_TYPE=$<CONFIG>
+ -Dgtest_force_shared_crt:BOOL=ON
)
-ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} SOURCE_DIR )
-set( ${PROJECT_NAME}_gtest_SOURCE_DIR ${SOURCE_DIR}/googletest )
-set( ${PROJECT_NAME}_gmock_SOURCE_DIR ${SOURCE_DIR}/googlemock )
ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} INSTALL_DIR )
-set( ${PROJECT_NAME}_INSTALL_DIR ${INSTALL_DIR} )
-ExternalProject_Get_Property( ${${PROJECT_NAME}_EXTERN} BINARY_DIR )
-set( ${PROJECT_NAME}_gtest_BINARY_DIR ${BINARY_DIR}/googlemock/gtest/${_DEBUG_OR_RELEASE} )
-set( ${PROJECT_NAME}_gmock_BINARY_DIR ${BINARY_DIR}/googlemock/${_DEBUG_OR_RELEASE} )
-set( DEPENDENCIES_${PROJECT_NAME}_DIR ${${PROJECT_NAME}_BINARY_DIR} PARENT_SCOPE)
-
-set( ${PROJECT_NAME}_STATIC_LIB
-${${PROJECT_NAME}_gtest_BINARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX}
-${${PROJECT_NAME}_gtest_BINARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest_main${CMAKE_STATIC_LIBRARY_SUFFIX}
-${${PROJECT_NAME}_gmock_BINARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}gmock${CMAKE_STATIC_LIBRARY_SUFFIX}
-${${PROJECT_NAME}_gmock_BINARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}gmock_main${CMAKE_STATIC_LIBRARY_SUFFIX}
-PARENT_SCOPE)
add_library(${PROJECT_NAME}_gtest INTERFACE)
target_include_directories(${PROJECT_NAME}_gtest SYSTEM INTERFACE
- $<BUILD_INTERFACE:${${PROJECT_NAME}_gtest_SOURCE_DIR}/include>
- $<BUILD_INTERFACE:${${PROJECT_NAME}_gmock_SOURCE_DIR}/include>
+ $<BUILD_INTERFACE:${INSTALL_DIR}/include>
)
target_link_libraries(${PROJECT_NAME}_gtest INTERFACE
- ${${PROJECT_NAME}_gtest_BINARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX}
+ ${INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX}
)
add_dependencies(${PROJECT_NAME}_gtest ${${PROJECT_NAME}_EXTERN})
add_library(${PROJECT_NAME}_gtest_main INTERFACE)
target_include_directories(${PROJECT_NAME}_gtest_main SYSTEM INTERFACE
- $<BUILD_INTERFACE:${${PROJECT_NAME}_gtest_SOURCE_DIR}/include>
- $<BUILD_INTERFACE:${${PROJECT_NAME}_gmock_SOURCE_DIR}/include>
+ $<BUILD_INTERFACE:${INSTALL_DIR}/include>
)
target_link_libraries(${PROJECT_NAME}_gtest_main INTERFACE
- ${${PROJECT_NAME}_gtest_BINARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest_main${CMAKE_STATIC_LIBRARY_SUFFIX}
+ ${INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}gtest_main${CMAKE_STATIC_LIBRARY_SUFFIX}
)
add_dependencies(${PROJECT_NAME}_gtest_main ${${PROJECT_NAME}_EXTERN})
diff --git a/packer/windows/add-user-build.ps1 b/dependencies/rat/CMakeLists.txt
similarity index 51%
copy from packer/windows/add-user-build.ps1
copy to dependencies/rat/CMakeLists.txt
index 042d0e6..bfb8771 100644
--- a/packer/windows/add-user-build.ps1
+++ b/dependencies/rat/CMakeLists.txt
@@ -12,17 +12,21 @@
# 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.
-$user = "build"
-$pass = "p1votal!"
-net.exe user $user $pass /add
-net.exe localgroup Administrators $user /add
-wmic.exe UserAccount where "Name='$user'" set PasswordExpires=False
+project( rat LANGUAGES NONE )
+# used to check licenses in source
-$spw = ConvertTo-SecureString $pass -AsPlainText -Force
-$cred = New-Object System.Management.Automation.PSCredential -ArgumentList $user,$spw
-Start-Process cmd /c -WindowStyle Hidden -Credential $cred -ErrorAction SilentlyContinue
+set( ARTIFACT_VERSION 0.12 )
+set( ARTIFACT_SHA265 cedf78f6d213226464784ecb999b54515c97eab8a2f9b82514292f837cf88b93 )
+set( ARTIFACT_NAME apache-rat-${ARTIFACT_VERSION} )
+set( ARTIFACT_FILE apache-rat-${ARTIFACT_VERSION}-bin.tar.gz )
+set( ARTIFACT_URL "https://www.apache.org/dyn/closer.cgi?action=download&filename=creadur/${ARTIFACT_NAME}/${ARTIFACT_FILE}" )
-schtasks.exe /Create /TN init-user-build /RU SYSTEM /SC ONSTART /TR "powershell.exe -File 'C:\Users\build\init-user-build.ps1'"
+file( DOWNLOAD ${ARTIFACT_URL} ${CMAKE_CURRENT_BINARY_DIR}/${ARTIFACT_FILE} )
+execute_process(
+ COMMAND ${CMAKE_COMMAND} -E tar xzf ${ARTIFACT_FILE}
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+)
+set( Rat_JAR ${CMAKE_CURRENT_BINARY_DIR}/${ARTIFACT_NAME}/${ARTIFACT_NAME}.jar CACHE STRING "Full path to Apaceh Rat jar." )
diff --git a/docs/docker/Dockerfile b/docs/docker/Dockerfile
index 82b3aed..ad5d674 100644
--- a/docs/docker/Dockerfile
+++ b/docs/docker/Dockerfile
@@ -1,3 +1,19 @@
+# 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.
+
FROM ubuntu:latest
RUN apt-get update
diff --git a/packer/solaris/changepasswd b/packer/solaris/changepasswd
index 2cfe960..caae9c0 100755
--- a/packer/solaris/changepasswd
+++ b/packer/solaris/changepasswd
@@ -1,4 +1,18 @@
#!/usr/bin/env expect -f
+# 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.
set force_conservative 0 ;# set to 1 to force conservative mode even if
;# script wasn't run conservatively originally
diff --git a/packer/windows/Packer.psm1 b/packer/windows/Packer.psm1
index 062e23f..6ca5962 100644
--- a/packer/windows/Packer.psm1
+++ b/packer/windows/Packer.psm1
@@ -12,6 +12,7 @@
# 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.
+
Set-PSDebug -Trace 0
function Install-Package {
diff --git a/packer/windows/add-user-build.ps1 b/packer/windows/add-user-build.ps1
index 042d0e6..31606d6 100644
--- a/packer/windows/add-user-build.ps1
+++ b/packer/windows/add-user-build.ps1
@@ -12,6 +12,7 @@
# 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.
+
$user = "build"
$pass = "p1votal!"
diff --git a/packer/windows/cleanup.ps1 b/packer/windows/cleanup.ps1
index 979a36e..0b66f97 100644
--- a/packer/windows/cleanup.ps1
+++ b/packer/windows/cleanup.ps1
@@ -12,6 +12,7 @@
# 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.
+
# Remove admin ssh keys
Remove-Item C:\Users\Administrator\.ssh -Recurse -Force -ErrorAction SilentlyContinue
diff --git a/packer/windows/install-chocolatey.ps1 b/packer/windows/install-chocolatey.ps1
index 9fa384d..60bdd85 100644
--- a/packer/windows/install-chocolatey.ps1
+++ b/packer/windows/install-chocolatey.ps1
@@ -12,6 +12,7 @@
# 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.
+
$ErrorActionPreference = "Stop"
write-host "Installing Chocolatey"
diff --git a/packer/windows/install-gemfire.ps1 b/packer/windows/install-gemfire.ps1
index 1a4ed54..d228157 100644
--- a/packer/windows/install-gemfire.ps1
+++ b/packer/windows/install-gemfire.ps1
@@ -12,6 +12,7 @@
# 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.
+
$ErrorActionPreference = "Stop"
Import-Module Packer -Force
diff --git a/packer/windows/install-windows-8.1-2012-r2-wmf-5.ps1 b/packer/windows/install-windows-8.1-2012-r2-wmf-5.ps1
index 8cce796..4953afb 100644
--- a/packer/windows/install-windows-8.1-2012-r2-wmf-5.ps1
+++ b/packer/windows/install-windows-8.1-2012-r2-wmf-5.ps1
@@ -12,6 +12,7 @@
# 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.
+
$ErrorActionPreference = "Stop"
Import-Module Packer
diff --git a/packer/windows/setup-ec2config.ps1 b/packer/windows/setup-ec2config.ps1
index 028b31c..04124b1 100644
--- a/packer/windows/setup-ec2config.ps1
+++ b/packer/windows/setup-ec2config.ps1
@@ -12,6 +12,7 @@
# 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.
+
# Enable the system password to be retrieved from the AWS Console after this AMI is built and used to launch code
$ec2config = [xml] (get-content 'C:\Program Files\Amazon\Ec2ConfigService\Settings\config.xml')
($ec2config.ec2configurationsettings.plugins.plugin | where {$_.name -eq "Ec2SetPassword"}).state = "Enabled"
diff --git a/packer/windows/uninstall-doxygen.ps1 b/packer/windows/uninstall-doxygen.ps1
index 467d5f1..5175f1d 100644
--- a/packer/windows/uninstall-doxygen.ps1
+++ b/packer/windows/uninstall-doxygen.ps1
@@ -12,6 +12,7 @@
# 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.
+
# Enable the system password to be retrieved from the AWS Console after this AMI is built and used to launch code
$package = 'doxygen.install'
@@ -20,4 +21,3 @@ $uninstallRegKey = 'HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\dox
Import-Module C:\ProgramData\chocolatey\helpers\chocolateyInstaller.psm1
$uninstallPath = (Get-ItemProperty $uninstallRegKey UninstallString).UninstallString
Uninstall-ChocolateyPackage $package 'exe' '/VERYSILENT' $uninstallPath
-