[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[McIDAS #ZIF-240347]: McIDAS frmsave.k destination directory?

Hi Darrin,

> Thanks for the quick response.

No worries.

> Your explanation of how frmsave uses
> MCPATH ("first _writable_ directory") led me to the answer.
> It turns out I had a subtle directory permissions problem. The ldm
> user (who was running the batch post-processing) didn't have write
> perms to the ~mcidas/workdata dir.

I thought about inquiring about the directory read/write status for 'ldm',
but I thought it might sidetrack the focus on full setting of McIDAS
environment variables.

> I think this was a side effect of
> working half with a new installation and half with a legacy directory
> tree. At some point when creating and/or copying dirs, the perms got
> messed up.

Been there; done that :-)

> For the next McIDAS release, it would be nice if there was some sort
> of error message about this (e.g. frmsave could output something along
> the lines of "Unable to write to Destination Directory, writing
> to .mctmp instead"). An error message like that probably would have
> led me to a solution sooner.

I am afraid that writing to the .mctmp directory because no other
directory in one's MCPATH is writable is not an error in the
overall scheme of things in McIDAS.  The implicit concept in
McIDAS is that it will write to the first writable directory in one's
MCPATH.  What is not intuitively obvious is that one's MCPATH gets
extended by McIDAS to include the ~/.mctmp/<ipc handle> directory
as the last directory in one's MCPATH.  This is so that the system can create
some files in a hidden directory needed for a McIDAS "session" and
then delete the files and hidden directory when that "session" ends.
(A McIDAS session is created by 'mcenv', so running 'mcenv' from
a script creates a "session".) The McIDAS Users Guide Appendix G contains
information on setting MCPATH and how it is extended and used.

One of the topics I cover in detail in McIDAS training workshops is the
ins and outs of MCPATH especially in its 'gotchas'.  Unfortunately,
what you ran into is one of MCPATH's 'gotchas'.  Here is another one:

Suppose you have a file with the same name in more than one directory
contained in your MCPATH, and further suppose that the first MCPATH
directory containing one of the files is not writable by the user
running the McIDAS session (your exact situation), but the second
one is and both directories are set to be readable.  If you run
a McIDAS command to delete the particular file, the one in the
second directory will be deleted, not the one in the first directory.
Further suppose that the goal of the process is to delete a file
and replace it with a newly created one (e.g., by an IMGCOPY).  What
will happen is that the delete will work, but the replace will
not as McIDAS will be trying to work on the file in the first MCPATH
directory where it can read the file, but not write it.  This
situation is completely unexpected by the user, and so hard to
diagnose.  MCPATH is an interesting idea, but not as foolproof as
it should be!

McIDAS provides a second file location facility call REDIRECT.  A
McIDAS REDIRECTion is a directive to read/write files into a particular
directory regardless of one's MCPATH setting.  It is easiest to explain
REDIRECT with an example:

Suppose you want to always read/write/access a file named AREA0001 in
the directory /data/mcidas.  You can create a McIDAS REDIRECTion that
will cause this to happen:

REDIRECT ADD AREA0001 "data/mcidas  (redirect.k ADD AREA0001 \"/data/mcidas)

The REDIRECTion rule gets written into the file LWPATH.NAM.  The
rule will be used by subsequent McIDAS sessions as long as the same
copy of LWPATH.NAM is used.

REDIRECTion rules can be quite a bit more complex than the simple
example above.  For instance, supposed you want to read/write/access
files whose names match the regular expression AREA000* from the
/data/mcidas directory.  Here is the REDIRECT invocation that
will set this up:

REDIRECT ADD AREA000* "/data/mcidas  (redirect.k ADD AREA000\* \"/data/mcidas)

REDIRECTions are hierarchical.  Suppose that you had defined the the
following three file REDIRECTions:

REDIRECT ADD AREA0001 "/data/mcidas
REDIRECT ADD AREA000* "/data/scratch
REDIRECT ADD AREA*    "/data/otherfiles

When these REDIRECTions are in scope for the McIDAS session, the first one
will be used for the file AREA0001 because it is the most specific.
Likewise, the second will be used for the file AREA0008 because it is
more specific than the third rule.

Basically, one uses file REDIRECTions in conjunction with MCPATH to
locate files exactly where desired.

I know that the McIDAS MCPATH and REDIRECT concepts are not as easily
grasped as they should be given their importance, but they are an
integral part of McIDAS nonetheless (sigh).  This is why I spend 
a LOT of time discussing the concepts during the McIDAS training
sessions that I put on (again, BIG sigh).

By the way, the Unidata McIDAS distribution contains two example
Bourne shell scripts that are designed to be copied to a file
with a different name; edited; and used to run McIDAS routines
outside of an interactive McIDAS session.  The files 'mcrun.sh'
(run a sequence of McIDAS commands like you are doing in your
script) and 'mcbatch.sh' (run commands from a McIDAS BATCH file)
can be found in the ~mcidas/data directory after the installation
has been installed (like yours).  You will see that I tried to
document what is going on so the end user will understand what is
needed when running McIDAS "sessions" from scripts.

> FYI, I've included my version info below.

re: McIDAS Version
> 2009 Unidata 090710    X

Very good.  I will be releasing an addendum for v2009 in the
coming weeks (before Thanksgiving for sure).

re: OS

> Linux ocs1.OCE.ORST.EDU 2.6.18-128.7.1.el5 #1 SMP Mon Aug 24 08:21:56  
> EDT 2009 x86_64 x86_64 x86_64 GNU/Linux

> (This is CentOS)

Very good.  We run Fedora here in the UPC, so CentOS is a known quantity.

re: which LDM version

> hostname:              ocs1.OCE.ORST.EDU
> os:                    Linux
> release:               2.6.18-128.7.1.el5
> ldmhome:               /usr/local/ldm
> LDM version:           6.8.1
> PATH:                  /usr/local/ldm/bin:/usr/local/ldm/decoders:/usr/ 
> local/ldm/util:/usr/local/ldm/bin:/usr/kerberos/bin:/usr/local/bin:/ 
> bin:/usr/bin:/usr/bin:/usr/local/bin:/usr/gnu/bin:/usr/sbin:.
> bin path:              /usr/local/ldm/bin
> etc path:              /usr/local/ldm/etc
> log path:              /usr/local/ldm/logs
> data path:             /usr/local/ldm/data
> LDM conf file:         /usr/local/ldm/etc/ldmd.conf
> pqact(1) conf file:    /usr/local/ldm/etc/pqact.conf
> scour(1) conf file:    /usr/local/ldm/etc/scour.conf
> product queue:         /usr/local/ldm/data/ldm.pq
> queue size:            500M bytes
> queue slots:           default
> pqsurf(1) path:        /usr/local/ldm/data/pqsurf.pq
> pqsurf(1) size:        2000000
> IP address:  
> port:                  388
> PID file:              /usr/local/ldm/ldmd.pid
> Lock file:             /usr/local/ldm/.ldmadmin.lck
> ldmadmin(1) conf file: /usr/local/ldm/etc/ldmadmin-pl.conf
> maximum clients:       256
> maximum latency:       3600
> time offset:           3600
> log file:              /usr/local/ldm/logs/ldmd.log
> numlogs:               7
> log_rotate:            1
> netstat:               /bin/netstat -A inet -t -n
> metrics file:          /usr/local/ldm/logs/metrics.txt
> metrics files:         /usr/local/ldm/logs/metrics.txt*
> num_metrics:           4
> check time:            1
> delete info files:     0
> ntpdate(1):            /usr/sbin/ntpdate
> ntpdate(1) timeout:    5
> time servers:          ntp.ucsd.edu ntp1.cs.wisc.edu ntppub.tamu.edu  
> otc1.psu.edu timeserver.unidata.ucar.edu
> time-offset limit:     10
> check time abort:      0

Excellent, you are running the latest LDM!

Thanks for the information!

Unidata User Support                                    UCAR Unidata Program
(303) 497-8642                                                 P.O. Box 3000
address@hidden                                   Boulder, CO 80307
Unidata HomePage                       http://www.unidata.ucar.edu

Ticket Details
Ticket ID: ZIF-240347
Department: Support McIDAS
Priority: Normal
Status: Closed

NOTE: All email exchanges with Unidata User Support are recorded in the Unidata inquiry tracking system and then made publicly available through the web. If you do not want to have your interactions made available in this way, you must let us know in each email you send to us.