You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by ns...@apache.org on 2009/04/21 16:51:17 UTC
svn commit: r767164 - in /couchdb/trunk: bin/couchdb.tpl.in
etc/couchdb/Makefile.am etc/couchdb/default.d/
etc/couchdb/default.ini.tpl.in etc/couchdb/local.d/
Author: nslater
Date: Tue Apr 21 14:51:17 2009
New Revision: 767164
URL: http://svn.apache.org/viewvc?rev=767164&view=rev
Log:
added new configuration system
Added:
couchdb/trunk/etc/couchdb/default.d/
couchdb/trunk/etc/couchdb/local.d/
Modified:
couchdb/trunk/bin/couchdb.tpl.in
couchdb/trunk/etc/couchdb/Makefile.am
couchdb/trunk/etc/couchdb/default.ini.tpl.in
Modified: couchdb/trunk/bin/couchdb.tpl.in
URL: http://svn.apache.org/viewvc/couchdb/trunk/bin/couchdb.tpl.in?rev=767164&r1=767163&r2=767164&view=diff
==============================================================================
--- couchdb/trunk/bin/couchdb.tpl.in (original)
+++ couchdb/trunk/bin/couchdb.tpl.in Tue Apr 21 14:51:17 2009
@@ -12,28 +12,28 @@
# License for the specific language governing permissions and limitations under
# the License.
-SCRIPT_OK=0
-SCRIPT_ERROR=1
-
-INTERACTIVE=false
BACKGROUND=false
+DEFAULT_CONFIG_DIR=%localconfdir%/default.d
+DEFAULT_CONFIG_FILE=%localconfdir%/default.ini
+HEART_BEAT_TIMEOUT=11
+HEART_COMMAND="%bindir%/%couchdb_command_name% -k"
+INTERACTIVE=false
KILL=false
-SHUTDOWN=false
+LOCAL_CONFIG_DIR=%localconfdir%/local.d
+LOCAL_CONFIG_FILE=%localconfdir%/local.ini
+PID_FILE=%localstatedir%/run/couchdb/couchdb.pid
RECURSED=false
RESET_CONFIG=true
-
RESPAWN_TIMEOUT=0
-
-DEFAULT_INI_FILE=%localconfdir%/%defaultini%
-LOCAL_INI_FILE=%localconfdir%/%localini%
-
-PID_FILE=%localstatedir%/run/couchdb/couchdb.pid
-
-STDOUT_FILE=couchdb.stdout
+SCRIPT_ERROR=1
+SCRIPT_OK=0
+SHUTDOWN=false
STDERR_FILE=couchdb.stderr
+STDOUT_FILE=couchdb.stdout
-HEART_COMMAND="%bindir%/%couchdb_command_name% -k"
-HEART_BEAT_TIMEOUT=11
+print_arguments=""
+start_arguments=""
+background_start_arguments=""
basename=`basename $0`
@@ -70,8 +70,9 @@
-h display a short help message and exit
-V display version information and exit
- -c FILE use configuration FILE (chainable, resets system default)
- -C FILE use configuration FILE (chainable, does not reset system default)
+ -a FILE add configuration FILE to chain
+ -n reset configuration file chain (including system default)
+ -c print configuration file chain and exit
-i use the interactive Erlang shell
-b spawn as a background process
-p FILE set the background PID FILE (overrides system default)
@@ -92,7 +93,7 @@
fi
echo >&2
echo "Try \`"$basename" -h' for more information." >&2
- exit $SCRIPT_ERROR
+ false
}
_get_pid () {
@@ -102,6 +103,48 @@
echo $PID
}
+_add_config_file () {
+ if test -n "$start_arguments"; then
+ start_arguments="$start_arguments, ";
+ fi
+ if test -z "$print_arguments"; then
+ print_arguments="$1"
+ else
+ print_arguments="`cat <<EOF
+$print_arguments
+$1
+EOF
+`"
+ fi
+ start_arguments="$start_arguments \\\"$1\\\""
+ background_start_arguments="$background_start_arguments -c \\\"$1\\\""
+}
+
+_add_config_dir () {
+ for file in `find "$1" -mindepth 1`; do
+ _add_config_file $file
+ done
+}
+
+_load_config () {
+ _add_config_file "$DEFAULT_CONFIG_FILE"
+ _add_config_dir "$DEFAULT_CONFIG_DIR"
+ _add_config_file "$LOCAL_CONFIG_FILE"
+ _add_config_dir "$LOCAL_CONFIG_DIR"
+}
+
+_reset_config () {
+ print_arguments=""
+ start_arguments=""
+ background_start_arguments=""
+}
+
+_print_config () {
+ cat <<EOF
+$print_arguments
+EOF
+}
+
check_status () {
PID=`_get_pid`
if test -n "$PID"; then
@@ -129,35 +172,35 @@
message_prefix="Apache CouchDB needs write permission on the"
if test ! -w $PID_FILE; then
echo "$message_prefix PID file: $PID_FILE" >&2
- exit $SCRIPT_ERROR
+ false
fi
if test ! -w $STDOUT_FILE; then
echo "$message_prefix STDOUT file: $STDOUT_FILE" >&2
- exit $SCRIPT_ERROR
+ false
fi
if test ! -w $STDERR_FILE; then
echo "$message_prefix STDERR file: $STDERR_FILE" >&2
- exit $SCRIPT_ERROR
+ false
fi
message_prefix="Apache CouchDB needs a regular"
if test `echo 2> /dev/null >> $PID_FILE; echo $?` -gt 0; then
echo "$message_prefix PID file: $PID_FILE" >&2
- exit $SCRIPT_ERROR
+ false
fi
if test `echo 2> /dev/null >> $STDOUT_FILE; echo $?` -gt 0; then
echo "$message_prefix STDOUT file: $STDOUT_FILE" >&2
- exit $SCRIPT_ERROR
+ false
fi
if test `echo 2> /dev/null >> $STDERR_FILE; echo $?` -gt 0; then
echo "$message_prefix STDERR file: $STDERR_FILE" >&2
- exit $SCRIPT_ERROR
+ false
fi
}
start_couchdb () {
if test ! "$RECURSED" = "true"; then
if check_status 2> /dev/null; then
- exit $SCRIPT_OK
+ exit
fi
check_environment
fi
@@ -169,22 +212,6 @@
touch $PID_FILE
interactive_option="+Bd -noinput"
fi
- if test -n "$INI_FILES"; then
- if test "$RESET_CONFIG" = "true"; then
- ini_files="$INI_FILES"
- else
- ini_files="$DEFAULT_INI_FILE $INI_FILES"
- fi
- else
- ini_files="$DEFAULT_INI_FILE $LOCAL_INI_FILE"
- fi
- for file in $ini_files; do
- if test -n "$start_arguments"; then
- start_arguments="$start_arguments, ";
- fi
- start_arguments="$start_arguments \\\"$file\\\""
- background_start_arguments="$background_start_arguments -c \\\"$file\\\""
- done
command="`%ICU_CONFIG% --invoke` \
%ERL% $interactive_option -smp auto -sasl errlog_type error +K true \
-pa %localerlanglibdir%/%couchdbebindir% \
@@ -196,8 +223,7 @@
-eval \"crypto:start()\" \
-eval \"ibrowse:start()\" \
-eval \"couch_server:start([$start_arguments]), receive done -> done end.\" "
- if test "$BACKGROUND" = "true" \
- -a "$RECURSED" = "false"; then
+ if test "$BACKGROUND" = "true" -a "$RECURSED" = "false"; then
$0 $background_start_arguments -b -r $RESPAWN_TIMEOUT -p $PID_FILE \
-o $STDOUT_FILE -e $STDERR_FILE -R &
echo "Apache CouchDB has started, time to relax."
@@ -263,8 +289,9 @@
}
parse_script_option_list () {
+ _load_config
set +e
- options=`getopt hVc:C:ibp:r:Ro:e:skd $@`
+ options=`getopt hVa:ncibp:r:Ro:e:skd $@`
if test ! $? -eq 0; then
display_error
fi
@@ -272,10 +299,11 @@
eval set -- $options
while [ $# -gt 0 ]; do
case "$1" in
- -h) shift; display_help; exit $SCRIPT_OK;;
- -V) shift; display_version; exit $SCRIPT_OK;;
- -c) shift; INI_FILES="$INI_FILES $1"; shift;;
- -C) shift; RESET_CONFIG=false; INI_FILES="$INI_FILES $1"; shift;;
+ -h) shift; display_help; exit;;
+ -V) shift; display_version; exit;;
+ -a) shift; _add_config_file "$1"; shift;;
+ -n) shift; _reset_config;;
+ -c) shift; _print_config; exit;;
-i) shift; INTERACTIVE=true;;
-b) shift; BACKGROUND=true;;
-r) shift; RESPAWN_TIMEOUT=$1; shift;;
@@ -283,7 +311,7 @@
-p) shift; PID_FILE=$1; shift;;
-o) shift; STDOUT_FILE=$1; shift;;
-e) shift; STDERR_FILE=$1; shift;;
- -s) shift; check_status; exit $SCRIPT_OK;;
+ -s) shift; check_status; exit;;
-k) shift; KILL=true;;
-d) shift; SHUTDOWN=true;;
--) shift; break;;
Modified: couchdb/trunk/etc/couchdb/Makefile.am
URL: http://svn.apache.org/viewvc/couchdb/trunk/etc/couchdb/Makefile.am?rev=767164&r1=767163&r2=767164&view=diff
==============================================================================
--- couchdb/trunk/etc/couchdb/Makefile.am (original)
+++ couchdb/trunk/etc/couchdb/Makefile.am Tue Apr 21 14:51:17 2009
@@ -48,6 +48,14 @@
if test ! -f "$(DESTDIR)/$(localconfdir)/local.ini"; then \
cp $(srcdir)/local.ini "$(DESTDIR)/$(localconfdir)/local.ini"; \
fi
+ if test ! "$(mkdir_p)" = ""; then \
+ $(mkdir_p) "$(DESTDIR)/$(localconfdir)/default.d"; \
+ $(mkdir_p) "$(DESTDIR)/$(localconfdir)/local.d"; \
+ else \
+ echo "WARNING: You may have to create these directories by hand."; \
+ mkdir -p "$(DESTDIR)/$(localconfdir)/default.d"; \
+ mkdir -p "$(DESTDIR)/$(localconfdir)/local.d"; \
+ fi
uninstall-local:
rm -f "$(DESTDIR)/$(localconfdir)/local.ini"
Modified: couchdb/trunk/etc/couchdb/default.ini.tpl.in
URL: http://svn.apache.org/viewvc/couchdb/trunk/etc/couchdb/default.ini.tpl.in?rev=767164&r1=767163&r2=767164&view=diff
==============================================================================
--- couchdb/trunk/etc/couchdb/default.ini.tpl.in (original)
+++ couchdb/trunk/etc/couchdb/default.ini.tpl.in Tue Apr 21 14:51:17 2009
@@ -52,7 +52,6 @@
_stats = {couch_httpd_stats_handlers, handle_stats_req}
[httpd_db_handlers]
-_compact = {couch_httpd_db, handle_compact_req}
_design = {couch_httpd_db, handle_design_req}
_temp_view = {couch_httpd_view, handle_temp_view_req}
Re: New configuration mechanism (Was: Re: svn commit: r767164 - in
/couchdb/trunk: bin/couchdb.tpl.in etc/couchdb/Makefile.am
etc/couchdb/default.d/ etc/couchdb/default.ini.tpl.in
etc/couchdb/local.d/)
Posted by Noah Slater <ns...@apache.org>.
I have now added the following additional option:
-A DIR add configuration DIR to chain
Best,
--
Noah Slater, http://tumbolia.org/nslater
Re: New configuration mechanism (Was: Re: svn commit: r767164 - in
/couchdb/trunk: bin/couchdb.tpl.in etc/couchdb/Makefile.am
etc/couchdb/default.d/ etc/couchdb/default.ini.tpl.in etc/couchdb/local.d/)
Posted by Robert Newson <ro...@gmail.com>.
I'm not yet a Debian anything (other than a user and a fan). :)
I intend to package couchdb-lucene for Debian 5.0 as soon as 0.3 is
done, which is a few weeks off.
Once I have a sensible package, I'll investigate getting into the main
Debian archive.
B.
On Tue, Apr 21, 2009 at 4:56 PM, Noah Slater <ns...@apache.org> wrote:
> On Tue, Apr 21, 2009 at 04:49:36PM +0100, Robert Newson wrote:
>> That looks like exactly what I need when I package couchdb-lucene. I'd
>> include /etc/couchdb/default.d/couchdb-lucene.ini as a config file,
>> and that would hook couchdb-lucene up neatly. Remove the package and
>> it'll remove the config, nice and clean.
>
> Great.
>
>> I assume that later configuration settings override former ones?
>
> Yes.
>
>> I'd like to guarantee that couchdb-lucene's os_process_timeout is applied. I
>> suggest using numeric prefixes in the .ini files you supply in the core
>> couchdb package (assuming, actually, that /etc/couchdb/default.d/ would not be
>> empty by default), much like the rc.d and network hook scripts work
>> (01couchdb.ini, for example).
>
> The default.d and local.d directories will be empty by default.
>
> How the files are named is up to the local administrator or distribution.
>
> As your a Debian contributer, we can work together on the nascent collection of
> CouchDB related packages to make sure that any additional configuration files
> are named coherently and work together without conflicts.
>
> --
> Noah Slater, http://tumbolia.org/nslater
>
Re: New configuration mechanism (Was: Re: svn commit: r767164 - in
/couchdb/trunk: bin/couchdb.tpl.in etc/couchdb/Makefile.am
etc/couchdb/default.d/ etc/couchdb/default.ini.tpl.in
etc/couchdb/local.d/)
Posted by Noah Slater <ns...@apache.org>.
On Tue, Apr 21, 2009 at 04:49:36PM +0100, Robert Newson wrote:
> That looks like exactly what I need when I package couchdb-lucene. I'd
> include /etc/couchdb/default.d/couchdb-lucene.ini as a config file,
> and that would hook couchdb-lucene up neatly. Remove the package and
> it'll remove the config, nice and clean.
Great.
> I assume that later configuration settings override former ones?
Yes.
> I'd like to guarantee that couchdb-lucene's os_process_timeout is applied. I
> suggest using numeric prefixes in the .ini files you supply in the core
> couchdb package (assuming, actually, that /etc/couchdb/default.d/ would not be
> empty by default), much like the rc.d and network hook scripts work
> (01couchdb.ini, for example).
The default.d and local.d directories will be empty by default.
How the files are named is up to the local administrator or distribution.
As your a Debian contributer, we can work together on the nascent collection of
CouchDB related packages to make sure that any additional configuration files
are named coherently and work together without conflicts.
--
Noah Slater, http://tumbolia.org/nslater
Re: New configuration mechanism (Was: Re: svn commit: r767164 - in
/couchdb/trunk: bin/couchdb.tpl.in etc/couchdb/Makefile.am
etc/couchdb/default.d/ etc/couchdb/default.ini.tpl.in etc/couchdb/local.d/)
Posted by Robert Newson <ro...@gmail.com>.
That looks like exactly what I need when I package couchdb-lucene. I'd
include /etc/couchdb/default.d/couchdb-lucene.ini as a config file,
and that would hook couchdb-lucene up neatly. Remove the package and
it'll remove the config, nice and clean.
I assume that later configuration settings override former ones? I'd
like to guarantee that couchdb-lucene's os_process_timeout is applied.
I suggest using numeric prefixes in the .ini files you supply in the
core couchdb package (assuming, actually, that /etc/couchdb/default.d/
would not be empty by default), much like the rc.d and network hook
scripts work (01couchdb.ini, for example).
Thanks for this, I'll be sure to test it out as soon as I can.
B.
On Tue, Apr 21, 2009 at 4:03 PM, Noah Slater <ns...@apache.org> wrote:
> Hey,
>
> I have been talking to Robert Newson about CouchDB configuration extensibility.
> He wants to create a Debian package for Lucene that drops in some configuration
> snippets in a location they are picked up. Automatically editing the default.ini
> or local.ini files are out of the question for obvious reasons.
>
> In the spirit of doing now, and asking questions later, I have committed a
> changeset that adds a default.d and local.d directory to PREFIX/etc/couchdb. Any
> configuration files in these directories are picked up in this order:
>
> PREFIX/etc/couchdb/default.ini
> PREFIX/etc/couchdb/default.d/*
> PREFIX/etc/couchdb/local.ini
> PREFIX/etc/couchdb/local.d/*
>
> Along with this I have made a backwards incompatible change to the CLI options:
>
>> - -c FILE use configuration FILE (chainable, resets system default)
>> - -C FILE use configuration FILE (chainable, does not reset system
>> - -default)
>> + -a FILE add configuration FILE to chain
>> + -n reset configuration file chain (including system default)
>> + -c print configuration file chain and exit
>
> The same functionality is still there, but with a different way of using it.
>
> Please test this change, and let me know your thoughts.
>
> On Tue, Apr 21, 2009 at 02:51:17PM -0000, nslater@apache.org wrote:
>> Author: nslater
>> Date: Tue Apr 21 14:51:17 2009
>> New Revision: 767164
>>
>> URL: http://svn.apache.org/viewvc?rev=767164&view=rev
>> Log:
>> added new configuration system
>>
>> Added:
>> couchdb/trunk/etc/couchdb/default.d/
>> couchdb/trunk/etc/couchdb/local.d/
>> Modified:
>> couchdb/trunk/bin/couchdb.tpl.in
>> couchdb/trunk/etc/couchdb/Makefile.am
>> couchdb/trunk/etc/couchdb/default.ini.tpl.in
>>
>> Modified: couchdb/trunk/bin/couchdb.tpl.in
>> URL: http://svn.apache.org/viewvc/couchdb/trunk/bin/couchdb.tpl.in?rev=767164&r1=767163&r2=767164&view=diff
>> ==============================================================================
>> --- couchdb/trunk/bin/couchdb.tpl.in (original)
>> +++ couchdb/trunk/bin/couchdb.tpl.in Tue Apr 21 14:51:17 2009
>> @@ -12,28 +12,28 @@
>> # License for the specific language governing permissions and limitations under
>> # the License.
>>
>> -SCRIPT_OK=0
>> -SCRIPT_ERROR=1
>> -
>> -INTERACTIVE=false
>> BACKGROUND=false
>> +DEFAULT_CONFIG_DIR=%localconfdir%/default.d
>> +DEFAULT_CONFIG_FILE=%localconfdir%/default.ini
>> +HEART_BEAT_TIMEOUT=11
>> +HEART_COMMAND="%bindir%/%couchdb_command_name% -k"
>> +INTERACTIVE=false
>> KILL=false
>> -SHUTDOWN=false
>> +LOCAL_CONFIG_DIR=%localconfdir%/local.d
>> +LOCAL_CONFIG_FILE=%localconfdir%/local.ini
>> +PID_FILE=%localstatedir%/run/couchdb/couchdb.pid
>> RECURSED=false
>> RESET_CONFIG=true
>> -
>> RESPAWN_TIMEOUT=0
>> -
>> -DEFAULT_INI_FILE=%localconfdir%/%defaultini%
>> -LOCAL_INI_FILE=%localconfdir%/%localini%
>> -
>> -PID_FILE=%localstatedir%/run/couchdb/couchdb.pid
>> -
>> -STDOUT_FILE=couchdb.stdout
>> +SCRIPT_ERROR=1
>> +SCRIPT_OK=0
>> +SHUTDOWN=false
>> STDERR_FILE=couchdb.stderr
>> +STDOUT_FILE=couchdb.stdout
>>
>> -HEART_COMMAND="%bindir%/%couchdb_command_name% -k"
>> -HEART_BEAT_TIMEOUT=11
>> +print_arguments=""
>> +start_arguments=""
>> +background_start_arguments=""
>>
>> basename=`basename $0`
>>
>> @@ -70,8 +70,9 @@
>>
>> -h display a short help message and exit
>> -V display version information and exit
>> - -c FILE use configuration FILE (chainable, resets system default)
>> - -C FILE use configuration FILE (chainable, does not reset system default)
>> + -a FILE add configuration FILE to chain
>> + -n reset configuration file chain (including system default)
>> + -c print configuration file chain and exit
>> -i use the interactive Erlang shell
>> -b spawn as a background process
>> -p FILE set the background PID FILE (overrides system default)
>> @@ -92,7 +93,7 @@
>> fi
>> echo >&2
>> echo "Try \`"$basename" -h' for more information." >&2
>> - exit $SCRIPT_ERROR
>> + false
>> }
>>
>> _get_pid () {
>> @@ -102,6 +103,48 @@
>> echo $PID
>> }
>>
>> +_add_config_file () {
>> + if test -n "$start_arguments"; then
>> + start_arguments="$start_arguments, ";
>> + fi
>> + if test -z "$print_arguments"; then
>> + print_arguments="$1"
>> + else
>> + print_arguments="`cat <<EOF
>> +$print_arguments
>> +$1
>> +EOF
>> +`"
>> + fi
>> + start_arguments="$start_arguments \\\"$1\\\""
>> + background_start_arguments="$background_start_arguments -c \\\"$1\\\""
>> +}
>> +
>> +_add_config_dir () {
>> + for file in `find "$1" -mindepth 1`; do
>> + _add_config_file $file
>> + done
>> +}
>> +
>> +_load_config () {
>> + _add_config_file "$DEFAULT_CONFIG_FILE"
>> + _add_config_dir "$DEFAULT_CONFIG_DIR"
>> + _add_config_file "$LOCAL_CONFIG_FILE"
>> + _add_config_dir "$LOCAL_CONFIG_DIR"
>> +}
>> +
>> +_reset_config () {
>> + print_arguments=""
>> + start_arguments=""
>> + background_start_arguments=""
>> +}
>> +
>> +_print_config () {
>> + cat <<EOF
>> +$print_arguments
>> +EOF
>> +}
>> +
>> check_status () {
>> PID=`_get_pid`
>> if test -n "$PID"; then
>> @@ -129,35 +172,35 @@
>> message_prefix="Apache CouchDB needs write permission on the"
>> if test ! -w $PID_FILE; then
>> echo "$message_prefix PID file: $PID_FILE" >&2
>> - exit $SCRIPT_ERROR
>> + false
>> fi
>> if test ! -w $STDOUT_FILE; then
>> echo "$message_prefix STDOUT file: $STDOUT_FILE" >&2
>> - exit $SCRIPT_ERROR
>> + false
>> fi
>> if test ! -w $STDERR_FILE; then
>> echo "$message_prefix STDERR file: $STDERR_FILE" >&2
>> - exit $SCRIPT_ERROR
>> + false
>> fi
>> message_prefix="Apache CouchDB needs a regular"
>> if test `echo 2> /dev/null >> $PID_FILE; echo $?` -gt 0; then
>> echo "$message_prefix PID file: $PID_FILE" >&2
>> - exit $SCRIPT_ERROR
>> + false
>> fi
>> if test `echo 2> /dev/null >> $STDOUT_FILE; echo $?` -gt 0; then
>> echo "$message_prefix STDOUT file: $STDOUT_FILE" >&2
>> - exit $SCRIPT_ERROR
>> + false
>> fi
>> if test `echo 2> /dev/null >> $STDERR_FILE; echo $?` -gt 0; then
>> echo "$message_prefix STDERR file: $STDERR_FILE" >&2
>> - exit $SCRIPT_ERROR
>> + false
>> fi
>> }
>>
>> start_couchdb () {
>> if test ! "$RECURSED" = "true"; then
>> if check_status 2> /dev/null; then
>> - exit $SCRIPT_OK
>> + exit
>> fi
>> check_environment
>> fi
>> @@ -169,22 +212,6 @@
>> touch $PID_FILE
>> interactive_option="+Bd -noinput"
>> fi
>> - if test -n "$INI_FILES"; then
>> - if test "$RESET_CONFIG" = "true"; then
>> - ini_files="$INI_FILES"
>> - else
>> - ini_files="$DEFAULT_INI_FILE $INI_FILES"
>> - fi
>> - else
>> - ini_files="$DEFAULT_INI_FILE $LOCAL_INI_FILE"
>> - fi
>> - for file in $ini_files; do
>> - if test -n "$start_arguments"; then
>> - start_arguments="$start_arguments, ";
>> - fi
>> - start_arguments="$start_arguments \\\"$file\\\""
>> - background_start_arguments="$background_start_arguments -c \\\"$file\\\""
>> - done
>> command="`%ICU_CONFIG% --invoke` \
>> %ERL% $interactive_option -smp auto -sasl errlog_type error +K true \
>> -pa %localerlanglibdir%/%couchdbebindir% \
>> @@ -196,8 +223,7 @@
>> -eval \"crypto:start()\" \
>> -eval \"ibrowse:start()\" \
>> -eval \"couch_server:start([$start_arguments]), receive done -> done end.\" "
>> - if test "$BACKGROUND" = "true" \
>> - -a "$RECURSED" = "false"; then
>> + if test "$BACKGROUND" = "true" -a "$RECURSED" = "false"; then
>> $0 $background_start_arguments -b -r $RESPAWN_TIMEOUT -p $PID_FILE \
>> -o $STDOUT_FILE -e $STDERR_FILE -R &
>> echo "Apache CouchDB has started, time to relax."
>> @@ -263,8 +289,9 @@
>> }
>>
>> parse_script_option_list () {
>> + _load_config
>> set +e
>> - options=`getopt hVc:C:ibp:r:Ro:e:skd $@`
>> + options=`getopt hVa:ncibp:r:Ro:e:skd $@`
>> if test ! $? -eq 0; then
>> display_error
>> fi
>> @@ -272,10 +299,11 @@
>> eval set -- $options
>> while [ $# -gt 0 ]; do
>> case "$1" in
>> - -h) shift; display_help; exit $SCRIPT_OK;;
>> - -V) shift; display_version; exit $SCRIPT_OK;;
>> - -c) shift; INI_FILES="$INI_FILES $1"; shift;;
>> - -C) shift; RESET_CONFIG=false; INI_FILES="$INI_FILES $1"; shift;;
>> + -h) shift; display_help; exit;;
>> + -V) shift; display_version; exit;;
>> + -a) shift; _add_config_file "$1"; shift;;
>> + -n) shift; _reset_config;;
>> + -c) shift; _print_config; exit;;
>> -i) shift; INTERACTIVE=true;;
>> -b) shift; BACKGROUND=true;;
>> -r) shift; RESPAWN_TIMEOUT=$1; shift;;
>> @@ -283,7 +311,7 @@
>> -p) shift; PID_FILE=$1; shift;;
>> -o) shift; STDOUT_FILE=$1; shift;;
>> -e) shift; STDERR_FILE=$1; shift;;
>> - -s) shift; check_status; exit $SCRIPT_OK;;
>> + -s) shift; check_status; exit;;
>> -k) shift; KILL=true;;
>> -d) shift; SHUTDOWN=true;;
>> --) shift; break;;
>>
>> Modified: couchdb/trunk/etc/couchdb/Makefile.am
>> URL: http://svn.apache.org/viewvc/couchdb/trunk/etc/couchdb/Makefile.am?rev=767164&r1=767163&r2=767164&view=diff
>> ==============================================================================
>> --- couchdb/trunk/etc/couchdb/Makefile.am (original)
>> +++ couchdb/trunk/etc/couchdb/Makefile.am Tue Apr 21 14:51:17 2009
>> @@ -48,6 +48,14 @@
>> if test ! -f "$(DESTDIR)/$(localconfdir)/local.ini"; then \
>> cp $(srcdir)/local.ini "$(DESTDIR)/$(localconfdir)/local.ini"; \
>> fi
>> + if test ! "$(mkdir_p)" = ""; then \
>> + $(mkdir_p) "$(DESTDIR)/$(localconfdir)/default.d"; \
>> + $(mkdir_p) "$(DESTDIR)/$(localconfdir)/local.d"; \
>> + else \
>> + echo "WARNING: You may have to create these directories by hand."; \
>> + mkdir -p "$(DESTDIR)/$(localconfdir)/default.d"; \
>> + mkdir -p "$(DESTDIR)/$(localconfdir)/local.d"; \
>> + fi
>>
>> uninstall-local:
>> rm -f "$(DESTDIR)/$(localconfdir)/local.ini"
>>
>> Modified: couchdb/trunk/etc/couchdb/default.ini.tpl.in
>> URL: http://svn.apache.org/viewvc/couchdb/trunk/etc/couchdb/default.ini.tpl.in?rev=767164&r1=767163&r2=767164&view=diff
>> ==============================================================================
>> --- couchdb/trunk/etc/couchdb/default.ini.tpl.in (original)
>> +++ couchdb/trunk/etc/couchdb/default.ini.tpl.in Tue Apr 21 14:51:17 2009
>> @@ -52,7 +52,6 @@
>> _stats = {couch_httpd_stats_handlers, handle_stats_req}
>>
>> [httpd_db_handlers]
>> -_compact = {couch_httpd_db, handle_compact_req}
>> _design = {couch_httpd_db, handle_design_req}
>> _temp_view = {couch_httpd_view, handle_temp_view_req}
>>
>>
>>
>
> --
> Noah Slater, http://tumbolia.org/nslater
>
New configuration mechanism (Was: Re: svn commit: r767164 - in
/couchdb/trunk: bin/couchdb.tpl.in etc/couchdb/Makefile.am
etc/couchdb/default.d/ etc/couchdb/default.ini.tpl.in
etc/couchdb/local.d/)
Posted by Noah Slater <ns...@apache.org>.
Hey,
I have been talking to Robert Newson about CouchDB configuration extensibility.
He wants to create a Debian package for Lucene that drops in some configuration
snippets in a location they are picked up. Automatically editing the default.ini
or local.ini files are out of the question for obvious reasons.
In the spirit of doing now, and asking questions later, I have committed a
changeset that adds a default.d and local.d directory to PREFIX/etc/couchdb. Any
configuration files in these directories are picked up in this order:
PREFIX/etc/couchdb/default.ini
PREFIX/etc/couchdb/default.d/*
PREFIX/etc/couchdb/local.ini
PREFIX/etc/couchdb/local.d/*
Along with this I have made a backwards incompatible change to the CLI options:
> - -c FILE use configuration FILE (chainable, resets system default)
> - -C FILE use configuration FILE (chainable, does not reset system
> - -default)
> + -a FILE add configuration FILE to chain
> + -n reset configuration file chain (including system default)
> + -c print configuration file chain and exit
The same functionality is still there, but with a different way of using it.
Please test this change, and let me know your thoughts.
On Tue, Apr 21, 2009 at 02:51:17PM -0000, nslater@apache.org wrote:
> Author: nslater
> Date: Tue Apr 21 14:51:17 2009
> New Revision: 767164
>
> URL: http://svn.apache.org/viewvc?rev=767164&view=rev
> Log:
> added new configuration system
>
> Added:
> couchdb/trunk/etc/couchdb/default.d/
> couchdb/trunk/etc/couchdb/local.d/
> Modified:
> couchdb/trunk/bin/couchdb.tpl.in
> couchdb/trunk/etc/couchdb/Makefile.am
> couchdb/trunk/etc/couchdb/default.ini.tpl.in
>
> Modified: couchdb/trunk/bin/couchdb.tpl.in
> URL: http://svn.apache.org/viewvc/couchdb/trunk/bin/couchdb.tpl.in?rev=767164&r1=767163&r2=767164&view=diff
> ==============================================================================
> --- couchdb/trunk/bin/couchdb.tpl.in (original)
> +++ couchdb/trunk/bin/couchdb.tpl.in Tue Apr 21 14:51:17 2009
> @@ -12,28 +12,28 @@
> # License for the specific language governing permissions and limitations under
> # the License.
>
> -SCRIPT_OK=0
> -SCRIPT_ERROR=1
> -
> -INTERACTIVE=false
> BACKGROUND=false
> +DEFAULT_CONFIG_DIR=%localconfdir%/default.d
> +DEFAULT_CONFIG_FILE=%localconfdir%/default.ini
> +HEART_BEAT_TIMEOUT=11
> +HEART_COMMAND="%bindir%/%couchdb_command_name% -k"
> +INTERACTIVE=false
> KILL=false
> -SHUTDOWN=false
> +LOCAL_CONFIG_DIR=%localconfdir%/local.d
> +LOCAL_CONFIG_FILE=%localconfdir%/local.ini
> +PID_FILE=%localstatedir%/run/couchdb/couchdb.pid
> RECURSED=false
> RESET_CONFIG=true
> -
> RESPAWN_TIMEOUT=0
> -
> -DEFAULT_INI_FILE=%localconfdir%/%defaultini%
> -LOCAL_INI_FILE=%localconfdir%/%localini%
> -
> -PID_FILE=%localstatedir%/run/couchdb/couchdb.pid
> -
> -STDOUT_FILE=couchdb.stdout
> +SCRIPT_ERROR=1
> +SCRIPT_OK=0
> +SHUTDOWN=false
> STDERR_FILE=couchdb.stderr
> +STDOUT_FILE=couchdb.stdout
>
> -HEART_COMMAND="%bindir%/%couchdb_command_name% -k"
> -HEART_BEAT_TIMEOUT=11
> +print_arguments=""
> +start_arguments=""
> +background_start_arguments=""
>
> basename=`basename $0`
>
> @@ -70,8 +70,9 @@
>
> -h display a short help message and exit
> -V display version information and exit
> - -c FILE use configuration FILE (chainable, resets system default)
> - -C FILE use configuration FILE (chainable, does not reset system default)
> + -a FILE add configuration FILE to chain
> + -n reset configuration file chain (including system default)
> + -c print configuration file chain and exit
> -i use the interactive Erlang shell
> -b spawn as a background process
> -p FILE set the background PID FILE (overrides system default)
> @@ -92,7 +93,7 @@
> fi
> echo >&2
> echo "Try \`"$basename" -h' for more information." >&2
> - exit $SCRIPT_ERROR
> + false
> }
>
> _get_pid () {
> @@ -102,6 +103,48 @@
> echo $PID
> }
>
> +_add_config_file () {
> + if test -n "$start_arguments"; then
> + start_arguments="$start_arguments, ";
> + fi
> + if test -z "$print_arguments"; then
> + print_arguments="$1"
> + else
> + print_arguments="`cat <<EOF
> +$print_arguments
> +$1
> +EOF
> +`"
> + fi
> + start_arguments="$start_arguments \\\"$1\\\""
> + background_start_arguments="$background_start_arguments -c \\\"$1\\\""
> +}
> +
> +_add_config_dir () {
> + for file in `find "$1" -mindepth 1`; do
> + _add_config_file $file
> + done
> +}
> +
> +_load_config () {
> + _add_config_file "$DEFAULT_CONFIG_FILE"
> + _add_config_dir "$DEFAULT_CONFIG_DIR"
> + _add_config_file "$LOCAL_CONFIG_FILE"
> + _add_config_dir "$LOCAL_CONFIG_DIR"
> +}
> +
> +_reset_config () {
> + print_arguments=""
> + start_arguments=""
> + background_start_arguments=""
> +}
> +
> +_print_config () {
> + cat <<EOF
> +$print_arguments
> +EOF
> +}
> +
> check_status () {
> PID=`_get_pid`
> if test -n "$PID"; then
> @@ -129,35 +172,35 @@
> message_prefix="Apache CouchDB needs write permission on the"
> if test ! -w $PID_FILE; then
> echo "$message_prefix PID file: $PID_FILE" >&2
> - exit $SCRIPT_ERROR
> + false
> fi
> if test ! -w $STDOUT_FILE; then
> echo "$message_prefix STDOUT file: $STDOUT_FILE" >&2
> - exit $SCRIPT_ERROR
> + false
> fi
> if test ! -w $STDERR_FILE; then
> echo "$message_prefix STDERR file: $STDERR_FILE" >&2
> - exit $SCRIPT_ERROR
> + false
> fi
> message_prefix="Apache CouchDB needs a regular"
> if test `echo 2> /dev/null >> $PID_FILE; echo $?` -gt 0; then
> echo "$message_prefix PID file: $PID_FILE" >&2
> - exit $SCRIPT_ERROR
> + false
> fi
> if test `echo 2> /dev/null >> $STDOUT_FILE; echo $?` -gt 0; then
> echo "$message_prefix STDOUT file: $STDOUT_FILE" >&2
> - exit $SCRIPT_ERROR
> + false
> fi
> if test `echo 2> /dev/null >> $STDERR_FILE; echo $?` -gt 0; then
> echo "$message_prefix STDERR file: $STDERR_FILE" >&2
> - exit $SCRIPT_ERROR
> + false
> fi
> }
>
> start_couchdb () {
> if test ! "$RECURSED" = "true"; then
> if check_status 2> /dev/null; then
> - exit $SCRIPT_OK
> + exit
> fi
> check_environment
> fi
> @@ -169,22 +212,6 @@
> touch $PID_FILE
> interactive_option="+Bd -noinput"
> fi
> - if test -n "$INI_FILES"; then
> - if test "$RESET_CONFIG" = "true"; then
> - ini_files="$INI_FILES"
> - else
> - ini_files="$DEFAULT_INI_FILE $INI_FILES"
> - fi
> - else
> - ini_files="$DEFAULT_INI_FILE $LOCAL_INI_FILE"
> - fi
> - for file in $ini_files; do
> - if test -n "$start_arguments"; then
> - start_arguments="$start_arguments, ";
> - fi
> - start_arguments="$start_arguments \\\"$file\\\""
> - background_start_arguments="$background_start_arguments -c \\\"$file\\\""
> - done
> command="`%ICU_CONFIG% --invoke` \
> %ERL% $interactive_option -smp auto -sasl errlog_type error +K true \
> -pa %localerlanglibdir%/%couchdbebindir% \
> @@ -196,8 +223,7 @@
> -eval \"crypto:start()\" \
> -eval \"ibrowse:start()\" \
> -eval \"couch_server:start([$start_arguments]), receive done -> done end.\" "
> - if test "$BACKGROUND" = "true" \
> - -a "$RECURSED" = "false"; then
> + if test "$BACKGROUND" = "true" -a "$RECURSED" = "false"; then
> $0 $background_start_arguments -b -r $RESPAWN_TIMEOUT -p $PID_FILE \
> -o $STDOUT_FILE -e $STDERR_FILE -R &
> echo "Apache CouchDB has started, time to relax."
> @@ -263,8 +289,9 @@
> }
>
> parse_script_option_list () {
> + _load_config
> set +e
> - options=`getopt hVc:C:ibp:r:Ro:e:skd $@`
> + options=`getopt hVa:ncibp:r:Ro:e:skd $@`
> if test ! $? -eq 0; then
> display_error
> fi
> @@ -272,10 +299,11 @@
> eval set -- $options
> while [ $# -gt 0 ]; do
> case "$1" in
> - -h) shift; display_help; exit $SCRIPT_OK;;
> - -V) shift; display_version; exit $SCRIPT_OK;;
> - -c) shift; INI_FILES="$INI_FILES $1"; shift;;
> - -C) shift; RESET_CONFIG=false; INI_FILES="$INI_FILES $1"; shift;;
> + -h) shift; display_help; exit;;
> + -V) shift; display_version; exit;;
> + -a) shift; _add_config_file "$1"; shift;;
> + -n) shift; _reset_config;;
> + -c) shift; _print_config; exit;;
> -i) shift; INTERACTIVE=true;;
> -b) shift; BACKGROUND=true;;
> -r) shift; RESPAWN_TIMEOUT=$1; shift;;
> @@ -283,7 +311,7 @@
> -p) shift; PID_FILE=$1; shift;;
> -o) shift; STDOUT_FILE=$1; shift;;
> -e) shift; STDERR_FILE=$1; shift;;
> - -s) shift; check_status; exit $SCRIPT_OK;;
> + -s) shift; check_status; exit;;
> -k) shift; KILL=true;;
> -d) shift; SHUTDOWN=true;;
> --) shift; break;;
>
> Modified: couchdb/trunk/etc/couchdb/Makefile.am
> URL: http://svn.apache.org/viewvc/couchdb/trunk/etc/couchdb/Makefile.am?rev=767164&r1=767163&r2=767164&view=diff
> ==============================================================================
> --- couchdb/trunk/etc/couchdb/Makefile.am (original)
> +++ couchdb/trunk/etc/couchdb/Makefile.am Tue Apr 21 14:51:17 2009
> @@ -48,6 +48,14 @@
> if test ! -f "$(DESTDIR)/$(localconfdir)/local.ini"; then \
> cp $(srcdir)/local.ini "$(DESTDIR)/$(localconfdir)/local.ini"; \
> fi
> + if test ! "$(mkdir_p)" = ""; then \
> + $(mkdir_p) "$(DESTDIR)/$(localconfdir)/default.d"; \
> + $(mkdir_p) "$(DESTDIR)/$(localconfdir)/local.d"; \
> + else \
> + echo "WARNING: You may have to create these directories by hand."; \
> + mkdir -p "$(DESTDIR)/$(localconfdir)/default.d"; \
> + mkdir -p "$(DESTDIR)/$(localconfdir)/local.d"; \
> + fi
>
> uninstall-local:
> rm -f "$(DESTDIR)/$(localconfdir)/local.ini"
>
> Modified: couchdb/trunk/etc/couchdb/default.ini.tpl.in
> URL: http://svn.apache.org/viewvc/couchdb/trunk/etc/couchdb/default.ini.tpl.in?rev=767164&r1=767163&r2=767164&view=diff
> ==============================================================================
> --- couchdb/trunk/etc/couchdb/default.ini.tpl.in (original)
> +++ couchdb/trunk/etc/couchdb/default.ini.tpl.in Tue Apr 21 14:51:17 2009
> @@ -52,7 +52,6 @@
> _stats = {couch_httpd_stats_handlers, handle_stats_req}
>
> [httpd_db_handlers]
> -_compact = {couch_httpd_db, handle_compact_req}
> _design = {couch_httpd_db, handle_design_req}
> _temp_view = {couch_httpd_view, handle_temp_view_req}
>
>
>
--
Noah Slater, http://tumbolia.org/nslater