Skip to content

Commit 783c9b7

Browse files
committed
wip: remove async from resident read
1 parent 7e71fde commit 783c9b7

File tree

15 files changed

+94
-98
lines changed

15 files changed

+94
-98
lines changed

sandpolis-database/src/lib.rs

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use std::collections::BTreeMap;
1616
use std::collections::btree_map::IntoValues;
1717
use std::ops::{Add, RangeBounds};
1818
use std::sync::Arc;
19-
use tokio::sync::{RwLock, RwLockReadGuard};
19+
use std::sync::{RwLock, RwLockReadGuard};
2020
use tokio_util::sync::CancellationToken;
2121
use tracing::{debug, trace, warn};
2222

@@ -58,15 +58,15 @@ impl DatabaseLayer {
5858
}
5959

6060
/// Load an existing or create a new `RealmDatabase` for the given realm.
61-
pub async fn realm(&self, name: RealmName) -> Result<RealmDatabase> {
61+
pub fn realm(&self, name: RealmName) -> Result<RealmDatabase> {
6262
{
63-
let inner = self.inner.read().await;
63+
let inner = self.inner.read().unwrap();
6464
if let Some(db) = inner.get(&name) {
6565
return Ok(db.clone());
6666
}
6767
}
6868

69-
let mut inner = self.inner.write().await;
69+
let mut inner = self.inner.write().unwrap();
7070

7171
let db = if let Some(path) = self.config.get_storage_dir()? {
7272
let path = path.join(format!("{name}.db"));
@@ -175,7 +175,7 @@ impl RealmDatabase {
175175
break;
176176
}
177177
event = channel.recv() => match event {
178-
Some(event) => resident_clone.handle_event(event).await,
178+
Some(event) => resident_clone.handle_event(event),
179179
None => break,
180180

181181
}
@@ -247,7 +247,7 @@ impl RealmDatabase {
247247
break;
248248
}
249249
event = channel.recv() => match event {
250-
Some(event) => resident_clone.handle_event(event).await,
250+
Some(event) => resident_clone.handle_event(event),
251251
None => {
252252
break;
253253
}
@@ -487,19 +487,19 @@ impl<T: Data> Drop for Resident<T> {
487487
}
488488
}
489489

490-
impl<T: Data + 'static> Resident<T> {
491-
pub async fn read(&self) -> RwLockReadGuard<'_, T> {
492-
self.inner.read().await
490+
impl<T: Data> Resident<T> {
491+
pub fn read(&self) -> RwLockReadGuard<'_, T> {
492+
self.inner.read().unwrap()
493493
}
494494

495-
async fn handle_event(&self, event: Event) {
495+
fn handle_event(&self, event: Event) {
496496
trace!(event = ?event, "Handling event");
497497
match event {
498498
Event::Insert(data) => {}
499499
Event::Update(data) => match data.inner_new() {
500500
Ok(d) => {
501501
// TODO check revision and discard updates from `update`
502-
let mut c = self.inner.write().await;
502+
let mut c = self.inner.write().unwrap();
503503
*c = d;
504504
}
505505
Err(_) => {}
@@ -510,11 +510,11 @@ impl<T: Data + 'static> Resident<T> {
510510
}
511511

512512
impl<T: Data> Resident<T> {
513-
pub async fn update<F>(&self, mutator: F) -> Result<()>
513+
pub fn update<F>(&self, mutator: F) -> Result<()>
514514
where
515515
F: Fn(&mut T) -> Result<()>,
516516
{
517-
let mut previous = self.inner.write().await;
517+
let mut previous = self.inner.write().unwrap();
518518
let mut next = previous.clone();
519519
mutator(&mut next)?;
520520

@@ -550,8 +550,8 @@ impl<T: Data> Resident<T> {
550550
Ok(())
551551
}
552552

553-
pub async fn history(&self, range: impl RangeBounds<DataCreation>) -> Result<Vec<T>> {
554-
let revision_id = self.inner.read().await.id() & 0x0000_0000;
553+
pub fn history(&self, range: impl RangeBounds<DataCreation>) -> Result<Vec<T>> {
554+
let revision_id = self.read().id() & 0x0000_0000;
555555

556556
let r = self.db.r_transaction()?;
557557

@@ -614,7 +614,7 @@ mod test_resident {
614614
}
615615

616616
// Resident should reflect "test 9"
617-
assert_eq!(res.read().await.a, "test 9");
617+
assert_eq!(res.read().a, "test 9");
618618

619619
// Database should reflect "test 9"
620620
{
@@ -628,7 +628,7 @@ mod test_resident {
628628
{
629629
let rw = db.rw_transaction()?;
630630
rw.upsert(TestData {
631-
_id: res.read().await._id,
631+
_id: res.read()._id,
632632
_revision: DataRevision::default(),
633633
_creation: DataCreation::default(),
634634
a: "test 10".into(),
@@ -639,7 +639,7 @@ mod test_resident {
639639

640640
// Watch should reflect "test 10" after a while
641641
sleep(Duration::from_secs(1)).await;
642-
assert_eq!(res.read().await.a, "test 10");
642+
assert_eq!(res.read().a, "test 10");
643643

644644
Ok(())
645645
}
@@ -698,7 +698,7 @@ impl<T: Data> Drop for ResidentVec<T> {
698698
}
699699

700700
impl<T: Data> ResidentVec<T> {
701-
async fn handle_event(&self, event: Event) {
701+
fn handle_event(&self, event: Event) {
702702
trace!(event = ?event, "Handling event");
703703
match event {
704704
Event::Insert(data) => match data.inner::<T>() {
@@ -718,7 +718,7 @@ impl<T: Data> ResidentVec<T> {
718718
}
719719
}
720720

721-
let mut c = self.inner.write().await;
721+
let mut c = self.inner.write().unwrap();
722722
(*c).insert(
723723
d.id(),
724724
Resident {
@@ -732,10 +732,10 @@ impl<T: Data> ResidentVec<T> {
732732
},
733733
Event::Update(data) => match data.inner_new::<T>() {
734734
Ok(d) => {
735-
let c = self.inner.write().await;
735+
let c = self.inner.write().unwrap();
736736
match (*c).get(&d.id()) {
737737
Some(r) => {
738-
let mut r = r.inner.write().await;
738+
let mut r = r.inner.write().unwrap();
739739
*r = d;
740740
}
741741
// Got an update before insert?
@@ -753,19 +753,19 @@ impl<T: Data> ResidentVec<T> {
753753
impl<T: Data> ResidentVec<T> {
754754
/// Returns the number of elements in the vector, also referred to
755755
/// as its 'length'.
756-
pub async fn len(&self) -> usize {
757-
self.inner.read().await.len()
756+
pub fn len(&self) -> usize {
757+
self.inner.read().unwrap().len()
758758
}
759759

760760
/// Appends an element to the back of a collection.
761-
pub async fn push(&self, value: T) -> Result<Resident<T>> {
761+
pub fn push(&self, value: T) -> Result<Resident<T>> {
762762
let id = value.id();
763763

764764
{
765765
let rw = self.db.rw_transaction()?;
766766

767767
// Check for id collision
768-
if self.inner.read().await.get(&id).is_some() {
768+
if self.inner.read().unwrap().get(&id).is_some() {
769769
bail!("Duplicate primary key");
770770
}
771771

@@ -776,18 +776,18 @@ impl<T: Data> ResidentVec<T> {
776776

777777
// TODO don't busy wait
778778
loop {
779-
if let Some(value) = self.inner.read().await.get(&id) {
779+
if let Some(value) = self.inner.read().unwrap().get(&id) {
780780
return Ok(value.clone());
781781
}
782782
}
783783
}
784784

785-
pub async fn iter(&self) -> IntoValues<DataIdentifier, Resident<T>> {
786-
self.inner.read().await.clone().into_values()
785+
pub fn iter(&self) -> IntoValues<DataIdentifier, Resident<T>> {
786+
self.inner.read().unwrap().clone().into_values()
787787
}
788788

789-
pub async fn stream(&self) -> futures::stream::Iter<IntoValues<DataIdentifier, Resident<T>>> {
790-
futures::stream::iter(self.inner.read().await.clone().into_values())
789+
pub fn stream(&self) -> futures::stream::Iter<IntoValues<DataIdentifier, Resident<T>>> {
790+
futures::stream::iter(self.inner.read().unwrap().clone().into_values())
791791
}
792792
}
793793

@@ -958,7 +958,7 @@ mod test_resident_vec {
958958
{
959959
let rw = db.rw_transaction()?;
960960
rw.upsert(TestData {
961-
_id: data.read().await._id,
961+
_id: data.read()._id,
962962
_revision: DataRevision::default(),
963963
_creation: DataCreation::default(),
964964
a: "test 10".into(),
@@ -969,7 +969,7 @@ mod test_resident_vec {
969969

970970
// Should reflect "test 10" after a while
971971
sleep(Duration::from_secs(1)).await;
972-
assert_eq!(data.read().await.a, "test 10");
972+
assert_eq!(data.read().a, "test 10");
973973

974974
Ok(())
975975
}

sandpolis-instance/src/lib.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@ pub struct InstanceLayer {
2727
impl InstanceLayer {
2828
pub async fn new(database: DatabaseLayer) -> Result<Self> {
2929
let data: Resident<InstanceLayerData> =
30-
database.realm(RealmName::default()).await?.resident(())?;
30+
database.realm(RealmName::default())?.resident(())?;
3131

3232
Ok(Self {
33-
instance_id: { data.read().await.instance_id },
34-
cluster_id: { data.read().await.cluster_id },
33+
instance_id: { data.read().instance_id },
34+
cluster_id: { data.read().cluster_id },
3535
data,
3636
})
3737
}

sandpolis-mobile/android/app/src/main/java/org/sandpolis/mobile/AgentService.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,23 @@
1+
import android.app.ForegroundServiceStartNotAllowedException;
12
import android.app.Notification;
23
import android.app.Service;
4+
import android.content.Intent;
35
import android.content.pm.PackageManager;
4-
import android.os.Build;
6+
import android.content.pm.ServiceInfo;
57
import android.Manifest;
6-
import androidx.core.app.ServiceCompat;
8+
import android.os.Build;
9+
import android.os.IBinder;
710
import androidx.core.app.NotificationCompat;
11+
import androidx.core.app.ServiceCompat;
812
import androidx.core.content.ContextCompat;
9-
import android.content.pm.ServiceInfo;
10-
import android.app.ForegroundServiceStartNotAllowedException;
1113

1214
public class AgentService extends Service {
1315

16+
@Override
17+
public IBinder onBind(Intent intent) {
18+
return null;
19+
}
20+
1421
private void startForeground() {
1522
// Before starting the service as foreground check that the app has the
1623
// appropriate runtime permissions. In this case, verify that the user

sandpolis-network/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ impl NetworkLayer {
8787
})
8888
.collect::<Result<Vec<ServerConnection>>>()?,
8989
),
90-
data: database.realm(RealmName::default()).await?.resident(())?,
90+
data: database.realm(RealmName::default())?.resident(())?,
9191
})
9292
}
9393

sandpolis-realm/src/lib.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ impl RealmLayer {
4747
database: DatabaseLayer,
4848
instance: InstanceLayer,
4949
) -> Result<Self> {
50-
let default_realm = database.realm(RealmName::default()).await?;
50+
let default_realm = database.realm(RealmName::default())?;
5151
let realms: ResidentVec<RealmData> = default_realm.resident_vec(())?;
5252

5353
// Preload all realm databases
@@ -89,11 +89,11 @@ impl RealmLayer {
8989
})
9090
}
9191

92-
pub async fn realm(&self, name: RealmName) -> Result<RealmDatabase> {
92+
pub fn realm(&self, name: RealmName) -> Result<RealmDatabase> {
9393
// Don't allow this method to create realms that don't already exist
94-
for realm in self.realms.iter().await {
95-
if realm.read().await.name == name {
96-
return Ok(self.database.realm(name).await?);
94+
for realm in self.realms.iter() {
95+
if realm.read().name == name {
96+
return Ok(self.database.realm(name)?);
9797
}
9898
}
9999
bail!("Realm does not exist");

sandpolis-realm/src/server.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -236,16 +236,16 @@ impl RealmAcceptor {
236236

237237
let config = ServerConfig::builder();
238238

239-
for realm in realm_layer.realms.iter().await {
240-
let realm = realm.read().await;
241-
let db = realm_layer.realm(realm.name.clone()).await?;
239+
for realm in realm_layer.realms.iter() {
240+
let realm = realm.read();
241+
let db = realm_layer.realm(realm.name.clone())?;
242242
trace!(name = *realm.name, "Registering realm with server acceptor");
243243

244244
// Add cluster cert as a CA cert to the root store
245245
{
246246
let cluster_cert: Resident<RealmClusterCert> = db.resident(())?;
247247

248-
roots.add(cluster_cert.read().await.cert.clone().try_into()?)?;
248+
roots.add(cluster_cert.read().cert.clone().try_into()?)?;
249249
}
250250

251251
// Add server cert to the SNI resolver
@@ -258,7 +258,6 @@ impl RealmAcceptor {
258258
let private_key = config.crypto_provider().key_provider.load_private_key(
259259
server_cert
260260
.read()
261-
.await
262261
.key
263262
.clone()
264263
.ok_or_else(|| anyhow!("No server key"))?
@@ -267,9 +266,9 @@ impl RealmAcceptor {
267266
)?;
268267

269268
sni_resolver.add(
270-
&server_cert.read().await.subject_name()?,
269+
&server_cert.read().subject_name()?,
271270
rustls::sign::CertifiedKey::new(
272-
vec![server_cert.read().await.cert.clone().try_into()?],
271+
vec![server_cert.read().cert.clone().try_into()?],
273272
private_key,
274273
),
275274
)?;

sandpolis-server/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ impl ServerLayer {
3434
pub async fn new(database: DatabaseLayer, network: NetworkLayer) -> Result<Self> {
3535
Ok(Self {
3636
#[cfg(feature = "server")]
37-
banner: database.realm(RealmName::default()).await?.resident(())?,
37+
banner: database.realm(RealmName::default())?.resident(())?,
3838
network,
3939
})
4040
}

sandpolis-server/src/server/routes.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,5 @@ pub async fn banner(
1111
state: State<ServerLayer>,
1212
extract::Json(_): extract::Json<GetBannerRequest>,
1313
) -> RequestResult<GetBannerResponse> {
14-
Ok(Json(GetBannerResponse::Ok(
15-
state.banner.read().await.clone(),
16-
)))
14+
Ok(Json(GetBannerResponse::Ok(state.banner.read().clone())))
1715
}

sandpolis-sysinfo/src/lib.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,13 @@ impl SysinfoLayer {
3030
Ok(Self {
3131
#[cfg(feature = "agent")]
3232
memory: Arc::new(os::memory::agent::MemoryMonitor::new(
33-
database.realm(RealmName::default()).await?,
33+
database.realm(RealmName::default())?,
3434
)?),
3535
#[cfg(feature = "agent")]
3636
users: Arc::new(os::user::agent::UserCollector::new(
37-
database.realm(RealmName::default()).await?,
37+
database.realm(RealmName::default())?,
3838
)?),
39-
data: database.realm(RealmName::default()).await?.resident(())?,
39+
data: database.realm(RealmName::default())?.resident(())?,
4040
})
4141
}
4242
}

0 commit comments

Comments
 (0)