20.3.26での変更点

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

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

  1. SSLDataChannelに関連するデッドロックの問題が修正されました。この問題により、スレッド・ダンプで次のようなスタック・トレースが生成されます。
    "ReplicaOutputThread" #829 daemon prio=5 os_prio=0 cpu=8695.34ms elapsed=66577.11s tid=0x000055f030c1f800 nid=0x49f2 waiting for monitor entry  [0x00007fc720171000]
       java.lang.Thread.State: BLOCKED (on object monitor)
    	at com.sleepycat.je.rep.utilint.net.SSLDataChannel$ChannelWriteTask.run(SSLDataChannel.java:1425)
    	- waiting to lock <0x00000010046df7e0> (a java.nio.HeapByteBuffer)
    	at com.sleepycat.je.rep.utilint.net.SSLDataChannel$ChannelWriteTask.access$1100(SSLDataChannel.java:1413)
    	at com.sleepycat.je.rep.utilint.net.SSLDataChannel.flush(SSLDataChannel.java:590)
        ......
    "REPLICA rg15-rn2(2)" #68 daemon prio=5 os_prio=0 cpu=9106.65ms elapsed=68622.76s tid=0x000055f030c55800 nid=0xb24 in Object.wait()  [0x00007fc722b93000]
       java.lang.Thread.State: WAITING (on object monitor)
    	at java.lang.Object.wait(java.base@11.0.8/Native Method)
    	- waiting on 
    	at java.lang.Object.wait(java.base@11.0.8/Object.java:328)
    	at com.sleepycat.je.rep.utilint.net.SSLDataChannel$ChannelTask.transitToInProgress(SSLDataChannel.java:1335)
    	- waiting to re-lock in wait() <0x00000010046e01b8> (a java.lang.Object)
    	at com.sleepycat.je.rep.utilint.net.SSLDataChannel$ChannelWriteTask.run(SSLDataChannel.java:1423)
    	at com.sleepycat.je.rep.utilint.net.SSLDataChannel$ChannelWriteTask.access$1100(SSLDataChannel.java:1413)
    	at com.sleepycat.je.rep.utilint.net.SSLDataChannel.doWrap(SSLDataChannel.java:910)
    	- locked <0x00000010046df7e0> (a java.nio.HeapByteBuffer)
    	at com.sleepycat.je.rep.utilint.net.SSLDataChannel.handshake(SSLDataChannel.java:847)
    	at com.sleepycat.je.rep.utilint.net.SSLDataChannel.unwrap(SSLDataChannel.java:771)
    	at com.sleepycat.je.rep.utilint.net.SSLDataChannel.read(SSLDataChannel.java:403)
    	......
    [KVSTORE-1021]
  2. SSLDataChannelに関連するライブロックの問題が修正されました。この問題は、SSLDataChannel doWrapまたはdoUnwrapの非アクティブなチャネルとして発生します。次のようなスタック・トレースがスレッド・ダンプに表示されます。
       java.lang.Thread.State: RUNNABLE
            at java.lang.Object.hashCode(java.base@11.0.6/Native Method)
            at java.util.concurrent.ConcurrentHashMap.replaceNode(java.base@11.0.6/ConcurrentHashMap.java:1111)
            at java.util.concurrent.ConcurrentHashMap.remove(java.base@11.0.6/ConcurrentHashMap.java:1102)
            at com.sleepycat.je.utilint.LoggerUtils.logMsg(LoggerUtils.java:538)
            at com.sleepycat.je.utilint.LoggerUtils.logMsg(LoggerUtils.java:445)
            at com.sleepycat.je.rep.utilint.net.DataChannelFactoryBuilder$ChannelInstanceLogger.log(DataChannelFactoryBuilder.java:417)
            at com.sleepycat.je.rep.utilint.net.SSLDataChannel$ChannelWriteTask.run(SSLDataChannel.java:1636)
            - locked <0x00000000f037cc80> (a java.lang.Object)
            at com.sleepycat.je.rep.utilint.net.SSLDataChannel$ChannelWriteTask.access$1400(SSLDataChannel.java:1613)
            at com.sleepycat.je.rep.utilint.net.SSLDataChannel.doWrap(SSLDataChannel.java:990)
    	......
       java.lang.Thread.State: RUNNABLE
            at java.lang.Object.notifyAll(java.base@11.0.6/Native Method)
            at com.sleepycat.je.rep.utilint.net.SSLDataChannel$ChannelTask.transitToIdle(SSLDataChannel.java:1513)
            - locked <0x00000000f039e788> (a java.lang.Object)
            at com.sleepycat.je.rep.utilint.net.SSLDataChannel$ChannelReadTask.run(SSLDataChannel.java:1808)
            at com.sleepycat.je.rep.utilint.net.SSLDataChannel$ChannelReadTask.access$1800(SSLDataChannel.java:1751)
            at com.sleepycat.je.rep.utilint.net.SSLDataChannel.readChannelForBufUnderflow(SSLDataChannel.java:1168)
            at com.sleepycat.je.rep.utilint.net.SSLDataChannel.doUnwrap(SSLDataChannel.java:1079)
            - locked <0x00000000f0386f20> (a java.lang.Object)
            - locked <0x00000000f0386ea8> (a java.lang.Object)
            at com.sleepycat.je.rep.utilint.net.SSLDataChannel.handshake(SSLDataChannel.java:930)
            at com.sleepycat.je.rep.utilint.net.SSLDataChannel.unwrap(SSLDataChannel.java:828)
            at com.sleepycat.je.rep.utilint.net.SSLDataChannel.read(SSLDataChannel.java:441)
        ......
    
    [KVSTORE-1022]
  3. まれに操作で次のエラーが返されることがあるという不具合を修正しました。
    java.lang.IllegalStateException: Expected state BEFORE_READ, was DONE
    	at oracle.kv.impl.async.AbstractResultHandler.checkCallOnResult(AbstractResultHandler.java:71)
    	at oracle.kv.impl.async.AbstractResultHandler.checkCallOnResult(AbstractResultHandler.java:49)
    	at oracle.kv.impl.async.AbstractDelegatingResultHandler.onResult(AbstractDelegatingResultHandler.java:49)
    	at oracle.kv.impl.async.AsyncVersionedRemoteDialogInitiator.onCanRead(AsyncVersionedRemoteDialogInitiator.java:157)
    	at oracle.kv.impl.async.dialog.DialogContextImpl$OnCanReadTask.doWork(DialogContextImpl.java:1028)
    	at oracle.kv.impl.async.dialog.DialogContextImpl$OnCanReadTask.run(DialogContextImpl.java:1017)
    	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    	at oracle.kv.impl.async.dialog.nio.NioChannelExecutor.runTasks(NioChannelExecutor.java:1493
    [KVSTORE-880]
  4. ストレージ・ノードでCPUリソースが制限されていて、多数のクライアント接続がある場合にOutOfMemoryErrorが発生する可能性があるストレージ・ノードのスケーラビリティの問題が修正されました。

    [KVSTORE-390]

  5. 指定されたサイズ制限で予期しない結果を返す全表スキャンに基づくGROUP BY問合せのバグが修正されました。バグはクラウド環境にのみ存在します。

    [NOSQL-338]

  6. 問合せでタイムスタンプ・フィールドがバインド変数と比較され、タイムスタンプ・フィールドが索引付けされている場合に例外が発生するバグが修正されました。また、タイムスタンプ・フィールドとタイムスタンプ値の精度が異なる場合に、タイムスタンプ・フィールドとタイムスタンプ値を比較する問合せでタイムスタンプ索引を使用できます。

    [KVSTORE-950]

  7. UPDATE文のADD句でバインド変数が使用された場合に例外を引き起こすバグが修正されました。これは、バインド変数がターゲット配列に追加する新しい要素であり、位置式がない場合です。たとえば:
    declare $userid integer;
    update teams t
    add t.info.teams[1].userids $userid
    where id = 1
    returning *
    [KVSTORE-963]
  8. 準備されたプロキシベースの問合せが表の削除後に実行された場合、NPEが発生します。これで、QueryExceptionが生成されます。

    [KVSTORE-920]

  9. 一時的なネットワーク問題が発生したときにInternalFaultExceptionが捕捉されないことが原因でレプリケーション・ノード、またはストレージ・ノード内のMasterRebalanceThreadが想定外に終了することがあるという問題を修正しました。この場合、これらの両方がSessionAccessExceptionのために終了したことが、ロギング出力に表示されますが、これは正しくないため、修正されました。
    2021-02-12 10:16:26.575 UTC SEVERE [sn6] MasterRebalanceThread thread exiting due to exception.
    oracle.kv.impl.security.SessionAccessException: java.rmi.ConnectIOException: Exception creating connection to:
    ...
    2021-02-12 10:16:26.575 UTC SEVERE [sn6] MasterRebalanceThread thread exiting due to exception.
    oracle.kv.impl.security.SessionAccessException: java.rmi.ConnectIOException: Exception creating connection to:
    ...
    [KVSTORE-942]
  10. REMOVE句とともにUPDATE文を使用してARRAY(RECORD)またはMAP(RECORD)から要素を削除すると、java.lang.IllegalArgumentExceptionの「Error: at (...) Cannot remove fields from records.」で失敗するバグが修正されました。

    [KVSTORE-1200]

  11. リリース20.2以前で記述されたSTRING型の同種のJSON配列を含む行をリリース20.3以降でデシリアライズできないという問題を修正しました。この問題は、get()の結果または問合せの結果にない行について、値をデシリアライズする必要がある場合に発生します。データはそのまま残りますが、アクセスできません。

    [KVSTORE-1347]

  12. リリース19.5より前に作成され、一度も変更されていないデータがある表に対して問合せが実行され、"modification time not available"を示すエラーで失敗する可能性がある問題を修正しました。このような行に対してRow.getLastModificationTime()がコールされると、同じエラーが発生する可能性があります。

    [KVSTORE-1234]

  13. アップグレード中に正しくないバージョンのシリアライズ・コードが使用されたことが原因でアップグレード後にRN(レプリケーション・ノード)がクラッシュする可能性があるという不具合を修正しました。

    [KVSTORE-1361]

  14. UUID列がある表を変更できなくなる(スキーマ進化前に挿入された行がスキーマ進化後にデシリアライズされない)という不具合を修正しました。

    [KVSTORE-1357]

  15. プロキシ(httpproxy)を使用する複数リージョン表に対するput操作がエラー「The region id cannot be 0 for multi-region table」で失敗するという問題を修正しました。

    [KVSTORE-1331]

APIの変更点

  1. Row.getExpirationTime()で、基礎となる行メタデータを取得できなくても例外がスローされなくなりました。かわりに、有効期限がないことを示す0が返されます。TTLがないか、TTL機能の導入前に書き込まれた行の有効期限は0です

    [KVSTORE-1234]