solr 9.8.0 とデータインポートハンドラ

(The bot translated the original post https://lists.apache.org/thread/0yj4f495wr0dp4xk7f7ykl870w18j2t9 into Japanese and reposted it under Apache License 2.0. The copyright of posted content is held by the original poster.)
要約:
複数回のデルタインポートを実行すると、Solr がインポートに失敗し、Solr アプリケーションを停止・再起動しない限りインポートできなくなる。
複数回のフルインポートを実行しても同様に、Solr はインポートに失敗し、アプリケーションの停止と再起動が必要になる。
Solr は再起動後は正常に動作するが、それ以降インポート処理は行われない。
4回目のデルタインポートまたは6回目のフルインポートの際に、read call の例外が発生。
例外メッセージ:
rt.DataImportHandlerException: Unable to execute query: select mds.id,
mds.defn_id, mdef.md_key, mdsddd.id PICK_ID, mdsddd.code
CUSTOM_MD_DEFN_DROP_DOWN FROM custom_md mds LEFT OUTER JOIN
custom_md_defn mdef ON mds.defn_id=mdef.id LEFT OUTER JOIN
custom_md_defn_drop_down mdsddd ON mds.pick_id=mdsddd.id WHERE
mds.pick_id IS NOT null AND asset_id='8' Processing Document # 1
at
org.apache.solr.handler.dataimport.DataImportHandlerException.wrapAndThrow(DataImportHandlerException.java:69)
org.apache.solr.handler.dataimport.DataImportHandlerException: Unable to
execute query: select mds.id, mds.defn_id, mdef.md_key, mdsddd.id
PICK_ID, mdsddd.code CUSTOM_MD_DEFN_DROP_DOWN FROM custom_md mds LEFT
OUTER JOIN custom_md_defn mdef ON mds.defn_id=mdef.id LEFT OUTER JOIN
custom_md_defn_drop_down mdsddd ON mds.pick_id=mdsddd.id WHERE
mds.pick_id IS NOT null AND asset_id='8' Processing Document # 1
at
org.apache.solr.handler.dataimport.DataImportHandlerException.wrapAndThrow(DataImportHandlerException.java:69)
~[?:?]
at
org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator.<init>(JdbcDataSource.java:326)
~[?:?]
at
org.apache.solr.handler.dataimport.JdbcDataSource.createResultSetIterator(JdbcDataSource.java:287)
~[?:?]
at
org.apache.solr.handler.dataimport.JdbcDataSource.getData(JdbcDataSource.java:282)
~[?:?]
at
org.apache.solr.handler.dataimport.JdbcDataSource.getData(JdbcDataSource.java:51)
~[?:?]
at
org.apache.solr.handler.dataimport.SqlEntityProcessor.initQuery(SqlEntityProcessor.java:59)
~[?:?]
at
org.apache.solr.handler.dataimport.SqlEntityProcessor.nextRow(SqlEntityProcessor.java:73)
~[?:?]
at
org.apache.solr.handler.dataimport.EntityProcessorWrapper.nextRow(EntityProcessorWrapper.java:267)
~[?:?]
at
org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:494)
~[?:?]
at
org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:535)
~[?:?]
at
org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:433)
~[?:?]
at
org.apache.solr.handler.dataimport.DocBuilder.doFullDump(DocBuilder.java:348)
~[?:?]
at
org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:236)
~[?:?]
at
org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:424)
~[?:?]
at
org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:483)
~[?:?]
at
org.apache.solr.handler.dataimport.DataImporter.lambda$runAsync$0(DataImporter.java:466)
~[?:?]
at java.base/java.lang.Thread.run(Thread.java:834) [?:?]
Caused by: java.sql.SQLRecoverableException: IO Error: Got minus one
from a read call
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:854)
~[?:?]
at
oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:793)
~[?:?]
at
oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:57)
~[?:?]
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:747)
~[?:?]
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:562)
~[?:?]
at
org.apache.solr.handler.dataimport.JdbcDataSource$1.call(JdbcDataSource.java:191)
~[?:?]
at
org.apache.solr.handler.dataimport.JdbcDataSource$1.call(JdbcDataSource.java:171)
~[?:?]
at
org.apache.solr.handler.dataimport.JdbcDataSource.getConnection(JdbcDataSource.java:527)
~[?:?]
at
org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator.<init>(JdbcDataSource.java:316)
~[?:?]
... 15 more
Caused by: oracle.net.ns.NetException: Got minus one from a read call
at oracle.net.ns.NSProtocolNIO.doSocketRead(NSProtocolNIO.java:557)
~[?:?]
at oracle.net.ns.NIOPacket.readNIOPacket(NIOPacket.java:403) ~[?:?]
at
oracle.net.ns.NSProtocolNIO.negotiateConnection(NSProtocolNIO.java:127)
~[?:?]
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:340) ~[?:?]
at
oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1596) ~[?:?]
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:588)
~[?:?]
at
oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:793)
~[?:?]
at
oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:57)
~[?:?]
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:747)
~[?:?]
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:562)
~[?:?]
at
org.apache.solr.handler.dataimport.JdbcDataSource$1.call(JdbcDataSource.java:191)
~[?:?]
at
org.apache.solr.handler.dataimport.JdbcDataSource$1.call(JdbcDataSource.java:171)
~[?:?]
at
org.apache.solr.handler.dataimport.JdbcDataSource.getConnection(JdbcDataSource.java:527)
~[?:?]
at
org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator.<init>(JdbcDataSource.java:316)
~[?:?]
... 15 more
このエラーは Processing Document # 1
(1件目のドキュメント処理中)に発生し、クエリ実行時に read call
が失敗している様子が見られます。
例外の原因の一つとして、以下のようなエラーも発生しています:
Caused by: java.sql.SQLRecoverableException: IO Error: Got minus one from a read call
これは、ソケット通信のエラーによるもので、データベースへの接続が失敗していることを示しています。
さらに深く追うと:
Caused by: oracle.net.ns.NetException: Got minus one from a read call
重要な点:
- このエラーはインポート中、またはインポート後に Solr をシャットダウンしたときに頻繁に発生。
- JDBC 接続が正しくクローズされていないことが原因と思われる。
- 実際にログにも、リソースリークの可能性を示すメッセージが多数表示されている:
JdbcDataSource was not closed prior to finalize(), indicates a bug -- POSSIBLE RESOURCE LEAK!!!
このメッセージは、JdbcDataSource
が使用後に明示的にクローズされていないことを示しており、アプリケーション内にバグがある可能性を指摘しています。
補足:
このような状況は、データベース接続を明示的に閉じないまま放置することに起因します。これは多くのプロジェクトで実際に問題となるケースであり、接続が使われた後は確実に close()
でクローズする必要があります。
トピックへ返信するには、ログインが必要です。