From ca3052b33131b11d03732d361b02a81295c52159 Mon Sep 17 00:00:00 2001 From: Piotr Chromiec Date: Mon, 9 Nov 2020 12:31:18 +0100 Subject: [PATCH] conform to newest MarketApi spec v1.6.1 in ya-client --- Cargo.lock | 4 ++-- Cargo.toml | 4 ++-- agent/provider/src/market/mock_negotiator.rs | 21 +++++++++++++++++--- agent/provider/src/market/negotiator.rs | 10 ++++++++-- agent/provider/src/market/provider_market.rs | 16 ++++++++++----- core/market/src/db/model/agreement.rs | 1 + core/payment/examples/payment_api.rs | 1 + 7 files changed, 43 insertions(+), 14 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9c8c3b600b..dab0aaade2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6136,7 +6136,7 @@ dependencies = [ [[package]] name = "ya-client" version = "0.4.0" -source = "git+https://github.com/golemfactory/ya-client.git?rev=2e745dbc2056c8064a62f80cf51c5d6fc03411cb#2e745dbc2056c8064a62f80cf51c5d6fc03411cb" +source = "git+https://github.com/golemfactory/ya-client.git?rev=ba89a542f39ba659dcacecfe64930ed7e1e465de#ba89a542f39ba659dcacecfe64930ed7e1e465de" dependencies = [ "awc", "bytes 0.5.6", @@ -6173,7 +6173,7 @@ dependencies = [ [[package]] name = "ya-client-model" version = "0.2.0" -source = "git+https://github.com/golemfactory/ya-client.git?rev=2e745dbc2056c8064a62f80cf51c5d6fc03411cb#2e745dbc2056c8064a62f80cf51c5d6fc03411cb" +source = "git+https://github.com/golemfactory/ya-client.git?rev=ba89a542f39ba659dcacecfe64930ed7e1e465de#ba89a542f39ba659dcacecfe64930ed7e1e465de" dependencies = [ "bigdecimal", "chrono", diff --git a/Cargo.toml b/Cargo.toml index f004579eea..e83f4cac01 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -161,8 +161,8 @@ ya-sb-router = { path = "service-bus/router" } ya-sb-util = { path = "service-bus/util" } ## CLIENT -ya-client = { git = "https://github.com/golemfactory/ya-client.git", rev = "2e745dbc2056c8064a62f80cf51c5d6fc03411cb"} -ya-client-model = { git = "https://github.com/golemfactory/ya-client.git", rev = "2e745dbc2056c8064a62f80cf51c5d6fc03411cb"} +ya-client = { git = "https://github.com/golemfactory/ya-client.git", rev = "ba89a542f39ba659dcacecfe64930ed7e1e465de"} +ya-client-model = { git = "https://github.com/golemfactory/ya-client.git", rev = "ba89a542f39ba659dcacecfe64930ed7e1e465de"} ## OTHERS gftp = { path = "core/gftp" } diff --git a/agent/provider/src/market/mock_negotiator.rs b/agent/provider/src/market/mock_negotiator.rs index ce85506a7d..5160a789f4 100644 --- a/agent/provider/src/market/mock_negotiator.rs +++ b/agent/provider/src/market/mock_negotiator.rs @@ -87,7 +87,12 @@ impl Negotiator for LimitAgreementsNegotiator { "Negotiator: Reject proposal [{:?}] due to expiration limits.", demand.proposal_id ); - Ok(ProposalResponse::RejectProposal) + Ok(ProposalResponse::RejectProposal { + reason: Some(format!( + "proposal expired at: {} which is less than 5 min or more than 30 min from now", + expiration + )), + }) } else if self.has_free_slot() { Ok(ProposalResponse::AcceptProposal) } else { @@ -95,7 +100,12 @@ impl Negotiator for LimitAgreementsNegotiator { "Negotiator: Reject proposal [{:?}] due to limit.", demand.proposal_id ); - Ok(ProposalResponse::RejectProposal) + Ok(ProposalResponse::RejectProposal { + reason: Some(format!( + "available agreements limit: {} reached", + self.max_agreements + )), + }) } } @@ -109,7 +119,12 @@ impl Negotiator for LimitAgreementsNegotiator { "Negotiator: Reject agreement proposal [{}] due to limit.", agreement.agreement_id ); - Ok(AgreementResponse::RejectAgreement) + Ok(AgreementResponse::RejectAgreement { + reason: Some(format!( + "available agreements limit: {} reached", + self.max_agreements + )), + }) } } } diff --git a/agent/provider/src/market/negotiator.rs b/agent/provider/src/market/negotiator.rs index 185251f862..abddb49ff0 100644 --- a/agent/provider/src/market/negotiator.rs +++ b/agent/provider/src/market/negotiator.rs @@ -16,7 +16,10 @@ pub enum ProposalResponse { offer: DemandOfferBase, }, AcceptProposal, - RejectProposal, + #[display(fmt = "RejectProposal( reason: {:?})", reason)] + RejectProposal { + reason: Option, + }, ///< Don't send any message to requestor. Could be useful to wait for other offers. IgnoreProposal, } @@ -26,7 +29,10 @@ pub enum ProposalResponse { #[allow(dead_code)] pub enum AgreementResponse { ApproveAgreement, - RejectAgreement, + #[display(fmt = "RejectAgreement( reason: {:?})", reason)] + RejectAgreement { + reason: Option, + }, } /// Result of agreement execution. diff --git a/agent/provider/src/market/provider_market.rs b/agent/provider/src/market/provider_market.rs index 909996783a..6280d0bb90 100644 --- a/agent/provider/src/market/provider_market.rs +++ b/agent/provider/src/market/provider_market.rs @@ -8,7 +8,7 @@ use std::sync::Arc; use ya_agreement_utils::{AgreementView, OfferDefinition}; use ya_client::market::MarketProviderApi; -use ya_client_model::market::{Agreement, DemandOfferBase, Proposal, ProviderEvent}; +use ya_client_model::market::{Agreement, DemandOfferBase, Proposal, ProviderEvent, Reason}; use ya_utils_actix::{ actix_handler::ResultTypeGetter, actix_signal::{SignalSlot, Subscribe}, @@ -303,8 +303,13 @@ async fn process_proposal( .await?; } ProposalResponse::IgnoreProposal => log::info!("Ignoring proposal {:?}", proposal_id), - ProposalResponse::RejectProposal => { - api.reject_proposal(&subscription.id, proposal_id).await?; + ProposalResponse::RejectProposal { reason } => { + api.reject_proposal_with_reason( + &subscription.id, + proposal_id, + reason.map(|r| Reason::new(r)), + ) + .await?; } }, Err(error) => log::error!( @@ -366,8 +371,9 @@ async fn process_agreement( let _ = market.send(message).await?; } - AgreementResponse::RejectAgreement => { - api.reject_agreement(&agreement.agreement_id).await?; + AgreementResponse::RejectAgreement { reason } => { + api.reject_agreement(&agreement.agreement_id, reason.map(|r| Reason::new(r))) + .await?; } }, Err(error) => log::error!( diff --git a/core/market/src/db/model/agreement.rs b/core/market/src/db/model/agreement.rs index a920079603..c25cdcf3eb 100644 --- a/core/market/src/db/model/agreement.rs +++ b/core/market/src/db/model/agreement.rs @@ -168,6 +168,7 @@ impl Agreement { .map(|d| DateTime::::from_utc(d, Utc)), state: self.state.into(), timestamp: Utc.from_utc_datetime(&self.creation_ts), + app_session_id: None, proposed_signature: self.proposed_signature, approved_signature: self.approved_signature, committed_signature: self.committed_signature, diff --git a/core/payment/examples/payment_api.rs b/core/payment/examples/payment_api.rs index b03cfd0b3d..cd2cd54c5e 100644 --- a/core/payment/examples/payment_api.rs +++ b/core/payment/examples/payment_api.rs @@ -238,6 +238,7 @@ async fn main() -> anyhow::Result<()> { approved_date: None, state: market::agreement::State::Proposal, timestamp: Utc::now(), + app_session_id: None, proposed_signature: None, approved_signature: None, committed_signature: None,