[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