Implement native inventory manager workflows (#62)
This commit is contained in:
@@ -36,3 +36,36 @@ The focused compatibility suites are
|
||||
`inventory_store_semantics` and `misclassified_link_semantics`; native unit
|
||||
tests additionally cover concrete cache round trips, permissions, corruption,
|
||||
unknown versions, system-folder sorting, and callback re-entry.
|
||||
|
||||
## UDP inventory manager
|
||||
|
||||
`InventoryManager` now owns the live inventory protocol boundary. Login installs
|
||||
the agent and library skeletons in the transport-free store, while validated
|
||||
`UpdateCreateInventoryItem`, `BulkUpdateInventory`, `FetchInventoryReply`, and
|
||||
`InventoryDescendents` replies populate or reconcile it. Create and copy callback
|
||||
IDs, item fetches, task replies, and inventory offers are correlated independently;
|
||||
cancelling one waiter removes only that waiter. A cleanup worker bounds abandoned
|
||||
requests to one minute, and the manager rejects more than 4,096 pending operations.
|
||||
|
||||
Outbound create, update, move, copy, remove, give, rez/derez, script-state, and
|
||||
task-inventory operations build the generated protocol packet types. Generated
|
||||
multi-block packets use the packet codec's `encode_multiple` path, so large batches
|
||||
are split according to the UDP transport bounds while retaining the same agent,
|
||||
session, transaction, callback, owner, and permission data. Capability-backed
|
||||
inventory fetch and folder-content responses are parsed before becoming visible in
|
||||
the store. Asset, material, script, notecard, and thumbnail upload bodies remain a
|
||||
separate asset-pipeline concern.
|
||||
|
||||
Legacy task inventory uses a correlated `ReplyTaskInventory` filename followed by
|
||||
a `RequestXfer` transfer. The implementation confirms packets, handles duplicate
|
||||
or out-of-order packet numbers deterministically, aborts cancelled transfers, and
|
||||
rejects announced or accumulated data above 16 MiB. Task text parsing is capped at
|
||||
100,000 entries and accepts both plain asset IDs and the reference shadow-ID XOR
|
||||
encoding. The capability path applies the same byte and entry limits.
|
||||
|
||||
No store lock is held across an await, a packet send, or an observer callback.
|
||||
Reply data is decoded and validated before store mutation, and event registries
|
||||
snapshot subscribers before invoking them. Focused coverage lives in
|
||||
`inventory_manager_semantics`, `task_inventory_semantics`, and the native
|
||||
`inventory_manager::tests` fake-packet cases for callback isolation, bulk-copy
|
||||
completion, stale folder versions, offers, capability events, and bounded Xfer.
|
||||
|
||||
Reference in New Issue
Block a user