[open-ils-commits] [GIT] Evergreen ILS branch rel_3_0 updated. 389f8af52cf6ab2c4c21e1f6b60d92e56523f84e

Evergreen Git git at git.evergreen-ils.org
Tue Jan 30 15:50:06 EST 2018


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Evergreen ILS".

The branch, rel_3_0 has been updated
       via  389f8af52cf6ab2c4c21e1f6b60d92e56523f84e (commit)
      from  c070bf2c62781536fac04c3bb9d18fbd99fe2d99 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 389f8af52cf6ab2c4c21e1f6b60d92e56523f84e
Author: Galen Charlton <gmc at equinoxinitiative.org>
Date:   Thu Jan 25 16:58:33 2018 -0500

    LP#1745486: avoid retrieving user by id::numeric during auth init
    
    During open-ils.auth.authenticate.init, if looking up the user by barcode,
    the actor.usr row is subsequently fetched by ID. However, the ID was
    turned into a float, meaning that the query as sent to the database
    was equivalent to
    
      SELECT * FROM actor.usr WHERE id = 123.0000;
    
    While PostgreSQL will accept this, it ends up doing a sequential
    scan of the actor.usr table rather than an index lookup, making the
    retrieval up to two orders of magnitude slower than it needs to be
    and adding a couple percent unecessary I/O load on large, heavily
    used database. This patch fixes that.
    
    To test
    -------
    [1] Turn on PostgreSQL statment logging and log in as a user
        by barcode. Note that there's a retrieval of actor.usr by
        a float form of the ID.
    [2] Apply the patch and repeat step 1. This time, the query
        retrieves the row by the integer form of the ID.
    
    Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
    Signed-off-by: Bill Erickson <berickxx at gmail.com>

diff --git a/Open-ILS/src/c-apps/oils_utils.c b/Open-ILS/src/c-apps/oils_utils.c
index 4074d9e..5492dbf 100644
--- a/Open-ILS/src/c-apps/oils_utils.c
+++ b/Open-ILS/src/c-apps/oils_utils.c
@@ -393,16 +393,16 @@ jsonObject* oilsUtilsFetchUserByBarcode(osrfMethodContext* ctx, const char* barc
 	if(!card)
 		return NULL;   // No such card
 
-	// Get the user's id as a double
+	// Get the user's id as a long
 	char* usr = oilsFMGetString(card, "usr");
 	jsonObjectFree(card);
 	if(!usr)
 		return NULL;   // No user id (shouldn't happen)
-	double iusr = strtod(usr, NULL);
+	long iusr = strtol(usr, NULL, 10);
 	free(usr);
 
 	// Look up the user in actor.usr
-	params = jsonParseFmt("[%f]", iusr);
+	params = jsonParseFmt("[%d]", iusr);
 	jsonObject* user = oilsUtilsQuickReqCtx(
 		ctx, "open-ils.cstore", "open-ils.cstore.direct.actor.user.retrieve", params);
 

-----------------------------------------------------------------------

Summary of changes:
 Open-ILS/src/c-apps/oils_utils.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)


hooks/post-receive
-- 
Evergreen ILS


More information about the open-ils-commits mailing list