[teiid-issues] [JBoss JIRA] (TEIID-5969) The "already removed" exception in case of copyLobs=true translator property for MSSQL

Dmitrii Pogorelov (Jira) issues at jboss.org
Wed Jun 10 10:31:35 EDT 2020


Dmitrii Pogorelov created TEIID-5969:
----------------------------------------

             Summary: The "already removed" exception in case of copyLobs=true translator property for MSSQL
                 Key: TEIID-5969
                 URL: https://issues.redhat.com/browse/TEIID-5969
             Project: Teiid
          Issue Type: Quality Risk
          Components: Query Engine
    Affects Versions: 13.1
            Reporter: Dmitrii Pogorelov
            Assignee: Steven Hawkins


We're getting the following exception:
{code:java}
2020-06-10 16:01:45,326 WARN  [org.teiid.PROCESSOR] (Worker21_QueryProcessorQueue272) 1bxj3NJqJLpO TEIID30020 Processing exception for request 1bxj3NJqJLpO.10 'TEIID30328 Unable to evaluate convert(ms_dwh.v1.expr1, string): TEIID30384 Error while evaluating function convert'. Originally ExpressionEvaluationException 'already removed' FileStore.java:156. Enable more detailed logging to see the entire stacktrace. {code}
in the case of MSSQL connector and copyLobs=true in its translator property.

After debugging I discovered that the error occurred actually because of not enough value in

MAX_LOB_MEMORY_BYTES which is used in LobManager. The variable depends on 

org.teiid.maxStringLength which is set usually to 4000 by default. But if someone put a data with text field type in MSSQL having more than, say, 20000 symbols then the field won't be read by Teiid at all, teiid will just throw out the exception mentioned above. Will it be possible to improve LobManager so that it can read Text data dynamically increasing needed memory for the process? Otherwise even setting the org.teiid.maxStringLength to 20000 Teiid can get stuck on a Text data with length more than 20000 symbols.

 

Steps to reproduce:
 # create the v1 table in MSSQL:
{code:java}
CREATE TABLE [dbo].[v1](CREATE TABLE [dbo].[v1]( [expr1] [text] NULL, [b] [int] NULL) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] {code}
2. insert in the table the following data:
{code:java}
insert into test_dwh.dbo.v1 values (replicate(convert(varchar(max),'a'), 20000), 1) ; {code}
3. add MSSQL as a source to Teiid:
{code:java}
                <datasource jndi-name="java:/mssql-test-dwh" pool-name="mssql-test-dwh" enabled="true" use-java-context="true">
                    <connection-url>jdbc:sqlserver://localhost:1433;databaseName=test_dwh</connection-url>
                    <driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
                    <driver>com.microsoft.sqlserver</driver>
                    <new-connection-sql>SET ANSI_WARNINGS OFF</new-connection-sql>
                    <pool>
                        <min-pool-size>2</min-pool-size>
                        <max-pool-size>70</max-pool-size>
                    </pool>
                    <security>
                        <user-name>*****</user-name>
                        <password>*****</password>
                    </security>
                    <validation>
                        <check-valid-connection-sql>select 1</check-valid-connection-sql>
                    </validation>
                    <timeout>
                        <blocking-timeout-millis>120000</blocking-timeout-millis>
                        <idle-timeout-minutes>5</idle-timeout-minutes>
                    </timeout>
                </datasource>{code}
4. add ms model:
{code:java}
<model name="ms_dwh">
        <property name="importer.useFullSchemaName" value="false"/>
        <property name="importer.tableTypes" value="TABLE,VIEW"/>
        <property name="importer.importKeys" value="false"/>
        <property name="importer.schemaPattern" value="dbo"/>
        <source name="dwh_ms" translator-name="mySqlserver" connection-jndi-name="java:/mssql-test-dwh"/>
    </model>{code}
5. add mySqlserver translator:
{code:java}
<translator name="mySqlserver" type="sqlserver">
        <property name="SupportsNativeQueries" value="true"/>
        <property name="copyLobs" value="true"/>
    </translator> {code}
6. try to run the following query:
{code:java}
select cast(expr1 as string) from ms_dwh.v1 ;; {code}



--
This message was sent by Atlassian Jira
(v7.13.8#713008)



More information about the teiid-issues mailing list