Skip to content

Commit

Permalink
Major performance changes
Browse files Browse the repository at this point in the history
Defaulted to EPOLL Edge trigger mode
Handled lock issues in the embedded event poll handler
Separate write pool for handling socket writes
Fixed the auto generate script for new applications
Resolved issues in the techempower benchmark scripts
  • Loading branch information
sumeetchhetri committed Jun 24, 2017
1 parent 73c6148 commit 028ca39
Show file tree
Hide file tree
Showing 102 changed files with 1,979 additions and 2,939 deletions.
5 changes: 4 additions & 1 deletion Makefile.am
Expand Up @@ -212,14 +212,17 @@ install-data-hook:
#cp -f web/oauthApp/src/autotools/.libs/*oauthApp* ${prefix}/lib
#cp -f web/markers/src/autotools/.libs/*marker* ${prefix}/lib
-rm -f ${prefix}/lib/*.la ${prefix}/lib/*.lai
sed -i "s/TO_REPLACE_DEBUG/$(subst /,\/,@BUILD_DEBUG@)/" $(prefix)/resources/rundyn-configure.sh
sed -i "s/TO_REPLACE_CPPFLAGS/$(subst /,\/,@BUILD_CPPFLAGS@)/" $(prefix)/resources/rundyn-configure.sh
sed -i "s/TO_REPLACE_LDFLAGS/$(subst /,\/,@BUILD_LDFLAGS@)/" $(prefix)/resources/rundyn-configure.sh
sed -i "s/TO_REPLACE_AM_CXXFLAGS/$(subst /,\/,@BUILD_AM_CXXFLAGS@)/" $(prefix)/resources/rundyn-configure.sh
#-rm -rf $(prefix)/web/default/src/ $(prefix)/web/flexApp/src/ $(prefix)/web/oauthApp/src/ $(prefix)/web/markers/src/

build-apps: install
cd tests/autotools && make
cp -f tests/autotools/.libs/tests tests/test.csv \
tests/testValues.prop tests/runTests.sh \
tests/*.pem tests/security.prop ${prefix}/tests
${buildapachemod}
for webdir in web/*/ ; do \
dir=$${webdir%*/}; \
wdir=`echo $${dir##*/}`; \
Expand Down
11 changes: 11 additions & 0 deletions configure.ac
Expand Up @@ -833,6 +833,12 @@ AC_CHECK_HEADER([sys/poll.h],
AC_CHECK_HEADER([sys/select.h],
[AC_DEFINE(USE_SELECT, [1], [Define to 1 if you have <sys/select.h>.])],
[AC_DEFINE(USE_SELECT, [0], [select support not found])])
AC_CHECK_HEADER([atomic.h],
[AC_DEFINE(USE_ATOMIC_H, [1], [Define to 1 if you have <atomic.h>.])],
[AC_DEFINE(USE_ATOMIC_H, [0], [atomic support not found])])
AC_CHECK_HEADER([cstdatomic.h],
[AC_DEFINE(USE_CSTDATOMIC_H, [1], [Define to 1 if you have <cstdatomic.h>.])],
[AC_DEFINE(USE_CSTDATOMIC_H, [0], [cstdatomic support not found])])

AC_CHECK_HEADER([openssl/ssl.h],,[AC_MSG_ERROR([ssl header not found])])

Expand Down Expand Up @@ -925,6 +931,11 @@ else
AC_SUBST(GENERATE_NGINXMOD,[ ])
fi

AC_SUBST(BUILD_CPPFLAGS,[$CPPFLAGS])
AC_SUBST(BUILD_AM_CXXFLAGS,[$AM_CXXFLAGS])
AC_SUBST(BUILD_LDFLAGS,[$LDFLAGS])
AC_SUBST(BUILD_DEBUG,[$support_debug])

AC_CONFIG_FILES([Makefile
src/autotools/Makefile
tests/autotools/Makefile
Expand Down
17 changes: 16 additions & 1 deletion configure.ac.old
Expand Up @@ -833,6 +833,12 @@ AC_CHECK_HEADER([sys/poll.h],
AC_CHECK_HEADER([sys/select.h],
[AC_DEFINE(USE_SELECT, [1], [Define to 1 if you have <sys/select.h>.])],
[AC_DEFINE(USE_SELECT, [0], [select support not found])])
AC_CHECK_HEADER([atomic.h],
[AC_DEFINE(USE_ATOMIC_H, [1], [Define to 1 if you have <atomic.h>.])],
[AC_DEFINE(USE_ATOMIC_H, [0], [atomic support not found])])
AC_CHECK_HEADER([cstdatomic.h],
[AC_DEFINE(USE_CSTDATOMIC_H, [1], [Define to 1 if you have <cstdatomic.h>.])],
[AC_DEFINE(USE_CSTDATOMIC_H, [0], [cstdatomic support not found])])

AC_CHECK_HEADER([openssl/ssl.h],,[AC_MSG_ERROR([ssl header not found])])

Expand Down Expand Up @@ -925,11 +931,20 @@ else
AC_SUBST(GENERATE_NGINXMOD,[ ])
fi

AC_SUBST(BUILD_CPPFLAGS,[$CPPFLAGS])
AC_SUBST(BUILD_AM_CXXFLAGS,[$AM_CXXFLAGS])
AC_SUBST(BUILD_LDFLAGS,[$LDFLAGS])
AC_SUBST(BUILD_DEBUG,[$support_debug])

AC_CONFIG_FILES([Makefile
src/autotools/Makefile
tests/autotools/Makefile
modules/apache_mod_ffeadcpp/autotools/Makefile
web/hello_world/src/autotools/Makefile])
web/default/src/autotools/Makefile
web/flexApp/src/autotools/Makefile
web/oauthApp/src/autotools/Makefile
web/markers/src/autotools/Makefile
web/te-benchmark/src/autotools/Makefile])
AC_OUTPUT

echo "Host: $host"
Expand Down
11 changes: 11 additions & 0 deletions resources/ffead-gen/configure.ac.orig
Expand Up @@ -833,6 +833,12 @@ AC_CHECK_HEADER([sys/poll.h],
AC_CHECK_HEADER([sys/select.h],
[AC_DEFINE(USE_SELECT, [1], [Define to 1 if you have <sys/select.h>.])],
[AC_DEFINE(USE_SELECT, [0], [select support not found])])
AC_CHECK_HEADER([atomic.h],
[AC_DEFINE(USE_ATOMIC_H, [1], [Define to 1 if you have <atomic.h>.])],
[AC_DEFINE(USE_ATOMIC_H, [0], [atomic support not found])])
AC_CHECK_HEADER([cstdatomic.h],
[AC_DEFINE(USE_CSTDATOMIC_H, [1], [Define to 1 if you have <cstdatomic.h>.])],
[AC_DEFINE(USE_CSTDATOMIC_H, [0], [cstdatomic support not found])])

AC_CHECK_HEADER([openssl/ssl.h],,[AC_MSG_ERROR([ssl header not found])])

Expand Down Expand Up @@ -925,6 +931,11 @@ else
AC_SUBST(GENERATE_NGINXMOD,[ ])
fi

AC_SUBST(BUILD_CPPFLAGS,[$CPPFLAGS])
AC_SUBST(BUILD_AM_CXXFLAGS,[$AM_CXXFLAGS])
AC_SUBST(BUILD_LDFLAGS,[$LDFLAGS])
AC_SUBST(BUILD_DEBUG,[$support_debug])

AC_CONFIG_FILES([Makefile
src/autotools/Makefile
tests/autotools/Makefile
Expand Down
25 changes: 18 additions & 7 deletions resources/rundyn-configure.sh
Expand Up @@ -3,14 +3,25 @@
FFEAD_CPPPTH=$1
export FFEAD_CPP_PATH=${FFEAD_CPPPTH}

if [ "$#" -gt 1 -a -n "$2" ]
then
DEBG=$2
elif [ "$#" -gt 0 -a -n "$1" ]
then
DEBG=
DEBG="TO_REPLACE_DEBUG"
PCFL="TO_REPLACE_CPPFLAGS"
PLDFL="TO_REPLACE_LDFLAGS"
PACFL="TO_REPLACE_AM_CXXFLAGS"

if [ "$DEBG" == "yes" ]; then
DEBG="--enable-debug=yes"
else
DEBG=""
fi

#if [ "$#" -gt 1 -a -n "$2" ]
#then
# DEBG=$2
#elif [ "$#" -gt 0 -a -n "$1" ]
#then
# DEBG=
#fi

export LD_LIBRARY_PATH=$FFEAD_CPP_PATH/lib:$LD_LIBRARY_PATH
#echo $LD_LIBRARY_PATH
export PATH=$FFEAD_CPP_PATH/lib:$PATH
Expand All @@ -29,4 +40,4 @@ cd $FFEAD_CPP_PATH/rtdcf/autotools
# echo $PATH
#fi

./configure $DEBG
./configure $DEBG CPPFLAGS="$CPPFLAGS $PCFL $PACFL" LDFLAGS="$LDFLAGS $PLDFL"
7 changes: 5 additions & 2 deletions resources/server.prop
Expand Up @@ -25,8 +25,11 @@ NUM_PROC=1
#The type of Threading strategy
THRD_PREQ=false

#The Thread Pool size for Pooled implementations
THRD_PSIZ=10
#The Thread Pool size for Service pool
THRD_PSIZ=6

#The Thread Pool size for Writer pool
W_THRD_PSIZ=2

#Where to store the session state Browser cookies/Server side file
SESS_STATE=server
Expand Down
163 changes: 38 additions & 125 deletions src/framework/ConfigurationData.cpp
Expand Up @@ -48,6 +48,32 @@ bool ConfigurationData::isServingContext(const std::string& cntxtName) {
&& getInstance()->servingContexts[cntxtName];
}

void ConfigurationData::clearAllSingletonBeans() {
getInstance()->ffeadContext.clearAllSingletonBeans(getInstance()->servingContexts);
}
void ConfigurationData::setCoreServerProperties(CoreServerProperties coreServerProperties) {
getInstance()->coreServerProperties = coreServerProperties;
}

void ConfigurationData::initializeAllSingletonBeans() {
getInstance()->dlib = dlopen(INTER_LIB_FILE, RTLD_NOW);
if(getInstance()->dlib==NULL)
{
std::cout << dlerror() << std::endl;
std::cout << "Could not load Library" << std::endl;
exit(0);
}

getInstance()->ddlib = dlopen(DINTER_LIB_FILE, RTLD_NOW);
if(getInstance()->ddlib==NULL)
{
std::cout << dlerror() << std::endl;
std::cout << "Could not load dynamic Library" << std::endl;
exit(0);
}
getInstance()->ffeadContext.initializeAllSingletonBeans(getInstance()->servingContexts);
}

void ConfigurationData::clearInstance() {
if(instance!=NULL) {
delete instance;
Expand All @@ -65,7 +91,6 @@ Security::Security()

Security::~Security()
{

}

bool Security::isLoginConfigured()
Expand All @@ -82,12 +107,7 @@ bool Security::isLoginUrl(const std::string& url, const std::string& actUrl)
}
bool Security::isLoginPage(const std::string& cntxtName, const std::string& actUrl)
{
std::string fpath = "/"+cntxtName+"/"+loginUrl;
RegexUtil::replace(fpath,"[/]+","/");
std::string lpath = "/"+loginUrl;
RegexUtil::replace(lpath,"[/]+","/");
logger << actUrl << " " << lpath << " " << fpath << std::endl;
return actUrl==fpath || actUrl==lpath;
return actUrl==loginUrl;
}

bool Security::addAspect(const SecureAspect& aspect)
Expand Down Expand Up @@ -156,104 +176,8 @@ SecureAspect Security::matchesPath(const std::string& cntxtName, std::string url
for (it=secures.begin();it!=secures.end();++it) {
SecureAspect secureAspect = it->second;
std::string pathurl = secureAspect.path;
StringUtil::trim(pathurl);
RegexUtil::replace(pathurl,"[/]+","/");
logger << ("Checking security path " + pathurl + " against url " + url) << std::endl;
if(StringUtil::startsWith(url, "/"+cntxtName) && StringUtil::startsWith(pathurl, "regex(") && StringUtil::endsWith(pathurl, ")"))
{
std::string regurl = pathurl.substr(6, pathurl.length()-1);
std::string cntpre = "/"+cntxtName;
std::string nurl = url.substr(cntpre.length());
if(RegexUtil::find(nurl, regurl)!=-1)
{
aspect = secureAspect;
}
continue;
}
else if(StringUtil::startsWith(pathurl, "regex(") && StringUtil::endsWith(pathurl, ")"))
{
std::string regurl = pathurl.substr(6, pathurl.length()-1);
if(RegexUtil::find(url, regurl)!=-1)
{
aspect = secureAspect;
}
continue;
}
else if(pathurl=="*")
{
aspect = secureAspect;
continue;
}
else if(pathurl=="*.*" && url.find(".")!=-1)
{
aspect = secureAspect;
continue;
}

bool urlextmtch = true;
if(pathurl.find("*.")!=std::string::npos)
{
urlextmtch = false;
std::string pathext, urlext;
size_t indx = pathurl.find("*.");
pathext = pathurl.substr(indx+1);

if(url.find(".")==std::string::npos)
continue;

if(indx==0)
{
urlext = url.substr(url.find("."));
if(pathext==urlext)
{
aspect = secureAspect;
}
continue;
}
else
{
pathurl = pathurl.substr(0, pathurl.find("*.")+1);
urlext = url.substr(url.find("."));
url = url.substr(0, url.find("."));
urlextmtch = pathext==urlext;
}
}
else if(StringUtil::endsWith(pathurl, ".*"))
{
if(url.find(".")==std::string::npos)
continue;

pathurl = pathurl.substr(0, pathurl.length()-2);
url = url.substr(0, url.find("."));
}

bool endval = false, startval = false;
if(pathurl.at(pathurl.length()-1)=='*')
{
pathurl = pathurl.substr(0, pathurl.length()-1);
startval = true;
}
if(pathurl.at(0)=='*')
{
pathurl = pathurl.substr(1);
endval = true;
}
std::string fpath = "/"+cntxtName+"/"+pathurl;
RegexUtil::replace(fpath,"[/]+","/");
if(urlextmtch && startval && endval && ((cntxtName=="default" && url.find(pathurl)!=std::string::npos) || url.find(fpath)!=std::string::npos))
{
aspect = secureAspect;
}
else if(urlextmtch && startval && ((cntxtName=="default" && url.find(pathurl)==0) || url.find(fpath)==0))
{
aspect = secureAspect;
}
else if(urlextmtch && endval && ((cntxtName=="default" && StringUtil::endsWith(url, pathurl)) || StringUtil::endsWith(url, fpath)))
{
aspect = secureAspect;
}
else if(urlextmtch && !startval && !endval && ((cntxtName=="default" && pathurl==url) || fpath==url))
{
//logger << ("Checking security path " + pathurl + " against url " + url) << std::endl;
if(ConfigurationData::urlMatchesPath(cntxtName, pathurl, url)) {
aspect = secureAspect;
}
}
Expand All @@ -262,25 +186,14 @@ SecureAspect Security::matchesPath(const std::string& cntxtName, std::string url

bool ConfigurationData::urlMatchesPath(const std::string& cntxtName, std::string pathurl, std::string url)
{
StringUtil::trim(pathurl);
RegexUtil::replace(pathurl,"[/]+","/");
std::string fpath = "/"+cntxtName+"/"+pathurl;
RegexUtil::replace(fpath,"[/]+","/");

getInstance()->logger << ("Checking path " + pathurl + " against url " + url) << std::endl;
if(StringUtil::startsWith(url, cntxtName) && StringUtil::startsWith(pathurl, "regex(") && StringUtil::endsWith(pathurl, ")"))
//getInstance()->logger << ("Checking path " + pathurl + " against url " + url) << std::endl;
if(pathurl==url)
{
std::string regurl = pathurl.substr(6, pathurl.length()-1);
std::string nurl = url.substr(cntxtName.length());
if(RegexUtil::find(nurl, regurl)!=-1)
{
return true;
}
return false;
return true;
}
else if(StringUtil::startsWith(pathurl, "regex(") && StringUtil::endsWith(pathurl, ")"))
{
std::string regurl = pathurl.substr(6, pathurl.length()-1);
std::string regurl = pathurl.substr(6, pathurl.length()-7);
if(RegexUtil::find(url, regurl)!=-1)
{
return true;
Expand All @@ -291,7 +204,7 @@ bool ConfigurationData::urlMatchesPath(const std::string& cntxtName, std::string
{
return true;
}
else if(pathurl=="*.*" && url.find(".")!=-1)
else if(pathurl=="*.*" && url.find(".")!=std::string::npos)
{
return true;
}
Expand Down Expand Up @@ -348,19 +261,19 @@ bool ConfigurationData::urlMatchesPath(const std::string& cntxtName, std::string
endval = true;
}

if(urlextmtch && startval && endval && ((cntxtName=="default" && url.find(pathurl)!=std::string::npos) || url.find(fpath)!=std::string::npos))
if(urlextmtch && startval && endval && url.find(pathurl)!=std::string::npos)
{
return true;
}
else if(urlextmtch && startval && ((cntxtName=="default" && url.find(pathurl)==0) || url.find(fpath)==0))
else if(urlextmtch && startval && url.find(pathurl)==0)
{
return true;
}
else if(urlextmtch && endval && ((cntxtName=="default" && StringUtil::endsWith(url, pathurl)) || StringUtil::endsWith(url, fpath)))
else if(urlextmtch && endval && StringUtil::endsWith(url, pathurl))
{
return true;
}
else if(urlextmtch && !startval && !endval && ((cntxtName=="default" && pathurl==url) || fpath==url))
else if(urlextmtch && !startval && !endval && pathurl==url)
{
return true;
}
Expand Down

0 comments on commit 028ca39

Please sign in to comment.