Share via


3.3.5.22.2 Processing a Lease Acknowledgment

The server MUST locate the session, as specified in section 3.3.5.2.9.

The server MUST locate the tree connection, as specified in section 3.3.5.2.11.

Next, the server MUST locate the Lease Table by performing a lookup in GlobalLeaseTableList using Connection.ClientGuid as the lookup key. If no lease table is found, the server MUST fail the request with STATUS_OBJECT_NAME_NOT_FOUND.

The server MUST locate the lease on which the client is acknowledging a lease break by performing a lookup in LeaseTable.LeaseList using the LeaseKey of the request as the lookup key. If no lease is found, the server MUST fail the request with STATUS_OBJECT_NAME_NOT_FOUND.

If there is an Open in Lease.LeaseOpens where Open.IsPersistent is FALSE and Open.IsReplayEligible is TRUE, the server MUST set Open.IsReplayEligible to FALSE.

If Lease.Breaking is FALSE, the server MUST fail the request with STATUS_UNSUCCESSFUL.

If LeaseState is not a subset of Lease.BreakToLeaseState, the server MUST fail the request with STATUS_REQUEST_NOT_ACCEPTED.

The server completes the lease break request received from the object store as described in section 3.3.4.7. The server MUST set Lease.LeaseState to LeaseState received in the request, Open.OplockState to “Held”, and Lease.Breaking to FALSE.

The server then MUST construct a lease break response using the syntax specified in section 2.2.25.2 with the following values:

  • LeaseKey MUST be set to Lease.LeaseKey.

  • LeaseState MUST be set to Lease.LeaseState.

This response MUST then be sent to the client.

The status code returned by this operation MUST be one of those defined in [MS-ERREF]. Common status codes returned by this operation include:

  • STATUS_ACCESS_DENIED

  • STATUS_OBJECT_NAME_NOT_FOUND

  • STATUS_INVALID_OPLOCK_PROTOCOL

  • STATUS_INVALID_PARAMETER

  • STATUS_INVALID_DEVICE_STATE

  • STATUS_NETWORK_NAME_DELETED

  • STATUS_USER_SESSION_DELETED