Details
-
Bug
-
Status: Closed
-
Minor
-
Resolution: Fixed
-
0.4
Description
--retrieveFilesByName and --retrieveFilesById have a bug.
Sequence of events:
Here's the command that I ran:
filemgr-client --url http://localhost:9101 --operation --retrieveFilesByName --productName 1332838758.h5 --destination /home/kat/ --transferer org.apache.oodt.cas.filemgr.datatransfer.LocalDataTransferFactory
So, the --retrieveFilesByName calls an XML-RPC "filemgr.getProductByName" to get the product details. However on the File Manager side in org.apache.oodt.cas.filemgr.catalog.LuceneCatalog.java line 412 and 415:
return getProductByName(productName, false) /where the call signature is (defined on line 415 of the same file)/
getProductByName(String productName, boolean getRefs)
getRefs is now passed (as false) as a parameter to the toCompleteProduct(..) method, which seems to indicate that the product references should not be returned.
This is then received by the filemgr client in the methodResponse with the references set as [] i.e. an empty list
On the client side in org.apache.oodt.cas.filemgr.datatransfer.LocalDataTransferer.java line 358 and 359 of the copyFilesToDir() method:
List<Reference> refs = product.getProductReferences();
for (Iterator<Reference> i = refs.iterator(); i.hasNext()
Since refs is empty the for loop loops zero times.
Then a bit further up the call chain in org.apache.oodt.cas.filemgr.cli.action.RetrieveFilesCliAction.java line 55 to 60:
if (product != null)
{ dt.retrieveProduct(product, destination); }else
{ throw new Exception("Product was not found"); }dt.retrieveProduct(product, destination);
It appears that dt.retrieveProduct is called a second time outside the if / else statement.