1212// See the License for the specific language governing permissions and
1313// limitations under the License.
1414
15- use databend_common_meta_app:: app_error:: AppError ;
16- use databend_common_meta_app:: app_error:: TxnRetryMaxTimes ;
15+ use databend_common_meta_app:: data_mask:: data_mask_name_ident;
1716use databend_common_meta_app:: data_mask:: CreateDatamaskReply ;
1817use databend_common_meta_app:: data_mask:: CreateDatamaskReq ;
1918use databend_common_meta_app:: data_mask:: DataMaskId ;
@@ -28,6 +27,7 @@ use databend_common_meta_app::id_generator::IdGenerator;
2827use databend_common_meta_app:: row_access_policy:: RowAccessPolicyNameIdent ;
2928use databend_common_meta_app:: schema:: CreateOption ;
3029use databend_common_meta_app:: tenant:: Tenant ;
30+ use databend_common_meta_app:: tenant_key:: errors:: ExistError ;
3131use databend_common_meta_app:: KeyWithTenant ;
3232use databend_common_meta_kvapi:: kvapi;
3333use databend_common_meta_kvapi:: kvapi:: DirName ;
@@ -40,7 +40,6 @@ use log::debug;
4040use crate :: data_mask_api:: DatamaskApi ;
4141use crate :: errors:: MaskingPolicyError ;
4242use crate :: fetch_id;
43- use crate :: kv_app_error:: KVAppError ;
4443use crate :: kv_pb_api:: KVPbApi ;
4544use crate :: meta_txn_error:: MetaTxnError ;
4645use crate :: txn_backoff:: txn_backoff;
@@ -57,7 +56,8 @@ impl<KV: kvapi::KVApi<Error = MetaError>> DatamaskApi for KV {
5756 async fn create_data_mask (
5857 & self ,
5958 req : CreateDatamaskReq ,
60- ) -> Result < CreateDatamaskReply , KVAppError > {
59+ ) -> Result < Result < CreateDatamaskReply , ExistError < data_mask_name_ident:: Resource > > , MetaError >
60+ {
6161 debug ! ( req : ? =( & req) ; "DatamaskApi: {}" , func_name!( ) ) ;
6262
6363 let name_ident = & req. name ;
@@ -67,10 +67,9 @@ impl<KV: kvapi::KVApi<Error = MetaError>> DatamaskApi for KV {
6767 name_ident. data_mask_name ( ) . to_string ( ) ,
6868 ) ;
6969 if self . get_pb ( & row_access_name_ident) . await ?. is_some ( ) {
70- return Err ( AppError :: DatamaskAlreadyExists (
71- name_ident. exist_error ( "name conflicts with an existing row access policy" ) ,
72- )
73- . into ( ) ) ;
70+ return Ok ( Err (
71+ name_ident. exist_error ( "name conflicts with an existing masking policy" )
72+ ) ) ;
7473 }
7574
7675 let masking_policy_id = fetch_id ( self , IdGenerator :: data_mask_id ( ) ) . await ?;
@@ -85,13 +84,12 @@ impl<KV: kvapi::KVApi<Error = MetaError>> DatamaskApi for KV {
8584 if let Some ( ( seq_id, seq_meta) ) = res {
8685 match req. create_option {
8786 CreateOption :: Create => {
88- return Err ( AppError :: DatamaskAlreadyExists (
89- name_ident. exist_error ( func_name ! ( ) ) ,
90- )
91- . into ( ) ) ;
87+ return Ok ( Err (
88+ name_ident. exist_error ( format ! ( "{} already exists" , req. name) )
89+ ) ) ;
9290 }
9391 CreateOption :: CreateIfNotExists => {
94- return Ok ( CreateDatamaskReply { id : * seq_id. data } ) ;
92+ return Ok ( Ok ( CreateDatamaskReply { id : * seq_id. data } ) ) ;
9593 }
9694 CreateOption :: CreateOrReplace => {
9795 let id_ident = seq_id. data . into_t_ident ( name_ident. tenant ( ) ) ;
@@ -142,11 +140,13 @@ impl<KV: kvapi::KVApi<Error = MetaError>> DatamaskApi for KV {
142140 ) ;
143141
144142 if succ {
145- Ok ( CreateDatamaskReply {
143+ Ok ( Ok ( CreateDatamaskReply {
146144 id : masking_policy_id,
147- } )
145+ } ) )
148146 } else {
149- Err ( KVAppError :: from ( TxnRetryMaxTimes :: new ( func_name ! ( ) , 1 ) ) )
147+ Ok ( Err (
148+ name_ident. exist_error ( format ! ( "{} already exists" , req. name) )
149+ ) )
150150 }
151151 }
152152
@@ -185,7 +185,6 @@ impl<KV: kvapi::KVApi<Error = MetaError>> DatamaskApi for KV {
185185 // Policy is in use - cannot drop
186186 if !table_policy_refs. is_empty ( ) {
187187 return Ok ( Err ( MaskingPolicyError :: policy_in_use (
188- tenant. tenant_name ( ) . to_string ( ) ,
189188 name_ident. data_mask_name ( ) . to_string ( ) ,
190189 ) ) ) ;
191190 }
0 commit comments