@@ -4,14 +4,17 @@ use hstreamdb_pb::{
4
4
} ;
5
5
use prost:: DecodeError ;
6
6
7
+ use crate :: channel_provider:: Channels ;
7
8
use crate :: client:: Client ;
8
9
use crate :: common:: { self , ShardId } ;
9
10
use crate :: utils:: decode_received_records;
10
- use crate :: { format_url, Payload } ;
11
+ use crate :: { format_url, ChannelProviderSettings , Payload } ;
11
12
12
- pub struct ShardReaderId {
13
+ pub struct ShardReader {
13
14
reader_id : String ,
14
15
server_url : String ,
16
+
17
+ channels : Channels ,
15
18
}
16
19
17
20
impl Client {
@@ -22,7 +25,8 @@ impl Client {
22
25
shard_id : ShardId ,
23
26
shard_offset : crate :: common:: StreamShardOffset ,
24
27
timeout_ms : u32 ,
25
- ) -> common:: Result < ShardReaderId > {
28
+ channel_provider_settings : ChannelProviderSettings ,
29
+ ) -> common:: Result < ShardReader > {
26
30
let request = CreateShardReaderRequest {
27
31
stream_name,
28
32
shard_id,
@@ -49,24 +53,25 @@ impl Client {
49
53
. ok_or_else ( || common:: Error :: PBUnwrapError ( "server_node" . to_string ( ) ) ) ?;
50
54
let server_url = format_url ! ( & self . url_scheme, server_node) ;
51
55
52
- Ok ( ShardReaderId {
56
+ let channels = self . new_channel_provider ( channel_provider_settings) . await ?;
57
+
58
+ Ok ( ShardReader {
53
59
reader_id,
54
60
server_url,
61
+ channels,
55
62
} )
56
63
}
64
+ }
57
65
66
+ impl ShardReader {
58
67
pub async fn read_shard (
59
68
& self ,
60
- shard_reader_id : & ShardReaderId ,
61
69
max_records : u32 ,
62
70
) -> common:: Result < Vec < ( RecordId , Result < Payload , DecodeError > ) > > {
63
- let mut channel = self
64
- . channels
65
- . channel_at ( shard_reader_id. server_url . clone ( ) )
66
- . await ?;
71
+ let mut channel = self . channels . channel_at ( self . server_url . clone ( ) ) . await ?;
67
72
let records = channel
68
73
. read_shard ( ReadShardRequest {
69
- reader_id : shard_reader_id . reader_id . clone ( ) ,
74
+ reader_id : self . reader_id . clone ( ) ,
70
75
max_records,
71
76
} )
72
77
. await ?
@@ -84,14 +89,11 @@ impl Client {
84
89
Ok ( records)
85
90
}
86
91
87
- pub async fn delete_shard_reader ( & self , shard_reader_id : & ShardReaderId ) -> common:: Result < ( ) > {
88
- let mut channel = self
89
- . channels
90
- . channel_at ( shard_reader_id. server_url . clone ( ) )
91
- . await ?;
92
+ pub async fn delete_shard_reader ( self ) -> common:: Result < ( ) > {
93
+ let mut channel = self . channels . channel_at ( self . server_url ) . await ?;
92
94
channel
93
95
. delete_shard_reader ( DeleteShardReaderRequest {
94
- reader_id : shard_reader_id . reader_id . clone ( ) ,
96
+ reader_id : self . reader_id ,
95
97
} )
96
98
. await ?;
97
99
Ok ( ( ) )
0 commit comments