Cordaの新しいバージョンである4.5(Open Source版)がリリースされました。flow APIの改善やバグフィックスが含まれています。
リリースノートの全文訳を掲載いたします。
リリースノート序文
Corda 4.5 リリースノートへようこそ。
このアップデートで何が新しくなったのか、新機能や機能強化がどのように役立つのかを理解するために、ご参考頂ければと思います。
これまでのリリースでは、APIの後方互換性が保証されていましたが、Corda 4.5 にも同様の保証が付いています。
Corda 3.0 以上で有効なStateとアプリは、Corda 4.5 でも使用可能です。
新機能と機能強化
killFlowの操作性を向上させました。
既存のkillFlow RPC操作を改良し、いくつかの方法でノードオペレータが手動でflowを終了させることができるようにしました。
- flowが終了すると、問題のflowとopen flowセッションを持つカウンターパーティに、flowが予期せず終了したことが通知されます。
- flowによって保持されているVaultのソフトロックは、flowが終了すると解放されます。
- flowは、終了が要求されたかどうかをプログラムでチェックできるようになりました。これにより、ループしているflowがこのAPIを使用して、終了が要求されたときに無限にループしないようにすることができます。これまで、flowは次のチェックポイントに到達するまで待って終了するかどうかを判断していたため、デッドロックが発生する可能性がありました。
新しいflowAPI
flowフレームワークの新しいAPIであるsendAllとsendAllMapを導入し、パフォーマンスを向上させて複数のカウンターパーティにメッセージを送信することができるようになりました。これまで、flowは、各カウンターパーティに対して一度だけ send API を使用することで、複数のカウンターパーティにメッセージを送信することができました。これらの新しいAPIを使用することで、より少ない数のチェックポイントから得られるパフォーマンスの向上により、同じことを実現することができます。
新しいAPIの詳細については、API flowのドキュメントセクションをご参照ください。
新しいAPIを使うために既存のCorDappsをアップデートする必要があります。
トークンSDKのドキュメントとトレーニング
Tokens SDKのドキュメントは、Cordaトレーニングサイトの開発者向けの包括的なトレーニングモジュールとともに、メインのCordaとCorda Enterpriseのドキュメントサイトに移設されました。
エラーコードのナレッジベース
Corda スタックトレースで生成されるエラーレポートには、(Corda 4.5 以降では) ドキュメントのナレッジベースにリンクされたユニークなコードが含まれます。
ドキュメントに記載されたエラーが発生した場合、ユーザーはナレッジベースのページにアクセスして、エラーに関するより多くの情報を得ることができます。これは、以前のバージョンの Corda で導入されていたスタックトレースハッシュに基づくエラーコードに取って代わります。
ナレッジベースは、新しいエラー状況が報告されたり調査されたりするたびに、随時更新されていきます。
Quasarの依存関係の修正
Cordaはflowの計測にQuasarを使用しているため、チェックポイントからflowを再開することができます。しかし、Quasarの標準構成を利用した場合、特定のjarファイルによって、OutOfMemoryErrorという例外が発生します。
この問題を解決するために、新しいノード構成オプションのquasarExcludePackagesを追加しました。これにより、Quasarの標準構成を修正し、問題を引き起こすパッケージを除外することができます。詳細はノード構成を参照してください。
RestrictedEntityManagerとRestrictedConnection
信頼性を向上させ、ユーザーエラーを防止するために、JDBC および EntityManager を介して提供されるデータベースアクセスを変更し、flowチェックポイントを破損させる可能性のある関数へのアクセスをブロックしました。その結果、台帳を参照するだけのAPI内で誤ってロールバックを呼び出したり、データベース接続を早期に閉じたりすることができなくなりました。
ブロックされた関数の完全なリストは以下にあります。
- 制限された接続(現在非公開)
- 制限されたエンティティ マネージャ(現在非公開)
Dockerformタスクの更新
Dockerformのローカル開発タスクプラグインを更新し、選択された外部データベースとしてPostgreSQLを使用するようにしました。
プラットフォームのバージョン変更
Corda 4.5 のプラットフォームバージョンが 6 から 7 に変更されたのは、新しいflowフレームワーク API の sendAll と sendAllMap が追加されたためで、パフォーマンスが向上した状態で複数の相手にメッセージを送信することができます。
プラットフォームのバージョンについての詳細は、バージョニングを参照してください。
バグ修正
- throwables のデシリアライズがevolutionをサポートしていなかったため、新しいバージョンでコンストラクタのパラメータを追加したり、プロパティの名前を変更したりすることが困難になっていた問題が修正されました。
- QueryCriteriaUtils の FieldInfo.notEqual の実装が FieldInfo.Equal と同じであった問題を修正しました。
- loadForSandbox() が LoadedClass の代わりに Class を返すように、Corda の DJVM デシリアライザを最適化しました。
- java.lang.Exception のサブクラスではない例外がすぐに再スローされる場合でも、任意の throwable がそれを完了できるように CordaFuture を修正しました。
- CorDappカスタムシリアライザがMockNetworkでサポートされておらず、Driverを使用せずにflowのユニットテストが失敗する原因となっていた問題が修正されました。
- FlowLogic への参照を維持していた FlowExternalOperation をシリアライズすると、FlowExternalOperation から FlowAsyncOperation を構築するときに IndexOutOfBoundsException エラーをスローする可能性がある問題が修正されました。
- ServiceHub.signInitialTransaction() が宣言されていないチェック付き例外 (TransactionDeserialisationException および MissingAttachmentsException) をスローしていた問題を修正しました
- すべてのノードデータベースのタイムスタンプをUTCタイムゾーンを使用するように標準化しました
- 既存のチェックポイントイテレータシリアライザのnull処理とイテレータ位置を復元する際の等号の使用に関する問題を修正しました。
- Corda がカスタム toString() メソッドを持つ Enums を DJVM サンドボックスにデシリアライズするのに失敗していた問題が修正されました。
- プライベートであるはずのcore内のCordaの内部のproviderMapフィールドが、パブリックであり、かつミュータブルであった問題が修正されました。
- データベース接続性の問題により、最初のチェックポイントをパースしていないflowを再試行するためにステートマシンがArtemisキューから再生したときに、セッションのinitメッセージが失敗する問題を修正しました。
- Oracle 11 の com.r3.corda.enterprise.settingsperftestcordapp.flows.SwapStockForCashFlowTest が移行に失敗して失敗する問題が修正されました。
- スタックトレースからより多くの情報を抽出するために更新した後、Level.WARNおよびLevel.FATALログに元のログメッセージが含まれていなかった問題が修正されました。
- データベース内にトランザクションが存在する場合でも、ハッシュ付きのトランザクションをコミットするために元帳が待機している間にflowがハングすると、競合状態が発生する問題を修正しました。
- 埋め込まれたArtemisを使用する際にCRLチェックが行われず、ブラックリストに登録された後もノードがトランザクションに関与し続ける可能性がある問題を修正しました。
- HSMが利用できない場合に、コンポーネントの起動時に一貫性のないエラーメッセージが表示されていた問題が修正されました。
- LinearStateQueryCriteria(linearId = emptyList())を使用したVault QueryがPostgreSQL上で不正なSQL文に変換され、例外が発生する問題を修正しました。
- FetchDataFlowにおけるConcurrentModificationExceptionの問題を解決するために、壊れたイテレータを修正できるカスタムシリアライザ(IteratorSerializer)を追加しました。
- Oracle で VaultObserverExceptionTest テストが失敗する問題を修正しました。
Created by: Riku Nakazawa
Last edited by: Riku Nakazawa
Updated: 2020/06/25