dmwm / PHEDEX

CMS data-placement suite
8 stars 18 forks source link

Datasvc "data" API throws 500 Internal server error if "file" argument is passed together with "block"/"dataset" arguments #1028

Open nikmagini opened 8 years ago

nikmagini commented 8 years ago

Passing dataset=XXX&file=YYY to the 'data' API causes a 500 internal server error, e.g.

https://cmsweb.cern.ch/phedex/datasvc/perl/prod/data?dataset=/SMS-T6bbllslepton_mSbottom-800To950_mLSP-150To900_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/RunIISpring16FSPremix-pLHE_80X_mcRun2_asymptotic_v12-v1/AODSIM&file=/store/backfil/*

DBD::Oracle::db prepare failed: ORA-00907: missing right parenthesis (DBD ERROR: error possibly near <*> indicator at char 595 in 'select n.name node, f.logical_name, f.checksum, f.filesize, f.time_create file_time_create, b.name block, b.files, b.bytes, b.is_open block_is_open, b.time_create block_time_create, b.time_update block_time_update, d.name dataset, d.is_open dataset_is_open, d.is_transient dataset_is_transient, d.time_create dataset_time_create, d.time_update dataset_time_update, s.name dbs, s.dls, s.time_create dbs_time_create from t_dps_block b join t_dps_file f on f.inblock = b.id join t_adm_node n on n.id = f.node join t_dps_dataset d on b.dataset = d.id join t_dps_dbs s on d.dbs = s.id where ((d.name <*>= :d_name1)(f.logical_name like :f_logical_name1 escape '\')) order by s.name, d.name, b.name') [for Statement "select n.name node, f.logical_name, f.checksum, f.filesize, f.time_create file_time_create, b.name block, b.files, b.bytes, b.is_open block_is_open, b.time_create block_time_create, b.time_update block_time_update, d.name dataset, d.is_open dataset_is_open, d.is_transient dataset_is_transient, d.time_create dataset_time_create, d.time_update dataset_time_update, s.name dbs, s.dls, s.time_create dbs_time_create from t_dps_block b join t_dps_file f on f.inblock = b.id join t_adm_node n on n.id = f.node join t_dps_dataset d on b.dataset = d.id join t_dps_dbs s on d.dbs = s.id where ((d.name = :d_name1)(f.logical_name like :f_logical_name1 escape '\')) order by s.name, d.name, b.name"].\n (for \n select\n \n n.name node,\n f.logical_name,\n f.checksum,\n f.filesize,\n f.time_create file_time_create, \n b.name block,\n b.files,\n b.bytes,\n b.is_open block_is_open,\n b.time_create block_time_create,\n b.time_update block_time_update,\n d.name dataset,\n d.is_open dataset_is_open,\n d.is_transient dataset_is_transient,\n d.time_create dataset_time_create,\n d.time_update dataset_time_update,\n s.name dbs,\n s.dls,\n s.time_create dbs_time_create\n from\n t_dps_block b\n \n join t_dps_file f on f.inblock = b.id\n join t_adm_node n on n.id = f.node \n join t_dps_dataset d on b.dataset = d.id\n join t_dps_dbs s on d.dbs = s.id\n where ((d.name = :d_name1)(f.logical_name like :f_logical_name1 escape '\')) \n order by s.name, d.name, b.name\n ) at /data/srv/beHG1606f/sw/slc6_amd64_gcc493/cms/PHEDEX-datasvc/2.3.22/perl_lib/PHEDEX/Core/DB.pm line 266.\n

The underlying reason is that build_multi_filter is applied twice, resulting in an incorrect filter in the SQL:

https://github.com/dmwm/PHEDEX/blob/451e5833cc13a5e474e33edd4a839c2c68d6e80f/perl_lib/PHEDEX/Web/SQL.pm#L3475-L3483