From 6f6a9f93f56e3b4ec4fdd40c8302a36049590b46 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Franti=C5=A1ek=20Dvo=C5=99=C3=A1k?= Date: Thu, 14 Feb 2008 18:27:35 +0000 Subject: [PATCH] Transaction support piece. Propagate error after commit too when loagind events. --- org.glite.lb.server/src/db_supp.c | 18 +++++++++++++++++- org.glite.lb.server/src/load.c | 8 +++----- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/org.glite.lb.server/src/db_supp.c b/org.glite.lb.server/src/db_supp.c index def3549..41f0bb5 100644 --- a/org.glite.lb.server/src/db_supp.c +++ b/org.glite.lb.server/src/db_supp.c @@ -80,7 +80,23 @@ int edg_wll_Rollback(edg_wll_Context ctx) { } int edg_wll_TransNeedRetry(edg_wll_Context ctx) { - // XXX: needs flesh + int ret; + char *errd; + + ret = edg_wll_Error(ctx,NULL,NULL); + if (ret == EDG_WLL_ERROR_DB_TRANS_DEADLOCK) { + edg_wll_Rollback(ctx); + return 1; + } else if (ret==0) { + edg_wll_Commit(ctx); /* errors propagated further */ + return 0; + } else { + edg_wll_Error(ctx, NULL, &errd); + edg_wll_Rollback(ctx); + edg_wll_SetError(ctx, ret, errd); + free(errd); + return 0; + } } diff --git a/org.glite.lb.server/src/load.c b/org.glite.lb.server/src/load.c index 68073bb..dbab5bc 100644 --- a/org.glite.lb.server/src/load.c +++ b/org.glite.lb.server/src/load.c @@ -34,7 +34,7 @@ int edg_wll_LoadEventsServer(edg_wll_Context ctx,const edg_wll_LoadRequest *req, reject_fd = -1, readret, i, ret; size_t maxsize; - char *line = NULL, + char *line = NULL, *errdesc, buff[30]; edg_wll_Event *event; edg_wlc_JobId jobid = NULL; @@ -84,17 +84,15 @@ int edg_wll_LoadEventsServer(edg_wll_Context ctx,const edg_wll_LoadRequest *req, do { if (edg_wll_Transaction(ctx)) goto err; - ret = edg_wll_StoreEvent(ctx, event, line, NULL); + edg_wll_StoreEvent(ctx, event, line, NULL); } while (edg_wll_TransNeedRetry(ctx)); - if (ret) { - char *errdesc; + if ((ret = edg_wll_Error(ctx, NULL, &errdesc)) != 0) { int len = strlen(line), total = 0, written; - edg_wll_Error(ctx, NULL, &errdesc); fprintf(stderr, "Can't store event: %s\n", errdesc); if ( reject_fd == -1 ) { -- 1.8.2.3