Hi Abhishek,
If you are still using Airavata .14, move to .15.
If you are using .15:
One option:
The php reference gateway itself should be a good php client reference
(it appears to be working to create and launch experiments)
airavata-php-gateway $ find . -type f | xargs grep -l createExperiment
./app/libraries/ExperimentUtilities.php
./app/libraries/Airavata/API/Airavata.php
If the code alone isn't sufficient for your answer, you should *run* the
php reference gateway,
against your Airavata server and see if you get the same error or not.
If not, you could put in some debugging .. I typically put in similar to:
error_log( "in function() line NNN: experiment object:\n" . print_r(
$experiment, true ), 3, "/tmp/phperrors" ) );
at key places in the code.
(I tend to prefer a file output such as /tmp/phperrors for heavy
debugging as error log thru syslog makes multi-line information
messy... maybe a file can be configured in php.ini, but I've never tried)
Another option:
Maybe you can get the experiment info via the api on experiments created
by the php and java clients then output & compare.
e.g. getExperiment or other api calls ?
Final option:
Create pull requests to make your code available to others to debug.
-Emre
Abhishek Kapoor wrote:
Hello all,
I am creating an experiment in php using
$input = new InputDataObjectType();
$input->name = "input";
$input->value = $inp;
$input->type = DataType::STRING;
$exInputs = array($input);
$output = new OutputDataObjectType();
$output->name = "output";
$output->value = "";
$output->type = DataType::STDOUT;
$err = new OutputDataObjectType();
$err->name = "output_err";
$err->value = "";
$err->type = DataType::STDERR;
$exOutputs = array($output,$err);
/* Create Experiment: needs to update using unique project ID. */
$user = $usrName;
$exp_name = $expName;
$proj = $projId;
$experiment = new Experiment();
$experiment->projectID = $proj;
$experiment->userName = $user;
$experiment->name = $exp_name;
$experiment->applicationId = $appId;
$experiment->experimentInputs = $exInputs;
$experiment->experimentOutputs = $exOutputs;
$computeResources =
$airavataclient>getAvailableAppInterfaceComputeResources($execId);
if(isset($computeResources) && !empty($computeResources)){
foreach ($computeResources as $cmR) {
if($cmR == "localhost"){
$cmRST = new ComputationalResourceScheduling();
$cmRST->resourceHostId = "localhost";
$cmRST->computationalProjectAccount = "ixxi-2013";
$cmRST->nodeCount = 1;
$cmRST->numberOfThreads = 1;
$cmRST->queueName = "normal";
$cmRST->totalCPUCount = 1;
$cmRST->wallTimeLimit = 30;
$cmRST->jobStartTime = 0;
$cmRST->totalPhysicalMemory = 1;
$userConfigurationData = new UserConfigurationData();
$userConfigurationData->airavataAutoSchedule = 0;
$userConfigurationData>overrideManualScheduledParams = 0;
$userConfigurationData->computationalResourceScheduling = $cmRST;
$experiment->userConfigurationData = $userConfigurationData;
}
}
}
$expId = $airavataclient->createExperiment($experiment);
but when I am launching the experiment I'm getting
arrayindexoutofbound error but then I created an experiment in java
and used that experiment Id to launch experiment in php and its
working fine. So, then again I tried to create experiment in php and
launch it using java api and I am getting the same error in java also.
So, it seems like I am missing something during creating experiment in
php.
As the code samples given for php in airavata are out-of-date so they
are not working.
Any suggestions ??
--
Regards,
*Abhishek Kapoor*
*Under Graduate Student*
*Indian Institute of Technology Kharagpur.*