カスタム advisor では、以下の advisor メソッドとファンクション・コールを使用してください。
カスタム advisor には、すべての必須ルーチンが必要なことに注意してください。
advisor には、以下の基本クラスのメソッドが必要です。
- コンストラクター・ルーチン。コンストラクターは基本クラス・コンストラクターを呼び出します。
- ADV_AdvisorInitialize メソッド。このメソッドは、基本クラスが初期化を完了した後に追加のステップを実行する方法を提供します。
- getLoad ルーチン。基本 advisor クラスはソケットのオープンを実行します。getload 関数は、アドバイス・サイクルを完了するための適切な送信要求と受信要求を出すためにのみ必要です。
コンストラクター (advisor ベースによって提供される)
public <advisor_name> {
String sName;
String sVersion;
int iDefaultPort;
int iInterval;
String sDefaultLogFileName;
boolean replace
)
- sName
- カスタム advisor の名前
- sVersion
- カスタム advisor のバージョン。
- iDefaultPort
- 呼び出しでポート番号が指定されていない場合に、サーバーに接続するためのポート番号。
- iInterval
- advisor がサーバーを照会する間隔。
- sDefaultLogFileName
- このパラメーターは必須ですが使用されません。唯一の許容値はヌル・ストリング "" です。
- replace
- この advisor 関数を置換モードで動作させるかどうかを指定します。指定可能な値は、以下のとおりです。
- true - advisor 基本コードによって計算された負荷を、カスタム advisor によって報告された値に置き換えます。
- false - カスタム advisor によって報告された負荷値を、advisor 基本コードによって計算された負荷値に追加します。
ADV_AdvisorInitialize() メソッド
void ADV_AdvisorInitialize()
このメソッドは、カスタム advisor に必要な可能性のある初期化をすべて実行するために提供されます。このメソッドは、advisor 基本モジュールの開始後に呼び出されます。
標準 advisor を含め、多くの場合、このメソッドは使用されません。また、
メソッドのコードは return 文のみで構成されます。このメソッドは、suppressBaseOpeningSocket() メソッドを呼び出すのに使用できます (このメソッド内からの呼び出しのみが有効です)。
標準 advisor を含め、多くの場合、このメソッドは使用されません。また、
メソッドのコードは return 文のみで構成されます。このメソッド
は、suppressBaseOpeningSocket メソッドを呼び出すのに使用できます (ADV_AdvisorInitialize メソッド内からの呼び出しのみが有効です)。
ADVLOG() メソッド
ADVLOG 関数によって、カスタム advisor は、advisor 基本ログ・ファイルに
テキスト・メッセージを書き込むことができます。フォーマットは以下のとおりです。
void ADVLOG (int logLevel, String message)
このコマンドには、以下のパラメーターがあります。
- logLevel
- メッセージがログ・ファイルに書き込まれる状況レベル。advisor ログ・ファイルは段階ごとに編成されます。つまり、最も緊急度の高いメッセージには状況レベル 0 が与えられ、緊急度が低くなるにしたがって状況レベルの数字は大きくなります。最も冗長なタイプのメッセージには、
状況レベル 5 が与えられます。これらのレベルは、ユーザーがリアルタイムで受信する
タイプのメッセージを制御するために使用されます (dscontrol コマンドを使用して冗長を設定します)。
壊滅的なエラーは、必ずレベル 0 でログに記録する必要があります。
- message
- ログ・ファイルに書き込むメッセージ。このパラメーターの値は、標準 Java ストリングです。
getAdvisorName 関数
getAdvisorName 関数は、カスタム advisor 名の接尾部分を Java ストリングで返します。例えば、ADV_cdload.java という名前の advisor の場合、この関数は cdload という値を返します。
この関数にはパラメーターがありません。
問題の
回避:advisor の 1 回のインスタンス化の間にこの値を変更することはできません。
gotcha
caller.getCurrentServerId()
getCurrentServerId 関数は、現在のサーバーの固有の表記である Java ストリングを返します。通常この値は、advisor 基本コードが連続してすべてのサーバー・マシンを照会するため、カスタム advisor を呼び出すたびに変更されます。
この関数にはパラメーターがありません。
caller.getCurrentClusterId()
getCurrentClusterId ファンクション・コールは、現在のクラスターの固有の表記である Java ストリングを返します。通常この値は、advisor ベースが連続してすべてのクラスターを照会するため、カスタム advisor を呼び出すたびに変更されます。
この関数にはパラメーターがありません。
caller.getSocket()
getSocket ファンクション・コールは、通信用に現在のサーバーに対してオープンされたソケットを表す Java ソケットを返します。
この関数にはパラメーターがありません。
caller.getLatestLoad()
getLatestLoad 関数によって、カスタム advisor は指定したサーバー・オブジェクトの最新の負荷値を取得することができます。この負荷値は、advisor 基本コードおよび manager デーモンによって、内部テーブルに維持されます。このファンクション・コールは、あるプロトコルまたはポートの振る舞いを別のプロトコルまたはポートの振る舞いに依存させる場合に有益です。
例えば、同じマシン上の Telnet サーバーが使用不可になっていた場合、特定のアプリケーション・サーバーを使用不可にしていたカスタム advisor で、このファンクション・コールを使用することができます。
構文は以下のとおりです。
int caller.getLatestLoad (String clusterId, int port, String serverId)
3 つの引数は共に、1 つのサーバー・オブジェクトを定義します。
このコマンドには、以下のパラメーターがあります。
- clusterId
- 現在の負荷値を取得するサーバー・オブジェクトのクラスター ID。この引数は Java ストリングでなければなりません。
- port
- 現在の負荷値を取得するサーバー・オブジェクトのポート番号。
- serverId
- 現在の負荷値を取得するサーバー・オブジェクトのサーバー ID。この引数は Java ストリングでなければなりません。戻り値は整数です。
- 正の戻り値は、照会されたオブジェクトに割り当てられた実際の負荷値を表します。
- 値 -1 は、対象となるサーバーがダウンしていることを示します。
- 値 -2 は、対象となるサーバーの状況が不明であることを示します。
caller.receive()
receive 関数は、ソケット接続から情報を取得します。構文は以下のとおりです。
caller.receive(StringBuffer *response)
このコマンドには、以下のパラメーターがあります。
- response
- これは、取得されたデータが配置されるストリング・バッファーです。また、この関数は以下の意味を持つ整数値を返します。
- 0 は、データが正常に送信されたことを示します。
- 負の数値は、エラーを示します。
caller.send()
send 関数は、確立されたソケット接続を使用して、指定されたポートを使用することでパケットのデータをサーバーに送信します。構文は以下のとおりです。
caller.send(String command)
このコマンドには、以下のパラメーターがあります。
- command
- これは、サーバーに送信するデータを含むストリングです。この関数は以下の意味を持つ整数値を返します。
- 0 は、データが正常に送信されたことを示します。
- 負の数値は、エラーを示します。
getLoad()
int getLoad( int iConnectTime; ADV_Thread *caller )
この関数には、以下のパラメーターがあります。
- iConnectTime
- 接続が完了するまでの時間の長さ (ミリ秒単位)。
この負荷測定は advisor 基本コードによって実行され、カスタム advisor コードに渡されます。
カスタム advisor コードは、負荷値を返すときに、この測定値を使用または無視することができます。
接続が失敗した場合、この値は -1 に設定されます。
- caller
- advisor 基本メソッドが提供される advisor 基本クラスのインスタンス。カスタム advisor に使用可能なファンクション・コール。以下のセクションで説明するメソッド、つまり関数は、カスタム advisor から呼び出すことができます。これらのメソッドは、advisor 基本コードによってサポートされています。これらのファンクション・コールには、例えば、function_name() のように直接呼び出せるものと、初めに呼び出し元が必要なものがあります。呼び出し元は、実行されているカスタム advisor をサポートする基本 advisor インスタンスのことです。
getAdviseOnPort()
getAdviseOnPort 関数は、呼び出し側カスタム advisor が稼働しているポート番号を返します。
戻り値は Java 整数 (int) で、関数にはパラメーターがありません。
注: advisor の 1 回のインスタンス化の間にこの値を変更することはできません。
getAdvisorName()
getAdvisorName 関数は、カスタム advisor 名の接尾部分を Java ストリングで返します。例えば、ADV_cdload.java という名前の advisor の場合、この関数は cdload という値を返します。
この関数にはパラメーターがありません。advisor の 1 回のインスタンス化の間にこの値を変更することはできないことに注意してください。
getInterval()
getInterval 関数は advisor 間隔、すなわち advisor サイクル間の秒数を返します。この値は、dscontrol コマンド
を使用して実行時に変更されていなければ、カスタム advisor のコンストラクターで設定された
デフォルト値と等しくなります。
戻り値は Java 整数 (int) です。
この関数にはパラメーターがありません。
suppressBaseOpeningSocket()
suppressBaseOpeningSocket ファンクション・コールによって、カスタム advisor は、基本 advisor コードがカスタム advisor の代わりにサーバーに対して TCP ソケットをオープンするかどうかを指定することができます。advisor が状況を判別するためにサーバーとの直接通信を使用しない場合は、このソケットをオープンする必要がない場合もあります。このファンクション・コールは一回だけ発行することができ、ADV_AdvisorInitialize() メソッド・
ルーチンから発行する必要があります。
この関数にはパラメーターがありません。