ライセンス分割(License Partitioning)は、さまざまな条件を基に複数あるライセンスを異なるグループに分けられます。これにより、ライセンスを複数のライセンスサーバーに分ける必要がなくなり、1台のライセンスサーバーで仮想的にライセンスを分散させることができます。
また、ライセンス分割は、ライセンスアクセスを制御したり、他のアーティストが意図せずにライセンスを取得することを防ぎつつ、重要なライセンスを必要とするアーティストだけに限定することにも使えます。
この機能を使用するにはHoudini 18.5以降のLicense Server (sesinetd)が必要です。
補足:パーティションファイルの場所は、プラットフォームのライセンスディレクトリに.partition.jsonの名前で配置されます。このファイルは最終的にウェブブラウザを介して作成、編集してサーバーに送られるようになるため、意図的に隠しファイルとなっています。
パーティションファイルの例
{
"user_groups": [
{
"name": "Beta Testers",
"if": "machine_name matches '^[a-zA-Z0-9_.]*.company.com$'"
},
{
"name": "Studio",
"if": "ip_address matches [10.1.1.*, 192.168.*.*, 127.0.0.*]"
},
{
"name": "Studio Render Group",
"if": "machine_name matches '^[a-zA-Z0-9_.]*.render.com$'"
},
{
"name": "Experimental Users",
"if": "username in ['user1', 'user2', 'user3']"
},
{
"name": "PDG Team",
"if": "username in ['user1', 'user2']"
}
],
"license_partitions": [
{
"if": "(product == 'Houdini Engine' or product == 'Houdini FX') and version >= 17.0",
"user_group": "Studio",
"quantity": 2
},
{
"if": "(product == 'Renderer' || product == 'Karma-Renderer')",
"user_group": "Studio Render Group",
"quantity": 1
},
{
"if": "product == 'Beta'",
"user_group": "Beta Testers"
},
{
"if": "product == 'Houdini-Master-Experimental'",
"user_group": "Experimental Users"
},
{
"if": "product == 'PilotPDG'",
"user_group": "PDG Team"
}
]
}
user_groups
で要求をグループ分けします。license_partitions
は、実際のライセンスを分割して、どのグループがどのライセンスグループを使用できるかを指定します。単純に考えると、マシンをグループ分けして(user_groups
)、ライセンスを分割します(license_partitions
)。
ライセンスを要求する際、ユーザは特定のユーザーグループを考慮して要求できます。唯一の条件として、ユーザーグループはパーティションファイルで定義されます。詳細はhserverをご覧ください。
サポートされているタイプ(Supported Types)
Partitioningは、Pythonスタイル形式で基本的なタイプに対応します。
タイプ | フォーマット |
Decimal | 10.51。 Decimalは基本的な小数点形式です。実際は全ての数値が小数点に変換されます。 |
Strings | "Hello World!"や'SideFX'。 Stringは標準の文字列形式です。 |
Arrays | [ type, type, ... ] 例) [ "Hello World", "Sidefx", "license" ]または[ 1.0, 1.2, 1.3 ]。タイプは配列全体で同じでなければなりません。現在対応している配列タイプはString、Decimal、IP Maskです。 |
IP Mask | 10.1.1.*, 192.168.+.*。 マスクはサーバーオプションファイルまたはライセンス文字列に含まれる標準マスク形式です。マスクのリストと一致させるために、配列と組み合わせることも可能です。 |
シンタックス(Syntax)
用語 | 説明 |
and && | 標準またはオペレータ |
or || | 標準またはオペレータ |
== != | 標準的な比較オペレータ |
in | オブジェクトが他のオブジェクトの中にあるかを確認します。これは一般的にオブジェクトが配列の中に存在するかを確認するのに使います。 |
matches | 全く同じである必要がない2つのオブジェクトの比較を可能にします。一般的にregex(正規表現)比較に使われます。 |
> < >= <= | 標準的な比較オペレータ |
# | 標準的なPythonスタイルの行コメント |
( ) | 標準的な括弧グループオペレータ |
予約変数(Reserved variables)
比較対象のオブジェクトから情報を引き出すのに使えるいくつかの予約変数(reserved variable)があります。ライセンスの場合、変数versionでバージョン情報を確認できます。
変数名 | 説明 |
product | ライセンスのプロダクト名(例:Houdini-Master)。値は内部的なプロダクト名であり、表示名ではありません。表示名はビルドによって変更する可能性があり、後方互換性に対応していません。これらの理由により、内部名を使用しています(即ちHoudini-Master)。 |
platform | ライセンスが紐づいているプラットフォーム。 |
licenseid | ライセンス文字列からのライセンスID。 |
version | ライセンスのバージョン。18.5のような小数点形式で表示されます。全ての標準的な小数点比較オペレータ(<=, ==, !=)に対応します。 |
ip_mask | ライセンスのIPマスク。 |
ip_address | リクエスト送信元のクライアントのIPアドレス。IPv4形式。(127.0.0.1) |
username | リクエスト送信元のクライアントのユーザー名。クライアントコンピュータの名前がuser@machineの場合、ユーザー名はuserとなります。 |
machine_name | リクエスト送信元のクライアントのマシン名。クライアントコンピュータの名前がuser@machineの場合、マシン名はmachineとなります。 |
ログファイル(Log File)
ログファイルは、サーバーが自身のヘルス状態、接続情報、その他の便利な情報を出力する場所です。
各ログエントリはYYYY-MM-DD HH:MM::SS: SYSTEM - MESSAGE
の形式になります。
HTTP Client
はcurlから受信するメッセージまたは接続/クライアントシステムに関するメッセージです。
補足:verbose curlが有効になっている場合、出力はこのシステム下で記録します。このログエントリに関する詳細な説明はcurlsのウェブページをご覧ください。
-
Sqlite
はsqlite自身から受信するメッセージです。Sqliteは主にCookie (クッキー)の格納または他の持続的なストレージのニーズとして使われます。 -
Network Manager
は、ログファイルの最も一般的なメッセージです。通常、このメッセージはサーバー自身から受け取ります。多くの場合、入接続に関する情報や要求に対する応答を記録するのに使われます。 Stats Managerは、Statistics Manager
から受信するメッセージです。通常は稼働中のサーバーに関する統計についてのメッセージです(即ち要求に対する最大処理時間)。Error with api response
は、API応答によるエラー結果のメッセージです。Access Token
は、APIキーから受信するメッセージです。通常は無効なAPIトークン、またはAPIトークンが更新できなかったことを示すメッセージです。Service
はサーバー自身から受信するメッセージです。Application
はアプリケーション関連のメッセージです。このメッセージは非常に稀に発生します。
Starting release server v18.5.296 at http://127.0.1.1.:1714
のログエントリは、サーバーが開発サーバーかリリースサーバーのどちらか、サーバーバージョン、そしてサーバーが稼働しているIPアドレスとポート番号を表示します。これは稼働しているサーバーバージョンを調べたいときに便利です。また、複数のサーバーバージョンが存在する場合にログファイルがどのバージョンで生成されたかを簡単に確認することも可能です。
Using fast fd set configuration...
のログエントリは、サーバーがどのメカニズムを使用してソケットで利用可能なデータを検出しているかを示すだけのエントリです。サーバーが高速なfd設定環境を使用している場合、Linuxではepoll、OSXではkqueueを使用しています(Windowsは現在このような構成に対応していません)。デフォルトのfd環境設定を使用している場合は、全てのプラットフォームでpoll()
を使用しています。
HTTP応答ログエントリ(HTTP Response Log Entries)
一般的なHTTP応答ログエントリはMETHOD ROUTE HTTP/VERSION" CODE CODE_MESSAGE COMMAND RESPONSE_TIME
の形式です。
エントリ例:2020-06-17 19:48:02: Network Manager - "POST /api HTTP/1.1" 200 Ok cmd_ping 0.0022450001s
- METHOD: POST, GET, HEAD, etc.
- ROUTE: /api, /login, /
- VERSION: 1.1, 1.0, 0.9
- CODE: 200, 400, 404
- CODE_MESSAGE: Ok, Bad Request, Not Found
- COMMAND: cmd_ping
- RESPONSE_TIME: 0.001s
Statistics Managerのログエントリ(Statistics Manager Log Entries)
処理時間(Process Time)エントリは、稼働中のサーバーのライフタイムにわたる全ての要求の平均処理時間と最大処理時間を表示します。これは要求が処理を開始した時間から、処理が応答した時間までで計測されます。
エントリ例:2020-06-17 19:46:51: Stats Manager - Process Time: avg 0.010118s, max 0.020763s
キューの待機時間(Queue Wait Time)は、ワーカースレッドで処理されるのを待機しているキューの全ての要求に対する平均時間と最大時間を表示します。数字はサーバーのライフタイム全体から取得されます。
エントリ例:2020-06-17 19:46:51: Stats Manager - Queue Wait Time: avg 3.6666667e-05s, max 6.5e-05s
キューサイズ(Queue Size)は、現在のキューサイズとキューが達した最大サイズを表示します。数字はサーバーのライフタイム全体から取得されます。
エントリ例:2020-06-17 19:46:51: Stats Manager - Queue Size: current 0, max 1
接続カウント(Connection Count)ログエントリは、現在サーバーが掴んでいる接続数を表示します。例えば、サーバーが接続を再利用している場合、このカウントはその再利用された接続を示します。
エントリ例:2020-06-17 19:46:51: Stats Manager - Connection Count: 0
コメント