Using macro processing utilities with policy rules
Prior to evaluating the policy rules, GPFS™ invokes the m4 macro processor to process the policy file.
This processing allows you to incorporate into the policy
file some of the traditional m4 facilities
and to define simple and parameterized macros, conditionally include
text, perform conditional evaluation, perform simple string operations,
perform simple integer arithmetic and much more.
Note: GPFS uses the m4 built-in changequote macro
to change the quote pair to [ ] and the changecom macro
to change the comment pair to /* */ (as in the C programming language).
Utilizing m4 as
a front-end processor simplifies writing policies and produces policies
that are easier to understand and maintain. Here is Example 14 from Policy rules: Examples and tips written with
a few m4 style macro definitions:
define(access_age,(DAYS(CURRENT_TIMESTAMP) - DAYS(ACCESS_TIME)))
define(weight_expression,
CASE
WHEN access_age > 365
THEN 100000 + access_age
WHEN access_age < 30
THEN 0
ELSE
KB_ALLOCATED
END
)
RULE year-old MIGRATE FROM POOL pool_X
THRESHOLD(90,50) WEIGHT(weight_expression)
TO POOL pool_ZZ
WHERE access_age > 365
RULE 3month-old MIGRATE FROM POOL pool_X
THRESHOLD(90,80) WEIGHT(weight_expression)
TO POOL pool_ZZ
WHERE access_age > 90
If you would like to use megabytes or gigabytes
instead of kilobytes to represent file sizes, and SUNDAY, MONDAY,
and so forth instead of 1, 2, and so forth to represent the days of
the week, you can use macros and rules like this:
define(MB_ALLOCATED,(KB_ALLOCATED/1024.0))
define(GB_ALLOCATED,(KB_ALLOCATED/1048576.0))
define(SATURDAY,7)
define(SUNDAY,1)
define(MONDAY,2)
define(DAY_OF_WEEK, DayOfWeek(CURRENT_DATE))
RULE 'gb1' WHEN(DAY_OF_WEEK IN (SATURDAY,SUNDAY))
MIGRATE TO POOL 'ypooly' WHERE GB_ALLOCATED >= .015
RULE 'mb4' MIGRATE TO POOL 'zpoolz' WHERE MB_ALLOCATED >= 4
The mmapplypolicy command provides a -M option that can be used to specify m4 macro definitions when the command is invoked. The policy rules may include variable identifiers whose values can be set using one or more -M options on the mmapplypolicy command. The policy rules could then compare file attributes to the currently provided values for the macro defined variables.
Among other things,
this allows you to create a single policy file and reuse it for incremental
backups without editing the file for each backup. For example, if
your policy file contains the rules:
RULE EXTERNAL POOL 'archive' EXEC '/opts/hpss/archiveScript' OPTS '-server archive_server'
RULE 'mig1' MIGRATE TO POOL 'dead' WHERE ACCESS_TIME < TIMESTAMP(deadline)
RULE 'bak1' MIGRATE TO POOL 'archive' WHERE MODIFICATION_SNAPID > last_snapid
Then, if you invoke mmapplypolicy with
these options
mmapplypolicy ... -M "deadline='2006-11-30'" -M "last_snapid=SNAPID('2006_DEC')" \
-M archive_server="archive.abc.com"
The "mig1" rule will migrate old files
that were not accessed since 2006/11/30 to an online pool named "dead".
The "bak1" rule will migrate files that have changed
since the 2006_DEC snapshot to an external pool named "archive".
When the external script /opts/hpss/archiveScript is
invoked, its arguments will include "-server archive.abc.com".