From 61b1a1843866259f381b2fe48d4b7d9555156215 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Milo=C5=A1=20Mula=C4=8D?= Date: Sat, 2 Feb 2008 16:00:04 +0000 Subject: [PATCH] pass DB DEADLOCK error from lower to upper level of our code - not tested yet - supposed to be used in edg_wll_TransNeedRetry() --- org.glite.lb.common/interface/context.h | 1 + org.glite.lb.server/src/db_supp.c | 1 + org.glite.lbjp-common.db/src/db.c | 4 ++++ 3 files changed, 6 insertions(+) diff --git a/org.glite.lb.common/interface/context.h b/org.glite.lb.common/interface/context.h index ad366de..02fe955 100644 --- a/org.glite.lb.common/interface/context.h +++ b/org.glite.lb.common/interface/context.h @@ -193,6 +193,7 @@ typedef enum _edg_wll_ErrorCode { EDG_WLL_IL_SYS, /**< Interlogger internal error. */ EDG_WLL_IL_EVENTS_WAITING, /**< Interlogger still has events pending delivery. */ EDG_WLL_ERROR_COMPARE_EVENTS, /**< Two compared events differ. */ + EDG_WLL_ERROR_DB_TRANS_DEADLOCK, /**< Deadlock detected during DB operation. */ } edg_wll_ErrorCode; /** diff --git a/org.glite.lb.server/src/db_supp.c b/org.glite.lb.server/src/db_supp.c index 692d833..9c526c6 100644 --- a/org.glite.lb.server/src/db_supp.c +++ b/org.glite.lb.server/src/db_supp.c @@ -10,6 +10,7 @@ int edg_wll_SetErrorDB(edg_wll_Context ctx) { if (ctx->dbctx) { code = glite_lbu_DBError(ctx->dbctx, NULL, &ed); + if (code == EDEADLOCK) code = EDG_WLL_ERROR_DB_TRANS_DEADLOCK; edg_wll_SetError(ctx, code, ed); free(ed); } else { diff --git a/org.glite.lbjp-common.db/src/db.c b/org.glite.lbjp-common.db/src/db.c index 43dfc4b..455740d 100644 --- a/org.glite.lbjp-common.db/src/db.c +++ b/org.glite.lbjp-common.db/src/db.c @@ -493,6 +493,10 @@ int glite_lbu_ExecSQL(glite_lbu_DBContext ctx, const char *cmd, glite_lbu_Statem if (retry_nr <= 0) do_reconnect = 1; break; + case ER_LOCK_DEADLOCK: + ERR(ctx, EDEADLOCK, db_handle.mysql_error(ctx->mysql)); + return -1; + break; default: MY_ERR(ctx); return -1; -- 1.8.2.3