Skip to content

Commit 3e71006

Browse files
authored
Merge pull request #39 from holaplex/dev
Release v0.8 update
2 parents 9804538 + ac1f8ea commit 3e71006

File tree

9 files changed

+239
-211
lines changed

9 files changed

+239
-211
lines changed

Cargo.lock

Lines changed: 143 additions & 148 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/plugin/Cargo.toml

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "holaplex-indexer-rabbitmq-geyser"
3-
version = "0.7.0"
3+
version = "0.8.0"
44
authors = [
55
"ryans <[email protected]>",
66
]
@@ -25,19 +25,19 @@ hashbrown = { version = "0.12.3", features = ["serde"] }
2525
hostname = "0.3.1"
2626
log = "0.4.17"
2727
parking_lot = "0.12.1"
28-
reqwest = "0.11.12"
29-
serde = { version = "1.0.147", features = ["derive"] }
30-
serde_json = "1.0.87"
28+
reqwest = "0.11.13"
29+
serde = { version = "1.0.149", features = ["derive"] }
30+
serde_json = "1.0.89"
3131
serde_with = "1.14.0"
3232
tokio-executor-trait = "2.1.0"
3333
tokio-reactor-trait = "1.1.0"
3434

35-
solana-geyser-plugin-interface = "~1.10.39"
36-
solana-logger = "~1.10.39"
37-
solana-metrics = "~1.10.39"
38-
solana-program = "~1.10.39"
39-
solana-transaction-status = "~1.10.39"
40-
spl-token = "3.3.1"
35+
solana-geyser-plugin-interface = "~1.13.5"
36+
solana-logger = "~1.13.5"
37+
solana-metrics = "~1.13.5"
38+
solana-program = "~1.13.5"
39+
solana-transaction-status = "~1.13.5"
40+
spl-token = "3.5.0"
4141

4242
[dependencies.tokio]
4343
version = "1.21.2"
@@ -52,13 +52,13 @@ features = [
5252

5353
[dependencies.selector]
5454
package = "holaplex-indexer-geyser-selector"
55-
version = "=0.1.0"
55+
version = "=0.1.1"
5656
path = "../selector"
5757
default-features = false
5858

5959
[dependencies.indexer-rabbitmq]
6060
package = "holaplex-indexer-rabbitmq"
61-
version = "=0.4.0"
61+
version = "=0.4.1"
6262
path = "../rabbitmq"
6363
default-features = false
6464
features = ["producer", "geyser"]

crates/plugin/build.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,20 @@ fn main() {
3535
);
3636
}
3737

38-
println!(
39-
"cargo:rustc-env=META_BUILD_PLATFORM=ptr{},{},{}",
38+
print!(
39+
"cargo:rustc-env=META_BUILD_PLATFORM=ptr{},{}",
4040
env::var("CARGO_CFG_TARGET_POINTER_WIDTH").unwrap(),
4141
env::var("CARGO_CFG_TARGET_ENDIAN").unwrap(),
42-
env::var("CARGO_CFG_TARGET_FEATURE").unwrap(),
4342
);
4443

44+
if let Some(feat) = env::var_os("CARGO_CFG_TARGET_FEATURE") {
45+
if !feat.is_empty() {
46+
print!(",{}", feat.into_string().unwrap());
47+
}
48+
}
49+
50+
println!();
51+
4552
let toplevel = Command::new("git")
4653
.arg("rev-parse")
4754
.arg("--show-toplevel")

crates/plugin/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ mod plugin;
2828
pub(crate) mod selector;
2929
pub(crate) mod sender;
3030

31-
pub use plugin::GeyserPluginRabbitMq;
31+
pub(crate) use plugin::GeyserPluginRabbitMq;
3232

3333
#[no_mangle]
3434
#[allow(improper_ctypes_definitions)]

crates/plugin/src/metrics.rs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,17 +42,25 @@ impl Counter {
4242

4343
#[derive(Debug)]
4444
pub struct Metrics {
45-
pub sends: Counter,
46-
pub recvs: Counter,
45+
pub acct_sends: Counter,
46+
pub acct_recvs: Counter,
47+
pub ins_sends: Counter,
48+
pub txn_recvs: Counter,
49+
pub status_sends: Counter,
50+
pub status_recvs: Counter,
4751
pub errs: Counter,
4852
pub reconnects: Counter,
4953
}
5054

5155
impl Metrics {
5256
pub fn new_rc() -> Arc<Self> {
5357
Arc::new(Self {
54-
sends: Counter::new("geyser_sends", Level::Info),
55-
recvs: Counter::new("geyser_recvs", Level::Info),
58+
acct_sends: Counter::new("geyser_acct_sends", Level::Info),
59+
acct_recvs: Counter::new("geyser_acct_recvs", Level::Info),
60+
ins_sends: Counter::new("geyser_ins_sends", Level::Info),
61+
txn_recvs: Counter::new("geyser_txn_recvs", Level::Info),
62+
status_sends: Counter::new("geyser_status_sends", Level::Info),
63+
status_recvs: Counter::new("geyser_status_recvs", Level::Info),
5664
errs: Counter::new("geyser_errs", Level::Error),
5765
reconnects: Counter::new("geyser_reconnects", Level::Error),
5866
})

crates/plugin/src/plugin.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ impl GeyserPlugin for GeyserPluginRabbitMq {
214214
self.with_inner(
215215
|| GeyserPluginError::AccountsUpdateError { msg: UNINIT.into() },
216216
|this| {
217-
this.metrics.recvs.log(1);
217+
this.metrics.acct_recvs.log(1);
218218

219219
match account {
220220
ReplicaAccountInfoVersions::V0_0_1(acct) => {
@@ -250,7 +250,7 @@ impl GeyserPlugin for GeyserPluginRabbitMq {
250250
is_startup,
251251
}))
252252
.await;
253-
this.metrics.sends.log(1);
253+
this.metrics.acct_sends.log(1);
254254

255255
Ok(())
256256
});
@@ -271,7 +271,7 @@ impl GeyserPlugin for GeyserPluginRabbitMq {
271271
self.with_inner(
272272
|| GeyserPluginError::SlotStatusUpdateError { msg: UNINIT.into() },
273273
|this| {
274-
this.metrics.recvs.log(1);
274+
this.metrics.status_recvs.log(1);
275275

276276
this.spawn(|this| async move {
277277
this.producer
@@ -285,7 +285,7 @@ impl GeyserPlugin for GeyserPluginRabbitMq {
285285
},
286286
}))
287287
.await;
288-
this.metrics.sends.log(1);
288+
this.metrics.status_sends.log(1);
289289

290290
Ok(())
291291
});
@@ -346,7 +346,7 @@ impl GeyserPlugin for GeyserPluginRabbitMq {
346346
return Ok(());
347347
}
348348

349-
this.metrics.recvs.log(1);
349+
this.metrics.txn_recvs.log(1);
350350

351351
match transaction {
352352
ReplicaTransactionInfoVersions::V0_0_1(tx) => {
@@ -386,7 +386,7 @@ impl GeyserPlugin for GeyserPluginRabbitMq {
386386
Ok(Some(m)) => {
387387
this.spawn(|this| async move {
388388
this.producer.send(m).await;
389-
this.metrics.sends.log(1);
389+
this.metrics.ins_sends.log(1);
390390

391391
Ok(())
392392
});

crates/rabbitmq/Cargo.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "holaplex-indexer-rabbitmq"
3-
version = "0.4.0"
3+
version = "0.4.1"
44
authors = [
55
"ryans <[email protected]>",
66
]
@@ -29,9 +29,9 @@ lapin = "2.1.1"
2929
log = "0.4.17"
3030
rand = "0.8.5"
3131
rmp-serde = "1.1.1"
32-
serde = { version = "1.0.147", features = ["derive"] }
33-
serde_json = { version = "1.0.87", optional = true }
32+
serde = { version = "1.0.149", features = ["derive"] }
33+
serde_json = { version = "1.0.89", optional = true }
3434
# TODO: tighten this bound once more things support 1.10
35-
solana-program = { version = ">=1.9,<1.11", optional = true }
35+
solana-program = { version = ">=1.9,<1.14", optional = true }
3636
strum = { version = "0.24.1", features = ["derive"] }
3737
thiserror = "1.0.37"

crates/rabbitmq/src/queue_type.rs

Lines changed: 47 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,26 @@ pub struct RetryProps {
5151
pub max_delay: Duration,
5252
}
5353

54+
impl RetryProps {
55+
#[inline]
56+
fn dl_exchange(&self, props: &QueueProps) -> String {
57+
#[allow(clippy::drop_ref)]
58+
std::mem::drop(self); // self isn't used, but is required to exist for
59+
// this method to make sense
60+
format!("dlx.{}", props.queue)
61+
}
62+
63+
// returns (exchange, queue, triage_queue)
64+
#[inline]
65+
fn dl_info(&self, props: &QueueProps) -> (String, String, String) {
66+
(
67+
self.dl_exchange(props),
68+
format!("dlq.{}", props.queue),
69+
format!("triage.dlq.{}", props.queue),
70+
)
71+
}
72+
}
73+
5474
#[derive(Debug, Clone)]
5575
pub struct QueueProps {
5676
pub exchange: String,
@@ -123,18 +143,6 @@ impl<'a> QueueInfo<'a> {
123143

124144
#[cfg(feature = "consumer")]
125145
impl<'a> QueueInfo<'a> {
126-
fn dl_exchange(self) -> String {
127-
format!("dlx.{}", self.0.queue)
128-
}
129-
130-
fn dl_queue(self) -> String {
131-
format!("dlq.{}", self.0.queue)
132-
}
133-
134-
fn dl_triage_queue(self) -> String {
135-
format!("triage.dlq.{}", self.0.queue)
136-
}
137-
138146
async fn queue_declare(self, chan: &Channel) -> Result<()> {
139147
let mut queue_fields = FieldTable::default();
140148

@@ -143,15 +151,17 @@ impl<'a> QueueInfo<'a> {
143151
AMQPValue::LongLongInt(self.0.max_len_bytes),
144152
);
145153

146-
queue_fields.insert(
147-
"x-dead-letter-exchange".into(),
148-
AMQPValue::LongString(self.dl_exchange().into()),
149-
);
154+
if let Some(ref retry) = self.0.retry {
155+
queue_fields.insert(
156+
"x-dead-letter-exchange".into(),
157+
AMQPValue::LongString(retry.dl_exchange(self.0).into()),
158+
);
150159

151-
queue_fields.insert(
152-
"x-dead-letter-routing-key".into(),
153-
AMQPValue::LongString(DLX_TRIAGE_KEY.into()),
154-
);
160+
queue_fields.insert(
161+
"x-dead-letter-routing-key".into(),
162+
AMQPValue::LongString(DLX_TRIAGE_KEY.into()),
163+
);
164+
}
155165

156166
chan.queue_declare(
157167
self.0.queue.as_ref(),
@@ -167,24 +177,27 @@ impl<'a> QueueInfo<'a> {
167177
}
168178

169179
/// Returns (`dl_exchange`, `dl_queue`, `dl_triage_queue`)
170-
async fn dl_exchange_declare(self, chan: &Channel) -> Result<(String, String, String)> {
180+
async fn dl_exchange_declare(self, chan: &Channel) -> Result<Option<(String, String, String)>> {
171181
let mut exchg_fields = FieldTable::default();
172182

183+
let retry = if let Some(retry) = self.0.retry {
184+
retry
185+
} else {
186+
return Ok(None);
187+
};
188+
173189
exchg_fields.insert(
174190
"x-message-ttl".into(),
175191
AMQPValue::LongLongInt(
176-
self.0
177-
.retry
178-
.as_ref()
179-
.ok_or(Error::InvalidQueueType("Missing retry info"))?
192+
retry
180193
.max_delay
181194
.as_millis()
182195
.try_into()
183196
.map_err(|_| Error::InvalidQueueType("Max delay overflowed i64"))?,
184197
),
185198
);
186199

187-
let exchg = self.dl_exchange();
200+
let (exchg, queue, triage) = retry.dl_info(self.0);
188201

189202
chan.exchange_declare(
190203
exchg.as_ref(),
@@ -197,15 +210,17 @@ impl<'a> QueueInfo<'a> {
197210
)
198211
.await?;
199212

200-
Ok((exchg, self.dl_queue(), self.dl_triage_queue()))
213+
Ok(Some((exchg, queue, triage)))
201214
}
202215

203216
pub(crate) async fn init_consumer(
204217
self,
205218
chan: &Channel,
206219
tag: impl AsRef<str>,
207220
) -> Result<Consumer> {
208-
self.dl_exchange_declare(chan).await?;
221+
if self.0.retry.is_some() {
222+
self.dl_exchange_declare(chan).await?;
223+
}
209224
self.exchange_declare(chan).await?;
210225
self.queue_declare(chan).await?;
211226

@@ -235,7 +250,10 @@ impl<'a> QueueInfo<'a> {
235250
self,
236251
chan: &Channel,
237252
) -> Result<(Consumer, DlConsumerInfo)> {
238-
let (exchange, queue, triage_queue) = self.dl_exchange_declare(chan).await?;
253+
let (exchange, queue, triage_queue) = self
254+
.dl_exchange_declare(chan)
255+
.await?
256+
.ok_or(Error::InvalidQueueType("Missing retry info"))?;
239257

240258
{
241259
let mut queue_fields = FieldTable::default();

crates/selector/Cargo.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "holaplex-indexer-geyser-selector"
3-
version = "0.1.0"
3+
version = "0.1.1"
44
authors = [
55
"Holaplex Engineering <[email protected]>",
66
]
@@ -17,16 +17,16 @@ categories = ["cryptography::cryptocurrencies", "web-programming"]
1717
hashbrown = { version = "0.12.3", features = ["serde"] }
1818
log = "0.4.17"
1919
once_cell = "1.16.0"
20-
serde = { version = "1.0.147", features = ["derive"] }
20+
serde = { version = "1.0.149", features = ["derive"] }
2121
thiserror = "1.0.37"
2222

2323
# TODO: tighten the >=1.9 bounds once more things support 1.10
24-
solana-program = ">=1.9, <1.11"
24+
solana-program = ">=1.9, <1.14"
2525
spl-token = ">=3.2, <3.6"
2626

2727
[dependencies.indexer-rabbitmq]
2828
package = "holaplex-indexer-rabbitmq"
29-
version = "=0.4.0"
29+
version = "=0.4.1"
3030
path = "../rabbitmq"
3131
default-features = false
3232
features = ["producer", "geyser"]

0 commit comments

Comments
 (0)