5. Mutil : de M(umps) toolkit van de derde generatie
5.1. Inleiding
Dit document beschrijft het gebruik van de toolcat applicatie mutil, een systeem toolkit op één (of meerdere) M databank(en).
5.2. Mutil : het idee
Toen met mutil begonnen werd, hadden wij een aantal betrachtingen :
Maak een tool, die operaties uitvoert op de M databank(en).
Zorg ervoor, dat de commando's zo eenvoudig en transparant mogelijk zijn
Mutil is een schil over de vendor systeemtools, die je het leven makkelijk(er) maakt.
Maak enkel gebruik van de core packages van Brocade, zodat mutil ook tot core package kan worden verheven.
Zorg ervoor, dat deze tool werkt, zonder voorafgaandelijk inladen van M routines
Laat eenvoudiger constructies toe in de commandline
Volledige ondersteuning van zowel Caché, YottaDB, als GT.M/YottaDB
Wij zijn hierin uiteindelijk geslaagd. Bij een tweede grote herziening hebben we een aantal betrachtingen toegevoegd :
Zorg ervoor, dat deze tool werkt voor meerdere geïnstalleerde M systemen, ook al zijn ze van verschillende origine, of toch voor die toepassingen, waar er nood is, zoals import en export van M objecten.
Maak een configuratietool, die je toelaat zo transparant mogelijk je M systeem(en) in kaart te brengen.
Maak een toolkit voor journal files. (zowel voor Cache als GT.M/YottaDB, uiteraard)
Zorg voor transparante import- en exportprocedures.
Maak modifiers optioneel, daar, waar de software ze zelf kan 'raden'.
5.3. Uci's en regions : een andere kijk op M databanken.
Een uci bepaalt de M database omgeving. Binnen een uci staat het vast, waar je globals en routines zich bevinden. Ze wordt steeds geassocieerd met een directory en een acroniem.
Voor GT.M/YottaDB databases is deze directory de plaats, waar zich een global configuratiefile glo.gld
bevindt. Het acroniem is een arbitrair gekozen afkorting, bepaald binnen de mutil configuratie
Voor Caché en ISM systemen is deze directory de plaats, waar de file CACHE.DAT
zich bevindt, die de Caché namespace bevat. Hier is het acroniem ook een arbitrair gekozen afkorting, bepaald binnen de mutil configuratie, doch doorgaans is dit naam van de Caché namespace.
De ingave van het argument namespace is case-ongevoelig.
Men gaat ervan uit, dat er steeds een default uci bestaat, en deze wordt gekenmerkt door het acroniem db
(= DB
) en de directory naam in registry waarde m-db
.
Voorbeeld :
DBX
Voorbeeld :
/library/database/brocade/base/0/
Een region bepaalt de plaats van een M database segment. Een of meerdere regions vormen samen een uci. Een region wordt bepaald door de naam van een file, die (een deel van) een M database bevat, en de naam van een acroniem, dat uniek is binnen de uci waarin ze wordt gedefinieerd.
Voor Caché systemen is er slechts één region per uci. Haar acroniem is steeds DEFAULT
.
Voor GT.M/YottaDB systemen is een mutil region niets anders dan een GT.M/YottaDB region. Haar acroniem wordt bepaald binnen de GT.M/YottaDB configuratie.
Voorbeeld :
DEFAULT
Voorbeeld :
/library/database/brocade/base/0/CACHE.DAT
Voorbeeld :
/library/database/brocade/base/0/mumps.dat
Voorbeeld :
/library/database/brocade/base/0/x.dat
5.4. Mutil en meerdere M versies : primaire en secundaire M versies
Mutil kan nu ook gebruikt worden voor meerdere M versies. Zo kan je op eenzelfde server zowel een GT.M/YottaDB versie draaien, en tegelijk een Caché versie. Maar gemixte versies, zoals een GT.M/YottaDB release 5.4 naast GT.M/YottaDB release 5.5 zijn ook denkbaar. De door mutil aangeboden functionaliteit is echter begrensd. Daarom spreekt men hier over twee types M versies :
Er is steeds één en slechts één primaire M versie, Deze is steeds de versie, die wordt gebruikt voor uci db. Ze is ook degene, waar Brocade toepassingen starten. Er is hier geen beperking op de mutil functionaliteit.
Alle andere geïnstalleerde M versies zijn secundair. De ondersteuning van mutil is vooral erop gericht om deze M systemen te benutten als test omgevingen, voor conversie doeleinden, e.a. . Typische ondersteunde mutil operaties zijn import en exports, uitlijsten van M objecten,.. maar niet : het starten/stoppen van het M systeem, backup/restore en dashboards om de actuele status e.d. te controleren.
5.5. Modifiers in mutil : enkele bemerkingen
Je merkt dat mutil een toolcat applicatie van de derde generatie is, want er wordt gretig gebruik gemaakt van modifiers. We lichten er enkele veel voorkomende toe, die steeds dezelfde betekenis hebben :
- uci
Bepaalt de M database omgeving. Zie voorgaande paragraaf.
Voorbeeld :
uci=DBX
Voorbeeld :
uci=/library/database/brocade/base/0/CACHE.DAT
- cwd
Bepaalt de 'current working directory', zoals trouwens in elke toolcat applicatie. Niet te verwarren met voorgaande.
Voorbeeld :
cwd=/library/process/myapp
- zip
Logische modifier. Bepaalt of een resultaat moet gezipt worden.
Voorbeeld :
zip=Yes
Voorbeeld :
zip=1
Voorbeeld :
zip=No
5.6. Vereenvoudiging
Expliciete referenties naar files of directories zijn niet strikt nodig. Zo kan je bij voorbeeld heel kort het volgende doen
mutil gout BPRED
Hier wordt dan in de current working directory een global output gemaakt van de global BPRED in (default) zwr formaat.
Refereren naar files, directories, .. wordt duidelijker:
Dit kan :
mutil gout BPRED file=/library/process/BCATlvd.mout format=m
Maar evengoed kan dit ook :
mutil gout BPRED cwd=/library/process file=BCATlvd.mout format=m
Verwijzingen naar M namespace omgevingen kunnen ook met de uci acroniemen :
Dit kan :
mutil gout XBCAT uci=/library/database/db/basex/0
Maar dit doet hetzelfde :
mutil gout XBCAT uci=dbx
Al naargelang kan men een resultaat gezipt kiezen of niet, d.m.v. modifier zip.
mutil rout '%*' uci=mgr cwd=/backup/somedir zip=yes
En dit zijn slechts enkele voorbeelden ter illustratie.
5.7. Mutil gebruiken binnen python scripts : mtoolkit
Je kan ook alle functionaliteit op volgende manier inbouwen in andere python scripts:
Voeg
from anet.mutil import mtoolkit
toe aan je script.Voor de overige functionaliteit verwijzen we graag naar het script
mtoolkit.py
zelf.
5.8. Mutil als configuratietool : mutil config
Aan boord van mutil zit nu ook een uitgebreide configuratietool, die je toelaat de verschillende uci's, regions - ook over verschillende M systemen heen - te configureren.
mutil config init
initialiseert een nieuwe configuratiefilemutil.ini
, in de start folder, bepaald door (core) delphi waardem-db
. Het systeem tracht zelf alle informatie over uci's, regions, ... te verzamelen. Het bestandmutil.ini
is een asci bestand, met een zodanige layout, dat je makkelijk zelf in een tekst editor kan wijzigen of deze zelfs kan aanmaken.De nieuw aangemaakte configuratie bevat enkel de informatie m.b.t. de primaire M versie. Het referentiepunt hiervoor vormt de delphi waarde
m-db
. Secundaire M versies of meerdere, niet-default namespaces moeten manueel worden toegevoegd.Bestaat de file reeds, dan gebeurt er niets, tenzij je uitvoert:
mutil config init force=yes
Het is best mogelijk, om zonder configuratiefile te werken : in dat geval worden - indien nodig - de parameters bepaald a.d.h.v. het levende systeem (net zoals in vorige releases). Eenmaal er een configuratiefile bestaat, wordt met hem rekening gehouden.
mutil config delete
schrapt gewoon de mutil configuratiefilemutil.ini
mutil config show
vertelt, waar de configuratiefile zich bevindt, en lijst de configuratie uit. Voorbeeldmutil config show -- uci config -- configfn = /library/database/brocade/base/0/mutil.ini Uci DB : mdir='/library/database/brocade/base/0', mostype='gtm' : region DEFAULT in /library/database/brocade/base/0/mumps.dat : - journalling is True, mode=before , journal path=/library/mumps/journal/gtm/default.mjl , purge after 2 days region X in /library/database/brocade/base/0/x.dat : - journalling is True, mode=before , journal path=/library/mumps/journal/gtm/x.mjl , purge after 2 days region Z in /library/database/brocade/base/0/z.dat : - journalling is False, mode=nobefore Uci DBCACHE : mdir='/lv3/db', mostype='cache' , *non-active*: region DEFAULT in /lv3/db/CACHE.DAT
mutil config install
voer je best uit, nadat je de configuratiefilemutil.ini
hebt aangepast. Hiermee worden eventuele nieuwe start- en stopscripts aangemaakt. Geen nood, indien je dit vergeet : bij een opstartmutil -start
worden deze aangemaakt, indien nodig.
mutil config check
controleert of het nodig is om nieuwe start- en stopscripts aan te maken, en doet dit ook desgevallend.
mutil config refresh
voer je best uit, nadat je - via de tools, eigen aan het M systeem - regions hebt gewijzigd of uci's hebt aangemaakt. De aanwezige uci configuratieparameters worden niet gewijzigd : dit laat je toe, om eventueel manuele wijzigingen niet te verliezen. Zo dadelijk daarover meer.
Bekijken we even de parameters binnen mutil.ini
: Voorbeeld:
pg /library/database/brocade/base/0/mutil.ini
[uci_DBCACHE]
active = False
stat = True
mostype = cache
mdir = /lv3/db
[reg_DBCACHE_DEFAULT]
journalmode =
journalpurge =
journalpath =
journalling = True
journaluse = 97
file = /lv3/db/CACHE.DAT
[uci_DB]
active = True
stat = True
mostype = gtm
mdir = /library/database/brocade/base/0
[reg_DB_X]
journalmode = before
journalpurge = 2,0
journalpath = /library/mumps/journal/gtm/x.mjl
journalling = True
file = /library/database/brocade/base/0/x.dat
[reg_DB_Z]
journalmode = nobefore
journalpurge =
journalpath =
journalling = False
file = /library/database/brocade/base/0/z.dat
[reg_DB_DEFAULT]
journalmode = before
journalpurge = 2,0
journalpath = /library/mumps/journal/gtm/default.mjl
journalling = True
file = /library/database/brocade/base/0/mumps.dat
[uci_DBBACKUP]
mdir = /library/brocadefull
mostype = gtm
stat = False
active = True
instance =
instname =
logdir = /library/brocadefull
readonly = True
[reg_DBBACKUP_DEFAULT]
file = /library/brocadefull/mumps.dat
journalpath =
journalling = False
journalmode = before
journalpurge = 7
journalbackup =
[replication_originating_DB_DB2]
active = False
destip =
destuci =
destport =
buffsize = 1048576
[replication_replicating_DBBACKUP]
active = False
listenport =
buffsize =
Je vindt vier soorten paragrafen :
[uci_*acroniem uci*]
bevatten de parameters per uci. Deze worden overschreven bij commandomutil -config init force=yes
Het *acroniem uci* bepaalt de naam van de uci, zoals ze wordt gebruikt in mutil. Hoewel dit doorgaans dezelfde naam heeft als de M namespace, kan deze toch afwijken ervan. Ze moet in ieder geval uniek zijn binnen eenzelfde mutil.ini configuratie.
[reg_*acroniem uci*_*acroniem region*]
bevatten de parameters per region. Deze worden overschreven bij commandomutil -config refresh
.Bij GT.M/YottaDB installaties is acroniem region = de effectieve naam van de region.
Bij Caché installaties is steeds acroniem region = DEFAULT .
[replication_originating_*acroniem uci*_*remote instname*]
bevatten de parameters van de replicatie van de data in de uci naar een machine met een bepaalde instance naam. Deze worden nooit overschreven .Bij GT.M/YottaDB installaties is remote instname een unieke naam, over alle servers heen. Ze hoort bij de uci op de remote server, die de gerepliceerde data zal ontvangen.
Bij Caché installaties is dit niet geimplementeerd.
[replication_replicating_*acroniem uci*]
bevatten de parameters, die beschrijven hoe de uci mirror speelt van een ander systeem. Deze worden nooit overschreven .Bij Caché installaties is dit niet geimplementeerd.
De uci parameters zijn:
active
vertelt of de uci wordt gebruikt. Bevat een Booleaanse waarde.False
heeft het zelfde effect, als zou je de paragraaf uitvegen.
stat
vertelt of er statistieken moeten worden bijgehouden over het verloop van de bezettingsgraad. Bevat een Booleaanse waarde.
mostype
vertelt het type van M implementatie. Bevat een van volgende woorden :gtm cache ism
mdir
bevat de naam van de directory, geassocieerd met de uci.Voor Caché systemen is dit de directory, waar de file
CACHE.DAT
zich bevindt.Voor GT.M/YottaDB systemen is dit de directory, waar de (kleine) file
glo.gld
, zich bevindt.
readonly
Optioneel. Indien dit de waardeTrue
bevat, dan houdt mutil er rekening mee, dat dit een readonly uci is. Dit speelt o.m. ook een rol bij gemirrorde databanken. Default=False.
instance
Optioneel. Bevat de naam van de replicatie file, die de huishouding van de replicatie voor zich neemt. Voorbeeld :/etc/gtm.repl
.
instname
Optioneel, en enkel belangrijk voor replicatie. Bevat een unieke naam, geassocieerd met de uci. Deze naam moet uniek zijn over alle Brocade servers heen. Van zodra deze waarde is ingevuld, treedt replicatie in werking : zelfs al zijn er geen bestemmingen voor de replicatie, toch wordt de replicatie geactiveerd op alle regions, waar journalling geactiveerd is, en draait een zogenaamde 'dummy' source server, die voornamelijk ervoor zorgt, dat er een journaal buffer pool wordt aangemaakt en onderhouden. Voorbeeld :Oostende
. Als je van plan bent om in de toekomst mirrors op te zetten, dan moet je dit voorafgaand invullen.
logdir
Optioneel. De dircetory naam, waar de logings van M systeemprocedures terechtkomen.
De reg(ion) parameters zijn:
file
bevat de naam van de database file van de region.
journalling
vertelt of journalling actief is. Bevat een Booleaanse waarde.
journalmode
bevat de waardenbefore
ofnobefore
. Enkel relevant voor GT.M/YottaDB.
journalpurge
Enkel relevant voor GT.M/YottaDB. In een Cach&ecaute; uci wordt dit geregeld via de huiseigen tools. Bevat het aantal dagen, waarna journal files mogen worden gewist. Dit kan ook twee getallen bevatten, gescheiden door een komma : het tweede getal is dan geldig bij de journal noodprocedure (ziejournaluse
) .
journalpath
bevat de posix path naam, waar journal files terechtkomen. Voor GT.M/YottaDB systemen is de naam van de file relevant, voor Caché systemen is de naam van de directory relevant ; de naam van de journal file wijzigt dynamisch binnen dezelfde directory.
journalbackup
bevat de locatie, waar een backup wordt bijgehouden van de journal files. Deze backup wordt enkel aangevuld. Elk argument dat kan dienen als target van een rsync operatie is geldig. Voorbeelden :/library/archive/journal
backup.uantwerpen.be:/library/moto/journal
.
journaluse
(Optioneel). Bevat een geheel getal tussen 1 en 100. Het stelt een maximum gebruikspercentage voor van het filesysteem, dat de journal files bevat. Eenmaal dit percentage bereikt, wordt bij het wissen van de journal files een noodprocedure gebruikt, waarbij de voorkeur wordt gegeven om te vermijden, dat een filesysteem volloopt, boven bvb. de synchronisatie met replicatie servers. Enkel relevant voor GT.M/YottaDB. In een Cach&ecaute; uci wordt dit geregeld via de huiseigen tools. Voorbeeld :98
.
De replication originating parameters zijn:
active
vertelt of de replicatie actief is. Bevat een Booleaanse waarde.
destip
ip adres van de mirror
destport
tcp poort nr van de mirror
destuci
naam van de ontvangende uci op de mirror. Default = 'db'
buffsize
buffer size van de replicatiebuffer. Zie GT.M/YottaDB documentatie. Voorbeeld : 33554432
filterexe
executable, die als filter dient bij de replicatie. Deze filter wordt aan de bron toegepast. Zie GT.M/YottaDB documentatie. Indien deze executable spaties bevat, dient ze tussen quotes te worden gezet. Voorbeeld : "sed '/^.*^BLIST.*$/! s/^.*$//g'"
De replication replicating parameters zijn:
active
vertelt of de replicatie actief is. Bevat een Booleaanse waarde.
listenport
poort nummer, waar de replicating service haar updates ontvangt van het originating systeem
buffsize
buffer size van de replicatiebuffer. Zie GT.M/YottaDB documentatie. Voorbeeld : 33554432
filterexe
executable, die als filter dient bij de replicatie. Deze filter wordt aan de bestemming toegepast. Zie GT.M/YottaDB documentatie. Indien deze executable spaties bevat, dient ze tussen quotes te worden gezet. Voorbeeld : "sed '/^.*^BLIST.*$/! s/^.*$//g'"
5.9. Statusinformatie over het geinstalleerde M systeem.
''mutil info`` verschaft je allerlei informatie over de configuratie en de geinstalleerde componenten van het M systeem. Het komt in twee varianten:
mutil info
verschaft algemene informatie over het geïnstalleerde M systeem.
mutil info [keyword]
verschaft je meer gedetailleerde informatie, en het thema wordt bepaald door keyword.mutil help info
verschaft je een up-to-date waaier aan mogelijkheden. We lichten een aantal verrassende dingen toe aan de hand van enkele voorbeelden.
mutil info glo BCAT
: verschaft je informatie over global BCAT, in welke region deze zich bevindt, statistieken over de grotte en hoeveelheid records,..
mutil info file myfile.zwr
verschaft je informatie over een file, en hoe mutil hiermee zou omgaan.
mutil info var UDuser
: verschaft je informatie over M variabele UDuser, en hoe deze wordt gebruikt en gemanipuleerd in de actuele geinstalleerde M routines, op basis van de laatste analyse.
mutil info obj project
: verschaft je informatie over waar project als identificatie wordt gebruikt in de actuele M installatie; ze tracht ook ineens afgeleide gegevens op te sporen en te tonen. Voorbeeld van een output:lookup project : Project: -history : project : -menuitem : d %Exec^ugnoizk("pr",$g(RDextra)) : history project : Project : mitem project : Nieuw/bewerk project -url : <mcgi routine="Entry:ugnwedit">&FDgntymenu=pr -parent : ir (Institutional repositories) : -path : /ir/project/irproject.b : mroutine ugnwedit: -created : 15.03.2023 14:16:57 (adescamp) : -modified : 20.09.2023 17:04:28 (adescamp) : -path : /gnoi/app/ugnwedit.m : mfolder ir : Institutional repositories:
5.10. Statusinformatie over het actuele M systeem.
mutil status keyword(s)
toont statusinformatie van het actueel draaiende M systeem. Mogelijke keywords zijn (je kan ze ook combineren):
locks
: de actueel geplaatste M locks
jobs
: een overzicht van de lopende M processen
sys
: informatie over het lopende besturingssysteem , met betrekking tot M
jou
: actuele informatie over journalling
repl
: actuele informatie over replicatie, zowel receiving als originating
qu
: de momentele wachtrij van uit te voeren M jobs
stats
: cijfers over de actuele M database
jou
: verschaft informatie over de actuele toestand i.v.m. journalling.
all
: alle voorgaande
probe
: een commando, speciaal bedoeld om een probe test te kunnen samenstellen op een levend systeem. Zo worden o.m. volgende checks uitgevoerd: - Is M aanspreekbaar ? (Hello World test) - Zijn er geen web-gerelateerde M processen, die te lang duren ? - Is de journal space niet in een noodsituatie ? - Zijn er geen replicatie servers, die te ver achterlopen ? Indien alles ok is, verschijnt de geijkte melding 'M tested succesfully'
mutil jobexam [jobnr]
verschaft informatie over M proces waarvoor$j=jobnr
. Bijkomende modifiervar=var
ofvar=*
laat je zelfs toe het verloop van de waarde van bepaalde M variabelen te volgen.
mutil status db
geeft een overzicht van de M databanken en hun grootte en vullingsgraad.
mutil chk integrity
voert een Integrity check uit op de databank en bericht hierover.
5.11. Import/Export van M routines
Routine export : enkele voorbeelden :
mutil rout mroutine
leest de broncode van M routine mroutine uit in filemroutine.ro
in de current working directory.
mutil rout bca* cwd=/library/tmp target=bcaall.ro
leest de broncode van alle M routines met prefixbca
uit in file/library/tmp/bcaall.ro
mutil rout bca* target=/library/tmp/bcaall.ro
doet precies hetzelfde.
mutil rout '%*' uci=mgr
haalt de routines uit manager directory, startend met een%
mutil rout '*' cwd=/library/tmp
exporteert de broncode van alle routines, waarbij de broncode van mroutine terecht komt in een file/library/tmp/mroutine.ro
mutil rout '*' cwd=/library/tmp target=all.ro
exporteert de broncode van alle routines in één file/library/tmp/all.ro
mutil rout '*' target=/library/tmpall.ro
doet precies hetzelfde
Routine import : enkele voorbeelden :
mutil rin bcawabc source=/library/tmp
leest de broncode van M routines in, die zich in file/library/tmp/bcawabc.ro
bevinden.
mutil rin /library/tmp/bcawabc.ro
doet precies hetzelfde.Ook wildcards van filenamen zijn veroorloofd :
mutil -rin /library/tmp/bcaw*
. Let wel, verwacht wordt een filenaam, die niet noodzakelijk de naam van een M routine voorstelt.Modifier
option=skip
laat je toe bestaande M routines te skippen.
5.12. Import/Export van M globals
Voor het importeren en exporteren van M globals kom je toe met twee commando's :
mutil gout
exporteert globals. Uitgebreide documentatie vind je viamutil help gout
.mutil gin
importeert globals. Uitgebreide documentatie vind je viamutil help gin
.
5.13. Uitvoeren van M code
Vanuit de Unix prompt kan je een M commando uitvoeren met behulp van argument exe. Enkele voorbeelden :
Dit roept eenvoudigweg routine routine op, en schrijft het resultaat op standaard output :
mutil -exe ^routine
Dit kan ook :
mutil exe Entry^routine
En zelfs met argumenten :
mutil exe Entry^routine("a","b")
Je kan ook rechtstreeks een M instructie opgeven :
mutil exe 'w "Hello",!'
De output kan je als volgt opvangen in een bestand :
mutil exe 'w "Hello",!' stdout='/library/tmp/hello.out'
Je kan ook argumentloos werken, en dan tuimel je in direct mode :
Dit kan :
mutil exe
En is precies hetzelfde als :
mutil direct
En dit kan ook :
mutil direct uci=dbcache
en werkt ook voor secundaire M databanken.
Een file met M lijnen kan je uitvoeren via argument min
= 'M(umps) in(put)' (Dit is een synoniem voor gin
, trouwens). Gezipte files worden ook uitgelezen zonder dat ze eerst worden uitgepakt.
mutil min ZC.mout
voert de M code uit, die zich bevindt in fileZC.mout
. Eventuele output komt op standaard output terecht.
mutil min ZC
doet net hetzelfde.Uiteraard kan je explicieter je filenaam aanduiden, en wildcards zijn ook toegelaten :
mutil min '/library/process/conversion/BCAT*'
en
mutil min 'BCAT*' cwd=/library/process/conversion
doen net hetzelfde.
Om vanuit een python toepassing M code uit te voeren, val je best terug op de core module mumps
. In Interactie tussen Python3 en Mumps gaat men uitgebreid in op dit onderwerp. Volgende constructie in python is evenwel ook geldig, en voert de M instructies uit die zich in file filename bevinden :
from anet.mutil import mtoolkit
mtoolkit.mexefile(filename, stdout=None)
5.14. M backup/restore
De backup faciliteit binnen mutil levert je geen kant-en-klare backup procedure op, maar wel een aantal middelen om deze te verwezenlijken. Het is de bedoeling om via het beheer van automatische processen een aangepaste lijst van backup instructies samen te stellen.
Hier spreekt men naast het begrip uci ook over een region. Daar, waar een uci verwijst naar een directory als referentie naar een database omgeving, verwijst een region steeds naar een database file, die een (deel van een) database bevat. Voor een overzicht kan je beide oplijsten:
mutil list uci
mutil list reg
Per directory kan er slechts één M systeem actief zijn.
5.15. Uitlijsten van M objecten : mutil list
Volgende typische M objecten kunnen worden uitgelijst op standaard output : (we illustreren met enkele voorbeelden)
mutil -list uci
: lijst alle uci's uit, die gekend zijn in deze configuratie.mutil -list reg
: lijst alle gekende regions uit, die gekend zijn in deze configuratie.mutil -list glo '*'
: lijst alle globals uit.mutil -list glo 'BCA*' 'BOJ*' uci=DBCACHE
: lijst alle globals uit, gekend in uci DBCACHE, en waarvan de naam begint met 'BCA' of 'BOJ'mutil -list rou 'u*'
: lijst alle routines uit, waarvan de naam begint met de letter 'u'.
5.16. Schrappen van M objecten
De vier types M objecten, die kunnen geschrapt worden, zijn routines, globals, M jobs en Cache globals. Een toelichting aan de hand van enkele voorbeelden :
mutil kill rou 'za*'
schrapt de routines, waarvan de naam begint metza
mutil kill rou 'za*' test=yes
toont op stdout de namen van de routines, die zouden geschrapt worden.mutil kill rou 'za*' test=yes
toont op stdout de namen van de routines, die zouden geschrapt worden.mutil kill glo 'ZAD*' 'ZMUTIL'
schrapt de globals, waarvan de naam begint met ZAD, en de global ZUTIL.mutil kill glo 'ZAD*' 'ZMUTIL' uci=dbx
doet hetzelfde in namespace dbx
Enkele doordenkertjes :
mutil kill glo ZAD*.zwr
zoekt de files, die beantwoorden aan de matchZAD*.zwr
in de huidige directory, en houdt dan die namen over, waar de basename van de file toevallig een bestaande global ismutil kill glo ZAD*
doet hetzelfde met de matchZAD*
mutil kill glo 'ZAD*'
killt alle globals, waarvan de naam metZAD
begint. Dit is dus wezenlijk verschillend van het vorige.mutil kill glo /library/process/someplace/ZAD*.gof
is ook een zinnige constructie
5.17. Import van csv bestanden
Dit illustreren we met enkele stichtende voorbeelden :
mutil csvin test.csv ZCSV node1 node2
schrapt global nodek ^ZCSV("node1","node2")
, en leest de inhoud van de file test.csv in de current directory in de global. De inhoud van de verschillende cellen komen terecht in^ZCSV("node1","node2",rijnummer,kolomnummer)=inhoud
Alle argumenten, buiten het eerste, worden samengerijgd om de global tak te definiëren.Volgende twee manieren verwijzen expliciet naar de directory , waar de csv file staat (en doen precies hetzelfde) :
mutil csvin /library/tmp/test.csv ZCSV node1 node2
mutil csvin test.csv ZCSV node1 node2 cwd=/library/tmp
Uiteraard kan je een andere namespace definiëren :
mutil csvin test.csv ZCSV node1 node2 cwd=/library/tmp uci=dbx
De aangeboden csv bestanden worden geacht te zijn in het gebruikelijke csv formaat.
5.18. Import van JSON bestanden
Zeer analoog aan wat je met csv bestanden kan, kan je dit nu ook met JSON gestructureerde files.
mutil jsin test.json ZCSV node1 node2
schrapt global nodek ^ZCSV("node1","node2")
, en leest de inhoud van de file test.json in de current directory in de global. De inhoud van de verschillende cellen komen terecht in^ZCSV("node1","node2",...)=inhoud
, die de structuur volgen van de JSON file.
5.19. Starten/stoppen van M
mutil start
start het M systeem. Dit commando is bedoeld om in een service opstartscript te plaatsenmutil stop
stopt het M systeem. Zelfde opmerking. Bij zowelGT.M/YottaDB
alsCaché
systemen gebeurt dit in twee fazen :Er wordt eerst getracht het M systeem op een normale manier te stoppen
Als dit mislukt, dan wordt het stoppen geforceerd.
Let in het bijzonder op modifier iamservice, waar - voor noodgevallen en debugging - het start- of stopscript wordt uitgevoerd rechtstreeks door jouw proces.
5.20. Brocade's global lister : mutil gl
De global lister is een uitgebouwd instrument om globals of delen van globals uit te lijsten.
Je kan haar niet alleen oproepen via de Unix prompt, maar tevens :
In de M omgeving :
d ^ugl
In de Brocade interface, via menu optie Global lister [link]
In Brocade applicaties via macro
m4_stdUrlMGlobal
Geldige argumenten zijn:
- Geen enkel argument. In dat geval wordt naar een argument gevraagd.
Voorbeeld :
mutil gl
- Een open referentie naar een global.
Voorbeeld :
mutil gl 'BMETA('
: De volledige inhoud van deze global wordt dan getoond.
- Een deel van een global, met vaste subscripts.
Voorbeeld :
mutil gl 'BCAT("lvd",,"au",'
of in promptvriendelijke notatie :
mutil gl BCAT/lvd//au
- Een gesloten referentie naar een deel van een global. Voorbeeld
mutil gl 'BCAT("lvd",,"au",)'
In dit geval worden enkel de subscripts t.e.m. niveau 4 getoond.
- Een gesloten referentie naar een deel van een global. Voorbeeld
- Een deel van een global, waarbij bepaalde subscripts beperkt blijven tot een range.
Voorbeeld :
mutil gl 'BCAT("biomed","20000":,"re"'
(Subcript 2 = vanaf waarde 20000 ) Voorbeeld :mutil gl 'BCAT("biomed","20000":"100000","re"'
( Subcript 2 = vanaf waarde 20000 tot 10000 )Let hier op het gebruik van de quotes, om een onderscheid te maken tussen waarden, die een subscript kan aannemen, en scheidingstekens.
- Een deel van een global, met vooropgestelde patronen voor bepaalde subscripts.
Voorbeeld :
mutil gl 'BCAT("biomed",20000:,"re",r*,,??biomed:*'
Let op het verschil met :
mutil gl 'BCAT("biomed",20000:,"re","r*",,??biomed:*'
, waarbij hier wel degelijk gezocht wordt naar subscript met waarder*
op niveau 4.
- Een Linkable Object Identifier, ofte loi:
Voorbeelden :
mutil gl c:lvd:6876336
mutil gl rq:impala:888
mutil gl 'm:bibrecview'
mutil gl 'm:i:5788'
mutil gl e:UA:75884
mutil gl 'lt:UA:567893455'
mutil gl 'job:123456
- Een Linkable Object Identifier, met extra restricties:
Voorbeelden :
mutil gl 'c:lvd:6876336(pk,UA*'
is hetzelfde alsmutil gl 'c:lvd:6876336,pk,UA*'
Geldige modifiers zijn :
uci
zoals gebruikelijk. (Opmerking : voor secundaire globals werkt dit, voor zover de nodige routines zijn geinstalleerd.)max
: het maximum aantal output lijnen. Oneindig bij ontstentenis.order
: de volgorde, waarin de global moet worden doorlopen.order=-1
= in omgekeerde volgorde,order=+1
(default) = in gewone volgorde.
5.21. Debuggen van M code : mutil trace
mutil trace
laat je toe, van M variabelen de waarden te tonen, die ze tijdens de uitvoering van M code aannemen. Dit gebeurt op wens, en wordt aangezet door het inbouwen van de macro m4_trace
in de software code. Meer informatie over het gebruik hiervan vind je bij de documentatie van deze macro.
Je kan mutil trace
als volgt gebruiken :
Geldige argumenten zijn:
de naam van een (getracete) M variabele. Voorbeeld :
mutil trace FDlnsys
een patroon van M variabelen. Voorbeeld :
mutil trace 'FD*'
of gewoon alles, wat voorhanden is. Voorbeeld :
mutil trace '*'
Geldige modifiers zijn :
user=brocade user id
beperkt je output tot de processen, uitgevoerd onder brocade user id. Voorbeeld :mutil trace FDtrans user=rphilips
De output vermeldt ook een timestamp , en geeft alle aangenomen waarden van de M variabelen weer in volgorde van oud naar nieuw. Voorbeeld :
mutil trace 'RDr*'
( adescamp, blnwrshw, 16.08.2012 15:28:05 ):
RDrloi=r:UA:8883
( adescamp, blnwrshw, 16.08.2012 15:28:05 ):
RDrloi=r:UA:8980
( adescamp, blnwrshw, 16.08.2012 15:28:05 ):
RDrloi=r:UA:8980
( adescamp, blnwrshw, 16.08.2012 15:28:05 ):
RDrloi=r:UA:8990
5.22. Checken van geinstalleerde M code : mutil chk rou
mutil chk rou
laat je toe, de M parser los te laten op een set van M routines, en een rapport te genereren, dat zowel syntax fouten oplijst, als overtredingen tegen de styleguide. Ze duiden op mogelijke problemen bij het opstarten van de code, en interferentie met andere code. De parser werkt op de geinstalleerde M routine, die enkel M instructies zou moeten bevatten, en waarbij alle macro's zijn vertaald.
Je kan mutil chk rou
als volgt gebruiken :
Geldige argumenten zijn:
de naam van een geinstalleerde M routine(getracete) M variabele. Voorbeeld :
mutil chk rou uwwwscr
een patroon van M routine namen. Voorbeeld :
mutil chk rou 'uwww*'
Geldige extra argumenten zijn :
after:[datum]
beperkt je output tot de routines, gewijzigd na een gegeven datum. De datum kan ook relatief worden gegeven, bvb :after:-1
production:[1/0]
beperkt je output tot de routines, die 'in productie' zijn, of net niet. (zie macro getMRoutineTech)
5.23. Opzetten van een online mirror
Om een online mirror van je M databank op te zetten, volg volgende procedure :
Configureer op primary en secundary server de .ini bestanden : (zie ook mutil configuratie`_ ) .
Lanceer op de primary een backup in mirror mode ; dit kan op een levend systeem . Voorbeeld:
mutil backup '*' cwd=/library/tmp/mybackup mode=mirror
Hierbij is het belangrijk, dat je de wildcard "*" gebruikt. Er wordt in de folder niet alleen een backup geschreven van de verschillende databank segmenten, maar ook de zgn. replication instance file.Leg het M systeem stil op de secundary server:
mutil stop
copieer de databank segmenten naar de secundary server, op de plaats, waar de configuratie ze voorzien heeft
copieer de replication instance file naar de secundary, op de plaats, waar de configuratie ze voorzien heeft
voer uit op primary en secondary server:
mutil stop
mutil start
controleer de werking van de replicatie :
mutil status repl