Known Problems
The following is a list of problems that the OGSA-DAI team know about and which will be addressed in future. If you have any others that you feel should be added to this list then please let us know.
You may also want to consult the platform-specific FAQ and general FAQ.
- Performance:
- Forwarding very large amounts of data to an OGSA-DAI service or retrieving these from an OGSA-DAI service may give rise to java.lang.OutOfMemoryError errors on the OGSA-DAI server. There is a FAQ which describes possible solutions.
- For eXist we have found that the Web services container may run out of memory if it is hosting OGSA-DAI or other Grid middleware (e.g. Globus Toolkit) as well as eXist.
- Retrieving database metadata with the extractDatabaseSchema activity for DB2/Cloudscape can sometimes retrieve unrelated meta-data and also cause OGSA-DAI to crash.
- Retrieving database metadata for all available tables with the extractDatabaseSchema activity for Oracle causes a server-side java.lang.OutOfMemoryError.
- Attempting to return a very large data set in a response can cause a server-side java.lang.OutOfMemoryError. This can be avoided by submitting an asynchronous request (one that uses an outputStream) and retreiving the results using a data service's data transport operations.
- Queries of tables for millions of small rows can eventually cause a server-side java.lang.OutOfMemoryError even if using stream activities and data transport operations.
- The fileWritingActivity attempts to read the whole file in a oner and so could cause a server-side java.lang.OutOfMemoryError for very large files.
- Some databases, such as dBASE IV database on Microsoft Windows 2000, allow unusual characters, such as 0xC to be contained in certain field types. When field values containing this character, OGSA-DAI encodes them into invalid XML that subsequently causes Xerces-dependent components to raise an org.xml.sax.SAXParseException.
- Activities that have two outputs can sometimes cause java.lang.OutOfMemoryErrors to occur server-side if manipulating large amounts of data. This can arise when using the GZIP activities for example.
- Such activities are driven by one of the two connected activities and the other activity can accumulate data without processing it. So, for example for the GZIP activities OGSA-DAI focuses on the GZIP meta-data output steam and data only flows from this stream when a file has been completely unzipped. Therefore for large files the whole contents of the file flows into the activity and is buffered without being sent on.
- OGSA-DAI's GZIP activities will warn if memory usage is close to maximum and throw an OGSA-DAI exception server-side so that the Web services container does not crash.
- Error and exception handling:
- The failure of a single activity in a request will cause the status of all other activities to be set to TERMINATED, even those that are not connected and succeeded.
- The data transport activities can gulp exceptions. For example if an sqlQueryStatement with a incorrectly formed SQL query statement is connected to an outputStream activity then attempting to pull data from the outputStream using the data transport operations results in no data - no indication of an error is given to the client.
- The uk.org.ogsadai.exception.DAILogger methods can sometimes log the wrong line numbers. Searching the logs will usually reveal where the problem actually arose.
- If an error occurs during execution of a relational activity then server-side information may be returned to the client. This is because OGSA-DAI does not, as yet, parse java.sql.SQLExceptions from database drivers to identify problems caused as a result of a client (e.g. a syntactically-incorrect SQL query) and those due to failures server-side (e.g. the wrong password in a roleMap file or a loss of connection to the database.
- Security:
- There is no mechanism to provide authorisation control for data transport streams. Thus anybody who is authorised to access the service and data service resource and is able to guess the name of your data stream could read your data before you do.
- There is no mechanism to provide any authorisation control for data written to the stream servlet. Thus anybody who guesses the name of your data stream could read your data from the servlet before you do.
- For OGSA-DAI WSRF, only GSI Secure Conversation message-level security is supported for inter-service communications using the data transport activities [23].
- Encrypted role map files are currently unsupported.
- If a client does not provide a certificate then deliverFromGridFTP and deliverToGridFTP in a request will fail.
- General:
- The fileAccessActivity encodes text line-by-line if Base 64 encoding is being used. This may give different results from encoding a whole file in a oner.
- Note that when deploying new data service resources dynamically via configurable data service this only works if the JARs required by the data service resource (e.g. database driver JARs) are already within the web service container's library directories. If this is not the case then the container has to be restarted.
- The data service terminate operation currently does nothing. It is intended as a placeholder for future development.
- Meta-data from a database, returned by the extractDatabaseSchemaActivity, can be case-sensitive depending upon the database. For example MySQL might return a table called littleblackbook while DB2 returns LITTLEBLACKBOOK.
- The uk.org.ogsadai.common.BinaryLob class contains unimplemented methods which throw java.lang UnsupportedMethodException.
- Conversion of java.sql.ResultSet to XML WebRowSet returns empty key-column and map properties in the properties element.
- The table-name tag in WebRowSet XML is empty in results produced by Oracle or SQLServer. This is a problem of the JDBC drivers that do not provide table names in the metadata of a java.sql.ResultSet [15].
- deliverFromGridFTP and deliverToGridFTP do not allow the setting of certain GridFTP parameters.
- The deliverToStream activity only works if services are deployed in Tomcat.
- The data accessed from the getNBlocks operation of a data service is returned in an aggregated form. There is no delimitation of each of the N blocks [5].
- Once initiated the commands to add data services or submit queries cannot be prematurely cancelled in the data browser. The user must wait for the command to complere or timeout [16].
- The implementation of the xUpdateStatement activity only supports XUpdate statements provided in-line, not those provided from the output of another activity [57].
- No cleanup if client-service communication times out. Service will just reply as usual [52].
- The undeployment of data service resources from a Web services container is not yet supported.
- There is no read until end-of-file support in fileAccessActivity. The more-flexible readFile activity does support this however [26].
- Bad parameter values to the OGSA-DAI clients can cause seemingly incorrect error messages. For example: if the data service client is used with a bad dai.url parameter e.g.
$ ant dataServiceClient -Ddai.urlxxx -Ddai.resource.id=SQLOne
-Ddai.action=examples/Perform/JDBC/query/select1Row.xml
the error message says incorrectly that:
You have forgotten to provide a data service resource ID using
the -Ddai.resource.id= flag or an action, using the
-Ddai.action=[ PERFORM-DOC | 'deploy' | 'undeploy'] flag!
Even though both those parameters do exist. This is not an OGSA-DAI problem but rather how ANT handles command-line properties - it cannot find the = so it chooses the following space as the point at which a property and its value is delimited.