- bugfix in match_status (several missed breaks in switch on condition attributes)
GS(buf);
free(buf);
break;
+ case EDG_WLL_QUERY_ATTR_VM_STATUS:
+ /*XXX op. within not implemented */
+ GS(edg_wll_VMStatToString((edg_wll_JobStatCode)l2->value.i));
+ break;
default:
assert(! "Unknown condition attribute!");
break;
goto err;
}
break;
+ case EDG_WLL_QUERY_ATTR_VM_STATUS:
+ if ( 0 > (conds[i][j].value.i = edg_wll_StringToVMStat(value))) {
+ asprintf(&errmsg, "Unknown VM job state \"%s\" in query", value);
+ err = edg_wll_SetError(ctx, EINVAL, errmsg);
+ goto err;
+ }
+ break;
default:
asprintf(&errmsg, "Value conversion for attribute \"%s\" not supported in current implementation", attribute);
err = edg_wll_SetError(ctx, ENOSYS, errmsg);
edg_wll_from_string_to_edg_wll_StatJobtype(XMLCtx);
break;
+ case EDG_WLL_QUERY_ATTR_VM_STATUS:
+ XMLCtx->job_conditions[XMLCtx->row][XMLCtx->position].value.i =
+ edg_wll_from_string_to_edg_wll_StatVm_state(XMLCtx);
+ break;
default:
edg_wll_freeBuf(XMLCtx);
XMLCtx->level--;
edg_wll_from_string_to_edg_wll_StatJobtype(XMLCtx);
break;
+ case EDG_WLL_QUERY_ATTR_VM_STATUS:
+ XMLCtx->job_conditions[XMLCtx->row][XMLCtx->position].value.i =
+ edg_wll_from_string_to_edg_wll_StatVm_state(XMLCtx);
default:
edg_wll_freeBuf(XMLCtx);
XMLCtx->level--;
ct++;
break;
+ case EDG_WLL_QUERY_ATTR_VM_STATUS:
+ if ( ec[m][n].op != EDG_WLL_QUERY_OP_EQUAL && ec[m][n].op != EDG_WLL_QUERY_OP_UNEQUAL )
+ {
+ edg_wll_SetError(ctx, EINVAL, "only `=' and '!=' supported with VM status");
+ return NULL;
+ }
+ ct++;
+ break;
+
default:
sprintf(msg, "ec_to_head_where(): attr=%d unsupported", ec[m][n].attr);
edg_wll_SetError(ctx, EINVAL, msg);
ct++;
break;
+ case EDG_WLL_QUERY_ATTR_VM_STATUS:
+ if ( jc[m][n].op != EDG_WLL_QUERY_OP_EQUAL && jc[m][n].op != EDG_WLL_QUERY_OP_UNEQUAL )
+ {
+ edg_wll_SetError(ctx, EINVAL, "only `=' and '!=' supported with VM status");
+ return NULL;
+ }
+ ct++;
+ break;
+
default:
sprintf(msg, "jc_to_head_where(): attr=%d unsupported", jc[m][n].attr);
case EDG_WLL_QUERY_ATTR_EXITCODE:
case EDG_WLL_QUERY_ATTR_STATUS:
case EDG_WLL_QUERY_ATTR_JOB_TYPE:
+ case EDG_WLL_QUERY_ATTR_VM_STATUS:
if ( !is_indexed(&(jc[m][n]), ctx)
|| !(cname = edg_wll_QueryRecToColumn(&(jc[m][n]))) )
{
} else if ( conds[i][j].op == EDG_WLL_QUERY_OP_UNEQUAL ) goto or_satisfied;
// TODO: EDG_WLL_QUERY_OP_LESS, EDG_WLL_QUERY_OP_GREATER, EDG_WLL_QUERY_OP_WITHIN, EDG_WLL_QUERY_OP_CHANGED
}
+ break;
case EDG_WLL_QUERY_ATTR_NETWORK_SERVER:
if ( stat->network_server )
{
if (oldstat->stateEnterTime.tv_sec != stat->stateEnterTime.tv_sec) goto or_satisfied;
break;
}
+ break;
case EDG_WLL_QUERY_ATTR_LASTUPDATETIME:
if ( !stat->lastUpdateTime.tv_sec )
break;
if (oldstat->lastUpdateTime.tv_sec != stat->lastUpdateTime.tv_sec) goto or_satisfied;
break;
}
+ break;
case EDG_WLL_QUERY_ATTR_JOB_TYPE:
switch ( conds[i][j].op )
{
if ( conds[i][j].value.i != stat->jobtype ) goto or_satisfied;
break;
}
+ break;
+ case EDG_WLL_QUERY_ATTR_VM_STATUS:
+ switch ( conds[i][j].op )
+ {
+ case EDG_WLL_QUERY_OP_EQUAL:
+ if ( conds[i][j].value.i == stat->vm_state ) goto or_satisfied;
+ break;
+ case EDG_WLL_QUERY_OP_UNEQUAL:
+ if ( conds[i][j].value.i != stat->vm_state ) goto or_satisfied;
+ break;
+ }
+ break;
default:
break;
}
#define LASTUPDATETIME lbt__queryAttr__LASTUPDATETIME
#define NETWORKSERVER lbt__queryAttr__NETWORKSERVER
#define JOBTYPE lbt__queryAttr__JOBTYPE
+#define VM_STATUS lbt__queryAttr__VM_USCORESTATUS
#define EQUAL lbt__queryOp__EQUAL
#define UNEQUAL lbt__queryOp__UNEQUAL
int edg_wll_SoapToAttr(const enum lbt__queryAttr in, edg_wll_QueryAttr *out)
{
- assert(EDG_WLL_QUERY_ATTR_JOB_TYPE + 1 == EDG_WLL_QUERY_ATTR__LAST);
+ assert(EDG_WLL_QUERY_ATTR_VM_STATUS + 1 == EDG_WLL_QUERY_ATTR__LAST);
switch ( in )
{
case LASTUPDATETIME: *out = EDG_WLL_QUERY_ATTR_LASTUPDATETIME; break;
case NETWORKSERVER: *out = EDG_WLL_QUERY_ATTR_NETWORK_SERVER; break;
case JOBTYPE: *out = EDG_WLL_QUERY_ATTR_JOB_TYPE; break;
+ case VM_STATUS: *out = EDG_WLL_QUERY_ATTR_VM_STATUS; break;
default: return 0;
}
int edg_wll_AttrToSoap(const edg_wll_QueryAttr in, enum lbt__queryAttr *out)
{
- assert(EDG_WLL_QUERY_ATTR_JOB_TYPE + 1 == EDG_WLL_QUERY_ATTR__LAST);
+ assert(EDG_WLL_QUERY_ATTR_VM_STATUS + 1 == EDG_WLL_QUERY_ATTR__LAST);
switch ( in )
{
case EDG_WLL_QUERY_ATTR_LASTUPDATETIME: *out = LASTUPDATETIME; break;
case EDG_WLL_QUERY_ATTR_NETWORK_SERVER: *out = NETWORKSERVER; break;
case EDG_WLL_QUERY_ATTR_JOB_TYPE: *out = JOBTYPE; break;
+ case EDG_WLL_QUERY_ATTR_VM_STATUS: *out = VM_STATUS; break;
default: return 0;
}
case EDG_WLL_QUERY_ATTR_RESUBMITTED:
case EDG_WLL_QUERY_ATTR_EXITCODE:
case EDG_WLL_QUERY_ATTR_JOB_TYPE:
+ case EDG_WLL_QUERY_ATTR_VM_STATUS:
VALUEQR_SET(out, i, soap_malloc(soap, sizeof(*(VALUEQR_GET(out, i)))));
if ( !VALUEQR_GET(out, i) ) return SOAP_FAULT;
*(VALUEQR_GET(out, i)) = in->i;