What’s new in v23.2LTS


New builtins

ClosedLoop

ClosedLoopType クラス拡張

ClosedloopTypeクラスのコンストラクタに以下の引数を追加します。

引数 デフォルト 説明
maxNumOfInstances -1 ClosedloopTypeから生成されるClosedloopインスタンスの最大生成数を指定します。-1の場合は制約なしとなります。
podOptions {} closedloopを動作させるdeploymentマニフェストに追加するパラメータを記載します。詳細は下記をご覧ください。

podOptionsで指定可能なパラメータ

key valueType 説明 指定例
serviceAccount str template.spec.service_account_nameを指定します。 "hoge@example.com"
nodeSelector object affinity, tolerationsを使用する場合に指定します。 {"key":"hoge", "memory":"256Mi"}, "value":"fuga"}
secretVolumeMounts array secretVolume関連のパラメータをarray形式で指定します。 [{"name":"hoge", "defaultMode":384, "mountPath": "/var/secrets", "readOnly": False}]
resources object コンテナに割り当てるリソース制約を指定します。 {"requests"{"cpu":"50m", "memory":"256Mi"}, "limits":{"cpu":"512m", "memory":"1Gi"}}

DAG

組込オブジェクトの追加

DAGインスタンス実行時における例外クラスを3種類追加します。

  • DagTermination(reason: str | None = None)
  • DagApprovalPending(reason: str | None = None)
  • DagRewind(reason: str | None = None, mode: str = "GO_BACK_TO_LIMIT", step: int = 0)
引数 デフォルト 説明
mode "GO_BACK_TO_LIMIT" "GO_BACK_TO_LIMIT": 可能な限り巻き戻しを実行します。"GO_BACK_N_STEPS": step引数を参照し、指定した値ぶんステップを巻き戻します。
step 0 現在位置から巻き戻すステップ数を指定します。

以下のEnumクラスを追加します。plugin開発者は通常使用しません。

  • RewindMode
組み込み関数の追加
  • pseudo(path: str | None = None)

主にデコレータ@pseudo("擬似関数識別子")として使用します。 本デコレータをタスク関数、あるいはタスク関数から呼び出す関数に付与することで付与された関数を擬似関数とスワップする仕組みを導入します。 タスク関数の中でさらに呼び出す子関数や子プラグインにも付与可能とします。

簡単な使用法を紹介します。以下のようなfunction pluginをSDKにloadします。

# -*- coding: utf-8 -*-
#
# python Function for Qmonus
#
# Category :
#
def sample():
    return 1
>>> @pseudo("sample")↵
... def fuga():↵
...   return "fuga"↵
... print(await fuga(_pseudo=True))↵
... ↵
↵
1

pseudo組み込み関数はasync関数の置き換えにも対応しているためcoroutineを戻り値とします。置き換え元、置き換え先がsync関数定義の場合でもawaitを使用してください。

DAGInstanceクラスのrunインスタンスメソッドでpseudoを有効化するpseudoパラメータ(default:False)が追加されます。

rewind機能の追加

DAG Instance実行時の例外にDagRewind組み込み例外を使用してraiseすると処理を巻き戻し、指定した位置から処理を再実行します。 ReverseRunningの状態を経由せず、指定した位置までのステップは直接NotRunningに状態が戻ります。 したがってreverseFuncnameを指定している場合でも、対象の関数は動作しません。

functionプラグインのサンプルを以下に示します。

# -*- coding: utf-8 -*-
#
# python Function for Qmonus
#
# Category :
#
async def sample():
    raise DagRewind()
>>> dag = DAG(category="rewind", name="rewindExample")↵
>>> dag.add("failure", funcname="sample")↵
>>> await dag.save()↵
>>> instance = dag.createInstance()↵
>>> instance.run()↵
... ↵

上記の例では簡単のためDagRiwind例外をキャッチしたのち、処理が巻き戻されループする挙動となります。 plugin側で例外や条件を適切にハンドリングしてください。

New service

  • 試験機能の対象にDAGを追加します。
  • Redis組み込みオブジェクトにてINCR,EXPIREコマンドを実行可能となります。(issue#153)

General changes

  • booking機能のmutexを一定期間後(default:60seconds)に強制削除するように変更します。 (issue#144)
  • POST /routingsでmodeが指定されていない場合はoverrideを指定するように変更します。 (issue#151)
  • account機能のAPI keyを環境更新時にも引き継げるように変更します。 (issue#158)
  • HA構成でget_service_config関数を使用した場合に古い情報が返却されるケースへのワークアラウンドとしてfrom_cache引数(default=True)の指定を可能とします。(issue#159)
  • daemonの内部処理が一部変更されます。 (ユーザー影響はありません。)
  • Eventhandler.start, Eventhandler.stop メソッドの内部処理が一部変更されます。 (ユーザー影響はありません。)
  • kubernetesマニフェスト作成時の内部処理が一部追加されます。 SDKリソースとして判別可能にするためのラベルをk8sリソースに追加します。
  • GET /kubernetesv1 APIでQmonus SDKが作成したk8sリソースのみが返却されるように変更します。
  • core内部で使用するDBテーブルにclosedloop/dag関連カラムを追加/変更します。

closedloop table

カラム追加
sqlalchemy.Column("_restartCount", Integer, nullable=False, default=0),
sqlalchemy.Column("_closedLoopType", STRING_T(), nullable=True),

closedloop_report(column schema変更)

変更前
sqlalchemy.Column("closedLoopInstanceUniqueId", STRING_T(), nullable=False),

変更後
sqlalchemy.Column("closedLoopInstanceUniqueId", STRING_T(key=True), nullable=False, index=True),

dag_progress table

カラム追加
sqlalchemy.Column("approvedAt", DateTime(timezone=True), nullable=True),
sqlalchemy.Column("subInstance", STRING_T(), nullable=True),


  • SDK runnerのredisコネクションプールの最大接続数を指定可能な--runner_redis_conn_pool_max起動オプションを追加します。(default:5)
  • SDK runnerのDBコネクションプールの最大接続数を指定可能な--runner_db_pool_max起動オプションを追加します。(default:5)
  • closedloop govenanceがdecommissioning状態でのタイムアウト秒時間を指定可能な--clg_decommissioning_timeout起動オプションを追加します。(default:0)
  • scheduleコンポーネントの予約機能においてmutexを強制削除するまでの秒時間(TTL)を指定可能な--forcibly_unlock_timeout起動オプションを追加します。(default:60)
  • --dag_instance起動オプションを削除します。
  • --dag_identifier起動オプションを削除します。

Bug fixes

  • GeneratorExitが頻発してしまう事象の改善 (issue#105)
  • MySQL 8.0でカラム数の多いClassに対してBulkUpsertを実行するとScenarioサーバのハングアップが発生する(issue#138)
  • TransactionControllerクラスの一部メソッドが動作しない (issue#141)
  • TransactionManagerのloadメソッドの呼び出し方が誤っている (issue#145)

Modules

以下の依存moduleのバージョンが変更となります。

kubernetes-asyncio 24.2.2 -> 28.2.0

以下のmoduleを新規に依存moduleとして追加します。

pydantic == 1.10.4
aiobotocore == 2.5.0

以下のmoduleを依存moduleから削除します。

tosca-parser