pub struct IndexReader { /* private fields */ }
Expand description

Index Reader reads the Index Record from Stream.

The Stream has to be fixed size single segment stream like byte stream.

§Examples

use pravega_client_config::ClientConfigBuilder;
use pravega_client::client_factory::ClientFactory;
use pravega_client_shared::ScopedStream;
use futures_util::pin_mut;
use futures_util::StreamExt;
use std::io::Write;
use tokio;

// Suppose the existing Fields in the stream is like below.
// #[derive(Fields, Debug, PartialOrd, PartialEq)]
// struct MyFields {
//    id: u64,
//    timestamp: u64,
// }

#[tokio::main]
async fn main() {
    // assuming Pravega controller is running at endpoint `localhost:9090`
    let config = ClientConfigBuilder::default()
        .controller_uri("localhost:9090")
        .build()
        .expect("creating config");

    let client_factory = ClientFactory::new(config);

    // assuming scope:myscope, stream:mystream exist.
    let stream = ScopedStream::from("myscope/mystream");

    let mut index_reader = client_factory.create_index_reader(stream).await;

    // search data
    let offset = index_reader.search_offset(("id", 10)).await.expect("get offset");

    // read data
    let s = index_reader.read(offset, u64::MAX).expect("get read slice");
    pin_mut!(s);
    while let Some(res) = s.next().await {
        // do something with the read result
        res.expect("read next event");
    }
}

Implementations§

source§

impl IndexReader

source

pub async fn search_offset( &self, field: (&'static str, u64) ) -> Result<u64, IndexReaderError>

Given an Field (name, v), find the offset of the first record that contains the given Field that has value >= v.

Note that if there are multiple entries that have the same Field name and value, this method will find and return the first one. If the value of searching field is smaller than the first readable Record’s field in the stream, the first record data will be returned. If the value of searching field is larger than the latest Record, a FieldNotFound error will be returned.

source

pub fn read<'stream, 'reader: 'stream>( &'reader self, start_offset: u64, end_offset: u64 ) -> Result<impl Stream<Item = Result<Vec<u8>, IndexReaderError>> + 'stream, IndexReaderError>

Reads records starting from the given offset.

This method returns a slice of stream that implements an iterator. Application can iterate on this slice to get the data. When next() is invoked on the iterator, a read request will be issued by the underlying reader.

If we want to do tail read instead of reading just a slice of the data, we can set end_offset to be u64::MAX.

source

pub async fn first_record_data(&self) -> Result<Vec<u8>, IndexReaderError>

Data in the first readable record.

source

pub async fn last_record_data(&self) -> Result<Vec<u8>, IndexReaderError>

Data in the last record.

source

pub async fn head_offset(&self) -> Result<u64, IndexReaderError>

Get the readable head offset.

source

pub async fn tail_offset(&self) -> Result<u64, IndexReaderError>

Get the tail offset.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoRequest<T> for T

source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more