24.4.9での変更点

Oracle NoSQL Databaseリリース24.4.9 Enterprise Editionでは次の変更が行われました。

バグとパフォーマンスの修正

  1. ストアのTLS資格証明ファイルの管理が改善されました。

    新しいTLS資格証明と現在のTLS資格証明を管理するための次の2つの新しいコマンドが管理CLIに追加されました:

    • plan update-tls-credentialsコマンドを使用すると、ストア内のSNAで使用される共有TLS資格証明のセットに対する更新を取得しインストールできます。
    • show tls-credentialsコマンドでは、現在インストールされているTLS資格証明、およびインストール待ちの更新について、すべてのSNAの情報が表示されます。更新された資格証明を再起動の必要なくストア・サービスで読み取れるように、変更を加えることもできます。

      [KVSTORE-1979]

  2. 前のネットワーク・リストアの途中でクラッシュした場合は環境の再オープン時にネットワーク・リストアが発生しなくなるというバグを修正しました。

    このバグでは、ノードで再起動が試みられるたびに次のようなLOG_FILE_NOT_FOUNDまたはLOG_INTEGRITYエラーが繰り返し発生します:

    SEVERE com.sleepycat.je.EnvironmentFailureException: fetchIN 0x1225/0x313b4d9c parent IN=347606 IN class=com.sleepycat.je.tree.IN lastFullLsn=0x1226/0x396fe2af lastLoggedLsn=0x1226/0x396fe2af parent.getDirty()=false idKey=[194 133 0 116 100 97 56 52 112 100 114 102 54 116 100 97 56 52 ] state=0 expires=never LOG_FILE_NOT_FOUND: Log file missing, log is likely invalid. Environment is invalid and must be closed.
    	at com.sleepycat.je.tree.IN.handleCorruption(IN.java:2940)
    	at com.sleepycat.je.tree.IN.handleCleanedIN(IN.java:3065)
    	at com.sleepycat.je.tree.IN.fetchINWithNoLatch(IN.java:2411)
    	at com.sleepycat.je.tree.IN.fetchINWithNoLatch(IN.java:2234)
    	at com.sleepycat.je.tree.Tree.getParentINForChildIN(Tree.java:1301)
    	at com.sleepycat.je.recovery.RecoveryManager.recoverChildIN(RecoveryManager.java:1554)
    	at com.sleepycat.je.recovery.RecoveryManager.recoverIN(RecoveryManager.java:1379)
    	at com.sleepycat.je.recovery.RecoveryManager.replayOneIN(RecoveryManager.java:1333)
    	at com.sleepycat.je.recovery.RecoveryManager.readNonRootINs(RecoveryManager.java:1296)
    	at com.sleepycat.je.recovery.RecoveryManager.buildINs(RecoveryManager.java:1043)
    	at com.sleepycat.je.recovery.RecoveryManager.buildTree(RecoveryManager.java:899)
    	at com.sleepycat.je.recovery.RecoveryManager.recover(RecoveryManager.java:376)
    	at com.sleepycat.je.dbi.EnvironmentImpl.finishInit(EnvironmentImpl.java:861)
    	at com.sleepycat.je.dbi.DbEnvPool.openEnv(DbEnvPool.java:153)
    	at com.sleepycat.je.Environment.makeEnvironmentImpl(Environment.java:284)
    	at com.sleepycat.je.Environment.(Environment.java:257)
    	at com.sleepycat.je.rep.ReplicatedEnvironment.(ReplicatedEnvironment.java:606)
    	at com.sleepycat.je.rep.ReplicatedEnvironment.(ReplicatedEnvironment.java:457)
    	at oracle.kv.impl.rep.RepEnvHandleManager.openEnv(RepEnvHandleManager.java:918)
    	at oracle.kv.impl.rep.RepEnvHandleManager.renewRepEnv(RepEnvHandleManager.java:743)
    	at oracle.kv.impl.rep.RepNode.startup(RepNode.java:1003)
    	at oracle.kv.impl.rep.RepNodeService.start(RepNodeService.java:680)
    	at oracle.kv.impl.rep.RepNodeService.start(RepNodeService.java:622)
    	at oracle.kv.impl.sna.ManagedRepNode$1.execute(ManagedRepNode.java:327)
    	at oracle.kv.impl.fault.ProcessFaultHandler.execute(ProcessFaultHandler.java:179)
    	at oracle.kv.impl.sna.ManagedRepNode.start(ManagedRepNode.java:323)
    	at oracle.kv.impl.sna.ManagedService.main(ManagedService.java:785)

    [KVSTORE-2494]

  3. 次のスタックのメッセージはクライアント・ドライバによってログに記録される場合があるが実際には不適切な警告であるという問題を修正しました:
    2024-10-13 21:59:32.767 UTC SEVERE - Uncaught exception in thread:KVoracle.kv.impl.async.dialog.nio.NioChannelThreadPool_2 at: java.base/java.lang.Thread.getStackTrace(Thread.java:2514)
            oracle.kv.impl.util.CommonLoggerUtils.getStackTrace(CommonLoggerUtils.java:74)
            oracle.kv.impl.util.CommonLoggerUtils.getStackTrace(CommonLoggerUtils.java:60)
            oracle.kv.KVStoreFactory$KVSHandler.uncaughtException(KVStoreFactory.java:383)
            oracle.kv.impl.api.parallelscan.BaseParallelScanIteratorImpl$Stream.lambda$0(BaseParallelScanIteratorImpl.java:952)
            ...

    [KVSTORE-2268]

  4. サブスクライブされた表に対するトランザクションが中断されるとNoSQLSubscription#getCurrentPosition()から返された現在のストリーム位置が特定のシャードでブロックされる場合があるというバグを修正しました。

    [KVSTORE-2452]

  5. マルチリージョン表のキー部分のみから作成された索引に関するバグを修正しました。マルチリージョン表に対する削除と挿入によってNullPointerExceptionまたはSecondaryIntegrityExceptionが発生する可能性があり、その場合は索引を削除してから再作成する必要があります。

    [KVSTORE-2485]

  6. 複数リージョン表が3つ以上のリージョンにデプロイされている場合に、リージョン間サービス・エージェントによって使用されるストリーム・チェックポイント表が誤って削除される可能性があるというバグを修正しました。

    [KVSTORE-2406]

  7. 管理プロセスが繰り返し失敗し再起動によってリカバリできないというバグを修正しました。この問題は、表の作成と削除が頻繁に実行される場合によく発生します。この失敗により、管理ログに次のようなスタック・トレースが生成されます:
    2024-08-19 22:39:01.127 UTC SEVERE [admin2] Process exiting
    com.sleepycat.je.ThreadInterruptedException: (JE 24.3.6) 2(2):... java.lang.InterruptedException THREAD_INTERRUPTED: InterruptedException may cause incorrect internal state, unable to continue. Environment is invalid and must be closed.
    	at com.sleepycat.je.ThreadInterruptedException.wrapSelf(ThreadInterruptedException.java:107)
    	at com.sleepycat.je.dbi.EnvironmentImpl.checkIfInvalid(EnvironmentImpl.java:1773)
    	at com.sleepycat.je.dbi.EnvironmentImpl.checkOpen(EnvironmentImpl.java:1782)
    	at com.sleepycat.je.Environment.checkOpen(Environment.java:2395)
    	at com.sleepycat.je.DbInternal.checkOpen(DbInternal.java:111)
    	at com.sleepycat.je.rep.ReplicatedEnvironment.checkOpen(ReplicatedEnvironment.java:1039)
    	at com.sleepycat.je.rep.ReplicatedEnvironment.getState(ReplicatedEnvironment.java:751)
    	at oracle.kv.impl.admin.Admin.getReplicationMode(Admin.java:3251)
        ...
    Caused by: com.sleepycat.je.ThreadInterruptedException: (JE 24.3.6) 2(2):... java.lang.InterruptedException THREAD_INTERRUPTED: InterruptedException may cause incorrect internal state, unable to continue. Environment is invalid and must be closed.
        ...
    	at oracle.kv.impl.admin.AdminDatabase.get(AdminDatabase.java:240)
    	at oracle.kv.impl.admin.GeneralStore.getParameters(GeneralStore.java:59)
    	at oracle.kv.impl.admin.AdminStores.getParameters(AdminStores.java:179)
        ...
    	at oracle.kv.impl.admin.Admin.getCurrentParameters(Admin.java:1240)
    	at oracle.kv.impl.admin.AdminSecurity$AdminParamsHandle.getParameters(AdminSecurity.java:216)
    	at oracle.kv.impl.security.login.ParamTopoResolver.getStorageNode(ParamTopoResolver.java:155)
    	at oracle.kv.impl.security.login.ParamTopoResolver.getStorageNode(ParamTopoResolver.java:84)
    	at oracle.kv.impl.security.login.InternalLoginManager.getHandle(InternalLoginManager.java:132)
    	at oracle.kv.impl.api.AsyncRequestDispatcherImpl.withLoginHandle(AsyncRequestDispatcherImpl.java:695)
        ...
    Caused by: java.lang.InterruptedException
    	at java.base/java.util.concurrent.locks.ReentrantLock$Sync.tryLockNanos(ReentrantLock.java:167)
        ...
    	at com.sleepycat.je.Database.get(Database.java:1261)
    	at oracle.kv.impl.admin.AdminDatabase.get(AdminDatabase.java:240)
    	at oracle.kv.impl.admin.GeneralStore.getParameters(GeneralStore.java:59)
    	at oracle.kv.impl.admin.AdminStores.getParameters(AdminStores.java:179)
        ...

    [KVSTORE-2425]

  8. 問合せで'where'句内に変数を含むUUIDフィールドがあり、そのUUIDフィールドが主キー・フィールドの1つであり、フル・シャード・キーが'where'句内で指定されている場合に、その問合せを準備すると「無効なUUID文字列」というメッセージを含むIllegalArgumentExceptionがスローされることがあるというバグを修正しました。

    [KVSTORE-2451]

  9. 準備した問合せが(a)参照先の表1つ以上が削除されて別のスキーマで再作成された後か、(b)問合せで使用されている索引が削除されて別のスキーマで再作成された後か、(c)参照先の表1つ以上が変更された(alter table文を使用)後に実行されるという場合に対処しました。

    (a)の場合は、問合せによってIllegalArgumentExceptionがスローされます。(b)と(c)の場合は、問合せによって、その問合せを実行前に再度準備する必要があることを示すPrepareQueryExceptionがスローされます。

    [KVSTORE-2475]

  10. 'order by'を含む問合せで正しくない順序で結果が返される原因となっていた、問合せのバグを修正しました。このバグが発生するのは、(a)子孫表(または左外部結合)があるネストした表が問合せに含まれている場合や、(b)問合せでターゲット表の完全主キーが指定されている場合や、(c)問合せで子孫表内のフィールドを基準にソートされている場合や、(d)順序付けが降順の場合です。たとえば、次の問合せ(列'ida'は表Aの主キー)では、要求された降順ではなく、昇順で結果が返されています:
    select a.ida as a_ida, b.ida as b_ida, b.idb as b_idb from nested tables(A a descendants(A.B
          b)) where a.ida = 40 order by b.idb desc

    [KVSTORE-2462]

  11. 次のようなスタック・トレースでのSecondaryIntegrityExceptionが原因でクライアント・リクエストが失敗する場合があるというバグを修正しました:
    Caused by: com.sleepycat.je.SecondaryIntegrityException: (JE 24.3.4) Secondary is corrupt: the primary record contains a key that is not present in the secondary secDbName=IdxIndex.DataCheck priDbName=p173 expiration=2026-10-28.00 NOT_EXTINCT priLsn=0x4/0xaa1fe8a
        at com.sleepycat.je.SecondaryDatabase.deleteKey(SecondaryDatabase.java:1526)
        at com.sleepycat.je.SecondaryDatabase.updateSecondary(SecondaryDatabase.java:1347)
        at com.sleepycat.je.Cursor.putNotify(Cursor.java:2826)
        at com.sleepycat.je.Cursor.putNoDups(Cursor.java:2640)
        at com.sleepycat.je.Cursor.putInternal(Cursor.java:2538)
        at com.sleepycat.je.Cursor.putInternal(Cursor.java:846)
        at com.sleepycat.je.Database.put(Database.java:1435)
        at oracle.kv.impl.rep.migration.MigrationTarget$Reader$CopyOp.execute(MigrationTarget.java:1545)
        at oracle.kv.impl.rep.migration.MigrationTarget.consumeOps(MigrationTarget.java:998)
    この問題は、サーバー側での同時拡張度操作が失敗して、セカンダリ整合性問題が発生した場合にのみ発生します。このような障害のトリガー・イベントの1つとして考えられるのは、ディスクIOエラーであり、次のようなサーバー側ロギング・メッセージが生成されます:
    java.io.IOException: No space left on device LOG_WRITE: IOException on write,
    log is likely incomplete. Environment is invalid and must be closed.
    この問題により、複数のクライアント操作に失敗する可能性があります。正常なノードで拡張度操作を再開し、セカンダリ索引を再構築すると、ストア自体をリカバリできる場合があります。

    [KVSTORE-2372]

  12. 同じタイプの複数のサービスをホストするストレージ・ノードがあるストア構成で使用した場合にまれに管理CLIのpingまたはverify構成コマンドでレプリケーション・ノードまたはアービタについて正しくないステータスがレポートされるという問題の原因を修正しました。

    [KVSTORE-2383]