Closed trel closed 9 years ago
Original author: @trel (2013-07-11 09:52:41)
added zip file as eclipse project and app. Edit the testRandomAccess.java file for your zone and dir, giving a file name that does not exist.
You might need to use the GSIIRODSAccount if you want to log in with GSI instead of IRODSAccount.
Let's run this and see what happens outside of griffin.
Original author: @trel (2013-07-11 09:55:21)
sent email...waiting for test results...
Original author: @trel (2013-07-16 16:13:53)
Hi Mike,
I managed to run the script, it does trigger the 122000 error. I attached the logs. Do you have immediate ideas?
Cheers Martin
Original author: @trel (2013-07-16 16:22:48)
[main] INFO connection.IRODSSimpleProtocolManager - creating simple protocol manager
[main] INFO connection.IRODSSession - IRODS Session creation, loading default properties, these may be overridden...
[main] INFO pub.IRODSFileSystem - IRODSfileSystem is initialized
[main] INFO connection.AuthenticationFactoryImpl - instanceAuthMechanism()
[main] INFO connection.AuthenticationFactoryImpl - authScheme:STANDARD
[main] INFO connection.AuthenticationFactoryImpl - using standard auth
[main] INFO connection.IRODSConnection - pipeline configuration:PipelineConfiguration
irodsSocketTimeout:0
irodsParallelSocketTimeout:120
internalInputStreamBufferSize:0
internalOutputStreamBufferSize:0
internalCacheBufferSize:-1
localFileOutputStreamBufferSize:0
localFileInputStreamBufferSize:0
defaultEncoding:UTF-8
inputToOutputCopyBufferByteSize:8192
instrument:false
reconnect:false
reconnect time in millis:600000
[main] INFO connection.IRODSConnection - opening irods socket
[main] INFO connection.IRODSConnection - connect()
[main] INFO connection.IRODSConnection - connecting socket to agent
[main] INFO connection.IRODSConnection - normal iRODS connection
[main] INFO connection.IRODSConnection - connection to socket made...
[main] INFO connection.IRODSConnection - default buffer on input stream
[main] INFO connection.IRODSConnection - default buffer on input stream
[main] INFO connection.IRODSConnection - socket opened successfully
[main] INFO connection.IRODSCommands - reading message from irods
[main] INFO connection.AuthMechanism - startup response:StartupResponseData:
status:0
relVersion:rods3.2
apiVersion:d
reconnPort:0
reconnAddr:
cookie:0
[main] INFO connection.StandardIRODSAuth - authenticate
[main] INFO connection.StandardIRODSAuth - sending standard irods password
[main] INFO connection.IRODSCommands - reading message from irods
[main] INFO connection.IRODSCommands - calling irods function with byte array
[main] INFO connection.IRODSCommands - reading message from irods
[main] INFO connection.StandardIRODSAuth - auth was successful
[main] INFO connection.StandardIRODSAuth - auth response was:org.irods.jargon.core.connection.auth.AuthResponse@32f88377
[main] INFO connection.EnvironmentalInfoAccessor - getting irods server properties
[main] INFO connection.DiscoveredServerPropertiesCache - now retriving server properties from cache with zone:cern
[main] INFO connection.IRODSCommands - calling irods function with byte array
[main] INFO connection.IRODSCommands - reading message from irods
[main] INFO connection.EnvironmentalInfoAccessor - server response obtained
[main] INFO connection.IRODSCommands - IRODS server properties
icat enabled?:ICAT_ENABLED
Server boot time:1373965972
Rel version:rods3.2
API version:d
zone:cern
[main] INFO io.IRODSFileFactoryImpl - opening IRODSFileImpl for: /cern/home/mhellmic/testRandomAccess.csv
[main] INFO io.IRODSFileImpl - setting file name, given path = /cern/home/mhellmic/testRandomAccess.csv
[main] INFO io.IRODSFileImpl - detected local separator = /
[main] INFO io.IRODSFileImpl - file name was set as: testRandomAccess.csv
[main] INFO pub.IRODSFileSystemAOImpl - checking existence of: /cern/home/mhellmic/testRandomAccess.csv
[main] INFO connection.IRODSCommands - calling irods function with byte array
[main] INFO connection.IRODSCommands - reading message from irods
[main] INFO pub.IRODSFileSystemAOImpl - file not found, will treat as not exists
[main] INFO io.IRODSFileFactoryImpl - requested file does not exist, will be created
[main] INFO io.IRODSFileImpl - setting file name, given path = /cern/home/mhellmic/testRandomAccess.csv
[main] INFO io.IRODSFileImpl - detected local separator = /
[main] INFO io.IRODSFileImpl - file name was set as: testRandomAccess.csv
[main] INFO io.IRODSFileImpl - setting file name, given path = /cern/home/mhellmic
[main] INFO io.IRODSFileImpl - detected local separator = /
[main] INFO io.IRODSFileImpl - file name was set as: mhellmic
[main] INFO pub.IRODSFileSystemAOImpl - checking existence of: /cern/home/mhellmic
[main] INFO connection.IRODSCommands - calling irods function with byte array
[main] INFO connection.IRODSCommands - reading message from irods
[main] INFO pub.CollectionAndDataObjectListAndSearchAOImpl - objStat:
absolutePath:/cern/home/mhellmic
dataId:10082
specColType:NORMAL
objectType:COLLECTION
collectionPath:
objectPath:
checksum:
ownerName:mhellmic
ownerZone:cern
objSize:0
cacheDir:
cacheDirty:false
createdAt:replNumber:0Thu Jun 13 16:27:14 CEST 2013
modifiedAt:Tue Jul 02 09:10:31 CEST 2013
[main] INFO connection.IRODSCommands - calling irods function with byte array
[main] INFO connection.IRODSCommands - reading message from irods
[main] INFO pub.IRODSFileSystemAOImpl - file created and closed
[main] INFO io.IRODSFileImpl - closing irodsFile:/cern/home/mhellmic/testRandomAccess.csv
[main] INFO pub.IRODSFileSystemAOImpl - closing file:3
[main] INFO connection.IRODSCommands - calling irods function with byte array
[main] INFO connection.IRODSCommands - reading message from irods
[main] ERROR connection.IRODSCommands - IRODS error encountered:DEBUG:
[main] ERROR connection.IRODSCommands - status from error is:-1220000
org.irods.jargon.core.exception.JargonException: error returned from iRODS, status = -1220000 message:DEBUG:
at org.irods.jargon.core.connection.IRODSCommands.processMessageErrorNotEqualZero(IRODSCommands.java:1012)
at org.irods.jargon.core.connection.IRODSCommands.readMessage(IRODSCommands.java:852)
at org.irods.jargon.core.connection.IRODSCommands.readMessage(IRODSCommands.java:794)
at org.irods.jargon.core.connection.IRODSCommands.irodsFunction(IRODSCommands.java:395)
at org.irods.jargon.core.connection.IRODSCommands.irodsFunction(IRODSCommands.java:314)
at org.irods.jargon.core.pub.IRODSFileSystemAOImpl.fileClose(IRODSFileSystemAOImpl.java:1313)
at org.irods.jargon.core.pub.io.IRODSFileImpl.close(IRODSFileImpl.java:1340)
at org.irods.jargon.core.pub.io.IRODSFileImpl.createNewFileCheckNoResourceFound(IRODSFileImpl.java:413)
at org.irods.jargon.core.pub.io.IRODSFileFactoryImpl.instanceIRODSRandomAccessFile(IRODSFileFactoryImpl.java:556)
at test.TestRandomAccess.main(TestRandomAccess.java:51)
Original author: @trel (2013-07-18 07:03:09)
I have attached the relevant logs, just to be sure I don't miss anything. The questionable request is the last one in the rodsLog file.
I also have a default resource set up in my .irodsEnv:
irodsDefResource 'demoResc'
iadmin>lr
bundleResc
demoResc
replResc
iadmin>lr demoResc
resc_id: 10010
resc_name: demoResc
zone_name: cern
resc_type_name: unix file system
resc_class_name: archive
resc_net: irods1.cern.ch
resc_def_path: /home/mhellmic/iRODS/Vault
free_space:
free_space_ts: : 1970-01-01.01:00:00
resc_info:
r_comment:
resc_status:
create_ts: 01369668642 : 2013-05-27.17:30:42
modify_ts: 01369668642 : 2013-05-27.17:30:42
The free space information there looks fishy to me, but putting files with iput works fine.
Original author: @trel (2013-07-18 07:11:51)
note rodslog messages
11:15:04 pid:3196 NOTICE: created irodsCwd=/cern/home/mhellmic
Jul 16 11:15:04 pid:3196 NOTICE: rsAuthCheck user mhellmic#cern
Jul 16 11:15:04 pid:3196 NOTICE: rsAuthCheck: chlCheckAuth status = -826000
Jul 16 11:15:04 pid:3196 NOTICE: rsAuthResponse: rxAuthCheck failed, status = -826000
Jul 16 11:15:04 pid:3196 NOTICE: readAndProcClientMsg: received disconnect msg from client
Jul 16 11:15:04 pid:3196 NOTICE: Agent exiting with status = 0
Jul 16 11:15:47 pid:3153 NOTICE: Agent process 3196 exited with status 0
Jul 16 11:15:47 pid:3153 NOTICE: Agent process 3206 started for puser=mhellmic and cuser=mhellmic from 188.184.139.69
Jul 16 11:15:47 pid:3206 NOTICE: created irodsHome=/cern/home/mhellmic
Jul 16 11:15:47 pid:3206 NOTICE: created irodsCwd=/cern/home/mhellmic
Jul 16 11:15:50 pid:3206 NOTICE: rsAuthCheck user mhellmic#cern
Jul 16 11:15:50 pid:3206 NOTICE: rsAuthResponse set proxy authFlag to 3, client authFlag to 3, user:mhellmic#cern proxy:mhellmic client:mhellmic
Jul 16 11:15:50 pid:3206 NOTICE: readAndProcClientMsg: received disconnect msg from client
Jul 16 11:15:50 pid:3206 NOTICE: Agent exiting with status = 0
Jul 16 11:16:11 pid:3153 NOTICE: Agent process 3206 exited with status 0
Jul 16 11:16:11 pid:3153 NOTICE: Agent process 3234 started for puser=mhellmic and cuser=mhellmic from 188.184.139.69
Jul 16 11:16:11 pid:3234 NOTICE: created irodsHome=/cern/home/mhellmic
Jul 16 11:16:11 pid:3234 NOTICE: created irodsCwd=/cern/home/mhellmic
Jul 16 11:16:11 pid:3234 NOTICE: rsAuthCheck user mhellmic
Jul 16 11:16:11 pid:3234 NOTICE: rsAuthResponse set proxy authFlag to 3, client authFlag to 3, user:mhellmic proxy:mhellmic client:mhellmic
Jul 16 11:16:12 pid:3234 NOTICE: applyRule Failed for action 1: acPostProcForPut with status -1018000
Jul 16 11:16:12 pid:3234 NOTICE: applyRule Failed for action 2: acPostProcForPut with status -1101000
Jul 16 11:16:12 pid:3234 DEBUG:
Jul 16 11:16:12 pid:3234 ERROR: readMsgHeader:header read- read 0 bytes, expect 4, status = -4002
Jul 16 11:16:12 pid:3234 NOTICE: Agent exiting with status = -4002
Jul 16 11:16:27 pid:3153 NOTICE: Agent process 3234 exited with status 256
Jul 16 11:16:27 pid:3153 NOTICE: Agent process 3253 started for puser=mhellmic and cuser=mhellmic from 188.184.139.69
Jul 16 11:16:27 pid:3253 NOTICE: created irodsHome=/cern/home/mhell
Original author: @trel (2013-07-18 07:13:21)
# iRODS Rule Base
# The new rule language is used to express all policies
# Recovery procedures are included for a micro-service after " ::: "
#
#Test Rules
printHello { print_hello; }
#
#
# These are sys admin rules for creating and deleting users and renaming
# the local zone.
acCreateUser {
acPreProcForCreateUser;
acCreateUserF1;
acPostProcForCreateUser; }
acCreateUserF1 {
ON($otherUserName == "anonymous") {
msiCreateUser ::: msiRollback;
msiCommit; } }
acCreateUserF1 {
msiCreateUser ::: msiRollback;
acCreateDefaultCollections ::: msiRollback;
msiAddUserToGroup("public") ::: msiRollback;
msiCommit; }
acVacuum(*arg1) { delay(*arg1) { msiVacuum;} }
acCreateDefaultCollections { acCreateUserZoneCollections; }
acCreateUserZoneCollections {
acCreateCollByAdmin("/"++$rodsZoneProxy++"/home", $otherUserName);
acCreateCollByAdmin("/"++$rodsZoneProxy++"/trash/home", $otherUserName); }
#acCreateCollByAdmin(*parColl, *childColl) {msiCreateCollByAdmin(*parColl,*childColl); }
acCreateCollByAdmin(*parColl,*childColl) {
msiCreateCollByAdmin(*parColl,*childColl); }
#
#
acDeleteUser {
acPreProcForDeleteUser;
acDeleteUserF1;
acPostProcForDeleteUser; }
acDeleteUserF1 {
acDeleteDefaultCollections ::: msiRollback;
msiDeleteUser ::: msiRollback;
msiCommit; }
acDeleteDefaultCollections {
acDeleteUserZoneCollections; }
acDeleteUserZoneCollections {
acDeleteCollByAdmin("/"++$rodsZoneProxy++"/home",$otherUserName);
acDeleteCollByAdmin("/"++$rodsZoneProxy++"/trash/home",$otherUserName); }
#acDeleteCollByAdmin(*parColl,*childColl) {msiDeleteCollByAdmin(*parColl,*childColl); }
acDeleteCollByAdmin(*parColl,*childColl) {
msiDeleteCollByAdmin(*parColl,*childColl); }
#
acRenameLocalZone(*oldZone,*newZone) {
msiRenameCollection("/"++str(*oldZone)++"",*newZone) ::: msiRollback;
msiRenameLocalZone(*oldZone,*newZone) ::: msiRollback;
msiCommit; }
#
# The acGetUserByDN by default is a no-op but can be configured to do some
# special handling of GSI DNs. See rsGsiAuthRequest.c.
#acGetUserByDN(*arg,*OUT) {msiExecCmd("t","*arg","null","null","null",*OUT); }
acGetUserByDN(*arg,*OUT) { }
#
# --------------------------------------------------------------------------
# The following rule is for setting Access Control List policy. If
# not called or called with an argument other than STRICT, the
# STANDARD setting is in effect, which is fine for many sites. By
# default, users are allowed to see certain metadata, for example the
# data-object and sub-collection names in each other's collections.
# When made STRICT by calling msiAclPolicy(STRICT), the General Query
# Access Control is applied on collections and dataobject metadata
# which means that ils, etc, will need 'read' access or better to the
# collection to return the collection contents (name of data-objects,
# sub-collections, etc). Formerly this was controlled at build-time
# via a GEN_QUERY_AC flag in config.mk. Default is the normal,
# non-strict level, allowing users to see other collections. In all
# cases, access control to the data-objects is enforced. Even with
# STRICT access control, the admin user is not restricted so various
# microservices and queries will still be able to evaluate system-wide
# information.
# Post irods 2.5, $userNameClient is available although this
# is only secure in a irods-password environment (not GSI), but you can
# then have rules for specific users:
# acAclPolicy {ON($userNameClient == "quickshare") { } }
# acAclPolicy {msiAclPolicy("STRICT"); }
# which was requested by ARCS (Sean Fleming). See rsGenQuery.c for more
# information on $userNameClient. But the typical use is to just set it
# strict or not for all users:
acAclPolicy { }
#acAclPolicy {msiAclPolicy("STRICT"); }
# When choosing a "STRICT" ACL policy you should consider setting the
# following permissions if you are using the PHP web browser:
# ichmod -M read public /ZONE_NAME
# ichmod -M read public /ZONE_NAME/home
#
# --------------------------------------------------------------------------
# This is a policy point for ticket-based access (added in iRODS 3.1),
# where the administrator can allow ticket use by all users, no users,
# only certain users, or not certain users. To disallow for all
# users, comment out the defined acTicketPolicy. Also, as an example
# example, to disallow for user anonymous (passwordless logins),
# comment out the default acTicketPolicy rule and uncomment out the
# second one. The default policy is to allow all users. The rule is
# executed when the server receives a ticket for use for access and
# if the rule fails (none found to apply), the ticket is not used.
acTicketPolicy {}
#acTicketPolicy {ON($userNameClient != "anonymous") { } }
#
# --------------------------------------------------------------------------
# The following are rules for data object operation
# Note that the msiOprDisallowed microservice can be used by all the rules
# to disallow the execution of certain actions.
# 1) acSetRescSchemeForCreate - This is the preprossing rule for creating a
# data object. It can be used for setting the resource selection scheme
# when creating a data object which is used by the put, copy and
# replicate operations. Currently, three preprocessing functions can be
# used by this rule:
# msiSetNoDirectRescInp(rescList) - sets a list of resources that cannot
# be used by a normal user directly. More than one resources can be
# input using the character "%" as separator. e.g., resc1%resc2%resc3.
# This function is optional, but if used, should be the first function
# to execute because it screens the resource input.
# msiSetDefaultResc(defaultRescList, optionStr) - sets the default resource.
# From version 2.3 onward, this function is no longer mandatory, but
# if it is used, if should be executed right after the screening
# function msiSetNoDirectRescInp.
# defaultResc - the resource to use if no resource is input. A "null"
# means there is no defaultResc. More than one resources can be
# input using the character "%" as separator.
# optionStr - Can be "forced", "preferred" or "null". A "forced" input
# means the defaultResc will be used regardless of the user input.
# The forced action only apply to to users with normal privilege.
# msiSetRescSortScheme(sortScheme) - set the scheme for
# for selecting the best resource to use when creating a data object.
# sortScheme - The sorting scheme. Valid scheme are "default",
# "random", "byLoad" and "byRescClass". The "byRescClass" scheme will put the
# cache class of resource on the top of the list. The "byLoad" scheme will put
# the least loaded resource on the top of the list: in order to work properly,
# the RMS system must be switched on in order to pick up the load information
# for each server in the resource group list.
# The scheme "random" and "byRescClass" can be applied in sequence. e.g.,
# msiSetRescSortScheme(random); msiSetRescSortScheme(byRescClass)
# will select randomly a cache class resource and put it on the
# top of the list.
#
# 1a) acSetRescSchemeForRepl - This is the preprossing rule for replicating a
# data object. This rule is similar to acSetRescSchemeForCreate except it
# applies to replication. All the micro-services for acSetRescSchemeForCreate
# also apply to acSetRescSchemeForRepl
#
# acSetRescSchemeForCreate {msiSetNoDirectRescInp("xyz%demoResc8%abc"); msiSetDefaultResc("demoResc8","null"); msiSetRescSortScheme("default"); }
# acSetRescSchemeForCreate {msiSetDefaultResc("demoResc","null"); msiSetRescSortScheme("random"); msiSetRescSortScheme("byRescClass"); }
# acSetRescSchemeForCreate {msiSetDefaultResc("demoResc7%demoResc8","preferred"); }
# acSetRescSchemeForCreate {ON($objPath like "/tempZone/home/rods/protected/*") {msiOprDisallowed;} }
acSetRescSchemeForCreate {msiSetDefaultResc("demoResc","null"); }
acSetRescSchemeForRepl {msiSetDefaultResc("demoResc","null"); }
# acSetRescSchemeForCreate {msiGetSessionVarValue("all","all"); msiSetDefaultResc("demoResc","null"); }
# acSetRescSchemeForCreate {msiSetDefaultResc("demoResc","forced"); msiSetRescSortScheme("random"); msiSetRescSortScheme("byRescClass"); }
#
# 2) acPreprocForDataObjOpen - Preprocess rule for opening an existing
# data object which is used by the get, copy and replicate operations.
# Currently, four preprocessing functions can be used individually or
# in sequence by this rule.
# msiSetDataObjPreferredResc(preferredRescList) - set the preferred
# resources of the opened object. The copy stored in this preferred
# resource will be picked if it exists. More than one resources can be
# input using the character "%" as separator. e.g., resc1%resc2%resc3.
# The most preferred resource should be at the top of the list.
# msiSetDataObjAvoidResc(avoidResc) - set the resource to avoid when
# opening an object. The copy stored in this resource will not be picked
# unless this is the only copy.
# msiSortDataObj(sortingScheme) - Sort the copies of the data object using
# this scheme. Currently, "random" and "byRescClass" sorting scheme are
# supported. If "byRescClass" is set, data objects in the "cache"
# resources will be placed ahead of of those in the "archive" resources.
# The sorting schemes can also be chained. e.g.,
# msiSortDataObj(random); msiSortDataObj(byRescClass) means that
# the data objects will be sorted randomly first and then separated
# by class.
# msiStageDataObj(cacheResc) - stage a copy of the data object in the
# cacheResc before opening the data object.
# The $writeFlag session variable has been created to be used as a condition
# for differentiating between open for read ($writeFlag == "0") and
# write ($writeFlag == "1"). e.g. :
# acPreprocForDataObjOpen {ON($writeFlag == "0") {msiStageDataObj("demoResc8"); } }
# acPreprocForDataObjOpen {ON($writeFlag == "1") { } }
# acPreprocForDataObjOpen {msiSortDataObj("random"); msiSetDataObjPreferredResc("xyz%demoResc8%abc"); msiStageDataObj("demoResc8"); }
# acPreprocForDataObjOpen {msiSetDataObjPreferredResc("demoResc7%demoResc8"); }
acPreprocForDataObjOpen { }
# acPreprocForDataObjOpen {msiGetSessionVarValue("all","all"); }
# acPreprocForDataObjOpen {ON($writeFlag == "0") {writeLine("serverLog",$objPath);} }
# 3) acSetMultiReplPerResc - Preprocess rule for replicating an existing
# data object. Currently, one preprocessing function can be used
# by this rule.
# msiSetMultiReplPerResc - By default, the system allows one copy per
# resource. This micro-service sets the number of copies per resource
# to unlimited.
acSetMultiReplPerResc { }
# acSetMultiReplPerResc {msiGetSessionVarValue("all","all"); }
#
# 4) acPostProcForPut - Rule for post processing the put operation.
# 5) acPostProcForCopy - Rule for post processing the copy operation.
# 6) acPostProcForFilePathReg - Rule for post processing the registration
# of a physical file path (e.g. - ireg command).
# 7) acPostProcForCreate - Rule for post processing of data object create.
# 8) acPostProcForOpen - Rule for post processing of data object open.
# 8a) acPostProcForPhymv - Rule for post processing of data object phymv.
# 8b) acPostProcForRepl - Rule for post processing of data object repl.
#
# Currently, three post processing functions can be used individually or
# in sequence by these rules.
# msiExtractNaraMetadata - extract and register metadata from the just
# upload NARA files.
# msiSysReplDataObj(replResc, flag) - can be used to replicate a copy of
# the file just uploaded or copied data object to the specified replResc
# Valid values for the "flag" input are "all", "updateRepl" and
# "rbudpTransfer". More than one flag values can be set using the
# "%" character as separator. e.g., "all%updateRepl". "updateRepl" means
# update an existing stale copy to the latest copy. The "all" flag means
# replicate to all resources in a resource group or update all stale
# copies if the "updateRepl" flag is also set. "rbudpTransfer" means
# the RBUDP protocol will be used for the transfer.
# A "null" input means a single will be made in one of the resource
# in the resource group.
# It may be desirable to do replication only if the dataObject is stored
# in a resource group. For example, the following rule can be used:
# acPostProcForPut {ON($rescGroupName != "") {msiSysReplDataObj($rescGroupName,"all"); } }
#
# msiSysChksumDataObj - checksum the just uploaded or copied data object.
# acPostProcForPut {msiSysChksumDataObj; msiSysReplDataObj("demoResc8","all"); }
# acPostProcForPut {msiSysReplDataObj("demoResc8","all"); }
# acPostProcForPut {msiSysChksumDataObj; }
# acPostProcForPut {delay("<A></A>") {msiSysReplDataObj('demoResc8','all'); } }
# acWriteLine(*A,*B) {writeLine(*A,*B); }
# acPostProcForPut {delay("<PLUSET>1m</PLUSET>") {acWriteLine('serverLog','delayed by a minute message1'); acWriteLine('serverLog','delayed by a minute message2'); } }
# acPostProcForPut {ON($objPath like "/tempZone/home/rods/nvo/*") {delay("<PLUSET>1m</PLUSET>") {msiSysReplDataObj('nvoReplResc','null'); } } }
# acPostProcForPut {msiSysReplDataObj("demoResc8","all"); }
#acPostProcForPut {msiSetDataTypeFromExt; }
#acPostProcForPut {ON($objPath like "/tempZone/home/rods/tg/*") {msiSysReplDataObj("nvoReplResc","null"); } }
#acPostProcForPut {ON($objPath like "/tempZone/home/rods/mytest/*") {writeLine("serverLog","File Path is "++$filePath); } }
#acPostProcForPut {ON($objPath like "/tempZone/home/rods/mytest/*") {writeLine("serverLog","File Path is "++$filePath); msiSplitPath($filePath,*fileDir,*fileName); msiExecCmd("send.sh", "*fileDir *fileName", "null", "null","null",*Junk); writeLine("serverLog","After File Path is *fileDir *fileName"); } }
#acPostProcForPut { ON($objPath like "\*txt") {writeLine("serverLog","File $objPath"); } }
#acPostProcForPut { }
acPostProcForPut {
ON($objPath like "\*.replicate") {
processReplicationCommandFile($objPath);
}
}
acPostProcForPut {
ON($objPath like "\*.pid.\*") {
processPIDCommandFile($objPath);
}
}
acPostProcForCopy { }
acPostProcForFilePathReg { }
acPostProcForCreate { }
# acPostProcForOpen {writeLine("serverLog",$objPath); }
acPostProcForOpen { }
acPostProcForPhymv { }
acPostProcForRepl { }
# 9) acSetNumThreads - Rule to set the number of threads for a data transfer
# This rule supports condition based on $rescName so that different
# policies can be set for different resources.
# Only one function can be used for this rule
# msiSetNumThreads(sizePerThrInMb, maxNumThr, windowSize) - set the number
# of threads and the tcp window size. The number of threads is based
# the two input parameters
# sizePerThrInMb - The number of threads is computed using:
# numThreads = fileSizeInMb / sizePerThrInMb + 1
# where sizePerThrInMb is an integer value in MBytes. It also accepts
# the word "default" which sets sizePerThrInMb to a default value of 32
# maxNumThr - The maximum number of threads to use. It accepts integer
# value up to 16. It also accepts the word "default" which sets
# maxNumThr to a default value of 4. A value of 0 means no parallel
# I/O. This can be helpful to get around firewall issues.
# windowSize - the tcp window size in Bytes for the parallel transfer.
# A value of 0 or "default" means a default size of 1,048,576 Bytes.
# The msiSetNumThreads function must be present or no thread will be used
# for all transfer
# acSetNumThreads {msiSetNumThreads("16","4","default"); }
# acSetNumThreads {msiSetNumThreads("default","16","default"); }
# acSetNumThreads {ON($rescName == "macResc") {msiSetNumThreads("default","0","default"); } }
acSetNumThreads {msiSetNumThreads("default","16","default"); }
# 10) acDataDeletePolicy - This rule set the policy for deleting data objects.
# This is the PreProcessing rule for delete.
# Only one function can be called:
# msiDeleteDisallowed() - Disallow the deletion of the data object.
# Examples:
# acDataDeletePolicy {ON($objPath like "/foo/bar/*") {msiDeleteDisallowed; } }
# this rule prevents the deletion of any data objects or collections
# beneath the collection /foo/bar/
# acDataDeletePolicy {ON($rescName == "demoResc8") {msiDeleteDisallowed; } }
# this rule prevents the deletion of any data objects that are stored
# in the demoResc8 resource.
#acDataDeletePolicy {ON($objPath like "/tempZone/home/rods/*") {msiDeleteDisallowed; } }
acDataDeletePolicy { }
#
# 11) acPostProcForDelete - This rule set the post-processing policy for
# deleting data objects. Currently there is no function written specifically
# for this rule.
acPostProcForDelete { }
#
# 12) acSetChkFilePathPerm - This rule replaces acNoChkFilePathPerm.
# For now, the only safe setting is the default,
# msiSetChkFilePathPerm("disallowPathReg"), which prevents non-admin
# users from using imcoll and ireg. In the next release (after 3.1)
# we expect to be able to offer the other settings described below.
# You can experiment with the other settings, but we do not
# recommend them for production at this time. The rule sets
# the policy for checking the file path permission when registering physical
# file path using commands such as ireg and imcoll. This rule also sets the
# policy for checking the file path when unregistering a data object without
# deleting the physical file.
# Normally, a normal user cannot unregister a data object if the physical
# file is located in a resource vault. Setting the chkType input of
# msiSetChkFilePathPerm to "noChkPathPerm" allows this check to be bypassed.
# Only one function can be called:
# msiSetChkFilePathPerm(chkType) - Valid values for chkType are:
# "disallowPathReg" - Disallow of registration of iRODS path using
# ireg and imcoll by a non-privileged user.
# "noChkPathPerm" - Do not check file path permission when registering
# a file. WARNING - This setting can create a security problem if used.
# "doChkPathPerm" - Check UNIX ownership of physical files before
# registering. Registration of path inside iRODS resource vault
# path is not allowed.
# "chkNonVaultPathPerm" - Check UNIX ownership of physical files before
# registering. Registration of path inside iRODS resource vault
# path is allowed if the vault path belong to the user.
# acSetChkFilePathPerm {msiSetChkFilePathPerm("doChkPathPerm"); }
acSetChkFilePathPerm {msiSetChkFilePathPerm("disallowPathReg"); }
#
# 13) acTrashPolicy - This rule set the policy for whether the trash can
# should be used. The default policy is the trash can will be used. Only
# one function can be called.
# msiNoTrashCan() - Set the policy to no trash can.
acTrashPolicy { }
# acTrashPolicy {msiNoTrashCan; }
#
# 14) acSetPublicUserPolicy - This rule set the policy for the set of
# operations that are allowable for the user "public" Only one function can
# be called.
# msiSetPublicUserOpr(oprList) - Sets a list of operations that can
# be performed by the user "public". Only 2 operations are allowed -
# "read" - read files; "query" - browse some system level metadata. More
# than one operation can be input using the character "%" as separator.
# e.g., read%query.
# acSetPublicUserPolicy {msiSetPublicUserOpr("read%query"); }
acSetPublicUserPolicy { }
# 15) acChkHostAccessControl - This rule checks the access control by host
# and user based on the the policy given in the HostAccessControl file.
# The msi is developed by Jean-Yves Nief of IN2P3. Only one function can
# be called.
# msiCheckHostAccessControl() - checks the access control by host and user
# based on the the policy given in the HostAccessControl file.
# acChkHostAccessControl {msiCheckHostAccessControl; }
acChkHostAccessControl { }
# 16) acSetVaultPathPolicy - This rule set the policy for creating the physical
# path in the iRODS resource vault. Two functions can be called:
# msiSetGraftPathScheme(addUserName,trimDirCnt) - Set the VaultPath scheme
# to GRAFT_PATH - graft (add) the logical path to the vault path of the
# resource when generating the physical path for a data object. The first
# argument (addUserName) specifies whether the userName should be added
# to the physical path. e.g. $vaultPath/$userName/$logicalPath.
# "addUserName" can have two values - yes or no. The second argument
# (trimDirCnt) specifies the number of leading directory elements of
# of the logical path to trim. A value of 0 or 1 is allowable. The
# default value is 1.
# msiSetRandomScheme() - Set the VaultPath scheme to RANDOM meaning a
# randomly generated path is appended to the vaultPath when generating
# the physical path. e.g., $vaultPath/$userName/$randomPath.
# The advantage with the RANDOM scheme is renaming operations (imv, irm)
# are much faster because there is no need to rename the
# corresponding physical path.
# This default is GRAFT_PATH scheme with addUserName == yes and trimDirCnt == 1.
# Note : if trimDirCnt is greater than 1, the home or trash entry will be
# taken out.
# acSetVaultPathPolicy {msiSetRandomScheme; }
acSetVaultPathPolicy {msiSetGraftPathScheme("no","1"); }
#
# 17) acSetReServerNumProc - This rule set the policy for the number of processes
# to use when running jobs in the irodsReServer. The irodsReServer can now
# muli-task such that one or two long running jobs cannot block the execution
# of other jobs. One function can be called:
# msiSetReServerNumProc(numProc) - numProc can be "default" or a number
# in the range 1-4. numProc will be set to 1 if "default" is the input.
#
acSetReServerNumProc {msiSetReServerNumProc("default"); }
#
# 18) acPreProcForCollCreate - This is the PreProcessing rule for creating
# a collection. Currently there is no function written specifically
# for this rule.
# acPreprocForCollCreate {writeLine("serverLog","TEST:acPreProcForCollCreate:"++$collName); }
acPreprocForCollCreate { }
#
# 19) acPostProcForCollCreate - This rule set the post-processing policy for
# creating a collection. Currently there is no function written specifically
# for this rule.
acPostProcForCollCreate { }
# 20) acPreprocForRmColl - This is the PreProcessing rule for removing
# a collection. Currently there is no function written specifically
# for this rule.
acPreprocForRmColl { }
#
# 21) acPostProcForRmColl - This rule set the post-processing policy for
# removing a collection. Currently there is no function written specifically
# for this rule.
# acPostProcForRmColl {msiGetSessionVarValue("all","all"); }
acPostProcForRmColl { }
#
# 22) acPreProcForModifyUser - This rule set the pre-processing policy for
# modifying the properties of a user.
# Option specifies the modifying-action being performed by the administraor
#
#acPreProcForModifyUser(*UserName,*Option,*NewValue) {writeLine("serverLog","TEST:acPreProcForModifyUser: *UserName,*Option,*NewValue"); }
#
acPreProcForModifyUser(*UserName,*Option,*NewValue) { }
#
# 23) acPostProcForModifyUser - This rule set the post-processing policy for
# modifying the properties of a user.
# Option specifies the modifying-action being performed by the administraor
#
#acPostProcForModifyUser(*UserName,*Option,*NewValue) {writeLine("serverLog","TEST:acPostProcForModifyUser: *UserName,*Option,*NewValue"); }
#
acPostProcForModifyUser(*UserName,*Option,*NewValue) { }
#
# 24) acPreProcForModifyAVUmetadata - This rule set the pre-processing policy for
# adding/deleting and copying the AVUmetadata for data, collection, user and resources.
# option= add, adda, rm, rmw, rmi, cp
# item type= -d,-d,-c,-C,-r,-R,-u,-U
#
#acPreProcForModifyAVUMetadata(*Option,*ItemType,*ItemName,*AName,*AValue,*AUnit) {writeLine("serverLog","TEST:acPreProcForModifyAVUMetadata:*Option,*ItemType,*ItemName"); }
#
acPreProcForModifyAVUMetadata(*Option,*ItemType,*ItemName,*AName,*AValue,*AUnit) { }
acPreProcForModifyAVUMetadata(*Option,*ItemType,*ItemName,*AName,*AValue) { }
#
# 25) acPostProcForModifyAVUmetadata - This rule set the post-processing policy for
# adding/deleting and copying the AVUmetadata for data, collection, user and resources.
# option= add, adda, rm, rmw, rmi, cp
# item type= -d,-d,-c,-C,-r,-R,-u,-U
#
#acPostProcForModifyAVUMetadata(*Option,*ItemType,*ItemName,*AName,*AValue,*AUnit) {writeLine("serverLog","TEST:acPostProcForModifyAVUMetadata:*Option,*ItemType,*ItemName"); }
#
acPostProcForModifyAVUMetadata(*Option,*ItemType,*ItemName,*AName,*AValue,*AUnit) { }
acPostProcForModifyAVUMetadata(*Option,*ItemType,*ItemName,*AName,*AValue) { }
#
# 26) acPreProcForCreateUser - This rule set the pre-processing policy for
# creating a new user.
#
#acPreProcForCreateUser {writeLine("serverLog","TEST:acPreProcForCreateUser"); }
#
acPreProcForCreateUser { }
# 27) acPostProcForCreateUser - This rule set the post-processing policy for
# creating a new user.
#
#acPostProcForCreateUser {writeLine("serverLog","TEST:acPostProcForCreateUser"); }
#
acPostProcForCreateUser { }
#
# 28) acPreProcForDeleteUser - This rule set the pre-processing policy for
# deleting an old user.
#
#acPreProcForDeleteUser {writeLine("serverLog","TEST:acPreProcForDeleteUser"); }
acPreProcForDeleteUser { }
#
# 29) acPostProcForDeleteUser - This rule set the post-processing policy for
# deleting an old user.
#
#acPostProcForDeleteUser {writeLine("serverLog","TEST:acPostProcForDeleteUser"); }
acPostProcForDeleteUser { }
#
# 28) acPreProcForCreateResource - This rule set the pre-processing policy for
# creating a new resource.
#
acPreProcForCreateResource(*RescName,*RescType,*RescClass,*RescLoc,*RescVaultPath,*RescZoneName) { }
#
# 29) acPostProcForCreateResource - This rule set the post-processing policy for
# creating a new resource.
#
acPostProcForCreateResource(*RescName,*RescType,*RescClass,*RescLoc,*RescVaultPath,*RescZoneName) { }
#
# 30) acPreProcForCreateToken - This rule set the pre-processing policy for
# creating a new token.
#
acPreProcForCreateToken(*TNameSpace,*TName,*ValueOne,*ValueTwo,*ValueThree,*TComment) { }
#
# 31) acPostProcForCreateToken - This rule set the post-processing policy for
# creating a new token.
#
acPostProcForCreateToken(*TNameSpace,*TName,*ValueOne,*ValueTwo,*ValueThree,*TComment) { }
#
# 32) acPreProcForModifyUserGroup - This rule set the pre-processing policy for
# modifying membership of a user group.
# Option specifies the modifying-action being performed by the administraor
#
acPreProcForModifyUserGroup(*GroupName,*Option,*UserName,*ZoneName) { }
#
# 33) acPostProcForModifyUserGroup - This rule set the post-processing policy for
# modifying membership of a user group.
# Option specifies the modifying-action being performed by the administraor
#
acPostProcForModifyUserGroup(*GroupName,*Option,*UserName,*ZoneName) { }
#
# 34) acPreProcForDeleteResource - This rule set the pre-processing policy for
# deleting an old resource.
#
acPreProcForDeleteResource(*RescName) { }
#
# 35) acPostProcForDeleteResource - This rule set the post-processing policy for
# deleting an old resource.
#
acPostProcForDeleteResource(*RescName) { }
#
# 36) acPreProcForDeleteToken - This rule set the pre-processing policy for
# deleting an old token.
#
acPreProcForDeleteToken(*TNameSpace,*TName) { }
#
# 37) acPostProcForDeleteToken - This rule set the post-processing policy for
# deleting an old token.
#
acPostProcForDeleteToken(*TNameSpace,*TName) { }
#
# 38) acPreProcForModifyResource - This rule set the pre-processing policy for
# modifying the properties of a resource.
# Option specifies the modifying-action being performed by the administraor
#
acPreProcForModifyResource(*ResourceName,*Option,*NewValue) { }
#
# 39) acPostProcForModifyResource - This rule set the post-processing policy for
# modifying the properties of a resource.
# Option specifies the modifying-action being performed by the administraor
#
acPostProcForModifyResource(*ResourceName,*Option,*NewValue) { }
#
# 40) acPreProcForModifyResourceGroup - This rule set the pre-processing policy for
# modifying membership of a resource group.
# Option specifies the modifying-action being performed by the administraor
#
acPreProcForModifyResourceGroup(*ResourceGroupName,*Option,*ResourceName) { }
#
# 41) acPostProcForModifyResourceGroup - This rule set the post-processing policy for
# modifying membership of a resource group.
# Option specifies the modifying-action being performed by the administraor
#
acPostProcForModifyResourceGroup(*ResourceGroupName,*Option,*ResourceName) { }
#
# 42) acPreProcForModifyCollMeta - This rule set the pre-processing policy for
# modifying system metadata of a collection.
#
acPreProcForModifyCollMeta { }
#
# 43) acPostProcForModifyCollMeta - This rule set the post-processing policy for
# modifying system metadata of a collection.
#
acPostProcForModifyCollMeta { }
# 44) acPreProcForModifyDataObjMeta - This rule set the pre-processing policy for
# modifying system metadata of a data object.
#
#acPreProcForModifyDataObjMeta {writeLine("serverLog","TEST:acPreProcForModifyDataObjMeta"); }
#
acPreProcForModifyDataObjMeta { }
#
# 43) acPostProcForModifyDataObjMeta - This rule set the post-processing policy for
# modifying system metadata of a data object.
#
#acPostProcForModifyDataObjMeta {writeLine("serverLog","TEST:acPostProcForModifyDataObjMeta"); }
#
acPostProcForModifyDataObjMeta { }
#
# 44) acPreProcForModifyAccessControl - This rule set the pre-processing policy for
# access control
#
#acPreProcForModifyAccessControl(*RecursiveFlag,*AccessLevel,*UserName,*Zone,*Path) {writeLine("serverLog","TEST:acPreProcForModifyAccessControl: *RecursiveFlag,*AccessLevel,*UserName,*Zone,*Path"); }
#
acPreProcForModifyAccessControl(*RecursiveFlag,*AccessLevel,*UserName,*Zone,*Path) { }
#
# 45) acPostProcForModifyAccessControl - This rule set the post-processing policy for
# access control
#
#acPostProcForModifyAccessControl(*RecursiveFlag,*AccessLevel,*UserName,*Zone,*Path) {writeLine("serverLog","TEST:acPostProcForModifyAccessControl: *RecursiveFlag,*AccessLevel,*UserName,*Zone,*Path"); }
#
acPostProcForModifyAccessControl(*RecursiveFlag,*AccessLevel,*UserName,*Zone,*Path) { }
#
# 46) acPreProcForObjRename - This rule set the pre-processing policy for
# renaming (logically moving) data and collections
#
#acPreProcForObjRename(*sourceObject,*destObject) {writeLine("serverLog","TEST:acPreProcForObjRename from *sourceObject to *destObject"); }
acPreProcForObjRename(*sourceObject,*destObject) { }
#
# 47) acPostProcForObjRename - This rule set the post-processing policy for
# renaming (logically moving) data and collections
#
#acPostProcForObjRename(*sourceObject,*destObject) {writeLine("serverLog","TEST:acPostProcForObjRename from *sourceObject to *destObject"); }
# Testing to see if the applyAllRules call gets the *variables.
#acPostProcForObjRename(*sourceObject,*destObject) {applyAllRules(acPostProcForObjRenameALL(*sourceObject,*destObject),"0","0"); }
#acPostProcForObjRenameALL(*AA,*BB) {writeLine("serverLog","I was called! *AA *BB"); }
#acPostProcForObjRenameALL(*AA,*BB) {writeLine("serverLog","DestObject: *AA"); }
acPostProcForObjRename(*sourceObject,*destObject) { }
#
# 48) acPreProcForGenQuery - This rule set the pre-processing policy for
# general query
#The *genQueryInpStr is a pointer converted to a string and sent as a character string
# You need to convert as follows:
# genQueryInp = (genQueryInp_t *) strtol((char *)genQueryInpStr->inOutStruct,
# (char **) NULL,0);
#acPreProcForGenQuery(*genQueryInpStr) {writeLine("serverLog","TEST:acPreProcForGenQuery from"); }
#acPreProcForGenQuery(*genQueryInpStr) {msiPrintGenQueryInp("serverLog",*genQueryInpStr); }
acPreProcForGenQuery(*genQueryInpStr) { }
#
# 49) acPostProcForGenQuery - This rule set the post-processing policy for
# general query
#The *genQueryInpStr is a pointer converted to a string and sent as a character string
# You need to convert as follows:
# genQueryInp_t *genQueryInp;
#
# genQueryInp = (genQueryInp_t *) strtol((char *)genQueryInpStr->inOutStruct,
# (char **) NULL,0);
#
# The *genQueryOutStr is also a pointer sent out as a character string
# You need to convert as follows:
# genQueryOut_t *genQueryOut;
#
# genQueryOut = (genQueryOut_t *) strtol((char *)genQueryOutStr->inOutStruct,
# (char **) NULL,0);
#
#The *genQueryStatusStr is an integer but sent as a character string
#You need to convert as follows:
# int genQueryStatus;
#
# genQueryStatus = atoi((char *)genQueryStatusStr->inOutStruct);
#
#acPostProcForGenQuery(*genQueryInpStr,*genQueryOutStr,*genQueryStatusStr) {writeLine("serverLog","TEST:acPostProcForGenQuery and Status = *genQueryStatusStr"); }
acPostProcForGenQuery(*genQueryInpStr,*genQueryOutStr,*genQueryStatusStr) { }
# 50) acRescQuotaPolicy - This rule sets the policy for resource quota.
# Only one function can be called:
# msiSetRescQuotaPolicy() - This microservice sets whether the Resource
# Quota should be enforced. Valid values for the flag are:
# "on" - enable Resource Quota enforcement,
# "off" - disable Resource Quota enforcement (default).
# acRescQuotaPolicy {msiSetRescQuotaPolicy("off"); }
acRescQuotaPolicy {msiSetRescQuotaPolicy("off"); }
#
#
# 51) acBulkPutPostProcPolicy - This rule set the policy for executing
# the post processing put rule (acPostProcForPut) for bulk put. Since the
# bulk put option is intended to improve the upload speed, executing
# the acPostProcForPut for every file rule will slow down the the
# upload. This rule provide an option to turn the postprocessing off.
# Only one function can be called:
# msiSetBulkPutPostProcPolicy () - This microservice sets whether the
# acPostProcForPut rule will be run bulk put. Valid values for the
# flag are:
# "on" - enable execution of acPostProcForPut.
# "off" - disable execution of acPostProcForPut (default).
# Examples:
# acBulkPutPostProcPolicy {msiSetBulkPutPostProcPolicy("on"); }
acBulkPutPostProcPolicy {msiSetBulkPutPostProcPolicy("off"); }
# 52) acPostProcForTarFileReg - Rule for post processing the registration
# of the extracted tar file (from ibun -x). There is not micro-service
# associated with this rule.
acPostProcForTarFileReg { }
# 53) acPostProcForDataObjWrite - Rule for pre processing the write buffer
# the argument passed is of type BUF_LEN_MS_T
#acPostProcForDataObjWrite(*WriteBuffer) {writeLine("serverLog","TEST:acPostProcForDataObjWrite"); }
# rule below used for testing. dont uncomment this....
# acPostProcForDataObjWrite(*WriteBuffer) {msiCutBufferInHalf(*WriteBuffer); }
acPostProcForDataObjWrite(*WriteBuffer) { }
# 54) acPostProcForDataObjRead - Rule for post processing the read buffer
# the argument passed is of type BUF_LEN_MS_T
#acPostProcForDataObjRead(*ReadBuffer) {writeLine("serverLog","TEST:acPostProcForDataObjRead"); }
# rule below used for testing. dont uncomment this....
# acPostProcForDataObjRead(*ReadBuffer) {msiCutBufferInHalf(*ReadBuffer); }
acPostProcForDataObjRead(*ReadBuffer) { }
# ----------------------------------------------------------------------------
# These rules are for testing only
#acDataObjCreate {acSetCreateConditions; acDOC; }
acSetCreateConditions {msiGetNewObjDescriptor ::: recover_msiGetNewObjDescriptor; acSetResourceList; }
acDOC {msiPhyDataObjCreate ::: recover_msiPhyDataObjCreate; acRegisterData ::: msiRollback; msiCommit; }
acSetResourceList {msiSetResourceList; }
acSetCopyNumber {msiSetCopyNumber; }
acRegisterData {msiRegisterData ::: msiRollback; }
#
#These are actions for getting iCAT results for performing iRODS operations.
#These rules generate the genQueryOut_ structure for each action for the given condition
#
acGetIcatResults(*Action,*Condition,*GenQOut) {ON((*Action == "replicate") %% (*Action == "trim") %% (*Action == "chksum") %% (*Action == "copy") %% (*Action == "remove")) {msiMakeQuery("DATA_NAME, COLL_NAME",*Condition,*Query); msiExecStrCondQuery(*Query, *GenQOut); cut; } }
acGetIcatResults(*Action,*Condition,*GenQOut) {ON(*Action == "chksumRescLoc") {msiMakeQuery("DATA_NAME, COLL_NAME, RESC_LOC",*Condition,*Query); msiExecStrCondQuery(*Query, *GenQOut); cut; } }
acGetIcatResults(*Action,*Condition,*GenQOut) {ON(*Action == "list") {msiMakeQuery("DATA_NAME, COLL_NAME, DATA_RESC_NAME, DATA_REPL_NUM, DATA_SIZE",*Condition,*Query); msiExecStrCondQuery(*Query, *GenQOut); cut; } }
#
#rules for purging a file which have expired
#
acPurgeFiles(*Condition) {ON((*Condition == "null") %% (*Condition == "")) {msiGetIcatTime(*Time,"unix"); acGetIcatResults("remove","DATA_EXPIRY < '*Time'",*List); foreach(*List) {msiDataObjUnlink(*List,*Status); msiGetValByKey(*List,"DATA_NAME",*D); msiGetValByKey(*List,"COLL_NAME",*E); writeLine("stdout","Purged File *E/*D at *Time"); } } }
acPurgeFiles(*Condition) {msiGetIcatTime(*Time,"unix"); acGetIcatResults("remove","DATA_EXPIRY < '*Time' AND *Condition",*List); foreach(*List) {msiDataObjUnlink(*List,*Status); msiGetValByKey(*List,"DATA_NAME",*D); msiGetValByKey(*List,"COLL_NAME",*E); writeLine("stdout","Purged File *E/*D at *Time"); } }
acConvertToInt(*R) {assign(*A,$sysUidClient); assign($sysUidClient,*R); assign(*K, $sysUidClient); assign(*R,*K); assign($sysUidClient,*A); }
Original author: @trel (2013-08-05 11:31:42)
this issue is caused by the absence of a default rule that runs when the other overrides are not fired based on the condition. This was resolved by Hao, but represents a potential fix needed in the rule engine to avoid this error condition?
is this still an issue? Griffin is no more...
will not be able to reproduce - closing
Originally Opened: @trel (2013-07-03 15:56:19)
The Griffin user (cc'ed) had a problem uploading a new file to iRODS via Griffin. Griffin log shows error -1220000 raised from Jargon. 1220000 is a bit helpless:
By looking at the Jargon log, can you tell what is wrong? Please note that the user can use icommands to upload files with GSI.
Thanks in advance.
Regards, Dr Shunde Zhang