Patch from Dan Scott to move JSON to OpenSRF::Utils::JSON:
I noticed back when I was first installing OpenSRF that it includes a
module, JSON.pm, that exists at the root level of the package
directories. This would be fine, except it conflicts with a CPAN
module that is also named JSON, which confuses the CPAN installer when
you check for upgrades and conceivably could lead to a broken system.
I suggested to Mike that it would probably make sense to move the
OpenSRF version of the module into the OpenSRF/Utils/ package
namespace, and he agreed. Of course, there are ramifications
throughout the code, so I've tried to be extra-careful in catching and
correcting all of the places where the use of this module surfaces in
both OpenSRF and Evergreen.
Patch from Dan Scott to finish up the removal of bootstrap.conf:
Attached are patches that complete the work that I should have done in
my first patch. I also modify the Makefile in OpenSRF to prevent
bootstrap.conf.example from being copied from the OpenSRF/examples
directory into /openils/conf/.
miker [Sat, 30 Jun 2007 03:14:36 +0000 (03:14 +0000)]
Patch from Scott McKellar implementing cleaner daemonization; moved daemonizing code above worker forking in system boostrapping:
1. As long as I was in the neighborhood, I replaced the error messages
going to stderr with messages going to the logging machinery.
2. I altered the comment just above daemonize(), because the original
was inaccurate. This function does not change the process title.
3. Pedantic point: I captured the return value of fork() with a pid_t
instead of an int.
4. After the fork, the parent process terminates with _exit()
instead of exit(). That way it doesn't flush any buffers or close
any files. It also doesn't call any functions registered with
atexit(). In fact it doesn't do much of anything except get out of
the way and let the child process take its place in every way.
5. The child process switches to the root directory, calls setsid()
to create a new session, and freopens the three standard streams
to /dev/null.
I could have changed directories before the fork, or at any of
several other places. I don't think it makes any difference.
I could also have done the freopens before the fork, but if the
fork failed, I might not have a way to report it (if the logging is
going to stderr for some reason).
Note that I'm not flushing any buffers, apart from the three standard
streams. There's no need to. The child process inherits the file
descriptors intact and can do with them whatever it likes. The
parent may have died, but the estate doesn't have to go through
probate.
I didn't add any error checking for chdir(), setsid(), or freopen().
The first two are unlikely to fail, as is the freopen of stdin. The
freopens of stderr and stdout could fail, if for example they are
redirected to a full disk. I don't know how paranoid we need to be.
miker [Fri, 29 Jun 2007 03:55:37 +0000 (03:55 +0000)]
Patch from Dan Scott to move perl OpenSRF core bootstrapping settings into
opensrf_core.xml. This removes the dependency on the INI style bootstrap.conf
file:
Building on Nathan Eady's suggestion / intention from December
(http://list.georgialibraries.org/pipermail/open-ils-dev/2006-December/000177.html),
here is a patch that enables OpenSRF to avoid duplicating settings in
opensrf_core.xml and bootstrap.conf by having both Perl and C apps
read from opensrf_core.xml
The major limitation is that I've hardcoded /config/opensrf to appear as
the 'bootstrap' section of config for compatibility with the expectations of
the rest of OpenSRF. A broader patch would convert all of those other calls
from config->bootstrap->blah to config->opensrf->blah and make the
siblings of /config/opensrf visible in the config as well, as a more
generally useful approach.
Applied with minor changes to avoid API regressions and remove unneeded code.
miker [Fri, 29 Jun 2007 02:24:47 +0000 (02:24 +0000)]
arg ... Patch from Scott McKellar that:
1. When we log messages to a log file, we open and close the file
for each message. If the open fails, we write a message to stderr
about the failure to open, but we discard the original message that
we were asked to issue.
With this patch, after issuing the message about the failure to
open, we write the original message to stderr.
I believe that this change plugs the last message leak. Now if we're
asked to issue a message, by golly we're going to issue it, one way
or another.
Of course the user may still not see the message, either through
inattention or, for example, because stderr is redirected to
/dev/null. In that case the user is just a poo-poo head, and I have
no sympathy for him.
2. In an earlier post I proposed to change osrfLogSetType() so that
it would return the previous log type. That way one could
temporarily change the log type and then restore it later, without
knowing in advance what to restore it to.
Upon further reflection I decided that the only plausible use for
this trick would be to reroute messages to standard error, and I
might as well provide a mechanism limited to this purpose.
Accordingly I created two new functions and prototyped them in log.h:
osrfLogToStderr() reroutes messages to stderr, and saves the previous
log type internally.
osrfRestoreLogType() restores the log type previously saved, if any.
This interface provides fewer ways for the calling code to mess up
than what I had originally contemplated. First, the calling code
doesn't have to keep track of the previous log type. Second, if the
messages are already rerouted, osrfLogToStderr() will do nothing.
One needn't worry about nested reroutings, or maintaining a stack of
log types, or anything of the sort.
If we ever need anything fancier we can build it, but I don't think
we will.
3. Wherever a function takes no parameters, I coded "void" as the
formal parameter list. Otherwise the compiler doesn't know whether
the function takes parameters or not.
miker [Thu, 28 Jun 2007 03:14:06 +0000 (03:14 +0000)]
Patch from Scott McKellar:
At one time. if we had trouble reading or parsing the configuration
file, we would issue log messages to complain. However those log
messages didn't have anywhere to go because, not having loaded the
configuration file, we didn't know where to write the messages.
The earlier patch wrote the same messages to standard error as well
as to the logging machinery, so that they would be visible.
These extra writes are no longer necessary, With recent changes to
the logging machinery, all log messages will go to standard error
if no other destination has been defined for them.
Accordingly this patch removes two messages, now redundant, that
were being written to standard error.
miker [Tue, 26 Jun 2007 03:04:37 +0000 (03:04 +0000)]
Patch from Scott McKellar, finishing off the "log to stderr when all esle fails" work:
Currently if we have asked to log to a file, but we haven't yet
specified the name of that log file, then any messages issued are
dropped.
With this patch, any messages issued under these conditions will be
rerouted to standard error. The rerouting is only temporary,
applying only to the current message.
miker [Mon, 25 Jun 2007 03:06:56 +0000 (03:06 +0000)]
Patch from Scott McKellar to improve default logging:
1. In log.h I added another macro OSRF_LOG_TYPE_STDERR by which the
application can specifically request logging to standard error.
2. In log.c I initialze _osrfLogType to OSRF_LOG_TYPE_STDERR so that
the application can issue a log message even if it hasn't called
osrfLogInit() yet.
3. I added the const qualifier to the parameters of the functions
_osrfLogToFile() and _osrfLogSetXid().
4. In osrfLogCleanup() I set _osrfLogAppname and _osrfLogFile to
NULL after freeing them. Otherwise the application could cause
needless mischief by calling this function twice.
5. Also in osrfLogCleanup() I set _osrfLogType back to the default
OSRF_LOG_TYPE_STDERR so that the application can still issue a
message after calling osrfLogCleanup().
6. I rewrote osrfLogSetType() to use switch/case instead of an "if".
Now that we have three valid values to check instead of two, a
switch/case is a little tidier. Also the default branch applies
the default log type OSRF_LOG_TYPE_STDERR.
7. _osrfLogDetail() had a local variable named "l" (lower case L).
I renamed it to "label" because "l" looks too much like a digit.
8.Also in _osrfLogDetail(): I added a branch to write a message to
stderr when _osrfLogType is OSRF_LOG_TYPE_STDERR.
9. The existing _osrfLogToFile function sizes and declares a buffer
named "buf", fills it with zeros, and then doesn't do anything with
it. This buffer is probably a relic of some earlier version. I
eliminated it.
10. A few lines thereafter, I eliminated a useless call to bzero().
11. The call to strftime() contained a hard-coded buffer size. I
changed it to use the sizeof operator, so that the buffer size is
defined in only one place.
12. If we can't open the log file, we write a message to stderr.
In this message I changed "file" to "log file" to make the meaning
more clear to a benighted and panicky user.
13. If after writing the message we can't close the file, the
existing code logs an error message by calling osrfLogWarning().
However in this circumstance this latter message will probably meet
the same fate, and no one will ever see it. I changed the code so
as to write this message to stderr.
erickson [Thu, 21 Jun 2007 16:19:20 +0000 (16:19 +0000)]
Merged libopensrf source directories (libtransport, libstack, and utils) into a single libopensrf directory
Moved opensrf headers to trunk/include/opensrf
Moved objson headers to trunk/include/objson
Updated #include's throughout to be fully qualified. e.g. <opensrf/utils.h>, <objson/object.h>
Removed old, unused trunk/src/xinclude code
Cleaned up Makefiles to support new directory layout
miker [Wed, 20 Jun 2007 03:49:48 +0000 (03:49 +0000)]
Added osrfLogGetLevel method, then applied
partial patch from Scott McKellar:
Whenever a declared identifier had two leading underscores, I
removed the first one, except for a few cases where I removed the
second one and kept the first one.
I moved the prototypes for the following functions to log.c, and
declared them static:
miker [Sat, 16 Jun 2007 23:58:35 +0000 (23:58 +0000)]
Patch from Scott McKellar to add stderr logging when config (and thus configured logging) is unavailable:
If osrfConfigInit() is unable to load the configuration file,
it issues error messages to the log.
Unfortunately, if we can't load the configuration file, we don't know
where the log file is. The usual result is that the messages don't
go anywhere. At best, depending on some convoluted details that
aren't worth going into here, the messages will go to an obscure
system-wide syslog file that only a hardened system administrator
could love.
In this patch I send similar messages to standard error, so that
someone can see them. It might make sense to delete the calls
to osrfLogWarning(), but I left them alone.
erickson [Fri, 15 Jun 2007 03:18:51 +0000 (03:18 +0000)]
Cleaned up the network hint / object registration code in net_obj
Added object2XML function for posting XML to the opensrf gateway
updated the gateway to deal with the new object API
erickson [Thu, 14 Jun 2007 16:03:57 +0000 (16:03 +0000)]
Added a new XML-2-JSON utility for converting XMLized OpenSRF objects to their internal JSON representations
Added a new gateway param "input_format" to define the param format.
Options are "json" and "xml".
Unless overridden, input_format will match format
miker [Tue, 12 Jun 2007 02:52:42 +0000 (02:52 +0000)]
Patch from Dan Scott to fix up the OpenSRF build process in the new SVN repo:
OpenSRF-svn-build.patch: this modifies the objson headers to specify
that "utils.h" is actually found in "opensrf/utils.h". I beleive the
ILS build was failing with the unqualified include because it didn't
have access to the utils.h file that used to be kept around in a
common TMP directory when OpenSRF and ILS were built simultaneously.
miker [Tue, 12 Jun 2007 01:10:05 +0000 (01:10 +0000)]
Patch from Scott McKellar with minor adjustments:
1. In an earlier patch to osrf_settings_host_value_object(), we
contrived to abort the program deliberately instead of crashing with
a segmentation violation. The current patch applies the same
treatment to the similar function osrf_settings_host_value(),
although I don't know that anyone has ever reported a problem at
this spot. I rearranged the error message a bit so that it would
be distinct from the other one.
2. If the config pointer is null, it's because osrf_settings_retrieve()
was unable to populate it, or was never called. There are two ways
it might fail: it might not get an osrf_message from
osrf_app_session_request_recv(), or the osrf_message it gets might
not have the _result_content member populated. I added a couple of
log messages to distinguish between these possibilities. Maybe they
will make diagnosis easier.
3. The latter change also plugs a small memory leak. If we get an
osrf_message but it has no _result_content, the present code neglects
to free the osrf_message.
miker [Tue, 12 Jun 2007 01:08:25 +0000 (01:08 +0000)]
Patch from Scott McKellar:
1. I declared several functions as static, and moved their prototypes
from the header file to the implementation file. In each case I
verified that nothing else in the code base calls it.
2. I removed the socket_send_nowait prototype from the header, and
commented it out in the implementation file. I was tempted to
eliminate it entirely, but stayed my hand. It is a trivial wrapper
for _socket_send(), and nothing calls it.
3. Nothing calls several other functions either. However unlike
socket_send_nowait() they are non-trivial functions, and they appear
to be intended for external linkage, so I left them alone for
potential future use.
4. The identifier _socket_print_list is reserved for local scope,
and should not have external linkage, because it starts with an
underscore followed by a lower case letter. I may submit a patch to
rename it some day if I ever get around to it, but that will require
a change in socket_test.c, which calls it.
5. I moved the definition of the RBUFSIZE macro from the header file
into the implmentation file. It is an internal detail that no
other translation unit should know or care about.
miker [Tue, 12 Jun 2007 01:05:53 +0000 (01:05 +0000)]
Patch from Scott McKellar:
1. I made __osrfChatXMLErrorOcurred and __osrfChatClientSentDisconnect
static, and removed the leading underscores from their names. No other
source files refer to them.
2. In osrfNewChatServer() I explicitly initialize the port member to
zero -- which is already happening implicitly due to the memset() in
safe_malloc().
3. Also in osrfNewChatServer(): the existing code populates the secret
member only if the secret parameter is not NULL, and leaves it
uninitialized otherwise. However if the secret parameter were NULL
we would have already performed an early exit. I populate the secret
member unconditionally, just as we do with the domain member. I also
moved this assignment up with the other assignments, for a more
readable flow.
4. In osrfChatServerFree(), the existing code leaves several memory
references dangling, without freeing them. I added code to free the
domain member, the deadNodes member, and finally the osrfChatServer
itself.
miker [Tue, 29 May 2007 02:43:20 +0000 (02:43 +0000)]
Patch from Dan Scott; adds -rpath=$(LIBDIR) to the default LDFLAGS for
OpenSRF, obviating the need to set up non-standard system search paths
for any libs that OpenSRF loads that either don't have a lib prefix
or live outside the normal system library paths.
miker [Mon, 28 May 2007 20:12:23 +0000 (20:12 +0000)]
Patch from Scott McKellar; reasonable and non-intrusive diagnostic message in
the case that we've been given on port or unix socket path to connect over.
miker [Mon, 28 May 2007 20:08:47 +0000 (20:08 +0000)]
Patch from Scott McKellar; allows the compiler to warn us of missing casts
coming from undefined safe_malloc()s, NULL-initialize pointers (\0 != NULL).
miker [Mon, 28 May 2007 19:57:19 +0000 (19:57 +0000)]
Several combined cleanup patches from Scott McKellar:
* remove leading underscores from static vars and functions
* make static functions, well, static
* tighten up the definition of funcs that take 0 params
miker [Sun, 27 May 2007 00:49:10 +0000 (00:49 +0000)]
http://list.georgialibraries.org/pipermail/open-ils-dev/2007-May/001092.html
Patch from Scott McKellar to:
* Make default config object pointer static (module local)
* Clean up variable name to remove leading underscores
* Remove think-o which would deallocate the default config when
loading any other
* Fix error log message
miker [Mon, 21 May 2007 02:31:52 +0000 (02:31 +0000)]
strndup() and strnlen() implementations from Jeroen Ruigrok van der Werven
See bug #551 for original details -- http://open-ils.org/cgi-bin/bugzilla/show_bug.cgi?id=551
erickson [Fri, 18 May 2007 16:57:56 +0000 (16:57 +0000)]
returning OK status in respond method, instead of no status at all. most code uses respond_complete, which is why this has not been an issue in the past. writing new client libs exposed it, though