

AWS Mainframe Modernization Service (マネージドランタイム環境エクスペリエンス) は、新規のお客様に公開されなくなりました。 AWS Mainframe Modernization Service (マネージドランタイム環境エクスペリエンス) と同様の機能については、 AWS Mainframe Modernization Service (セルフマネージドエクスペリエンス) をご覧ください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、[AWS 「 Mainframe Modernization の可用性の変更](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html)」を参照してください。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# エラーのトラブルシューティング: データセット名のロックが解除されるのを待っている間にタイムアウトしました
<a name="ba-blusam-timeout"></a>

このページでは、環境内の別のアプリケーションが共有データセットにロックを保持していることがわかったときにエラーを解決する方法について説明します。
+ エンジン：メインフレームの AWS 変換
+ コンポーネント: Blusam

メインフレームエンジンの AWS 変換を使用し、高可用性パターンの環境で実行されている AWS Mainframe Modernization アプリケーションの Amazon CloudWatch logsにこのエラーが表示された場合は、別のアプリケーションが共有データセットのロックを保持していることを示します。通常、この状況は、他のアプリケーションがクラッシュまたは障害を起こしてロックが解除されない場合に発生します。

障害が発生したアプリケーションを探して、そのアプリケーションがエラーメッセージに記載されているのと同じデータセットを使用しているかどうかを確認してください。アプリケーションが高可用性パターンのランタイム環境で実行されているかどうかを確認します。タイムアウト例外を発生させたアプリケーションは処理を続行できず、`Failed` ステータスが表示されます。

## 一般的な原因
<a name="ba-blusam-timeout-cause"></a>

アプリケーション `example-app-1` が書き込みオペレーションのためにレコード `example-record-1` をロックしようとします。このオペレーションは、`example-record-1` を所有するデータセット `example-dataset-1` のロックと、`example-record-1` 自体のロックの両方を作成します。次に、別のアプリケーション `example-app-2` が同じレコード `example-record-1` をロックしようとします。データセットとレコードは既にロックされているため、`example-app-2` はロックが解除されるまで待ちます。`example-app-1` がクラッシュすると、データセット `example-dataset-1` に保持されていたロックが残っているため、`example-app-2` は書き込みをキャンセルし、タイムアウト例外を発生させます。このデッドロック状態では、すべてのアプリケーションが `example-dataset-1` に到達できなくなります。

## 解決策
<a name="ba-blusam-timeout-resolution"></a>

この状況をすぐに解決するには、ロックを強制的に解除します。将来同様の状況が発生しないように、Blusam自動修復メカニズムを制御する 2 つのパラメータを設定できます。

## ロックを強制的に解除する
<a name="ba-blusam-timeout-force"></a>

Blusam ロックマネージャーは Amazon ElastiCache (Redis OSS) を使用して、アプリケーション間で共有ロックを提供します。ElastiCache のロックを解除するには、Redis CLI ユーティリティを使用してください。個々のレコードロックは削除できません。所有しているデータセットからすべてのロックを解除する必要があります。以下のステップを実行します。

1. 以下のコマンドを使用して ElastiCache に接続します。

   ```
   redis-cli -h {{hostname}} -p {{port}}
   ```

   ElastiCache の詳細は、ElastiCache コンソール ([https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/)) で確認できます。

1. パスワードを入力します。

1. 実行するコマンドを次のように入力します。    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/m2/latest/userguide/ba-blusam-timeout.html)

## Blusam 自動修復メカニズムを設定する
<a name="ba-blusam-timeout-auto-repair"></a>

Blusam ロックマネージャーには、データセットまたはレコードのデッドロックを防ぐための自動修復メカニズムが含まれています。アプリケーション定義 (`application-main.yml`) で次のパラメータを調整して、自動修復メカニズムを設定できます。
+ `locksDeadTime`: アプリケーションがロックを保持できる最大時間を示します。この時間が経過すると、ロックは期限切れと宣言され、直ちに解除されます。`locksDeadTime` 値はミリ秒単位で、デフォルト値は 1000 です。
+ `locksCheck`: Blusamロックをチェックするためのロックマネージャー戦略を定義します。ElastiCache のすべてのBlusamロックにはタイムスタンプが付けられ、有効期限があります。`locksCheck` パラメータ値によって、期限切れのロックが削除されるかどうかが決まります。
  + `off`: チェックは常に実行されません。デッドロックが発生する可能性があります。(非推奨)
  + `reboot`: チェックは、 AWS Mainframe Modernization ランタイム環境で実行されている AWS Mainframe Modernization アプリケーションインスタンスが起動または再起動されたときに実行されます。期限切れのロックはすべて直ちに解除されます。(デフォルト)
  + `timeout`: チェックは、 AWS Mainframe Modernization ランタイム環境で実行されている AWS Mainframe Modernization アプリケーションインスタンスが起動または再起動されたとき、またはデータセットをロックしようとしたときにタイムアウトが期限切れになったときに実行されます。期限切れのロックは直ちに解除されます。

メインフレームアプリケーションの AWS 変換のアプリケーション定義の詳細については、「」を参照してください[AWS メインフレームアプリケーション定義サンプルの変換](applications-m2-definition.md#applications-m2-definition-ba)。

## Blusam マネージャーをロックする
<a name="ba-blusam-timeout-locks-mgr"></a>

高可用性パターンを使用した AWS Mainframe Modernization ランタイム環境のコンテキストでは、メインフレームアプリケーションの AWS 変換が複数回デプロイされる場合があります。Blusam データセットを処理するアプリケーションでは、同時アクセスの問題が発生する可能性があります。Blusam ロックマネージャーは、ElastiCache を使用してアプリケーション間で共有ロックを提供することで、データの整合性を確保し、レコードとデータセットへの読み取りおよび書き込みアクセスを管理します。このメカニズムにより、複数のアプリケーションが同時にレコードを読み取ることができ、レコードを書き込むアプリケーションは一度に 1 つだけになります。

### 書き込みロック
<a name="ba-blusam-timeout-locks-mgr-write"></a>

特定のレコードを更新または削除するには、アプリケーションはまずレコードを所有するデータセットをロックし、次にレコード自体をロックする必要があります。レコードがロックされると、データセットのロックが解除され、同じデータセットの他のレコードが使用できるようになります。更新または削除操作が完了すると、保持されていたレコードロックは解除されます。レコードを更新できるのは一度に 1 つのアプリケーションのみで、定義されたアプリケーションポリシーで解除を待つことが許可されている場合、ロックが解除されるまで他のアプリケーションは読み取りまたは書き込みができなくなります。

### 読み取りロック
<a name="ba-blusam-timeout-locks-mgr-read"></a>

レコードまたはデータセットに書き込みロックがかかっていない限り、複数のアプリケーションが同じレコードを同時に読み取ることができます。書き込み操作のためにレコードをロックするには、すべての読み取りロックを解除する必要があります。

**注記**  
Blusam ロックマネージャーは、同じロックメカニズムを使用して、特定のアプリケーションの複数のスレッドからのアクセスを処理します。