.TH "globus_gass_cache" 3 "Version 10.3" "globus_gass_cache" \" -*- nroff -*-
.ad l
.nh
.SH NAME
globus_gass_cache \- Globus GASS Cache
.PP
 \- Globus GASS Cache\&.  

.SH SYNOPSIS
.br
.PP
.SS "Macros"

.in +1c
.ti -1c
.RI "#define \fBGLOBUS_GASS_CACHE_MODULE\fP   (&globus_i_gass_cache_module)"
.br
.RI "module_descriptor "
.in -1c
.SS "Typedefs"

.in +1c
.ti -1c
.RI "typedef struct globus_i_gass_cache_t * \fBglobus_gass_cache_t\fP"
.br
.RI "GASS Cache Handle\&. "
.in -1c
.SS "Functions"

.in +1c
.ti -1c
.RI "int \fBglobus_gass_cache_open\fP (const char *cache_directory_path, \fBglobus_gass_cache_t\fP *cache_handlep)"
.br
.RI "Open a GASS Cache\&. "
.ti -1c
.RI "int \fBglobus_gass_cache_close\fP (\fBglobus_gass_cache_t\fP *cache_handlep)"
.br
.RI "Close a cache handle\&. "
.ti -1c
.RI "int \fBglobus_gass_cache_add\fP (\fBglobus_gass_cache_t\fP cache_handle, const char *url, const char *tag, globus_bool_t create, unsigned long *timestamp, char **local_filename)"
.br
.RI "Add a tag to an URL in the cache\&. "
.ti -1c
.RI "int \fBglobus_gass_cache_add_done\fP (\fBglobus_gass_cache_t\fP cache_handle, const char *url, const char *tag, unsigned long timestamp)"
.br
.RI "Complete adding a cache entry and unlock it\&. "
.ti -1c
.RI "int \fBglobus_gass_cache_query\fP (\fBglobus_gass_cache_t\fP cache_handle, const char *url, const char *tag, globus_bool_t wait_for_lock, unsigned long *timestamp, char **local_filename, globus_bool_t *is_locked)"
.br
.RI "Query the GASS Cache\&. "
.ti -1c
.RI "int \fBglobus_gass_cache_delete_start\fP (\fBglobus_gass_cache_t\fP cache_handle, const char *url, const char *tag, unsigned long *timestamp)"
.br
.RI "Remove a cache tag\&. "
.ti -1c
.RI "int \fBglobus_gass_cache_delete\fP (\fBglobus_gass_cache_t\fP cache_handle, const char *url, const char *tag, unsigned long timestamp, globus_bool_t is_locked)"
.br
.RI "Remove one instance of the tag from the cache entry's tag list\&. "
.ti -1c
.RI "int \fBglobus_gass_cache_cleanup_tag\fP (\fBglobus_gass_cache_t\fP cache_handle, const char *url, const char *tag)"
.br
.RI "Remove a tag from a cache entry\&. "
.ti -1c
.RI "int \fBglobus_gass_cache_cleanup_tag_all\fP (\fBglobus_gass_cache_t\fP cache_handle, char *tag)"
.br
.RI "Remove a tag from all cache entries
.PP
Remove all instances of the tag from the cache entry's tag list\&. If there are no more tags in the tag list, then remove this cache entry and delete the associated local cache file\&. If the cache entry is locked with the same tag as is passed to this function, then the entry is unlocked after removing the tags\&. Otherwise, the cache entry's lock is left untouched\&. "
.ti -1c
.RI "int \fBglobus_gass_cache_mangle_url\fP (const \fBglobus_gass_cache_t\fP cache_handle, const char *url, char **mangled_url, int *length)"
.br
.RI "Convert a URL to a string suitable as a file path\&. "
.ti -1c
.RI "int \fBglobus_gass_cache_mangle_tag\fP (const \fBglobus_gass_cache_t\fP cache_handle, const char *tag, char **mangled_tag, int *length)"
.br
.RI "Convert a tag to a string suitable as a file path\&. "
.ti -1c
.RI "int \fBglobus_gass_cache_get_cache_dir\fP (const \fBglobus_gass_cache_t\fP cache_handle, char **cache_dir)"
.br
.RI "Get the GASS Cache's root directory\&. "
.ti -1c
.RI "int \fBglobus_gass_cache_get_dirs\fP (const \fBglobus_gass_cache_t\fP cache_handle, const char *url, const char *tag, char **global_root, char **local_root, char **tmp_root, char **log_root, char **global_dir, char **local_dir)"
.br
.RI "Get the set of directories used by a GASS Cache\&. "
.ti -1c
.RI "int \fBglobus_gass_cache_get_cache_type_string\fP (const \fBglobus_gass_cache_t\fP cache_handle, char **cache_type)"
.br
.RI "Get the type of GASS Cache directory layout\&. "
.ti -1c
.RI "const char * \fBglobus_gass_cache_error_string\fP (int error_code)"
.br
.RI "Look up the error string corresponding to a GASS Cache error\&. "
.in -1c
.SH "Detailed Description"
.PP 
Globus GASS Cache\&. 

The GASS cache management API is part of the Globus module called 'GASS', (Global Access to Secondary Storage) The GASS cache management API defines calls for manipulating a local file cache\&. 
.br
.PP
Each cache entry can be locked during addition and deletion to allow for atomic handling of the cache file contents\&.
.PP
Each cache entry also has an associated timestamp\&. This timestamp is independent of the local cache file's modification time\&. Rather, the cache entry timestamp is maintained by the user\&. It can, for example, be used to keep track of the timestamp of a remote file that is associated with the cache entry\&.
.PP
Note: all timestamps are as seconds since the epoch\&. (01 Jan 1970, 00:00 GMT)
.PP
The following functions are part of the API:
.PP
.IP "\(bu" 2
\fBglobus_gass_cache_open()\fP
.IP "\(bu" 2
\fBglobus_gass_cache_close()\fP
.IP "\(bu" 2
\fBglobus_gass_cache_add()\fP
.IP "\(bu" 2
\fBglobus_gass_cache_add_done()\fP
.IP "\(bu" 2
\fBglobus_gass_cache_delete_start()\fP
.IP "\(bu" 2
\fBglobus_gass_cache_delete()\fP
.IP "\(bu" 2
\fBglobus_gass_cache_cleanup_tag()\fP
.IP "\(bu" 2
\fBglobus_gass_cache_cleanup_tag_all()\fP
.IP "\(bu" 2
\fBglobus_gass_cache_mangle_url()\fP
.IP "\(bu" 2
\fBglobus_gass_cache_mangle_tag()\fP
.IP "\(bu" 2
\fBglobus_gass_cache_get_dirs()\fP
.IP "\(bu" 2
\fBglobus_gass_cache_get_cache_dir()\fP 
.PP

.SH "Typedef Documentation"
.PP 
.SS "typedef struct globus_i_gass_cache_t* \fBglobus_gass_cache_t\fP"

.PP
GASS Cache Handle\&. Data structure used to store information concerning an open cache directory\&. This structure MUST NOT be modified directly, but passed to the globus_gass_cache functions 
.SH "Function Documentation"
.PP 
.SS "int globus_gass_cache_add (\fBglobus_gass_cache_t\fP cache_handle, const char * url, const char * tag, globus_bool_t create, unsigned long * timestamp, char ** local_filename)\fC [extern]\fP"

.PP
Add a tag to an URL in the cache\&. Create a new cache file or add a tag on it\&.
.PP
If the URL is already in the cache but is locked, then this call will block until the cache entry is unlocked, then will proceed with the subsequent operations\&.
.PP
If the URL is already in the cache and unlocked, then add the tag to the cache entry's tag list, return the local cache filename in *local_filename, return the entry's current timestamp in *timestamp, lock the cache entry, and return GLOBUS_GASS_CACHE_ADD_EXISTS\&.
.PP
If the URL is not in the cache, and create==GLOBUS_TRUE, then create a new unique empty local cache file, add it to the cache with the specified tag, return the filename in *local_filename, return *timestamp set to GLOBUS_GASS_CACHE_TIMESTAMP_UNKNOWN, lock the cache entry, and return GLOBUS_GASS_CACHE_ADD_NEW\&.
.PP
If the URL is not in the cache, and create==GLOBUS_FALSE, then do not add it to the cache, and return GLOBUS_GASS_CACHE_URL_NOT_FOUND\&.
.PP
If this function returns GLOBUS_GASS_CACHE_ADD_EXISTS or GLOBUS_GASS_CACHE_ADD_NEW, then \fBglobus_gass_cache_add_done()\fP or \fBglobus_gass_cache_delete()\fP must be subsequently called to unlock the cache entry\&.
.PP
Subsequent calls to \fBglobus_gass_cache_add()\fP and \fBglobus_gass_cache_delete_start()\fP on the same cache and url, made either from this process or another, will block until the cache entry is unlocked\&.
.PP
If tag==NULL, then a tag with the value 'null' will be added to the cache entry's tag list\&.
.PP
The same tag can be used multiple times, in which case this tag will be added to the entry's tag list multiple times\&.
.PP
Note: It is recommended that proglobus_grams started via GLOBUS_GRAM pass a tag value of getenv('GLOBUS_GRAM_JOB_CONTACT'), since upon completion of a job GLOBUS_GRAM will automatically cleanup entries with this tag\&.
.PP
\fBNote\fP
.RS 4
the local_filename MUST be free by the user in a subsequent operation, using free()
.RE
.PP
\fBParameters\fP
.RS 4
\fIcache_handle\fP Handle to the opened cache directory to use\&. 
.br
\fIurl\fP URL of the file to be cached\&. It is used as the main key to the cache entries\&. 
.br
\fItag\fP Tag specifying which job is/are using the cache\&. This is usually the GLOBUS_GRAM_JOB_CONTACT\&. Can be NULL or empty; the tag 'null' is then used\&. create - Tells if the cache entry should be created if it is not already existing\&. 
.br
\fIcreate\fP Flag to create if it does not already exist\&. 
.br
\fItimestamp\fP Timestamp of the cached file, set by globus_gass_cache_done(), (or \fBglobus_gass_cache_delete()\fP )\&. 
.br
\fIlocal_filename\fP Path the the local file caching the file specified by 'url'\&. NULL if 'url' not yet cached and creation not requested (create false)\&.
.RE
.PP
\fBReturns\fP
.RS 4
.IP "\(bu" 2
GLOBUS_GASS_CACHE_URL_NOT_FOUND
.IP "\(bu" 2
GLOBUS_GASS_CACHE_ADD_NEW
.IP "\(bu" 2
GLOBUS_GASS_CACHE_ADD_EXISTS
.IP "\(bu" 2
or any of the defined gass error code\&. 
.PP
.RE
.PP

.SS "int globus_gass_cache_add_done (\fBglobus_gass_cache_t\fP cache_handle, const char * url, const char * tag, unsigned long timestamp)\fC [extern]\fP"

.PP
Complete adding a cache entry and unlock it\&. \fBglobus_gass_cache_add_done()\fP MUST be called after \fBglobus_gass_cache_add()\fP, to set the timestamp in the cache entry for the URL, and then unlock the cache entry\&. (The only case it does not need to be called is if \fBglobus_gass_cache_add()\fP has returned GLOBUS_GASS_CACHE_URL_NOT_FOUND, of course\&.
.PP
\fBParameters\fP
.RS 4
\fIcache_handle\fP Handle to the opened cache directory to use\&. 
.br
\fIurl\fP URL of the cached file to set as 'done' (unlock) 
.br
\fItag\fP Tag specifying which job has locked the cache and must therefore be unlocked\&. It is an error to call this function with a tag which does not currently own the cache lock\&. 
.br
\fItimestamp\fP Timestamp of the cached file\&.
.RE
.PP
\fBReturns\fP
.RS 4
\fBglobus_gass_cache_add_done()\fP returns GLOBUS_SUCCESS or any of the defined GASS Cache error codes\&. 
.RE
.PP

.SS "int globus_gass_cache_cleanup_tag (\fBglobus_gass_cache_t\fP cache_handle, const char * url, const char * tag)\fC [extern]\fP"

.PP
Remove a tag from a cache entry\&. Remove all instances of the tag from the cache entry's tag list\&. If there are no more tags in the tag list, then remove this cache entry and delete the associated local cache file\&. If the cache entry is locked with the same tag as is passed to this function, then the entry is unlocked after removing the tags\&. Otherwise, the cache entry's lock is left untouched\&.
.PP
This function does not block on a locked reference\&.
.PP
\fBNote\fP
.RS 4
The GLOBUS_GRAM job manager will automatically call this function with a tag of getenv('GLOBUS_GRAM_JOB_CONTACT') upon completion of a job\&.
.RE
.PP
\fBParameters\fP
.RS 4
\fIcache_handle\fP Handle to the opened cache directory to use\&. 
.br
\fIurl\fP URL of the file to be cached\&. It is used as the main key to the cache entries\&. 
.br
\fItag\fP Tag specifying which job is/are using the cache\&. This is usually the GLOBUS_GRAM_JOB_CONTACT\&. Can be NULL or empty; the tag 'null' is then used\&. 
.RE
.PP
\fBReturns\fP
.RS 4
The \fBglobus_gass_cache_cleanup_tag()\fP function returns GLOBUS_SUCCESS or any of the defined GASS Cache error codes\&. 
.br
 
.RE
.PP

.SS "int globus_gass_cache_cleanup_tag_all (\fBglobus_gass_cache_t\fP cache_handle, char * tag)\fC [extern]\fP"

.PP
Remove a tag from all cache entries
.PP
Remove all instances of the tag from the cache entry's tag list\&. If there are no more tags in the tag list, then remove this cache entry and delete the associated local cache file\&. If the cache entry is locked with the same tag as is passed to this function, then the entry is unlocked after removing the tags\&. Otherwise, the cache entry's lock is left untouched\&. This function does not block on a locked reference\&. This function differs from \fBglobus_gass_cache_cleanup_tag()\fP in that this cleans up \fBall\fP URLs related with this tag\&.
.PP
\fBNote\fP
.RS 4
The GLOBUS_GRAM job manager will automatically call this function with a tag of getenv('GLOBUS_GRAM_JOB_CONTACT') upon completion of a job\&.
.RE
.PP
\fBParameters\fP
.RS 4
\fIcache_handle\fP Handle to the opened cache directory to use\&. 
.br
\fItag\fP Tag specifying which job is/are using the cache\&. This is usually the GLOBUS_GRAM_JOB_CONTACT\&. Can be NULL or empty; the tag 'null' is then used\&.
.RE
.PP
\fBReturns\fP
.RS 4
The \fBglobus_gass_cache_cleanup_tag_all()\fP function returns GLOBUS_SUCCESS or any of the defined GASS Cache error codes\&. 
.RE
.PP

.SS "int globus_gass_cache_close (\fBglobus_gass_cache_t\fP * cache_handlep)"

.PP
Close a cache handle\&. Close (NOT delete) a previously opened cache:
.IP "\(bu" 2
close the opened files and
.IP "\(bu" 2
free the memory allocated for the cache_handle\&.
.IP "\(bu" 2
mark the handle as 'not initialized'\&.
.PP
.PP
Parameters: cache_handle: Handle to the opened cache directory to use\&. 
.br
.PP
cache_handle->is_init set to 'not initialized' and all the files opened bu globus_gass_cache_open are closed \&.
.PP
Returns: GLOBUS_SUCCESS or error code: GLOBUS_GASS_CACHE_ERROR_CACHE_NOT_OPENED 
.SS "int globus_gass_cache_delete (\fBglobus_gass_cache_t\fP cache_handle, const char * url, const char * tag, unsigned long timestamp, globus_bool_t is_locked)\fC [extern]\fP"

.PP
Remove one instance of the tag from the cache entry's tag list\&. If there are no more tags in the tag list, then remove this cache entry and delete the associated local cache file\&.
.PP
Otherwise, update the timestamp to the passed value\&.
.PP
This call will leave the cache entry unlocked\&.
.PP
If is_locked==GLOBUS_TRUE, then this cache entry was locked during a previous call to \fBglobus_gass_cache_add()\fP or \fBglobus_gass_cache_delete_start()\fP\&. The cache file should be locked by the corresponding url/tag, or an error is returned\&. If it is locked by the corresponding url/tag, then the normal operation occur, without blocking (remove one instance from the tag update the timestamp and unlock the cache)\&.
.PP
If is_locked==GLOBUS_FALSE, eventually wait the cache is not locked any more, and then proceed with the normal operations\&.(remove one instance from the tag list and update the timestamp)\&.
.PP
\fBParameters\fP
.RS 4
\fIcache_handle\fP Handle to the opened cache directory to use\&. 
.br
\fIurl\fP URL of the file to be cached\&. It is used as the main key to the cache entries\&. 
.br
\fItag\fP Tag specifying which job is/are using the cache\&. This is usually the GLOBUS_GRAM_JOB_CONTACT\&. Can be NULL or empty; the tag 'null' is then used\&. 
.br
\fItimestamp\fP Timestamp of the cached file\&. 
.br
\fIis_locked\fP Indicate if this cache entry was locked during a previous call to \fBglobus_gass_cache_add()\fP or \fBglobus_gass_cache_delete_start()\fP\&.
.RE
.PP
\fBReturns\fP
.RS 4
The \fBglobus_gass_cache_delete()\fP function returns GLOBUS_SUCCESS or any of the defined GASS Cache error codes\&. 
.RE
.PP

.SS "int globus_gass_cache_delete_start (\fBglobus_gass_cache_t\fP cache_handle, const char * url, const char * tag, unsigned long * timestamp)\fC [extern]\fP"

.PP
Remove a cache tag\&. Lock the cache entry for the URL, and return the cache entry's current timestamp in *timestamp\&. This function will block if the data file is already locked, until it is unlocked\&.
.PP
\fBParameters\fP
.RS 4
\fIcache_handle\fP Handle to the opened cache directory to use\&.
.br
\fIurl\fP URL of the cached file to set as 'done' (unlock) 
.br
\fItag\fP Tag specifying which job has locked the cache and must therefore be unlocked\&. It is an error to call this function with a tag which does not currently own the cache lock\&. 
.br
\fItimestamp\fP Timestamp of the cached file, set by globus_gass_cache_done(), (or \fBglobus_gass_cache_delete()\fP )\&.
.RE
.PP
\fBReturns\fP
.RS 4
The \fBglobus_gass_cache_delete_start()\fP function returns GLOBUS_SUCCESS or any of the defined GASS Cache error code\&. 
.RE
.PP

.SS "const char * globus_gass_cache_error_string (int error_code)\fC [extern]\fP"

.PP
Look up the error string corresponding to a GASS Cache error\&. Return a pointer on an error description string\&.
.PP
\fBParameters\fP
.RS 4
\fIerror_code\fP error code returned by a previously called globus_gass_cache function\&.
.RE
.PP
\fBReturns\fP
.RS 4
The \fBglobus_gass_cache_error_string()\fP function returns a pointer to an error message, or NULL if error_code is invalid\&. 
.RE
.PP

.SS "int globus_gass_cache_get_cache_dir (const \fBglobus_gass_cache_t\fP cache_handle, char ** cache_dir)\fC [extern]\fP"

.PP
Get the GASS Cache's root directory\&. Get a the root cache of directory\&. This is exported for use in the globus_gass_cache program\&.
.PP
\fBParameters\fP
.RS 4
\fIcache_handle\fP Handle to the opened cache directory to use\&. 
.br
\fIcache_dir\fP Pointer to the cache directory
.RE
.PP
\fBReturn values\fP
.RS 4
\fIGLOBUS_SUCCESS\fP Success 
.br
\fIGLOBUS_GASS_CACHE_ERROR_NO_MEMORY\fP No memory 
.RE
.PP

.SS "int globus_gass_cache_get_cache_type_string (const \fBglobus_gass_cache_t\fP cache_handle, char ** cache_type)\fC [extern]\fP"

.PP
Get the type of GASS Cache directory layout\&. Get a string which describes the cache type ('normal' or 'flat')
.PP
\fBParameters\fP
.RS 4
\fIcache_handle\fP Handle to the opened cache directory to use\&. 
.br
\fIcache_type\fP Pointer to the strdup()ed string
.RE
.PP
\fBReturn values\fP
.RS 4
\fIGLOBUS_SUCCESS\fP Success 
.br
\fIGLOBUS_GASS_CACHE_ERROR_NO_MEMORY\fP No memory 
.RE
.PP

.SS "int globus_gass_cache_get_dirs (const \fBglobus_gass_cache_t\fP cache_handle, const char * url, const char * tag, char ** global_root, char ** local_root, char ** tmp_root, char ** log_root, char ** global_dir, char ** local_dir)\fC [extern]\fP"

.PP
Get the set of directories used by a GASS Cache\&. Gets a bunch of directories\&. This is exported for use in the globus_gass_cache program\&.
.PP
\fBParameters\fP
.RS 4
\fIcache_handle\fP Handle to the opened cache directory to use\&. 
.br
\fIurl\fP The incoming URL 
.br
\fItag\fP The incoming tag 
.br
\fIlocal_root\fP Pointer to the 'local root' directory 
.br
\fIglobal_root\fP Pointer to the 'global root' directory 
.br
\fItmp_root\fP Pointer to the 'tmp root' directory 
.br
\fIlog_root\fP Pointer to the root log directory 
.br
\fIlocal_dir\fP Pointer to the related 'local' directory 
.br
\fIglobal_dir\fP Pointer to the related 'global' directory
.RE
.PP
\fBReturn values\fP
.RS 4
\fIGLOBUS_SUCCESS\fP Success 
.br
\fIGLOBUS_GASS_CACHE_ERROR_NO_MEMORY\fP No memory 
.RE
.PP

.SS "int globus_gass_cache_mangle_tag (const \fBglobus_gass_cache_t\fP cache_handle, const char * tag, char ** mangled_tag, int * length)\fC [extern]\fP"

.PP
Convert a tag to a string suitable as a file path\&. Mangles the given tag into a chunk suitable for using as a file / path name\&. This is exported for use in the globus_gass_cache program\&.
.PP
\fBParameters\fP
.RS 4
\fIcache_handle\fP Handle to the opened cache directory to use\&. 
.br
\fItag\fP The incoming tag to mangle (NULL-terminated) 
.br
\fImangled_tag\fP Pointer to the output string; a buffer for the real string is malloc()ed for the application\&. If mangled is NULL, then no such buffer is allocated, and no mangled string is created\&. This can be useful to just get the length of the mangled string\&. 
.br
\fIlength\fP A pointer to the length of the resulting string\&. If NULL, this is not assigned to\&.
.RE
.PP
\fBReturn values\fP
.RS 4
\fIGLOBUS_SUCCESS\fP Success 
.br
\fIGLOBUS_GASS_CACHE_ERROR_NO_MEMORY\fP No memory 
.RE
.PP

.SS "int globus_gass_cache_mangle_url (const \fBglobus_gass_cache_t\fP cache_handle, const char * url, char ** mangled_url, int * length)\fC [extern]\fP"

.PP
Convert a URL to a string suitable as a file path\&. Mangles the given URL into a chunk suitable for using as a file / path name\&. This is exported for use in the globus_gass_cache program\&.
.PP
\fBParameters\fP
.RS 4
\fIcache_handle\fP Handle to the opened cache directory to use\&. 
.br
\fIurl\fP The incoming URL to mangle (NULL-terminated) 
.br
\fImangled_url\fP Pointer to the output string; a buffer for the real string is malloc()ed for the application\&. If mangled is NULL, then no such buffer is allocated, and no mangled string is created\&. This can be useful to just get the length of the mangled string\&. 
.br
\fIlength\fP A pointer to the length of the resulting string\&. If NULL, this is not assigned to\&.
.RE
.PP
\fBReturn values\fP
.RS 4
\fIGLOBUS_SUCCESS\fP Success 
.br
\fIGLOBUS_GASS_CACHE_ERROR_NO_MEMORY\fP No memory 
.RE
.PP

.SS "int globus_gass_cache_open (const char * cache_directory_path, \fBglobus_gass_cache_t\fP * cache_handlep)"

.PP
Open a GASS Cache\&. Open the cache specified by the cache_directory_path argument, and return a cache handle that can be used in subsequent cache calls\&.
.PP
If cache_directory_path is NULL, then use the value contained in the GLOBUS_GASS_CACHE_DEFAULT environment variable if it is defined, otherwise use ~/\&.globus_gass_cache\&.
.PP
The cache_directory_path must be a directory\&. If it is a file, this call will fail with a non-0 return value\&.
.PP
If the specified directory does not exist, then this call will create the directory\&.
.PP
\fBParameters\fP
.RS 4
\fIcache_directory_path\fP Path to the cache directory to open\&. Can be NULL (see above) 
.br
\fIcache_handlep\fP Structure containning all the necessary information to access the cache (file names, descriptor,\&.\&.\&.) (see globus_gass_gache\&.h) Some files are also opened: \fBglobus_gass_cache_close()\fP must be called subsequently to close those files\&. This parameter is modified by the \fBglobus_gass_cache_open()\fP
.RE
.PP
\fBReturn values\fP
.RS 4
\fIGLOBUS_SUCCESS\fP Success 
.br
\fIGLOBUS_GASS_CACHE_ERROR_CACHE_ALREADY_OPENED\fP Handle already opened 
.br
\fIGLOBUS_GASS_CACHE_ERROR_NAME_TOO_LONG\fP Path name too long 
.br
\fIGLOBUS_GASS_CACHE_ERROR_NO_HOME\fP Can't find home directory for default cache path 
.RE
.PP

.SS "int globus_gass_cache_query (\fBglobus_gass_cache_t\fP cache_handle, const char * url, const char * tag, globus_bool_t wait_for_lock, unsigned long * timestamp, char ** local_filename, globus_bool_t * is_locked)\fC [extern]\fP"

.PP
Query the GASS Cache\&. Query if an item is in the cache
.PP
This call will block only if wait_for_lock is GLOBUS_TRUE
.PP
\fBParameters\fP
.RS 4
\fIcache_handle\fP Handle to the opened cache directory to use\&. 
.br
\fIurl\fP URL of the file to query\&. It is used as the main key to the cache entries\&. 
.br
\fItag\fP Tag specifying which job is/are using the cache\&. This is usually the GLOBUS_GRAM_JOB_CONTACT\&. Can be NULL or empty; the tag 'null' is then used\&. 
.br
\fIwait_for_lock\fP If GLOBUS_TRUE, wait for any lock existing lock to be released\&. If GLOBUS_FALSE, doesn't wait for a lock to be released\&. 
.br
\fItimestamp\fP Timestamp of the cached file, set by globus_gass_cache_done(), (or \fBglobus_gass_cache_delete()\fP )\&. 
.br
\fIlocal_filename\fP Path the the local file caching the file specified by 'url'\&. NULL if 'url' not yet cached and creation not requested (create false)\&. 
.br
\fIis_locked\fP GLOBUS_TRUE if the file is currently (at return time) locked\&.
.RE
.PP
\fBReturns\fP
.RS 4
The \fBglobus_gass_cache_query()\fP function returns GLOBUS_SUCCESS, GLOBUS_GASS_CACHE_URL_NOT_FOUND, or any of the defined gass error code\&. 
.RE
.PP

.SH "Author"
.PP 
Generated automatically by Doxygen for globus_gass_cache from the source code\&.
