Class RestrictedSegment

java.lang.Object
org.apache.druid.segment.RestrictedSegment
All Implemented Interfaces:
Closeable, AutoCloseable, Segment

public class RestrictedSegment extends Object implements Segment
A Segment wrapper with a Policy restriction that is automatically enforced. The policy seamlessly governs queries on the wrapped segment, ensuring compliance for supported interfaces. For example, as(Class) with CursorFactory returns a policy-enforced RestrictedCursorFactory.

Direct access to the policy or the underlying Segment (the delegate) is not allowed. However, a backdoor is available via as(BypassRestrictedSegment.class), allowing access to a BypassRestrictedSegment instance, which provides flexibility on policy enforcement.

  • Field Details

    • delegate

      protected final Segment delegate
    • policy

      protected final Policy policy
  • Constructor Details

    • RestrictedSegment

      public RestrictedSegment(Segment delegate, Policy policy)
  • Method Details

    • getId

      public SegmentId getId()
      Description copied from interface: Segment
      Returns the SegmentId of this segment, if it is backed by a real table, otherwise returns null.
      Specified by:
      getId in interface Segment
    • getDataInterval

      public org.joda.time.Interval getDataInterval()
      Specified by:
      getDataInterval in interface Segment
    • as

      @Nullable public <T> T as(@Nonnull Class<T> clazz)
      Description copied from interface: Segment
      Request an implementation of a particular interface.

      All implementations of this method should be able to provide a CursorFactory. Other interfaces are only expected to be requested by callers that have specific knowledge of extra features provided by specific segment types. For example, an extension might provide a custom Segment type that can offer both CursorFactory and some new interface. That extension can also offer a Query that uses that new interface.

      Implementations which accept classes other than known built-in interfaces such as CursorFactory are limited to using those classes within the extension. This means that one extension cannot rely on the `Segment.as` behavior of another extension.

      Specified by:
      as in interface Segment
      Type Parameters:
      T - desired interface
      Parameters:
      clazz - desired interface
      Returns:
      instance of clazz, or null if the interface is not supported by this segment, one of the following:
    • validateOrElseThrow

      public void validateOrElseThrow(PolicyEnforcer policyEnforcer)
      Description copied from interface: Segment
      Validates if the segment complies with the policy restrictions on tables.

      This should be called right before the segment is about to be processed by the query stack, and after ExecutionVertex.createSegmentMapFunction(PolicyEnforcer).

      Specified by:
      validateOrElseThrow in interface Segment
    • isTombstone

      public boolean isTombstone()
      Specified by:
      isTombstone in interface Segment
    • close

      public void close() throws IOException
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Throws:
      IOException
    • getDebugString

      public String getDebugString()
      Description copied from interface: Segment
      Developer friendly string suitable to use in internal error messages and provide some additional information about what kind of segment was involved in a problem
      Specified by:
      getDebugString in interface Segment