|
|
Line 3: |
Line 3: |
| It has been used as the basis for several of the GT.M workshops at [[VistA Community Meeting]]s. | | It has been used as the basis for several of the GT.M workshops at [[VistA Community Meeting]]s. |
| | | |
− | It is available for download from the {{WVSFPAGE}} and the document re-created here: | + | It is available for download from the {{WVSFPAGE}}. |
− | | |
− | <html>
| |
− | </head><body dir="ltr" lang="en-US">
| |
− | <h1 align="center"><img src="index_files/FNFIS_logo.jpg" name="graphics7" align="right" border="0" height="77" width="156"><img src="index_files/powered_by_gtm_wo.jpg" name="graphics9" align="left" border="0" height="58" width="95"><font face="Nimbus Sans L, sans-serif"><font size="5">Welcome
| |
− | to the GT.M Acculturation Live CD!</font></font></h1>
| |
− | <p><br><br>
| |
− | </p>
| |
− | <p><font color="#ff00ff"><font face="Nimbus Roman No9 L, serif"><font size="3">Although
| |
− | you can read this document in your current environment, you will need
| |
− | to boot this CD in order to get the most benefit from it. When you
| |
− | boot it, please either:</font></font></font></p>
| |
− | <ul>
| |
− | <li><p><font color="#ff00ff"><font face="Nimbus Roman No9 L, serif"><font size="3">connect
| |
− | a 512MB USB flash drive (also known as a jump drive or thumb drive),
| |
− | or</font></font></font></p>
| |
− | </li><li><p><font color="#ff00ff"><font face="Nimbus Roman No9 L, serif"><font size="3">ensure
| |
− | that the hard disk has a partition with at least 300MB in size with
| |
− | either</font></font></font></p>
| |
− | <ul>
| |
− | <li><p><font color="#ff00ff"><font face="Nimbus Roman No9 L, serif"><font size="3">a
| |
− | FAT file system,</font></font></font></p>
| |
− | | |
− | </li><li><p><font color="#ff00ff"><font face="Nimbus Roman No9 L, serif"><font size="3">a
| |
− | Linux file system, or</font></font></font></p>
| |
− | </li><li><p><font color="#ff00ff"><font face="Nimbus Roman No9 L, serif"><font size="3">a
| |
− | partition which can be over-written with a Linux file system –
| |
− | tools to partition the disk drive and create a Linux file system
| |
− | are included on the CD).</font></font></font></p>
| |
− | </li></ul>
| |
− | </li></ul>
| |
− | <p><img src="index_files/penguin12.gif" name="graphics8" align="right" border="0" height="76" width="90"><font face="Nimbus Roman No9 L, serif"><font size="3"><u><b>Note:
| |
− | there is no “Start” button. Clicking on the screen
| |
− | background with the right mouse button pops up the menu.</b></u></font></font></p>
| |
− | | |
− | <h1><font face="Nimbus Sans L, sans-serif"><font size="5">Table of
| |
− | Contents</font></font></h1>
| |
− | <ul>
| |
− | <li><p><a href="#2.Overview%7Coutline"><b><u><font face="Nimbus Roman No9 L, serif">Overview</font></u></b></a></p>
| |
− | <ul>
| |
− | <li><p><a href="#GT.M%7Coutline"><font face="Nimbus Roman No9 L, serif">GT.M</font></a></p>
| |
− | </li><li><p><a href="#Acculturation%20Workshop%7Coutline"><font face="Nimbus Roman No9 L, serif">Acculturation
| |
− | Workshop</font></a></p>
| |
− | </li><li><p><a href="#VistA%7Coutline"><font face="Nimbus Roman No9 L, serif">VistA</font></a></p>
| |
− | | |
− | </li><li><p><a href="#Linux%20Live%20CD%7Coutline"><font face="Nimbus Roman No9 L, serif">Linux
| |
− | Live CD</font></a></p>
| |
− | </li><li><p><a href="#Hardware%20Requirements%7Coutline"><font face="Nimbus Roman No9 L, serif">Hardware
| |
− | Requirements</font></a></p>
| |
− | </li><li><p><a href="#Conventions%7Coutline"><font face="Nimbus Roman No9 L, serif">Conventions</font></a></p>
| |
− | </li><li><p><a href="#Legal%20Stuff%7Coutline"><font face="Nimbus Roman No9 L, serif">Legal
| |
− | Stuff</font></a></p>
| |
− | </li></ul>
| |
− | </li><li><p><a href="#3.Getting%20Started%7Coutline"><b><u><font face="Nimbus Roman No9 L, serif">Getting
| |
− | Started</font></u></b></a></p>
| |
− | | |
− | <ul>
| |
− | <li><p><a href="#FAT%20File%20System%7Coutline"><font face="Nimbus Roman No9 L, serif">FAT
| |
− | File System</font></a></p>
| |
− | <ul>
| |
− | <li><p><a href="#Mounting%20a%20read/write%20partition%7Coutline"><font face="Nimbus Roman No9 L, serif">Mounting
| |
− | a Read/Write Partition</font></a></p>
| |
− | <ul>
| |
− | <li><p><a href="#Graphical%20Mounting%20Tool%7Coutline"><font face="Nimbus Roman No9 L, serif">Graphical
| |
− | Mounting Tool</font></a></p>
| |
− | </li><li><p><a href="#Mounting%20With%20Shell%20Commands%7Coutline"><font face="Nimbus Roman No9 L, serif">Mounting
| |
− | with Shell Commands</font></a></p>
| |
− | | |
− | </li></ul>
| |
− | </li><li><p><a href="#First%20usage%7Coutline"><font face="Nimbus Roman No9 L, serif">First
| |
− | Usage</font></a></p>
| |
− | </li><li><p><a href="#First%20and%20subsequent%20usage%7Coutline"><font face="Nimbus Roman No9 L, serif">First
| |
− | and Subsequent Usage</font></a></p>
| |
− | </li></ul>
| |
− | </li><li><p><a href="#Linux%20file%20system%7Coutline"><font face="Nimbus Roman No9 L, serif">Linux
| |
− | File System</font></a></p>
| |
− | <ul>
| |
− | <li><p><a href="#First%20usage%7Coutline"><font face="Nimbus Roman No9 L, serif">First
| |
− | Usage</font></a></p>
| |
− | | |
− | </li><li><p><a href="#Subsequent%20usage%7Coutline"><font face="Nimbus Roman No9 L, serif">Subsequent
| |
− | Usage</font></a></p>
| |
− | </li></ul>
| |
− | </li></ul>
| |
− | </li><li><p><a href="#4.Start+GT.M+%3F+ready+to+run+VistA%7Coutline"><b><u><font face="Nimbus Roman No9 L, serif">Start
| |
− | GT.M – Ready to Run VistA</font></u></b></a></p>
| |
− | </li><li><p><a href="#5.Excellent%20Documentation%7Coutline"><b><font face="Nimbus Roman No9 L, serif">Excellent
| |
− | Documentation</font></b></a></p>
| |
− | <ul>
| |
− | | |
− | <li><p><a href="#Manuals%7Coutline"><font face="Nimbus Roman No9 L, serif">Manuals</font></a></p>
| |
− | </li><li><p><a href="#Technical%20Bulletins%7Coutline"><font face="Nimbus Roman No9 L, serif">Technical
| |
− | Bulletins</font></a></p>
| |
− | </li></ul>
| |
− | </li><li><p><a href="#6.GT.M+%3F+a+MUMPS+unlike+any+other%7Coutline"><b><font face="Nimbus Roman No9 L, serif">GT.M
| |
− | – a MUMPS Unlike Any Other</font></b></a></p>
| |
− | <ul>
| |
− | <li><p><a href="#GT.M%20is%20just%20like%20any%20other%20M%20implementation%7Coutline"><font face="Nimbus Roman No9 L, serif">GT.M
| |
− | is Just Like Any Other M Implementation</font></a></p>
| |
− | | |
− | </li><li><p><a href="#Routines%20are%20in%20the%20file%20system%7Coutline"><font face="Nimbus Roman No9 L, serif">Routines
| |
− | are in the File System</font></a></p>
| |
− | <ul>
| |
− | <li><p><a href="#Exercise%7Coutline"><font face="Nimbus Roman No9 L, serif">Exercise
| |
− | – Compiling & Linking</font></a></p>
| |
− | </li></ul>
| |
− | </li><li><p><a href="#Global%20directories%20point%20to%20global%20variables%7Coutline"><font face="Nimbus Roman No9 L, serif">Global
| |
− | Directories Point to Global Variables</font></a></p>
| |
− | | |
− | </li><li><p><a href="#$ZROUTINES%20and%20$ZGBLDIR%20vs.%20UCI%20&%20Volume%20set%7Coutline"><font face="Nimbus Roman No9 L, serif">$ZROUTINES
| |
− | and $ZGBLDIR vs. UCI & Volume set</font></a></p>
| |
− | </li><li><p><a href="#Example:%20Development%20environments%7Coutline"><font face="Nimbus Roman No9 L, serif">Example:
| |
− | Development Environments</font></a></p>
| |
− | </li><li><p><a href="#Example:%20Application%20Service%20Provider%7Coutline"><font face="Nimbus Roman No9 L, serif">Example:
| |
− | Application Service Provider</font></a></p>
| |
− | <ul>
| |
− | <li><p><a href="#Exercise+%3F+GDE+commands+for+ASP%7Coutline"><font face="Nimbus Roman No9 L, serif">Exercise
| |
− | – GDE Commands for ASP</font></a></p>
| |
− | | |
− | </li></ul>
| |
− | </li><li><p><a href="#GT.M%20leverages%20the%20operating%20system%7Coutline"><font face="Nimbus Roman No9 L, serif">GT.M
| |
− | Leverages the Operating System</font></a></p>
| |
− | </li><li><p><a href="#Security%7Coutline"><font face="Nimbus Roman No9 L, serif">Security</font></a></p>
| |
− | <ul>
| |
− | <li><p><a href="#Security%7Coutline"><font face="Nimbus Roman No9 L, serif">Exercise
| |
− | – Security</font></a></p>
| |
− | </li></ul>
| |
− | | |
− | </li><li><p><a href="#No%20special%20startup%20or%20shutdown%7Coutline"><font face="Nimbus Roman No9 L, serif">No
| |
− | Special Startup or Shutdown</font></a></p>
| |
− | </li><li><p><a href="#Journaling+%3F+the+key+to+database+integrity%7Coutline"><font face="Nimbus Roman No9 L, serif">Journaling
| |
− | – the Key to Database Integrity</font></a></p>
| |
− | </li><li><p><a href="#Exercise%20-%20journaling%7Coutline"><font face="Nimbus Roman No9 L, serif">Exercise
| |
− | – Journaling</font></a></p>
| |
− | </li><li><p><a href="#Database%20replication%7Coutline"><font face="Nimbus Roman No9 L, serif">Database
| |
− | Replication</font></a></p>
| |
− | </li><li><p><a href="#Replication%20and%20Backlogs%7Coutline"><font face="Nimbus Roman No9 L, serif">Replication
| |
− | and Backlogs</font></a></p>
| |
− | | |
− | <ul>
| |
− | <li><p><a href="#Exercise+%3F+replication+backlogs%7Coutline"><font face="Nimbus Roman No9 L, serif">Exercise
| |
− | – Replication Backlogs</font></a></p>
| |
− | </li></ul>
| |
− | </li><li><p><a href="#Backup%7Coutline"><font face="Nimbus Roman No9 L, serif">Backup</font></a></p>
| |
− | <ul>
| |
− | <li><p><a href="#Exercise%20-%20backup%7Coutline"><font face="Nimbus Roman No9 L, serif">Exercise
| |
− | – Backup</font></a></p>
| |
− | | |
− | </li></ul>
| |
− | </li><li><p><a href="#Potential%20surprises%7Coutline"><font face="Nimbus Roman No9 L, serif">Potential
| |
− | Surprises</font></a></p>
| |
− | </li><li><p><a href="#Exploit%20integration%20with%20underlying%20operating%20system%7Coutline"><font face="Nimbus Roman No9 L, serif">Exploit
| |
− | Integration with Underlying Operating System</font></a></p>
| |
− | </li></ul>
| |
− | </li><li><p><a href="#7.In%20conclusion%7Coutline"><b><font face="Nimbus Roman No9 L, serif">In
| |
− | Conclusion</font></b></a></p>
| |
− | </li></ul>
| |
− | <h1><a name="2.Overview|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="5">Overview</font></font></h1>
| |
− | <h2><a name="GT.M|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="4"><i>GT.M</i></font></font></h2>
| |
− | | |
− | <p><font face="Nimbus Roman No9 L, serif"><a href="http://www.sanchez-gtm.com/">GT.M™</a>
| |
− | is an implementation of the ISO standard scripting & application
| |
− | development language M, commonly known as MUMPS from <a href="http://fidelityinfoservices.com/">Fidelity
| |
− | Information Services, Inc.</a> As the platform for the <a href="http://www.fidelityinfoservices.com/fnfis/markets/midtierlgbanking/corebanking/profile">Fidelity
| |
− | Profile</a> application, GT.M is the most widely used M
| |
− | implementation in banking and finance, including the <a href="http://www.sanchez-gtm.com/news/news.htm">largest
| |
− | real time core processing system that is live at any bank anywhere in
| |
− | the world</a>. GT.M is increasingly used in healthcare, and is likely
| |
− | the most widely used M on Linux. The implementation of GT.M on the
| |
− | GNU/Linux operating system on industry standard x86 architecture
| |
− | hardware is available under the GNU General Public License, and is
| |
− | the M implementation used for the FOSS stack for VistA.</font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">GT.M is
| |
− | architected with the following objectives:</font></font></p>
| |
− | <ul>
| |
− | | |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Without
| |
− | compromise, the robustness, security and integrity of the
| |
− | information entrusted to it.</font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Open
| |
− | architecture, with easy, standards based access to the information
| |
− | in the database.</font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Continuity
| |
− | of business – GT.M has unique functionality for the deployment
| |
− | of mission-critical applications that must be available 24 hours a
| |
− | day, 365 days a year, with no down time even for planned events.</font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Throughput,
| |
− | performance and scalability to meet the needs of the largest
| |
− | institutions in the world.</font></font></p>
| |
− | </li></ul>
| |
− | <p><font face="Nimbus Roman No9 L, serif">Free support for GT.M is
| |
− | provided by the community on <a href="http://sourceforge.net/forum/?group_id=11026">various
| |
− | mailing lists and electronic forums</a>, and 24x365 support is
| |
− | available from Fidelity on a commercial basis.</font></p>
| |
− | | |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">GT.M provides:</font></font></p>
| |
− | <ul>
| |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">full ACID
| |
− | (Atomic, Consistent, Isolated, Durable) transaction semantics,</font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">throughput
| |
− | that scales to the needs of enterprise wide applications, and</font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">unique
| |
− | functionality for creating logical dual site configurations for
| |
− | mission critical applications that must always be available;
| |
− | including during upgrades, and even upgrades involving changes to
| |
− | the database schema.</font></font></p>
| |
− | </li></ul>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">This CD
| |
− | includes GT.M V5.0-000C.</font></font></p>
| |
− | <h2><a name="Acculturation Workshop|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="4"><i>Acculturation
| |
− | Workshop</i></font></font></h2>
| |
− | | |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">The GT.M
| |
− | acculturation workshop is a hands-on GT.M “boot camp” for
| |
− | M professionals who are not familiar with GT.M, as well as for those
| |
− | interested in GT.M configuration, administration and operations. This
| |
− | file is the script, or workbook, for the workshop, and consists of
| |
− | the exercises below. The exercises are designed to be carried out by
| |
− | booting the GT.M Acculturation live CD. To do so, you should be
| |
− | reading this in a browser window on your PC desktop after boot-up. If
| |
− | that is not the route that brought you to your perusal of this
| |
− | document, then please boot the GT.M Acculturation live CD and
| |
− | continue.</font></font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">The workshop
| |
− | is not a course in M programming – familiarity with another M
| |
− | implementation (or with GT.M for those using these exercises to
| |
− | refine their skills) is assumed. Familiarity with Linux<sup>®</sup>
| |
− | (or at least UNIX<sup>®</sup>) is highly desirable, but not
| |
− | absolutely required.</font></font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">As the
| |
− | differences between GT.M and other M implementations are more in the
| |
− | area of configuration and systems administration rather than M
| |
− | language features, the former topics are the major thrust of the
| |
− | workshop.</font></font></p>
| |
− | <h2><a name="VistA|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="4"><i>VistA</i></font></font></h2>
| |
− | | |
− | <p><font face="Nimbus Roman No9 L, serif">The <a href="http://www.va.gov/">US
| |
− | Department of Veterans Affairs</a> is one of the largest integrated
| |
− | healthcare networks in the world. Delivering legally mandated high
| |
− | quality care to veterans of the US armed forces, it has repeatedly
| |
− | been recognized not only for the quality, but also for the
| |
− | cost-effectiveness, of the care that it provides.</font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif">VistA is an HIS developed
| |
− | and maintained by the VA, based on the systems software architecture
| |
− | and implementation methodology developed by the US Public Health
| |
− | Service jointly with the National Bureau of Standards. VistA is used
| |
− | throughout the VA system, and variants are used by the US Department
| |
− | of Defense, the Indian Health Service (an agency of the US Department
| |
− | of Health and Human Services), as well as at numerous institutions
| |
− | around the world. VistA has a proven track record of supporting a
| |
− | large variety of settings and medical delivery systems. The software
| |
− | is in the public domain and freely available. Many providers support
| |
− | VistA on a commercial basis, and there is an <a href="http://lists.sourceforge.net/lists/listinfo/hardhats-members">active
| |
− | online VistA community</a>.</font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">For all
| |
− | healthcare organizations, VistA can provide a cost-effective
| |
− | enterprise resource planning (ERP) system. It is written in the
| |
− | ANSI/ISO standard programming language M (also known as MUMPS), With
| |
− | origins in the field of healthcare informatics, M is the de facto
| |
− | standard for healthcare software.</font></font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif">The GT.M Acculturation live
| |
− | CD uses the US Department of Veterans Affairs' acclaimed VistA
| |
− | healthcare information system as a sample GT.M application, and is
| |
− | itself a repackaged VistA live CD that can be downloaded from the
| |
− | <a href="http://sourceforge.net/projects/worldvista">WorldVistA
| |
− | project at Source Forge</a>.</font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3"><u>No
| |
− | knowledge of VistA is assumed or required for the Acculturation
| |
− | Workshop.</u></font></font></p>
| |
− | | |
− | <h2><a name="Linux Live CD|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="4"><i>Linux
| |
− | Live CD</i></font></font></h2>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Linux is the
| |
− | common name for the GNU/Linux operating system, consisting of the GNU
| |
− | utilities and libraries on the Linux kernel, available across the
| |
− | broadest range of hardware of any operating system. It is most widely
| |
− | used on industry standard architecture x86 hardware (i.e., based on
| |
− | popular CPUs from Intel, AMD and others), and is increasingly popular
| |
− | around the world for applications that include embedded computing
| |
− | (appliances); personal desktops; file, print & web servers;
| |
− | supercomputing; and to deploy mission critical software. Linux is the
| |
− | operating system for the VistA FOSS stack.</font></font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Free support
| |
− | for Linux is available on numerous mailing lists and electronic
| |
− | forums. Commercial support is widely available from multiple vendors.</font></font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif">A <a href="http://en.wikipedia.org/wiki/Live_cd">live
| |
− | CD</a> (or DVD – the terms are interchangeable as far as this
| |
− | document is concerned) is a CD that boots a PC and runs the GNU/Linux
| |
− | operating system – more commonly referred to as just Linux –
| |
− | | |
− | from the CD, no matter what operating system is installed on the hard
| |
− | drive. Indeed, there need not even be a hard drive on the PC.</font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Content on the
| |
− | CD is compressed, and uncompressed on the fly as needed. This means
| |
− | that there is a lot more on the CD than its nominal capacity. Note
| |
− | that booting and running an operating system off a CD will be slower
| |
− | than running the same operating system off a hard drive because (a)
| |
− | CD-ROM drives are typically slower than hard drives and (b) content
| |
− | must be uncompressed each time it is read from the CD.</font></font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif">This GT.M Acculturation
| |
− | live CD is based on the <a href="http://damnsmalllinux.org/">Damn
| |
− | Small Linux (DSL)</a> distribution version 2.1b.</font></p>
| |
− | <h2><a name="Hardware Requirements|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="4"><i>Hardware
| |
− | Requirements</i></font></font></h2>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">This CD will
| |
− | boot on an industry standard x86 architecture PC that can boot from a
| |
− | CD-ROM. 500MHz or better CPU and 128MB or more RAM are recommended.</font></font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">GT.M is a
| |
− | database application development platform. Although a snapshot of a
| |
− | database can be placed on a CD, it is not possible for an operational
| |
− | database to reside on a read-only medium such as a CD. Ergo, the
| |
− | exercises require read/write storage, which can be provided by one of
| |
− | the following:</font></font></p>
| |
− | <ul>
| |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">A 512MB
| |
− | USB flash drive (also referred to as a thumb drive or jump drive; a
| |
− | USB 2.x drive and a USB 2.x port on the host PC will be much faster
| |
− | than a USB 1.x drive and port). A USB hard drive would also work, as
| |
− | would a memory card or stick (e.g., from a digital camera) mounted
| |
− | in a suitable reader. Such a device will probably have a name such
| |
− | as <b><font size="2"><font face="Nimbus Mono L, monospace">/dev/sda1</font></font></b>
| |
− | | |
− | or <b><font size="2"><font face="Nimbus Mono L, monospace">/dev/sdb1</font></font></b>.</font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">A
| |
− | partition on an IDE or SCSI hard drive that contains a Linux file
| |
− | system (e.g., ext3, reiserfs) or a FAT file system (Windows 95/98/ME
| |
− | file system), but not an NTFS file system (Windows NT/2000/XP file
| |
− | system). A partition on an IDE drive will probably have a name such
| |
− | as <b><font size="2"><font face="Nimbus Mono L, monospace">/dev/hda2</font></font></b>
| |
− | or <b><font size="2"><font face="Nimbus Mono L, monospace">/dev/hdb3</font></font></b>;
| |
− | a partition on a SCSI drive will have a name such as <b><font size="2"><font face="Nimbus Mono L, monospace">/dev/sda1</font></font></b>
| |
− | or <b><font size="2"><font face="Nimbus Mono L, monospace">/dev/sda2</font></font></b>
| |
− | | |
− | (i.e., similar to a USB drive). If a partition with a FAT or Linux
| |
− | file system does not exist, and the contents of an existing
| |
− | partition can be over-written, you can create such a file system in
| |
− | an existing partition with this CD.</font></font></p>
| |
− | </li></ul>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">A minimum of
| |
− | 350MB of available space is required. More (400MB) is strongly
| |
− | recommended. For the purpose of the examples in this document, a
| |
− | read/write partition with a FAT file system is assumed to reside at
| |
− | <b><font size="2"><font face="Nimbus Mono L, monospace">/dev/sda1</font></font></b>
| |
− | (which corresponds to the first partition of the first USB flash
| |
− | drive found); a read/write partition with a Linux file system is
| |
− | assumed to reside at <b><font size="2"><font face="Nimbus Mono L, monospace">/dev/hda2</font></font></b>
| |
− | (which corresponds to the second partition of the first IDE hard
| |
− | drive). Adjust your commands as needed for partitions in other
| |
− | locations.</font></font></p>
| |
− | <h2><a name="Conventions|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="4"><i>Conventions</i></font></font></h2>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">In the
| |
− | following, text in a <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#0000ff">blue
| |
− | bold monospace font</font></font></font></b> is intended to be typed
| |
− | in at a GT.M prompt (including the main <b><font size="2"><font face="Nimbus Mono L, monospace">GTM></font></font></b>
| |
− | | |
− | prompt as well as utility programs such as <b><font size="2"><font face="Nimbus Mono L, monospace">GDE></font></font></b>).
| |
− | Text in a <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#ff0000">red
| |
− | bold monospace font</font></font></font></b> is intended to be typed
| |
− | in at a bash shell prompt (or otherwise provided as input to a bash
| |
− | shell), or elsewhere in Linux but not to GT.M.</font></font></p>
| |
− | <h2><a name="Legal Stuff|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="4"><i>Legal
| |
− | Stuff</i></font></font></h2>
| |
− | <p><font face="Nimbus Roman No9 L, serif">GT.M is owned and
| |
− | copyrighted by <a href="http://fidelityinfoservices.com/">Fidelity
| |
− | National Information Services, Inc.</a>, and is available for the x86
| |
− | GNU/Linux platform under the terms of the <a href="http://www.fsf.org/licensing/licenses/gpl.txt">GNU
| |
− | General Public License (GPL)</a>. Source and binary can be downloaded
| |
− | from the <a href="http://sourceforge.net/projects/sanchez-gtm">GT.M
| |
− | project page at Source Forge</a>.</font></p>
| |
− | | |
− | <p><font face="Nimbus Roman No9 L, serif">VistA is in the public
| |
− | domain through the <a href="http://en.wikipedia.org/wiki/Freedom_of_information_act">US
| |
− | Freedom of Information Act</a>. Source and object code are available
| |
− | on the CD. As noted above, no understanding of VistA itself is
| |
− | required or assumed for the workshop.</font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">The Linux
| |
− | kernel, GNU utilities, XFCE, and all other software on the CD are
| |
− | open source free software, available under their respective open
| |
− | source licenses.</font></font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Copyrights and
| |
− | trademarks of all content on the CD are hereby acknowledged as being
| |
− | held by their owners.</font></font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">This document
| |
− | itself is placed in the public domain by the author with no warranty
| |
− | of any kind, explicit or implicit. Follow any instructions herein at
| |
− | your own risk.</font></font></p>
| |
− | <h1><a name="3.Getting Started|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="5">Getting
| |
− | Started</font></font></h1>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">As discussed
| |
− | above, a read/write partition is required for the database. Choose
| |
− | one of the following, depending on your hardware configuration:</font></font></p>
| |
− | <ul>
| |
− | <li><p><font face="Nimbus Roman No9 L, serif"><a href="#FAT%20File%20System%7Coutline">FAT
| |
− | file system</a>, (USB drive, or a partition on an IDE or SCSI drive
| |
− | with a FAT file system), or</font></p>
| |
− | | |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><a href="#Linux%20file%20system%7Coutline">Linux
| |
− | file system</a> (partition on an IDE or SCSI hard drive with a Linux
| |
− | file system, or a partition that can be formatted with a Linux file
| |
− | system)</font></p>
| |
− | </li></ul>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">In either
| |
− | case, first:</font></font></p>
| |
− | <ul>
| |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Start a
| |
− | bash shell: right click on the screen background, choose <b><font size="2"><font face="Nimbus Sans L, sans-serif">Xshells</font></font></b>
| |
− | and then your choice of background for the terminal window
| |
− | (<b><font size="2"><font face="Nimbus Sans L, sans-serif">Transparent</font></font></b>,
| |
− | <b><font size="2"><font face="Nimbus Sans L, sans-serif">Light</font></font></b>
| |
− | | |
− | or <b><font size="2"><font face="Nimbus Sans L, sans-serif">Dark</font></font></b>).
| |
− | The initial directory for the shell is <b><font size="2"><font face="Nimbus Mono L, monospace">/home/dsl</font></font></b>.</font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">All
| |
− | exercises will be carried out in <b><font size="2"><font face="Nimbus Mono L, monospace">/home/dsl/myVistA</font></font></b>
| |
− | and its subdirectories. Create a mount point <b><font size="2"><font face="Nimbus Mono L, monospace">myVistA</font></font></b>
| |
− | in <b><font size="2"><font face="Nimbus Mono L, monospace">/home/dsl</font></font></b>,
| |
− | the home directory of the default user, dsl: <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#ff0000">mkdir
| |
− | -p myVistA</font></font></font></b></font></font></p>
| |
− | | |
− | </li></ul>
| |
− | <h2><a name="FAT File System|outline"></a><a name="FAT File System|outline"></a><a name="FAT File System|outline"></a>
| |
− | <font face="Nimbus Sans L, sans-serif"><font size="4"><i>FAT File
| |
− | System</i></font></font></h2>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">The exercises
| |
− | require a GT.M database in a Linux file system. Although a GT.M
| |
− | database can reside in a FAT file system (at least for demonstration
| |
− | purposes – databases on FAT file systems are neither
| |
− | recommended nor supported for production use), the exercises require
| |
− | functionality that is not available with a FAT file system. Ergo a
| |
− | Linux file system is required for the GT.M Acculturation Workshop.
| |
− | So, the FAT file system must first be mounted, and the Linux file
| |
− | system within mounted separately (i.e., there are two mount
| |
− | operations performed).</font></font></p>
| |
− | <h2><a name="Mounting a read/write partition|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="4"><i>Mounting
| |
− | a read/write partition</i></font></font></h2>
| |
− | <p><font face="Nimbus Roman No9 L, serif">When you are asked to mount
| |
− | an existing file system with a read/write partition using the
| |
− | <a href="#Graphical%20Mounting%20Tool%7Coutline">graphical mounting tool</a>,
| |
− | or <a href="#Mounting%20With%20Shell%20Commands%7Coutline">with shell
| |
− | commands</a> and then choose either <a href="#FAT%20File%20System%7Coutline">FAT
| |
− | file system</a> or <a href="#Linux%20file%20system%7Coutline">Linux file
| |
− | system</a>. depending on the file system on the device partition.</font></p>
| |
− | | |
− | <h3><a name="Graphical Mounting Tool|outline"></a><a name="Graphical Mounting Tool|outline"></a>
| |
− | <font face="Nimbus Sans L, sans-serif"><font size="4">Graphical
| |
− | Mounting Tool</font></font></h3>
| |
− | <p><img src="index_files/dsl_automounter_umounted.jpg" name="graphics1" align="left" border="0" height="86" hspace="16" width="77"><img src="index_files/dsl_automounter_mounted.jpg" name="graphics2" align="right" border="0" height="85" hspace="12" width="76"><font face="Nimbus Roman No9 L, serif"><font size="3">In
| |
− | the lower right corner is a graphical mounting tool. Click on the
| |
− | button that says “fd0” till till it has the name of the
| |
− | device you wish to mount, e.g., “sda1” for a USB flash
| |
− | drive or “hda2” for a hard drive partition. Then click
| |
− | the red button labelled “umounted” to mount it. On a
| |
− | successful mount, the red button will turn green and say “mounted”.
| |
− | The device will be mounted under <b><font size="2"><font face="Nimbus Mono L, monospace">/mnt</font></font></b>
| |
− | | |
− | (e.g., <b><font size="2"><font face="Nimbus Mono L, monospace">/dev/hda2</font></font></b>
| |
− | will be mounted as <b><font face="Nimbus Mono L, monospace">/mnt/hda2</font></b>).</font></font></p>
| |
− | <h3><a name="Mounting With Shell Commands|outline"></a><a name="Mounting With Shell Commands|outline"></a>
| |
− | <font face="Nimbus Sans L, sans-serif"><font size="4">Mounting With
| |
− | Shell Commands</font></font></h3>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">To mount a USB
| |
− | flash drive which is at <b><font size="2"><font face="Nimbus Mono L, monospace">/dev/sda1</font></font></b>
| |
− | at <b><font size="2"><font face="Nimbus Mono L, monospace">/mnt/sda1</font></font></b>,
| |
− | type: <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#ff0000">mount
| |
− | /mnt/sda1</font></font></font></b> – if it is something else,
| |
− | such as a hard drive partition, or a SCSI drive partition, e.g.,
| |
− | | |
− | <b><font size="2"><font face="Nimbus Mono L, monospace">/dev/sdb3</font></font></b>
| |
− | or <b><font size="2"><font face="Nimbus Mono L, monospace">/dev/hda2</font></font></b>,
| |
− | alter the command accordingly.</font></font></p>
| |
− | <h3><a name="First usage|outline"></a><a name="First usage|outline"></a>
| |
− | <font face="Nimbus Sans L, sans-serif"><font size="4">First usage</font></font></h3>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">It is possible
| |
− | to create a Linux file system within a FAT file system with a two
| |
− | stage process. We will use a Linux feature that treats an ordinary
| |
− | file as a device (a so called “loop” file system). Within
| |
− | the FAT file system, we will create a single large file called
| |
− | <b><font size="2"><font face="Nimbus Mono L, monospace">LinuxFileSystem</font></font></b>
| |
− | (the name does not really matter). By treating this file as a disk
| |
− | drive, we will create a Linux file system within it, and mount this
| |
− | file system as a loop file system.</font></font></p>
| |
− | | |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">If this is the
| |
− | first time that you are using that FAT file system, execute the
| |
− | following commands (with a USB 1.x interface, each command could take
| |
− | many minutes to tens of minutes; USB 2.x will be much faster):</font></font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Create a 350MB
| |
− | file called <b><font size="2"><font face="Nimbus Mono L, monospace">LinuxFileSystem</font></font></b>
| |
− | on the FAT file system, adjust count as needed for a smaller or
| |
− | larger file: <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#ff0000">dd
| |
− | if=/dev/zero of=/mnt/sda1/LinuxFileSystem count=716800</font></font></font></b></font></font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Create a Linux
| |
− | ext3 file system within <b><font size="2"><font face="Nimbus Mono L, monospace">LinuxFileSystem</font></font></b>:
| |
− | <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#ff0000">mkfs
| |
− | -t ext3 -F /mnt/sda1/LinuxFileSystem</font></font></font></b></font></font></p>
| |
− | <h3><a name="First and subsequent usage|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="4">First
| |
− | and subsequent usage</font></font></h3>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Mount the
| |
− | Linux file system within <b><font size="2"><font face="Nimbus Mono L, monospace">/mnt/sda1/LinuxFileSystem</font></font></b>
| |
− | | |
− | as <b><font size="2"><font face="Nimbus Mono L, monospace">/home/dsl/myVistA</font></font></b>:
| |
− | <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#ff0000">sudo
| |
− | mount -o loop /mnt/sda1/LinuxFileSystem myVistA</font></font></font></b></font></font></p>
| |
− | <h2><a name="Linux file system|outline"></a><a name="Linux file system|outline"></a><a name="Linux file system|outline"></a>
| |
− | <font face="Nimbus Sans L, sans-serif"><font size="4"><i>Linux file
| |
− | system</i></font></font></h2>
| |
− | <h3><font face="Nimbus Sans L, sans-serif"><font size="4">First usage</font></font></h3>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">If a file
| |
− | system does not exist in the read/write partition and one needs to be
| |
− | created first (this will over-write any existing contents on the
| |
− | partition): <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#ff0000">sudo
| |
− | mkfs -t ext3 /dev/hda2</font></font></font></b></font></font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Mount the
| |
− | partition: <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#ff0000">sudo
| |
− | mount /dev/hda2 myVistA</font></font></font></b></font></font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Change the
| |
− | ownership of the mounted file system so that it is owned by user dsl:
| |
− | | |
− | <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#ff0000">sudo
| |
− | chown -R dsl.staff myVistA</font></font></font></b></font></font></p>
| |
− | <h3><a name="Subsequent usage|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="4">Subsequent
| |
− | usage</font></font></h3>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Simply mount
| |
− | the partition: <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#ff0000">sudo
| |
− | mount /dev/hda2 myVistA</font></font></font></b></font></font></p>
| |
− | <h1><a name="4.Start GT.M – ready to run VistA|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="5">Start
| |
− | GT.M – ready to run VistA</font></font></h1>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">You have
| |
− | reached the real starting point of the GT.M Acculturation Workshop –
| |
− | getting to the GT.M direct (i.e., interactive or immediate) mode
| |
− | prompt (GTM> in a terminal window) with the environment configured
| |
− | to run VistA. At this point, you should have a Linux filesystem
| |
− | mounted as <b><font size="2"><font face="Nimbus Mono L, monospace">/home/dsl/myVistA</font></font></b>,
| |
− | ready for a database to be loaded into it. The filesystem could be a
| |
− | Linux filesystem on a a device, or residing in a file which itself
| |
− | resides in a file on a FAT filesystem.</font></font></p>
| |
− | | |
− | <p><font face="Nimbus Roman No9 L, serif">The first time that you run
| |
− | with the live CD, you will need create a VistA environment. The
| |
− | underlying principles are on the <a href="http://openforum.worldvista.org/%7Eforum/index.php?title=Software_Development_%28WG1%29_Version_Control_%28T3%29">Setting
| |
− | up a VistA Development page</a> of the <a href="http://openforum.worldvista.org/%7Eforum">WorldVistA
| |
− | Wiki</a>. In case of limited internet access, a copy of relevant
| |
− | material from which is cached locally <a href="file:///home/ivaldes/.gvfs/GT.MAcculturation0.4.iso/20060321WorldVistAWikiSWConfiguration.html">here</a>.
| |
− | To create a VistA environment:</font></p>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~$ <font color="#ff0000">/usr/local/FOIAVistA/install myVistA/FOIAVistA</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Creating environment in myVistA/FOIAVistA as child of environment in /usr/local/FOIAVistA</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Unzipping from parent to create initial database</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-JNLCREATE, Journal file /ramdisk/home/dsl/myVistA/FOIAVistA/g/mumps.mjl created for database file /ramdisk/home/dsl/myVistA/FOIAVistA/g/mumps.dat with BEFORE_IMAGES</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-JNLSTATE, Journaling state for database file /ramdisk/home/dsl/myVistA/FOIAVistA/g/mumps.dat is now ON</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Default permission for development environment is for all to read and group to write - please alter as needed</b></font></font></pre><p>
| |
− | <font face="Nimbus Roman No9 L">The above creates an environment for
| |
− | GT.M, and uncompresses the database from the copy on the CD. This can
| |
− | take from a few seconds to many minutes, depending on the type of
| |
− | device (USB 2.x is slower than IDE / SCSI; USB 1.x is slower than USB
| |
− | 2.x), PC speed, etc.</font></p>
| |
− | <p><font face="Nimbus Roman No9 L">On subsequent occasions, once the
| |
− | database is uncompressed and copied, to run the application, execute
| |
− | <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#ff0000">myVistA/FOIAVistA/run</font></font></font></b>
| |
− | and get to the <b><font size="2"><font face="Nimbus Mono L, monospace">GTM></font></font></b>
| |
− | prompt:</font></p>
| |
− | <pre><font face="Nimbus Mono L"><font size="2"><b>dsl@box:~$ <font color="#ff0000">myVistA/FOIAVistA/run</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L"><font size="2"><b>GTM></b></font></font></pre><p>
| |
− | <font face="Nimbus Roman No9 L, serif"><font size="3">At this point,
| |
− | you have a full character mode VistA, e.g.:</font></font></p>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">set DUZ=1 do P^DI</font></b></font></font>
| |
− | | |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>VA FileMan 22.0</b></font></font>
| |
− | | |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Select OPTION: <font color="#0000ff">?</font></b></font></font>
| |
− | | |
− | <b><font face="Nimbus Mono L, monospace">Answer with OPTION NUMBER, or NAME</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">Choose from:</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">1 ENTER OR EDIT FILE ENTRIES</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">2 PRINT FILE ENTRIES</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">3 SEARCH FILE ENTRIES</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">4 MODIFY FILE ATTRIBUTES</font></b>
| |
− | | |
− | <b><font face="Nimbus Mono L, monospace">5 INQUIRE TO FILE ENTRIES</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">6 UTILITY FUNCTIONS</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">7 OTHER OPTIONS</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">8 DATA DICTIONARY UTILITIES</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">9 TRANSFER ENTRIES</font></b>
| |
− |
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Select OPTION: <font color="#0000ff">← <i><font size="3"><font face="Nimbus Roman No9 L, serif">press Enter here</font></font></i></font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM></b></font></font></pre><p>
| |
− | <font face="Nimbus Roman No9 L, serif"><font size="3">Once you can
| |
− | access the application, we can start to work with GT.M.</font></font></p>
| |
− | <h1><a name="5.Excellent Documentation|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="5">Excellent
| |
− | Documentation</font></font></h1>
| |
− | <p><font face="Nimbus Roman No9 L, serif">GT.M user documentation
| |
− | consists of manuals and technical bulletins. Manuals are updated
| |
− | periodically, and technical bulletins serve as user documentation
| |
− | updates that are available in a more timely manner. Current GT.M
| |
− | documentation is available online at the <a href="http://www.sanchez-gtm.com/user_documentation/user_doc.htm">GT.M
| |
− | documentation site</a> as well as a <a href="file:///usr/share/doc/gtm/index.html" target="_blank">local
| |
− | copy</a> on this CD.</font></p>
| |
− | <h2><a name="Manuals|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="4"><i>Manuals</i></font></font></h2>
| |
− | <ul>
| |
− | | |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Programmers
| |
− | Guide</font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Administration
| |
− | and Operations Guide (caution: as of this writing, this is a draft
| |
− | version of the Administration and Operations Guide in the new HTML
| |
− | format generated from DocBook XML, and has a few rough edges).</font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Messages
| |
− | and Recovery Procedures</font></font></p>
| |
− | </li></ul>
| |
− | <h2><a name="Technical Bulletins|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="4"><i>Technical
| |
− | Bulletins</i></font></font></h2>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Sample
| |
− | technical bulletins:</font></font></p>
| |
− | <ul>
| |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">V5.0-000C
| |
− | Release Notes</font></font></p>
| |
− | | |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">MUPIP Set
| |
− | Journal</font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Long
| |
− | names</font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Null
| |
− | subscripts</font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Supplementary
| |
− | information</font></font></p>
| |
− | </li></ul>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Onward to the
| |
− | real GT.M acculturation workshop!</font></font></p>
| |
− | <h1><a name="6.GT.M – a MUMPS unlike any other|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="5">GT.M
| |
− | – a MUMPS unlike any other</font></font></h1>
| |
− | | |
− | <h2><a name="GT.M is just like any other M implementation|outline"></a>
| |
− | <font face="Nimbus Sans L, sans-serif"><font size="4"><i>GT.M is just
| |
− | like any other M implementation</i></font></font></h2>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">You can type
| |
− | lines of code and have them execute interactively, just like on any
| |
− | other M implementation, e.g.:</font></font></p>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Set ^X=1</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Write ^X</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>1</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Kill ^X</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Set S="S ^X=1 W ^X K ^X" Xecute S</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>1</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Halt</font></b></font></font></pre><p>
| |
− | <font face="Nimbus Roman No9 L, serif"><font size="3">You can edit
| |
− | routines from the <b><font size="2"><font face="Nimbus Mono L, monospace">GTM></font></font></b>
| |
− | prompt: <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#0000ff">ZEDit
| |
− | "XUP"</font></font></font></b>. This starts the <b><font size="2"><font face="Nimbus Mono L, monospace">vi</font></font></b>
| |
− | editor editing the source routine for <b><font size="2"><font face="Nimbus Mono L, monospace">^XUP</font></font></b>,
| |
− | <b><font size="2"><font face="Nimbus Mono L, monospace">/home/dsl/myVistA/FOIAVistA/r/XUP.m</font></font></b>.
| |
− | Use the five key sequence <b><font size="2"><font color="#ff0000"><i><font face="Nimbus Sans L, sans-serif">Escape</font></i>
| |
− | | |
− | : q ! <i><font face="Nimbus Sans L, sans-serif">Enter</font></i></font></font></b>
| |
− | to exit <b><font size="2"><font face="Nimbus Mono L, monospace">vi</font></font></b>
| |
− | without changing the file.</font></font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">With the
| |
− | exception of Structured System Variable Names (SSVNs), GT.M mostly
| |
− | implements ISO standard M (ISO 11756–1999), including a full
| |
− | implementation of transaction processing (TP) that provides ACID
| |
− | (Atomic, Consistent, Isolated, Durable) transactions. As with any M
| |
− | implementation, there are extensions, IO parameters are
| |
− | implementation specific, as are the VIEW command, and commands &
| |
− | variables starting with the letter Z. </font></font>
| |
− | </p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Despite the
| |
− | fact that the dialect of M implemented by GT.M shares so much in
| |
− | common with other M implementations, operationally, GT.M is unlike
| |
− | any other M implementation! </font></font>
| |
− | </p>
| |
− | | |
− | <h2><a name="Routines are in the file system|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="4"><i>Routines
| |
− | are in the file system</i></font></font></h2>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Routines in
| |
− | GT.M are simply files in the file system; they do not reside in
| |
− | databases. To see the routines that make up VistA, try <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#ff0000">ls
| |
− | -l /usr/local/FOIAVistA/r</font></font></font></b> (this can take
| |
− | several minutes the first time you try it, depending on the speed of
| |
− | your PC). To count how many routines make up VistA, type <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#ff0000">ls
| |
− | -l /usr/local/FOIAVistA/r | wc</font></font></font></b> to get the
| |
− | answer. The philosophy of GT.M is to focus on what it does well,
| |
− | providing a robust, scalable, transaction processing database and a
| |
− | compiler for the M language, and to leverage tools and capabilities
| |
− | of the underlying operating system for the rest. This is powerful
| |
− | because whenever there are enhancements to the underlying operating
| |
− | environment, GT.M can benefit from them. This can also be a little
| |
− | uncomfortable for the typical M programmer, because traditional M
| |
− | implementations carry their environments with them, not unlike the
| |
− | shell on a snail's back. </font></font>
| |
− | </p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">GT.M is a true
| |
− | compiler that compiles source code routines into object code
| |
− | routines. Source code is in files with a .m extension and object code
| |
− | is in routines with a .o extension. On the GT.M acculturation
| |
− | workshop live CD, the VistA routines have been pre-compiled. For
| |
− | example, to see the source code routines on the CD for managing
| |
− | Diagnostic Related Groups (DRG), type <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#ff0000">ls
| |
− | /usr/local/FOIAVistA/r/ICD*</font></font></font></b> and to see the
| |
− | corresponding object code routines, type <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#ff0000">ls
| |
− | /usr/local/FOIAVistA/o/ICD*</font></font></font></b>. </font></font>
| |
− | | |
− | </p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">As you saw
| |
− | when executing M commands interactively, the fact that GT.M is a true
| |
− | compiler does not keep it from providing an interactive direct mode –
| |
− | GT.M simply compiles and executes each line.</font></font></p>
| |
− | <h3><a name="Exercise|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="4">Exercise</font></font></h3>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">The purpose of
| |
− | this exercise is to understand compiling and linking routines. Since
| |
− | not everyone is comfortable with the terse character-oriented
| |
− | commands of vi, you can optionally use a mouse-and-menu based editor
| |
− | called beaver before you enter GT.M:</font></font></p>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~$ <font color="#ff0000">export EDITOR=`which beaver`</font></b></font></font>
| |
− | <font color="#ff0000"><font face="Nimbus Mono L, monospace"><font size="2"><b><font color="#000000">dsl@box:~$ </font>myVistA/FOIAVistA/run</b></font></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM></b></font></font></pre><p>
| |
− | | |
− | <font face="Nimbus Roman No9 L, serif"><font size="3">Tell GT.M to run
| |
− | the routine ^XYZ, and note that it reports an error that it cannot
| |
− | find the routine: </font></font>
| |
− | </p>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Do ^XYZ</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-E-ZLINKFILE, Error while zlinking "XYZ"</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-E-FILENOTFND, File XYZ not found</b></font></font></pre><p>
| |
− | <font face="Nimbus Roman No9 L, serif"><font size="3">Note that the
| |
− | directories <b><font size="2"><font face="Nimbus Mono L, monospace">/home/dsl/myVistA/FOIAVistA/r</font></font></b>
| |
− | and <b><font size="2"><font face="Nimbus Mono L, monospace">/home/dsl/myVistA/FOIAVistA/o</font></font></b>
| |
− | are empty:</font></font></p>
| |
− | | |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">ZSYstem "ls -lR $vista_home"</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>/home/dsl/myVistA/FOIAVistA:</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>-r-xr-xr-x 1 dsl staff 278 Mar 22 03:18 cprs_direct</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>-r--r--r-- 1 dsl staff 583 Mar 22 03:18 env</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>drwxrwxr-x 2 dsl staff 4096 Mar 22 03:19 g</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>lrwxrwxrwx 1 dsl staff 24 Mar 22 03:18 gtm -> /usr/local/FOIAVistA/gtm</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>-r-xr-xr-x 1 dsl staff 2977 Mar 22 03:18 install</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>drwxrwxr-x 2 dsl staff 4096 Mar 22 03:18 o</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>drwxrwxr-x 2 dsl staff 4096 Mar 22 03:18 p</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>lrwxrwxrwx 1 dsl staff 20 Mar 22 03:18 parent -> /usr/local/FOIAVistA</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>drwxrwxr-x 2 dsl staff 4096 Mar 22 03:18 r</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>-r-xr-xr-x 1 dsl staff 252 Mar 22 03:18 run</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>drwxrwxr-x 2 dsl staff 4096 Mar 22 03:18 tmp</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>-r-xr-xr-x 1 dsl staff 4405 Mar 22 03:18 vista</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>-r-xr-xr-x 1 dsl staff 884 Mar 22 03:18 vista_cprs</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>/home/dsl/myVistA/FOIAVistA/g:</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>-rw-rw-r-- 1 dsl staff 348910080 Mar 22 04:53 mumps.dat</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>-r--r--r-- 1 dsl staff 1024 Mar 22 03:18 mumps.gld</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>-rw-rw-r-- 1 dsl staff 7456 Mar 22 04:53 mumps.mjl</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>/home/dsl/myVistA/FOIAVistA/o:</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>/home/dsl/myVistA/FOIAVistA/p:</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>/home/dsl/myVistA/FOIAVistA/r:</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>/home/dsl/myVistA/FOIAVistA/tmp:</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM></b></font></font></pre><p>
| |
− | <font face="Nimbus Roman No9 L, serif"><font size="3">Type <font size="2"><font face="Nimbus Mono L, monospace"><font color="#0000ff">ZEDit
| |
− | "XYZ"</font></font></font> then edit, create and save <b><font size="2"><font face="Nimbus Mono L, monospace">XYZ.m</font></font></b>
| |
− | as a small M program, e.g., something that prints “Hello,
| |
− | World!”. Remember to put a newline after the last line in your
| |
− | routine. Save the file and exit the editor. </font></font>
| |
− | </p>
| |
− | | |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Execute <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#0000ff">Do
| |
− | ^XYZ</font></font></font></b> (you can simply hit the up-arrow key
| |
− | three times to recall the command) and note that your program runs as
| |
− | expected. Now execute <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#0000ff">ZSYstem
| |
− | "ls -lR $vista_home"</font></font></font></b> again and
| |
− | note that the directories <b><font size="2"><font face="Nimbus Mono L, monospace">/home/dsl/myVistA/FOIAVistA/r</font></font></b>
| |
− | and <b><font size="2"><font face="Nimbus Mono L, monospace">/home/dsl/myVistA/FOIAVistA/o</font></font></b>
| |
− | are no longer empty. There are two files,
| |
− | <b><font size="2"><font face="Nimbus Mono L, monospace">/home/dsl/myVistA/FOIAVistA/r/XYZ.m</font></font></b>
| |
− | and <b><font size="2"><font face="Nimbus Mono L, monospace">/home/dsl/myVistA/FOIAVistA/r/XYZ.o</font></font></b>.
| |
− | The former is the source program that you just edited, and the latter
| |
− | is the object code. GT.M dynamically, and automatically, recompiled
| |
− | the source program into the object program when you typed <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#0000ff">Do
| |
− | ^XYZ</font></font></font></b>. </font></font>
| |
− | | |
− | </p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Since GT.M is
| |
− | a compiler, it can generate error messages at compile time as well as
| |
− | at run time, and indeed when compiling VistA, there are hundreds of
| |
− | lines of error messages triggered by lines of code that are legal for
| |
− | other M implementations but not for GT.M. (These lines are protected
| |
− | in VistA and are inside conditional statements that are executed only
| |
− | on the appropriate M implementation, so they are nothing to be
| |
− | concerned about.)</font></font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Again edit the
| |
− | program with <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#0000ff">ZEDit
| |
− | "XYZ"</font></font></font></b> then change it, e.g., make
| |
− | it print “Aloha, World!” instead, save it. </font></font>
| |
− | </p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Again execute
| |
− | <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#0000ff">Do
| |
− | ^XYZ</font></font></font></b> and note that GT.M still prints “Hello,
| |
− | World!” This is because GT.M already has an XYZ module linked
| |
− | in its address space, and does not go out every time to check if
| |
− | there is a new version. This is “clobber protection” and
| |
− | a GT.M feature. </font></font>
| |
− | | |
− | </p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Now execute
| |
− | <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#0000ff">ZLink
| |
− | "XYZ"</font></font></font></b> which tells GT.M to re-link
| |
− | XYZ even if it already has one linked in its address space, followed
| |
− | by <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#0000ff">Do
| |
− | ^XYZ</font></font></font></b> and note that it now prints “Aloha,
| |
− | World!” A <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#0000ff">ZSYstem
| |
− | "ls -lR $vista_home"</font></font></font></b> shows that
| |
− | GT.M has recompiled the module to create a new object file (since
| |
− | when it attempted the re-link, the source file was found to be newer
| |
− | than the object file). </font></font>
| |
− | </p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">The intrinsic
| |
− | special variable <b><font size="2"><font face="Nimbus Mono L, monospace">$ZROutines</font></font></b>
| |
− | | |
− | tells GT.M where to find routines:</font></font></p>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Write $ZROutines</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>/home/dsl/myVistA/FOIAVistA/p /home/dsl/myVistA/FOIAVistA/o(/home/dsl/myVistA/FOIAVistA/r) /home/dsl/myVistA/FOIAVistA/parent/p /home/dsl/myVistA/FOIAVistA/parent/o(/</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>home/dsl/myVistA/FOIAVistA/parent/r) /usr/local/gtm_V5.0-000C</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM></b></font></font></pre><p>
| |
− | <font face="Nimbus Roman No9 L, serif"><font size="3">The Programmers
| |
− | Guide explains in detail how <b><font size="2"><font face="Nimbus Mono L, monospace">$ZROutines</font></font></b>
| |
− | is used. $ZROutines is initialized from the shell environment
| |
− | variable <b><font size="2"><font face="Nimbus Mono L, monospace">$gtmroutines</font></font></b>
| |
− | | |
− | at:</font></font></p>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Write $ZTRNLNM("gtmroutines")</font> </b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>/home/dsl/myVistA/FOIAVistA/p /home/dsl/myVistA/FOIAVistA/o(/home/dsl/myVistA/FOIAVistA/r) /home/dsl/myVistA/FOIAVistA/parent/p /home/dsl/myVistA/FOIAVistA/parent/o(/</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>home/dsl/myVistA/FOIAVistA/parent/r) /usr/local/gtm_V5.0-000C</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM></b></font></font></pre><p>
| |
− | <font face="Nimbus Roman No9 L, serif"><font size="3">The example uses
| |
− | GT.M's <b><font size="2"><font face="Nimbus Mono L, monospace">$ZTRNLNM()</font></font></b>
| |
− | function, which is used to get the value of environment variables.</font></font></p>
| |
− | | |
− | <h2><a name="Global directories point to global variables|outline"></a>
| |
− | <font face="Nimbus Sans L, sans-serif"><font size="4"><i>Global
| |
− | directories point to global variables</i></font></font></h2>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Since routines
| |
− | in GT.M reside in the file system rather than in the database,
| |
− | whereas global variables reside in databases, routines are completely
| |
− | independent of global variables. In this respect, GT.M is different
| |
− | from other M implementations.</font></font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Given a
| |
− | person's name, a telephone directory helps you find the person by
| |
− | giving you the phone number and (usually) the address. Analogously,
| |
− | given an M global variable name, a global directory helps a GT.M
| |
− | process find the variable by giving it the database file where that
| |
− | variable resides, as well as other pertinent information.</font></font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">The global
| |
− | directory is a binary file pointed to by the intrinsic special
| |
− | variable <b><font size="2"><font face="Nimbus Mono L, monospace">$ZGbldir</font></font></b>.
| |
− | The GDE utility program (invoked with <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#0000ff">Do
| |
− | ^GDE</font></font></font></b> inside GT.M or <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#ff0000">mumps
| |
− | -run ^GDE</font></font></font></b> from the shell) is used to manage
| |
− | global directories. [Note that the input to GDE can be a text file.
| |
− | In a production environment, Fidelity recommends that text files be
| |
− | used to define database configurations, and that these text files be
| |
− | put under version control.] </font></font>
| |
− | | |
− | </p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">In GT.M, sets
| |
− | of M global variables (Names or Name spaces) are mapped to Regions
| |
− | that define properties relating to the M global. Each Region is
| |
− | mapped to a Segment that defines properties relating to the file
| |
− | system. Consider the example in the figure below: </font></font>
| |
− | </p>
| |
− | <p><img src="index_files/041014-2GlobalDirectory.gif" name="graphics3" align="left" border="0" height="552" width="828"><br clear="left"><br><br>
| |
− | </p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">In this
| |
− | example, there are four M global variables that we would like to
| |
− | separate from the rest (e.g, for purposes of sharing globals between
| |
− | applications, or for reasons of protection – perhaps they
| |
− | contain special information, so that only herpetologists are to have
| |
− | access to globals <b><font size="2"><font face="Nimbus Mono L, monospace">^Gharial</font></font></b>
| |
− | and <b><font size="2"><font face="Nimbus Mono L, monospace">^Jacare</font></font></b>,
| |
− | and only ornithologists are to have access to globals <b><font size="2"><font face="Nimbus Mono L, monospace">^Hoopoe</font></font></b>
| |
− | and <b><font size="2"><font face="Nimbus Mono L, monospace">^Trogon</font></font></b>).
| |
− | This is accomplished by creating five name spaces (note that a name
| |
− | space can contain a single variable, as in this example, or a range
| |
− | of global variables, e.g., everything starting with <b><font size="2"><font face="Nimbus Mono L, monospace">^A</font></font></b>
| |
− | | |
− | through <b><font size="2"><font face="Nimbus Mono L, monospace">^Gharial</font></font></b>).
| |
− | There is always a default (<font size="2"><font face="Nimbus Mono L, monospace">*</font></font>)
| |
− | name space.</font></font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">One or more
| |
− | name spaces are mapped to a <i>Region</i>. All global variables in a
| |
− | region share a common set of M global variable properties, such as
| |
− | the maximum record length, whether null subscripts are permitted,
| |
− | etc. In this case <b><font size="2"><font face="Nimbus Mono L, monospace">^Gharial</font></font></b>
| |
− | and <b><font size="2"><font face="Nimbus Mono L, monospace">^Jacare</font></font></b>
| |
− | are mapped to the region <b><font size="2"><font face="Nimbus Mono L, monospace">REPTILES</font></font></b>,
| |
− | whereas <b><font size="2"><font face="Nimbus Mono L, monospace">^Hoopoe</font></font></b>
| |
− | | |
− | and <b><font size="2"><font face="Nimbus Mono L, monospace">^Trogon</font></font></b>
| |
− | are mapped to the region <b><font size="2"><font face="Nimbus Mono L, monospace">BIRDS</font></font></b>.
| |
− | The default name space <font size="2"><font face="Nimbus Mono L, monospace">*</font></font>
| |
− | is mapped to a region called <b><font size="2"><font face="Nimbus Mono L, monospace">DEFAULT</font></font></b>.</font></font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Each region is
| |
− | mapped to a <i>Segment</i>. Just as a region defines properties
| |
− | pertaining to M global variables, the segment defines properties
| |
− | pertaining to the database file for that region, such as the file
| |
− | name, the initial allocation, number of global buffers, etc. The
| |
− | database file is just an ordinary file in the file system of the
| |
− | underlying operating system.</font></font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Each database
| |
− | file can have a single active journal file. A journal file can be
| |
− | linked to a previous journal files to form a chain of journal files.</font></font></p>
| |
− | | |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">The intrinsic
| |
− | special variable <b><font size="2"><font face="Nimbus Mono L, monospace">$ZGbldir</font></font></b>
| |
− | points a GT.M process to the global directory. <b><font size="2"><font face="Nimbus Mono L, monospace">$ZGbldir</font></font></b>
| |
− | is initialized from <b><font size="2"><font face="Nimbus Mono L, monospace">$gtmgbldir</font></font></b>
| |
− | at process startup:</font></font></p>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Write $ZGbldir</font> </b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>/home/dsl/myVistA/FOIAVistA/g/mumps.gld</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Write $ZTRNLNM("gtmgbldir")</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>/home/dsl/myVistA/FOIAVistA/g/mumps.gld</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM></b></font></font></pre><p>
| |
− | <font face="Nimbus Roman No9 L, serif"><font size="3">Global
| |
− | directories can have environment variables in database file names,
| |
− | which is how one global directory can point to different database
| |
− | files. </font></font>
| |
− | </p>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~$ <font color="#ff0000">myVistA/FOIAVistA/run ^GDE</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GDE-I-LOADGD, Loading Global Directory file </b></font></font>
| |
− | <b><font face="Nimbus Mono L, monospace">/home/dsl/myVistA/FOIAVistA/g/mumps.gld</font></b>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GDE-I-VERIFY, Verification OK</b></font></font>
| |
− | | |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GDE> <font color="#0000ff">show name</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GDE-E-VALUEBAD, name is not a valid Global qualifier</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GDE> <font color="#0000ff">show -name</font></b></font></font>
| |
− | | |
− | <b><font face="Nimbus Mono L, monospace">*** NAMES ***</font></b>
| |
− | | |
− | <b><font face="Nimbus Mono L, monospace">Global Region</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">------------------------------------------------------------------------------</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">* DEFAULT</font></b>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GDE> <font color="#0000ff">show -region</font></b></font></font>
| |
− | | |
− | <b><font face="Nimbus Mono L, monospace">*** REGIONS ***</font></b>
| |
− | | |
− | <b><font face="Nimbus Mono L, monospace">Dynamic Def Rec Key Null Standard</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">Region Segment Coll Size Size Subs NullColl Journaling</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">------------------------------------------------------------------------------------------------------------------</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">DEFAULT DEFAULT 0 4080 255 NEVER N N</font></b>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GDE> <font color="#0000ff">show -segment</font></b></font></font>
| |
− | | |
− | <b><font face="Nimbus Mono L, monospace">*** SEGMENTS ***</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">Segment File (def ext: .dat)Acc Typ Block Alloc Exten Options</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">-------------------------------------------------------------------------------------------</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">DEFAULT $vista_home/g/mumps.dat</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">BG DYN 4096 75000 2000 GLOB=2048</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">LOCK= 40</font></b>
| |
− | | |
− | <b><font face="Nimbus Mono L, monospace">RES = 0</font></b>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GDE> <font color="#0000ff">show -map</font></b></font></font>
| |
− | | |
− | <b><font face="Nimbus Mono L, monospace">*** MAP ***</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">- - - - - - - - - - Names - - - - - - - - - -</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">From Up to Region / Segment / File(def ext: .dat)</font></b>
| |
− | | |
− | <b><font face="Nimbus Mono L, monospace">-----------------------------------------------------------------------------------------------------------------------------------</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">% ... REG = DEFAULT</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">SEG = DEFAULT</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">FILE = $vista_home/g/mumps.dat</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">LOCAL LOCKS REG = DEFAULT</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">SEG = DEFAULT</font></b>
| |
− | | |
− | <b><font face="Nimbus Mono L, monospace">FILE = $vista_home/g/mumps.dat</font></b>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GDE> <font color="#0000ff">quit</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GDE-I-NOACTION, Not updating Global Directory /home/dsl/myVistA/FOIAVistA/g/mumps.gld</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~$ </b></font></font></pre><p>
| |
− | <font face="Nimbus Roman No9 L, serif"><font size="3">In the example
| |
− | above, notice how the database file is defined in terrms of the
| |
− | environment variable $vista_home. This means that, as long as the
| |
− | environment variable $vista_home is defined, a global directory on
| |
− | the CD-ROM can serve to point to a database file wherever it happens
| |
− | to be on the system. This can allow two processes to share a global
| |
− | directory, but to have different database files. </font></font>
| |
− | </p>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Write $ZTRNLNM(<font face="Nimbus Mono L">"vista_home")</font></font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L"><font size="2"><b>/home/dsl/myVistA/FOIAVistA</b></font></font>
| |
− | <font face="Nimbus Mono L"><font size="2"><b>GTM></b></font></font></pre><h2>
| |
− | <a name="$ZROUTINES and $ZGBLDIR vs. UCI & Volume set|outline"></a>
| |
− | <font face="Nimbus Sans L, sans-serif"><font size="4"><i>$ZROUTINES and
| |
− | $ZGBLDIR vs. UCI & Volume set</i></font></font></h2>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">The GT.M
| |
− | environment is defined by <b><font size="2"><font face="Nimbus Mono L, monospace">$ZROutines</font></font></b>
| |
− | and <b><font size="2"><font face="Nimbus Mono L, monospace">$ZGbldir</font></font></b>.
| |
− | Concepts from other M implementations such as UCI and volume set do
| |
− | not exist on GT.M.</font></font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">The GT.M
| |
− | separation between routines and the database is very powerful,
| |
− | especially in real-world environments. Apart from the flexibility
| |
− | this offers, it enables the practice of “defensive
| |
− | programming”, not unlike defensive driving. We are human beings
| |
− | who are prone to err, and defensive practices reduce the probability
| |
− | of errors.</font></font></p>
| |
− | | |
− | <h2><a name="Example: Development environments|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="4"><i>Example:
| |
− | Development environments</i></font></font></h2>
| |
− | <p><font face="Nimbus Roman No9 L, serif">The example below is
| |
− | adapted from a post I made on the <a href="http://lists.sourceforge.net/lists/listinfo/hardhats-members">Hardhats
| |
− | mailing list</a>.</font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif">Fil is <a href="http://hardhats.org/history/beza.html">Fil
| |
− | Beza</a>, a key contributor to VistA for two decades who passed away
| |
− | on February 3, 2005 (click on his name for tributes from those who
| |
− | knew him). He gave me permission to use his name in the GT.M
| |
− | Acculturation live CD, after I first developed this example in
| |
− | response to one of his posts on the mailing list. </font>
| |
− | </p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">If Fil and I
| |
− | are developers and Fil's project is involves work on certain Lab
| |
− | modules, he can create a <b><font size="2"><font face="Nimbus Mono L, monospace">/home/fil/lab</font></font></b>
| |
− | subdirectory for his work and if my project is in Oncology, I can
| |
− | create a <b><font size="2"><font face="Nimbus Mono L, monospace">/home/bhaskar/onc</font></font></b>
| |
− | | |
− | subdirectory for my work. If the reference (or production) routines
| |
− | are in the directory /opt/vista_23.98/o for the object files and
| |
− | /opt/vista_23.98/r for the source files, I can copy the files I wish
| |
− | to work on from /opt/vista_23.98/r to <b><font size="2"><font face="Nimbus Mono L, monospace">/home/bhaskar/onc</font></font></b>
| |
− | – I do not need to copy all 20,000+ routines to create my
| |
− | private environment – and work on them in <b><font size="2"><font face="Nimbus Mono L, monospace">/home/bhaskar/onc</font></font></b>.
| |
− | I can set <b><font size="2"><font face="Nimbus Mono L, monospace">$ZROUtines</font></font></b>
| |
− | to <b><font size="2"><font face="Nimbus Mono L, monospace">"/home/bhaskar/onc
| |
− | /opt/vista_23.98/o(/opt/vista_23.98/r)"</font></font></b>. As
| |
− | long as I have read access to /opt/vista_23.98/ and its
| |
− | subdirectories (e.g., by making them world read-only or setting up
| |
− | ownership and permissions so that I do not have write access), I can
| |
− | continue to use all routines there except those for which I have a
| |
− | private copy, and I cannot possibly either deliberately or
| |
− | inadvertently change the reference / production routines. Note that
| |
− | while I technically do not need access to <b><font size="2"><font face="Nimbus Mono L, monospace">/opt/vista_23.98/r</font></font></b>,
| |
− | I nevertheless still include it in my <b><font size="2"><font face="Nimbus Mono L, monospace">$ZROUtines</font></font></b>
| |
− | | |
− | so that I can read the source code of any routine that need to
| |
− | examine. </font></font>
| |
− | </p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Similarly, Fil
| |
− | can set his <b><font size="2"><font face="Nimbus Mono L, monospace">$ZROUtines</font></font></b>
| |
− | to <b><font size="2"><font face="Nimbus Mono L, monospace">"/home/fil/lab
| |
− | /opt/vista_23.98/o(/opt/vista_23.98/r)"</font></font></b>. All
| |
− | he needs to do is copy that set of routines that he wants to work on
| |
− | from <b><font size="2"><font face="Nimbus Mono L, monospace">/opt/vista_23.98/r</font></font></b>
| |
− | to <b><font size="2"><font face="Nimbus Mono L, monospace">/home/fil/lab</font></font></b>
| |
− | and change them. He doesn't need to copy all 20,000+ routines into
| |
− | his private environment. We can also ensure that Fil cannot
| |
− | deliberately or inadvertently change anything in the reference /
| |
− | production environment, while continuing to use the routines therein.
| |
− | This is shown in the diagram below (the link to <b><font size="2"><font face="Nimbus Mono L, monospace">/opt/vista_23.98/o</font></font></b>
| |
− | | |
− | to find object code modules also includes a parenthetic reference to
| |
− | <b><font size="2"><font face="Nimbus Mono L, monospace">/opt/vista_23.98/r</font></font></b>
| |
− | for the corresponding source code modules so that they can be
| |
− | examined):</font></font></p>
| |
− | <p><img src="index_files/041210-1EnvironmentExample1.jpg" name="graphics4" align="left" border="0" height="610" width="687"><br clear="left"><font face="Nimbus Roman No9 L, serif"><font size="3">Now
| |
− | consider when Fil and I are done with our work. Since he and I have
| |
− | been working in parallel, we will want to test our work for mutual
| |
− | (in)compatibility. I can set my <b><font size="2"><font face="Nimbus Mono L, monospace">$ZROUtines</font></font></b>
| |
− | to <b><font size="2"><font face="Nimbus Mono L, monospace">"/home/bhaskar/onc
| |
− | /home/fil/lab /opt/vista_23.98/o(/opt/vista_23.98/r)"</font></font></b>
| |
− | and Fil can set his <b><font size="2"><font face="Nimbus Mono L, monospace">$ZROUtines</font></font></b>
| |
− | to <b><font size="2"><font face="Nimbus Mono L, monospace">"/home/fil/lab
| |
− | /home/bhaskar/onc /opt/vista_23.98/o(/opt/vista_23.98/r)"</font></font></b>.
| |
− | This allows us to use each other's routines in our own unit test
| |
− | environments to see whether we have stepped on each other's toes. We
| |
− | can find and address conflicts that go beyond both of us changing the
| |
− | same code module. This is shown below.</font></font></p>
| |
− | | |
− | <p><img src="index_files/041210-1EnvironmentExample2.gif" name="graphics5" align="left" border="0" height="523" width="588"><br clear="left"><font face="Nimbus Roman No9 L, serif"><font size="3">GT.M
| |
− | also simplifies version control, because it means that when I am
| |
− | ready to check in my work, the only files we need to look at are in
| |
− | <b><font size="2"><font face="Nimbus Mono L, monospace">/home/bhaskar/lab</font></font></b>,
| |
− | since I could not possibly have changed anything in reference /
| |
− | production, even inadvertently. </font></font>
| |
− | </p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">We can take
| |
− | this example further. Suppose that Fil and I are doing our work with
| |
− | a new GT.M version and part of what we are doing is to enhance the
| |
− | application software to take advantage of a new feature in the new
| |
− | release, say a <b><font size="2"><font face="Nimbus Mono L, monospace">$ZMAgic()</font></font></b>
| |
− | function. He and I can set up a shared directory, say <b><font size="2"><font face="Nimbus Mono L, monospace">/var/newobj</font></font></b>
| |
− | to which we both have read/write access. I can set up <b><font size="2"><font face="Nimbus Mono L, monospace">$ZROUtines</font></font></b>
| |
− | to be <b><font size="2"><font face="Nimbus Mono L, monospace">"/home/bhaskar/onc
| |
− | /var/newobj(/opt/vista_23.98/r)"</font></font></b> and Fil can
| |
− | set up his <b><font size="2"><font face="Nimbus Mono L, monospace">$ZROUtines</font></font></b>
| |
− | | |
− | to be <b><font size="2"><font face="Nimbus Mono L, monospace">"/home/fil/lab
| |
− | /var/newobj(/opt/vista_23.98/r)"</font></font></b>. Now,
| |
− | whenever he or I reference a routine from the reference / production
| |
− | environment, a new object module compiled by the new GT.M version
| |
− | will be dynamically compiled and placed in <b><font size="2"><font face="Nimbus Mono L, monospace">/var/newobj</font></font></b>,
| |
− | but the source routines in <b><font size="2"><font face="Nimbus Mono L, monospace">/opt/vista_23.98/r</font></font></b>
| |
− | are unaltered. </font></font>
| |
− | </p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">There are
| |
− | similar things we can do with M globals using a global directory
| |
− | pointed to by <b><font size="2"><font face="Nimbus Mono L, monospace">$ZGBLdir</font></font></b>.
| |
− | For example, if the data dictionary is defined in <font size="2"><font face="Nimbus Mono L, monospace">^DIC</font></font>,
| |
− | Fil and I can create global directories that refer to <b><font size="2"><font face="Nimbus Mono L, monospace">^DIC</font></font></b>
| |
− | | |
− | in the production / reference database. If we have read-only access
| |
− | to that database file, we cannot possibly change it during the course
| |
− | of our development, not even inadvertently, and we are assured that
| |
− | our software is compatible with the production data dictionary.
| |
− | Taking this one step further, if I know that my oncology work is only
| |
− | supposed to affect globals <b><font size="2"><font face="Nimbus Mono L, monospace">^ABC</font></font></b>
| |
− | and <b><font size="2"><font face="Nimbus Mono L, monospace">^DEF</font></font></b>,
| |
− | I can set up a global directory and a sandbox database file that
| |
− | allows me read/write access only to those two globals, and read-only
| |
− | access to everything else. [Note, this slicing and dicing of globals
| |
− | is done at the level of the global variable, and not at the level of
| |
− | a subscript.] </font></font>
| |
− | </p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">GT.M also
| |
− | simplifies version control, because it means that when I am ready to
| |
− | check in my work, the only files we need to look at are in
| |
− | /home/bhaskar/lab, since I could not possibly have changed anything
| |
− | in reference / production, even inadvertently. </font></font>
| |
− | </p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">We can take
| |
− | this example further. Suppose that Fil and I are doing our work with
| |
− | a new GT.M version and part of what we are doing is to enhance the
| |
− | application software to take advantage of a new feature in the new
| |
− | release, say a $ZMAgic() function. He and I can set up a shared
| |
− | directory, say /var/newobj to which we both have read/write access. I
| |
− | can set up $ZROUtines to be "/home/bhaskar/onc
| |
− | /var/newobj(/opt/vista_23.98/r)" and Fil can set up his
| |
− | $ZROUtines to be "/home/fil/lab
| |
− | /var/newobj(/opt/vista_23.98/r)". Now, whenever he or I
| |
− | reference a routine from the reference / production environment, a
| |
− | new object module compiled by the new GT.M version will be
| |
− | dynamically compiled and placed in /var/newobj, but the source
| |
− | routines in /opt/vista_23.98/r are unaltered. </font></font>
| |
− | </p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">There are
| |
− | similar things we can do with M globals using a global directory
| |
− | pointed to by $ZGBLdir. For example, if the data dictionary is
| |
− | defined in ^DIC, Fil and I can create global directories that refer
| |
− | to ^DIC in the production / reference database. If we have read-only
| |
− | access to that database file, we cannot possibly change it during the
| |
− | course of our development, not even inadvertently, and we are assured
| |
− | that our software is compatible with the production data dictionary.
| |
− | Taking this one step further, if I know that my oncology work is only
| |
− | supposed to affect globals ^ABC and ^DEF, I can set up a global
| |
− | directory and a sandbox database file that allows me read/write
| |
− | access only to those two globals, and read-only access to everything
| |
− | else. [Note, this slicing and dicing of globals can be done at the
| |
− | level of the global variable, and not at the level of a subscript.] </font></font>
| |
− | </p>
| |
− | | |
− | <h2><a name="Example: Application Service Provider|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="4"><i>Example:
| |
− | Application Service Provider</i></font></font></h2>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">In an
| |
− | Application Service Provider (ASP) environment, the same application
| |
− | code can be used for a number of customers, but each customer has its
| |
− | own database. Sometimes parts of the database may also be common and
| |
− | used on a read-only basis for normal operation, such as a data
| |
− | dictionary, an approved drug formulary, or a table of sales tax rates
| |
− | for each county or municipality. Each customer may also have a small
| |
− | set of custom routines. In a “Harry Potter meets the magic of
| |
− | VistA” example, let us consider an ASP serving St. Mungo's
| |
− | Hospital as well as Azkaban Infirmary: </font></font>
| |
− | </p>
| |
− | <ul>
| |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">The
| |
− | majority of routines are shared with object files in
| |
− | <b><font size="2"><font face="Nimbus Mono L, monospace">/opt/vista_23.98/o</font></font></b>
| |
− | and source files in <b><font size="2"><font face="Nimbus Mono L, monospace">/opt/vista_23.98/r</font></font></b>.
| |
− | </font></font>
| |
− | | |
− | </p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Custom
| |
− | routines for St. Mungo's in <b><font size="2"><font face="Nimbus Mono L, monospace">/var/stmungos/o</font></font></b>
| |
− | & <b><font size="2"><font face="Nimbus Mono L, monospace">/var/stmungos/r</font></font></b>
| |
− | for object & source respectively. </font></font>
| |
− | </p>
| |
− | | |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Similarly,
| |
− | custom routines for Azkaban are in <b><font size="2"><font face="Nimbus Mono L, monospace">/var/azkaban/o</font></font></b>
| |
− | & <b><font size="2"><font face="Nimbus Mono L, monospace">/var/azkaban/r</font></font></b>.</font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">The
| |
− | National Drug File as approved by the Ministry of Magic in <b><font size="2"><font face="Nimbus Mono L, monospace">^PSNDF</font></font></b>
| |
− | is shared by both institutions, but all other data is institution
| |
− | specific. <b><font size="2"><font face="Nimbus Mono L, monospace">^PSNDF</font></font></b>
| |
− | | |
− | is in <b><font size="2"><font face="Nimbus Mono L, monospace">/opt/vista_23.98/g/ndf.dat</font></font></b>.</font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">All other
| |
− | globals for St. Mungo's are in <b><font size="2"><font face="Nimbus Mono L, monospace">/var/stmungos/g/mumps.dat</font></font></b>.</font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">All other
| |
− | globals for Azkaban are in <b><font size="2"><font face="Nimbus Mono L, monospace">/var/azkaban/g/mumps.dat</font></font></b>.</font></font></p>
| |
− | </li></ul>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">One way to
| |
− | accomplish this is as follows: </font></font>
| |
− | | |
− | </p>
| |
− | <ul>
| |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">There
| |
− | will be two Linux groups, <b><font size="2"><font face="Nimbus Mono L, monospace">stmungos</font></font></b>
| |
− | and <b><font size="2"><font face="Nimbus Mono L, monospace">azkaban</font></font></b>.
| |
− | All St. Mungo's users will belong to the former, and all Azkaban
| |
− | users will belong to the latter.</font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3"><b><font size="2"><font face="Nimbus Mono L, monospace">/var/stmungos</font></font></b>
| |
− | will have subdirectory <b><font size="2"><font face="Nimbus Mono L, monospace">o</font></font></b>
| |
− | | |
− | for object files of M routines that are used only by St. Mungo's;
| |
− | subdirectory <b><font size="2"><font face="Nimbus Mono L, monospace">r</font></font></b>
| |
− | for source files of M routines specific to St. Mungo's; subdirectory
| |
− | <b><font size="2"><font face="Nimbus Mono L, monospace">g</font></font></b>
| |
− | for the database file <b><font size="2"><font face="Nimbus Mono L, monospace">/var/stmungos/g/mumps.dat</font></font></b>;
| |
− | and subdirectory <b><font size="2"><font face="Nimbus Mono L, monospace">j</font></font></b>
| |
− | for the journal files. Note that <b><font size="2"><font face="Nimbus Mono L, monospace">/var/stmungos/j</font></font></b>
| |
− | | |
− | will actually be a file system mounted on a different disk and a
| |
− | different controller, either mounted at <b><font size="2"><font face="Nimbus Mono L, monospace">/var/stmungos/j</font></font></b>
| |
− | or pointed to as a symbolic link by <b><font size="2"><font face="Nimbus Mono L, monospace">/var/stmungos/j</font></font></b>
| |
− | – in a production environment, for reasons of recoverability
| |
− | from a hardware failure, it is desirable for a database file and its
| |
− | journal file to reside on different hard drives with different
| |
− | controllers. <b><font size="2"><font face="Nimbus Mono L, monospace">/var/stmungos/g/mumps.dat</font></font></b>,
| |
− | <b><font size="2"><font face="Nimbus Mono L, monospace">/var/stmungos/j</font></font></b>
| |
− | and <b><font size="2"><font face="Nimbus Mono L, monospace">/var/stmungos/j/mumps.mjl</font></font></b>
| |
− | | |
− | will be read-writable only by members of the group stmungos. No one
| |
− | else will even have read-only access. <b><font size="2"><font face="Nimbus Mono L, monospace">/var/stmungos/o</font></font></b>
| |
− | and <b><font size="2"><font face="Nimbus Mono L, monospace">/var/stmungos/r</font></font></b>
| |
− | will be read-only directories, since the only time to change a
| |
− | routine (or its object code) will be when the application is being
| |
− | updated. At all other times, we will use Linux file permissions to
| |
− | ensure that routines cannot even inadvertently be altered. </font></font>
| |
− | </p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3"><b><font size="2"><font face="Nimbus Mono L, monospace">/var/azkaban</font></font></b>
| |
− | will be similarly configured to be accessible by Azkaban users and
| |
− | no one else. </font></font>
| |
− | | |
− | </p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3"><b><font size="2"><font face="Nimbus Mono L, monospace">/opt/vista_23.98</font></font></b>
| |
− | and all subdirectories and files are available to all users but on a
| |
− | read-only basis. The subdirectories will be <b><font size="2"><font face="Nimbus Mono L, monospace">o</font></font></b>
| |
− | for object files, <b><font size="2"><font face="Nimbus Mono L, monospace">r</font></font></b>
| |
− | for routines, and <b><font size="2"><font face="Nimbus Mono L, monospace">g</font></font></b>
| |
− | | |
− | for a global directory, <b><font size="2"><font face="Nimbus Mono L, monospace">/opt/vista_23.98/g/mumps.gld</font></font></b>
| |
− | as well as for the national drug database file
| |
− | <b><font size="2"><font face="Nimbus Mono L, monospace">/opt/vista_23.98/g/ndf.dat</font></font></b>.
| |
− | Note that <b><font size="2"><font face="Nimbus Mono L, monospace">ndf.dat</font></font></b>
| |
− | is used read-only, and static files do not need to be journaled.</font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">The
| |
− | global directory <b><font size="2"><font face="Nimbus Mono L, monospace">/opt/vista_23.98/g/mumps.gld</font></font></b>
| |
− | | |
− | will have two name spaces, <b><font size="2"><font face="Nimbus Mono L, monospace">NDF</font></font></b>,
| |
− | to which will be directed, and which will point to the database file
| |
− | <b><font size="2"><font face="Nimbus Mono L, monospace">/opt/vista_23.98/g/ndf.dat</font></font></b>
| |
− | and <b><font face="Nimbus Mono L, monospace">DEFAULT</font></b>
| |
− | which will point to <b><font size="2"><font face="Nimbus Mono L, monospace">/var/$GROUP/g/mumps.dat</font></font></b>.
| |
− | The environment variable <b><font face="Nimbus Mono L, monospace">$GROUP</font></b>
| |
− | will be set in the Linux shell when a user logs in, and used by the
| |
− | sole global directory <b><font size="2"><font face="Nimbus Mono L, monospace">/opt/vista_23.98/g/mumps.gld</font></font></b>
| |
− | | |
− | to point GT.M processes from each hospital to their appropriate
| |
− | database. </font></font>
| |
− | </p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">The
| |
− | commands below in the file <b><font size="2"><font face="Nimbus Mono L, monospace">/etc/profile.local</font></font></b>
| |
− | are used to set the environment variables for all users on the
| |
− | system. Note the use of the environment variable <b><font face="Nimbus Mono L, monospace">$GROUP</font></b>
| |
− | to again set the correct value of <b><font size="2"><font face="Nimbus Mono L, monospace">$gtmroutines</font></font></b>
| |
− | | |
− | appropriately for each user.</font></font></p>
| |
− | </li></ul>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>export GROUP=${GROUP:=`id -gn`}</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>export gtm_dist=/usr/local/gtm ; source $gtm_dist/gtmprofile</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>export gtmgbldir=/opt/vista_23.98/g/mumps.gld</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>export gtmroutines="/var/$GROUP/o(/var/$GROUP/r) /opt/vista_23.98/o(/opt/vista_23.98/r) $gtm_dist"</b></font></font></pre><p>
| |
− | <font face="Nimbus Roman No9 L, serif"><font size="3">It is worth
| |
− | taking the time to review the above example, to see how with maximum
| |
− | commonality and minimal customization, each user is directed to the
| |
− | correct database and routines for his/her institution. Note that even
| |
− | if a user were to manually change his environment variables and
| |
− | attempt to access the database and routines of another institution,
| |
− | the Linux file system permissions would prevent such unauthorized
| |
− | access.</font></font></p>
| |
− | <h3><a name="Exercise – GDE commands for ASP|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="4">Exercise
| |
− | – GDE commands for ASP</font></font></h3>
| |
− | | |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Write the
| |
− | commands to be used by GDE to create the global directory
| |
− | <b><font size="2"><font face="Nimbus Mono L, monospace">/opt/vista_23.98/g/mumps.gld</font></font></b>.
| |
− | Assume that maximum key size is 255 bytes, the maximum record size is
| |
− | 2000 bytes, the desired block size is 4096 bytes, and the number of
| |
− | global buffers is 4000 for each institution's main database, and 1000
| |
− | for the National Drug File database.</font></font></p>
| |
− | <h2><a name="GT.M leverages the operating system|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="4"><i>GT.M
| |
− | leverages the operating system</i></font></font></h2>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Wherever
| |
− | possible, the GT.M philosophy is to leverage what is already there in
| |
− | the underlying computer system, rather than reinventing it. For
| |
− | example, you use the editor of your choice when editing M routines.
| |
− | You used the beaver editor earlier; now try another, e.g., nano.</font></font></p>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~$ <font color="#ff0000">export EDITOR=`which nano`</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~$ <font color="#ff0000">myVistA/FOIAVistA/run</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">ZEDit "XYZ"</font></b></font></font></pre><h2>
| |
− | | |
− | <a name="Security|outline"></a><a name="Security|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="4"><i>Security</i></font></font></h2>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">In order to
| |
− | meet the needs of financial applications, GT.M was designed from the
| |
− | very beginning to be secure. [Caveat: absolute security does not
| |
− | exist in this universe. For a discussion that bridges philosophy and
| |
− | technology, I highly recommend Bruce Schneier's <i>Secrets and Lies</i>,
| |
− | ISBN 0-471-25311-1.]</font></font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">A GT.M process
| |
− | can access a database file only if the file ownership and permissions
| |
− | allow that access. Under normal operation, there is no component of
| |
− | GT.M that operates as the super user (root). The GT.M security model
| |
− | is simple, well understood and documented.</font></font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">It is
| |
− | extremely straightforward to create a user id that can only login,
| |
− | run VistA and log out.</font></font></p>
| |
− | <h3><a name="Exercise – Security|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="4">Exercise
| |
− | – Security</font></font></h3>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">In the
| |
− | following, notice how Linux file permissions are used to allow user
| |
− | dsl full access to the database, and preventing another user from
| |
− | updating a database, while allowing that user to read from it. Notice
| |
− | how the commands source /usr/local/gtm/gtmprofile, mumps -run ^GDE
| |
− | and mupip create are used to set up the GT.M environment, create a
| |
− | global directory and create the database file(s). In subsequent
| |
− | exercises, you will have to remember to do that yourself without
| |
− | being told!</font></font></p>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~$ <font color="#ff0000">mkdir myVistA/tmp ; cd myVistA/tmp</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">source /usr/local/gtm/gtmprofile</font> </b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">mumps -run ^GDE</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GDE-I-GDUSEDEFS, Using defaults for Global Directory </b></font></font>
| |
− | <b><font face="Nimbus Mono L, monospace">/ramdisk/home/dsl/myVistA/tmp/mumps.gld</font></b>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GDE> <font color="#0000ff">change -segment DEFAULT -file=/home/dsl/myVistA/tmp/mumps.dat</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GDE> <font color="#0000ff">exit</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GDE-I-VERIFY, Verification OK</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GDE-I-GDCREATE, Creating Global Directory file </b></font></font>
| |
− | <b><font face="Nimbus Mono L, monospace">/ramdisk/home/dsl/myVistA/tmp/mumps.gld</font></b>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">mupip create</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Created file /home/dsl/myVistA/tmp/mumps.dat</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">chmod o-w mumps.dat</font> </b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">ls -l mumps.dat</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>-rw-rw-r-- 1 dsl staff 169472 Mar 22 21:41 mumps.dat</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">mumps -dir</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Set ^X=1</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Write ^X</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>1</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Halt</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">sudo su - lp</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>lp@ttyp0[lpd]$ <font color="#ff0000">cd /home/dsl/myVistA/tmp</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>lp@ttyp0[tmp]$ <font color="#ff0000">source /usr/local/gtm/gtmprofile</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>lp@ttyp0[tmp]$ <font color="#0000ff">mumps -dir</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Write ^X</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>1</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Kill ^X</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-E-DBPRIVERR, No privilege for attempted update operation for file: /home/dsl/myVistA/tmp/mumps.dat</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Halt</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>lp@ttyp0[tmp]$ <font color="#ff0000">exit</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>logout</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">cd ../..</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~$ <font color="#ff0000">rm -rf myVistA/tmp</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~$ </b></font></font></pre><h2>
| |
− | <a name="No special startup or shutdown|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="4"><i>No
| |
− | special startup or shutdown</i></font></font></h2>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">The first
| |
− | process to open a database file sets up all the shared memory control
| |
− | structures needed. The last one out tears it down. There is no daemon
| |
− | that must run as root that can be a single point of failure, a
| |
− | performance bottleneck, or a potential security vulnerability.</font></font></p>
| |
− | | |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Upon bringing
| |
− | the system back up, if the system crashes, or is forcibly brought
| |
− | down: if journaling is in use, <b><font size="2"><font face="Nimbus Mono L, monospace">mupip
| |
− | journal -recover</font></font></b> (or <b><font size="2"><font face="Nimbus Mono L, monospace">mupip
| |
− | journal -rollback</font></font></b> if replication is in use) will
| |
− | recover the database. If journaling is not in use, <b><font size="2"><font face="Nimbus Mono L, monospace">mupip
| |
− | rundown -region "*"</font></font></b> will clean up the
| |
− | database, but cannot fix any integrity errors caused, for example,
| |
− | but shutting down a computer without cleanly terminating GT.M
| |
− | processes. [Note: do not use <b><font size="2"><font face="Nimbus Mono L, monospace">mupip
| |
− | rundown</font></font></b> if journaling is in use and you plan to
| |
− | recover the database after a crash with a <b><font size="2"><font face="Nimbus Mono L, monospace">mupip
| |
− | journal</font></font></b> operation.]</font></font></p>
| |
− | | |
− | <h2><a name="Journaling – the key to database integrity|outline"></a>
| |
− | <font face="Nimbus Sans L, sans-serif"><font size="4"><i>Journaling –
| |
− | the key to database integrity</i></font></font></h2>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">GT.M, like
| |
− | virtually all high performance databases, uses journaling (called
| |
− | “logging” by some databases) to restore data integrity
| |
− | and provide continuity of business after an unplanned event such as a
| |
− | system crash.</font></font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">There are two
| |
− | switches to turn on journaling – <b><font size="2"><font face="Nimbus Mono L, monospace">ENable</font></font></b>
| |
− | / <b><font size="2"><font face="Nimbus Mono L, monospace">DISable</font></font></b>
| |
− | | |
− | and <b><font size="2"><font face="Nimbus Mono L, monospace">ON</font></font></b>/<b><font size="2"><font face="Nimbus Mono L, monospace">OFF</font></font></b>.
| |
− | Enabling or disabling journaling requires stand alone access to the
| |
− | database. Turning journaling on and off can be done when the database
| |
− | is in use. </font></font>
| |
− | </p>
| |
− | <h3><a name="Exercise - journaling|outline"></a><a name="Exercise - journaling|outline"></a>
| |
− | <font face="Nimbus Sans L, sans-serif"><font size="4">Exercise -
| |
− | journaling</font></font></h3>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Here, we will
| |
− | set up journaling for a database, simulate a crash, and recover the
| |
− | database from the journal file. Since GT.M database administration
| |
− | commands are normally issued from the Linux shell, outside GT.M, we
| |
− | will manually set up the environment GT.M expects (which thus far has
| |
− | been done in shell scripts). Also, note that the Linux command <b><font size="2"><font face="Nimbus Mono L, monospace">ipcs
| |
− | -m</font></font></b> is used twice: first to report on shared memory
| |
− | segments that exist before any database access; and again after the
| |
− | database has been accessed – the additional shared memory
| |
− | segment reported the second time is used by GT.M for the database
| |
− | file. A system crash is simulated by deleting the shared memory
| |
− | segment used for the database and terminating the GT.M process (do
| |
− | not ever attempt the following on a real system except for testing
| |
− | purposes; because of the possibility of human error, <b><u><i>do not
| |
− | ever</i></u></b> do this on a machine where production applications
| |
− | are operating, even for testing). </font></font>
| |
− | | |
− | </p>
| |
− | <p><font face="Nimbus Roman No9 L, serif">Note that the numbers in
| |
− | <font color="#ff00ff">fuchsia (light magenta)</font> are process ids,
| |
− | and shared memory keys tht we will manipulate as part of the
| |
− | exercise. They will vary from machine to machine and run to run. You
| |
− | should use the values from your machine for your run. Create a
| |
− | directory ~/myVistA/tmp, set up the GT.M environment, create a global
| |
− | directory and an initial database (see <a href="#Exercise+%3F+Security%7Coutline">above</a>,
| |
− | if you don't remember how to). We start by turning on journaling for
| |
− | the newly created database.</font></p>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">mupip set -journal="enable,on,before" -region "*"</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-JNLCREATE, Journal file /ramdisk/home/dsl/myVistA/tmp/mumps.mjl created for region DEFAULT with BEFORE_IMAGES</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-JNLSTATE, Journaling state for region DEFAULT is now ON</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">ls -l</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>-rw-rw-rw- 1 dsl staff 169472 Mar 23 12:48 mumps.dat</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>-rw-rw-r-- 1 dsl staff 1024 Mar 23 12:48 mumps.gld</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>-rw-rw-rw- 1 dsl staff 2368 Mar 23 12:48 mumps.mjl</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">mumps -dir</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">ZSYstem "ps -ef | grep mumps"</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl <font color="#ff00ff">671</font> 631 0 12:48 ttyp1 00:00:00 mumps -dir</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl 672 671 0 12:49 ttyp1 00:00:00 /bin/bash -c ps -ef | grep mumps</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl 674 672 0 12:49 ttyp1 00:00:00 /bin/bash -c ps -ef | grep mumps</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">ZSYstem "ipcs -m"</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>------ Shared Memory Segments --------</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>key shmid owner perms bytes nattch status </b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>0x00000000 0 dsl 777 393216 2 dest </b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>0x00000000 557057 dsl 777 393216 2 dest </b></font></font>
| |
− | | |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Kill ^X Set ^X=$Job</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">ZSYstem "ipcs -m"</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>------ Shared Memory Segments --------</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>key shmid owner perms bytes nattch status </b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>0x00000000 0 dsl 777 393216 2 dest </b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>0x00000000 557057 dsl 777 393216 2 dest </b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>0x00000000 <font color="#ff00ff">655362</font> dsl 777 2629632 1 </b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Write ^X</font></b></font></font>
| |
− | <font color="#ff00ff"><font face="Nimbus Mono L, monospace"><font size="2"><b>671</b></font></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">ZSYstem "sudo ipcrm -m <font color="#ff00ff">655362</font> ; kill -9 "_^X</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Killed</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">ipcs -m</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>------ Shared Memory Segments --------</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>key shmid owner perms bytes nattch status </b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>0x00000000 0 dsl 777 393216 2 dest </b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>0x00000000 557057 dsl 777 393216 2 dest </b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">ps -ef | grep mumps</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">mupip journal -recover -backward mumps.mjl</font> </b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-MUJNLSTAT, Initial processing started at Thu Mar 23 12:50:17 2006</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-MUJNLSTAT, Backward processing started at Thu Mar 23 12:50:17 2006</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-MUJNLSTAT, Before image applying started at Thu Mar 23 12:50:17 2006</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-FILERENAME, File /ramdisk/home/dsl/myVistA/tmp/mumps.mjl is renamed to /ramdisk/home/dsl/myVistA/tmp/mumps.mjl_2006082124931</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-MUJNLSTAT, Forward processing started at Thu Mar 23 12:50:17 2006<font color="#0000ff">Halt</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-S-JNLSUCCESS, Show successful</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-S-JNLSUCCESS, Verify successful</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-S-JNLSUCCESS, Recover successful</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-MUJNLSTAT, End processing at Thu Mar 23 12:50:17 2006</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">mumps -dir</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Write ^X</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>671</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Halt</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$</b></font></font></pre><p>
| |
− | <font face="Nimbus Roman No9 L, serif"><font size="3">Notice how the
| |
− | journal file is used to recover the database.</font></font></p>
| |
− | <h2><a name="Database replication|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="4"><i>Database
| |
− | replication</i></font></font></h2>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">When an
| |
− | application must have the best possible continuity of business, use
| |
− | database replication in addition to before image journaling to create
| |
− | a logical dual site configuration. A major restriction of GT.M
| |
− | replication today is that the primary and secondary must both be on
| |
− | Planet Earth. We will simulate a logical dual site configuration
| |
− | between a data center in Honolulu, Hawaii (21°N 157°W) and a
| |
− | data center in Ghanzi, Botswana (21°S 21°E), the furthest
| |
− | town from Honolulu big enough to have an airport, 12,400 miles away. </font></font>
| |
− | </p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Network
| |
− | information: when Ghanzi is the secondary, it will listen to Honolulu
| |
− | on localhost:4265 (IP:port); when Honolulu is the secondary, it will
| |
− | listen to Ghanzi on localhost:3355. Configure replication as follows:</font></font></p>
| |
− | <ul>
| |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Create a
| |
− | directory /home/dsl/dualsite for this exercise, with subdirectories
| |
− | Honolulu and Ghanzi:</font></font></p>
| |
− | </li></ul>
| |
− | <pre style="margin-bottom: 0.2in;"><font color="#ff0000"><font face="Nimbus Mono L, monospace"><font size="2"><b>mkdir -p myVistA/dualsite/{Honolulu,Ghanzi}</b></font></font></font></pre>
| |
− | | |
− | <ul>
| |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Create
| |
− | two terminal windows, one simulating Honolulu and one simulating
| |
− | Ghanzi. Use different backgrounds so that they look visually
| |
− | different: right click on the screen background, choose <b><font size="2"><font face="Nimbus Sans L, sans-serif">Xshells</font></font></b>
| |
− | and then your choice of background for the terminal window
| |
− | (<b><font size="2"><font face="Nimbus Sans L, sans-serif">Transparent</font></font></b>,
| |
− | <b><font size="2"><font face="Nimbus Sans L, sans-serif">Light</font></font></b>
| |
− | or <b><font size="2"><font face="Nimbus Sans L, sans-serif">Dark</font></font></b>).</font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">In the
| |
− | Honolulu window, change to the Honolulu subdirectory (<b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#ff0000">cd
| |
− | myVistA/dualsite/Honolulu</font></font></font></b>). In the Ghanzi
| |
− | window, change to the Ghanzi subdirectory (<b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#ff0000">cd
| |
− | myVistA/dualsite/Ghanzi</font></font></font></b>). </font></font>
| |
− | | |
− | </p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">In each
| |
− | of Honolulu and Ghanzi (notice the use of the <b><font size="2"><font face="Nimbus Mono L, monospace">-replication=on</font></font></b>
| |
− | switch to turn on replication): </font></font>
| |
− | </p>
| |
− | </li></ul>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/dualsite/Honolulu$ <font color="#ff0000">source /usr/local/gtm/gtmprofile</font></b></font></font>
| |
− | <b><font face="Nimbus Mono L, monospace"><a href="mailto:dsl@box"><font color="#000000">dsl@box:~/myVistA/dualsite/Honolulu</font></a>$ <font color="#ff0000">export gtm_repl_instance=mumps.repl</font></font></b>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/dualsite/Honolulu$ <font color="#ff0000">mumps -run ^GDE</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GDE> <font color="#0000ff">exit</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>...</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/dualsite/Honolulu$ <font color="#ff0000">mupip create</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/dualsite/Honolulu$ <font color="#ff0000">mupip set -journal="enable,before,on" -replication=on -region "*"</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/dualsite/Honolulu$ <font color="#ff0000">mupip replicate -instance_create</font></b></font></font></pre>
| |
− | | |
− | <ul>
| |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">In
| |
− | Honolulu (<b><font size="2"><font face="Nimbus Mono L, monospace">/home/dsl/myVistA/dualsite/Honolulu</font></font></b>),
| |
− | create four files as follows:</font></font></p>
| |
− | </li></ul>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>primary_start:</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>#!/bin/bash</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>mupip replicate -source -start -buf=1 -secondary=localhost:4265 -log=source.log</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>primary_stop:</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>#!/bin/bash</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>mupip replicate -source -shutdown -timeout=0</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>mupip rundown -region "*"</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>secondary_start:</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>#!/bin/bash</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>mupip replicate -source -start -passive -buf=1 -log=source.log</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>mupip replicate -receive -start -listenport=3355 -buf=1 -log=receive.log</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>secondary_stop:</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>#!/bin/bash</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>mupip replicate -receive -shutdown -timeout=0</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>mupip replicate -source -shutdown -timeout=0</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>mupip rundown -region "*"</b></font></font></pre>
| |
− | <ul>
| |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Make the
| |
− | files executable: <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#ff0000">chmod
| |
− | a+x {primary,secondary}_{start,stop}</font></font></font></b></font></font></p>
| |
− | | |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">In Ghanzi
| |
− | (<b><font size="2"><font face="Nimbus Mono L, monospace">/home/dsl/myVistA/dualsite/Ghanzi</font></font></b>)
| |
− | create files <b><font size="2"><font face="Nimbus Mono L, monospace">primary_start</font></font></b>,
| |
− | <b><font size="2"><font face="Nimbus Mono L, monospace">primary_stop</font></font></b>,
| |
− | <b><font size="2"><font face="Nimbus Mono L, monospace">secondary_start</font></font></b>,
| |
− | <b><font size="2"><font face="Nimbus Mono L, monospace">secondary_stop</font></font></b>
| |
− | which are identical to those in Honolulu, except that <b><font size="2"><font face="Nimbus Mono L, monospace">primary_start</font></font></b>
| |
− | should specify the secondary as localhost:3355 and <b><font size="2"><font face="Nimbus Mono L, monospace">secondary_start</font></font></b>
| |
− | | |
− | should specify that the Receive Server should listen at port 4265.
| |
− | Make these files also executable. (It will probably be easiest to
| |
− | copy all four files and edit <b><font size="2"><font face="Nimbus Mono L, monospace">primary_start</font></font></b>
| |
− | and <b><font size="2"><font face="Nimbus Mono L, monospace">secondary_start</font></font></b>
| |
− | to make the changes.)</font></font></p>
| |
− | </li></ul>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Operate the
| |
− | logical dual site configuration with Honolulu as the primary and
| |
− | Ghanzi as the secondary:</font></font></p>
| |
− | <ul>
| |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">In
| |
− | Honolulu, start the primary: <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#ff0000">./primary_start</font></font></font></b></font></font></p>
| |
− | | |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">In
| |
− | Ghanzi, start the secondary: <font color="#ff0000">.<b><font size="2"><font face="Nimbus Mono L, monospace">/secondary_start</font></font></b></font></font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Set a
| |
− | global variable in Honolulu, e.g., <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#0000ff">Set
| |
− | ^X=1</font></font></font></b></font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Notice
| |
− | how it is replicated in Ghanzi:</font></font></p>
| |
− | </li></ul>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Write ^X</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>1</b></font></font></pre>
| |
− | | |
− | <ul>
| |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Simulate
| |
− | a broken network connection (or a down secondary) by executing in
| |
− | Ghanzi: <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#ff0000">./secondary_stop</font></font></font></b></font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Make a
| |
− | database change in Honolulu: e.g., <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#0000ff">Set
| |
− | ^X=2</font></font></font></b></font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Note how
| |
− | the change is not replicated in Ghanzi:</font></font></p>
| |
− | </li></ul>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Write ^X</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>1</b></font></font></pre>
| |
− | | |
− | <ul>
| |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Simulate
| |
− | restoring the network connection and/or bringing up the down
| |
− | secondary by executing in Ghanzi: <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#ff0000">./secondary_start</font></font></font></b></font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Notice
| |
− | how Ghanzi automatically catches up (since with GT.M replication,
| |
− | the secondary listens at a TCP socket while the primary makes
| |
− | periodic attempts to connect to the secondary, it may take a few
| |
− | seconds for Honolulu to detect that Ghanzi is functional again and
| |
− | to resume replication; once replication is resumed, any backlog of
| |
− | data is rapidly streamed to the secondary):</font></font></p>
| |
− | </li></ul>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Write ^X</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>2</b></font></font></pre><p>
| |
− | <font face="Nimbus Roman No9 L, serif"><font size="3">Execute a
| |
− | failover for a planned outage at Honolulu:</font></font></p>
| |
− | <ul>
| |
− | | |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Check the
| |
− | replication backlog in Honolulu to make sure that there is not a
| |
− | replication backlog: <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#ff0000">mupip
| |
− | replicate -source -showbacklog</font></font></font></b></font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Bring
| |
− | Honolulu down: <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#ff0000">./primary_stop</font></font></font></b></font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Bring
| |
− | Ghanzi down as the secondary, and bring it back up as the primary:</font></font></p>
| |
− | </li></ul>
| |
− | <pre><font color="#ff0000"><font face="Nimbus Mono L, monospace"><font size="2"><b>./secondary_stop</b></font></font></font>
| |
− | <font color="#ff0000"><font face="Nimbus Mono L, monospace"><font size="2"><b>./primary_start</b></font></font></font></pre>
| |
− | <ul>
| |
− | | |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Make some
| |
− | database updates to simulate Ghanzi operating as the primary. These
| |
− | will of course not be replicated in Honolulu – verify that
| |
− | Honolulu is indeed not being updated.</font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">After
| |
− | simulated maintenance to Honolulu, bring it up as the secondary:
| |
− | <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#ff0000">./secondary_start</font></font></font></b></font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Verify
| |
− | that Honolulu automatically catches up, that data is now replicated
| |
− | from Ghanzi to Honolulu and that Ghanzi reports no backlog.</font></font></p>
| |
− | </li></ul>
| |
− | <h3><a name="Replication and Backlogs|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="4">Replication
| |
− | and Backlogs</font></font></h3>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">In an ideal
| |
− | world, a primary never goes down when there is a backlog. In the real
| |
− | world, the primary may well go down with a backlog of updates that
| |
− | have not been replicated on the secondary. In order to provide
| |
− | continuity of business, the former secondary must come up as the new
| |
− | primary to keep the application available. When the former primary
| |
− | comes up as the new secondary, the updates that were part of the
| |
− | backlog must be handled. GT.M provides the hooks needed to create
| |
− | applications that are continuously available, but the application
| |
− | must take advantage of these hooks. Consider the following example
| |
− | (the notation P: 100 means that the site is operating as the primary
| |
− | and has committed update number 100):</font></font></p>
| |
− | | |
− | <table border="0" cellpadding="0" cellspacing="0" width="100%">
| |
− | <col width="128">
| |
− | <col width="128">
| |
− | <thead>
| |
− | <tr valign="top">
| |
− | <td width="50%">
| |
− | <p align="left"><font face="Nimbus Roman No9 L, serif">Honolulu</font>
| |
− | </p>
| |
− | </td>
| |
− | | |
− | <td width="50%">
| |
− | <p align="left"><font face="Nimbus Roman No9 L, serif">Ghanzi</font>
| |
− | </p>
| |
− | </td>
| |
− | </tr>
| |
− | </thead>
| |
− | <tbody>
| |
− | <tr valign="top">
| |
− | | |
− | <td width="50%">
| |
− | <p align="left"><font face="Nimbus Roman No9 L, serif">P: 100</font>
| |
− | </p>
| |
− | </td>
| |
− | <td width="50%">
| |
− | <p align="left"><font face="Nimbus Roman No9 L, serif">S: 95
| |
− | (backlog of 5 updates)</font>
| |
− | </p>
| |
− | </td>
| |
− | | |
− | </tr>
| |
− | <tr valign="top">
| |
− | <td width="50%">
| |
− | <p align="left"><font face="Nimbus Roman No9 L, serif">Crashes</font>
| |
− | </p>
| |
− | </td>
| |
− | <td width="50%">
| |
− | <p align="left"><font face="Nimbus Roman No9 L, serif">P: 95
| |
− | (becomes the primary and starts processing)</font>
| |
− | </p>
| |
− | | |
− | </td>
| |
− | </tr>
| |
− | <tr valign="top">
| |
− | <td width="50%">
| |
− | <p align="left"><font face="Nimbus Roman No9 L, serif">Repaired and
| |
− | brought back up</font>
| |
− | </p>
| |
− | </td>
| |
− | <td width="50%">
| |
− | <p align="left"><font face="Nimbus Roman No9 L, serif">P: 120
| |
− | (processing moves it ahead)</font>
| |
− | </p>
| |
− | | |
− | </td>
| |
− | </tr>
| |
− | </tbody>
| |
− | </table>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">This situation
| |
− | would appear to be problematic, because updates 96-100 on Honolulu
| |
− | are different from updates 96-100 on Ghanzi. The GT.M solution is to
| |
− | rollback those transactions on the former primary / new secondary.
| |
− | These rolled back updates (referred to as “lost transactions”)
| |
− | are placed in a file by GT.M, and must be handled. The <b><font size="2"><font face="Nimbus Mono L, monospace">-fetchresync</font></font></b>
| |
− | and <b><font size="2"><font face="Nimbus Mono L, monospace">-losttrans</font></font></b>
| |
− | qualifiers to the <b><font size="2"><font face="Nimbus Mono L, monospace">mupip
| |
− | journal -rollback</font></font></b> command deal with the situation
| |
− | where a former primary comes up as the new secondary. The
| |
− | | |
− | <b><font size="2"><font face="Nimbus Mono L, monospace">-fetchresync</font></font></b>
| |
− | qualifier causes <b><font size="2"><font face="Nimbus Mono L, monospace">mupip
| |
− | journal -rollback</font></font></b> to ask the new primary for the
| |
− | update number at which it became the primary, and rolls back the
| |
− | database to that point. The updates that are rolled off are placed in
| |
− | a “lost transaction file” from which the application can
| |
− | determine what should be done with them (they are sent to the new
| |
− | primary for reprocessing).</font></font></p>
| |
− | <table border="0" cellpadding="0" cellspacing="0" width="100%">
| |
− | <col width="128">
| |
− | <col width="128">
| |
− | <thead>
| |
− | | |
− | <tr valign="top">
| |
− | <td width="50%">
| |
− | <p align="left"><font face="Nimbus Roman No9 L, serif">Honolulu</font>
| |
− | </p>
| |
− | </td>
| |
− | <td width="50%">
| |
− | <p align="left"><font face="Nimbus Roman No9 L, serif">Ghanzi</font>
| |
− | </p>
| |
− | | |
− | </td>
| |
− | </tr>
| |
− | </thead>
| |
− | <tbody>
| |
− | <tr valign="top">
| |
− | <td width="50%">
| |
− | <p><font face="Nimbus Roman No9 L, serif">S: 95 (database
| |
− | recovered and rolled back from 100 to 95; lost transaction file
| |
− | created sent to Ghanzi for reprocessing)</font>
| |
− | </p>
| |
− | </td>
| |
− | | |
− | <td width="50%">
| |
− | <p><font face="Nimbus Roman No9 L, serif">P: 120</font>
| |
− | </p>
| |
− | </td>
| |
− | </tr>
| |
− | <tr valign="top">
| |
− | <td width="50%">
| |
− | <p><font face="Nimbus Roman No9 L, serif">S: 120 (catches up
| |
− | shortly after coming back up and being reconnected)</font>
| |
− | </p>
| |
− | | |
− | </td>
| |
− | <td width="50%">
| |
− | <p><font face="Nimbus Roman No9 L, serif">P: 120</font>
| |
− | </p>
| |
− | </td>
| |
− | </tr>
| |
− | <tr valign="top">
| |
− | <td width="50%">
| |
− | <p><font face="Nimbus Roman No9 L, serif">S: 125 (lost
| |
− | transactions make it back after reprocessing)</font>
| |
− | </p>
| |
− | | |
− | </td>
| |
− | <td width="50%">
| |
− | <p><font face="Nimbus Roman No9 L, serif">P: 125 (updates from
| |
− | lost transaction file reprocessed)</font>
| |
− | </p>
| |
− | </td>
| |
− | </tr>
| |
− | </tbody>
| |
− | </table>
| |
− | <h3><a name="Exercise – replication backlogs|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="4">Exercise
| |
− | – replication backlogs</font></font></h3>
| |
− | | |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">The exercise
| |
− | below simulates the situation above (as before <font color="#ff00ff">fuchsia
| |
− | / light magenta</font> is used for process ids and memory keys that
| |
− | will vary from run to run):</font></font></p>
| |
− | <ul>
| |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">In
| |
− | Honolulu, start the primary, and simulate some updates (note that
| |
− | when simulating a crash in a replicated environment, there are two
| |
− | processes to be killed – the mumps process and the source
| |
− | server, a mupip process; also the shared memory sections are created
| |
− | by the source server even before the GT.M process attaches to them,
| |
− | which it does when it updates the database):</font></font></p>
| |
− | </li></ul>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/dualsite/Honolulu$ <font color="#ff0000">ipcs -m</font> </b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>------ Shared Memory Segments --------</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>key shmid owner perms bytes nattch status </b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/dualsite/Honolulu$ <font color="#ff0000">./primary_start</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/dualsite/Honolulu$ <font color="#ff0000">ipcs -m</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>------ Shared Memory Segments --------</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>key shmid owner perms bytes nattch status </b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>0x00000000 <font color="#ff00ff">4653056</font> dsl 777 1048576 1 </b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>0x00000000 <font color="#ff00ff">4685825</font> dsl 777 2629632 1 </b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/dualsite/Honolulu$ <font color="#ff3366">mumps -dir</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Set ^X=$Job</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Write ^X</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>926</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">ZSYstem "ps -ef | grep -E \(mumps\)\|\(mupip\) ; ipcs -m"</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl <font color="#ff00ff">924</font> 1 0 14:28 ? 00:00:00 mupip replicate -source -start -buf=1 -secondary=localhost:4265 -log=source.log</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl <font color="#ff00ff">926</font> 863 0 14:29 ttyp1 00:00:00 mumps -dir</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl 928 926 0 14:29 ttyp1 00:00:00 /bin/bash -c ps -ef | grep -E \(mumps\)\|\(mupip\) ; ipcs -m</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl 930 928 0 14:29 ttyp1 00:00:00 /bin/bash -c ps -ef | grep -E \(mumps\)\|\(mupip\) ; ipcs -m</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>------ Shared Memory Segments --------</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>key shmid owner perms bytes nattch status </b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>0x00000000 <font color="#ff00ff">4653056</font> dsl 777 1048576 2 </b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>0x00000000 <font color="#ff00ff">4685825</font> dsl 777 2629632 2 </b></font></font>
| |
− | | |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM></b></font></font></pre>
| |
− | <ul>
| |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">In
| |
− | Ghanzi, verify that replication is operating normally. Then bring
| |
− | down the secondary so that a backlog can be built up on the primary
| |
− | to simulate a crash with a backlog:</font></font></p>
| |
− | </li></ul>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/dualsite/Ghanzi$ <font color="#ff0000">./secondary_start</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/dualsite/Ghanzi$ <font color="#ff0000">mumps -dir</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Write ^X</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>926</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Halt</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/dualsite/Ghanzi$ .<font color="#ff0000">/secondary_stop</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Thu Mar 23 14:32:39 2006 : Initiating shut down</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Signalling immediate shutdown</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Receive pool shared memory removed</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Receive pool semaphore removed</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Thu Mar 23 14:32:40 2006 : Initiating shut down</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Signalling shutdown immediate</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Journal pool shared memory removed</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Journal pool semaphore removed</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-MUFILRNDWNSUC, File /ramdisk/home/dsl/myVistA/dualsite/Ghanzi/mumps.dat successfully rundown</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/dualsite/Ghanzi$ </b></font></font></pre>
| |
− | <ul>
| |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">In
| |
− | Honolulu, perform an update, which will become the backlog when
| |
− | Honolulu crashes (after Honolulu recovers and becomes a new
| |
− | secondary, this backlog will become the lost transaction(s)).
| |
− | Simulate a crash (note that in a replicated environment, in addition
| |
− | to the shared memory segment for the database region, there is also
| |
− | one for the journal pool; also both the mumps and mupip processes
| |
− | will need to be terminated):</font></font></p>
| |
− | </li></ul>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Set ^X=^X_" Backlog "_$H</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Write ^X</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>926 Backlog 60347,52517</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">ZSYstem "mupip replicate -source -showbacklog"</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>1 : backlog number of transactions written to journal pool and yet to be sent by the source server</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>2 : sequence number of last transaction written to journal pool</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>1 : sequence number of last transaction sent by source server</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">ZSYstem "mupip replicate -source -checkhealth"</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>PID <font color="#ff00ff">924</font> Source server is alive</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">ZSYstem "ipcrm -m <font color="#ff00ff">4653056</font> -m <font color="#ff00ff">4685825</font> ; kill -9 <font color="#ff00ff">924</font> <font color="#ff00ff">926</font>"</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Killed</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/dualsite/Honolulu$ ipcs -m</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>------ Shared Memory Segments --------</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>key shmid owner perms bytes nattch status </b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/dualsite/Honolulu$ ps -ef | grep -E \(mupip\)\|\(mumps\)</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/dualsite/Honolulu$ </b></font></font></pre>
| |
− | <ul>
| |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Bring
| |
− | Ghanzi up to take over as the new primary, keeping the application
| |
− | available, and perform some updates to simulate activity. Also,
| |
− | verify that the backlog in Honolulu really is a backlog, and was not
| |
− | replicated to Ghanzi.</font></font></p>
| |
− | | |
− | </li></ul>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/dualsite/Ghanzi$ <font color="#ff0000">./primary_start</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/dualsite/Ghanzi$ <font color="#ff0000">mumps -dir</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Write ^X</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>926</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Set ^X=$J_" Ghanzi "_$H</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Write ^X</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>974 Ghanzi 60347,52928</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM></b></font></font></pre>
| |
− | <ul>
| |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Now
| |
− | simulate a recovery of the system in Honolulu. When it comes up, use
| |
− | the <b><font size="2"><font face="Nimbus Mono L, monospace">-fetchresync</font></font></b>
| |
− | qualifier to have Honolulu query Ghanzi so that it can roll back the
| |
− | lost transactions.</font></font></p>
| |
− | </li></ul>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/dualsite/Honolulu$ <font color="#ff0000">mupip journal -rollback -backward -fetchresync=3355 -losttrans=Lost_Trans_Report_`date +%Y%m%d%H%M%S`.txt "*"</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-MUJNLSTAT, Initial processing started at Thu Mar 23 14:44:16 2006</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-MUJPOOLRNDWNSUC, Jnlpool section (id = 688129) belonging to the replication instance /ramdisk/home/dsl/myVistA/dualsite/Honolulu/mumps.repl successfully rundown</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-SEMREMOVED, Semaphore id 688129 removed from the system</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-MUJNLSTAT, FETCHRESYNC processing started at Thu Mar 23 14:44:16 2006</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Thu Mar 23 14:44:16 2006 : Waiting for a connection...</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Thu Mar 23 14:44:20 2006 : Connection established</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Thu Mar 23 14:44:20 2006 : Received RESYNC SEQNO is 2</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-MUJNLSTAT, Backward processing started at Thu Mar 23 14:44:20 2006</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-RESOLVESEQNO, Resolving until sequence number 0x0000000000000002</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-MUJNLSTAT, Before image applying started at Thu Mar 23 14:44:20 2006</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-FILERENAME, File /ramdisk/home/dsl/myVistA/dualsite/Honolulu/mumps.mjl is renamed to /ramdisk/home/dsl/myVistA/dualsite/Honolulu/mumps.mjl_2006082143523</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-MUJNLSTAT, Forward processing started at Thu Mar 23 14:44:20 2006</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-FILECREATE, Lost transactions extract file Lost_Trans_Report_20060323144416.txt created</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-RLBKJNSEQ, Journal seqno of the instance after rollback is 2 [0x0000000000000002]</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-S-JNLSUCCESS, Show successful</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-S-JNLSUCCESS, Verify successful</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-S-JNLSUCCESS, Rollback successful</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-MUJNLSTAT, End processing at Thu Mar 23 14:44:21 2006</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:<font color="#ff0000">~/myVistA/dualsite/Honolulu$ cat Lost_Trans_Report_20060323144416.txt</font> </b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GDSJEX01</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>05\60347,52517\2\926\0\2\^X="926 Backlog 60347,52517"</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/dualsite/Honolulu$ </b></font></font></pre>
| |
− | <ul>
| |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Now start
| |
− | Honolulu as the secondary, and note how it automatically catches up
| |
− | with updates made in Ghanzi (with a possible lag of a few seconds
| |
− | for Ghanzi to detect that Honolulu is up and ready to receive
| |
− | updates):</font></font></p>
| |
− | </li></ul>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/dualsite/Honolulu$ <font color="#ff0000">./secondary_start</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/dualsite/Honolulu$ <font color="#ff0000">mumps -dir</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Write ^X</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>926</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Write ^X</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>926</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Write ^X</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>974 Ghanzi 60347,52928</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Halt</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/dualsite/Honolulu$</b></font></font></pre>
| |
− | <ul>
| |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Shut down
| |
− | Honolulu and Ghanzi cleanly to end the exercise:</font></font></p>
| |
− | </li></ul>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/dualsite/Ghanzi$ .<font color="#ff0000">/primary_stop</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Thu Mar 23 14:47:17 2006 : Initiating shut down</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Signalling shutdown immediate</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Journal pool shared memory removed</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Journal pool semaphore removed</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-MUFILRNDWNSUC, File /ramdisk/home/dsl/myVistA/dualsite/Ghanzi/mumps.dat successfully rundown</b></font></font>
| |
− | <b><font face="Nimbus Mono L, monospace"><a href="mailto:dsl@box">dsl@box</a>:~/myVistA/dualsite/Ghanzi$</font></b>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>...</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/dualsite/Honolulu$ <font color="#ff0000">./secondary_stop</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Thu Mar 23 14:47:20 2006 : Initiating shut down</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Signalling immediate shutdown</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Receive pool shared memory removed</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Receive pool semaphore removed</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Thu Mar 23 14:47:21 2006 : Initiating shut down</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Signalling shutdown immediate</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Journal pool shared memory removed</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Journal pool semaphore removed</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-MUFILRNDWNSUC, File /ramdisk/home/dsl/myVistA/dualsite/Honolulu/mumps.dat successfully rundown</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/dualsite/Honolulu$</b></font></font></pre><h2>
| |
− | <a name="Backup|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="4"><i>Backup</i></font></font></h2>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Backup when an
| |
− | application is not running is straightforward – just copy the
| |
− | database files.</font></font></p>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">Backup when an
| |
− | application is operating normally, without impacting the application
| |
− | (except of course for the additional IO load of the backup activity)
| |
− | is easy with GT.M, and can be accomplished in two ways, one non-GT.M
| |
− | and other GT.M: </font></font>
| |
− | </p>
| |
− | <ul>
| |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">The
| |
− | non-GT.M way is to use a disk mirror (e.g., RAID or SAN). Issue a
| |
− | mupip freeze to momentarily freeze updates and flush updates to
| |
− | disk, break the mirror; then release the freeze. After backing up
| |
− | the mirror, remake it, and let it “catch up.”</font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">The GT.M
| |
− | way: a transaction-consistent backup of an entire multi-region
| |
− | database can be accomplished with a single GT.M command: mupip
| |
− | backup. There are numerous options to satisfy virtually every type
| |
− | of backup need.</font></font></p>
| |
− | | |
− | </li></ul>
| |
− | <h3><a name="Exercise - backup|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="4">Exercise
| |
− | - backup</font></font></h3>
| |
− | <ul>
| |
− | <li><p><font face="Nimbus Roman No9 L, serif">Create a temporary
| |
− | directory (if you don't have one already) and a subdirectory for the
| |
− | backup database files, and change to the temporary directory. Create
| |
− | a global directory & database file, and turn journaling on (see
| |
− | <a href="#Exercise%20-%20journaling%7Coutline">above</a> if you don't
| |
− | remember how to do this).</font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Create a
| |
− | GT.M program XYZ in file <b><font size="2"><font face="Nimbus Mono L, monospace">XYZ.m</font></font></b>
| |
− | as follows (the <b><font size="2"><font face="Nimbus Mono L, monospace">Hang</font></font></b>
| |
− | | |
− | command is not strictly necessary, but is used simply to keep the
| |
− | volume of data manageable in a demonstration environment that may be
| |
− | operating in a “disk” with tight space constraints, such
| |
− | as a USB flash drive): </font></font>
| |
− | </p>
| |
− | </li></ul>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>XYZ Set (^x,^y)=0</b></font></font>
| |
− | <b><font face="Nimbus Mono L, monospace">For Do</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">.Hang 0.1</font></b>
| |
− | | |
− | <b><font face="Nimbus Mono L, monospace">.Tstart ()</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">.Set r=$Random(2147483646)</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">.Set ^x=^x-r</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">.Set ^y=^y+r</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">.Tcommit</font></b>
| |
− | <b><font face="Nimbus Mono L, monospace">Quit</font></b></pre>
| |
− | | |
− | <ul>
| |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Start the
| |
− | program as a background process from the shell: <b><font size="2"><font face="Nimbus Mono L, monospace"><font color="#ff0000">mumps
| |
− | -run ^XYZ </dev/null >&/dev/null &</font></font></font></b></font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Take a
| |
− | backup of the entire database (a “comprehensive”
| |
− | backup):</font></font></p>
| |
− | </li></ul>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">mupip backup "*" backup/</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-FILERENAME, File /ramdisk/home/dsl/myVistA/tmp/mumps.mjl is renamed to /ramdisk/home/dsl/myVistA/tmp/mumps.mjl_2006083154324</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-JNLCREATE, Journal file /ramdisk/home/dsl/myVistA/tmp/mumps.mjl created for region DEFAULT with BEFORE_IMAGES</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>DB file /ramdisk/home/dsl/myVistA/tmp/mumps.dat backed up in file backup//mumps.dat</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Transactions up to 0x0000000000000287 are backed up.</b></font></font>
| |
− | | |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>BACKUP COMPLETED.</b></font></font></pre>
| |
− | <ul>
| |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Take a
| |
− | backup of that part of the database that has changed (a “bytestream”
| |
− | | |
− | backup). Note the use of the -since=database qualifier to only
| |
− | backup those database blocks that have changed since the last backup
| |
− | of the entire database):</font></font></p>
| |
− | </li></ul>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">mupip backup -bytestream -since=database "*" backup/mumps`date +%Y%m%d%H%M%S`.bck</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-FILERENAME, File /ramdisk/home/dsl/myVistA/tmp/mumps.mjl is renamed to /ramdisk/home/dsl/myVistA/tmp/mumps.mjl_2006083154420</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-JNLCREATE, Journal file /ramdisk/home/dsl/myVistA/tmp/mumps.mjl created for region DEFAULT with BEFORE_IMAGES</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>MUPIP backup of database file /ramdisk/home/dsl/myVistA/tmp/mumps.dat to backup/mumps20060324154420.bck</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>DB file /ramdisk/home/dsl/myVistA/tmp/mumps.dat incrementally backed up in file backup/mumps20060324154420.bck</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>5 blocks saved.</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Transactions from 0x0000000000000287 to 0x000000000000047C are backed up.</b></font></font>
| |
− | | |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>BACKUP COMPLETED.</b></font></font></pre>
| |
− | <ul>
| |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Take
| |
− | further bytestream backups of that part of the database that has
| |
− | changed – as many as desired (note the use of the
| |
− | -since=bytestream qualifier to backup only those blocjs that have
| |
− | changed since the last bytestream backup):</font></font></p>
| |
− | </li></ul>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">mupip backup -bytestream -since=bytestream "*" backup/mumps`date +%Y%m%d%H%M%S`.bck</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-FILERENAME, File /ramdisk/home/dsl/myVistA/tmp/mumps.mjl is renamed to /ramdisk/home/dsl/myVistA/tmp/mumps.mjl_2006083154449</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-JNLCREATE, Journal file /ramdisk/home/dsl/myVistA/tmp/mumps.mjl created for region DEFAULT with BEFORE_IMAGES</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>MUPIP backup of database file /ramdisk/home/dsl/myVistA/tmp/mumps.dat to backup/mumps20060324154449.bck</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>DB file /ramdisk/home/dsl/myVistA/tmp/mumps.dat incrementally backed up in file backup/mumps20060324154449.bck</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>5 blocks saved.</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Transactions from 0x000000000000047C to 0x0000000000000586 are backed up.</b></font></font>
| |
− | | |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>BACKUP COMPLETED.</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">mupip backup -bytestream -since=bytestream "*" backup/mumps`date +%Y%m%d%H%M%S`.bck</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-FILERENAME, File /ramdisk/home/dsl/myVistA/tmp/mumps.mjl is renamed to /ramdisk/home/dsl/myVistA/tmp/mumps.mjl_2006083154508</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-JNLCREATE, Journal file /ramdisk/home/dsl/myVistA/tmp/mumps.mjl created for region DEFAULT with BEFORE_IMAGES</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>MUPIP backup of database file /ramdisk/home/dsl/myVistA/tmp/mumps.dat to backup/mumps20060324154508.bck</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>DB file /ramdisk/home/dsl/myVistA/tmp/mumps.dat incrementally backed up in file backup/mumps20060324154508.bck</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>5 blocks saved.</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Transactions from 0x0000000000000586 to 0x000000000000062C are backed up.</b></font></font>
| |
− | | |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>BACKUP COMPLETED.</b></font></font></pre>
| |
− | <ul>
| |
− | | |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Stop the
| |
− | process updating the database, take a final backup, and note the
| |
− | values of ^x and ^y (and verify that they still sum to zero). After
| |
− | the final restore, we will verify that the values restored from the
| |
− | backup is the same as these values. As before, note the use of
| |
− | <font color="#ff00ff">fuschia</font> to idenfy process ids that will
| |
− | change from machine to machine and run to run:</font></font></p>
| |
− | </li></ul>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">ps -ef | grep mumps</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl <font color="#ff00ff">1183</font> 1180 0 15:42 ttyp1 00:00:01 mumps -run ^XYZ</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">mupip stop</font> <font color="#ff00ff">1183</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>STOP issued to process <font color="#ff00ff">1183</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-F-FORCEDHALT, Image HALTed by MUPIP STOP</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>[1]+ Exit 241 mumps -run ^XYZ </dev/null >/dev/null</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">mupip backup -bytestream -since=bytestream "*" backup/mumps`date +%Y%m%d%H%M%S`.bck</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-FILERENAME, File /ramdisk/home/dsl/myVistA/tmp/mumps.mjl is renamed to /ramdisk/home/dsl/myVistA/tmp/mumps.mjl_2006083154529</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>%GTM-I-JNLCREATE, Journal file /ramdisk/home/dsl/myVistA/tmp/mumps.mjl created for region DEFAULT with BEFORE_IMAGES</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>MUPIP backup of database file /ramdisk/home/dsl/myVistA/tmp/mumps.dat to backup/mumps20060324154619.bck</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>DB file /ramdisk/home/dsl/myVistA/tmp/mumps.dat incrementally backed up in file backup/mumps20060324154619.bck</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>5 blocks saved.</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Transactions from 0x000000000000062C to 0x00000000000006EC are backed up.</b></font></font>
| |
− | | |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>BACKUP COMPLETED.</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">mumps -dir</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Write "^x+^y=",^x,"+",^y,"=",^x+^y,! Halt</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>^x+^y=-1879255318702+1879255318702=0</b></font></font></pre>
| |
− | <ul>
| |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Notice
| |
− | that each backup create a new journal file generation, and there is
| |
− | a chain of journal files. After a successful backup, older
| |
− | generations of journal files are no longer needed in a single site
| |
− | operating environment. In a dual site environment, primary journal
| |
− | files could be needed until the completion of a successful backup on
| |
− | the secondary.</font></font></p>
| |
− | </li></ul>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">ls -l</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>-rw-rw-r-- 1 dsl staff 122 Mar 24 14:35 XYZ.m</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>-rw-rw-r-- 1 dsl staff 825 Mar 24 15:42 XYZ.o</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>drwxrwxr-x 2 dsl staff 4096 Mar 24 15:46 backup</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>-rw-rw-rw- 1 dsl staff 169472 Mar 24 15:47 mumps.dat</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>-rw-rw-r-- 1 dsl staff 1024 Mar 24 14:32 mumps.gld</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>-rw-rw-rw- 1 dsl staff 2368 Mar 24 15:46 mumps.mjl</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>-rw-rw-rw- 1 dsl staff 116584 Mar 24 15:43 mumps.mjl_2006083154324</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>-rw-rw-rw- 1 dsl staff 91288 Mar 24 15:44 mumps.mjl_2006083154420</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>-rw-rw-rw- 1 dsl staff 49880 Mar 24 15:44 mumps.mjl_2006083154449</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>-rw-rw-rw- 1 dsl staff 32280 Mar 24 15:45 mumps.mjl_2006083154508</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>-rw-rw-rw- 1 dsl staff 36608 Mar 24 15:45 mumps.mjl_2006083154529</b></font></font></pre>
| |
− | <ul>
| |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">To
| |
− | simulate restoring and recovering the database, first delete the
| |
− | database and journal files. Then “restore” the backup of
| |
− | the entire database by copying it in. Check the values of <b><font size="2"><font face="Nimbus Mono L, monospace">^x</font></font></b>
| |
− | | |
− | and <b><font size="2"><font face="Nimbus Mono L, monospace">^y</font></font></b>
| |
− | to ensure that they add to zero.</font></font></p>
| |
− | </li></ul>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">rm mumps.dat mumps.mjl*</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">ls -l</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>-rw-rw-r-- 1 dsl staff 122 Mar 24 14:35 XYZ.m</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>-rw-rw-r-- 1 dsl staff 825 Mar 24 15:42 XYZ.o</b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>drwxrwxr-x 2 dsl staff 4096 Mar 24 15:46 backup</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>-rw-rw-r-- 1 dsl staff 1024 Mar 24 14:32 mmumps.gld</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">cp -p backup/mumps.dat .</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">mumps -dir</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Write "^x+^y=",^x,"+",^y,"=",^x+^y,! Halt</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>^x+^y=-725290066926+725290066926=0</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$</b></font></font></pre>
| |
− | | |
− | <ul>
| |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Restore
| |
− | the each bytestream backup, and verify that the absolute values of
| |
− | <b><font size="2"><font face="Nimbus Mono L, monospace">^x</font></font></b>
| |
− | and <b><font size="2"><font face="Nimbus Mono L, monospace">^y</font></font></b>
| |
− | increase, but they always sum to zero (because of the use of
| |
− | transaction processing). After the last backup is restored, note
| |
− | that the values of <b><font size="2"><font face="Nimbus Mono L, monospace">^x</font></font></b>
| |
− | and <b><font size="2"><font face="Nimbus Mono L, monospace">^y</font></font></b>
| |
− | | |
− | are the same as they were in the original database when the process
| |
− | running routine <b><font size="2"><font face="Nimbus Mono L, monospace">XYZ</font></font></b>
| |
− | was stopped.</font></font></p>
| |
− | </li></ul>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">mupip restore mumps.dat backup/mumps20060324154420.bck</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>RESTORE COMPLETED</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>7 blocks restored</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">mumps -dir</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Write "^x+^y=",^x,"+",^y,"=",^x+^y,! Halt</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>^x+^y=-1233626317102+1233626317102=0</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">mupip restore mumps.dat backup/mumps20060324154449.bck</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>RESTORE COMPLETED</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>7 blocks restored</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">mumps -dir</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Write "^x+^y=",^x,"+",^y,"=",^x+^y,! Halt</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>^x+^y=-1502392564483+1502392564483=0</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">mupip restore mumps.dat backup/mumps20060324154508.bck</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>RESTORE COMPLETED</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>7 blocks restored</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">mumps -dir</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Write "^x+^y=",^x,"+",^y,"=",^x+^y,! Halt</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>^x+^y=-1670563955262+1670563955262=0</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">mupip restore mumps.dat backup/mumps20060324154619.bck</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>RESTORE COMPLETED</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>5 blocks restored</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">mumps -dir</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Write "^x+^y=",^x,"+",^y,"=",^x+^y,! Halt</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>^x+^y=-1879255318702+1879255318702=0</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ </b></font></font></pre><h2>
| |
− | <a name="Potential surprises|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="4"><i>Potential
| |
− | surprises</i></font></font></h2>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">If you are
| |
− | used to other M implementations, here are examples of things you may
| |
− | be used to that you won't find in GT.M:</font></font></p>
| |
− | <ul>
| |
− | <li><p><font face="Nimbus Roman No9 L, serif">Job Examine –
| |
− | there is not a built in function. But the functionality is easy to
| |
− | set up if you need it, e.g., see <a href="http://sourceforge.net/docman/display_doc.php?docid=19563&group_id=11026">GT.M
| |
− | Job Examine / System Status How To</a> (or <a href="file:///home/ivaldes/.gvfs/GT.MAcculturation0.4.iso/20060324JobExamineSystemStatusHowTo.html">local
| |
− | copy</a>).</font></p>
| |
− | | |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Kill –
| |
− | there is no setting to prevent a Kill in a process that has update
| |
− | permission to a database file from killing an entire global
| |
− | variable.</font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">Break –
| |
− | there is no concept of a “production” mode in which
| |
− | Break can be turned off.</font></font></p>
| |
− | </li></ul>
| |
− | <h2><a name="Exploit integration with underlying operating system|outline"></a>
| |
− | | |
− | <font face="Nimbus Sans L, sans-serif"><font size="4"><i>Exploit
| |
− | integration with underlying operating system</i></font></font></h2>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">If you need
| |
− | functionality that is not in GT.M, use it from the underlying
| |
− | operating system. For example, you can use <b><font size="2"><font face="Nimbus Mono L, monospace">Xdialog</font></font></b>
| |
− | for dialog boxes for user interaction. In a temporary directory:</font></font></p>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">mumps -dir</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Set file="/tmp/gtm"_$Job_".tmp"</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">ZSYstem "Xdialog --calendar ""Choose date"" 0 0 0 0 0 >&"_file</font></b></font></font><img src="index_files/20060324Xdialog.jpg" name="graphics6" align="right" border="0" height="246" width="280"></pre><p>
| |
− | | |
− | <font face="Nimbus Roman No9 L, serif"><font size="3">At this time, an
| |
− | Xdialog calendar prompt pops up, and you can choose a date. You can
| |
− | choose a date, press OK, and read that date into GT.M:</font></font></p>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Open file Use file Read date</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Use $Principal Write date</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>13/03/2006</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Close file:Delete</font></b></font></font></pre><p>
| |
− | <font face="Nimbus Roman No9 L, serif"><font size="3">You can use
| |
− | $ZCMdline to get command line parameters:</font></font></p>
| |
− | <pre><font face="Nimbus Mono L, monospace"><font size="2"><b>dsl@box:~/myVistA/tmp$ <font color="#ff0000">mumps -dir Passing command lines to GT.M programs is really cool</font></b></font></font>
| |
− | | |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM><font color="#0000ff">Write $ZCMdline</font></b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>Passing command lines to GT.M programs is really cool</b></font></font>
| |
− | <font face="Nimbus Mono L, monospace"><font size="2"><b>GTM></b></font></font></pre><p>
| |
− | <font face="Nimbus Roman No9 L, serif"><font size="3">You can freely
| |
− | mix routines written in C with routines written in M (caveat: a few
| |
− | restrictions apply because the GT.M runtime environment in each
| |
− | process includes a high performance database engine; refer to the
| |
− | documentation for details). </font></font>
| |
− | </p>
| |
− | <h1><a name="7.In conclusion|outline"></a><font face="Nimbus Sans L, sans-serif"><font size="5">In
| |
− | conclusion</font></font></h1>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">I hope that
| |
− | this write up has been useful to you. Please think about the
| |
− | following and send me e-mail.. Thank you very much. </font></font>
| |
− | </p>
| |
− | <ul>
| |
− | <li><p><font face="Nimbus Roman No9 L, serif"><font size="3">What did
| |
− | you like about this GT.M Acculturation CD? What are some things that
| |
− | it accomplished well for you? In what way(s), if any, did it exceed
| |
− | your expectations?</font></font></p>
| |
− | | |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">What are
| |
− | some things that you did not care for? In what way(s) did it fall
| |
− | short? How can it be improved?</font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">What is
| |
− | your background with M?</font></font></p>
| |
− | </li><li><p><font face="Nimbus Roman No9 L, serif"><font size="3">What is
| |
− | your background with GT.M?</font></font></p>
| |
− | </li></ul>
| |
− | <p><font face="Nimbus Roman No9 L, serif"><font size="3">If there is
| |
− | anything that you would like to share to help make GT.M, or this
| |
− | Acculturation CD more useful to you, please let me know. </font></font>
| |
− | </p>
| |
− | <p><font face="Nimbus Roman No9 L, serif">K.S. Bhaskar<br>VP, Product
| |
− | Manager<br>Fidelity National Information Services,
| |
− | Inc.<br><a href="mailto:ks.bhaskar@fnf.com">ks.bhaskar@fnf.com</a><br>+1
| |
− | (610) 578-4265 </font>
| |
− | | |
− | </p>
| |
− | <p><br><br>
| |
− | </p>
| |
− | </body></html>
| |