Skip to content

Commit

Permalink
Add a JK so we can safely roll out the new params getter
Browse files Browse the repository at this point in the history
Summary:
## This stack

Convert one (non-Megarepo) SCS method to run via async_requests and the async worker.

## This diff

The change in the previous diff is somewhat risky; protect it with a JK.

I tried writing a helper function or macro but it led me to generics hell. The copypasta is unfortunate but will be short-lived anyway.

Reviewed By: mitrandir77

Differential Revision: D63013826

fbshipit-source-id: 7ee0bb55b4592763b12effca5604507401a97445
  • Loading branch information
andreacampi authored and facebook-github-bot committed Sep 19, 2024
1 parent d6508d1 commit 1afc2f8
Showing 1 changed file with 54 additions and 19 deletions.
73 changes: 54 additions & 19 deletions eden/mononoke/scs_server/src/methods/megarepo.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ use crate::errors;
use crate::from_request::FromRequest;
use crate::source_control_impl::SourceControlServiceImpl;

const JK_TARGET_FROM_PARAMS: &str = "scm/mononoke:async_requests_poll_target_from_params";

impl SourceControlServiceImpl {
fn verify_repos_by_config(
&self,
Expand Down Expand Up @@ -222,9 +224,16 @@ impl SourceControlServiceImpl {
) -> Result<thrift::MegarepoAddTargetPollResponse, errors::ServiceError> {
let queue = build_queue(&ctx, &self.async_requests_queue_client).await?;
let token = MegarepoAddTargetToken(token);
let params =
get_params_from_token::<thrift::MegarepoAddTargetParams>(&ctx, &queue, &token).await?;
let target_repo_id = get_repo_id_from_params(&params, &self.mononoke)?;
let target_repo_id = if justknobs::eval(JK_TARGET_FROM_PARAMS, None, None).unwrap_or(false)
{
let params =
get_params_from_token::<thrift::MegarepoAddTargetParams>(&ctx, &queue, &token)
.await?;
get_repo_id_from_params(&params, &self.mononoke)?
} else {
let target = token.target()?.clone().into_config_format(&self.mononoke)?;
RepositoryId::new(target.repo_id.try_into().unwrap())
};
self.check_write_allowed(&ctx, target_repo_id).await?;

Ok(queue
Expand Down Expand Up @@ -256,10 +265,17 @@ impl SourceControlServiceImpl {
) -> Result<thrift::MegarepoAddBranchingTargetPollResponse, errors::ServiceError> {
let queue = build_queue(&ctx, &self.async_requests_queue_client).await?;
let token = MegarepoAddBranchingTargetToken(token);
let params =
get_params_from_token::<thrift::MegarepoAddBranchingTargetParams>(&ctx, &queue, &token)
.await?;
let target_repo_id = get_repo_id_from_params(&params, &self.mononoke)?;
let target_repo_id = if justknobs::eval(JK_TARGET_FROM_PARAMS, None, None).unwrap_or(false)
{
let params = get_params_from_token::<thrift::MegarepoAddBranchingTargetParams>(
&ctx, &queue, &token,
)
.await?;
get_repo_id_from_params(&params, &self.mononoke)?
} else {
let target = token.target()?.clone().into_config_format(&self.mononoke)?;
RepositoryId::new(target.repo_id.try_into().unwrap())
};
self.check_write_allowed(&ctx, target_repo_id).await?;

Ok(queue
Expand Down Expand Up @@ -291,10 +307,17 @@ impl SourceControlServiceImpl {
) -> Result<thrift::MegarepoChangeTargetConfigPollResponse, errors::ServiceError> {
let queue = build_queue(&ctx, &self.async_requests_queue_client).await?;
let token = MegarepoChangeTargetConfigToken(token);
let params =
get_params_from_token::<thrift::MegarepoChangeTargetConfigParams>(&ctx, &queue, &token)
.await?;
let target_repo_id = get_repo_id_from_params(&params, &self.mononoke)?;
let target_repo_id = if justknobs::eval(JK_TARGET_FROM_PARAMS, None, None).unwrap_or(false)
{
let params = get_params_from_token::<thrift::MegarepoChangeTargetConfigParams>(
&ctx, &queue, &token,
)
.await?;
get_repo_id_from_params(&params, &self.mononoke)?
} else {
let target = token.target()?.clone().into_config_format(&self.mononoke)?;
RepositoryId::new(target.repo_id.try_into().unwrap())
};
self.check_write_allowed(&ctx, target_repo_id).await?;

Ok(queue
Expand Down Expand Up @@ -326,10 +349,16 @@ impl SourceControlServiceImpl {
) -> Result<thrift::MegarepoSyncChangesetPollResponse, errors::ServiceError> {
let queue = build_queue(&ctx, &self.async_requests_queue_client).await?;
let token = MegarepoSyncChangesetToken(token);
let params =
get_params_from_token::<thrift::MegarepoSyncChangesetParams>(&ctx, &queue, &token)
.await?;
let target_repo_id = get_repo_id_from_params(&params, &self.mononoke)?;
let target_repo_id = if justknobs::eval(JK_TARGET_FROM_PARAMS, None, None).unwrap_or(false)
{
let params =
get_params_from_token::<thrift::MegarepoSyncChangesetParams>(&ctx, &queue, &token)
.await?;
get_repo_id_from_params(&params, &self.mononoke)?
} else {
let target = token.target()?.clone().into_config_format(&self.mononoke)?;
RepositoryId::new(target.repo_id.try_into().unwrap())
};
self.check_write_allowed(&ctx, target_repo_id).await?;

Ok(queue
Expand Down Expand Up @@ -361,10 +390,16 @@ impl SourceControlServiceImpl {
) -> Result<thrift::MegarepoRemergeSourcePollResponse, errors::ServiceError> {
let queue = build_queue(&ctx, &self.async_requests_queue_client).await?;
let token = MegarepoRemergeSourceToken(token);
let params =
get_params_from_token::<thrift::MegarepoRemergeSourceParams>(&ctx, &queue, &token)
.await?;
let target_repo_id = get_repo_id_from_params(&params, &self.mononoke)?;
let target_repo_id = if justknobs::eval(JK_TARGET_FROM_PARAMS, None, None).unwrap_or(false)
{
let params =
get_params_from_token::<thrift::MegarepoRemergeSourceParams>(&ctx, &queue, &token)
.await?;
get_repo_id_from_params(&params, &self.mononoke)?
} else {
let target = token.target()?.clone().into_config_format(&self.mononoke)?;
RepositoryId::new(target.repo_id.try_into().unwrap())
};
self.check_write_allowed(&ctx, target_repo_id).await?;

Ok(queue
Expand Down

0 comments on commit 1afc2f8

Please sign in to comment.