more install goodness, fixed random jserver bug
authorerickson <erickson@9efc2488-bf62-4759-914b-345cdb29e865>
Tue, 26 Jul 2005 17:08:59 +0000 (17:08 +0000)
committererickson <erickson@9efc2488-bf62-4759-914b-345cdb29e865>
Tue, 26 Jul 2005 17:08:59 +0000 (17:08 +0000)
added an opensrf_all script to load jserver, router, and opesnrf core

git-svn-id: svn://svn.open-ils.org/OpenSRF/trunk@431 9efc2488-bf62-4759-914b-345cdb29e865

bin/opensrf_all [new file with mode: 0755]
examples/bootstrap.conf.example
src/Makefile
src/gateway/gateway.xml.example
src/jserver/jserver-c.c
src/perlmods/OpenSRF/System.pm
src/router/router_config.xml.example
src/utils/socket_bundle.c

diff --git a/bin/opensrf_all b/bin/opensrf_all
new file mode 100755 (executable)
index 0000000..2c12c66
--- /dev/null
@@ -0,0 +1,140 @@
+#!/bin/bash
+# --------------------------------------------------------------------
+# Copyright (C) 2005  Georgia Public Library Service 
+# Bill Erickson <highfalutin@gmail.com>
+
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# --------------------------------------------------------------------
+
+
+# --------------------------------------------------------------------------
+# Utility script for starting the jserver (the opensrf jabber server), the
+# opensrf router, and opensrf proper.
+# see vars below for ways to alter the behavior and directory locations
+# --------------------------------------------------------------------------
+
+
+
+# --------------------------------------------------------------------------
+# Change to suit
+# --------------------------------------------------------------------------
+PREFIX=/openils;
+ETCDIR="$PREFIX/conf";  # config files are found here
+LOGDIR="$PREFIX/var/log";      # logs go here
+BINDIR="$PREFIX/bin";  # executables are found here
+BOOTSTRAP="$ETCDIR/bootstrap.conf";    # opensrf config is here
+
+# should these be started? set to "" or nothing to disable them
+JSERVER="1";
+ROUTER="1";
+OPENSRF="1";
+
+JSERVERSOCK="$PREFIX/var/sock/jserver.sock";   # jabber server socket file 
+JSERVERLOG="$LOGDIR/jserver.log" # jabber server log 
+JSERVERPORT=5222;                                              # jabber server port 
+JSERVERLEVEL=4; # can be 1-4, 4 is the highest
+ROUTERLOG="$LOGDIR/router.log" # jabber router log
+# --------------------------------------------------------------------------
+# --------------------------------------------------------------------------
+
+JSERVERBIN="jserver-c" 
+export LD_LIBRARY_PATH="$PREFIX/lib:$LD_LIBRARY_PATH";
+export PERL5LIB="$PREFIX/lib/perl5:$PERL5LIB";
+export PATH="$PREFIX/bin:$PATH";
+
+
+function fail { echo "$0 exited: $*"; exit 99; }
+
+
+function startJserver {
+
+       ACTIVE=$(netstat -an | grep $JSERVERPORT);
+       
+       if [ ! -z "$ACTIVE" ]; then
+
+               echo "Port $JSERVERPORT is busy. Waiting 60 seconds for the port to clear up..."
+
+               for ((i=0; i!= 60; i++)) {
+                       ACTIVE=$(netstat -an | grep $JSERVERPORT);
+                       [ -z "$ACTIVE" ] && break; 
+                       echo -n "+";
+                       sleep 1;
+               }
+               echo "";
+               ACTIVE=$(netstat -an | grep $JSERVERPORT);
+               [ ! -z "$ACTIVE" ] && fail "Port $JSERVERPORT is busy...exiting";
+       fi;
+       
+       rm -f "$JSERVERSOCK";
+       nohup "$BINDIR/$JSERVERBIN" $JSERVERPORT "$JSERVERSOCK" "$JSERVERLEVEL" "$JSERVERLOG" &
+}
+
+
+function startRouter {
+       nohup "$BINDIR/router" "$ETCDIR/router_config.xml" &
+}
+
+function startOpenSRF {
+        "$BINDIR/opensrf_ctl" start "$BOOTSTRAP";
+}
+
+
+
+function makeMeGo {
+       
+       if [ ! -z "$JSERVER" ]; then
+               echo "Starting Chop Chop, Jabber (jserver-c)...";
+               startJserver;
+               echo "Chop Chop started OK";
+       fi
+
+       sleep 1;
+
+       if [ ! -z "$ROUTER" ]; then
+               echo "Starting router...";
+               startRouter;
+               echo "Router started OK";
+       fi
+
+       sleep 1;
+
+       if [ ! -z "$OPENSRF" ]; then
+               echo "Starting OpenSRF...";
+               startOpenSRF;
+               echo "OpenSRF started OK";
+       fi
+               
+}
+
+
+function stopMe {
+
+       echo "Stopping OpenSRF...";
+       "$BINDIR/opensrf_ctl" stop;
+       sleep 2;
+       
+       echo "Stopping The Router...";
+       killall router;
+       
+       sleep 2;
+       
+       echo "Stopping Chop Chop...";
+       killall jserver-c;
+}
+
+
+
+[ "$1" = "stop" ] && stopMe && exit;
+[ "$1" = "restart" ] && stopMe && makeMeGo && exit;
+
+makeMeGo;
+
+
index ae6fa25..add5120 100644 (file)
@@ -3,22 +3,38 @@
 # ----------------------------------------------------------
 [bootstrap]
 
+# location of the opensrf.xml config file
 settings_config        = /path/to/opensrf.xml
+
+# log files directory
 log_dir                                = /path/to/log
 
+# log level
 debug                                  = ERROR
 #debug                         = INFO
 #debug                         = DEBUG
 #debug                         = INTERNAL
 
+# the jabber login of the router (changing this will likely cause problems)
 router_name                    = router
+
+# all jabber domains we want our app to connect to
 list:domains           = router1.domain.com, router2.domain.com
+
+# jabber login
 username                               = jabber_username
+
+# jabber password
 passwd                         = jabber_password
+
+# if port is non-numeric (e.g. /tmp/mysock.sock) then we will attempt to
+# connect to the specified string as a unix socket file 
+# This works with Chop Chop jabber only (opensrf custom jabber server)
 port                                   = 5222
 
 # --------------------------------------
 
+# log file names
 [logs]
 debug                                  = debug.log
 error                                  = error.log
index 79592ea..0cbe7bb 100644 (file)
@@ -115,6 +115,7 @@ perl-install:       install-prep
        cp -r perlmods/* $(PERLDIR)/
        cp ../examples/bootstrap.conf.example $(ETCDIR)
        cp ../bin/opensrf_ctl $(BINDIR)
+       cp ../bin/opensrf_all $(BINDIR)
        cp ../examples/opensrf.xml.example $(ETCDIR)
 
 
index dbe9775..43cebbd 100644 (file)
@@ -1,19 +1,27 @@
 <!-- Bootstrap config file for the C opensrf_stack library -->
 <config>
        <bootstrap>
-               <settings_config>/path/to/opensrf.xml</settings_config>
+               <!-- log level (WARN, INFO, DEBUG) -->
                <debug>INFO</debug>
+
+               <!-- best to leave this untouched if possible -->
                <router_name>router</router_name>
 
+               <!-- jabber domains to connect to (domain1, domain2, ...) -->
                <domains>
                        <domain1>host.example.com</domain1>
                </domains>
 
+               <!-- jabber connection information. Note that unix socket connectes are
+                               not yet implemented with any of the C libraries so port will 
+                               have to be a port number -->
                <username>my_jabber_login</username>
                <passwd>my_jabber_password</passwd>
                <port>5222</port>
 
        </bootstrap>
+
+       <!-- log file location -->
        <logs>
                <client>/path/to/log/gateway.log</client>
        </logs>
index 80e9004..2b83941 100644 (file)
@@ -182,6 +182,9 @@ void _jserver_remove_client_id(jserver* js, int id) {
 
        jclient_node* node = js->client;
 
+       debug_handler("Searching for jclient to remove with id %d", id);
+       debug_handler("First node in list has id %d", node->id );
+
        if(node->id == id) {
                js->client = node->next;
                debug_handler("Removing the first jserver client");
@@ -190,11 +193,11 @@ void _jserver_remove_client_id(jserver* js, int id) {
                return;
        }
 
-       debug_handler("Searching for jclient to remove");
        jclient_node* tail_node = node;
        node = node->next;
 
        while(node) {
+               debug_handler("Checking node %d to remove", node->id);
                if(node->id == id) {
                        tail_node->next = node->next;
                        debug_handler("Removing a jserver client");
index eea252b..87d7848 100644 (file)
@@ -145,7 +145,7 @@ sub bootstrap {
                my $apps = $client->config_value("activeapps", "appname");
                if(!ref($apps) eq "ARRAY") { $apps = [$apps]; }
 
-               if(@$apps == 0) {
+               if(!defined($apps) || @$apps == 0) {
                        print "No apps to load, exiting...";
                        return;
                }
@@ -167,7 +167,7 @@ sub bootstrap {
        my $apps = $client->config_value("activeapps", "appname" );
        if(!ref($apps)) { $apps = [$apps]; }
 
-       if(@$apps == 0) {
+       if(!defined($apps) || @$apps == 0) {
                print "No apps to load, exiting...";
                return;
        }
index c4c11e7..f9c90a7 100644 (file)
 
        </trusted_domains>
 
+
+       <!-- jabber connection information. Note that unix socket connectes are
+                       not yet implemented with any of the C libraries so port will 
+                       have to be a port number -->
+
        <transport>
                <server>jabber_server.domain.com</server>
                <port>5222</port>
@@ -28,6 +33,7 @@
                <max_reconnect_attempts>5</max_reconnect_attempts>
        </transport>
 
+
        <log>
                <file>/pines/log/router.log</file>
 
index 639f738..24ebb49 100644 (file)
@@ -299,6 +299,8 @@ int _socket_route_data(
 
        if(mgr == NULL) return -1;
 
+       int last_failed_id = -1;
+
 
        /* come back here if someone yanks a socket_node from beneath us */
        while(1) {
@@ -310,9 +312,20 @@ int _socket_route_data(
                while(node && (handled < num_active)) {
        
                        int sock_fd = node->sock_fd;
+                       
+                       if(last_failed_id != -1) {
+                               /* in case it was not removed by our overlords */
+                               debug_handler("Attempting to remove last_failed_id of %d", last_failed_id);
+                               socket_remove_node( mgr, last_failed_id );
+                               last_failed_id = -1;
+                               status = -1;
+                               break;
+                       }
+
        
                        /* does this socket have data? */
                        if( FD_ISSET( sock_fd, read_set ) ) {
+
        
                                debug_handler("Socket %d active", sock_fd);
                                handled++;
@@ -327,6 +340,7 @@ int _socket_route_data(
                                /* someone may have yanked a socket_node out from under 
                                        us...start over with the first socket */
                                if(status == -1)  {
+                                       last_failed_id = sock_fd;
                                        debug_handler("Backtracking back to start of loop because "
                                                        "of -1 return code from _socket_handle_client_data()");
                                }