mirror of
https://github.com/microsoft/regorus.git
synced 2026-08-05 02:16:11 +00:00
arc feature to enable using Engine and other data structures from multiple threads (#142)
* `arc` feature to make engine usable from multiple threads. `arc` is turned on by default. When enabled, std::sync::Arc will be used instead of std::rc::Rc. The former makes regorus types like Engine, Value, ast nodes etc Send, allowing for usability from multiple threads. Arc would add a performance overhead though since the reference counting will now become atomic. Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com> * Make engine and related types Debug Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com> * Input, Data as json. Evaluate bool queries. Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com> --------- Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com>
This commit is contained in:
committed by
GitHub
parent
13eb06e4be
commit
53b990f97d
33
tests/arc.rs
Normal file
33
tests/arc.rs
Normal file
@@ -0,0 +1,33 @@
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
use lazy_static::lazy_static;
|
||||
use std::sync::Mutex;
|
||||
|
||||
use regorus::*;
|
||||
|
||||
// Ensure that types can be s
|
||||
lazy_static! {
|
||||
static ref VALUE: Value = Value::Null;
|
||||
static ref ENGINE: Mutex<Engine> = Mutex::new(Engine::new());
|
||||
// static ref ENGINE: Engine = Engine::new();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn shared_engine() -> anyhow::Result<()> {
|
||||
let e_guard = ENGINE.lock();
|
||||
let mut engine = e_guard.expect("failed to lock engine");
|
||||
|
||||
engine.add_policy(
|
||||
"hello.rego".to_string(),
|
||||
r#"
|
||||
package test
|
||||
allow = true
|
||||
"#
|
||||
.to_string(),
|
||||
)?;
|
||||
|
||||
let results = engine.eval_query("data.test.allow".to_string(), false)?;
|
||||
assert_eq!(results.result[0].expressions[0].value, Value::from(true));
|
||||
Ok(())
|
||||
}
|
||||
Reference in New Issue
Block a user