View Issue Details

IDProjectCategoryView StatusLast Update
000833910000-003: Address SpaceSpecpublic2023-06-20 18:07
ReporterMatthias Damm Assigned To 
PrioritynormalSeverityfeatureReproducibilityhave not tried
Status acknowledgedResolutionopen 
Summary0008339: Features needed for locking functionality
Description

There are different use cases where one object in the server address space 'locks' change access (Write, Method Call) for a list (network) of nodes.
Examples are the DataSetReader in PubSub that locks the TargetVariables and LockingServicesType in OPC DI.

What is currently missing is the indication of the 'locked' state of the affected nodes and the relation to the owning lock object.

Based on previous discussions, the best way to indicate the 'locked' state is a new Locked flag in the AccessRestrictions attribute.
The AccessRestrictions attribute is available for all NodeClasses.

The relation can be indicated by a non hierarchical HasLockOwner reference from the locked node to the object that owns the lock.

TagsNo tags attached.
Commit Version
Fix Due Date

Relationships

related to 0005508 acknowledged 10000-014: PubSub AccessLevel (writer capability) undefined for TargetVariables 

Activities

Jeff Harding

2023-05-04 19:17

developer   ~0019288

I don't think adding this to AccessRestrictionType is the right thing to do. Currently all the bits defined for this type are very static in nature. Introducing a very dynamic 'locked' status seems wrong.
Can you propose another option?

Matthias Damm

2023-05-05 07:08

developer   ~0019290

EVERY OPC UA Service call (Browse, Read, Write, Call...) must check

  • RolePermissions
  • AccessRestrictions
  • AccessLevel (Variables)
  • Executable (Method)

Therefore I do not understand the comment about 'static'. The values of these attributes may change infrequently but they can all change. But the check with these attributes must be done for most OPC UA Services for every single Service call.

RolePermissions is related to Roles and does not fit with the locking.
AccessLevel is only available for Variables
Executable is a boolean that can not be extended with another flag.

If we do not want to introduce another attribute, AccessRestrictions is the only option.
Even the name fits perfectly. A locked node has access restrictions. The name is not 'PermanentAccessRestrictions'

David Levine

2023-06-15 19:25

developer   ~0019489

A Server needs to check before an operation is performed - that should be considered "normal" because the responsibility for access checks lies with the server, and the check must be made at the instant the client request is received.

For a client to do the checking before it attempts an operation is sub-optimal because
1) creates a race condition where the client checks the access, gets the OK, and before it can perform the operation the lock status changed.
2) it does not scale to thousands/millions of nodes
3) imposes significant performance costs and complexity to otherwise simple and fast operations.
4) Reading the attribute prior to requesting the operation will be wasted if the value has not changed.

I'd prefer a solution where the client subscribes for notifications that are reported when changes in locking occurred. This mechanism can be extended to include other changes in otherwise static attributes, such as a change in engineering units. There may still be a race but at least it eliminates an unnecessary attribute read

Karl Deiretsbacher

2023-06-20 15:46

developer   ~0019574

From the description it is not obvious why the 'locked' state has to be in a standard attribute. Do we expect that Clients read this and then do not execute certain calls? See also David's "sub-optimal" note.
Servers can have an internal attribute with this locked state.

Is it expected that the LockingService defined in Part 100 also adds the "HasLockOwner" references? has to be optional only to avoid a breaking change.

Jim Luth

2023-06-20 17:45

administrator   ~0019575

This needs to be designed in conjuction with an entire feature.

Issue History

Date Modified Username Field Change
2022-09-20 21:49 Matthias Damm New Issue
2022-09-20 21:49 Matthias Damm Relationship added related to 0005508
2022-09-27 16:07 Jim Luth Assigned To => Jeff Harding
2022-09-27 16:07 Jim Luth Status new => assigned
2023-05-04 19:17 Jeff Harding Status assigned => feedback
2023-05-04 19:17 Jeff Harding Note Added: 0019288
2023-05-05 07:08 Matthias Damm Status feedback => assigned
2023-05-05 07:08 Matthias Damm Note Added: 0019290
2023-06-15 19:25 David Levine Note Added: 0019489
2023-06-20 15:46 Karl Deiretsbacher Note Added: 0019574
2023-06-20 17:43 Jim Luth Target Version 1.05.03 RC1 =>
2023-06-20 17:45 Jim Luth Status assigned => acknowledged
2023-06-20 17:45 Jim Luth Note Added: 0019575
2023-06-20 17:45 Jim Luth Assigned To Jeff Harding =>