24.3.9での変更点

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

新機能

  1. 複数のサブスクライバが存在する場合の拡張度操作のサポートがStreams APIに追加されました。つまり、拡張度操作の結果としてデータが移動された場合でも、同じキーへの書込みがストリームされ、正しい順序でアプリケーションに配信されます。

    新機能では、チェックポイント表マッパーが複数のシャード・サブスクライバに必要であり、ストリームがマッパーなしで構成されている場合は例外がスローされます。

    [KVSTORE-1153]
  2. 複数リージョン表を使用したリージョン間拡張度操作のサポートが追加されました。つまり、1つ以上のストアが拡張度操作(拡張または縮小)を実行している間、複数リージョン表は正しく動作します。ユーザーが異なるリージョンを接続するサービス・エージェントのグループを構成すると、複数リージョン表では任意のリージョンでの拡張度操作がサポートされるようになりました。その結果、複数リージョン表のデータは、拡張度操作が発生した場合に最終的に整合性が維持されます。

    [KVSTORE-2151]

  3. 新しいTimestamp SQL関数が実装されました: timestamp_ceil、timestamp_floor、timestamp_round、timestamp_trunc、timestamp_bucket、format_timestamp、parse_to_timestamp quarter、day_of_week、day_of_month、day_of_year、to_last_day_of_month。

    [KVSTORE-1157]

  4. 管理シェルのコマンドラインでのSSL資格証明ログインのサポートが追加されました。サーバー側のセキュリティ・ディレクトリからのSSL資格証明が必要であり、管理CLIで-store-security-dirで指定できます。サーバー・セキュリティ・ディレクトリにアクセスできる管理者は、パスワードを忘れた場合に、ストアにログインしてパスワードをリセットできます。

    [KVSTORE-1672]

  5. データ検証のための新しい統計が追加されました。

    新しい統計は次のとおりです:

    • nDbVerifyRuns: DbVerifyが呼び出された回数。
    • DbVerifyRunTime: DBVerifyの合計実行時間
    • nDbVerifyProblemsFound: すべての実行でDbVerifyが検出した問題の合計数。

    [KVSTORE-582]

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

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

    [KVSTORE-2406]

  2. 索引ベースのorder-byおよびIN述語を含む問合せで結果が誤った順序でソートされる可能性があるバグを修正しました。たとえば、info.barに索引がある場合、次の問合せは誤ってソートされた結果を返します:
    select id, f.info.bar
    from foo f
    where f.info.bar in (6, 3, 7)
    order by f.info.bar

    最初にinfo.bar = 6のすべての結果が表示され、次にinfo.bar = 3のすべての結果が表示され、最後にinfo.bar = 7のすべての結果が表示されます。

    [KVSTORE-2409]

  3. select-and-modify問合せの実行で、指定した行が見つからなかったため、想定した変更を行うことができない問題を修正しました。たとえば、行が存在していても、問合せの削除で特定の行の削除に失敗した可能性があります。この問題は、サーバー側のマスター転送が問合せ実行と競合した非常にまれな状況でトリガーされました。サーバー側ではデータ破損はなく、操作を再試行すると、競合が再度検出されないかぎり正しい回答が返されます。

    [KVSTORE-2351]

  4. リモート・リージョンに複数リージョン表がない場合に、XRegionServiceがスタックし、それ以降のリクエストを処理できない可能性があるというバグを修正しました。

    [KVSTORE-2346]

  5. 索引メタデータの初期化のバグを修正しました。索引メタデータ(IndexImplインスタンス)が、初期化中に複数のスレッドによってパラレルにアクセスされると、問題が発生する可能性があります。バグによって、誤った問合せ実行プランが生成される可能性があります。他の操作も失敗する可能性があります。これはkvstore-2185の続きです。24.1でこのバグに対して行われたこの修正は正しくありませんでした。

    [KVSTORE-2185]

  6. リモート・リージョンで使用できないチェックポイントから、複数リージョン表の基礎となるストリームを再開できない場合に、リモート・リージョンで削除された複数リージョン表の行がローカルで削除されない可能性があるというバグを修正しました。

    [KVSTORE-986]

  7. Streams APIが次の2つのセキュリティ・プロパティを認識できない可能性があるバグを修正しました: (1) oracle.kv.ssl.trustStorePasswordおよび(2) oracle.kv.ssl.trustStorePasswordAlias(パスワードを外部パスワード・ストレージに格納する場合)。

    [KVSTORE-2364]

  8. 子表を含む複数リージョン表に対するmultiDelete操作で、祖先キーの削除に失敗する可能性があるバグを修正しました。

    [KVSTORE-2224]

  9. レプリケーション・ノードおよびストレージ・ノードでOutOfMemoryErrorを引き起こす可能性がある問題を修正しました。この障害が発生すると、ヒープ・ダンプでは、接頭辞がNioEndpointHandler$InCompletionHandlerの膨大な数のオブジェクトが示されます。ほとんどの場合、スレッド・ダンプで、KVNioEndpointGroup.backup_1という名前のスレッドにブロッキング・イベント(DNS解決または同期試行待機など)があることも示されます。

    [KVSTORE-2260]

  10. サービスが無効になっている場合は、ping出力を改善して詳細を含めます。ユーザーによってサービスが無効になっている場合、pingテキスト出力に(停止)ステータスが含まれるようになりました。新しいping出力は次のようになります:
    Ping command output: Pinging components of store kvstore based upon topology sequence #18
    10 partitions and 3 storage nodes
    Time: 2024-05-01 16:59:48 UTC   Version: 24.2.0
    Shard Status: healthy: 0 writable-degraded: 0 read-only: 0 offline: 1 total: 1
    Admin Status: writable-degraded
    Zone [name=Zone1 id=zn1 type=PRIMARY allowArbiters=true masterAffinity=false]   RN Status: online: 0 read-only: 0 offline: 2
    Storage Node [sn1] on localhost: 5001    Zone: [name=Zone1 id=zn1 type=PRIMARY allowArbiters=true masterAffinity=false]    Status: RUNNING   Ver: 24.2.0 2024-05-01 16:57:37 UTC  Build id: 6e05b77646a7 Edition: Enterprise    isMasterBalanced: true     serviceStartTime: 2024-05-01 16:59:33 UTC
                    Admin [admin1]                              Status: RUNNING,MASTER        serviceStartTime: 2024-05-01 16:59:36 UTC                stateChangeTime: 2024-05-01 16:59:36 UTC   availableStorageSize: 2 GB
                    Rep Node [rg1-rn1]        Status: UNREACHABLE (Stopped)
    Storage Node [sn2] on localhost: 5021    Zone: [name=Zone1 id=zn1 type=PRIMARY allowArbiters=true masterAffinity=false]    Status: RUNNING   Ver: 24.2.0 2024-05-01 16:57:37 UTC  Build id: 6e05b77646a7 Edition: Enterprise    isMasterBalanced: true     serviceStartTime: 2024-05-01 16:59:34 UTC
                    Admin [admin2]                              Status: RUNNING,REPLICA       serviceStartTime: 2024-05-01 16:59:39 UTC                stateChangeTime: 2024-05-01 16:59:39 UTC   availableStorageSize: 2 GB
                    Rep Node [rg1-rn2]        Status: UNREACHABLE (Stopped)
    Storage Node [sn3] on localhost: 5041    Zone: [name=Zone1 id=zn1 type=PRIMARY allowArbiters=true masterAffinity=false]    Status: RUNNING   Ver: 24.2.0 2024-05-01 16:57:37 UTC  Build id: 6e05b77646a7 Edition: Enterprise    isMasterBalanced: unknown          serviceStartTime: 2024-05-01 16:59:35 UTC
                    Admin [admin3]                              Status: UNREACHABLE (Stopped)         serviceStartTime: ?                stateChangeTime: ?      availableStorageSize: ?
                    Arb Node [rg1-an1]        Status: UNREACHABLE (Stopped)

    ユーザーによってサービスが無効になっている場合、ping JSON出力に'expectedStatus'が'UNREACHABLE'としてリストされるようになりました。新しいJSON出力は次のようになります:

    {
      "topology": {
        ...
      },
      "adminStatus": "",
      "shardStatus": {
       ...
      },
      "zoneStatus": [
        ...
      ],
      "snStatus": [
        {
          ...,
          "rnStatus": [
            {
              "resourceId": "",
              "status": "",
              "expectedStatus": "UNREACHABLE"
            }
          ],
          "anStatus": []
        },
        {
          ...
          "rnStatus": [
            {
              "resourceId": "",
              "status": "",
              "expectedStatus": "UNREACHABLE"
            }
          ],
          "anStatus": []
        },
        {
         ...
          "rnStatus": [],
          "anStatus": [
            {
              "resourceId": "",
              "status": "",
              "expectedStatus": "UNREACHABLE"
            }
          ]
        }
    

    [KVSTORE-2072]

  11. 新しいレプリケーション・ノードの追加に関連する拡張度操作と同時に実行される問合せで、次のようなメッセージで例外が発生する可能性がある問題を修正しました:
    java.lang.IllegalStateException: oracle.kv.impl.query.QueryStateException: Unexpected state in query engine:
    Failed to read base topology with sequence number 1524
    Stack trace: java.lang.RuntimeException: oracle.kv.impl.query.QueryStateException: Unexpected state in query engine:
    Failed to read base topology with sequence number 1524, got null result

    [KVSTORE-2166]

  12. ストアの縮小中にRequestTimeoutExceptionが発生するバグを修正しました。RequestTimeoutExceptionには次のようなスタック・トレースがあり、縮小中に削除されるターゲット・レプリケーション・ノードがリストされます。
    oracle.kv.RequestTimeoutException: Request dispatcher: c1609890242275412734, dispatch timed out after 0 attempt(s) to dispatch the request to an RN. Target: rg3-rn1 (24.1.0) on [2023-11-29 21:18:01.735 UTC]. Timeout: 19999ms
    Fault class name: oracle.kv.RequestTimeoutException
    Dispatch event trace: (DISPATCH_REQUEST_RESPONDED, 2023-11-29 21:18:01.424 UTC, rg3-rn1, null)(OBTAIN_REQUEST_HANDLER, 2023-11-29 21:18:01.552 UTC, rg3-rn3, null)(OBTAIN_REQUEST_HANDLER_RESPONDED, 2023-11-29 21:18:01.552 UTC, rg3-rn3, null)(DISPATCH_REQUEST_RESPONDED, 2023-11-29 21:18:01.552 UTC, rg3-rn3, null)(OBTAIN_REQUEST_HANDLER, 2023-11-29 21:18:01.552 UTC, rg3-rn1, null)(OBTAIN_REQUEST_HANDLER_RESPONDED, 2023-11-29 21:18:01.552 UTC, rg3-rn1, null)(DISPATCH_REQUEST_RESPONDED, 2023-11-29 21:18:01.552 UTC, rg3-rn1, null)(OBTAIN_REQUEST_HANDLER, 2023-11-29 21:18:01.552 UTC, rg3-rn2, null)(OBTAIN_REQUEST_HANDLER_RESPONDED, 2023-11-29 21:18:01.552 UTC, rg3-rn2, null)(DISPATCH_REQUEST_RESPONDED, 2023-11-29 21:18:01.552 UTC, rg3-rn2, null)(OBTAIN_REQUEST_HANDLER, 2023-11-29 21:18:01.681 UTC, rg3-rn3, null)(OBTAIN_REQUEST_HANDLER_RESPONDED, 2023-11-29 21:18:01.681 UTC, rg3-rn3, null)(DISPATCH_REQUEST_RESPONDED, 2023-11-29 21:18:01.681 UTC, rg3-rn3, null)(OBTAIN_REQUEST_HANDLER, 2023-11-29 21:18:01.681 UTC, rg3-rn1, null)(OBTAIN_REQUEST_HANDLER_RESPONDED, 2023-11-29 21:18:01.681 UTC, rg3-rn1, null)(DISPATCH_REQUEST_RESPONDED, 2023-11-29 21:18:01.681 UTC, rg3-rn1, null).
          at oracle.kv.impl.api.RequestDispatcherImpl.getTimeoutException(RequestDispatcherImpl.java:1270)
          at oracle.kv.impl.api.AsyncRequestDispatcherImpl$AsyncExecuteRequest.run(AsyncRequestDispatcherImpl.java:458)
          at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
          at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
          at oracle.kv.impl.async.dialog.nio.NioChannelExecutor$WrappedFutureTask.run(NioChannelExecutor.java:1326)
          at oracle.kv.impl.async.dialog.nio.NioChannelExecutor$ScheduledFutureTask.run(NioChannelExecutor.java:1434)
          at oracle.kv.impl.async.dialog.nio.NioChannelExecutor.runTasks(NioChannelExecutor.java:2030)
          at oracle.kv.impl.async.dialog.nio.NioChannelExecutor.runOnce(NioChannelExecutor.java:1107)
          at oracle.kv.impl.async.dialog.nio.NioChannelExecutor.lambda$run$13(NioChannelExecutor.java:1060)
          at oracle.kv.impl.fault.AsyncEndpointGroupFaultHandler.lambda$static$0(AsyncEndpointGroupFaultHandler.java:21)
          at oracle.kv.impl.async.dialog.nio.NioChannelExecutor.run(NioChannelExecutor.java:1057)
          at java.base/java.lang.Thread.run(Thread.java:842)

    [KVSTORE-2175]

  13. アプリケーションでロギングが有効になっている場合に、ロギング出力に紛らわしい警告メッセージが生成される可能性がある問題を修正しました。このメッセージは、ネットワーク接続のハンドシェイクがタイムアウトしたときにのみ発生しました。メッセージは、修正されてアプリケーションに影響を与えていない内部問題に関連していました。メッセージは次のようなものでした:
    2024-02-27 22:40:39.488 UTC WARNING - Failed to complete future using exception oracle.kv.impl.async.exception.PersistentDialogException: Problem with channel (nosql-vm-test
    -e3-3:40687 (closed)): Connect timeout, handshake is not done within 3000 ms since the endpoint handler is created, endpointHandlerId=680d54f747e78e31, future was completed
    exceptionally: oracle.kv.RequestTimeoutException: Dialog timed out locally. Dialog context before abort: DialogContext[ dialogId=0:680d54f747e78e31 contextId=1 dialogType=40
    1 dialogHandler=AsyncVersionedRemoteDialogInitiator@d06ad71[methodCall=AsyncRequestHandler.ExecuteCall[NOP]] onCreatingEndpoint=true initTimeMillis=22:40:36.488 UTC latencyM
    s=-0.00 timeout=1024 state=INITED_NEED_DIALOGSTART writeState=0 abortInfo=null infoPerf=not sampled] (24.1.11) on [2024-02-27 22:40:37.512 UTC]. Timeout: 1024ms
    Fault class name: oracle.kv.RequestTimeoutException
    java.lang.Throwable
            at oracle.kv.impl.async.FutureUtils.checkedCompleteExceptionally(FutureUtils.java:278)
            at oracle.kv.impl.async.AsyncVersionedRemoteDialogInitiator.onAbort(AsyncVersionedRemoteDialogInitiator.java:229)
            at oracle.kv.impl.async.NullDialogStart.doFail(NullDialogStart.java:104)
            at oracle.kv.impl.async.NullDialogStart.fail(NullDialogStart.java:74)
            at oracle.kv.impl.async.dialog.AbstractDialogEndpointHandler.abortDialogs(AbstractDialogEndpointHandler.java:2135)
            at oracle.kv.impl.async.dialog.AbstractDialogEndpointHandler.terminate(AbstractDialogEndpointHandler.java:1354)
            at oracle.kv.impl.async.dialog.AbstractDialogEndpointHandler$ConnectTimeoutTask.run(AbstractDialogEndpointHandler.java:2437)
            at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
            at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
            at oracle.kv.impl.async.dialog.nio.NioChannelExecutor$WrappedFutureTask.run(NioChannelExecutor.java:1326)
            at oracle.kv.impl.async.dialog.nio.NioChannelExecutor$ScheduledFutureTask.run(NioChannelExecutor.java:1434)
            at oracle.kv.impl.async.dialog.nio.NioChannelExecutor.runTasks(NioChannelExecutor.java:2030)
            at oracle.kv.impl.async.dialog.nio.NioChannelExecutor.runOnce(NioChannelExecutor.java:1107)
            at oracle.kv.impl.async.dialog.nio.NioChannelExecutor.lambda$run$13(NioChannelExecutor.java:1060)
            at oracle.kv.impl.fault.AsyncEndpointGroupFaultHandler.lambda$static$0(AsyncEndpointGroupFaultHandler.java:21)
            at oracle.kv.impl.async.dialog.nio.NioChannelExecutor.run(NioChannelExecutor.java:1057)
            at java.base/java.lang.Thread.run(Thread.java:1583)

    [KVSTORE-2228]

  14. -jsonフラグなしでコマンドを実行したときに検証エラーが報告されなかった管理コマンド'plan verify-data'の問題を修正しました。また、verify-dataプランでbtree/logファイルの破損が報告された場合、プランは失敗します。この修正では、2つの新しいエラー・メッセージが導入されています:
    1. NOSQL_5600: RN Btree corruption only
    2. NOSQL_5601: RN Logfile corruption or RN Logfile/Btree corruption
    [KVSTORE-1747]
  15. 手動で指定したユーザー・パスワードでシェルが起動された場合に、シェル・コマンドラインのコマンド履歴機能が正しく動作しなかった問題を修正しました。

    [KVSTORE-2259]

  16. クライアント・ヘルパー・ホストが、レプリケーション・ノードやアービタ・ノードではなく管理ノードのみをホストするストレージ・ノードであった場合に、クライアントがjava APIコールKVStoreFactory.getStore()を使用してストアに接続できなかった問題を修正しました。たとえば、非セキュア・ストアに対してlocalhost:5000で実行されている管理専用SNを使用してストア・ハンドルを取得すると、次の例外が発生します:
    oracle.kv.FaultException: Could not contact any RepNode at: [localhost:5000] (24.1.11) on [2024-07-09 07:00:38.754 UTC]
    
    また、セキュアなストアの場合は次のとおりです:
    oracle.kv.FaultException: Could not establish an initial login from: [localhost:5000] (24.1.11) on [2024-07-09 07:01:06.930 UTC]
    

    [KVSTORE-1695]

  17. レプリケーション・ノードのJVM引数のオーバーライドにパラメータjavaRnParamsOverrideが使用される問題を修正しました。ユーザーはパラメータを設定して"change-parameters"プランを実行し、ストアに値を設定できます。場合によっては、ストアでjavaRnParamsOverrideが正しく処理されず、レプリケーション・ノードの起動時にリカバリ不能なエラーが発生することがありました。エラーは次のようになっていました:
    ProcessMonitor: Unexpected exception in MonitorThread: java.lang.NumberFormatException: For input string: "11253m-xx:parallel"java.lang.NumberFormatException: For input string: "11253m-xx:parallel"
    at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)

    [KVSTORE-2257]

  18. チェックサム・エラーなどの永続的なエラーが検出された場合に、ノードの再起動が失敗しなくなります。これは、ノードの可用性を高めるために行われました。

    [KVSTORE-2317]

APIの変更点

  1. 非推奨の様々なJE構成パラメータが削除されました。これらの非推奨の構成のいずれかがje.propertiesファイルに見つかった場合、その構成は無視され、ログに警告が出力されます。

    削除された構成は次のとおりです:

    • je.evictor.wakeupInterval
    • je.evictor.useMemoryFloor
    • je.evictor.nodeScanPercentage
    • je.evictor.evictionBatchPercentage
    • je.maxOffHeapMemory
    • je.offHeap.evictByte
    • je.offHeap.checksum
    • je.env.runOffHeapEvictor
    • je.offHeap.coreThreads
    • je.offHeap.maxThreads
    • je.offHeap.keepAlive
    • je.checkpointer.wakeupInterval
    • je.cleaner.minFilesToDelete
    • je.cleaner.retries
    • je.cleaner.restartRetries
    • je.cleaner.calc.recentLNSizes
    • je.cleaner.calc.minUncountedLNs
    • je.cleaner.calc.initialAdjustments
    • je.cleaner.calc.minProbeSkipFiles
    • je.cleaner.calc.maxProbeSkipFiles
    • je.cleaner.cluster
    • je.cleaner.clusterAll
    • je.cleaner.rmwFix
    • je.txn.serializableIsolation
    • je.lock.oldLockExceptions
    • je.log.groupCommitInterval
    • je.log.groupCommitThreshold
    • je.log.useNIO
    • je.log.directNIO
    • je.log.chunkedNIO
    • je.nodeDupTreeMaxEntries
    • je.tree.maxDelta
    • je.compressor.purgeRoot
    • je.evictor.deadlockRetry
    • je.cleaner.adjustUtilization
    • je.cleaner.maxBatchFiles
    • je.cleaner.foregroundProactiveMigration
    • je.cleaner.backgroundProactiveMigration
    • je.cleaner.lazyMigration
    • je.rep.preserveRecordVersion
    • je.rep.minRetainedVLSN
    • je.rep.repStreamTimeout
    • je.rep.replayCostPercent
    • java.util.logging.FileHandler.on
    • java.util.logging.ConsoleHandler.on
    • java.util.logging.DbLogHandler.on
    • java.util.logging.level.lockMgr
    • java.util.logging.level.recovery
    • java.util.logging.level.evictor
    • java.util.logging.level.cleaner

    [KVSTORE-1788]