Transaction support piece.
authorFrantišek Dvořák <valtri@civ.zcu.cz>
Thu, 14 Feb 2008 18:27:35 +0000 (18:27 +0000)
committerFrantišek Dvořák <valtri@civ.zcu.cz>
Thu, 14 Feb 2008 18:27:35 +0000 (18:27 +0000)
Propagate error after commit too when loagind events.

org.glite.lb.server/src/db_supp.c
org.glite.lb.server/src/load.c

index def3549..41f0bb5 100644 (file)
@@ -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;
+       }
 }
 
 
index 68073bb..dbab5bc 100644 (file)
@@ -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 )
                        {