{"record":{"id":"5396bd1960714e79","repo":"pentaho/pentaho-kettle","slug":"fatal-error-remote-rows-udx-can-t-be-connected-please-check","errorCode":null,"errorMessage":"Fatal Error: Remote_rows UDX can't be connected! Please check...","messagePattern":"Fatal Error: Remote_rows UDX can't be connected! Please check\\.\\.\\.","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"critical","filePath":"plugins/lucid-db-streaming-loader/core/src/main/java/org/pentaho/di/trans/steps/luciddbstreamingloader/LucidDBStreamingLoader.java","lineNumber":199,"sourceCode":"            data.objOut = new ObjectOutputStream( data.client.getOutputStream() );\n\n            if ( log.isDebug() ) {\n              logDebug( \"Local socket connection is ready\" );\n            }\n\n            break;\n\n          } catch ( SocketException se ) {\n\n            if ( try_cnt < 5 ) {\n\n              logBasic( \"Local socket connection is not ready, so try to connect in 5 second\" );\n              Thread.sleep( 5000 );\n              data.client = null;\n              try_cnt++;\n            } else {\n\n              throw new KettleException( \"Fatal Error: Remote_rows UDX can't be connected! Please check...\" );\n            }\n\n          } catch ( Exception ex ) {\n\n            throw ex;\n          }\n\n        }\n\n        // Get combined set of incoming fields, reducing duplicates\n\n        ArrayList<String> combined = new ArrayList<String>();\n        // Add all keys\n        for ( int i = 0; i < meta.getFieldStreamForKeys().length; i++ ) {\n          combined.add( meta.getFieldStreamForKeys()[i] );\n        }\n        // Add all fields that are NOT already in keys\n        for ( int i = 0; i < meta.getFieldStreamForFields().length; i++ ) {","sourceCodeStart":181,"sourceCodeEnd":217,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/lucid-db-streaming-loader/core/src/main/java/org/pentaho/di/trans/steps/luciddbstreamingloader/LucidDBStreamingLoader.java#L181-L217","documentation":"The LucidDBStreamingLoader connects to LucidDB's REMOTE_ROWS UDX over a local socket; if the client fails to connect after retrying (try_cnt exhausted, connection still null), it throws the fatal 'Remote_rows UDX can't be connected' KettleException.","triggerScenarios":"During initialization the socket client to the LucidDB server-side REMOTE_ROWS UDX cannot be established within the retry loop (each retry waits 5s); after max attempts the step aborts.","commonSituations":"LucidDB server not running or not listening on the expected port; firewall blocking the local socket; LucidDB restarted mid-transformation; server busy/out of memory refusing new UDX connections; wrong host/port configuration.","solutions":["Verify the LucidDB server is running and accepting connections (check server logs and port)","Check firewall/localhost socket configuration between the Kettle host and LucidDB","Increase retry tolerance or start LucidDB before launching the transformation","Restart LucidDB if it is refusing new UDX connections due to resource exhaustion"],"exampleFix":"// before: server down, connect loop exhausts retries\nthrow new KettleException(\"Fatal Error: Remote_rows UDX can't be connected! Please check...\");\n// after: ensure server is started first\n$ ./lucidDbServer start  # then run the transformation","handlingStrategy":"retry","validationCode":"// Check LucidDB reachability before starting the loader\nSocket s = new Socket();\ntry {\n  s.connect(new InetSocketAddress(host, port), 5000);\n} finally { s.close(); }","typeGuard":null,"tryCatchPattern":"try {\n  loader.initAndConnect();\n} catch (KettleException e) {\n  if (e.getMessage().contains(\"Remote_rows UDX can't be connected\")) {\n    // wait and retry once after confirming LucidDB is up\n    Thread.sleep(10000);\n    loader.initAndConnect();\n  } else { throw e; }\n}","preventionTips":["Start LucidDB before launching streaming-load transformations","Monitor LucidDB server health and logs","Keep firewall rules allowing the local UDX socket","Add a server-startup step in the job before the transformation"],"tags":["luciddb","socket","connection"],"backgroundTag":"connection-refused","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}