Skip to content
Merged
Show file tree
Hide file tree
Changes from 9 commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
6bd0f0d
... it works! DiskRuntimeState is being 'selected'
smklein Sep 20, 2021
f6560d2
Also selecting on InstanceRuntimeState
smklein Sep 20, 2021
77dcebd
added define_identity macro; mostly switched project + instance
smklein Sep 21, 2021
c4fca67
Refactor generics into UpdateStatementExt container of associated types
smklein Sep 21, 2021
e56e90e
Merge branch 'diesel-selectable' into identity-metadata
smklein Sep 22, 2021
44795f7
Merge branch 'main' into diesel-selectable
smklein Sep 22, 2021
d841024
Merge branch 'diesel-selectable' into identity-metadata
smklein Sep 22, 2021
a88b63f
Add new derive macro for IdentityMetadata, use it
smklein Sep 22, 2021
ad29bca
fmt
smklein Sep 22, 2021
771af1d
Merge branch 'main' into identity-metadata
smklein Oct 5, 2021
c2c8424
Resource trait, renamed derive macro
smklein Oct 5, 2021
2aefcd3
Identity type checking via traits
smklein Oct 6, 2021
11860bb
Merge w/durable sleds
smklein Oct 6, 2021
3b2a639
Use traits: 'resource' for full metadata, 'asset' for no soft delete.
smklein Oct 6, 2021
635369f
Remove unnecessary dep
smklein Oct 6, 2021
0fcf9be
Unwrapping names strikes again! (Fixed)
smklein Oct 6, 2021
6f04d09
Merge branch 'main' into identity-metadata
smklein Oct 6, 2021
9a058f5
Remove macro from workspace Cargo.toml; it's just a local dep of Nexus
smklein Oct 6, 2021
f784bfe
Merge branch 'main' into identity-metadata
smklein Oct 8, 2021
38defab
Merge branch 'main' into identity-metadata
smklein Oct 8, 2021
19553af
Merge branch 'main' into identity-metadata
smklein Oct 13, 2021
0fc1f98
Merge branch 'main' into identity-metadata (organizations)
smklein Oct 14, 2021
e9ba000
Merge branch 'main' into identity-metadata (diesel uncommon)
smklein Oct 15, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ members = [
"omicron-bootstrap-agent",
"omicron-common",
"omicron-nexus",
"omicron-nexus/src/db/db-macros",
"omicron-rpaths",
"omicron-sled-agent",
"oximeter/oximeter",
Expand All @@ -13,6 +14,7 @@ default-members = [
"omicron-bootstrap-agent",
"omicron-common",
"omicron-nexus",
"omicron-nexus/src/db/db-macros",
"omicron-rpaths",
"omicron-sled-agent",
"oximeter/oximeter",
Expand Down
2 changes: 2 additions & 0 deletions omicron-nexus/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,13 @@ diesel = { git = "https://github.com/diesel-rs/diesel", rev = "a39dd2e", feature
futures = "0.3.15"
http = "0.2.0"
hyper = "0.14"
db-macros = { path = "src/db/db-macros" }
ipnetwork = "0.18"
lazy_static = "1.4.0"
libc = "0.2.98"
macaddr = { version = "1.0.1", features = [ "serde_std" ]}
newtype_derive = "0.1.6"
paste = "1.0"
# See omicron-rpaths for more about the "pq-sys" dependency.
pq-sys = "*"
serde_json = "1.0"
Expand Down
40 changes: 27 additions & 13 deletions omicron-nexus/src/db/datastore.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,10 @@ impl DataStore {
) -> CreateResult<db::model::Project> {
use db::schema::project::dsl;

let name = project.name().to_string();
let name = project.name().as_str().to_string();
diesel::insert_into(dsl::project)
.values(project)
.returning(db::model::Project::as_returning())
.get_result_async(self.pool())
.await
.map_err(|e| {
Expand All @@ -87,7 +88,8 @@ impl DataStore {
dsl::project
.filter(dsl::time_deleted.is_null())
.filter(dsl::name.eq(name.clone()))
.first_async::<db::model::Project>(self.pool())
.select(db::model::Project::as_select())
.first_async(self.pool())
.await
.map_err(|e| {
Error::from_diesel(
Expand All @@ -111,7 +113,8 @@ impl DataStore {
.filter(dsl::time_deleted.is_null())
.filter(dsl::name.eq(name.clone()))
.set(dsl::time_deleted.eq(now))
.get_result_async::<db::model::Project>(self.pool())
.returning(db::model::Project::as_returning())
.get_result_async(self.pool())
.await
.map_err(|e| {
Error::from_diesel(
Expand Down Expand Up @@ -151,7 +154,8 @@ impl DataStore {
use db::schema::project::dsl;
paginated(dsl::project, dsl::id, pagparams)
.filter(dsl::time_deleted.is_null())
.load_async::<db::model::Project>(self.pool())
.select(db::model::Project::as_select())
.load_async(self.pool())
.await
.map_err(|e| {
Error::from_diesel(
Expand All @@ -169,7 +173,8 @@ impl DataStore {
use db::schema::project::dsl;
paginated(dsl::project, dsl::name, pagparams)
.filter(dsl::time_deleted.is_null())
.load_async::<db::model::Project>(self.pool())
.select(db::model::Project::as_select())
.load_async(self.pool())
.await
.map_err(|e| {
Error::from_diesel(
Expand All @@ -193,6 +198,7 @@ impl DataStore {
.filter(dsl::time_deleted.is_null())
.filter(dsl::name.eq(name.clone()))
.set(updates)
.returning(db::model::Project::as_returning())
.get_result_async(self.pool())
.await
.map_err(|e| {
Expand Down Expand Up @@ -246,7 +252,7 @@ impl DataStore {
params,
runtime_initial.clone(),
);
let name = instance.name.clone();
let name = instance.identity.name.clone();
let instance: db::model::Instance = diesel::insert_into(dsl::instance)
.values(instance)
.on_conflict(dsl::id)
Expand Down Expand Up @@ -473,7 +479,7 @@ impl DataStore {
params.clone(),
runtime_initial.clone(),
);
let name = disk.name.clone();
let name = disk.identity.name.clone();
let disk: db::model::Disk = diesel::insert_into(dsl::disk)
.values(disk)
.on_conflict(dsl::id)
Expand Down Expand Up @@ -794,7 +800,8 @@ impl DataStore {
paginated(dsl::vpc, dsl::name, pagparams)
.filter(dsl::time_deleted.is_null())
.filter(dsl::project_id.eq(*project_id))
.load_async::<db::model::Vpc>(self.pool())
.select(db::model::Vpc::as_select())
.load_async(self.pool())
.await
.map_err(|e| {
Error::from_diesel(
Expand All @@ -814,11 +821,12 @@ impl DataStore {
use db::schema::vpc::dsl;

let vpc = db::model::Vpc::new(*vpc_id, *project_id, params.clone());
let name = vpc.name.clone();
let name = vpc.name().clone();
let vpc = diesel::insert_into(dsl::vpc)
.values(vpc)
.on_conflict(dsl::id)
.do_nothing()
.returning(db::model::Vpc::as_returning())
.get_result_async(self.pool())
.await
.map_err(|e| {
Expand Down Expand Up @@ -862,6 +870,7 @@ impl DataStore {
.filter(dsl::time_deleted.is_null())
.filter(dsl::project_id.eq(*project_id))
.filter(dsl::name.eq(vpc_name.clone()))
.select(db::model::Vpc::as_select())
.get_result_async(self.pool())
.await
.map_err(|e| {
Expand All @@ -881,7 +890,8 @@ impl DataStore {
.filter(dsl::time_deleted.is_null())
.filter(dsl::id.eq(*vpc_id))
.set(dsl::time_deleted.eq(now))
.get_result_async::<db::model::Vpc>(self.pool())
.returning(db::model::Vpc::as_returning())
.get_result_async(self.pool())
.await
.map_err(|e| {
Error::from_diesel(
Expand All @@ -903,7 +913,8 @@ impl DataStore {
paginated(dsl::vpcsubnet, dsl::name, pagparams)
.filter(dsl::time_deleted.is_null())
.filter(dsl::vpc_id.eq(*vpc_id))
.load_async::<db::model::VpcSubnet>(self.pool())
.select(db::model::VpcSubnet::as_select())
.load_async(self.pool())
.await
.map_err(|e| {
Error::from_diesel(
Expand All @@ -924,6 +935,7 @@ impl DataStore {
.filter(dsl::time_deleted.is_null())
.filter(dsl::vpc_id.eq(*vpc_id))
.filter(dsl::name.eq(subnet_name.clone()))
.select(db::model::VpcSubnet::as_select())
.get_result_async(self.pool())
.await
.map_err(|e| {
Expand All @@ -945,11 +957,12 @@ impl DataStore {

let subnet =
db::model::VpcSubnet::new(*subnet_id, *vpc_id, params.clone());
let name = subnet.name.clone();
let name = subnet.name().clone();
let subnet = diesel::insert_into(dsl::vpcsubnet)
.values(subnet)
.on_conflict(dsl::id)
.do_nothing()
.returning(db::model::VpcSubnet::as_returning())
.get_result_async(self.pool())
.await
.map_err(|e| {
Expand All @@ -970,7 +983,8 @@ impl DataStore {
.filter(dsl::time_deleted.is_null())
.filter(dsl::id.eq(*subnet_id))
.set(dsl::time_deleted.eq(now))
.get_result_async::<db::model::VpcSubnet>(self.pool())
.returning(db::model::VpcSubnet::as_returning())
.get_result_async(self.pool())
.await
.map_err(|e| {
Error::from_diesel(
Expand Down
18 changes: 18 additions & 0 deletions omicron-nexus/src/db/db-macros/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
[package]
name = "db-macros"
version = "0.1.0"
authors = ["Sean Klein <[email protected]>"]
edition = "2018"

[lib]
proc-macro = true

[dependencies.proc-macro2]
version = "1.0"

[dependencies.quote]
version = "1.0"

[dependencies.syn]
version = "1.0"
features = [ "full", "derive", "extra-traits" ]
Loading