Active IQ Unified Manager Discussions
Active IQ Unified Manager Discussions
I've been fiddling with this and have come to the conclusion there is a quirk in WFA or something I don't understand (or both). I am not a SQL expert but composed this SQL by referencing similar situations and how problems like this are solved in SQL. I've narrowed down my problem into a simple workflow (attached) that illustrates the problem.
BACKGROUND:
- 7-mode exmaple
- Want to present a list of volumes with checkboxes (will be the list of volumes to potentially create SnapMirrors for)
- Normally want to hide volumes which are already involved in a SnapMirror relationship (as either a source or destination volume)
- Optionally want to expose and show all the volumes regardless if they are in a SM relatonship
- I don't want to create separate UI fields, one for each case, but want to have a UI variable (boolean checkbox preferred) that controls what volumes are presented
I've come up with SQL below to accomplish this. It WORKS perfectly when I 'Test' it inside Designer for that UI field. It supresses volumes that are either source volumes or destination volumes and shows them when it should (i.e.; when I pass a value of 1 anyway)
At first, when I was testing it, I wasn't exactly sure if what I should type for the boolean test parameter would be true/false or 1/0. After experimenting what I found was entering 1 for true and 0 for false works and true or false were not working. This makes sense from a CompSci 101 perspective and I presume that is the only way to test a boolean this under WFA.
However, I'm hitting two problems:
So, the attached workflow (.txt appended to .dar) is exported from a wfa-2.2 server and hence should import into wfa-2.2 or wfa-3.1p2. The first priority is to see this working under wfa-3.1p2. Second priority would be consistent behavior under wfa-2.2 but I'm suspecting an old-bug there.
NOTE: === FWIW: HERE IS THE SQL USED IN THE ATTACHED WORKFLOW === MUCH EASIER TO READ (w/indents) WITHIN THE WORKFLOW DESIGNER ===
SELECT
volume.name
FROM
storage.volume,
storage.array
WHERE
volume.name != 'vol0'
AND volume.array_id = array.id
AND array.name = '${priArray}'
AND ( -- AND ( ( flag is not true ) OR ( vol.id is NOT IN src.vsm AND vol.id NOT IN dst.vsm ) )
(
'${flagHideVsmVolumes}' IS NOT TRUE
)
OR (
volume.id NOT IN (
SELECT
vsm.volume_id
FROM
storage.vsm
)
AND volume.id NOT IN (
SELECT
vsm.secondary_volume_id
FROM
storage.vsm
)
)
)
David,
the problem is not how SQL represents Boolean variables, it is how MVEL does it. $flagHideVsmVolumes is an MVEL Boolean, in other words, it is a string that can take the values 'true' or 'false', and this is how it gets passed to the SQL query. So to test it inside your SQL query, you have to treat it as a string:
'${flagHideVsmVolumes}' != 'true'
I believe you will find that written this way your query works.
Best of luck,
Christian
Bingo. Yep, that does the trick ... and in retrospect makes sense.
I'm still curious if anyone can import and re-create this test under WFA-2.2. Even this workflow with corrected SQL can cause the GUI to hang pretty quickly (like just unchecking the flag checkbox hung it for me just now ... where-as WFA-3.1p2 is solid as a rock.
Thank ou Christian !!