Commit 37cd5f21 authored by Nadezhda Ivanova's avatar Nadezhda Ivanova Committed by Ondřej Kuzník
Browse files

Enable compilation of the load balancer as a module

To compile the balancer as a slapd module, pass --enable-balancer=mod to ./configure
Use --enable-balancer(=yes) to compile as standalone server.
parent 8bc7650a
......@@ -414,7 +414,8 @@ dnl ----------------------------------------------------------------
dnl BALANCER OPTIONS
AC_ARG_ENABLE(balanceroptions,[
LLOADD (Load Balancer Daemon) Options:])
OL_ARG_ENABLE(balancer,[ --enable-balancer enable building load balancer], auto)dnl
OL_ARG_ENABLE(balancer, [AS_HELP_STRING([--enable-balancer], [enable load balancer])],
no, [no yes mod])
dnl ----------------------------------------------------------------
AC_ARG_ENABLE(xxliboptions,[
......@@ -445,13 +446,18 @@ if test $ol_enable_slapd = no ; then
eval "ol_enable_$i=no"
fi
done
if test $ol_enable_balancer = mod ; then
AC_MSG_WARN([slapd disabled, ignoring --enable-balancer=mod argument])
ol_enable_balancer=no
fi
else
dnl If slapd enabled and loadable module support disabled
dnl then require at least one built-in backend
if test $ol_enable_modules = no; then
for i in backends overlays $Backends $Overlays; do
for i in backends overlays balancer $Backends $Overlays; do
eval "ol_tmp=\$ol_enable_$i"
if test -n "$ol_tmp" && test "$ol_tmp" = mod ; then
AC_MSG_ERROR([--enable-$i=mod requires --enable-modules])
......@@ -487,7 +493,7 @@ if test $ol_enable_modules = yes ; then
ol_enable_dynamic=yes
fi
if test $ol_enable_balancer = yes ; then
if test $ol_enable_balancer != no ; then
dnl Load Balancer was specifically enabled
if test $ol_with_threads = no ; then
AC_MSG_ERROR([Load balancer requires threads])
......@@ -524,6 +530,7 @@ CLIENT_LIBS=
SLAPD_LIBS=
BALANCER_LIBS=
BALANCER_INCLUDE=
BUILD_SLAPD=no
BUILD_BALANCER=no
......@@ -2967,7 +2974,13 @@ fi
if test "$ol_enable_balancer" != no \
-a "$ol_with_threads" != no \
-a "$have_libevent" = yes ; then
BUILD_BALANCER=yes
if test "$ol_enable_balancer" = mod; then
BALANCER_INCLUDE=Makefile.module
BUILD_BALANCER=mod
else
BALANCER_INCLUDE=Makefile.server
BUILD_BALANCER=yes
fi
fi
if test "$ol_enable_slapi" != no ; then
......@@ -3088,6 +3101,8 @@ AC_SUBST(SLAPD_SQL_INCLUDES)
AC_SUBST(WT_INCS)
AC_SUBST(WT_LIBS)
AC_SUBST(BALANCER_INCLUDE)
dnl ----------------------------------------------------------------
dnl final help output
AC_ARG_WITH(xxinstall,[
......@@ -3134,7 +3149,9 @@ AC_CONFIG_FILES([Makefile:build/top.mk:Makefile.in:build/dir.mk]
[servers/slapd/shell-backends/Makefile:build/top.mk:servers/slapd/shell-backends/Makefile.in:build/srv.mk]
[servers/slapd/slapi/Makefile:build/top.mk:servers/slapd/slapi/Makefile.in:build/lib.mk:build/lib-shared.mk]
[servers/slapd/overlays/Makefile:build/top.mk:servers/slapd/overlays/Makefile.in:build/lib.mk]
[servers/lloadd/Makefile:build/top.mk:servers/lloadd/Makefile.in:build/srv.mk]
[servers/lloadd/Makefile:build/top.mk:servers/lloadd/Makefile.in]
[servers/lloadd/Makefile.server:servers/lloadd/Makefile_server.in:build/srv.mk]
[servers/lloadd/Makefile.module:servers/lloadd/Makefile_module.in:build/mod.mk]
[tests/Makefile:build/top.mk:tests/Makefile.in:build/dir.mk]
[tests/run]
[tests/progs/Makefile:build/top.mk:tests/progs/Makefile.in:build/rules.mk])
......
......@@ -215,6 +215,41 @@ This allows one to specifically query the SLP DAs for LDAP servers holding the
.I production
tree in case multiple trees are available.
.RE
.SH RELATION TO SLAPD(8)
.B Lloadd
can be compiled as a
.B slapd
loadable module. In that case, it can be loaded as such:
.LP
.nf
.ft tt
moduleload path/to/lloadd.la lloadd.conf "listening URLs"
.ft
.fi
This enables
.B lloadd
to provide additional features through the host slapd process like access to
run-time statistics in
.B cn=monitor
and dynamic configuration from
.BR cn=config .
The listening sockets specified will be under direct control of
.B lloadd
and need to be different from the sockets slapd is configured to listen on.
Clients connecting to these are completely separate from regular LDAP clients
connecting to the usual
.B slapd
sockets -
.B lloadd
clients have no access to slapd databases, similarly,
.B slapd
client traffic does not propagate to the
.B lloadd
backend servers in any way.
.SH EXAMPLES
To start
.I lloadd
......@@ -237,9 +272,22 @@ on voluminous debugging which will be printed on standard error, type:
LIBEXECDIR/lloadd \-f /var/tmp/lloadd.conf \-d 255
.ft
.fi
.LP
To start
.B lloadd
as a module inside a slapd process listening on ldap://:1389 and ldaps://,
put the following in your slapd.conf (or its equivalent in cn=config):
.LP
.nf
.ft tt
moduleload lloadd.la /var/tmp/lloadd.conf "ldap://:1389 ldaps://"
.ft
.fi
.SH "SEE ALSO"
.BR ldap (3),
.BR lloadd.conf (5),
.BR slapd-config (5),
.BR slapd-monitor (5),
.BR slapd (8).
.LP
"OpenLDAP Administrator's Guide" (http://www.OpenLDAP.org/doc/admin/)
......
......@@ -13,28 +13,21 @@
## top-level directory of the distribution or, alternatively, at
## <http://www.OpenLDAP.org/license.html>.
PROGRAMS = lloadd
XPROGRAMS = slloadd
XSRCS = version.c
NT_SRCS = nt_svc.c
NT_OBJS = nt_svc.o ../../libraries/liblutil/slapdmsg.res
SRCS = main.c globals.c backend.c bind.c config.c connection.c client.c \
daemon.c ch_malloc.c init.c operation.c user.c sl_malloc.c \
upstream.c value.c libevent_support.c extended.c \
SRCS = backend.c bind.c config.c connection.c client.c \
daemon.c extended.c operation.c \
upstream.c libevent_support.c \
$(@PLAT@_SRCS)
OBJS = $(patsubst %.c,%.o,$(SRCS)) $(@PLAT@_OBJS)
LDAP_INCDIR= ../../include -I$(srcdir)
LDAP_INCDIR= ../../include -I$(srcdir) -I$(srcdir)/../slapd
LDAP_LIBDIR= ../../libraries
BUILD_OPT = "--enable-balancer"
BUILD_SRV = @BUILD_BALANCER@
all-local-srv: $(PROGRAMS)
# $(LTHREAD_LIBS) must be last!
XLIBS = $(LLOADD_L)
......@@ -50,25 +43,6 @@ UNIX_OBJECTS = $(OBJS) version.o
LLOADD_DEPENDS = $(@PLAT@_DEPENDS)
LLOADD_OBJECTS = $(@PLAT@_OBJECTS)
lloadd: $(LLOADD_DEPENDS) version.o
$(LTLINK) -o $@ $(OBJS) version.o $(LIBS)
slloadd: version.o
$(LTLINK) -static -o $@ $(OBJS) version.o $(LIBS)
version.c: Makefile
@-$(RM) $@
$(MKVERSION) -s -n Versionstr lloadd > $@
version.o: version.c $(OBJS) $(LLOADD_L)
include @BALANCER_INCLUDE@
install-local-srv: FORCE
-$(MKDIR) $(DESTDIR)$(libexecdir)
@-$(INSTALL) -m 700 -d $(DESTDIR)$(localstatedir)/openldap-lloadd
@( \
for prg in $(PROGRAMS); do \
$(LTINSTALL) $(INSTALLFLAGS) $(STRIP) -m 755 $$prg$(EXEEXT) \
$(DESTDIR)$(libexecdir); \
done \
)
# Makefile.in for Load Balancer
# $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
## Copyright 1998-2020 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
## modification, are permitted only as authorized by the OpenLDAP
## Public License.
##
## A copy of this license is available in the file LICENSE in the
## top-level directory of the distribution or, alternatively, at
## <http://www.OpenLDAP.org/license.html>.
XSRCS = version.c
NT_SRCS = nt_svc.c
NT_OBJS = nt_svc.o ../../libraries/liblutil/slapdmsg.res
SRCS += module_init.c
OBJS = $(patsubst %.c,%.lo,$(SRCS)) $(@PLAT@_OBJS)
BUILD_OPT = "--enable-balancer=mod"
BUILD_MOD = @BUILD_BALANCER@
LIBBASE=lloadd
# $(LTHREAD_LIBS) must be last!
XLIBS = $(LLOADD_L)
XXLIBS = $(LLOADD_LIBS) $(SECURITY_LIBS) $(LUTIL_LIBS)
XXXLIBS = $(LTHREAD_LIBS)
NT_DEPENDS = slapd.exp
NT_OBJECTS = slapd.exp symdummy.o $(LLOADD_OBJS) version.o
UNIX_DEPENDS = version.o $(LLOADD_L)
UNIX_OBJECTS = $(OBJS) version.o
LLOADD_DEPENDS = $(@PLAT@_DEPENDS)
LLOADD_OBJECTS = $(@PLAT@_OBJECTS)
LINK_LIBS=$(LLOADD_LIBS)
MOD_DEFS = -DSLAPD_IMPORT -DBALANCER_MODULE
# Makefile.in for Load Balancer
# $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
## Copyright 1998-2020 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
## modification, are permitted only as authorized by the OpenLDAP
## Public License.
##
## A copy of this license is available in the file LICENSE in the
## top-level directory of the distribution or, alternatively, at
## <http://www.OpenLDAP.org/license.html>.
PROGRAMS = lloadd
XPROGRAMS = slloadd
XSRCS = version.c
NT_SRCS = nt_svc.c
NT_OBJS = nt_svc.o ../../libraries/liblutil/slapdmsg.res
SRCS += main.c init.c value.c \
ch_malloc.c sl_malloc.c user.c
OBJS = $(patsubst %.c,%.o,$(SRCS)) $(@PLAT@_OBJS)
BUILD_OPT = "--enable-balancer"
BUILD_SRV = @BUILD_BALANCER@
all-local-srv: $(PROGRAMS)
# $(LTHREAD_LIBS) must be last!
XLIBS = $(LLOADD_L)
XXLIBS = $(LLOADD_LIBS) $(SECURITY_LIBS) $(LUTIL_LIBS)
XXXLIBS = $(LTHREAD_LIBS)
NT_DEPENDS = slapd.exp
NT_OBJECTS = slapd.exp symdummy.o $(LLOADD_OBJS) version.o
UNIX_DEPENDS = version.o $(LLOADD_L)
UNIX_OBJECTS = $(OBJS) version.o
LLOADD_DEPENDS = $(@PLAT@_DEPENDS)
LLOADD_OBJECTS = $(@PLAT@_OBJECTS)
lloadd: $(LLOADD_DEPENDS) version.o
$(LTLINK) -o $@ $(OBJS) version.o $(LIBS)
slloadd: version.o
$(LTLINK) -static -o $@ $(OBJS) version.o $(LIBS)
version.c: Makefile
@-$(RM) $@
$(MKVERSION) -s -n Versionstr lloadd > $@
version.o: version.c $(OBJS) $(LLOADD_L)
install-local-srv: FORCE
-$(MKDIR) $(DESTDIR)$(libexecdir)
@-$(INSTALL) -m 700 -d $(DESTDIR)$(localstatedir)/openldap-lloadd
@( \
for prg in $(PROGRAMS); do \
$(LTINSTALL) $(INSTALLFLAGS) $(STRIP) -m 755 $$prg$(EXEEXT) \
$(DESTDIR)$(libexecdir); \
done \
)
......@@ -150,9 +150,13 @@ lload_libevent_init( void )
lload_libevent_cond_timedwait
};
#ifndef BALANCER_MODULE
/* only necessary if lload is a server, slapd already calls
* ldap_pvt_thread_initialize() */
if ( ldap_pvt_thread_initialize() ) {
return -1;
}
#endif
evthread_set_lock_callbacks( &cbs );
evthread_set_condition_callbacks( &cond_cbs );
......
/* module_init.c - module initialization functions */
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
* Copyright 1998-2020 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License.
*
* A copy of this license is available in the file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>.
*/
/* Portions Copyright (c) 1995 Regents of the University of Michigan.
* All rights reserved.
*
* Redistribution and use in source and binary forms are permitted
* provided that this notice is preserved and that due credit is given
* to the University of Michigan at Ann Arbor. The name of the University
* may not be used to endorse or promote products derived from this
* software without specific prior written permission. This software
* is provided ``as is'' without express or implied warranty.
*/
#include "portable.h"
#include <stdio.h>
#include <ac/socket.h>
#include <ac/string.h>
#include <ac/time.h>
#include "../servers/slapd/slap.h"
#include "lload.h"
#include "lber_pvt.h"
#include "ldap_rq.h"
int
lload_start_daemon()
{
struct event_base *daemon_base = event_base_new();
int rc = 0, i;
if ( !daemon_base ) {
Debug( LDAP_DEBUG_ANY, "lload_start_daemon: "
"main event base allocation failed\n" );
rc = 1;
return rc;
}
rc = lloadd_daemon( daemon_base );
return rc;
}
/* from init.c */
int
lload_conn_pool_init()
{
int rc = 0;
ldap_pvt_thread_mutex_init( &backend_mutex );
ldap_pvt_thread_mutex_init( &clients_mutex );
lload_exop_init();
Debug( LDAP_DEBUG_TRACE, "lload_conn_pool_init: "
"mutexes initialized.\n" );
return rc;
}
void *
lload_module_start_daemon( void *ctx, void *arg )
{
lload_start_daemon();
return NULL;
}
int
init_module( int argc, char *argv[] )
{
if ( slapMode & SLAP_TOOL_MODE ) {
return 0;
}
if ( lload_libevent_init() ) {
return -1;
}
global_host = ldap_pvt_get_fqdn( NULL );
#ifdef HAVE_TLS
if ( ldap_create( &lload_tls_backend_ld ) ) {
return -1;
}
#endif /* HAVE_TLS */
if ( lloadd_daemon_init( argv[1] ) != 0 ) {
return -1;
}
lload_conn_pool_init();
if ( lload_read_config( argv[0], NULL ) != 0 ) {
return -1;
}
ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex );
ldap_pvt_runqueue_insert( &slapd_rq, 0, lload_module_start_daemon, NULL,
"lload_module_start_daemon", "lloadd" );
ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex );
return 0;
}
......@@ -18,6 +18,7 @@ SUBDIRS= progs
BUILD_MDB=@BUILD_MDB@
BUILD_SQL=@BUILD_SQL@
BUILD_SLAPD=@BUILD_SLAPD@
BUILD_BALANCER=@BUILD_BALANCER@
# test primary backends (default)
......@@ -54,7 +55,12 @@ lloadd test-lloadd: lloadd-$(BUILD_BALANCER)
lloadd-no:
@echo "run configure with --enable-balancer to run the Load Balancer tests"
lloadd-yes: FORCE
lloadd-yes: lloadd-slapd-$(BUILD_SLAPD)
lloadd-slapd-no:
@echo "run configure with --enable-slapd to run the Load Balancer tests"
lloadd-slapd-yes: FORCE
@echo "Initiating LDAP tests for the Load Balancer..."
@$(RUN) lloadd-all
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment