[Opensrf-commits] r2043 - tags/rel_1_4_1 (dbs)
svn at svn.open-ils.org
svn at svn.open-ils.org
Thu Oct 14 22:12:43 EDT 2010
Author: dbs
Date: 2010-10-14 22:12:41 -0400 (Thu, 14 Oct 2010)
New Revision: 2043
Modified:
tags/rel_1_4_1/ChangeLog
Log:
Commit 1.4.0-1.4.1 ChangeLog
Modified: tags/rel_1_4_1/ChangeLog
===================================================================
--- tags/rel_1_4_1/ChangeLog 2010-10-15 02:00:46 UTC (rev 2042)
+++ tags/rel_1_4_1/ChangeLog 2010-10-15 02:12:41 UTC (rev 2043)
@@ -1 +1,1977 @@
-#ChangeLog
+Changes in the 1.4.1 final release:
+
+2010-10-12 erickson
+
+ * src/javascript/opensrf.js: when we add xhr responses onto the end of the queue,
+ stash the original session as well, otherwise we're attempting to ask a session
+ questions about requests it's not tracking
+
+2010-08-18 erickson
+
+ * src/javascript/opensrf.js: back-port 2008: async message handling ordering
+
+Changes in the 1.4.0 final release:
+
+2010-07-01 dbs
+
+ * src/extras/Makefile.install: Backport r1976 to add support for Ubuntu Lucid;
+ make Karmic an alias for Lucid.
+ Bump libmemcached version to 0.40
+
+ * ChangeLog: Check in ChangeLog for 1.2.2 - 1.4.0
+
+ * .: Tag 1.4.0 for release
+
+ * Create rel_1_4_0 branch for next major release
+
+ * Merge r1950 through r1969 from trunk; prep for 1.4.0 release
+
+2010-04-22 dbs
+
+ * Gutsy is way out of support, pull it from the list and add Karmic
+
+ * Create rel_1_4 branch for next major OpenSRF release
+
+2010-04-21 scottmk
+
+ * Fix the jsonFormatString function.
+
+ Specifically: it was misbehaving when a string literal contained
+ a comma, square bracket, or curly brace. Now it pays attention to
+ whether those characters are in within quotes or not, and treats
+ them accordingly.
+
+ It also applies more consistent indentation by consuming
+ extraneous white space that would otherwise lead to ragged margins.
+
+ M src/libopensrf/osrf_json_tools.c
+
+2010-04-15 dbs
+
+ * Forward-port r1943: install packaged DateTime Perl modules instead of CPAN
+
+2010-03-22 scottmk
+
+ * Apply the const qualifier to the return value from osrfMessageGetResult().
+
+ M include/opensrf/osrf_message.h
+ M src/libopensrf/osrf_message.c
+
+ * Apply the const qualifier to one variable. Tidy up white space.
+
+ M src/gateway/osrf_json_gateway.c
+
+ * Added a const qualifier to one variable.
+
+ Tidied up white space.
+
+ M src/c-apps/osrf_version.c
+
+ * Tidying up white space; no substantive changes.
+
+ M src/c-apps/osrf_math.c
+
+2010-03-18 miker
+
+ * just adding a marker for where the "peer domain" logic should likely be plugged
+ in
+
+2010-03-16 scottmk
+
+ * A small performance tweak.
+
+ When we receive a new message, we update current_locale with the
+ locale of the message.
+
+ The tweak: if current_locale is already the same as the locale of
+ the message (which is presumably most of the time in practice), then
+ don't update it. That way we avoid a malloc() and a free().
+
+ M src/libopensrf/osrf_message.c
+
+2010-03-08 scottmk
+
+ * Miscellaneous minor changes. mostly for clarity:
+
+ 1. Changed return type of _osrfAppRegisterSysMethods from int to void,
+ since we never looked at the return code anyway.
+
+ 2. In osrfAppRegisterApplication(): 0pen the shared object before
+ allocating an osrfApplication, so that we don't have to free the
+ osrfApplication if the open fails.
+
+ 3. In osrfAppRegisterExtendedMethod(): when creating an atomic method,
+ pass the userData pointer to _osrfAppBuildMethod() instead of
+ installing it on a separate line.
+
+ 4. In _osrfAppBuildMethod(): for an atomic method, build the method
+ name correctly the first time, instead of building it incorrectly
+ and later replacing it.
+
+ 5. In osrfAppRunMethod(): rearranged things a bit for clarity.
+ Simplified the declaration and dereferencing of the meth pointer.
+
+ 6. In osrfAppIntrospect(): Introduced an early return in order to
+ reduce the level of indentation of the rest of the function. Moved
+ some declarations closer to their first uses.
+
+ 7. In osrfAppIntrospectAll(): moved the declaration of resp into the
+ loop where it is used.
+
+ 8. Finished adding doxygen-style comments to document the functions.
+ Touched up the white space here and there.
+
+ M src/libopensrf/osrf_application.c
+
+2010-03-02 dbs
+
+ * Apply patch from Lee Dickens <ldickens at esilibrary.com> to add support for
+ RedHat/CentOS
+
+ Also, remove support for Ubuntu Gutsy while we're in the file
+
+2010-02-26 scottmk
+
+ * Tidying up various things; nothing very substantial.
+
+ 1. Added newlines and indentation within long macros to make them look
+ more like real code.
+
+ 2. The OSRF_METHOD_VERIFY_DESCRIPTION macro is not used anywhere. I
+ moved it from the header into the implementation file and commented it
+ out, preserving it like a fly in amber in case we ever want to revive it.
+
+ 3. Moved the definition of the struct osrfApplication from the header
+ into the application file, since no other file references it.
+
+ 4. Moved the OSRF_SYSMETHOD_* macros from the header into the implementation
+ file, since they are not referenced elsewhere.
+
+ 5. Turned _osrfAppFindApplication() and osrfAppFindMethod into inline
+ functions, since each is a trivial wrapper for another function.
+
+ 6. Added a formal void parameter to osrfAppRunExitCode, so that its
+ signature is a prototype rather than a mere declaration.
+
+ 7. Removed a couple of redundant sanity checks.
+
+ 8. Further tinkered with comments and white space.
+
+ M include/opensrf/osrf_application.h
+ M src/libopensrf/osrf_application.c
+
+2010-02-24 scottmk
+
+ * Tidy up white space and comments; no substantive changes.
+
+ M include/opensrf/osrf_application.h
+ M src/libopensrf/osrf_application.c
+
+ * 1. Refactored _do_client() and _do_server() so as to untangle some
+ needlessly convoluted and confusing logic.
+
+ 2. In particular: eliminated osrf_stack_application_handler() altogether,
+ breaking it into pieces and incorporating them into the calling functions.
+
+ 3. Added doxygen-style comments to document all functions.
+
+ M include/opensrf/osrf_stack.h
+ M src/libopensrf/osrf_stack.c
+
+2010-02-23 dbs
+
+ * Simple demo of text services; returning a string, an array, a hash
+
+2010-02-22 scottmk
+
+ * 1. Added doxygen-style comments to document all functions.
+
+ 2. For osrfConfigHasDefault() and osrfConfigCleanup(): added a formal void
+ parameter
+ so that the header will contain prototypes rather than mere declarations.
+
+ 3. In osrfConfigValueObject: added a sanity check for a non-loaded
+ configuration.
+
+ 4. In osrfConfigGetValueList(): replaced a call to jsonObjectToSimpleString()
+ with
+ a call to jsonObjectGetString(), in order to eliminate a malloc() and free().
+
+ 5. Tidied up the white space here and there.
+
+ M include/opensrf/osrfConfig.h
+ M src/libopensrf/osrfConfig.c
+
+2010-02-21 scottmk
+
+ * 1. Reworked the xmlDocToJSON and _xmlDocToJSON functions for clarity.
+ In particular: _xmlDocToJSON() now returns void, and requires its
+ second parameter (the jsonObject*) to be non-NULL. The old version
+ behaved differently depending on whether the second parameter was NULL.
+ I found that arrangement confusing.
+
+ 2. Finished adding doxygen-style comments; removed comments from the
+ header so that they won't override the more complete comments in the
+ implementation file.
+
+ 3. Tinkered with white space here and there.
+
+ M include/opensrf/xml_utils.h
+ M src/libopensrf/xml_utils.c
+
+2010-02-15 scottmk
+
+ * 1. Change xmlSaxAttr() to return const char* instead of
+ non-const char*.
+
+ 2. Add some doxygen-style comments.
+
+ 3. Tidy up the white space here and there.
+
+ M include/opensrf/xml_utils.h
+ M src/libopensrf/xml_utils.c
+
+2010-02-10 phasefx
+
+ * fix usage example
+
+2010-02-07 scottmk
+
+ * Tidying up various things; nothing substantial.
+
+ 1. Moved most of the header into the implementation, since most of it
+ is not referenced anywhere else, and is not likely ever to be.
+
+ 2. Sprinkled the const qualifier here and there.
+
+ 3. Cleaned up the white space and comments a bit.
+
+ M src/jserver/osrf_chat.c
+ M src/jserver/osrf_chat.h
+
+2010-02-06 scottmk
+
+ * 1. For the "request" command: removed the calls to osrfAppSessionConnect()
+ and osrf_app_session_disconnect(). There's no point in opening and closing
+ a connection for a single request.
+
+ 2. For the "math_bench" command: coerce the first command argument to a
+ positive value. In the old code, a zero value led to a division-by-zero,
+ and a negative value led to a segfault.
+
+ 3. For the "math_bench" command: accept an optional second parameter
+ to control whether and when we call osrf_app_session_disconnect(). It
+ has valid values of 0 (the default), 1, and 2; values out of range are
+ coerced to valid values.
+
+ 4. In do_math(): initialize the array of floats by setting each float
+ to zero, instead of by using memset() to fill the array with
+ all-bits-zero. The C Standard does not guarantee that all-bits-zero
+ represents zero for a float.
+
+ (This last change shouldn't make any difference anyway, because each float
+ in the array is overwritten before it is read. Still, anything not worth
+ doing is not worth doing badly.)
+
+ M src/srfsh/srfsh.c
+
+2010-02-05 dbs
+
+ * Ensure target JavaScript directory is created before copying files into it
+
+ Thanks to Warren Layton for spotting this on a fresh install
+
+2010-02-03 dbs
+
+ * Forward-port r1919 from rel_1_2 to prevent Internet Explorer from making
+ multipart-mixed-replace calls
+
+2010-02-03 miker
+
+ * add non-destructive methods for grabbing first and last responses on the
+ response queue
+
+2010-02-02 dbs
+
+ * Forward-port r1908 + r1914 from rel_1_2 to improve portability without breaking
+
+2010-02-01 scottmk
+
+ * Rearrange the error handling a bit in send_request(). The old code
+ looked like it would segfault in the case of a relay command.
+
+ M src/srfsh/srfsh.c
+
+2010-01-29 dbs
+
+ * Forward-port Dan McMahill's portability patches r1907 and r1908
+
+ Improve support for building, compiling, and running OpenSRF on non-Linux
+ distributions such as NetBSD.
+
+2010-01-28 dbs
+
+ * Provide a thread if the translator wasn't passed one in the request headers
+
+ The OpenSRF-over-HTTP spec says that the translator will generate a thread
+ in the response if one wasn't passed in the request; however, we were trying
+ to pass a null pointer back and that doesn't work so well.
+
+ As we're already generating a reasonably unique string for the purposes
+ of delim in the multipart data response, let's also use that for the
+ response thread when necessary.
+
+ * Add an example Apache virtual host configuration and curl script for testing the
+ math service
+
+ * Prevent WebKit-based browsers (Chrome and Safari) from requesting multipart
+
+ "You want the multipart? YOU CAN'T HANDLE THE MULTIPART!"
+
+2010-01-25 erickson
+
+ * Added some fault tolerance to the inbound-to-unixserver message handoff process.
+ In some conditions, the unix socket will result in sigpipe (anecdotally, seen
+ more oftenvirtualized environments). these changes add a call to select before
+ writing to the socket to check for socket availability and add a sigpipe handler
+ that forces the inbound process to wait a brief period of time before trying the
+ delivery again
+
+2010-01-21 erickson
+
+ * similar to recent opensrf-c changes, keep active and idle child procs in
+ separate lists for faster access and simpler code. also some formatting/comment
+ updates
+
+2010-01-21 scottmk
+
+ * Bug fix.
+
+ When all the servers for a given server go away, the router deletes the
+ server class from its internal data structures. However that can happen
+ in the middle of a loop receiving successive messages from that server.
+
+ The old code would continue trying to read more messages from the
+ deleted server class, leading to a segfault.
+
+ The new code checks to see whether the server class still exists. If
+ not, it breaks out of the loop.
+
+ M src/router/osrf_router.c
+
+2010-01-20 scottmk
+
+ * Reverting to a previous version believed to be good.
+ A recent update introduced a nasty bug, not yet squashed.
+
+ M src/libopensrf/osrf_prefork.c
+
+ * 1. Correct some mangling of the linked list pointers that
+ keep track of child processes.
+
+ 2. Rearrange the way we we keep track of how many children we
+ have. The old way was a little dodgy in some situations.
+
+ 3. Plug some memory leaks in osrf_prefork_register_routers().
+
+ 4. Add more doxygen-style comments.
+
+ M src/libopensrf/osrf_prefork.c
+
+2010-01-19 erickson
+
+ * Patch from Joe Atzberger:
+
+ When running from command-line, logger warns "Logger found no config. Using
+ STDERR" but in fact fails to do so. That blocks atomic testing of dependent
+ modules, including almost all of EG's Application and Utils.
+
+ Also, in _write_file when failing to sysopen the target file, the die message
+ reports a different variable than the one actually targeted.
+
+2010-01-19 dbs
+
+ * Get on board the typo train - woo woooooo!
+
+2010-01-19 miker
+
+ * keep the typo around for a while ... sorry, dbs ;)
+
+2010-01-19 dbs
+
+ * Address long-standing typo: clense_ISO8601
+
+2010-01-18 scottmk
+
+ * Instead of keeping all child processes in a single list, keep them in two
+ separate lists: one list of those which are currently servicing requests,
+ and another list of idle children. Move the children back and forth as
+ their status changes.
+
+ This change has three advantages:
+
+ 1. When searching for an active child, there is a smaller list to search.
+
+ 2. When doing a select() to identify children that have become available,
+ we can look for messages only from the active children, since the idle
+ ones won't write anything back to the parent. (Actually we could have
+ done this with a single list, but we didn't.)
+
+ 3. Probably most important: since the idle list functions as a stack, we
+ assign the next request to the child that was most recently active, or was
+ most recently launched. That's the child that is most likely still to be
+ physically in memory. Formerly we assigned requests to children approximately
+ on a round-robin basis. As a result we assigned each new request to the
+ child that was most likely to be swapped out.
+
+ Also, in prefork_clear(): kill each child process individually. Sending a
+ SIGKILL to the entire process group kills the parent as well as the
+ children.
+
+ M src/libopensrf/osrf_prefork.c
+
+2010-01-16 scottmk
+
+ * Refactored the signal handling so that we shut down in an orderly
+ fashion instead of calling _exit() from inside a signal handler.
+
+ M include/opensrf/osrf_system.h
+ M src/libopensrf/osrf_system.c
+
+2010-01-15 scottmk
+
+ * Close a substantial resource leak in drone processes.
+
+ A drone inherits the transport_client of its parent process,
+ including a socket and a substantial amount of memory. The
+ old code avoided freeing the transport_client in order to
+ avoid disconnecting the parent from Jabber.
+
+ The new code contrives to reclaim the resources without
+ sending a disconnect to Jabber. Hence the parent remains
+ connected.
+
+ M include/opensrf/transport_client.h
+ M include/opensrf/transport_session.h
+ M src/libopensrf/osrf_system.c
+ M src/libopensrf/transport_session.c
+ M src/libopensrf/transport_client.c
+
+2010-01-14 scottmk
+
+ * Tinkering with comments and white space; nothing substantive.
+
+ M src/libopensrf/osrf_system.c
+
+2010-01-09 scottmk
+
+ * 1. For keeping track of the child processes: use a doubly-linked
+ list instead of a singly-linked list. The resulting list manipulations
+ are both simpler (fewer special cases) and faster (no need to traverse
+ then entire list just to find the end).
+
+ 2. Maintain a free list of prefork_child structures that have been
+ allocated but are not currently in use. Allocate from the free list
+ when possible, in order to avoid churning through malloc() and free().
+
+ 3. When initializing prefork_child.appname: assign it the same value
+ as the corresponding field in the parental prefork_simple, instead of
+ creating a separate copy. The parental copy will remain valid until
+ after all the prefork_children are gone.
+
+ M src/libopensrf/osrf_prefork.c
+
+ * In srf_app_server_session_init(): if the requested session already
+ exists, treat it as an error.
+
+ M src/libopensrf/osrf_app_session.c
+
+2010-01-08 scottmk
+
+ * Added or modified a lot of comments; made some minor tweaks to white space.
+
+ Eliminated the min_children member of the prefork_child structure. We
+ didn't use it for anything, and it made no sense anyway.
+
+ Moved the closing of the child's file descriptors into prefork_child_free()
+ in order to eliminate duplicated code. Also we were closing two of the
+ file descriptors twice.
+
+ prefork_child_free() now returns void instead of a pointless int.
+
+ In reap_children(): reset the child_dead at the beginning of the function
+ instead of at the end. Otherwise we could miss a SIGCHLD that occurs during
+ the function.
+
+ Pass NULL as the second parameter to waitpid(). We don't do anything with the
+ children's return codes, so there's no need to capture them.
+
+ Eliminated all calls to osrf_clearbuf() as pointless.
+
+ In prefork_clear(): instead of sleeping for a second after sending the SIGKILL
+ to the child processes, go through a waitpid() loop. (In practice this
+ function is all but unreachable anyway.)
+
+ M src/libopensrf/osrf_prefork.c
+
+2010-01-06 scottmk
+
+ * Moved nested #includes out of osrf_prefork.h and into the implementation files.
+ Somne of the #includes turned out to be unnecessary, so I eliminated them.
+
+ In osrf_prefork.c: instead of dynamically allocating a prefork_simple,
+ allocate it on the stack. That way we avoid a malloc() and free().
+
+ Renamed prefork_free() to prefork_clear(), since it no longer frees the
+ prefork_simple itself, but only memory owned by the prefork_simple. Also
+ it now returns void instead of int, since there are no errors to detect
+ or report.
+
+ Added some comments.
+
+ M include/opensrf/osrf_prefork.h
+ M src/libopensrf/osrf_system.c
+ M src/libopensrf/osrf_prefork.c
+
+2010-01-05 scottmk
+
+ * Mostly tidying up white space and comments. Also rearranged
+ the #includes a bit.
+
+ M src/libopensrf/osrf_prefork.c
+
+2010-01-03 scottmk
+
+ * Finished adding doxygen-style comments to document the app session
+ functions. Removed comments from the header so that they wouldn't
+ override more complete comments in the implementation file.
+
+ Tweaked the white space here and there.
+
+ Changed the return code in a few cases, for consistency. A couple of
+ functions seemed unable to decide whether 0 was good and 1 was bad,
+ or vice versa.
+
+ M include/opensrf/osrf_app_session.h
+ M src/libopensrf/osrf_app_session.c
+
+2010-01-01 scottmk
+
+ * Incorporate _osrf_app_request_resend into osrf_app_session_request_resend(),
+ which had been its only caller. The code is trivial enough that it will be
+ simple to break out again if necessary. Meanwhile having it all in a single
+ function makes it more readable.
+
+ Free the hash table of requests correctly; i.e. all of each linked list, not
+ just the first node.
+
+ Various additions and refinements to comments; occasional tweaks to white space.
+
+ M include/opensrf/osrf_app_session.h
+ M src/libopensrf/osrf_app_session.c
+
+ * Changed the way pending requests are stored in an osrfAppSession.
+
+ Before, pending requests were stored in a so-called request_queue.
+ However it wasn't a queue at all, except in name. It was an
+ osrfList, i.e. an expandable pointer array used as a random
+ access container. Request ids were used as subscripts into the
+ array.
+
+ Since we don't reuse request ids (except in the theoretical case
+ of a wraparound), the array grew without limit. This unbounded
+ growth in the memory footprint could create problems for a
+ long-running busy process. It might have contributed to the
+ rumored instabililty of chopchop, our homegrown Jabber server.
+
+ Now, pending requests are stored in a hash table, where each
+ of 64 slots holds a doubly linked list. There should be no
+ effect on performance unless there are hundreds or thousands
+ of pending requests at once, in which case we would probably
+ get bogged down anyway.
+
+ M include/opensrf/osrf_app_session.h
+ M src/libopensrf/osrf_app_session.c
+
+2009-12-29 scottmk
+
+ * Add a stream parser for JSON, and a format_json utility
+ that uses it.
+
+ A include/opensrf/jsonpush.h
+ A src/c-apps/format_json.c
+ A src/libopensrf/jsonpush.c
+
+2009-12-28 scottmk
+
+ * Add routines for calculating SHA1 and MD5 digests, based on the
+ gnutls package. These routines are designed to replace the
+ current functions shahash() and md5sum(), but they are not
+ drop-in replacements because they have different signatures.
+
+ Prerequisites: packages gcrypt and gnutls.
+
+ This code is based on a contribution by Jason Stephenson.
+
+ A include/opensrf/osrf_digest.h
+ A src/libopensrf/osrf_digest.c
+
+2009-12-20 scottmk
+
+ * 1. In the parent router process: wait for all of the immediate
+ child processes to terminate before exiting.
+
+ This change eliminates the need for the shell script invoking
+ the router to sleep before running a ps to identify the effective
+ router processes (which are grandchildren of the parent). By the
+ time the parent exits, the children will have launched the
+ grandchildren and exited.
+
+ 2. If any of the immediate child processes terminates abnormally
+ (either a non-zero return code or termination by a signal), issue
+ a warning message to that effect. This message goes to standard
+ error, since the parent process never opens a log file.
+
+ 3. Apply the volatile qualifier to a couple of variables that
+ are updated asynchronously by a signal handler.
+
+ M src/router/osrf_router.c
+ M src/router/osrf_router_main.c
+
+2009-12-16 scottmk
+
+ * Correct a typo in a warning message
+
+ M src/libopensrf/osrf_app_session.c
+
+ * Log a warning message whenever the deprecated function
+ osrfAppSessionMakeRequest() is called.
+
+ M src/libopensrf/osrf_app_session.c
+
+2009-12-15 scottmk
+
+ * Replace calls to osrfAppSessionMakeRequest() with
+ calls to osrfAppSessionSendRequest().
+
+ M src/gateway/osrf_json_gateway.c
+
+ * Replace calls to osrfAppSessionMakeRequest() with
+ calls to osrfAppSessionSendRequest().
+
+ M src/c-apps/osrf_version.c
+ M src/c-apps/osrf_math.c
+ M src/libopensrf/osrf_settings.c
+
+2009-12-14 scottmk
+
+ * 1. In osrf_app_session.[ch]: Create a new function
+ osrfAppSessionSendRequest(), similar to osrfAppSessionMakeRequest()
+ but without the param_strings parameter.
+
+ 2. Replace the old function with the new one in srfsh.c.
+
+ M include/opensrf/osrf_app_session.h
+ M src/libopensrf/osrf_app_session.c
+ M src/srfsh/srfsh.c
+
+2009-12-10 dbs
+
+ * Remove vestigial TODO now that it is TODONE
+
+ * So. libmemcached has only been packaged on really fresh distros. Install from
+ source elsewhere.
+
+ Thanks for the nudge from Bill Erickson.
+
+2009-12-10 scottmk
+
+ * Add three new functions:
+
+ osrfListSwap() -- swaps the contents of two osrfLists
+
+ osrfStringArrayClear() -- renders an osrfStringArray empty
+
+ osrfStringArraySwap() -- swaps the contents of two osrfStringArrays
+
+ M include/opensrf/osrf_list.h
+ M src/libopensrf/string_array.c
+ M src/libopensrf/osrf_list.c
+
+2009-12-10 dbs
+
+ * Transition from libmemcache to libmemcached - an actively maintained memcached
+ client library.
+
+ As of this commit, you (I'm looking at you, buildbot) will require the
+ pkg-config and
+ libmemcached development packages to build and run OpenSRF.
+
+2009-12-08 scottmk
+
+ * Eliminated the function pointer osrf_stack_entry_point so that
+ osrf_app_session_queue_wait() can call osrf_stack_process() directly.
+ This change entails some juggling of declarations, headers, and the
+ like, but does not substantively affect the processing.
+
+ Also: made a number of other minor changes, mostly to comments
+ and white space.
+
+ M include/opensrf/osrf_stack.h
+ M include/opensrf/osrf_app_session.h
+ M src/libopensrf/osrf_app_session.c
+ M src/libopensrf/osrf_stack.c
+
+2009-12-07 scottmk
+
+ * Added some comments, tinkered with white space;
+ no substantive changes
+
+ M src/libopensrf/osrf_stack.c
+
+2009-12-02 erickson
+
+ * Prevent infinite loop (with logging) in child process reaping.
+
+ From the perl docs on waitpid:
+
+ Note that on some systems, a return value of "-1" could mean that child
+ processes are being automatically reaped. See perlipc for details, and for other
+ examples.
+
+2009-11-30 dbs
+
+ * Futher cleanup for autoconf substituted variables
+
+ examples/multisession-test.pl:
+ * Remove "use lib" statement as OpenSRF Perl modules are now installed in a
+ standard location
+
+ configure.ac:
+ * Use equality instead of assignment operator when checking for $prefix
+ * Add copyright statement to header
+
+2009-11-27 dbs
+
+ * Partial fix for launchpad bug 489294: OpenSRF seems to depend on explicit
+ --prefix configure option
+
+ In the process of creating Perl and Python scripts using AC_SUBST(sysconfdir),
+ autoconf would generate variables like '${prefix}' if no explicit --prefix
+ option was passed to configure - and this would cause those scripts to fail
+ with syntax errors.
+
+ We can work around that, and so we shall. The bigger question is whether
+ creating scripts with hardcoded defaults results in problems when it comes
+ to creating system packages; according to
+ http://www.gnu.org/software/hello/manual/autoconf/Installation-Directory-Variables.html
+ one should try to defer these changes to the Makefile so that the
+ destination directory can be specified at make or make install time,
+ instead.
+
+ At least this gets us working with no explicit configure options again.
+ Perhaps a packaging expert can help us out of this mire :)
+
+2009-11-25 scottmk
+
+ * Replacing calls to the old JSON parser with calls to the
+ new JSON parser.
+
+ M src/gateway/osrf_json_gateway.c
+ M src/c-apps/osrf_math.c
+ M src/c-apps/timejson.c
+ M src/libopensrf/osrf_json_test.c
+ M src/libopensrf/osrf_message.c
+ M src/libopensrf/osrf_cache.c
+
+2009-11-20 dbs
+
+ * Patch from Jeroen van Meeuwen (Fedora Project) <kanarip at fedoraproject.org> to
+ use $(APXS2)
+
+ Attached patch makes the auto foo respect the --with-apxs ./configure option for
+ src/gateway/Makefile.am.
+
+2009-11-16 scottmk
+
+ * Tinkering with comments and white space.
+
+ Enclose local #included files with quotes instead
+ of angle brackets.
+
+ M include/opensrf/osrf_app_session.h
+ M src/libopensrf/osrf_app_session.c
+
+ * Eliminated two members of the osrfMessage structure:
+ result_string and sender_tz_offset. Neither is used for
+ anything, and either may be easily reinstated if necessary.
+
+ I was tempted to eliminate the protocol member as well,
+ since it isn't used for anything either. However it's
+ populated from one of the parameters to osrf_message_init().
+ Getting rid of the protocol member properly would ramify
+ to all the code that calls osrf_message_init(), which would
+ be a lot of work to undo if necessary, so I left it alone.
+
+ M include/opensrf/osrf_message.h
+ M src/libopensrf/osrf_message.c
+
+ * 1. Changes to comments and white space.
+
+ 2. Eliminated the macro OSRF_MAX_PARAMS, which is nowhere used. It was
+ all but unusable anyway, since it included a terminal semicolon.
+
+ I considered eliminating the macro OSRF_XML_NAMESPACE as well, since
+ it is also unused. However I stayed my hand, since it would be more
+ difficult to reconstruct if the need arose.
+
+ M include/opensrf/osrf_message.h
+ M src/libopensrf/osrf_message.c
+
+2009-11-15 scottmk
+
+ * Move the libxml headers out of the header and into the
+ implementation file.
+
+ The files that #include osrf_message.h compile just fine
+ without the nested libxml headers, and there's no reason
+ to make the compiler paw through them.
+
+ M include/opensrf/osrf_message.h
+ M src/libopensrf/osrf_message.c
+
+ * Replace the the call to osrf_message_deserialize()
+ with a call to osrfMessageDeserialize().
+
+ M src/router/osrf_router.c
+
+ * Create a new function osrfMessageDeserialize(), as a
+ replacement for osrf_message_deserialize().
+
+ The older osrf_message_deserialize() receives an array of
+ pointers to populate, along with a maximum number. If the
+ JSON input contains more than the maximum number of
+ messages, the extras are silently discarded. This design
+ forces the calling code to guess how many messages it
+ might ever receive at one time, with no way to determine
+ whether its guess was good enough.
+
+ The newer function returns an osrfList of pointers, and
+ can therefore return all the messages it finds in the
+ input, with no risk of loss.
+
+ M include/opensrf/osrf_message.h
+ M src/libopensrf/osrf_message.c
+
+ * Created a new function osrfListClear() to take an existing
+ osrfList and make it empty.
+
+ M include/opensrf/osrf_list.h
+ M src/libopensrf/osrf_list.c
+
+2009-11-14 scottmk
+
+ * Pulled the creation of a single osrfMessage from a jsonObject
+ into a separate function. This change simplifies
+ osrf_message_deserialize(), and will make it easier to create
+ a replacement for it.
+
+ Also: tinkered with some of the comments and white space.
+
+ M src/libopensrf/osrf_message.c
+
+ * Tidied up various things:
+
+ 1. Miscellaneous adjustments to white space.
+
+ 2. Added doxygen-style comments to document all functions. Removed most
+ comments from the header so that they won't override those in the
+ implementation file.
+
+ 3. Slightly rearranged or otherwise tweaked the logic here and there
+ for clarity.
+
+ 4. osrf_messasge_set_locale() now returns a const pointer, to discourage
+ the calling code from changing or freeing the message's copy of the
+ locale.
+
+ 5. Eliminated the full_param_string member of osrfMessage. We weren't
+ using it for anything, except to initialize it to NULL.
+
+ 6. Plugged several memory leaks (potential but not actual).
+
+ 7. Made osrfMessageToJSON a static function. No other source file
+ needs to call it.
+
+ 8. Replaced a couple of calls to jsonObjectToSimpleString() with calls
+ to jsonObjectGetString(), in order to eliminate a malloc and free.
+
+ M include/opensrf/osrf_message.h
+ M src/libopensrf/osrf_message.c
+
+2009-11-10 scottmk
+
+ * 1. Fixed a bug whereby the display of request results was not showing up
+ when pretty-printing was turned off. We were calling jsonObjectGetString()
+ when we should have been calling jsonObjectToJSON(), and thereby getting
+ NULL instead of a usable string, for any but the most trivial of results.
+
+ Also: applied some minor refinements to nearby code.
+
+ 2. In handle_request(): eliminated a couple of superfluous variables.
+
+ 3. Corrected an erroneous statement in the help message. Request output
+ passes through less when raw_print is false, not when it's true.
+
+ 4. Tidied up the white space here and there.
+
+ M src/srfsh/srfsh.c
+
+2009-11-09 scottmk
+
+ * No substantive changes.
+
+ Corrected some erroneous comments, and tweaked the
+ white space here and there.
+
+ M include/opensrf/utils.h
+
+ * Miscellaneous minor tweaks:
+
+ 1. Moved nested #includes out of the header file and into the
+ implementation files as needed.
+
+ 2. Additions and refinements to comments; adjustments to white space.
+
+ 3. Changed several functions to return void instead of int, since we don't
+ look at the return values anyway.
+
+ 4. Added the const qualifier to several function parameters.
+
+ 5. In osrfRouterHandleAppRequest(): initialize arr[], an array of pointers,
+ by setting each pointer to NULL. We had been using memset() on the lot,
+ relying on a the non-portable assumption that a NULL pointer is
+ represented by all-bits-zero.
+
+ 6. Minor rearrangements of the logic here and there, mostly to free things
+ as soon as we're done with them instead of waiting until the end of the block,
+ or to defer the declarations of things until we're about to use them.
+
+ 7. Replaced a couple of calls to jsonObjectToSimpleString() with calls to
+ jsonObjectGetString(), in order to eliminate a malloc() and a free().
+
+ 8. Renamed osrfRouterHandleAppResponse() to osrfRouterSendAppResponse(),
+ which is more descriptive and less vague.
+
+ M src/router/osrf_router.h
+ M src/router/osrf_router.c
+ M src/router/osrf_router_main.c
+
+2009-11-06 scottmk
+
+ * Corrected a glitch in the command-line parser. Now commas
+ are treated as the equivalent of white space between
+ parameters. For example { "a":5 },{ "b":true } is parsed as
+ two separate JSON objects, even though there is no white space
+ between them.
+
+ M src/srfsh/srfsh.c
+
+2009-11-05 scottmk
+
+ * Several bug fixes:
+
+ 1. In osrfRouterRun(): eliminate the counting of sockets. Rely
+ on the traversal of the class list to cover all the active
+ sockets. Otherwise we would enter an infinite loop if we had just
+ deleted a class with an active socket.
+
+ 2. In osrfRouterClassHandleIncoming(): in the case of an error
+ message that we can't reroute to a different node, do a continue
+ instead of a return. Otherwise we delay any further messages that
+ may be enqueued for the same class, and possibly skip them entirely.
+
+ Also, in the same scenario: free the message before continuing, in
+ order to avoid a memory leak, and clear the transaction id for the
+ logging routines.
+
+ 3. In osrfRouterClassHandleBounce(): remove the dead node when it is the
+ last one left for its class. Remove the class as well, since it is
+ no longer usable. We had been leaving the dead node around, for no
+ good reason.
+
+ M src/router/osrf_router.c
+
+ * 1. Further refinement of comments.
+
+ 2. In osrfRouterClassHandleIncoming() and osrfRouterClassHandleBounce():
+ rearranged the logic a bit for clarity.
+
+ 3. In _osrfRouterFillFDSet(): reuse the osrfHashIterator that's available
+ in the osrfRouter instead of creating and destroying a fresh one.
+
+ M src/router/osrf_router.c
+
+2009-11-04 scottmk
+
+ * Eliminate a potential (if unlikely) memory leak: Free a
+ transport_message.error_type before overlaying it.
+
+ M src/libopensrf/transport_message.c
+
+ * 1. Added an osrfHashIterator as a member of osrfRouter, so that
+ we can reuse it when repeatedly traversing the list of classes.
+ This way we don't have to create and destroy an osrfHashIterator
+ on every iteration.
+
+ 2. In osrfRouterRun(): eliminated a pointless hash look up in the
+ innermost loop.
+
+ M src/router/osrf_router.c
+
+2009-11-03 scottmk
+
+ * 1. Changed several functions that were returning int so that
+ they return void instead. We weren't checking the return codes
+ anyway, since the functions in question handle their error
+ conditions on their own.
+
+ 2. Eliminated a pointless memset().
+
+ 3. For message received from the top-level transport_client, we
+ have to branch according to whether the message is a command
+ or an app request. I moved that decision up one level in the
+ calling hierarchy.
+
+ Rationale: the two branches are peers. Neither should be
+ treated as if it is a subordinate of the other. That peerage
+ is better expressed by making them two branches of the same if
+ statement, rather than conditionally calling one of the branches
+ from inside the other.
+
+ Minor performance benefit: for one of the branches we avoid an
+ extra layer of function call.
+
+ 4. Related to the above: renamed osrfRouterHandleMessage() to
+ osrfRouterHandleCommand(), since handling commands is all it
+ does now. Also rearranged its logic a bit.
+
+ 5. Extended and refined the comments.
+
+ M src/router/osrf_router.c
+
+ * In the main loop of the router: if the select call fails for
+ any reason other than an harmless signal (i.e. one whose
+ handler didn't set a switch to stop the loop), then break
+ out of the loop and terminate.
+
+ The old code would ignore the error and keep looping, using up
+ ca. 98% of the CPU until somebody killed it.
+
+ M src/router/osrf_router.c
+
+2009-11-02 scottmk
+
+ * 1. Move the declaration of osrfRouter out of the header
+ and into osrf_router.c. There's no need for any other
+ source file to know about the internals.
+
+ 2. Eliminate the ROUTER_SOCKFD macro in favor of the new
+ client_sock_fd() function. Reason: it needlessly coupled
+ the osrfRouter and osrfRouterClass structures by requiring
+ each of them to have a member named "connection".
+
+ 3. Further tinkering with the comments.
+
+ M src/router/osrf_router.h
+ M src/router/osrf_router.c
+
+ * New function: client_sock_fd(). It returns the socket fd used
+ by the transport_session underlying a specified transport_client.
+
+ Purpose: increase the level of encapsulation, so that the
+ calling code doesn't need to know about three layers of internals.
+
+ M include/opensrf/transport_client.h
+ M src/libopensrf/transport_client.c
+
+ * Changed the signal handling.
+
+ There are very few things you can safely do within a signal handler, and
+ shutting down an osrfRouter is not among them.
+
+ Now the signal handler just sets a switch for the main loop to look at.
+ The select call looks for errno == EINTR and then looks at the switch
+ that the signal handler sets. If the switch is set, we exit the otherwise
+ infinite loop. Then we free the osrfRouter and re-raise the signal.
+
+ M src/router/osrf_router.h
+ M src/router/osrf_router.c
+ M src/router/osrf_router_main.c
+
+2009-10-31 scottmk
+
+ * Fixed a bug in osrfRouterClassFree(). We were trying free
+ the same osrfRouterClass twice -- once directly, and once
+ by an unintended recursion.
+
+ M src/router/osrf_router.c
+ M src/router/osrf_router_main.c
+
+ * Tinkering with white space and comments. No
+ substantive changes.
+
+ M src/router/osrf_router.c
+
+2009-10-30 scottmk
+
+ * 1. Tidy up the white space.
+
+ 2. Add copious comments, mostly doxygen-style, to document
+ the functions and the transport_client struct.
+
+ 3. In client_connect(): plug a memory leak by freeing
+ client->xmpp_id before overlaying it. Plug a potential
+ similar leak in client_send_message().
+
+ 4. In client_send_message(): return 1 (an error) instead of
+ 0 (success) when the first parameter is NULL.
+
+ M include/opensrf/transport_client.h
+ M src/libopensrf/transport_client.c
+
+2009-10-29 sboyette
+
+ * exit with error code when tools are not found
+
+2009-10-29 miker
+
+ * give decodeJS a way to try to load a class that was requested but does not yet
+ exist
+
+2009-10-29 scottmk
+
+ * Add doxygen-style comments to document the
+ transport_message structure.
+
+ M include/opensrf/transport_message.h
+
+ * 1. Tidy up the white space.
+
+ 2. Add doxygen-style comments to document all functions.
+
+ M src/libopensrf/transport_message.c
+
+2009-10-28 scottmk
+
+ * 1. In endElementHandler(), responding to an error: don't explain what a
+ 401 error is unless that's the error that happened.
+
+ 2. In parseWarningHandler() and parseErrorHandler(): issue messages via
+ the usual logging routines instead of writing them to stdout and stderr.
+
+ 3. Finish the doxygen-style commenting.
+
+ M include/opensrf/transport_session.h
+ M src/libopensrf/transport_session.c
+
+ * 1. Added comments to document the process of connecting to Jabber.
+
+ 2. Added doxygen-style comments to document the final two functions.
+
+ 3. Several minor performance tweaks and rearrangements.
+
+ M src/libopensrf/transport_session.c
+
+2009-10-25 dbs
+
+ * Improve the 'help' output for srfsh:
+ * Document the method-name parameter for the introspect command
+ * Document the currently supported srfsh variables
+ * Reorganize the help slightly to place more emphasis on
+ introspect and request and cut down on some of the blank lines.
+
+2009-10-25 scottmk
+
+ * 1. Moved several macros from the header to the implementation file. They aren't
+ used
+ anywhere else.
+
+ 2. Renamed SERVER_SOCKET and CLIENT_SOCKET to LISTENER_SOCKET and DATA_SOCKET,
+ respectively. The new names more accurately reflect the uses to which the two
+ socket types are put. (Note that some so-called CLIENT_SOCKETs were, in fact,
+ opened by servers.)
+
+ 3. Changed socket_open_udp_server() to open a DATA_SOCKET (formerly called a
+ CLIENT_SOCKET) instead of a LISTENER_SOCKET (formerly called a SERVER_SOCKET).
+ Otherwise an attempt to wait on such a socket would wind up treating it like
+ a listener. That doesn't work for UDP. In practice this change has no effect,
+ since no application ever calls this function anyway.
+
+ 4. Always close a socket before removing the associated socket_node. Otherwise
+ we
+ will leak sockets in some situations.
+
+ 5. Tinkered further with the comments, especially in the header file.
+
+ M include/opensrf/socket_bundle.h
+ M src/libopensrf/socket_bundle.c
+
+ * Merged _socket_route_data() into its only caller, after untangling its logic.
+
+ The old function traversed the linked list of socket_nodes in a loop,
+ examining each node at the bottom of the loop in order to identify the next
+ node. It went through elaborate and confusing gyrations to avoid dereferencing
+ a pointer for a node that had been deleted.
+
+ A better solution is to get a pointer to the next node *before* deleting the
+ current one. The resulting code is simple and easy to understand.
+
+ M src/libopensrf/socket_bundle.c
+
+2009-10-24 scottmk
+
+ * Implemented session_connected(), which had been declared in the header but never
+ defined.
+
+ Changed transport_client.c to use session_connected(), so that it wouldn't need
+ to
+ see a declaration of jabber_machine.
+
+ Moved from transport_session.h to transport_session.c: several macros and the
+ declaration of jabber_machine, of which none are needed elsewhere.
+
+ Removed some comments from the header so that they won't override more complete
+ comments in the implementation file.
+
+ In session_connect(): inserted a return statement in order to bypass some
+ superfluous string comparisons.
+
+ Added the const qualifier to the return type of get_xml_attr(). We don't want to
+ be able to overwrite the text returned by the XML parser.
+
+ In endElementHandler(): look for "stream:error", to match the opening tag,
+ instead
+ of "error:error".
+
+ Resest status_buffer along with the other buffers.
+
+ Introduced several minor performance tweaks.
+
+ Added more doxygen-style comments for documentation.
+
+ M include/opensrf/transport_session.h
+ M src/libopensrf/transport_session.c
+ M src/libopensrf/transport_client.c
+
+2009-10-22 scottmk
+
+ * Various cleanups in transport_session.c:
+
+ 1. In init_transport(): guard against a NULL server parameter.
+
+ 2. In session_free(): if the session is still open, disconnect it.
+
+ 3. In session_connect(): if we open a socket but are unable to connect to
+ Jabber, close the
+ socket and set the sock_id member to zero. If the socket is already open, return
+ an error,
+ instead of reusing the existing socket (and trying to overlay any open Jabber
+ session).
+
+ 4. In session_connect(): guard against an invalid auth_type.
+
+ 5. In session_connect(): corrected some errors in the way we calculate buffer
+ sizes,
+
+ 6. In session_disconnect(): send a disconnect message only if the socket is
+ still open.
+
+ 7. Tidied up white space and comments in various places.
+
+ 8. Added doxygen-style comments to document some of the functions.
+
+ M src/libopensrf/transport_session.c
+
+2009-10-18 scottmk
+
+ * Eliminated _socket_route_data_id() as a separate function, incorporating
+ its contents into the end of socket_wait().
+
+ Rationale: _socket_route_data_id() was called in only a single place.
+ It was little more than a mildly obfuscated if test, branching to two
+ very different functions. Having this code fragment in a separate function
+ just made the logic harder to follow.
+
+ Also: added a couple more doxygen-style comments.
+
+ M src/libopensrf/socket_bundle.c
+
+2009-10-17 scottmk
+
+ * 1. In socket_connected(): if the select() fails because it is interrupted
+ by a signal, it doesn't mean that the socket is invalid, so try again.
+
+ 2. In _socket_handle_client_data(): remove two unnecessary calls to the
+ osrf_clearbuf macro.
+
+ 3. Add more doxygen-style comments to document the functions; edit a few
+ existing comments in various ways.
+
+ M src/libopensrf/socket_bundle.c
+
+2009-10-13 scottmk
+
+ * 1. In socket_open_tcp_client(): use getaddrinfo() instead of gethostbyname().
+ The latter is obsolete, according to the man page and other sources.
+
+ 2. Add doxygen-style comments to document several more functions.
+
+ M src/libopensrf/socket_bundle.c
+
+ * 1. Moved the declaration of socket_node from the header into the
+ implementation file. No other source files need to be exposed
+ to it.
+
+ 2. Contrived to avoid leaking sockets in case of error exits;
+ sometimes by changing the sequence of operations, sometimes by
+ inserting a close().
+
+ 3. In socket_open_tcp_client() and socket_open_udp_client():
+ removed the call to bind(). Ordinarily a client socket doesn't
+ need to know or care what its local address is.
+
+ 4. In socket_open_udp_client(): eliminated the second and third
+ parameters, which define the remote address. That information
+ wasn't going anywhare anyway. For a UDP socket, you have no
+ use for the remote address until you actually try to send or
+ receive.
+
+ 5. Added doxygen-style comments to document some of the functions.
+
+ M include/opensrf/socket_bundle.h
+ M src/libopensrf/socket_bundle.c
+
+2009-10-12 scottmk
+
+ * 1. Replace the old JSON parser (jsonParseString()) with a newer, faster one
+ (jsonParse()).
+
+ 2. Because the new JSON parser is strict about syntax errors that the old
+ parser would ignore, it was necessary to parse the srfsh command line more
+ intelligently. Otherwise it would be impossible to build a JSON string
+ internally with reliably correct syntax.
+
+ Hence: instead of using strtok() to break up the command line into tokens, we
+ now use a rudimentary recursive descent parser to isolate JSON strings as
+ distinct arguments, even if they contain embedded white space.
+
+ As a fairly benign side effect of these changes, the treatment of commas
+ in the command line is changing a bit. All parts of the command line
+ (not just JSON strings) may now be optionally separated by commas.
+
+ 3. We now use an osrfStringArray to hold the results of parsing, rather
+ than a bare array of pointers.
+
+ 4. The function formerly known as "parse_request" is now named
+ "process_request",
+ because it does a lot more than just parsing.
+
+ M src/srfsh/srfsh.c
+
+2009-10-12 dbs
+
+ * Clean up and clarify configure help and messages a wee bit
+
+ * Chop chopchop out of the default make / install target
+
+ chopchop is a basic XMPP server that is not used in production, so
+ let's not bother with building and installing it in the default configuration.
+
+ We introduce a new configure option, --enable-chopchop, for those who do
+ want to build and install chopchop.
+
+2009-10-11 scottmk
+
+ * Add doxygen-style comments to document macros, and an overview
+ at the top.
+
+ M include/opensrf/log.h
+
+ * Add doxygen-style comments to document all functions and all variables
+ at file scope.
+
+ In log.h: remove some existing comments so that they won't override
+ the more complete comments in log.c.
+
+ M include/opensrf/log.h
+ M src/libopensrf/log.c
+
+2009-10-11 dbs
+
+ * Add a '-l' option to treat the hostname as 'localhost', to match osrf_ctl.sh.
+
+ This will be useful in testing and tutorial scenarios.
+
+2009-10-10 scottmk
+
+ * 1. osrfLogGetXid now returns a pointer to const. We don't want the
+ calling code to be able to overwrite the cached copy of the
+ transaction id.
+
+ 2. Add doxygen-style comments to document some of the functions.
+
+ M include/opensrf/log.h
+ M src/libopensrf/log.c
+
+ * Performance tweak to the logging routines.
+
+ _osrfLogToFile() is no longer a variadic function. We always sent it the
+ same format string, and there was no point in sending a variable-length
+ parameter list that never actually varied in length.
+
+ Now we send it a fixed-length parameter list -- and thereby avoid two
+ calls to vsnprintf() that had been hidden in the VA_LIST_TO_STRING macro.
+
+ Also: added doxygen-style comments to several of the functions.
+
+ M src/libopensrf/log.c
+
+2009-10-08 scottmk
+
+ * Fix a bug in md5sum() (which only affected code compiled
+ with debugging turned on).
+
+ md5sum() builds an md5 message digest in a buffer. Originally
+ it used memset() to initialize the buffer with binary zeroes.
+ At some point the call to memset() was replaced with the
+ osrf_clearbuf() macro. When compiled in debugging mode,
+ osrf_clearbuf() fills the buffer with exclamation points;
+ otherwise it reverts to the original memset().
+
+ In this case the use of osrf_clearbuf is inappropriate, because
+ we use strcat() to build the message digest, two bytes at a
+ time. We don't need to use memset(), but the first byte needs
+ to be initialized to a nul byte so that strcat() will work as
+ intended. Hence:
+
+ 1. Remove the call to osrf_clearbuf().
+
+ 2. Put a nul byte at the beginning of the buffer.
+
+ Also, I made the buffer smaller. There's no reason for it
+ to be 256 bytes long.
+
+ M src/libopensrf/utils.c
+
+2009-10-05 scottmk
+
+ * Small performance tweak.
+
+ Replaced two occurrences of jsonParseString( "[]" ) with the
+ equivalant (and faster) call to jsonNewObject( JSON_ARRAY ).
+
+ M src/libopensrf/osrf_application.c
+ M src/srfsh/srfsh.c
+
+ * Performance tweak to message handling.
+
+ In five locations in osrf_message.c, we were turning a jsonObject into
+ a JSON string, only to parse it again back into a jsonObject:
+
+ -- osrf_message_add_object_param()
+ -- osrfMessageToJSON() (two occurrences)
+ -- osrf_message_deserialize() (two occurrences)
+
+ That's silly.
+
+ This new version copies the original jsonObject directly, with no round
+ trip through a JSON string. We use jsonObjectDecodeClass() to do the
+ copy, in order to make sure that all class hints are decoded into
+ classnames.
+
+ (Until recently, jsonObjectDecodeClass() would remove classnames that were
+ already present. That's presumably the reason for the curious and
+ inefficient two-step procedure that we were using up till now.)
+
+ Also: In two locations (in osrf_message_add_object_param() and
+ osrf_message_add_param()) We used jsonParseString() to parse a
+ hard-coded "[]". I replaced those calls with equivalent (and faster)
+ calls to jsonNewObjectType( JSON_ARRAY );
+
+ Also: in osrf_message_set_result_content() I eliminated a pointless test
+ for nullity of the json_string variable. An earlier test already
+ guarantees that json_string is not NULL.
+
+ M src/libopensrf/osrf_message.c
+
+ * Created a new function osrfHashExtract(). It extracts an item with a
+ given key from an osrfHash, without destroying it, leaving the rest
+ of the osrfHash intact.
+
+ M include/opensrf/osrf_hash.h
+ M src/libopensrf/osrf_hash.c
+
+ * Tweak jsonObjectDecodeClass so that it preserves classnames
+ that are already present. The previous version would add
+ new classnames, if it found them encoded, but would drop
+ any old ones.
+
+ At present this change will have no effect. Apart from a
+ couple of recursive calls, the only function that calls
+ jsonObjectDecodeClass() is jsonParseString(). In that case,
+ we pass a freshly parsed jsonObject that can't possibly
+ have any classnames yet.
+
+ However this change will enable us to use this function
+ elsewhere (specifically in osrf_message.c), resulting in
+ simpler and faster code.
+
+ M src/libopensrf/osrf_json_tools.c
+
+2009-10-04 scottmk
+
+ * Enhance the performance of the recursive descent JSON parser,
+ mainly the jsonParse() function.
+
+ 1. The old version would create a jsonObject and then copy it, with
+ possible modifications, via a call to jsonObjectDecodeClass(), in
+ order to decode class hints into the classname member. Finally, it
+ would throw away the original jsonObject.
+
+ The copying operation is expensive, and the new version eliminates
+ it. When decoding is desired (which is nearly always), execution
+ passes through a parallel version of the get_hash() function, which
+ does the decoding on the fly.
+
+ In my benchmarking, the new version reduces the parsing time by
+ around 35 - 45 percent. It is now at least twice as fast as the
+ older jsonParseString() function, which uses a finite state
+ machine instead of recursive descent.
+
+ 2. In get_number(): instead of allocating and destroying a
+ temporary growing_buffer, use the one available in the
+ Parser structure.
+
+ 3. In osrf_json.h: Applied some pedantic corrections to the
+ doxygen comments for the old parser.
+
+ --------
+
+ In all cases tested, the new version produces results identical
+ to those of the old version. The results are also identical to
+ those of the older parser, apart from error detection.
+
+ M include/opensrf/osrf_json.h
+ M src/libopensrf/osrf_parse_json.c
+
+2009-10-02 scottmk
+
+ * Change the return type of jsonObjectGetString so that it
+ is a pointer to const char, instead of to non-const char.
+
+ We don't want the calling code to be able to modify the innards
+ of the jsonObject, at least not by this back door.
+
+ I have already examined all uses of this function and modified
+ them where necessary to avoid compile problems.
+
+ M include/opensrf/osrf_json.h
+ M src/libopensrf/osrf_json_object.c
+
+ * 1. Add doxygen-style comments to document functions in the
+ recursive-descent JSON parser. Tidy up or correct existing
+ comments here and there.
+
+ 2. In report_error(): add the const qualifier to the
+ third parameter.
+
+ M include/opensrf/osrf_json.h
+ M src/libopensrf/osrf_parse_json.c
+
+2009-09-29 scottmk
+
+ * We routinely grab a chunk of configuration file that doesn't
+ apply to the router process. When we detect the spurious hit,
+ we throw it away and go on to the next one.
+
+ We had been detecting the spurious hit after forking, thus
+ wasting a fork.
+
+ Now we detect the spurious hit before forking, so that we
+ don't waste a fork.
+
+ M src/router/osrf_router_main.c
+
+ * Comment out an error message added in the previous patch.
+
+ The error message reported what looks like an error condition:
+ the config file doesn't provide transport info. However what
+ appears to be happening is that the program tries to read
+ several different sections of the config file, of which some
+ are relevant and some aren't, due to some overloading of the
+ <routers> tag. As a result it routinely spawns irrelevant
+ children, only to watch them die.
+
+ There's got to be a better way, but for now I'll just
+ suppress the error message.
+
+ M src/router/osrf_router_main.c
+
+2009-09-29 dbs
+
+ * Let's give OpenSRF a spin on Ubuntu Karmic
+
+2009-09-28 scottmk
+
+ * 1. Eliminated some memory leaks by replacing calls to
+ jsonObjectFindPath() (whose return values weren't getting
+ freed) with calls to jsonObjectGetKey(). This change will
+ also speed up the configuration a bit by avoiding the
+ cloning of objects.
+
+ 2. Changed setupRouter so that it returns void instead of int.
+ We weren't looking at the return value anyway. Since the
+ function normally enters an infinite loop, any return
+ represents some kind of error.
+
+ 3. If the configuration file has no transport information,
+ issue a message before exiting (to standard error, since we
+ don't have a log file yet).
+
+ 4. Add doxygen-style comments for documentation.
+
+ M src/router/osrf_router_main.c
+
+ * 1. Changed osrfLogFacilityToInt() so that it accepts
+ a const pointer.
+
+ 2. Added the const qualifier to various variables.
+
+ 3. In osrf_router_main.c: Removed three inappropriate
+ calls to free(). Some memory leaks remain, where we
+ fetch some cloned jsonObjects from jsonObjectFindPath()
+ and don't free them.
+
+ M include/opensrf/log.h
+ M src/router/osrf_router_main.c
+ M src/gateway/osrf_http_translator.c
+ M src/libopensrf/osrf_prefork.c
+ M src/libopensrf/log.c
+ M src/libopensrf/osrf_application.c
+
+2009-09-28 dbs
+
+ * And place headers in /prefix/include/opensrf/ again, fixing regression to
+ /prefix/include/
+
+ * W h i t e s p a c e matters when defining automake targets
+
+ Headers weren't being installed as the include_HEADER target wasn't being
+ parsed.
+
+2009-09-25 scottmk
+
+ * 1. Add doxygen markup for documentation.
+
+ 2. In jsonNewObjectType(): explicitly initialize a JSON_BOOL to false, instead
+ of implicitly relying on the expectation that a NULL pointer is represented
+ by all-bits-zero.
+
+ 3. In jsonObjectExtractIndex(): set the parent pointer to NULL in the
+ extracted jsonObject.
+
+ M include/opensrf/osrf_json.h
+ M src/libopensrf/osrf_json_object.c
+
+2009-09-18 sboyette
+
+ * LogServer was removed from distro but not from MANIFEST - fixed
+
+2009-09-17 phasefx
+
+ * correct the test for modifying the *.xml.example files
+
+2009-09-15 sboyette
+
+ * POD/docs cleanup
+
+ * 100% test coverage
+
+ * WIP
+
+ * WIP
+
+ * more test
+
+ * sync
+
+ * stowing WIP
+
+ * WIP
+
+2009-09-14 dbs
+
+ * Make building & installing the core components of OpenSRF optional.
+
+ For now, this will be of most interest to those interested in installing only
+ the JavaScript files from OpenSRF. If you disable the core components in
+ configure, then dependency checking for those core components is skipped and
+ the JavaScript files will be installed to the desired location.
+
+ For example:
+
+ ./autogen.sh
+ ./configure --prefix=/openils --sysconfdir=/openils/conf --disable-core
+ sudo make install
+
+ ... will result in only the OpenSRF JavaScript files being installed in
+ /openils/lib/javascript/ (although at the moment, the other directories
+ will still be created).
+
+2009-09-13 scottmk
+
+ * Changed the signature of osrfStringArrayGetString():
+
+ 1. It receives a pointer to osrfStringArray. That pointer
+ is now a pointer to const.
+
+ 2. It returns a character pointer. That pointer is now a
+ pointer to const.
+
+ I have already examined all existing calls to this function,
+ and modified them where necessary.
+
+ * In osrf_json_gateway.c: added the const qualifier to three
+ different local variables, all named "str".
+
+2009-09-12 scottmk
+
+ * In apacheGetParamValues() and apacheGetFirstParamValue():
+ applied const qualifier to nkey.
+
+ Also: changed the ensuing NULL tests to look at nkey
+ instead of key, since key has already been verified as
+ non-NULL.
+
+ Actually it looks like nkey is guaranteed to be non-NULL
+ as well, but that depends on the correct functioning
+ of osrfStringArray; so I left the NULL test, as
+ revised, in place.
+
+ * In osrfAppSessionClientInit(): added a const
+ qualifier to domain.
+
+ * In osrfSystemBootstrap(): added a const qualifier
+ to appname.
+
+ * In osrfBigHashFree: added a const qualifier to key,
+ and removed a pointless cast.
+
+ * In osrfStringArrayRemove(): fixed a bug whereby we would decrement
+ the size member even if no string was actually removed.
+
+ Added Doxygen-style comments to document everything.
+
+ Removed a few comments in the header so that they wouldn't
+ override comments in the implementation file.
+
+2009-09-11 scottmk
+
+ * In osrfNewHash(): specify a size for the osrfList used as a hash table,
+ so as to avoid wasting memory.
+
+ In osrfHashSet(): rearranged the logic a bit for clarity; no change in
+ behavior.
+
+ In osrfHashIteratorNext(): added a bit of protection against a corrupted
+ iterator.
+
+ Throughout: added Doxygen-style comments for documentation. Removed
+ some comments from the header so that they wouldn't override more
+ complete comments from the implementation file.
+
+2009-09-10 erickson
+
+ * initial support for capturing bytes read from gateway response
+
+2009-09-10 dbs
+
+ * Use working Perl syntax in example print hostname command.
+
+ * Add a linefeed to the Perl "print hostname" command
+
+2009-09-08 scottmk
+
+ * 1. Moved the declaration of the osrf_host_config struct out of the header.
+ Nothing outside of osrf_settings.c needs access to any members of this
+ struct.
+
+ 2. Made the osrf_settings_new_host_config function static; removed its
+ prototype from the header.
+
+ 3. Made the "config" pointer static.
+
+ 4. Rearranged osrf_settings_free_host_config a bit to protect against
+ attempts to free the cached config twice.
+
+ 5. Finished adding doxygen-style markup comments.
+
+ * Tweaking comments for doxygen:
+
+ Moved the overview from the implementation file to the header.
+
+ Deleted some comments from the header so that they wouldn't
+ override more complete comments from the implementation file.
+
+2009-09-04 scottmk
+
+ * Enhanced the error messages from osrf_settings_host_value() and
+ osrf_settings_host_value_object() to include the requested
+ search path. That should make it easier to identify the caller
+ and thereby figure out what went wrong.
+
+ Also: added a couple of Doxygen-style comments.
+
+2009-09-04 erickson
+
+ * for consistency with other config files and ease of install automation, set the
+ default password to 'password'
+
+ * assume 'yes' to fetching dependencies; reduce the verbosity of package downloads
+
+2009-09-03 scottmk
+
+ * 1. In osrfListSetDefault(): install the standard function
+ free() as the default item-freeing callback function,
+ instead of the gossamer-thin and useless wrapper for it,
+ osrfListVanillaFree(). This change eliminates a layer of
+ function call overhead.
+
+ 2. Eliminate osrfListVanillaFree() as neither used nor useful.
+
+ 3. Add doxygen-style comments to document every function.
+
+ * 1. A minor streamlining of va_list_to_string(), to eliminate
+ a layer of copying.
+
+ 2. Corrected some faulty comments for doxygen.
+
+2009-08-31 erickson
+
+ * repaired partial change from 'class' to 'pkg'. added use strict/warnings
+
+2009-08-31 scottmk
+
+ * 1. Add comments to be recognized by doxygen or other such
+ documentation generators.
+
+ 2. Change the values returned by buffer_fadd(), buffer_add(),
+ buffer_add_n(), and buffer_add_char() to make them more
+ consistent. In practice we never pay any attention to the
+ return values anyway.
+
+2009-08-28 sboyette
+
+ * changed 'my' globals to 'our' globals for testing purposes
+
+ * first tests
+
+ * more cleanup and documentation in progress
+
+ * yanking LogServer test file
+
+ * removing use of LogServer
+
+ * removing _json_hint_to_class
+
+ * shuffling around, adding POD stubs
+
+2009-08-25 sboyette
+
+ * removing OSRF::Utils::LogServer at berick's suggestion
+
+ * rearranging things a bit, docs. no actual code changes.
+
+ * new test files for Utils breakout
+
+ * removed $VERSION construct which caused undef warnings when not under svn, and
+ only occurred in 2 modules
+
+ * method prettyJSON doesnt exist anymore
+
+ * ditto
+
+ * that last version change was rather poorly timed, as it turns out
+
+2009-08-21 sboyette
+
+ * local doc updates for recent changes. wondering how much point there is in
+ keeping these around, long-term
+
+ * preëmptive version bump
+
+ * 'make check' works as promised. perl tests moved to 'check' target
+
+2009-08-20 sboyette
+
+ * updating MANIFEST for Module::Build-ness
+
+2009-08-17 sboyette
+
+ * added separate install fail diagnostic message
+
+ * removing files no longer needed
+
+ * 'make' will now just plain make again without proceeding to install.
+ Added Build to files swept by 'make clean'
+
+ * Going back to dumping a script (unbreaking non-root make vs. make install)
+
+2009-08-13 sboyette
+
+ * Added DISTCLEANFILES to make "make distclean" work better
+
+ * AC_CONFIG_MACRO_DIR added at the behest of libtoolize
+
+ * Added distclean-local: target and DISTCLEANFILES to make 'make distclean' work
+ superawesomely
+ Added ACLOCAL_AMFLAGS at the behest of libtoolize
+
+ * Build.PL built; build/test/install all selfcontained and automatic now
+
+ * M::B changes
+
+ * M::B changes
+
+2009-08-05 scottmk
+
+ * Extended the JSON_INIT_CLEAR macro to avoid segfaults.
+
+ Scenario: converting a JSON_BOOL, with a value of true, to a JSON_HASH or
+ JSON_ARRAY. The true value (in a union with an osrfHash* and an osrfList*)
+ was being interpreted as a non_NULL pointer and deferenced. Oops.
+
+ With this change, we clear the boolean value (by nullifying one of the
+ unioned pointers) whenever changing from a JSON_BOOL to anything else.
+
+ * Performance tweak to jsonIterator.
+
+ Instead of storing a malloc'd copy of the key of a JSON_HASH entry,
+ just store a const pointer to the key string stored in the
+ internal osrfHash. That way we don't have to do a malloc and
+ free every time we bump the iterator.
+
+ This change also requires the addition of a couple of const qualifiers
+ in the client code.
+
+2009-07-29 erickson
+
+ * set the 'from' address in outbound jabber messages
+
+ * set the 'from' address in outbound xmpp messages
+
+2009-07-28 erickson
+
+ * reduce unnecessary calls to fcntl() while reading from the socket
+
More information about the opensrf-commits
mailing list