目的
acfsplugin
アプリケーション・プログラミング・インタフェース(API)は、アプリケーション・プラグイン・モジュールのローカル・プラグインが有効なOracle ACFSドライバに対してメッセージを送受信します。
構文
sb8 acfsplugin_metrics(ub4 metric_type, ub1 *metrics, ub4 metric_buf_len, oratext *mountp );
説明
Oracle ACFSプラグインAPIは、Oracle ACFSドライバからメトリックを受信するために、Oracle ACFSアプリケーション・プラグイン・モジュールによって使用されます。acfsutil
plugin
enable
コマンドを使用して、プラグイン通信のためにまずOracle ACFSドライバを有効にする必要があります。選択したアプリケーション・プラグイン・メトリック・タイプ・モデルは、Oracle ACFSのプラグイン有効化コマンドで定義されたプラグイン構成と一致する必要があります。acfsutil
plugin
enable
コマンドの詳細は、「acfsutil plugin enable」を参照してください。アプリケーションには、「Oracle ACFSの事前定義済のメトリック・タイプ」で説明しているメトリック構造を格納するのに十分なバッファのサイズが提供される必要があります。
指定されたバッファがNULL
で、metric_buf_len
=
0
の場合、戻り値は、現在収集されたすべてのメトリックを保持するために必要なサイズになります。アプリケーションは、まずOracle ACFSに問い合せて、必要なバッファの大きさを参照してから、Oracle ACFSに戻すのに必要なサイズのバッファを割り当てることができます。
参照するプラグインが有効なOracle ACFSファイルシステムを特定するには、マウント・パスをAPIに指定する必要があります。
成功すると、負ではない値が戻されます。収集するメトリックがない状態で成功した場合は0
、使用可能なメトリックがあることを示す場合は1
、間隔の間に収集された新しいメトリックがないことを示す場合は2
が戻されます。エラーの場合、負の値が戻され、Linux環境の場合はerrno
が設定され、WindowsではSetLastError
がコールされます。
プラグインが有効なOracle ACFSファイルシステム・ドライバに対してメッセージを送受信するには、システム管理者またはOracle ASM管理者の権限が必要です。
アプリケーションの書込み
プラグインAPIを使用するには、APIファンクションおよび構造を定義するCヘッダー・ファイルacfslib.h
をアプリケーションに含める必要があります。
#include <acfslib.h>
アプリケーションの実行可能ファイルを作成する場合、アプリケーションは、acfs12
ライブラリにリンクされている必要があります。定義する必要がある環境変数の詳細は、プラットフォーム固有のドキュメントを参照してください。次に例を示します。
export LD_LIBRARY_PATH=${ORACLE_HOME}/lib:$ {LD_LIBRARY_PATH}
リンクを行う場合、-lacfs12
フラグを追加します。
例
例18-1では、コマンドは、プラグイン・サービス用に/humanresources
にマウントされたOracle ACFSファイルシステムを有効にします。
例18-1 記憶域の可視性のためのアプリケーション・プラグイン: ポーリング・モデル
$ /sbin/acfsutil plugin enable -m acfsmetric1 -t HRDATA /humanresources
このコマンドの場合、アプリケーション・プラグインは、HRDATA
でタグ付けされたファイルに関連付けられたサマリー・メトリックの、Oracle ACFSプラグインが有効なドライバをポーリングします。アプリケーション・コードは次のようになります。
#include <acfslib.h> ... /* allocate message buffers */ ACFS_METRIC1 *metrics = malloc (sizeof(ACFS_METRIC1)); /* poll for metric1 data */ while (condition) { /* read next summary message from ACFS driver */ if ((rc = acfsplugin_metrics(ACFS_METRIC_TYPE1,(ub1*)metrics,sizeof(*metrics), mountp)) < 0) { perror("….Receive failure … "); break; } /* print message data */ printf ("reads %8llu ", metrics->acfs_nreads); printf("writes %8llu ", metrics->acfs_nwrites); printf("avg read size %8u ", metrics->acfs_avgrsize); printf("avg write size %8u ", metrics->acfs_avgwsize); printf("min read size %8u ", metrics->acfs_minrsize); printf("max read size %8u ", metrics->acfs_maxrsize); ... sleep (timebeforenextpoll); }
例18-2では、コマンドは、プラグイン・サービス用に/humanresources
にマウントされたOracle ACFSファイルシステムを有効にします。
例18-2 ファイル・コンテンツのためのアプリケーション・プラグイン: ポスト・モデル
$ /sbin/acfsutil plugin enable -m acfsmetric1 -t HRDATA -i 5m /humanresources
このコマンドの場合、5分ごとに、Oracle ACFSプラグインが有効なドライバは、HRDATA
でタグ付けされたファイルに関連付けられたファイル・コンテンツ・メトリックをポストします。アプリケーション・コードでは、メトリックがポストされるまで、acfsplugin_metrics()
へのコールはブロックされます。アプリケーション・コードは次のようになります。
#include <acfslib.h> ... ACFS_METRIC1 *metrics = malloc (sizeof(ACFS_METRIC1)); /* Wait for metric Data */ while (condition) { /* Wait for next file content posting from ACFS driver */ rc = ACFS_PLUGIN_MORE_AVAIL; /* A return code of 1 indicates that more metrics are available * in the current set of metrics. */ while( rc == ACFS_PLUGIN_MORE_AVAIL) { /* This call blocks until metrics are available. */ rc = acfsplugin_metrics(ACFS_METRIC_TYPE1,(ub1*)metrics,sizeof(*metrics), mountp); if (rc < 0) { perror("….Receive failure … "); break; } else if (rc == ACFS_PLUGIN_NO_NEW_METRICS) { printf("No new metrics available."); break; } if (last_seqno != metrics->acfs_seqno-1 ) { printf("Warning: Unable to keep up with metrics collection."); printf("Missed %d sets of posted metrics.", (metrics->acfs_seqno-1)-last_seqno); } /* print message data */ printf ("reads %8llu ", metrics->acfs_nreads); printf("writes %8llu ", metrics->acfs_nwrites); printf("avg read size %8u ", metrics->acfs_avgrsize); printf("avg write size %8u ", metrics->acfs_avgwsize); printf("min read size %8u ", metrics->acfs_minrsize); printf("max read size %8u ", metrics->acfs_maxrsize); ... last_seqno = metrics->acfs_seqno; } } free(metrics);