@@ -47,7 +47,6 @@ use rumqttc::{
4747 Incoming as MqttIncoming , Outgoing as MqttOutgoing , Packet as MqttPacket ,
4848} ;
4949
50- use crate :: async_runtime:: create_async_tokio_runtime;
5150use crate :: connectors:: aws:: dynamodb:: Error as AwsDynamoDBError ;
5251use crate :: connectors:: aws:: kinesis:: Error as AwsKinesisError ;
5352use crate :: connectors:: aws:: kinesis:: KinesisReader ;
@@ -80,7 +79,6 @@ use async_nats::client::PublishError as NatsPublishError;
8079use async_nats:: error:: Error as NatsError ;
8180use async_nats:: jetstream:: context:: PublishErrorKind as JetStreamPublishError ;
8281use bincode:: ErrorKind as BincodeError ;
83- use elasticsearch:: { BulkParts , Elasticsearch } ;
8482use glob:: PatternError as GlobPatternError ;
8583use mongodb:: bson:: Document as BsonDocument ;
8684use mongodb:: error:: Error as MongoError ;
@@ -107,6 +105,7 @@ pub use super::data_lake::delta::{
107105} ;
108106pub use super :: data_lake:: iceberg:: IcebergReader ;
109107pub use super :: data_lake:: LakeWriter ;
108+ pub use super :: elasticsearch:: ElasticSearchWriter ;
110109pub use super :: nats:: NatsReader ;
111110pub use super :: nats:: NatsWriter ;
112111pub use super :: postgres:: { PsqlWriter , SslError } ;
@@ -1492,68 +1491,6 @@ impl Writer for KafkaWriter {
14921491 }
14931492}
14941493
1495- pub struct ElasticSearchWriter {
1496- client : Elasticsearch ,
1497- index_name : String ,
1498- max_batch_size : Option < usize > ,
1499-
1500- docs_buffer : Vec < Vec < u8 > > ,
1501- }
1502-
1503- impl ElasticSearchWriter {
1504- pub fn new ( client : Elasticsearch , index_name : String , max_batch_size : Option < usize > ) -> Self {
1505- ElasticSearchWriter {
1506- client,
1507- index_name,
1508- max_batch_size,
1509- docs_buffer : Vec :: new ( ) ,
1510- }
1511- }
1512- }
1513-
1514- impl Writer for ElasticSearchWriter {
1515- fn write ( & mut self , data : FormatterContext ) -> Result < ( ) , WriteError > {
1516- for payload in data. payloads {
1517- self . docs_buffer . push ( b"{\" index\" : {}}" . to_vec ( ) ) ;
1518- self . docs_buffer . push ( payload. into_raw_bytes ( ) ?) ;
1519- }
1520-
1521- if let Some ( max_batch_size) = self . max_batch_size {
1522- if self . docs_buffer . len ( ) / 2 >= max_batch_size {
1523- self . flush ( true ) ?;
1524- }
1525- }
1526-
1527- Ok ( ( ) )
1528- }
1529-
1530- fn flush ( & mut self , _forced : bool ) -> Result < ( ) , WriteError > {
1531- if self . docs_buffer . is_empty ( ) {
1532- return Ok ( ( ) ) ;
1533- }
1534- create_async_tokio_runtime ( ) ?. block_on ( async {
1535- self . client
1536- . bulk ( BulkParts :: Index ( & self . index_name ) )
1537- . body ( take ( & mut self . docs_buffer ) )
1538- . send ( )
1539- . await
1540- . map_err ( WriteError :: Elasticsearch ) ?
1541- . error_for_status_code ( )
1542- . map_err ( WriteError :: Elasticsearch ) ?;
1543-
1544- Ok ( ( ) )
1545- } )
1546- }
1547-
1548- fn name ( & self ) -> String {
1549- format ! ( "ElasticSearch({})" , self . index_name)
1550- }
1551-
1552- fn single_threaded ( & self ) -> bool {
1553- false
1554- }
1555- }
1556-
15571494#[ derive( Default , Debug ) ]
15581495pub struct NullWriter ;
15591496
0 commit comments