db_actual_store() function introduced implementing identical parts of db_store()...
authorZdeněk Šustr <sustr4@cesnet.cz>
Mon, 30 Oct 2006 08:26:35 +0000 (08:26 +0000)
committerZdeněk Šustr <sustr4@cesnet.cz>
Mon, 30 Oct 2006 08:26:35 +0000 (08:26 +0000)
org.glite.lb.server/interface/store.h
org.glite.lb.server/src/db_store.c

index 1a66bf0..0fefec8 100644 (file)
@@ -42,6 +42,7 @@ edg_wll_ErrorCode edg_wll_StepIntStateEmbriotic(
 
 int db_store(edg_wll_Context,char *, char *);
 int db_parent_store(edg_wll_Context, edg_wll_Event *);
+int db_actual_store(edg_wll_Context ctx, char *event, edg_wll_Event *ev, edg_wll_JobStat *newstat);
 int handle_request(edg_wll_Context,char *);
 int create_reply(const edg_wll_Context,char **);
 
index 2e3769d..dea30e1 100644 (file)
@@ -95,71 +95,7 @@ db_store(edg_wll_Context ctx,char *ucs, char *event)
   if (edg_wll_UnlockJob(ctx,ev->any.jobId)) goto err;
   if (err) goto err;
 
-  if ( ctx->isProxy ) {
-       /*
-        *      send event to the proper BK server
-        */
-       /* XXX: RegJob events, which were logged also directly, are duplicated at server,
-               but it should not harm */
-
-#ifdef LB_PERF
-       if( sink_mode == GLITE_LB_SINK_SEND ) {
-               glite_wll_perftest_consumeEvent(ev);
-       } else
-#endif
-       if (edg_wll_EventSendProxy(ctx, ev->any.jobId, event) )  {
-               edg_wll_SetError(ctx, EDG_WLL_IL_PROTO, "edg_wll_EventSendProxy() error.");
-               goto err;
-       }
-
-       /* LB proxy purge
-        * XXX: Set propper set of states!
-        * TODO: Do the set of states configurable? 
-        */
-       switch ( ev->any.type ) {
-       case EDG_WLL_EVENT_CLEAR:
-       case EDG_WLL_EVENT_ABORT:
-               edg_wll_PurgeServerProxy(ctx, ev->any.jobId);
-               break;
-       case EDG_WLL_EVENT_CANCEL:
-               if (ev->cancel.status_code == EDG_WLL_CANCEL_DONE) 
-                       edg_wll_PurgeServerProxy(ctx, ev->any.jobId);
-               break;
-       default: break;
-       }
-  } else 
-#ifdef LB_PERF
-       if( sink_mode == GLITE_LB_SINK_SEND ) {
-               glite_wll_perftest_consumeEvent(ev);
-       } else 
-#endif
-  {
-       if ( newstat.state ) {
-               edg_wll_NotifMatch(ctx, &newstat);
-               edg_wll_FreeStatus(&newstat);
-       }
-       if ( ctx->jpreg_dir && ev->any.type == EDG_WLL_EVENT_REGJOB ) {
-               char *jids, *msg;
-               
-               if ( !(jids = edg_wlc_JobIdUnparse(ev->any.jobId)) ) {
-                       edg_wll_SetError(ctx, errno, "Can't unparse jobid when registering to JP");
-                       goto err;
-               }
-               if ( !(msg = realloc(jids, strlen(jids)+strlen(ev->any.user)+2)) ) {
-                       free(jids);
-                       edg_wll_SetError(ctx, errno, "Can't allocate buffer when registering to JP");
-                       goto err;
-               }
-               strcat(msg, "\n");
-               strcat(msg, ev->any.user);
-               if ( edg_wll_MaildirStoreMsg(ctx->jpreg_dir, ctx->srvName, msg) ) {
-                       free(msg);
-                       edg_wll_SetError(ctx, errno, lbm_errdesc);
-                       goto err;
-               }
-               free(msg);
-       }
-  }
+  if (db_actual_store(ctx, event, ev, &newstat)!=0) goto err;
 
   edg_wll_FreeEvent(ev);
   free(ev);
@@ -235,6 +171,23 @@ db_parent_store(edg_wll_Context ctx, edg_wll_Event *ev)
 
   if (err) goto err;
 
+  event = edg_wll_UnparseEvent(ctx, ev);
+  assert(event);
+
+  if (db_actual_store(ctx, event, ev, &newstat)!=0) goto err;
+
+  free(event);
+
+  return(0);
+
+ err:
+  free(event);
+  
+  return edg_wll_Error(ctx,NULL,NULL);
+}
+
+int db_actual_store(edg_wll_Context ctx, char *event, edg_wll_Event *ev, edg_wll_JobStat *newstat) {
+
   if ( ctx->isProxy ) {
        /*
         *      send event to the proper BK server
@@ -247,12 +200,9 @@ db_parent_store(edg_wll_Context ctx, edg_wll_Event *ev)
                glite_wll_perftest_consumeEvent(ev);
        } else
 #endif
-       event = edg_wll_UnparseEvent(ctx, ev);
-       assert(event);
 
        if (edg_wll_EventSendProxy(ctx, ev->any.jobId, event) )  {
-               edg_wll_SetError(ctx, EDG_WLL_IL_PROTO, "edg_wll_EventSendProxy() error.");
-               goto err;
+               return edg_wll_SetError(ctx, EDG_WLL_IL_PROTO, "edg_wll_EventSendProxy() error.");
        }
 
        /* LB proxy purge
@@ -277,39 +227,28 @@ db_parent_store(edg_wll_Context ctx, edg_wll_Event *ev)
        } else 
 #endif
   {
-       if ( newstat.state ) {
-               edg_wll_NotifMatch(ctx, &newstat);
-               edg_wll_FreeStatus(&newstat);
+       if ( newstat->state ) {
+               edg_wll_NotifMatch(ctx, newstat);
+               edg_wll_FreeStatus(newstat);
        }
        if ( ctx->jpreg_dir && ev->any.type == EDG_WLL_EVENT_REGJOB ) {
                char *jids, *msg;
                
                if ( !(jids = edg_wlc_JobIdUnparse(ev->any.jobId)) ) {
-                       edg_wll_SetError(ctx, errno, "Can't unparse jobid when registering to JP");
-                       goto err;
+                       return edg_wll_SetError(ctx, errno, "Can'tnunparse jobid when registering to JP");
                }
                if ( !(msg = realloc(jids, strlen(jids)+strlen(ev->any.user)+2)) ) {
                        free(jids);
-                       edg_wll_SetError(ctx, errno, "Can't allocate buffer when registering to JP");
-                       goto err;
+                       return edg_wll_SetError(ctx, errno, "Can't allocate buffer when registering to JP");
                }
                strcat(msg, "\n");
                strcat(msg, ev->any.user);
                if ( edg_wll_MaildirStoreMsg(ctx->jpreg_dir, ctx->srvName, msg) ) {
                        free(msg);
-                       edg_wll_SetError(ctx, errno, lbm_errdesc);
-                       goto err;
+                       return edg_wll_SetError(ctx, errno, lbm_errdesc);
                }
                free(msg);
        }
   }
 
-  free(event);
-
-  return(0);
-
- err:
-  free(event);
-  
-  return edg_wll_Error(ctx,NULL,NULL);
 }