Interface ConcurrentAttributes

All Superinterfaces:
AttributesGetters, AttributesSetters

@UnstableApi public interface ConcurrentAttributes extends AttributesGetters, AttributesSetters
An Attributes supporting concurrency of retrievals and updates.
  • Method Details

    • of

      static ConcurrentAttributes of()
      Returns a new empty ConcurrentAttributes.
    • fromParent

      static ConcurrentAttributes fromParent(AttributesGetters parent)
      Returns a new ConcurrentAttributes with the specified parent AttributesGetters. The parent AttributesGetters can be accessed via AttributesGetters.attr(AttributeKey) or AttributesGetters.attrs().

      Note that any mutations in ConcurrentAttributes won't modify the attributes in the parent.

    • set

      <T> ConcurrentAttributes set(io.netty.util.AttributeKey<T> key, @Nullable T value)
      Description copied from interface: AttributesSetters
      Sets the specified value with the given AttributeKey. The old value associated with the AttributeKey is replaced by the specified value. If a null value is specified, the value in the AttributesGetters.parent() is hidden as well.
      
       static final AttributeKey<String> USER_ID = AttributeKey.valueOf("USER_ID");
       static final AttributeKey<String> SECRET_TOKEN = AttributeKey.valueOf("SECRET_TOKEN");
       static final AttributeKey<String> TRACE_ID = AttributeKey.valueOf("TRACE_ID");
      
       Attributes attributes = Attributes.of(USER_ID, "Meri Kim",
                                             SECRET_TOKEN, "secret-1",
                                             TRACE_ID, "trace-1");
      
       Attributes child = Attributes.builder(attributes)
                                    .set(SECRET_TOKEN, null)
                                    .set(TRACE_ID, "trace-2")
                                    .build();
      
       // Any mutations in the child do not modify the value in the parent.
       assert attributes.attr(USER_ID).equals("Meri Kim");
       assert attributes.attr(SECRET_TOKEN).equals("secret-1");
       assert attributes.attr(TRACE_ID).equals("trace-1");
      
       // Inherits the value of USER_ID from the parent.
       assert child.attr(USER_ID).equals("Meri Kim");
       // Hides the value of SECRET_TOKEN that the parent has.
       assert child.attr(SECRET_TOKEN) == null;
       // Overrides the parent's TRACE_ID.
       assert child.attr(TRACE_ID).equals("trace-2");
       
      Specified by:
      set in interface AttributesSetters
    • removeAndThen

      default <T> ConcurrentAttributes removeAndThen(io.netty.util.AttributeKey<T> key)
      Description copied from interface: AttributesSetters
      Removes the value associated with the specified AttributeKey in the AttributesGetters.ownAttrs(). Unlike AttributesSetters.remove(AttributeKey) this method returns itself so that the caller can chain the invocations.

      Note that this method won't remove the value in AttributesGetters.parent().

      Specified by:
      removeAndThen in interface AttributesSetters