Get desktop application:
View/edit binary Protocol Buffers messages
Allocate attempts to allocate a specific license type for this invocation. If successful, invocations will keep the allocation alive by calling Refresh(). If the invocation is queued for the license instead, invocations will continue polling with Allocate() until allocation is successful. Returns: * NOT_FOUND if the license type is not known to the server * INVALID_ARGUMENT if the request is malformed (see request type for details)
Invocation details for this allocation
required
Returned when allocation is successful; the invocation should be able to proceed while simultaneously calling Refresh().
Returned when allocation is unsuccessful due to license contention. The invocation should continue to poll by calling Allocate() passing the invocation_id returned in this message.
LicensesStatus returns the status of all license types, as reported by both the Flextape and the underlying license servers.
Empty request
(message has no fields)
Stats for each managed license vendor/feature combination.
Refresh refreshes a license allocation while an invocation is still potentially using the license. If the invocation fails to refresh the allocation, the underlying license may be allocated to another invocation. Returns: * NOT_FOUND if allocation is not known to the server, and the client should kill the invocation.
Existing invocation to refresh. Must have been allocated by a call to Allocate() successfully (not queued). Must have invocation_id set.
required
AllocateResponse that allocated this license.
Time at which the request license will be revoked. The client should issue another RefreshRequest for this invocation_id before this time.
Release returns an allocated license to the pool. This should be called by clients to return licenses so they can be quickly allocated to other processes in the pool; otherwise, the server will need to wait for the client to time out issuing Refresh calls. Returns: * NOT_FOUND if the allocation is not known to the server.
AllocateResponse that allocated this license.
Empty response
(message has no fields)
Message used for server config file
One LicenseConfig for each vendor::feature tuple. This should be configured from the license file the vendor provides.
Allocates licenses so that they are spread evenly across users. This means that users can jump ahead of the line, or be bumped after new requests.
Used in:
(message has no fields)
Default prioritizer. Licenses are allocated in the order they are requested.
Used in:
(message has no fields)
Used in: , ,
Licenses to acquire for this invocation. Invocations that need multiple of the same license type should insert duplicate entries in this field. Implementations currently only support reserving once license per invocation, though future implementations may allow for allocations of multiple and of different types.
required
Owning entity issuing the allocation request. Used for logging purposes only. This could be the name of the user or system issuing the request. This must be sent on every Allocate() and Refresh() call in case the server is restarted.
required
Build tag of the allocation request. This tag does not need to be unique across multiple AllocateRequests, and may be used to associate multiple such requests with one higher-level task. Typically the Bazel build invocation ID is used here. This must be sent on every Allocate() and Refresh() call in case the server is restarted.
required
The server-generated ID for this invocation. In the initial Allocate() call, this can be blank for the initial request (to receive a generated one in the response) but subsequent Allocate() calls to refresh a queue position or Refresh() calls should have this field set.
Used in: , ,
Lower-case vendor name, such as `xilinx` or `cadence`.
required
Case-sensitive feature that this license is for, such as `Vivado_System_Edition` or `HLS`. These are defined by the underlying license server.
required
Used in:
Opaque identifier for this invocation, determined by the server. This ID should be used by the client in subsequent RefreshRequests for this license.
Time at which the request license will be revoked. The client should issue a RefreshRequest for this invocation_id before this time.
Used in:
vendor::feature tuple
Total number of licenses that can be allocated.
Strategy to distribute licenses.
Used in:
License to which these stats apply.
Time at which these stats were accurate. Slightly stale stats may be returned due to the underlying polling interval, and stats are not an indication of whether a subsequent AllocateRequest will immediately result in an allocation.
Number of licenses available in total, as reported by the underlying license server.
Number of licenses currently allocated, as reported by the Flextape. This should be less than or equal to in_use_count.
Invocations that are currently allocated this license. These Invocation messages will not have the `licenses` field set - it is implied from being contained by this `LicenseStats`. This field is not inherently ordered.
Number of invocations queued for a license, as reported by the Flextape. If this number is >0, then allocated_count should equal total_license_count.
Invocations that are currently queued for this license. These Invocation messages will not have the `licenses` field set - it is implied from being contained by this `LicenseStats`. This field ordered from next invocation to be allocated to last invocation to be allocated.
Used in:
Opaque identifier for this invocation, determined by the server. This ID associates the invocation with a specific spot in the queue; it should be used in subsequent AllocateRequest messages or the invocation will be placed at the back of the queue.
Location of this invocation in the queue. Invocations in position 1 are next to be allocated, with higher positions getting allocations later than lower positions. The queue_position can increase or decrease over time depending on the license prioritization strategy configured, which may allow users to jump ahead of the line, or be bumped to the end of the line.
Time at which client should issue its next AllocateRequest. The client should issue its next poll after this time; if it fails to poll for significantly longer (>5s) it may be moved to the back of the queue.
General options for the entire instance
Used in:
Interval on which actions should refresh their queue position while in queue for an allocation. Default: 15s
Interval on which actions should refresh their allocation while the action is executing. Default: 30s
Interval on which to clean up expired/released allocations and queue entries, and promote queued entries to allocations. Default: 1s
When the service first starts, for this period of time it holds off on allocating any new licenses, and instead listens for and "adopts" allocations that it hears about via the "Refresh" RPC. This duration should be >= allocation_refresh_duration_seconds, to guarantee that all clients Refresh() their allocation before the server moves into the normal operating state. Default: 45s