From f7b22806e643c564ac1e507e872b146282ae5718 Mon Sep 17 00:00:00 2001 From: OpenTelekomCloud Proposal Bot Date: Wed, 15 Feb 2023 10:37:50 +0000 Subject: [PATCH] Update content --- .../images/en-us_image_0000001460419110.png | Bin 0 -> 51740 bytes .../images/en-us_image_0000001509539765.jpg | Bin 0 -> 139826 bytes .../images/en-us_image_0000001509858673.png | Bin 0 -> 51463 bytes api-ref/source/api_overview.rst | 84 +++++ .../ddm_accounts/creating_a_ddm_account.rst | 219 ++++++++++++ .../ddm_accounts/deleting_a_ddm_account.rst | 137 ++++++++ .../apis_recommended/ddm_accounts/index.rst | 26 ++ .../managing_the_administrator_password.rst | 101 ++++++ .../ddm_accounts/modifying_a_ddm_account.rst | 198 +++++++++++ .../ddm_accounts/querying_ddm_accounts.rst | 211 ++++++++++++ ...esetting_the_password_of_a_ddm_account.rst | 151 +++++++++ .../validating_password_strength.rst | 108 ++++++ ...nging_the_node_class_of_a_ddm_instance.rst | 124 +++++++ .../ddm_instances/creating_a_ddm_instance.rst | 319 ++++++++++++++++++ .../ddm_instances/deleting_a_ddm_instance.rst | 160 +++++++++ .../apis_recommended/ddm_instances/index.rst | 50 +++ ...modifying_parameters_of_a_ddm_instance.rst | 265 +++++++++++++++ .../modifying_the_name_of_a_ddm_instance.rst | 156 +++++++++ ...d_policy_of_the_associated_db_instance.rst | 153 +++++++++ ...g_the_security_group_of_a_ddm_instance.rst | 148 ++++++++ .../querying_ddm_engine_information.rst | 201 +++++++++++ .../ddm_instances/querying_ddm_instances.rst | 235 +++++++++++++ ...ng_ddm_node_classes_available_in_an_az.rst | 264 +++++++++++++++ .../querying_details_of_a_ddm_instance.rst | 217 ++++++++++++ ...uerying_details_of_a_ddm_instance_node.rst | 154 +++++++++ .../querying_nodes_of_a_ddm_instance.rst | 179 ++++++++++ ...parameters_of_a_specified_ddm_instance.rst | 190 +++++++++++ .../ddm_instances/reloading_table_data.rst | 126 +++++++ .../restarting_a_ddm_instance.rst | 172 ++++++++++ .../scaling_in_a_ddm_instance.rst | 167 +++++++++ .../scaling_out_a_ddm_instance.rst | 185 ++++++++++ .../synchronizing_data_node_information.rst | 140 ++++++++ api-ref/source/apis_recommended/index.rst | 20 ++ .../apis_recommended/monitoring/index.rst | 14 + .../monitoring/monitoring_slow_query_logs.rst | 186 ++++++++++ .../schemas/creating_a_schema.rst | 231 +++++++++++++ .../schemas/deleting_a_schema.rst | 151 +++++++++ .../source/apis_recommended/schemas/index.rst | 22 ++ ...tances_available_for_creating_a_schema.rst | 215 ++++++++++++ .../schemas/querying_details_of_a_schema.rst | 283 ++++++++++++++++ .../schemas/querying_schemas.rst | 208 ++++++++++++ .../source/apis_unavailable_soon/index.rst | 14 + .../monitoring_the_read_write_ratio.rst | 175 ++++++++++ .../appendix/abnormal_request_results.rst | 29 ++ api-ref/source/appendix/error_codes.rst | 242 +++++++++++++ api-ref/source/appendix/index.rst | 24 ++ .../appendix/instance_specifications.rst | 20 ++ .../appendix/obtaining_a_project_id.rst | 66 ++++ api-ref/source/appendix/status_codes.rst | 60 ++++ .../source/appendix/status_description.rst | 66 ++++ .../source/before_you_start/api_calling.rst | 8 + api-ref/source/before_you_start/concepts.rst | 36 ++ .../source/before_you_start/constraints.rst | 9 + api-ref/source/before_you_start/endpoints.rst | 8 + api-ref/source/before_you_start/index.rst | 22 ++ api-ref/source/before_you_start/overview.rst | 17 + .../source/calling_apis/authentication.rst | 55 +++ api-ref/source/calling_apis/index.rst | 18 + .../calling_apis/making_an_api_request.rst | 161 +++++++++ .../source/calling_apis/returned_values.rst | 62 ++++ api-ref/source/change_history.rst | 14 + api-ref/source/index.rst | 10 + 62 files changed, 7286 insertions(+) create mode 100644 api-ref/source/_static/images/en-us_image_0000001460419110.png create mode 100644 api-ref/source/_static/images/en-us_image_0000001509539765.jpg create mode 100644 api-ref/source/_static/images/en-us_image_0000001509858673.png create mode 100644 api-ref/source/api_overview.rst create mode 100644 api-ref/source/apis_recommended/ddm_accounts/creating_a_ddm_account.rst create mode 100644 api-ref/source/apis_recommended/ddm_accounts/deleting_a_ddm_account.rst create mode 100644 api-ref/source/apis_recommended/ddm_accounts/index.rst create mode 100644 api-ref/source/apis_recommended/ddm_accounts/managing_the_administrator_password.rst create mode 100644 api-ref/source/apis_recommended/ddm_accounts/modifying_a_ddm_account.rst create mode 100644 api-ref/source/apis_recommended/ddm_accounts/querying_ddm_accounts.rst create mode 100644 api-ref/source/apis_recommended/ddm_accounts/resetting_the_password_of_a_ddm_account.rst create mode 100644 api-ref/source/apis_recommended/ddm_accounts/validating_password_strength.rst create mode 100644 api-ref/source/apis_recommended/ddm_instances/changing_the_node_class_of_a_ddm_instance.rst create mode 100644 api-ref/source/apis_recommended/ddm_instances/creating_a_ddm_instance.rst create mode 100644 api-ref/source/apis_recommended/ddm_instances/deleting_a_ddm_instance.rst create mode 100644 api-ref/source/apis_recommended/ddm_instances/index.rst create mode 100644 api-ref/source/apis_recommended/ddm_instances/modifying_parameters_of_a_ddm_instance.rst create mode 100644 api-ref/source/apis_recommended/ddm_instances/modifying_the_name_of_a_ddm_instance.rst create mode 100644 api-ref/source/apis_recommended/ddm_instances/modifying_the_read_policy_of_the_associated_db_instance.rst create mode 100644 api-ref/source/apis_recommended/ddm_instances/modifying_the_security_group_of_a_ddm_instance.rst create mode 100644 api-ref/source/apis_recommended/ddm_instances/querying_ddm_engine_information.rst create mode 100644 api-ref/source/apis_recommended/ddm_instances/querying_ddm_instances.rst create mode 100644 api-ref/source/apis_recommended/ddm_instances/querying_ddm_node_classes_available_in_an_az.rst create mode 100644 api-ref/source/apis_recommended/ddm_instances/querying_details_of_a_ddm_instance.rst create mode 100644 api-ref/source/apis_recommended/ddm_instances/querying_details_of_a_ddm_instance_node.rst create mode 100644 api-ref/source/apis_recommended/ddm_instances/querying_nodes_of_a_ddm_instance.rst create mode 100644 api-ref/source/apis_recommended/ddm_instances/querying_parameters_of_a_specified_ddm_instance.rst create mode 100644 api-ref/source/apis_recommended/ddm_instances/reloading_table_data.rst create mode 100644 api-ref/source/apis_recommended/ddm_instances/restarting_a_ddm_instance.rst create mode 100644 api-ref/source/apis_recommended/ddm_instances/scaling_in_a_ddm_instance.rst create mode 100644 api-ref/source/apis_recommended/ddm_instances/scaling_out_a_ddm_instance.rst create mode 100644 api-ref/source/apis_recommended/ddm_instances/synchronizing_data_node_information.rst create mode 100644 api-ref/source/apis_recommended/index.rst create mode 100644 api-ref/source/apis_recommended/monitoring/index.rst create mode 100644 api-ref/source/apis_recommended/monitoring/monitoring_slow_query_logs.rst create mode 100644 api-ref/source/apis_recommended/schemas/creating_a_schema.rst create mode 100644 api-ref/source/apis_recommended/schemas/deleting_a_schema.rst create mode 100644 api-ref/source/apis_recommended/schemas/index.rst create mode 100644 api-ref/source/apis_recommended/schemas/querying_db_instances_available_for_creating_a_schema.rst create mode 100644 api-ref/source/apis_recommended/schemas/querying_details_of_a_schema.rst create mode 100644 api-ref/source/apis_recommended/schemas/querying_schemas.rst create mode 100644 api-ref/source/apis_unavailable_soon/index.rst create mode 100644 api-ref/source/apis_unavailable_soon/monitoring_the_read_write_ratio.rst create mode 100644 api-ref/source/appendix/abnormal_request_results.rst create mode 100644 api-ref/source/appendix/error_codes.rst create mode 100644 api-ref/source/appendix/index.rst create mode 100644 api-ref/source/appendix/instance_specifications.rst create mode 100644 api-ref/source/appendix/obtaining_a_project_id.rst create mode 100644 api-ref/source/appendix/status_codes.rst create mode 100644 api-ref/source/appendix/status_description.rst create mode 100644 api-ref/source/before_you_start/api_calling.rst create mode 100644 api-ref/source/before_you_start/concepts.rst create mode 100644 api-ref/source/before_you_start/constraints.rst create mode 100644 api-ref/source/before_you_start/endpoints.rst create mode 100644 api-ref/source/before_you_start/index.rst create mode 100644 api-ref/source/before_you_start/overview.rst create mode 100644 api-ref/source/calling_apis/authentication.rst create mode 100644 api-ref/source/calling_apis/index.rst create mode 100644 api-ref/source/calling_apis/making_an_api_request.rst create mode 100644 api-ref/source/calling_apis/returned_values.rst create mode 100644 api-ref/source/change_history.rst diff --git a/api-ref/source/_static/images/en-us_image_0000001460419110.png b/api-ref/source/_static/images/en-us_image_0000001460419110.png new file mode 100644 index 0000000000000000000000000000000000000000..d4a37a976d4576d256107faeb20bd06794b51b43 GIT binary patch literal 51740 zcmdSB2T)Yox-QygMZtuM2z%r{>b+O@Jd0h6-E_~MbIdXR|4U;&lD{lTOT$P*B9UmN zrOqpmNNYk!q}2=?*W;CqThBG%Kbx$j)a*zkx_89?Rs|lT+eacDAW5G;qvZU2xa+F9 zM!);w_z{hFKb2~A4#!B*_`>ds-}}d?79a| zfA#KkE*QAC{lzV-pndDNy=D7K6Em`rR&z7M)$OOFzh+t{$X{sYJ1P?|l_H~ZVjYM6 zi6!p46ZfC7%Vhd-iY$8Edbz#+)Y#2>S9UMIFWon1Kc#BqT5iIrl5UAi9+B)?Mf_T3 zv}V;#;+LJ*oF{-Dj3sRkRS z;^_`Ej^G-ZgeDo*9gL*r1@@Ik~y}ZR$sL zGOi83DkR?dRoq@@L+y=>SAl_n1#K5EUi5t>NWA__m%^tj>>H!cn`oNDA@=8le}M~^n`qFFcVCT?MF-kfvP zqE1TK_mFg7-suCcWA+<;e0~+5x6sVDy>RZ_x$0h9b#?W|U%y_PQ&didD{}<$E@WG1 z96EFe*W)_fYnd2v&!N)T!NEb&)3h?)u_z%ve)6-P-@tpHeXiQ)Mx3*=vqNl>0xu^V zmX3&s2n!8u`1$h{XN^L}H6`BA=3l?8n><$ITAXxirZ1)O*WssCA%83G zJ6ZniHEY$_jG4W?lA@wwwLUL?7@3&(EhMPJSpl)Q^3c$|5kfX+RnxUws;eJ!Y398+ z8~p;WS5-;VZrQ>=Tv_$>$S%Li!&Pe=G`UpUmh6Qs&c^La+wth`#|V+OZ0^xh)8FrB zP>vsS@besq3s&L^p6Uy?8Vogx^tYg}eVUq@GO@K)SXfwKV=A5P3uiM=OG#m;rx|FB zyJX8G`Sj`2!J#3(!{s>#{U2_+({8TP)YK%hI)3Qgqn!mdJ@dG74PxDTRN{xeqNh&HT*%=wp$5hio+%Lri^!4>IPU~@7E>Wq}!_w~V z?xtpDiit`J`I=vHxWmK49r|sIM7r7wE((i?Y!&sInWk7BW7raw`K7K-ZWqnHf_09# z$&(F|`xBKojt0uK)V)tjPfso`*6Ql&Vk@GMQ+0V>-MhE$I45VwLSaDxzpyZev_o5C zON+t#8zMEC^fdSQB_y~h(PL|=V|{)7O7j>I?{=vX^Ek@Kckk|A zjuKCmV!csq7QX30d01GO0#|TTUAQ1lJUc(X{dE++hs0toR~r8=!u@$@XkvKp;Mf>3 zvh(vru@QXta(nzGS^T@l+Awe!DOQVn37TBFW)kWe8oe`ACks9%y5zXHif46PoSepb zdgqFZi#LRAvWPD%q>^j&N`D8Yzsk*3-MMooro5?zMPO`!kw#qVt)YooelfAG*AbX- zy}bs~8hR@1^v!K;xq77-R%MP|S#L*i1{{GhP2wHoRLTABN@GP6zLz6}57%TmjvT>R z-`b$jv{%+?`dFaM!0+Cg0CBC_!%_9&M#th(FBo;IWl$QhTpJp$%E`($2i|GrVrhD{ zKjBK03Ra=_d~>FSM#eSSL?xM?o*swv5tZF8^3n1?eSMvxt}iUkl%{|CcAa+X)?+Mw z;WiFN_Vp1W30V1d%%iKN8e3EPfBcAjT=7yZFQK9K#({00#(OH|OokM%h~WfsjrLnm zT64_WWQ}t;&DuO%c6AaZu+x*Jz+tF0HD+|JWt2wWT&G?A_EBQ+nG)jWX>HB@=epse|aOrxzZxA#(=2mwoH{-i^K&8xozzp*|}1UrC48H<8+j?IJ{$1 zYD$W+xw-7^(_cT;Y9^4e-t5+6k=K^=Q$LBUPj!=?Ev_KKaI-S1hqcrD`MXC4%a zd!3SyNH@)KsT`sAzJSAY=1hDWwPBK6vu2HC7cKFw4U@}_N`UevVwL^5j!&QdMiFWp z$mR`w($3B3!?D{tbirLbiX-rGQcF@tM+g7Olku`_icYess=*f}C3A|3G@a;jQ_mla zj*C0I(hfo_8jO|3ojZ$EDCz1H>YqP7enZg@SWvA|s?h>YQn%339u2M;5sI>)7zS~N z*I{}Kh$XaD_hz!Ov1Jz&sJBI-Q=tHJdyIQyu?9>IAcGd4K-cFM z6jWTa0hi&7O8cJoJ_Qzyt^4WNjvR3q?aVJIi4?MVIr@C`^VmsopZ6~ufhtI(F@fX$ z4r?TN82G=P@1Ri+m3_Z9tmD8Qx(A1)JxXliGjtUM@306%~5aL zQ)yE>@fd3oy_0QNv(Qlv)wnRI-?Cr)lJnmRS~Z#Wi}N?7qk`fvRZvwG5@WYY%*zLJ zX%S;QlwO)%N_BQBPLpIh#WNdq6Soj1x-le==oOke*zPTt{g zrf*M(US@krnpR=_<~>~O+cti%VUoLid2qHrDwq|s=ATvt zw$9Gy^B$#pH#>>qzBN-QX4+0s?e^(S%xk1w7N**Ih3E`&F@R-%nK1Hn{cdbZxYFkS zwZ7NZ)Wqb(Up!27$HMDS3sbpt)q~}LrKzJ6oGn0Y`SK;LwN+(y z!2?(WKkK~SFk9r`mQRYROWx&kQ9wi_xuW92)a2wVdG=Qc36*!>bqt|w2lohJbmNy2 zm69wC)8yHk*VT^jnfll}Ii;=H?3Sym^6B{}?HD%;eZc76}i{iHQle(-Eia z-cQy=T;~j~p{>t&{rZJ2Pu?Lni_*xnv@|V>b??M%f!%*}GGMIa!a@x%FRuXd7m=Ep zn)te$905DIoDK>lCp%kd4~w9nAew`mhEG}+c|SUDQ93c7oX66*e`keX?2XUY96fC@ zoG^c4+s0Qo(xpq6FeQRx-6h6yi=SutckHbk!F~BXJAb>px3=~Pmv)h{%*Cze#G_Ot zB_+GeEb~O&=dzDRJJi^0EyulJ6?nd#Y@xwjI-iLZ{JyeMfS*6Mq@?8B&}Mw?Eibcz z4}Kz4AwE7uL9>?bZWIR7)nOu=+q=6<`!{u+43FqZ&Hd707gQV3Ao_FGlesIQovr+R?u+YKXuE2n_=_u7t{kJM8DST5xL1C??&HVSzyeE4%Or)wSHK93t?p?` z9In&(Sy_s0XFXkA$we04sA)xa2@w|K; zSFPm^U!K*^kr|~tV6Wb8PEPyLqLt&A&imQ*cH!fceVycFE#_&Dzb_~36AyPO)!Kle z`E{VsDDq8FIC`_8kx@%ilU@CWstp%n)GAR{6%yZN1>sF)?%!{34jGln($dlrb{g%x z>a>BjIZbn)&&8Pq0Uo@8_R8JU>_4b*6<+k7tW@~&WH z39r(xttVRuGWVd-EiQUoIOs1%4U}U2A>_-Nn4DZQSzjF0Vwy8L)!`9!$}WDC3Gh2n z$+TYlBqiOEGCeUWu)9#J#?fc=f<>Wg@dne%iva-3{Gy_q6f$TH3K`|sAM=yRW^HK$ zBHgpT9>1SPfe+|@}_{)syZm;e;6We5Bkkx)@frokH+R4UC+@Xt7rVOK_&-T6d zWfoy8?bgX1Q7xSdjC7w?YbU4TR=4SRYJIcL`xY|1TYT(pkC4mnsv|?IJDQuHp&_B? z)h*cQ_*L9sJIyTOXfCN?Rk}bX$PXqaF4JDPIHo>_nnNa=-nelV7vwLcFS)PKgddl3 zX~d&$v?924-XP0LIHL8(5B>66!}s6q(RO|_c>+b<-MwqLXJR({^=o-2+Fn~VLCem+ zyT??qfu8RidE5OUXfUs^tI4gnro8_*|K&u z&3Z3~Grg~ILFt|gLw)@i{nXS{lk3;dprB4#=<1$E?)f&J9{%L%0NvRwbC~KIjf0_i@MHiwW_7rv~#XmV#~1h-Lrp9bc0yZ)?ek^ zEx^Z@rRT`I<56?nkGTbpt~{HV(T?EYVAOucwHi3(uV*s)xAaZhRv1#uDXsZ-{ro3R zT$fq1^U>W2-+MOh~HO`o6w6irnh zO9xfZ>vpg0pCH)Aa$SFLQ;cB?s-iKlT-!<1{*t*OGC3ZXJz?kSS_mK}KKJubpv+a_RAhBJF5Qjv(&$o{8#h?1;Js>0(SygHjFS;HsD*s zh8*G^Hnwh{1_the!11#>@L1mzV3uvZ<{lifY}Lk*tVSJwN-H<@5s z3eYxFqC{#9v*x~fZMC2MZ7`t@oE*AI%&t#XD}S)Lx!HHzKL7eCkX7kOMwW#}rQd$R znO}(skpcDnBJ%ryCynYO1xC-55r3m%>AFJ$6g`ulIM ztFIqZml^7~vbW#zOpGSi&|piluw902;=7bl`hd-`|o(*me>olXg;`r#Y!b$Z&7 zfNkCtVwA0GR}YSiwA6bp+I1D(Y+7ryypCGz{r5ZlMKAa;k1woI9dmjF#l%wO*|QG~kL><1H#eumPA^M=z9Q@}*j!TX3cO6QDowQ( zD$>&sVrq3AD^9qPVXUIU%)s!sff@mGJs(;#N!~kq1`r(615{3=1Ebp)`k^Z=4uhA| zrcH5p-sx^S*8leH9oCVJ&7+(ayrG>L&Q}jXh8ZiNrm-@&Pe7+6l@-4n*kTBEjVqY1 z_a&MRV6cDo)R`h6S98kZHy6}0KtMzP{WJNsN*o3Ayl5s7iaCfdxx?AtDcnb=-u6BGnvtNlLE;{-z z$X204=8nviOD4cn?N-*-^3X3(as(~bu3okCPwe|{hxTE0)2MQDM{bW_Ui(AZ!t3G- z4`)y=J>4fZWVSDy&uUR#$B0y%p zf@QX4edWf#Y~S#|F{}UIge0PF&CGdwK*FYGW{&N6Bo(m2aqZ_OO(w#6gu+2#k%5 zKh$!u+?Qu(l{VZx-d7hsM=4#(yXKrFV^LC>Aw_g(Me*J-ovfUA8l)DDg!hSz#3Jb zfRU8xpm}-h*fCU9P?}FzPnRP_P2L)??l=+63+aN1?ot5yM>|;uD8{N}HXfa8tCFRu zS`eycUw=RD%oMeIN&AZE_+7k$dsXKVE&t(p&p+yLCzhFXz!&!!E$D1DWQ({a6LdUN zef`)`H?qahy*=9UqAaSy5htl*Ez`sWW@MZICL631?B>7iyxh~fi%KZtI7LjJ2aK)6 zZ4=E4TVLzzOLxjQ25T9z0_y&R+YQK>C=YcdP=?ubTZ25Or>8l>>yj{yf@=~}Q{|xB zgvwrQF;#}f!RdIYYHb0mgq{+^fc7fQDj-A{iWXBrQp`%Hr>d`i{ZwM;VzyeI<}w3K6 z4p%)ZZbkVM>Daj3yz#5Ln%Y$-Cnv4Xrb>%pHN9bu9b}8*`QJ6PxeLD@NGP%HIAuL+ z1h!{rX!xwoa0+NqW^S^*cAuan0T2vzO1ryx%0AZD@BjI{u{Gzp=uHI(1CKApP%TB6 z=*%!P@-;7Gs^JP7Ap@sjQrUeiA%?u{%wFc zIMZIMkfH;-Mq(=@9UXX4XYNPHn7){jx_iLEbfz6iFJeq_l&bf z_|rHs)4%3`D?d8_l4~Qt;s7pG*l{=n4D)D(xrs>w43zSduv4t8($yy4yR&?X$dQdx zh;Jq@6Xr=W_xsEg$|9HavPhqumuGw@j%prX-=FMi0ikW&*{yQsnvBLbDyDf!Qj2NV zP|o6a?!~j?&YJu7?F%5keMwC*$s*?h?hw>ouRyhX`J8yf>>&heNOmpP(y|4s`Wn$l|N{)UiQ2KEGUe7_nt~=`bq~)7b_Dj7CbU$^rMk>zGf>t z3Kdn=!zPtuk}K3Sl+UPk;j_mRR=d*9Za!&%1>C4*`80nOaAhrmL}7Cp&Y_m~}_{#5pA>PE8{#3dFz$m6>x`WHau2 zRmP?kA-FC}IE$kjMxX4v)%gj|%&tf0pDpv+WW7q?5ux|}6DEWwBQ`KP+8TE$nAKuk zLe#>r5zW1`Xhdt7oeGnu9Ry=RkfZ|$URr#Gbq8V6aPDqGeQu#pl41Fb30*ma_4W4N zW~Y<#56Vym7N#i$*5B@|zI_W-1>T6g&iZUu2b_DE*9dv_3bHqCazE(*A<}b%JGe$& zQ?qlzZS&^M9iKl7N$nXsI%B(Jwr0#@Y=b2TBHJ^ypu?rzR%Cdd_}NLCIYdtrx@2i( z6j-;+Wa{uTIA=f*V zQnj>}_67bBU>t&VByIYqz(7r;`cUaqs?|Wh#8N)Qv#y*%32si#=Bc^`>*DNeec#mL z{Q${mk~{{_M;)jO9!(F*q2ht}{cGkDGgPo-oVIxU{XX0R9`}yaANH=Zx(EH`F}=$7 z&U97F<_6#M7`UX<2y;%3y*qW@z7!KzCN3aU%sgHp5gn#ktH%*F*-*s>NCbol_9+aM zBFQc?M(9-96~?!5|7HPVV$RLFeVNaNPf0Lp2M1+1prC01+g04DeWTEwDW<`=+>x`UW87}p4EJXRf@_?O!z^8!ojqU)#D)_6?)0Zhxl<|0;Mf2p6u{e>o<1CbF+zjxxM z0dHu*iH^lFAF4KGj6sm`L9%N4XyK1NsMiP3zw!S}F)u17ZbIFE%^ND)wSl>9Gk1~h zouHb9zm?hP2dn2zb-Ghoo5ZX}CZ79zJmNmLs%hbLAjB$JA6BBn{_Ac7FmOa%Zgan8 z?-xw2-odS1^a_+JPT?pa^LOUkp@0PFS2v*};AfVk<7#fP&3szaG$zBbQc^)ng5d7$ z?fEfv5P_qX=KEBQIi>?@1{nStoD@ngaov-H0@#z zh^;6A;jZ643Ke`Sr_ImlPo zZ0Nlris_gE0F++mt0!#>F(0*Y(+RSeZ-#dOQCX3Jl$$K^j^2{)g;6I$-54JqUnAz~ zwlL>_>ihc}R{G(m(h)!d8P{s>zIl4&N|4^mb#W!%S`Fg0`p(FFqDG~5<&XG zC07)8p0@9ig)2@12R)65uSG05%JPFTf9q(Tao zRynAkK(&doY%y@?F&g+QI}_d5XD6!cFUKnV-(^{mKx2Jd*D^CR6QsDFt2HRdQep-x zh}C3;7lLdGyvc4b_szBo%7Y!FkQg$d5flf{=NQ1HCRg%uDnLMVOuO`m<%?9>L)3_c zl#vJ2tbN)rD?~|fR-4H;W^1WU3V^`(W9X`Ob@r8JDON$m<5ZX{luYT?sHG{5|uh~qDDEJ z5amGklx_b8-jf;gEW6dxdz9%s+;so~*=t3L@SE83;5`i?kkFn{f5=btASTG!Xx+E( zJ37Kb7t%+(HB`Pp0)X6u3_;dQ^EibQo6mKn6~A}p2J)BlRGpbyqdfAb+cMD@P$Nzu zKUHt$Sj1&B3kx}Th`d?78*FlGC`1>vs2_WSqz-q?LW0un~m7&O@9|Z*k4a#iD z<+jZX$7o=>3>S1oTqP1C{ERJ-St7l+wE*p$sMl`&$jHgXm88i9O8ZYRg78J*rW(Y6 zL84+13h(ALrr4#l5xwIkm3f$dKu2INn6mIG!+W~M?Z=w>`V6)5IxfXfx6|B1tDSnY zVLy==sfd?;;umtzUO%XUgVF=o?8&9CP#i z65MF?hCblIAOfuJb6akVd~Sod19c;v+MS$Ul7vbJCCD&6HkF#+CR3Bs=`lGo6F#j; zsLg>geZ|fbeR2~eRrV~^s@O$S*ol1{I)f>Ivfxg1SAMvJhk+U5>zuLUMp<%qGf0Q9s|B5^9#Hqx~!}B68 zE>3IDtj)~Gz(D(ntbW^?^@@qlh|mI=Om<&aFw^a+vovkBWcbz?JO>FVBXLgnqhXCo z6tY}504AbR4!za8q&2+fw`|=ixKMq+V^Pp$G_B!Ul(2(Lr7ttqgwr@(E;q;~Vkdo5 z9pj)OCz2nJs>V|)-zcg&)Pv{1#!*=wNX$nc z^xs%-fGAY`zl`aTs}J@0mywh$b87bKo__sZ-?^m9UB4?@6;B04x(pt@Q|%rLHklx? zkhnNHw&<$>V)Zp&?2`U%lz5pqTaC>$?kb3c6wiEdrQIXsB9Ax;A*tssY&q=v9`ZX! zAk8<-7pBJubf$&A=3U%Te6d<);6pRV21NLaV52%8X2aJ%{RLsv&@ z`~k|ZV!q~dY%z>BLY}I)F;1pP!GuU?iku`|*s=&$=X7Q?H{cDd3Iob?v=f@YK^Ec8 z`TP5ylj!bhZESoA6((ks$hMN4(@e?`JpfH9x}?>f2@?z19o71qxo*4H@DXpwbEFM{ z%mf)0Fd#5n`O99Pi!JT#P|oA95N>3!Q^+l_=TSs_9gOy)8u5lc`=7#_&}_iW>TJ;d z=8{Y2juBcx0NIdN2j~@aFmc(+3HyozL%Dw@#ft1DA%r1v^N-JT^EeD+fWDT_PR*{I zX3H$jn#pdlbc%;XsTuW!hZz8)1};B$ta z3sjMdKU&5ihclOQQO*6A+R#ZFapVGXmYG|+K)L({;N4y8(4GIo^ zP+qapL{?Y!_(>pjkaH;Z;=%1ZIe<6cA}X4wo*HK1lXqP@fXG{%?FF4f;_ZX=lY0PB7OM1RU!~CAf!~@|l&kjHe#CLqi`?{(>h|4IFDo2i zJ_&fOzdlMZ9o-G~1Y#9hu*X2DVMkCo!b?0B3Q&ewrPE6n3z#ae@-RHhcJN&6kyt!O z@s0I|#T9@sG_sQuOBU({03D`ub~lc1xe7 zi>s^L&j81dovG>R;c94l+%=i9FCZ@|3Nfj`Z0M3TII!)rO(Z;0blaV>W)$Es@vhhT zlv<5wdHH_?!*RfdcnM&?z9q~l*p&GBCv=*|7hKa4(L@`Fw*-(^TX}kVc99LkB3va# z%uD--tmwXv!zV%Hk@~eqpJt{&auyI0GM>u@@J+wq`SJNFy-^DuhUS$}4v6j-=N{Uf zTyd$?IrRAEuH>{du7z(~Jz*dV_QOcJdx^L_7CXwSrrwXNh)6ujA2@4C$>UdYY1fZFAcn-#zTe@HYJ21@l3s4u5 zS;Kh}mZi`kYj1+k%ydcOR7nr4>i5>(zP$y+P(xWm z@7-H@*}l?yzRWeJdxkx6ROHCAQK5a|5hwA-vYpR95UJt+ULnx`qUrq4;r~v@G8pY> zLYSLVnG!RpK%qo$8L*#wRk(arlHYv|c_6VjfB7=1tTSo`I7*O0O--eYYode8N!l{4 znSV!8d^6e))?i>wZ!-d4QmnSkTEt;)6%KyuI*E_~LcuWaiM%A)0u+G2=r9$baica6 zca(==B_(q|HZ@dkCZt?x*;1LR;P$wR5amDCjv-lW`m-LQYi$rH&qn{f65`~LMl2N> ze-M2jaF@l|{#|H2$jr=8!53n)jOxRNq*!-=PReucrko(+>d@H(fLkQX2*v+bS$od; z)=bU_ad&lC5`gZ|&WQ_!6AgwjI8D2DHIewRA80&`5+D@-v0!VnzrC=#Mm=}Xe?|m| zL;d0SMDWRBWxnp-6*sy#4VT07 zK?Z7u`<+ypBhHw|W@SyB&hlI_`2(|e{pyrw@VQ7N1P^p}c0NP6{Oi{jryOAeV{CD; z2=_Ka)xgpgIC+vyn&v^dAr&U`yoYDGnN!V;F7ZDL9*7C>cS12Dk;Ids8DRmBj#{EJ zgoG9ornW?`eJj~w1r`@wcSZ6IiVJNnFbMpGL&uKia9+ac#3@u28B)l=DcEc9PyU`s zm2-DaX6C_4n`bg{gXF7hL=f!jnMQtH83j+zQZy*+HUR!dgw59-{u+AvOH>^={;2e8 zoMMUK`)ajBCEl!i=;mX^Gm)VUDcHWS!c&e;Z0Vhx%*JGa?*M^KQt|9GPKq3iWh)ex6J2#YGWApr+C*3aMT1R)eu9wY~bzBMBI~-0=TPb)%A~-d5 zge=_1UNrIm0}4(RD#paf2=QGc@^&`orSkIf$CW*3|L`UBICm?a3>S#Y0AC`qf;bPn z0&|E+!a{7oDRlh4rg~tTJlfOzyy$X>ylhQR$zs?Jr?}7GzI{9A`eoemIZ?hy;+q|{ zF6`Fe4XsV{rV=lZ#B+=u4SQ8SrF28Z6h+1%dH}MARu@@`9{MWmI{`&&y z@84oZNkz(B!Gv4}{R$fe+R5(CS_SYOVz6;WY-xT1WQNF0#3}q^O%Os}r42M5Kuh0( zLJUEfdr#z6I8$e#1FU55@VLu`NpZm7Zbl-Lh7lDCi)5p8R<+6*Bq zZcnw+#i?}2o7jw1D~?sDL+xmr?AgDRH|mDt#&fnDR|eAVntGnoIAE`}zw3mPk@mg_ zBX@T#G)<-^2+U({{UUQ!S3F*V`=f6|kwoZlCk%e~gR%FYe!%%XLSK1H}c`NrJjky`mB`3SisHNGcAl zs|S%fLN4$OhNyJDmwT#4XHntE<>#MJUr{yay({p;k03YnJuqqfw707vQdIow?dG|+ zdrEX=uIV^`TZbIj!dzRaig;8TLbY*D-R`PLz6g6R7A^j%lvwd!yeqJkCvj<^dr280 zl*D|w#49KnX=5mQ2m?Fx43mHo zq|c!)r|uRwO0nE--!>DXHLEls4a3Y2glh~_=BnqkktbQN6E%~l7EmZW=Mp^O3CF{j zh3Ytk{c9sGkqJ>A>L3n8`NM3To#>zXRlaqINNED-qFXEnJ+XDKdvQ7!i((RK=>f1H z_+kOsLm@=Ok1!gJ9$6SvEp>SjK!K`7yp=ZHNpRF*se5T5ifC_3GfRtvqdghN?Ji9W zKq?U=C87hUXK<<^gZu86NCU_R4Im7(IgDl6kx1v4CK~_dCWs4%F`NLt7i;C#vv01W ztt4KaJr?YimiO+(05KxMk2 z%^fH+2Rg_~Y_AA12(^BVdHt)Sv%RoGt#IW3UaAgv2YLp+AcU~x9TECzsp_eN*bimc z4dTe$b5dBiAf{_Yk%jy{p$>=C((+`XySk1}8#euc$E`FYnBeeXi2x~hxmG3T^1iMM z;QN89+9rQw2d6{J30C72F=F{{Y-VV<9VSaji8$hTNG&KLJ_E9L!u_>{25vi?MpG-R zHe5DVaMwgmVa__D##l4`#D2EsYe5Ev3|bX88YVuD#9z%%)Zi`D`A;cXAn*DZ_CKP6 zAQX3^H;#Hra^$T@n%CO2m>U$bw%hoHod?o2^D|@k3)&|l+s#{R&v*NjlpyK=0fGo= zt!Oc$Y4P1&YS@sN6}2D>_Y3MVDE22JvFqN|UJ0eGuC6Y$4f%A80PY@RF=g&0hSm|C9rxb&=1sMg^e?72rh7&jxRC zo!hk^be&iPvxjc=2%)k%v~5Sl;OEaypIPpwVg+XXrrA>xGnL?+mi1(gELt1-d5k$(p)Z!o3Zhk#-Y z&xCb-JY-S#1=K4Fl z!`6lvfPyO>P|b*2jg76JKZl@192psXUwj{x0Hjkb$l+E0@>JnI;dS#ad?P~Pi)$Jv zXj|}*AY{&Y&*@Pivd=`x{w0yp%luX^V_0Hjc+DymtmqF`eAq(X74ui>mh$)6i88vc zB7&4|Z*XQXU%PGFfnWP)D<>ot4sG04b~yW9^c5= zNHVsvs)YTTTz#-nLsdmZ|J3=UG^q=_-e@6*C3`!^gH7B?q25K5Wh-Q1^tRr96gDZg zr=(l@ypPOJdK1C?KYmMpwubf%kwDzksi zFjH(J(kb5L!2Ia^YCo}Q28b7$!AHq9$VBBZohSa;FS(5p5M-%+pj?;dA(2bZv*}r1 zq)luF)cKmMv%owe~6Ar=oW@z|I(jIjV=WQ z{Z^g}fC%H;KYxUXcvR8SB9%BKky2V6D!U#z^v}6g`_X&FFyv>ImFMy8r#z;Tb)rj4 z_miwgIt1MC)$j0e%g(&p06*J2O80B0?@>+DJag&NWBxc9|CO6kNbJPL(|>1Wxaou{;&LccRFMP zPoB2Z*h<3Y`E^m$&i-FlmL{)kT5lrRWh579Fu==occtrO3VgLH5_x4XUVv zRXGY1)6jQdmx>4bJszUui2{ZHsa7qyK{MF}y8m3llLZ`@9TZZlbk!}Ws;p0?=Ls0m zS(=rV<&6Cy<3l=2j8G(n90uvp+EJ^vc~^Yu>hh6g>-nRWuX&L-^j(QN^%w59A2Di+ zL#2zC7P%rW>$$lxJ)mQLJ2=RJFu!lH>x^(v%opJU2l4M^gbni>CHi%eek>RG87rEb z=@Ixn!NWs(;WGIX!He?Wzj^09Bv#)h(O)S55m5} zl$4YY2G=AxR8>{|YkK9`>3<>Pa!y&#gst1 zNQ;8F@dCjU7Q5E&fdXI19Mx0a+pi|r{>oQb9tx_NM!oLiGO4Td*mt7X5iQl!xoNv7 zvKYj){6$?bwy>xG+4PvL(WyRA!*H!@v)-T;55swW#?&DvpUyriVYpicrwut{i)Hei z3%UJb-3SogJsV9GHybV9akS;))*F7ur86CmB(9qaNg5LQeCui3i-EDy~ z>%h}~i%cmf?}8dkM2z>go9_mK_?%_5RVHo+00GKU2ARwzIga~@iUA0SO*Op_`!2UO zwX_^AJrWdLrT-ebf+T;%$?lrW2;;E(!8#s$ajRb`aimeM1FHwn4O{K*| z7F)MhZkO#@%lFNi0Y7+v!@aa2sW=7Yr|}F; zCWrht;-bEeJOAhpi@$Ddy$!MoZ|c=~+Rriu^iRJ*o!vXUO5@FdBjh7pTiYG}Qfte) zs`Q{zdjZkO%E^60G{)G{GN`^UG3jyngRM37DU{a{Q?HUZyb7@M;kk$tU73pM$cGOb zNiPx-HedzCOM47zO=HKQUg*1xsXU^hnoeb}*k#HUrO!og`#oEfvZlxJRnp)ewP^WU z_5J5Kcc06+X1@^e`J>AnE8>nFERbNC#q5;u_;l}&;^9a;`mDE&(+}13qdXUHic3fn z7d?6OYuLd{%a?y%iF%5TlvWc?2>AL8ZxuN&F6FaHx*yGC~TwS%S`|MQJocpfeH zl2?B*=(GWvu^vSohZQx12vu`-b#%rRgxA~A+znTg_yq-fKnLZOTP9~GC+%Chd&Y$j z(@tKrT<~cds`&AP6)5;eKXAszduMG=Rp~2u>|XA)8%an>`<6Ngr@@Z3*9z`#qHC*lro;?jol+-7;PVK+L7!(OYBh`z0gNgF~jK$nfz-9o}b+P!CwTsJa|A>rX( z_5FPAR_5j@gMDXl@h8J8kQp)Px^Qs&`Gecla^H6k7WiJ{ybqwdg^uoqgTt=k;^I&I za_eJ&q<`mP&EgRfbm*tpHF*F0!P@{(=H}*Q{S((cJXqf7{<<<6zkxXOhVqxuM>8SI ze(vlv|8a1C9^#J#y7(88DDFL-o|^h*Y^H{EwTXXndb+yayW$|W(R+dQGUjX2_1d;i zx<=JMK-8?M+b*9;l*R98S$52jFwq_X%oKISd3o>1#NA-LM~~9KT#wGS7y%jJMB@)! zyGk!Q(`n~>dr7tA_paL7+Pt8Z`RMr3VXb29{>S_m$F20LV{~PUn;n?pnhE z|KkX19f}Et?+fmNv?OGPLB{h2Vh3-Xhf@hH3&)DGv$P4 zS^wW0)p_~(N1J%sT3eZN2gWP+SAPC{P5IQ5qt9PnR#Lu@ag9H4XBoM=dm{=`NMz(i zQI>SZh_&Q91F(9%j>ehDQ#6B3Jub+CnO~N zklp1xe*7;cI*Q}Rif+X7^dG0#C=G(Z^X6@fF+51RL`xo)Nvc?t^ecrvOa)0?teO`|}9WjU5G^5Lm2)z{eRvH8^o68YYZ!WKJ8 znt9f%Fn9ox8`rK5dHx*jr~+Z*dEf4_O2n|XeBuk;(m246wPWrzFwjXQsxp&F>i*7tk0 z4PAh%Fn^gV_*}GnSzjNUw(E$%>+q z!1edzii2o$-)5+QOE1`IpbunZX5PUKo)z1E4MNA+Hiy0DC`y3b$XHXJX%tFZr696T z-t~gx@g2kot6yySTyRR4`S_OgUNA*aY2r!g$;q41QrLHUqY3~Oq|%T^BHw6gXq*#{ zaO|S%u>yO+c3K^Q$225>Q5L@qxIsxtz^_HvAAyfOthkXzNjG5xKlewdPH@k1HUIg= z!Yp9_c6*E)_Ql2c3+i>ie#QOln&w@bP<2Y^d{XAQ&t{_ZuFr+;gG+I8T0j2RUxML5XHVtx#TXa+&|ks;i@b7n(q-3N8`qF zxP|>OVTaD=1gUZae(LOe0#~C)`u0EIA}C0|+Eh4#9KpW+vrJW2XXm@OZ&#CauU}t< z2NuO|vRpwQfYvLB1HKv3+4_Z=%E}E54Y%R?9;v7TgtW9wJGM@-iN6Ty3Am7CoI*xK z?R#lS$x3pg-tE*E{DCr6o|uj#C$A#ttj`fDTjZvvX}|n<=a%(0h&qv8xx_a5lFQ1$8SoK+kh`z3Ry^BF?@lOxX$dh+=Nv*cvc_`kM7OzW6ZJeE*HDYX9A6X4H zG&OluRaGU?-$L)WpXIE8qCC5PUyZ=!X4r62 z^fyYX=lqM!;|Ct~pQ%WBy#imd`Dop@{sS`H9Z&oR8u?S3@ZlefqG!GKzdIiJe+e=D z$-2nJx#Q94HV5SAunB>H4S}}#PhhLi)2w^q>wC6|zo{Q^6?cFf)wT8ImsKx{iJh&abeDtSK#msHAe5AMMe zOmuoc)+AYn#?DU8;L@iBw#U3Hd)^3^&dSaIl#~dl;SbU~QUm8?t-O}%*^Fx|je{MX z6gUY)kaT((8Rc`;r_w!{GSQ3#fM?y|47)hlx5)*72KHlE|9y%JW6l^+zZRbf@RzM6 z3u{4Z^wCav^fT}N*=S~m*nJf}<7Hzr60fJ$XgFjzjcK&ByW zXc1tLSKfuO3zdx@)rHjjre{24v2S8_kfw3;fwL$bNyx76$-r28(eKCeR@>>JYlkjk zM@urf;*mq4Vj_KJJ0~6{MoS`^AV=WYD_6F@Y+$F`FAfprt`f&RbX$PVHO8`9kc2~4 z&j)L}YMesYESI~G0of|~%J7~vel$C$}3)I?df!S(;xd{@jovzw?hMnG4Q#)1o zv&pStmG@_(Nm2Djmip{1n|~khvqPhMdByAg`jCSk^1F%W!oB+7g|34H_iS0KRjf(a z(Z7F=j9d_oSa0p*Sv1wEp-Ni~m~;!4OF>((Ox$bNnNbU;+Oa*`S&5C@9#%Fs z+r^{m=^5q`(Ym0cvmd6jSz4uK;l!*c%=RBrs(20k9a~brPRxF4YFb13IWX|1vy%zi zC*1S@y57l_-eyJh$%SH}?{i z{n^=LdNf)<{lLC}595Sh#Ji3_p~&bqPCTixm+9h*pWC}+d00XJQrr$0KC4K|10iTt zmddW(kOwfu3p^y7_;DTw{H0!iYJ$ijg-Oy)^1>H|dcgiZAtK@pn2M**G#NpDK%8`q zwbNRe<|gn`RBhfcvrj_D(J}o%7vjVS5s)$PlrJ> zT_19pQe05*7!lf}u{|{FlsI-(_O`bKGAGRK?2pErPiTr4#&a=9F4&c16cq^Zggmz2bN;p$p@Kvagkd;Pml zISwlxP16G?{4^isOq|eYXNQbo`}|NPjE!Sqnn_HNGRr^w4~@v<{GE+rDM} zcAtxYKXR*l{(SuPiwDnH;W>5c(ZIk!*wH&A2uM(7d5~dPW0p%Q_npcoN1%NmWwPFz zNT?ZtgWpijCkJCZ};%C&tI&H`}yu(AiJC;r8yHiymPmE#uBiZRtAc$)m$T3G9#cn6K5C$sX6%*1mXPTN$$YNea$B zHGrEau(+vT!Ls%`x5a#!${P_O7H~ZWfa+CxCNUR!)M6+T03Nx_13Mzrj}3h|o2Ya) zUvs_n%xneL{#VQDc$@PdgzqSt{eA&GtLfDvhge(iI@0U>d=nXqwFeM7jgSA~2-%m= z#sER$c^}?dO~O3D_L42&!KV+904acZupgDet1c;>dj5e+;m**9zQ2$syf%>w_z$ef z%Yd4RF*G(aE5E&FgFcB}L8RihRdP412ub8cDl}41 zHegSQ`EOh0rfADDG|O5)L<(`Cactpvm$?TOs$>=UVh(O~@55YwhfF+H>t|k9wERZg zn)Kr7FwPC~?q6OdnTGE+O*xjJ*Oj{Xtr#7Zq>9z{m)V{2h6-6L-BZW0PyeD}&>gv(Bn3 zUcT^m(ay_LD$u9Cy}rs8^YEd-!lnX z2Q<99#07m-)B%QdvHjIID!9fVB`vMGp&BAJge)-X@YT7Vv%#Kke*QFWv3vJj$hO0> zXXe7+bmr^WZmcc7#(8kJch&Z0mt5B)Q%CNMxQTNgnctoji`{TZ{dTG6d5k*~E+>|i zwN4biKY%?Pv>>=F8jdw)+35XXFa%olo$Rwc1;qYgWLF8bYs@x)g_wfW4+2EoIM04y z2Ly)2!SqEM>=EWz_*4ZA7s}bE?rxol(CiW0!C@M#Ba}cOQ7F#WG&P^agnZ9Em~++s zF0!Q2L&7khv1qG%c>}6gA$9*K0G4#Ds=D-!mFpn0Z6O|}MeZ8!vb5f0-tq<>yxV0< zL&NoDD!=x5S8T)DPf9wP)5P^F)3pu{ka>rPMnYx1i^lQCP5e~h0J2p_ukCsIhNQ77 z#pYQ9JHr;?Ana*H-Tu%_0lEpRJ@T}Qlqa&?_e9;*XKlv?^1qDi=9{=*{w>J>#hW0J zCDUh{10&qT$J9N~f}F=K8D^4b|ZEji`+oilnIud%q!f_5rnqYB^{IQ-tPYev)eXV|J=Deh&% z$j))vZQ=1b>iWI-&Wa@YTVSmvCSV4tt`zGXcpmq67yO4{_yjsDx-0mq^=RiQ=uGkyf>F3{Fjd+O_HKk`}VQl_Q?{YKP~AV_XNA$6c;HWGNYi) z#re$j1!;OFCYuVD_8LPnV>qk)nrD>Ac3R(3m^B%3H? z?>#G9QubCxHjz6kJg=+1-|zGLV2X}rO@X>WoxVSMnAmezW^b-(ID6v2-Er!|& zbFTF?Ha-L#3&`to%tKhx0H@rsvf3RIduW%NCOF;IF4ILE2H0XC6uqUaOhH0aBTO}Q zE|h7q2H+6?gRvR}19FQkMXKU|5Zsq6jN6|L&BI)QR#yACw1a~XbS~aF&Hr+n$E7b- z=(|T7JH-8a!y>$^YYRKyaX&l@*b%)H8uB+N{Ln;UQ_CS>SR8$d50KfJnkW+|hfLmU z=Kym7ir4|hKGLJ?GhHZ7Ku2OZo=?gxZ0#`%CpMZ&`?q%(*lqdrdSMum!uL;`_?=7i^3gANZ( zeP+zRzIeWtuk8OuoRtZyAm+%MAOivXfR(X>NNN8gK_T!m=x=}r;n!iuMwu8p4aA02 z2K|?s8ID5)1N8xx`Gz(;HDA;y*yn)QZF0C8CwpLALc)o@#>QRH==|x$CJgmZlmWx} zs2x`7(*Fl6R*XZ1UK53E?OK~P6Olx;^p|a7S>kPPJsrgIQ(^b|sB7;G=O!VU@q2R* zy%tOnQBU|{8@6P#{p8Nz$mH`)z8P~}9Pb9C5lnc03S$iv8@zF(F(v!d4@`j^2ovt1k8N@*+59yfaJQ zmZ{GQ$<5lBfvEcbjVD?tXJ2&tA0&{#Hcc=r5fPPyN8t}dd6l)b zTfp)Xt@xk*eWlPe(-OS>cS23}v)|)XZQpo-H<}efKlonNteAkv7FB2=Z1AWUoS*D% zyN{SQlxFCu2}z)te5{qA7uFj|HC1jD?d{RsAU`&m&ohOacCp=RBZPVyWf1Tnt?X2t z6-u=Hlx6v0IO6s~*fqN6<=YCRUjEYpaG`WZ`FLYvWkb1;7{!?q)n>WFyB?&BlRjCS zRxNCAwVz)@C$fsf82Ca$Umam{hd!7nKTo7uFqQS##%NR(CINPOhcGC%F=-1;TWzQJiJW|Sb^nF_g>+_`N~hu9 z%EjHCMd7>JCWk>KMtF0_-D?~t3*MG4fhcnTc@N?7Cf-#8w_q!Cp{;|zG;w(W8O;k& zaJoKt@E~E_5CHjrWzsl*#&2=gF`II`aPFK7a?9262O6;tJ=#dq56GuJXS}l0xg&g^ z>13Y`{jv?*@>y!%3GFDifWS>fIr$V6b)>wwf%e*X5w71Cyq23geXO+F1Wq$ASMuu# z4ZrHK{*tnmnU)4=iGhmGj01RKJH#mdG=t+5SMu4v0v(t!NaCGE%TtB3YDsY`@$>fW zt*v?m{F_2zv7Sm(?03`w^2ix}ZI`^A8bKI`jZiWTCm{NA+6Z_9S8+kmE0A`_?h_|d8;z8jCSmPVn9?Q~D zaKvS8xv#Fa0KTo!c_?De*!?_6aK~`AY=DpY{J|Y05&{r6Hwgdoq~=8C!rg=~c$lXV zn03aYpNi;_1q7bKJ8DRW+R(^U0caBNj4P*#2kj63ll`=0_4Gf4VPc5C&nWJ5?ZC{z zy&m}+gm6*<5g@rDh}&8dm24O+60c6~aszRa$Jx|=@%c2k1^~VQIXYLR^IQ&!kP!SUfa< z8*zAJ*MTEi&{kr=7BROZTgEzKrG5XknA76NXZk3+gb2VOnHO;t1Z1}^l|RW#OdO92 z7wN?AZEQ@9(;nGizYNXIzuef@μMKUP;j3tZz2lr=fW<}VJLdca4MNKQ^pP%GM| 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 literal 0 HcmV?d00001 diff --git a/api-ref/source/_static/images/en-us_image_0000001509858673.png b/api-ref/source/_static/images/en-us_image_0000001509858673.png new file mode 100644 index 0000000000000000000000000000000000000000..e892e305ca34fc95006e3e5597fe498ed86ec47f GIT binary patch literal 51463 zcmeFZ^3;enDMnT^N0^wx9{>SmmlX8bZ9zqmlp1t&(LeCi486GF^oXImboiJ-M zTTe0PbQZ<+n3_?|un-O~d{edt(Un>EjH{T6! zE%Puws-&8;`~e&T#~MX7p0fAm3wCUT+0s+vGEdTmayi1X6~Y{q8QnM&s=mrZlQ3-t zz1lo`cJI>z#aMq$`02V=`c*3i(*TBw{TVkg!;TvKn9#Jt{vB1^Tj2h8q<7Pa{NE9K zpfJI|BT{KFuI{d9ycuml+m7ZtV=~*D*d?f7Uf|B;Qf1+_ zS0B`UX+~}N(y?Tf&89hfb}&AjR-!bcOy1HjaY5YDLljNhF<&t$lRK*YcNK?PLfQh1 z>t2FTFOO3m305-!apN+wZPFPgKJEJj&7$Nt%b%R@q3?=k1f7-Npr z-lFjvtSM|Q=i7u%dX4vwJ9lgnJ}mccsMzQ?uYEme{I8&G+Z7dbn-@FAr!ByQycJ4^ zyA!obNmbOpyLR?)NfhrrCS2ud)D_A15T@*)e|GT(p;JD-aa#4c{0lO6|0UMtA>M1#LSTL3DhAWK%QkM9N@&{UX@5deM#LDf71<&Y z-ioC^YyUIvOjn|O^7m3r?}Z73O=aEe{dmX@8o=eISlixy_hhD{*!$q?VE^hOdbGFk z-E8FQy52Ln=S)BN?PC*LrQ13nI!W=iVld;(g;gAy&Y$!tM z8$W{~NZmgB<(DYU`FB!;RoY>#(cn{^JTTf0C%==xTiX+0mCC=IRuu`n?4*Cz^wo~J z{#R{?N-^1;vtQzD*y};?BP#VAy|eoG7wwFtoYh3KbQ2X&H{xM9BSff8p!k zHM-}}z6PUh`ubxjMt4C~hORFEn;{DjxU*`mBFOrxVmfjx6;R+c`A z@U>l)OTV&Qnp!nd%dwFcUf$h&Bzv1uO&9tGbB02 z^mtRABPr--?cMlw>3XI+_oLym{kmgzl}i7HNC95%X8x}a$?9?5GsS0vv3ePLVfbE`7zsFhD^__RmHFjG4VC#ch@1U*_P$oaN4shf3?Sq7TcdgLc|!G zLr$`t;elPZA%r+iE`nvpWohoU#e zU36>@PhBIiv1We=-_P3UlU&eCK0>OG?o`1DniGpLi@L>bCjC%lYsE3-I8{kvRw?uJ zue82Y^Od#2>jAj3)Of9_1A*{KO}BczLLotWa*{uyhi#`--mA|9*W7N14`fbsWaB`F z5=HNx8>ohd&Z|N~8X7cy>*xxp(S59~Cv(%*S*Ri*i;j3< z*Y))-WC%<)BzDxfvR0}mQTw7IJ)8$h00}V8!hafM&i7=*)h2Mva>Pf?)y@sgiZL2` z$FVg~)-I$SY;XT%Y)}!ng%5T%8frKs4Y{$Oq$O#Yy*x;e>z0*OQ|k_O(t!KIt)|t6 zcB-KI&@kiLZXn*!FBS zcaypBAZZ#jc#xR^GOW`h4cRkjCHhBjAQkdcuPT-}G;|I9&3oj!FGhTyGwpXkGWh^| zL8(ojn$nxvd4S~+BdP)`_S?xl3<)Amv6{>GlF^&>P&rNn5orYY00a+TDEh@MNI(eeDXKfqa!P>Qz7s|e;P2VICfA)eNH$vBrj#5(Y!?*w zKr@C!1CI&ASQ-am4+p?O{J6+=H1wn2!NDgh#w9C#%mn_OW3h`6tobQx-KpYdNfzsu zY##dh@zs>@D}|o(X{yCpRvpn7e7bq5)-Ix1GqjX*j%YF4Y-EGxvqQsXC&oadtswOY(PDftG*{pdW*8WNXy!=w{+_3 zUFdZ$+Kw!@lbB^3$ds)ZGqhOt$9%Y2PvI>uZjSKL(yXM*khKo)kB+z|IM`rFafc{0 zBt0bWj>SU7rJn=>09lDaalxJCmt`nTn(^hsB{rMsE%xaZt?5*GF1cy%3!i}sgLmSK zE!{_-Ato9&&%inio0xGq9EeZ-Cn7n*etk4@gxISF9VWxVB+9ziq327iftQj83yK@l z{@JH!85v9vaN5#bdA*gGm)Ud*mJ}c;)57$N`VNr=mR)t|eL+f?RgELVeOCJ^_AIoo zow=wBZLyf3jJ3|9=Sn>v1W$OCS`$tY z#+%JQDh=j=>KJ;H*VRQygxV_)9(8&af1I}MS)ml#TBkYqO8yBS;+q*4?X3;2&Z{|~ zfT-Yk=X>tVxAD1g{IaT8G5TjjTb2`VT>8o_MRZTT)`5{^#F%y{bT#X`i6ofv;b{Xh z;Py5_g1sF*3f<}fWKy?Ts~>5&Fa2E|nG zza?x`sF9TmjaPTr)aorK6F}ru!W+i0(M4pmWD6To(W?=(2a;w&UqS#6h06-$n{jNlg1DyV84|&YV}frmh9DtB z41In|q1>=C=iu+O$Xy<6em>z#tQdMi&rANFx`Oy44Y;@tbJoeyQebK-3PlTJYAzJD z+x+SaeHr(R7`7%Ea0xQ7gVg!f-_C_G96Av!F(FydwOhKVRoXj59As<;$fQb9_GqKh z@eRJh<%+@n0C5N@LRB%*mCS7&opx1Y!oEJm0hM`>@mO*<(BSG8)OD02ko7d%o}{dH z@u*JH8Ygp=I2cEQ1?>{-yKPenID!ppQohAYks-2!BA$x}W@6m9dypg@A*}}YzIyZN zFU3@8AH3EzCdMmY1X7}=`HH;KbNgC2SXh?Yg)QDgya65zL0Iovl1dmEXqk~LJ)WTSkBhS6(cA*F-5=e;DUWe} zcfW?F9JWpI?^cqf%sDr%zd^@v(T9go(-EsH{K_h84#t&`wyl+r9I+HOO1vBIGU4v` zL%pfl+Qi=|KK^S-`|@tflxw08zTtI<@AjgV(Cj)2FzX@TJ(k8Drywq7|jCOCDJccfjZnCAD?u9ks}F+>JM~ zp+LDqPKZaU*Zk8h-;IVkQEGFx2Qi%8OEIVp7p%*p`6ihWu3h2{&E>?X?)T&OwX zABjd$R9Bq3swE}j|NhfaUMDs4Rmv<8n#4--*24O3d>)qQ2~66tZI8V;{Y1;##=9rW zc=)DHrr_?2(Rbn&FVs}KcZmf_A>Oxv8L0n|Jid6PDE94D(Y@gB1Ut`Drr*lSq?DA? zFcafe4A%O|(zX05nOS>jX)3O9_5%)=`SoZwkk)-wzO_Ug98J||I$WfAE6iBwbvF0b z{%6?yTKCxzDjYB;#E>_a=(6ud5&V*F@6^A0HyV%{h=hrWuWy<*1S8vAGLV~an4=z* zZmDX*+sUr7mU+DbS`+=;p6V-oEXlvtSB(D*rCoO^>yD_;YE*^sy`>ui|4oYGzAt zE=HrrELFt@5vVsNZ-lwKKev_?AuueVOcKOqA>;v(waIq`okMHoAx*DWisJZ6S<=tV zz>rJsz7e)##~G3b>j}~(5K0Q#)ZEDX`qwMEvY%ZftCQlHi0y9LS8)?7&YIdo4zjiG z+pmOhTsAMpJ%^k{Y;b25fJFJMUh|1A^{vx3NufK}iidk1{rmwzn_O;<*PHm(;L<>P zd-{H^?kF4Cr)LxJe!nM74V*oy=zpo0O~0vH@WqcDSi+4Y_0>QT(}4KG8;WW_m0qc- zDY#ah#%r<_z6ow8BZkI3Ab9Hkr5G?^f`cwDzGnn~PvlrAKsjmZ_K)I7QQjfac!(FC zqP|*FiK$V)rjvUEmR!HWx>^>((*6Uo<^z`M+*d@h%Gy1N^djQ|FU1dn|5lh_jRPUK zr~|Luih6wSeaE_f(uV-@icbwsei~MtoQ;ppJPI{}c|nq1urgHZ3K_4_`e;0$Q@)1g z0?H2cXM-G#qVbwGq=7^{Tf$gG&RtNK$z#sb`%7#^q`{#fb2A^?(6w(fC;p>#-ITh)uDlt^Pa4wCm^et3 z@kSKQPH1AuwkxQgB*w^)xE6Qa#321s93NHiW)T4RE_w4Ml8D$=zej}6{YM3jK`sb_ ztsuU-3z3fZ_Hn=E=0OfzKfbjS)}lPDSrO1hanRryhhwBnuj5!USDz6f`+oY|8E4JW zT^3A>WtoFgJAG{bBMihui6K$Oe6*%L{;SFre3X+OLc6jlq8uQZcLRp$3@;r-`<*%1 zvBUNoI-V2MAY($}$3E*YboM~<^G?i{V!-gEHOL`slb=J7+8TG*2`ack+J?%v zEpK+hq#g!&UiSC`w(MD5UyV;0Z437Ux z8N5`<3n?9P2z!X7;z7or%<1)t)m|VC0u8Fv{`R;=DKhbYxovIiV&n_O()h8dPJGAd zfVt8Wquax%MwgTElq_nbuE(URFuaECTL$!MOj zq*K(BFP(a9L3x@>>LU=Qe6|k#C zg;hIjP3kXG#7KUuxXE!1C~#@{zK6d&8alme_4-MR>9gZGtF+f}6wP(-PihknS9KdJ zx98tae&6V9e`!>!C(sF_WB)bbtXKMKc)enu@fiRB=T%)z!SkLMl$LiR;8oG;Wn_tz zr%Ta+S(^qO$&Z+;!D!Nl0*(Xw>GI$N5-cK2g{;KU&T{B5_&P!$g|MzZ738AA-)?*Os*t(gUU^SP)h=JKhM?E3#O++5pc-8BP_&muxb~rQYnfKUR zVcW>RurUhjTL07d;F|scXBBt&WJv4YPa}SD+U@?)(Mp_x!Idb&lboa05aCpDcVTak zyS0V4BrY;6gjYRjbpWhvP4+KVKkk1@pguu@c9)W)%)wI4RZ{WEU!O=mJlpV>8Ix1#rB_iVquO3N2zY2XfoQnbO*8SqS5R8ecLxTD{4p=P2EbFbZ7|)2=Va{ zZJ1U8`%*O`FCf0FOHuPMKTjF(b}IDqZ)mak?tWq4bH7S{U{pS|O$YcjLbc!{G~a>* zHFHPUi5#P#45TkKyY)3vq8|o1uX$VkuBBM4^kGvamW z&*{ljfro43G{{qbXs&!!(pTWp+1~Cz_4Uu|B+_ch%Nmt?n!Y@o-KrH5?W^09ocMMx=I{|hW381wc3~8 zYEz#&f3W`hH&Q$K^0ag3GcO=TO#A~ykQoNT=Th)08-9{WB#8LE>x%`E)yf7}N?1iZ z{b9-dQeRC+`{#+^Wt&pJr~2R?Q=ok}nm891vn68B$|eMi9^2X?oiQMh+Tf-hsr$Ob zp?`kSsqrBwd4ACV;eLGKjUi-vL=UjU_e9a>gkAaV`}owDKALyjCQ;=`fF+WkA$?oHog?zYdXTb8->x`A>vs-hrRCqNJRIEBG_J)Ah@rR>2-5SzHTq3 z50NlZA>$54aICh-()T=t*z%Wr3~k2cWv1m}ScTe`2e<*oa?~F#Uz8%H6xr9~Wj+#Y zLOWG(jIuqP2MpJWD{ zcH-jVJre`c0-G<8 zkBTtEETMS`bK@0*zRXJu2_4T1i+T6&Xx#OG@aWE_;buo3;?y6?WuX`5fC|oVC6M|l z`aARWv!tU9r8AKs8hqsd+FW%#p#inq-bP?b4?9Km^`uNSQO^N28x8GC{=~(*WFc_G z9Bl-=r*Y#f+-i>_`jfoV$296HY0h;wTHE@ab!mW)uv{8iPLdalnB4Yqp{SUk!*zK? zd#U#V>E=+A_kxbuDN$GFWn3wX)58OH6&am{68xdNMQuYabEk-O8VMnu{*Sb5wyY!H z+irTM0S@}a_2~T9G;$@1)Nxd8ISfeL%3=NEv8Wq}hsrKh!W>X<%h9CO^^EX_C)=M= zFFv4>BT!b4Z~G|3h0Z^H5X0+H>g9@-#W204Ar8)B0aIpI+3>2!JRF%omux2&b%SoQ z{)|nfe-299K^%^!*xpbhKs?PnG<;;pPZ(9_nNn+9TpVm#sqm?ZW(Y}E-7zP`_P~I7 z*=l9!JO95KYOXlV>FR`%1jpvJ`i)$UWM)B0)~-2`doNQ>xYCdErpe2I?1It-gMrO7 zFg-rHk<;$Zl>T#WF#aG1+@M+S(l`Z-!z+1w)pl9XUg80$+t{s#Z;ff|hdORd4oAG2 zdin5!ADlJm>KM4hW`z_wjO5IPlBF_(v|xGvYAC~G?*v-O*m?xW5F4nAz(uXZgDU$k zE-#YV(I!#~(|D%C4@315f!c@7RP-D}8ziybf6ft2F$I8p&*D&}8`Q4!?%J|i$Z-5G zeKy}iM2v10!O!QWp}Bca34D+8jg3;Sj^zXgl+c@0_0D!^b^GsJ)g&l7n`ik~!Sgu; z7cs4b~uglzs#a zK!g^0p9w!inRKO)jLv-I!K$omv0t=U7tnp=D7&DE@s!beRv zZ>TTTQmBhehVrtbANrM!ugp4syeO1_Cv>z*zJO;FI8c5Wyu($&vA|8eP*BK$`@^95 z4M26n{G&|u=pdRA{Pj*u+L``Jh}+o*t7LeQ~zTxQMcK7|TC3QXl&>}&89Tt_hknf}Vf4u-()9Q}k_P(|5Uvbhinxg2MznHHG z5>~e`RxH-xCP45n1?Rj}nst~h+3zvj!NOh=Ex>HuR+QL|Ym57mQ?JZaHc0Mdq+%Z7%6eLF0zr+Era5#F5*3NL`AejFJp z&zSH2L1>Yz*j@pRjN)IcXn2w=@FE5_ zMB}iY&l2F{sS|mvjEXGIi72#V^a^^)k-6PVoiMY>#7-I#^)CpDE;0+hYU`5zD=~f4 z{FnZ##{T=JRg$y`TuW??yTQ6{9%VokREXng0F}eW{}QeRpHBH5y?i>C^HdB-mHNr)S_)wy4>Yq$WjOd5IGTu^Q+l`-Lz_c# zWg?@n)vBBE(0pCxU#9MtFik7J^>2UdorLvoqtlF{WADd&o)R_~2r;j@ zp;Y$sNQE)KN9o17H$!es@%f%?JIz#_*J*Y?4I|7QkjwP19ir4l4Gn_F+;HK#?Gqky@6ppkC~&xxEC!=ROu6~Q?rO2ZD- zSq{gUBUs~Us=cTXR@qf)-uf*lk@e>>VQ~M7xMczN{j+nJX>VEDRLZpuQ+$OKf2e|z zNOfD_S!q1JwAUExv)bccIGyY*whH~;`s*g)HH(EWcJ7Cm` zos{a2ysUX^+3V>SQ|ERzZ{4%imG%;3GR&BZ}?*2s{y3L1M( z)L+He(9b;e&WZ=C`!od1f-MNb#C-+1<4QKF#b={o61c`JOlE7H$)6mzzlZt7$=Gp; z+T&01UP&@7gm;^~#ENh-u-SXGw;L6YR@?G7b|*WbrCVYBbTog`L2!$UdL{$x5}U^X zaUdLL4R3s6LjQ)VrY*li2btK#!TRthJF(2tzx29Ue?;5fJ8X1R>!#1v5ub!z zBbKE;1tsrC_p==GnAf(3fVl9g&)~p_8EATSyY9H4_Ft7!Z{jMGy|v#Z%yN^|Yv}$Y z@?{x0#U4pm)_u^mqTK%Yu5C_P&+3jNoNt)XQDBjq@{!Y85~Zd0CQ|z1()Hr<09ePJ z3`FoCW$-~;jU4AsG;&3Qgy;7ier1CRL6`66oJ^#5ZG!hL4hP=b4Q<}`Om$U&6~pz@ z6gjF16D;cP-V1|KfsBh=xTHe~zSvS4FWh;J=l7e^{__}_J{v#`eU`-cJNmfzSavs4 z)Us?z9uijbuDpXm8LNsz(N8u_oZP2d6}st;>H!pn1gPZubJ_$as#?5YZtjS^E}xD0 zuC908w(2zJXrAR(hYF{kua-pBrw|-4zEuV_Yz2Umj18l!v+^#h6f_|j6(^1vlny`E zwxtKls$^5TmAqApWApAI{b45tE(#R=E;T|C8h6s`X|D(GZ&kS6uZ&hMrIO!Jjdr&r z{{0#V6726R1onP*_Ho_n=(`$c82KE6GcMP*4668o}{HZnD0r zB7}Ey$qJiIWy3h@(X|GUxq(2$@Z31znju9sH!-N|>E~s?u+`wXB);4~27MR9EY=b2 z(J1l~2i=3{4Y0~3{Y@P`t+bMx!uubEQ`v*8=b~z4K8|n)2=^WQBRdu&^_O=8>rF`g z9YE(3TpwBY0&)~Sm-jJ4Qf>L60X#;J*K!-o)i8+ZkNx=6GZJzah z8{bzXwtkR^5+IqWVvCHn+M2H}2^6uvxYIwb1+jfd$aiRK#OyDnJLTO_`IJCM>*WN< ziF-S4Pd{5Qky6GIuS{K$PR*yfw)~bcy`3_BUtPjQO4}_ix3I=SopiXMDM1D0;uP3Z zjNuX&H#Av7p)xd?E#EqR91H*65Ynb{7T<gn|lxG>$wv*l`tbl)tvpEMjVB2N3Sg(a}_S!98}4x8JLLfpePrc|8uZ6`sF{h5zj`ws7g)Mt4F`^N}|-A^`1Z;aZ- zB|p`(1#TYbT%W=1_CQJ=(5;yCv%kQlW5a-*(mWq=qs4yK=*bdWjanuP$gKGu(Q(NP zF;x}!c7!Egy)-+22h(MAmwiANC3aM%Q#zATRv?+hN+Q3XH+)~y)L)I>QZ0NG)Di4N zgJcLuy(~aEU*%MSFWSh0W=Kms?EPz6onc-9c3#$DMV%Wy{?d6nV+%XPf%73PLf+C{ z1Ae}(idBws$@LKzOrS(n(cMc4hWC2eq(;s_r*t@}u?5JJ-uFYvMGMC_JhrVstCb=p z%jW;pcpqr;`su^_vOA4S$P#Tl<{Xz|*>8BiGtw~im;5d9T`B2PdPsE8cV4jSppD5& zvv&$Ms%G}gs?$mQsUzspuu{LFhffa5fdDp+ra;Ts!k|b%e!^F6^LpubTEmJ3(4o8UL&>P!CLwHlf_#k zvdGrOQRBe}T3LF_ETQ#HdbGf;(QLDhmwU^W;i=ZgrSkXyarDVC%k@1D1+UKrnCMT# zimr_CEAoK>A07>M{}^iAC=%UQF4We)6+3zq_!BGfSCexyEpTh`__ZB0qWWhHh$Ns7 zhvfnPV!y^;`Fbcv_+vp5jOCNGW{ei^F#OE#$;*UaA97LH!I*M9VsM+6o(JH5Gf#_TE{)PtS2g!J@V&i4rD zsq?L1^f9S1(aPdIpgmC@i1^jJjh~lIm=Kofc=wYA&ifAf=Pog;QkU})wvJVl4RH6< zDJm)7RWhmKgkB;SiS;oF3D8108Rbw_yT;Y&_YX#d|pmivKLB=g< z5};;d@=7q;HB03!x%aO=dAb$d1g;hgO@g#cS<~()IPZM96>R1H;xOFZ%g@rAUGV$u z9B9pf@=+6)1jD|gP?YAw59!AfQm2`{E^3iMKixQa=yI6&i+q!=s_FHHkOT!6n+tC4C*fimIAha@1lIAmAd2{#Y5X5?USnkSC zSnA^wpRU^SRfqnXKQ~l9-Hqm3C-EpqlGV=hpb}W#-9$s>t`)0%iZ4Xe6pi!@iJv)Q!$(Qd%(aKk zjO$OiiuWr$9p;{0?^RsfOcra?C zKS}wth&BS}%<;TRhB?I%7Qp&~#_|@3X*#@}nwb-U3{h*r5k9Q5UyoLRb%u5CCqhFd zcE`Z6-}$Ut>BQi=v(zOz54EJFmN@OH9U7!QTIkc6ue_BCjDq6ozntlv3$Tt zFr=ha8b@X+$s>3HW>x5NHN{&oZZ}oP|7S-M7BeRoLt9-BkiO`Ekse9^EUz0;9_S4RY8>OK;z*jTE)8N2?fO8u5=*qS)y23AZ*IX)NX|49ze%jF=>o>ec ze;pe*l5cySCa4bIbk}545u5jL|D1t{D_85ca_EyBx?FcC8((v1IBB^rve+>g*c6+S zl|Xg1-M2s`MEa2oi&<0lVnX5v7rm>5rppmR5Xg{(v4kooR40W_bqt6VO1+HUJ?Jsj zi$4JK$N66CqyDU!k+mFEkuLo5+ws6~m)PW;4{-Sb90yhy(K)b*ROh4f6&7>T3V&Mz z-vH1tVG)7CuA9DIFVdzz%3xAg)NQ8|Ap|{HsWarf#D2I-^YZDRT`MkYvT~gsx)u*3 zTcfed_%}<${twB07Ff3kq^@>}5O<8vr+R(JeaaI*oZ>!Pd{qlv!8>RMJ=XtbHCqr8 zoCOq9C7oDJg`cQ!(B;ka_P@1yWT*V7jlIpI9QE(ezsOhN_PkRQakSDuxRfu*vDxdR z;D4Y{wuO`=6Fc45&q?Dn1mN*?H@NUrrFY$9w4-r-0gInoLFLr;tf}c#-ak7kc6eP# zS~&l;$AX3ornkx5N^?sFKgwm?5nswG+1H4{6nxS3JH`F3=7znsAV)t#uGbBJ(7J~T zn=4nxwi0gG2iWjq#$p0ItPFnagJC^I@AZuZ8_jYz{oDlz=ukg3Kip*urs+`d=V|hK zf~0Dxjf&KMUGuRJrX!8>xTCzO1X^prx`{L1R;<&5>6biimtBlX<*aM|w$C>@O*V=n z{KjR1QGh8ZE~Hy2^)TSpFIBR`Hv9XJxR{g6YUBFnd?K8wca;eQSpvmo8^~)HRbn^`PE(q`H?7qVNa^ z87l+b0s4Q0uEzo)AM7uHT91eHbFF|>uuYC6EXNf@Gmbox&Uyo2KF$SvAb^-o$8efq za^j;9O(($RhdbRuySsLb=0xAO^t1F9uAG#rF&O|JF+wFG<#*Lk`M?&$=dFOz9jkdfEws~lIdK|s=JLwA* z+zK{ec60DtV)l;*w!q zET+YoS={r-4xH0nQ>=~1&(E;&HyarpvUiTqeA0>(K`^}N$}LZK#?HsGv61h=+4>3# zmFT4*P|)%=GZHhr@Qxi$AKNGnRn~Jl4EQ?C>I85sAybJo~aMU@6T< zo$6rw2P+GyKRK7pWXc?iM{3W*H*w-&IJ0D zqvk)z(@l#q*|Q5ewJne9lvr?Gg9P`J2V*yUtUrAQ_3^OOC~p-7sA5AaKJU?d^h5W6 zQF$|1FLTqp6D!o$!?H5vwmJX{nUbe8J9BDg~A7$)Q%Emh`cWM*rs>fP^?c3l$Zq5mpDBNx>fkZ zF-iO3jIUYaQIdqCjal|2iIRA^7c{iOaJ(wYe5U66+w$<9F+W7|T zMAYaUfV7k{83Mi`M8{%iiK@#ZD^ZOM678@W>`;uSM!>Cjs7Ot;Sc-;Y^CW&f$m>H%iz#%8%^^V?Prc7$8zXSKwGB!;;(Yt zqxaG?Raty>@{tfb5_^7!Hda>zUn+!1zrSP^I!|Xh}DXB`Q4+F!~ z_3|HTs^g0gjq9dDDKEDh^Wbhr#@i|=WjFF8ElY>d;hT<{+>ea;OQoY)yMMe9KC0ze zC|mm;dv(I8S#aL7cVzW~EwAZU5|^f+*{|_s&V;k72N-e$h%Mz(=Vvrry!*q!WLN0r z=Z!(Fv+eZXv71%27w@UWl7AFjtkC?>MaldJOyYD@xlIb`jM3E1Qb5IynAE^RVLPAF zW{jRV&;@fWvtf`98JgD5V%)J7LA^2O{^0WpATGExcgOR{cL#YPAv-fQG)5a-KY5&SR;^zdLI9l|C)%06~=&7r&AJ1WQ%a7KSy(gMzyt#xn`7ar{A2Ahgi>4F ziohAC9idZlkUh*%iG)o*~L+Ty2j9!E~I zegF(Vda`TB-UG2d)`ay{o2&IabG1Z6qA|;SN%R<(waVJTD@RB0V2ms`rHMVl3Xt}q ziGCaj*|TcZ=4>$Y9<=8A_gYI1Xcc`Ky0>P%T0;5`YKremSZuD?)YWU7CiTo!e^aV% z|1N6bgtE%}n46!Q8a-JYlWHnqa-$ulv*e1xon7&PH}_qK9<1_BE|0UN0O$i*hvjtj z%-5s*bnS=^=7ve-UBJie;b^rPACPO?`lQ3%^{+GlmR9DYe=W&wJw<3b`0U!`!596T z3+KWC74tE^zIg9q70KF~Ops~BnE66rRyX{rkPJCE(zwQV~usOvtf zE;Z2cAAQM^wz2V>NU5X5M{W8*YY*ox567`S(sKC|zr1BXLmu&=^O-d*%ZwB%7W8h- z_tA{w>O7^k)OZ%v`-iZh^IfL8(Rp>^p>#oVl;k%M1`h?FZp9T}?U`LX@PFvJJ7~PU zVq>N*p4Vjv7!j66Vl$hI0;JOEkxxq_P$$MWi#UNcp+=^T&5!QVk2p_uWi*+Cm1wJ` zn?YNWv`EU#krQrrdk$=|{SIJ=?s3HIQPA=)e(dc_RcUJ8o$I36A(N01A%`8T^ zzF*{OE+xYnA3%`c8Hde4V3W6b?FDjHl?)-iS?<60)>vu9N%SD0&BKaREdCY6eNl-C zF}U}v)wju3&h~QU$xoC~uS^w9Zk!*sW?wTd$Q2^oG&_9Tyy#kw<;>+5)9Q$&$H4Ln zczOIEo&X!4QMFE50VMMbNFzw;VvusIIQo}*ysG_rf=H|rG%>#H-FbCZmtmuA4J_{f zAv8T(gu1VeP-#BKe>au4H@W=RWsY}S&ik*BM;YUm^R~eer8#1I`0varZ*5f}mApVw z1Lm<~^p-?6*wWH?qADhA$22Pr-|SVK`oCTPu(gsV0fai{EWm1gZTk%* zhfFK&ShMdAHkr+rCk&3i^zKCiYQ4F0zG}+_x7hSb*h5atC65wj-13RgA8}b#n^ENo zQ7AOFwozk>bwFjdRm}^e8>M1(1!@6|2%-y!{=&^LpPaIicv38(3y5$Yfi=oO#${YVLxp8zeq z7Lb@CUFRl1ltDN*5Y5ln1BCfd3vj{mSMZvYVqZZ1qUr$skvciGx1ar%|FX2nP3$xZ zyor6COAuPRyHFjPx+@r>&}-3h={c4(ZqG7szk|5R~{QQ90QrBkzze>hqb;~ zO|c(L+K1j!T_hk#N3}|=mqh}Ug|Di$Mr!h4c^}7G$bVVuhP0VDfgvKuI{jVkb(AA5 z?~9bG*lmiagBfVzp1tranJ^~50t%49Ymk{Xd+k>XwXA)$+Xd7Sn5N&=UOk;r3bJTq zJ3riG^p3qF5+u1G9ym0oac*e>y~zJ;!f?v>eD$hoGj1N}NsUtbSd;0BwrOQ{)0Xu2 zA7zDl%c1R-35r3fu&iQmrmBPS&!5Z9t5g4--a~Q!)A-VOt!b>r0W_p7hN7nPd>PtX z^0brt$nE(B5Hz{q`_o*mP6Lj8;dG`n*^o7!109K%)6z zJ49tF-<-@~Db|=+vn<_=tGzP0j*LHI{%RI*FJUn&L>0(~2wg%XCAuDSg;CKY<0M ziG3WYtAXpQn(JD{^n&(gt|D9Zn`bLbRX`w-};WA;yIp{0OgFyn? z5>sQ6i#2;HNGf<2xRp~BIlz98)37J>hoWxpDy~ah!^X>~Vn;C~ZR`9{=W62E6v(B( z-o$ecJzF&q57}Rj00jn86;(MEtR)-?ao6cluuRH&AMW6Yt9E|EEXll$1x2!W02jfIx&_BjnojC@uHc zK~@{yB1GNvoEi_Ec;9bzg3ce=D9!Q$#Hh^G-mczkgJZkO8|p zLHX2t$|Fxx?thLA$do5JfP-e&w?(8TLK{UT?J4rCci%5Zf51xnzbmlcbaB7!(cf0> zrXHSAzl#uPVnf#Tvn4vd26D)o>uPHJL`3_+6ndA{kCja<{Oa}&)~v^IAa7oN>#5vt zV^Q%r-YEKY8Xw2kul4JZ68O>=`PMRp|7}C1rh{pbfyN2Q|3lSV2UOKW{lW)9Q0Z=v z?(S|7DN#D4k?uwg2+}DC(kb2D-65cKcS%V~^Ud*j-|ybbKfpfw>^-w)&C1_e10hKV zbz{;1tftY}o&JUkt(wW{l2{mYRgk+b!)fl~g#2qJgQmo&2}(!ijTESj-DG50LqBq~ zdK}19G6|!C{6-WBtO*T23aBhudHoi-x8yBV9*wbEU{)`fN=#B5K$^&yvJWBnh|7_f zyTTy<=v;Cj<>Ua8hZlWK&>Ag$u0wq#SXmIP_GYDzL5C6%(y=zd`<3}SsHc^YA$w#> zK)`TIK!8Ak4FS4eGr5_`3rCKbhK z=w*T=uWylB2=+AoHrCq_d-Y#F`oO`Y+yq2A=%xo0-p zJbRpVd7%wU+ST5D3F4Uj~R;@EQ!!^8{k(3$Pn%Wm@(nzOh=Mm@3Il zD{=Jy=Lru6DSi-_EZ4q)jInYC&uX9)hOY^k!5u*`8hp zZ@VJt=q#u%-t<1)JGrr23LUa55cu_bp6L-06Pyj`sW7NHDedM;TRQ?8K#|Fo{$x)G zN)kYBK4W4a_M*;FIo*Yacu7wUlxa0Or*4*mXP5iIRQHc)Lz<^>T)=NPSZ z3D!b4WCCS)5I>(AHKS@&Bt-c4JO6T|pd!}1Ias%v9hR~2*oA|%=5CGgLh7InW?)@9 zL_rT25N>BbTsr&A>(hVri!1vIMwQlF9Sbt^DA94WAF<*q&Y*(p$<1k@cSJtxO{4~L zUcGEkpJf~ZwEtdR@6GDfwc=7NU;a_&3KAw0{nr2iVpUXfQ3A0MALr)3R=LGPCe;(3_*_oXpzSO5%RTGzJH!muUV`;ALBIwjCcq*6prX_MO@=-A+^TVF zYv8jxC#>4xKj8~d8D#Dx2;P5&0Rm+j&gZfP6_gP{ZZLh5kVZQGwJXs^IuG}okksls6we>i@WptWXMa&u3}i;30sW*%7mdPKTX0Q|KMjue zx>c&c7;p^I;m-KI1^>t!4_-~->^6@5sQaYFJut~WF_2Kyhcxp!*9hRa%msY*2rJ*s zh6LPMh@Kt*s392f(-bi)^b9jnFJ%e_=b2YJP^KGt5y6jdo^MtB3!CK%rn`9=d7>A8KZc6YC|O|?wlC9f)Agob>j537^m;-I2A zeZ7FTK0x}xnEEiYKMi63{VH`*3N`%56OrXc%S%h)h_YFN+{I~+Fg6(dI$P)L;|EJ$+c&7V(o@K>uew2krI>2!i_ zRC*U?FquQ|Xx2L7%}U4MH_|6g32ml#FOeWREvv@QASIWYhc3!;vRI%DmCbmK`aIM` z>OFD-+S**-9?40g+()}%-hlAbtWB0!1!?KKm#@1s-F@}2*|0F(l0J*}p1@L&=JWV|M7%drxll*-I zi^g6R;V?U^{`e=|d+N?|T00~9%yNE&$Bs>fS*5CS!VUJ4uLu?=Z^J1d6$csh6N8eK zsq|*UQ<6YIB8p(2KZoNZzw~~CiI~?f$>F!$9wj&C&^ar6x1l2t@Y4_4Av4wxl}7o^ zFKgGjuQwLRTAh|rFk|Kixg(dL`}B$xDe2hk*ThBi_Al|RgDd5(Dl`dJG4>BwSGNU5 zKOq{qUG0bDpMjVB`E&3{fbD1Ja3y<9_o%4EX0<0%8q?#~v9{`Ax5>fkh4`au1Sy;b zPA8SYHSb z@ULMmG-+dx{=Y7I$X&+r;L}<7jp-VV1)1~C7ljw|e1cA4{0CWJ9C@6#ZuguwA#evM zj)|o{O)W$YXK?6a57BTyB}_*sor91w6HR2Uku-N$8BiwRb)S1<-82h^LiH>~<9pu# zRZxb2&nLo*g^Gr_m~e|B6JO7bMjVA1t+Dmr?Z08&{AL6Eg3&!ZUg(@uD!u=19QInC zG0%cO$OL9#8LGonF_~25>s&V-)Ef)C4Er&pDuCG{es!k3zkl5$%?3P$ zT^&LDw>C92nh7BVZ{m^FlS0x-#mv+C6STAAi#N%0I-gzl50H1R!TOO^urtFfEZ8H8 zpaQ$t%onp{B^a2v@4hDIUfDa80AfH&P+=M!GLENSy!TD6#ZEz_&bSJCJ-|R>4S}#1 zCn*rX`?&#!l}Dk}8PJEUO3hVEK&nWu-3zoj0blg%HL3LPoS*fOggBVO_T)FFc3 z2CO2Og5$qgb}UCQ(cGI5pu?^WcmG?Q3J&$-&zfSL`ZwW;H?|JEL21943Bp>d+QKMfg+{I_%^jc~~Q z6Pq%Oc?Dm;8^6fNhKKmMuDYTcehBHdDSGpTMrNuUvGob;c{W4j6uzG=5UBtOwtZEJ zbBwLds`Pq1AO{Gg=eCUM7#G8-6QBMqBN+3<#{I=Gn2H;KEeXZq@X)=!Q3tjaWIRez zhE>h%@-Y-NK|AhD1h<~!n~>yv3x(_84e36h*DoO`H_ip*sWCZ$Do7@6G98Z|N|8aRmInCwTpd-(WNdigNM27V@C_5*ns%?!C<&%%2_?L;&E znjF}akQ#Z~Zt6Ci1iPVQdve{_YZRTmM*jw2 z*|W2qigy3os?FvLQr`)G1NauC&YypzO^Y5(3j(poI8m2+J1Hqs*OhY`_rH{RI5b`ohDbv$ygn zPWmfuF&Myv7~=-5p4mUM%&CvXn6^!>n*-%}hg$(!HKywFtF7Luk`WrtP`&5yPau$6 z3{*5M)s7!>0ReQ;h^2pG?!I{4RvpfhTx1FGoH2t~EDw96(A8V3ZD_#mUC()s2Br2@Xk$nDEO{7_Z40V(mRks=uW z?+<8OD7~XOrJ@js)|!k`aC#zmHiIKOc5BD4+YtP4@gL z8S2wN`Eat@mB~yB|1H~-kAPUB>*QQLMht*B3l!LufuKTzEr%N=Q;7#Y0c-k#Ab+qQ;*8Nx%jKHge@2Pld?tsd3+_ zy?)CfQ+Zb4j>s-aVvZS>SGql1*ivA{vvFwDjszk@0JkCveMv+z5;he|B_#^&c!9q6 zWoH*?C{9dFu~%{`YxH387)td@?J)y_5+S-2Xw^|JmA_&Fl|Bb|LD6Nwbeb56NForC zO3ys_)1y+eM<``RS4Y5hR2*rLK_N1JViU+ah_~h>7@1F*I^oDjBnkXSNb5IN4Z9Tu zIwu;g46%{%LOzF4Fu!fQcULSAt!z-RWQ9A;`vH#mE+R8stj0Ff?_8bO0V>ZggjX6uAjO!3a)L%%Wsl9;;MY zQZJqUGw03Czq_SB@dYy>9E|WBn0&9phFFVrSlSXaxqrMsx7qr=J#AyK(xD2*$YnVz zzR~$22*D2kq|w6iDx(*7-p!@b@6{`W&A)khY3ee$)noJ&;wQ!KXga*jVy2y>Vy=`C zQpp^leJg?+$3G5s1`(MTd-~D2Z9dopN|&V0Ik|$@ z=EZ@L-$!o@ifObL`F6k?dWUqQWn^0hhLt>i!v*|lc>+C}*qV|wJ43A>-a~1)K3pL_ zf1WTuf(&TQdhnOqX0r>616%BS+zJp1P<2+-Q#>?ouq9-7sWHF!M)a9mta}5c*B3~! zi*#1Fz4JV0$s!1AVn2b-(}A4h38^lcVn_%B&)joHYtDDnkiM4|c{Mm5tH zcJI*|JV*BkP8z!d$V8}sT-=rFlV%2^Ey?62w+|unv>P6cWzyW6B!-a-0-+7$FA3Lr zk-(xE`Q!MnG#e6CwqNigP`k1~-YH5%cPM5Aa%9OfmQTzdlfM@Ul>&o>7`_kbZesev z#B=DoLbT&@bp=#`?TR<{71yG(;GdMrZ%5A0JpP-xL4W09yCvCh3mx z`$2)Wzr8A$_H)%xIBn&E=^_xe90}Az#3!{aDg^BAvUoz#Qo!rZt8rXuUIi*#z4OL?3eQQ1fBqNQLTuUF8ewV9}>bdUZXq(EEFcqL1IZoz*YBl z{Icj8ylk4BU@dx#mORQ0UfdvvoB@A9lQXcAVx^M8KD_K2yj{cWfVkskUzY+?Vf3w4 z9rW!dY1qmn(Wymu4*~U$5$x)pZK+U<9$|aDVSNqu#evi8@$*{|0va#?mJQiB(^>7Onbw%}l+|1M(70h+bx5J5IaqMhgE==2M_@#M7Q)bKpTMUq<}9 z+4n5U7zGl65lpHkh1VxQ3e+DAlMUe(hsiJp3;uLr3KvxP@vQi%PrwoY{W}{P_6D9+ z0oCo7M+=Hm5uf;nbKOgYrR9&C-dmZ6YLu;u!$ZWyPJ`GHA%bebhk&_(Ff!OmjT$uR z1~oIF)9q6YG}_n1*m6P4r`dCFsQPXlfnv`julzw1Yy#HF5H{|ZIJtnpBE5ovz#?JZ zO(~c(sbFHVVVd)!F^1{SjcRwmW$(Hqd-vBE8rv2CJ6uhfkRi3Kmm7mh=!iZ zeq=euMl2bZ8wn{*mSzH~8RGZwpB0a$M5+0D^R;x3m!nR;gUyze&own@tpwAK0U9^p zw}S<>%oJOGc)W+8eW0A#NY}U?P)m@^$4tQkajhBl%f~&A0|vk=6?`Qm%=#r2#RvXV z$>Eh2C_KjC+q>o~Wd`YupHCn{QY3CK!~Z%LX_$ONRwsnnHXZM^*)gqWtz-XNFnU@J zKr7}1;TX&e-S*U>@IGAFtH$&GS$IFob&RG=4}=40>lgjiVGIlLfuAx$a-!TE3scv4 znP*koJGJOy+Ox&&K9Go8+*tKpjFs*9#jOaHX#MKCLl2;>0+Cfu$)D`%R$16ag51Eb zR|KGDOc0`?E&sron*z2FU3K289%)ah`8UH=T|^loLQuuW{M=jg2m|ee_~xYbCB>83 z7(TogtC?VRzg0*pe&wZ&Lb<+zV-lt|p~Oq>ff?BRibW9|5Fpfr3MwfKl)t{1`tboT zAw-0b^sxT6(1J*zZ74Q-WkF;x^eyvecr*w^-?WzY#&j1y2t*_yXx}Q`3B*E9ASqHL z({OS9LG~*O`yv-Uk{Qs?{L71J7>3G!b~t*N@3IWd#gGmqmod9C!F9DLiOb; z=!#Gn1sv@Ap%N~FDrBgm`Bl<5m)1qt zEtjf{cLhWJK`pa<)#PZ!HCaH}6ioqws9Q@<-XtO}3S&B^cK4$@Ct52Jh z_~mn;ZKOu|1(TmNMe;#~+$KGyD0j%VdlDL|@a&nNE}Zpvc=R}Dn+hKRg}=H6Z%4LA zKw=85>Yedo>vC(ap5Nr{?0wG4y1Lfd!nC@^!SboKfUvx(l~(Do$aJJ@_9?aTpEpW+ z<+g_h8|Og-G=`>-O!)uHTl~yl5mb1@wX?YJ|!J zec9FQyO^HeY!US#r$CKW8LJySlb04^`OLjc@aGTGNJT`JZj+Y8nid#vpH*8bZt-ow z6QO6k0@#hQtLy%v6bFA_;s?;4NzZGwWN;-Ay5Z^;rmQo7YT0V!|qd02SN1$F;ZT-G{C#R8}d+Xw< z-kuh}^C~QPAU@*w!oB2f{#J4TemxaUq)>unnjtJNH#~moW22Gwn`8Mf;9-<+55HgL ziO_JYP_JVaKxc>?3Vo~m6?hY13S{RISBv~4byXsmTq4xQmzieA7LB+X$kU}Sr5LBb zXD8@VP_BD?c)3pE8G+pQh6k~El%zCfvdX0r0ugwF+YU{(+C_E(-##AT_^#t?wV{BT9>#4%e&8%k{OP=BwNUBc!s75mhyqAwpy3s;t1~R*qNVqeD@M8~Xw_qP130f~oJ4N5J{--EarTIVrJUqdAw=@U`JUEIc3=o)12VYVL#K1q^HbHSm5_}%TTqOQvLIV#*7 zo=q^jzQg=nR>>#ZYD3EU(O*|$vbZ$%kVfVD6w6xVCRT%TL>s*zK9^DV2^d;+Y>wwZQ`S!MTz zRL3h!k=X!BhGJ){-wJQd@ONJ3=b#@`=`Qc1NH^>fem2%u8@1Wf*dv#+B!FxbOjT^6 zUOIHy9PCHO*r6ZGbF-w6{-fxsfzZvNYxNjJDKzLX+Uk<6kv) zwP0I%p3~??+V?$_JmD&1JuG;iD~nl2J4GV8Ylv(~ri}*^Qa^?4_c)`i(4!dy7s6aQ zT&eno!kG$Ta>KJdOex6W*^5N>Th)RAU?(K()g`cMyukH5ovnx_@93=U*yJ`*)p{qO z+N3Y9@;UeotvO$URi*vsL)zQ;gw|@z$A+1-Qz6$KWclmMX1()>{aFU?`TEsOX6pE> z{`>I`J25WjBax$72F-I6bMt~XQE1IisvucI}?_A7#TUqE~o zK8`JmpdT%60%ywTqWWFuak2-dHJy-D{9fk^8v8GLlt6L_ULZPJct82`=Q)xif%xB^ z2~TWWa?43&5?KwM9Mg7sqx`3_vb2%iA@r-;bkV3LYu{^u9RA2@&D>Hu!1ZgM#OGcN z7(vn{Vitj$ee1z_OfMD~&`k8`(l`3jdtj8ZQN=MY{J_r3enOd$ukGQK%mMxn=HqraH9K#F_dDwJe9~dmhdM1p z`c!dLR5c;~+En8wH;D@}@~sH4D{jp8rO!Yp3A6_icJ347wZxl7W2vVcdkn*Qjzkn! zT|PNPcs=~6fj#5+^{-;QA!0|*@pPNL_y8q3NoF1Zc zrF2GC&Hhd^n4|bEx?=He*BpEWE^XqeKw%?wlTHgdd+B@E>)PQ zCy`r(gUhm=J*Tw~Yyea=*?@pV$h}RuL@7uYN>UKn~NJU!%Xs1NTCB+ai*o!O;At|0!)**c+_pH&~h;t7oA zlH@~SQ&S)3>d?htmLX-{CsJys+(zjwzkE#854J<#x@o6tBq52e3Sz51RZp z_o4#F%N6Q)eFJChl9Y8+>Uo>YEVjd4Z-@~8dl|j$?zh$!WTxo4@bbCVoR*>~_GkB3 zZQ2tROA?ftk{Z@XeK(6Pm9Ycy%%>e!rTa56A+AXYtw0;iomI{Z5z;(xY>Pj(<il_hE0lfeVa~c9^>mn!`mav zA}bpXS?Rzcn}w}xAExwCVg(^x@=mFwSFIlSktNe)L`1*yPqSr=#|IQQv{A7tk6J}v z_o905NLYEP4lj2q?n(hYL~FNZk4@w#EHi4;_*9!foET(Gnj<2+Ki+{Z`mcU+JG1ou z656s(t~yPgkH1aI`JDBar?@^eXbS#P0XWSEJ&e52i} zp{w^pdy~-ewh_FVwKcC_%#OKg*B(u7$9DjTl&@>&E0bS!aE?en61kXCx~3%Ps=hNY zX65#cTqU=)EWM#&@%>CSAOF;L>-UBlBO>FcrJF<36V$rB@tL*6+0e%_)3Hr$+T8Y z@z;?0%{ufHUK6Am_KoYP${8$3&Dgc#xMAtBC!m!zf*{75@47^+g~*?IUs8(VxQ zzppFbAGitn-=@5RFKZJMsqxg%Rs8h}sm3LVQ{ns2*JK(WgTQfWrFPk6jEDD-d7sOL zzk&=9!;xm+q#_$jH}jDJqAtu)b+O74%VZ8DM}89TA&FU06gYIY2LAHZuC9eLotBIR z%Un|-xrxL$!Bl0FkJA`gya*+v* z#*5Ujv76xaJ?Q9TvsFEj-IH#VN;iIpf+{Be&BSiEQ0njOj@t#gS;@3o#?8OwA z)|i1L!pPP|ZoGNUWCq1wN+z*6>P{pjHG z>Lzw-KnPyV4|e|bw(;qsu=lja5=HJ)A?nw=R)#o;7TkjW%Nko@^k+`h4B?irOL?6`asa>Fq( z7FOZCm9j_<;V~saE$wOg5@_oQpE>ob_jQxj^M-2+2aM+j4+jjzw&0F*rg=_eE)bsh z!c_T+MtHY#gc})Hkm{9%Ef%%nT-91)?mCUH>Dr@Tf4b+G35rGKog}iKo$BiqsF{!Y z8PqM&$6PX9k~H}+x?H;$26NGZSKSd!^nlY-8BiR$|NZE}|9$b#ptr;h0_Qo4f|$;Z zX!%BkCE3#>wemO14>id0m#ou-5dv~#8~z+l&+qSh+N8nO1d6TnhWAT12O}*X@+ZvC za4wtD1f}OjnvYFR2ELy_GQhUx?mOz)pv^50zt6q7^@8L;S~^KnTA(ey!x^3IeF4rw zvC22izjq0a)~mHwnqLN_KW> z&nj!_?UQ(xv>zofP6Xh-UZ!kRYv*ulOAmn)mva<*IEm(XG4B7pU=Zm-;{=2r$JOWQ z{GC)EV_K#wilaShRYb1huVacs$uhP3N8RmoxH{e}gznXdr{PSV^evp?j@~ii_9Ww=<(3 znGcleR8E2gM#xW_&5Wegibcmc9qXj$_XtHdlM08vhQG5)&?x&A5Z`CqaVkhE5-5h? zXD40;*Nl;idSCU;JnTe9KXXKuCplF9iDx7?^;rMWI_OsG?iq%!fsMa&t z8nejFOSYrmb8X2DG)vHWR|SvVflZrP+)vJe5#+P{Av*SSR`r$YN6RsG?ZsqX`yHF5 zUIy$rK+=q^mP0ai?J+qJ#^)2B((+n=&9TtYemkr4DkXIv=npyDemAP%#6XVN>`@v{ zI?0Dh3i1cu&{tpi)M{xNeqa9Cf7zH7x1pBnIU3GvlkXgTt#Tq^5 z@1|b7^aF>OlM{QxBP?yD$`lLr;;)wmbD8euCmY+s3yZb~I^3drPn^-t>@Fn_j|K5Fpo5UCsb;Ri7lSnHdDL-lE)e*&q`D zurLnePbc$4i!}F&;Xgk%v82Kj`pm4@?!6Tu{5KuAmSAHfdNj}fMMG!a;l%Uj5r-|T z-N<8@klPTh&`hsEchg4seR@b;&EQ|TT_BaKrMo#^D8-8TQ#~1nx5!0jF?h{$I6agM zb@j68>3V7ma>lIcPT8L~l+9l&ve&-8s*#tfD~zOjE;#e;R``RYmyjZO) z@ML}Jf(`MVgGDnk)|--bL0~4iVfpY{VAY8i!FZr+{%T|Gde3)dji%LLWtRB`*E$l& zZ4ub}NqG|jeeDJkzwTTz2u4Cb)uw=*cf)UA-oz9z@ibE0j$0)59Y`n@=+%{Snd|btOH`iEtge-2QN9 zPtDdO(W;6|5Odh(6@)2?hY6SyhdazKLs5pLfr^ z@h`oZC$O5|e8E57VHYUvMBDdNx|fXkheB9))^)IsVuPw0e8NrsKI>^suEgRk*XRu| zF&mYCj=oXx&>B9i)PpASYy!0*HLPfD#D2_IG_43zx3MV+9Dze1z9LS7SgJe>(zJdl z0PA$=Yb^}o7{CE>_{h>nq+iJ)P})D-oE{NnOmZ_063a8rJJ=MDvoT|D(N)UPO!D4W z+xYs(%!l|!KG$?HBKj(6mkM>W-&zC{ctrv01yGIX9^S>2CXF zY#l{qWDt!gYzcAPc>jfkYX0bt4`BJk}d@4Xxk+%xx0ls!03n_E`833l-b44)%;r)a2I1t6|r(+q0C@;{HfvGIE;#G>3oo#1EXl zXc0blyGzWp)G<#j!!xtSs`jSd0zX9bHYS=p1QDsVWnYckR8Q!+j{?sjr{L_uCuJYY zG9f(>|Hs1X)iqFJ1Q3)CPH;j_R9?SqcBjOKB-R<{r3Cyimud&_Uo~DEn|G~&q;W<> zRB|hwxOaIVVe;dLclI3G*fW*78A`xRbz;Gh7T9c-g^cy*a##ZAbbvgz^ z^RggFH*QV|T%%w5-5#3&gonuw3JNch|K&vP4z4&*zyY~hv$HX5UzqkZtBqZ420j$Z z4cuDtYZ%Zr^2+7J_1rq{X89T|0Bqha?Kuqi2x+#~A_dNp?jH%VYmNIV#&=G5{iNW! z&A%E1h@rcGI6wfT(pMJ8X5%qBb#&|gmbjtnL65zwcs5#tdI9%;!wyaJpp2{hcfj(Sj&5YuC|g!} zX@J_oB&(VaKv8;Yfz?k0$#f4g`KmqNqNkYbVqySMkUWNw2|}4|;Sdu7vS&mj!k*kA zFkoT;C-m7T_1}X3FbyNEBgjNIh5Vh#@VJ%`^m-xn zWE>qZR~`G~^@kbO_V)d6N@DjBVg!OdM?$SF_U(7=zHbN2LU$v{ACzA5J84PbWMnXH zR^56ZysbSQe!Rgh)S<|(Uh&E8hcAd;L&i5qgWeEUj|>)TmcxowJ5mq&J_~;p5CD(g zAMCl?$=It`RLmeE4ZnOCgA+8~dw_SN&@I!cNYS#WYWqQmX_f#GtP)6&-Rw1j_!$N# z#HWprdw55Jjs$ES%A56@Ddh5YLQ>yF+UTa3;rF-X$8-tp^X>^?R3?q^m@FTm)%`n< zpiPr?!jhq~u_W10D)VNQ=CU_m+Ku_GPsrF9%b4$VSFdKbN&g9gHLFBM3^v$(#z=LT6KZOBS&v?b=s%kF*MANFzIkF+3x1vdOmoU3>_Yk-t8$U@0Y`XGy%la?C|--Sc}8SRNkZ7fLVJ3 zRNY|TWvkVF7`eI|73OfwJtxA-eJaOt0vs8`F5uWP|}W=Dh3ms5dc`k{~+)8|U& z^j9EVUbYl(QqBI;y)^4#jB^bfLR(fw$jS72Sl?Js-D45>~Y$Phf3um<2;dELvC}Du(B)dmpfjn+5GqHIIq{Y zLD(SS>(PA}n1c3*k$PQn+){eXQevE${B`i~84KF@Qq2|k9+HwxTy@Q#F}1-r=9uMm zkYJcx(@hoqo5ogVV5T4ZtI+;nLc(Tc`vc#G-|p2$;G#C3YVXcY(@g2077lHL$fwni z+5p6n!M3zGFF^qgpQ1g-BbHyw|ukbCY2p5#5&ypIvRTPOC3pIFdLczB4M5NS|oy=GZD`#mR@ z!ivzGf+wckFxKbX`qGE9eLDBT_>lQacWO`S!S7UVJi0a)!PBluRShq5VSh7u&zG8i z=*6B;5#!=9ukiTRDk_U6nZp?-*UkUwVBiGRuK|?=;=9U72@Xmn6r8*?0R%} zKEmbS+$N*b9h7pG;oJ9Ge|{xY#a>I4!{@bwH*KCu<;ra9_7?akPpkmYk?pQo6L9#{ zsVg6EQXD;hi~0Xz0gy6cMAGB-3lW;x1@V^ltfRy(5v*<$hv-mt9knz{ls~i7w+&|d zq{+c|>9R!x-`gdWmf(L6lwKB9pcOijo^_`bKEl;2vD=^Tx{vBN0(7_?B5&50|11zH z(6}!=Ni|HapUO%0(hWf+0$-WRL`nMZZAw&XQMvl#4dObxpA@LvGL-Z0 zpEx(Y9r8XV8k-$^*xT0OE!1gryY|7;CHUd{KdUQc7?MK|Z>y70IMB=SNbQ7%vhp2tg<$5PhJ1}`Z! z0=n%|lLb=R?nM9T1Y*a;)ysoIjc3kS&Q%M}RXnZ!C_)O!qakCq-L3JZri_Bz#A6t$ zO?wlWkxo!zxtDvw&2-N`(51 z)ZXb4$l`}_ApPuH*&o*MSF{>xr{Q)s(`h#;MhD3h2kb@$oA*<&k9&5b(oXZE&|Nbl zzSP=H3h|cx__<4c0u{D|KPLl(V}bQHwaLW|$F1u}I(LXnZ}VN;=6e_}zgRRfzL}hy z_@K>3v4QA(Fw$=Meq7vuR(4^!ZK>@+Xj(pu#n+l%8K$$mjxb1l?+SNDtD8IV3M+{S zed3z;@-u);A@m8<31>k|`4#Sy_aU9boP+OiYvyfjtky$O%&?pAlU<+GPXcq*0-hbu zJ++*x0`pEt#C;iP3lp>7#)dJ3rPXhq4(6FrRiBJ3Xg*j7oA_QFtFlj<~oPRUx9;YHuf`h zRo^QXjksUBRB$VbiI=DQ)DYjI>zFIMxk(x;^Iiav6{+%M$#qi~W)v|9C{&(#2t3&p zIbeSNBOu8+`9n8h3drN8#HFRhB*r0SX~sk%qSsANkyAh` zpi^Pqw@(s56Ozp5$ZY5w8Vxla8k;=#`Gxr@H7~};DswiX`Sknw?$5dQ2N7Z_M@||ifFp=PA6C+a?hPp*sUe&Wa8>P z?%)g5@xEwDgU49eSot@MPY>un_eX7@cecF11r=&@k95&!(N~MWBkATCVxCeNR7>J# z;(qN7RDRuh1ZdX20q@lysInq3dewU4)tVGKe)djIi;807$mwA7QLNp~YKF`0{(Gy@ z;euR!TuIy{*ozN8yiv^<$d{CV{~T0v+0D(TJP>83K7G93Zf&-7Y<=14Y-i zdXD)YZ~t|Eu%GQcmY$uN6TN9J8?KJ^85=}X9#|e3EK?q^8ym!%M#fTrZ}s0FsYh%1 z;l2qHHavUFZ4dwqW@Zw0y8{NsQB8Ky-l3Ow=0>zgJ;> z+fB@T{1==7FLDI`uojJIFavuL|SKi`a~ja+Z&AGuB$>w315TBzr`J1e!g~ z3$FJf%oY}|lNHU2OEvt&V>M_lqIbq;gVjbkf|Oo+E~e&`Jz-v=pdavcVTfbrOl{!p z&3(H|)&NRWoE87_dl}tY8s%mU3=TpDG!TKK8g~|vH zcuNcT9eTi1vM~;1{IvRNA1gjjcXiK5VxlW4$o^{)ZlTVcCA=sl<2LUKyFQT3OwCKS zt>=ALkxNHW)ap#7LX=9tT4cf2O@G94B-sAG^l!=&-{gNIOLl$-C_g&8X^Y)>(gaQt zswg`3OUUr(%GPn~DD=@{mIzRo;<6Ygtv!5~eot|NmUh%_gX3t6yVYyi9EI`zmT@c1(rTY)@)mWcw)B{ZW+*n<^z&WdGt2=kd>< zej=e{9_p8^_I0%}18mf%X-g#Ic9$GWjBxrPpf{xO_bIL=cz=xU#9+>}19RZI9<_5GlxSiecj3?E2pInD!u z*-5XgrhDSQHJYn%wF5YS#aikdGH{V#vc1d%nKU(yG!+P=+q0jC-`f;V!6pri^ISOueK3<&E!8V>@b_9Szlklb?A7S8xF2)my<6EuKAGnbyPbQtGg@D! z`ea1DdTbE5R!qmO!+l&BB#nP=QULD6nasLHCjke!&*(05@5re?#o2xbTc=f?4E5Q8 zS_^ZbP%gUnyqStk9gh3$LqPC)?!=d!{OG&$(Eh+7sl6=B!mPGcv6791Pn_C03Kj!MGJAt-D$FIN@KS{sNC^ks3ZT0W z(_opYQH^V9lU}xQ?44Ew%6NCZC&3d?21XiQh5L48@p@y=dByUE2f3Q>qIyf;HyIk+ zKA~crrVR}5_ZHKHB9(Wz!=woHAAAp6bFIvvmt1b1A8!Wn3veqZhE-6nsXjc%X;?&oBw1O z2-UV@TdE%AED=X2Tp#7hoKNyCfsJMZGn+2sX?Tlr;MRa<2Xg?RzQw9~dvj2NEY2pt zflzTfmzQmfp)=uLrNHc)>;BV@-^iS9P1@z-U8uenVLK;C>!47IiuHGei#wRkpva8TUN$A59thL@<)%RQQHC*9^ggh3 zCGgDUCCbI6LH#uQCjBI|%C?4-9?Ugmz<1;A;p2U}k+sT=!^!VJ&9*#Du(qFZ zX>8}@6Zetx^ElV-@%8QOz^>ifQ75!F-Hnc&pFIX0&)+2r8Ppze$pooezEjCqx=@ww zC!g8(IhUmFNVRcRuH&LWcUOKr71kzu3LN!=LOV1?)1Dou+uf{-DK!yEPao&B3b`!b zm^Xgg90%K#>Dt5ggz~Tz&b{0Z)(`(*dvEy{)fc@D4=R-Da+mbPTdIPuE&eRn zZ}A>ZS7}}JN{8;!z`t|`x(nC(o7JnVO@OY<_<;kwMlWQ2V6%)0-5}d=EL)y=(qC;c zJsoOr^NI$#KAo;WN`dEnbJ^yfDoQcIQTdpSm{>{dlz@DG&+KIK-kK5eNL#G_9X-n z)eKCaeY5Z|i0bSO>|IalVLYh!Ancp^HfeR~`&H5}xLihERT^7nUegD9 zdK@#x`i>V{x1E$(1Cf2{;uPD`xtRfLXJ^C?38g&0?<|j~fCT~4eH#8_+D`?zkjGO1 zrn4$v8~r@n8tt9>eW(RBqo=t|Qi5CgW^4Dsvu?3wK&F>GHHp}~zW#WfNi9(XpEjz$ zb)COF<(^wby5Q7Wu*k7sSd{k(DDwSS*n2JR=?z2*!<(*eafS!6}sm`F0UiLw_l z>&0_7{N=IPx>72>1$;#PHqGT-ys#@t8Wq9`6W*(iPdSE4O)l_#T*_T(bn7`Qvta~mB^T?(FqkS_z~?=E~kv}+#0o{@647I-;7 z;J!mfhyX;;np4aTQLtx-2QnXSEe0!dAOlx*9zS$|0PbPGs>Timd=5xlp1O225_`aLGjZDmL4v*FcGQ|U%-o&h{>GXD?lscs{;{uU^S4Q5R)pwWY zZ2$n_CRjd$;%fF!`cy}0Iiog~MujK#c={+qH$Wm|v(-G+?iZVZ_Yx{-aA_2p$E%ab zCUOwfvbnwBi7Fim;&?>K_30sNUB-U23-U>lyX1+z@`F8>b*3)EM|wt{umXZX zz^Q}~B&$!cloN@(Kw$LB1qD2GK7!5%MZqpMQ{DCk*W~4BVk2;#f}b)q+3IZN_c62m zdvzRBuq?$*>}ywi0zx^f4ynM`E8z!}2{8xcA_|7vN8vA6j!A@-U-jtMCE(XiTMP>X1>LiLTT7;^Up9F1QjhH>3Oc{&>awRlcrir(5 z8l220$`=<{C8&U-ioi(v=J}9Q7qe?E-Dgvo%cmeq+ZS$hn?4KuEF|N70_%0v%2Bx? zavK%{weg_r8*Jq4fLwchTG95bsx!$1K9phqWF{HISQ-8JBJEH6W}-&lx6J2I+3iFm z7pJwJ&h($?8D?iP{Fby}QEtb5VV{^QqI-8G;9xIKlVpFL<+ADK4LP23(uP^I-u2sg z5YwAIMxMwZsP{cFxLQDhE|?_JCCTF8gTUaWX2L`N_GGP=dOPs6M!h=yX8V1VA_UqI z_AH1ba`rv4hSAx1(|q}pyGpunv5rZqTufel>5ve;v51 zg$*+hL81ro+RumYt>#6UX+zu|oR|q{Mz;;N5M?m{x5^9{)!u+ymUYV}-=SYv%%l|m zqO28|V%ep~+@0TCj!sD(7H z{=Wa;AAxNue}LW_e?|GRo|BIvRWHcf%_f?T+~^pxwP5+IN8?`i=A z(wFs`T$ma~!B^7J_Do=&ctnEq|7Iz%;J#KMxEdzb%sGEsj!L zm5~|YU;($2aQeh_Saynkin;yUThR{d#DBCa2Kk-B!ZFRGRZuy1OD{IYyv8|yF3n8_ z_?M6}5%rK?RFRl9#fjiim4Dp&H(M4f38UH;v4RLvsUC-6VFMzZ6kxSNjM0G46UF(b z712kBNow_NxQr?<4*FL5sJ+(SPu=zUPYWs&gW`mt{9G~8=s z5r0v8Dx`~mKO}zCQ|KdsGzSjYRE;Gs!~E3_l1bT2W-nL<+&5JRnT_dS2K0HPLwP#? zM^(n@KsHrpYet?k?frCkEdiYS{*WuPfGyup`*1thC^Zb46ZJ5|S$Hb#v)uC=N~5)P zQy;Fx0XD(0p}*HbQ8hu@>Rq;ecaQ3pvX;6x@x-;NBI)oounXx}Tc{O|oMFs&dWg4S z@1DSQn3TN7TA@4Rj1wS2gr>dn5laek392#I9wb+QqWW*&Z2SY9FsP`Q<5}1#p75Ae z@eon9mRB|qKWp&dJBUa>kn2bxd=gL{`-(4`oSF79bbFRM%6v*PAUA6 zUdgjXW*}*Ys{Rfjz$K+L05;7%j3AlotiY>fYO{yNfrXE4bu^CwiEedszpQK1IT&k} zuzUDZ;o@JN$V4wxYI)YkBF83*`UE#t_2vV5gi?P&IZ@;XIsfW}iPL~b`hP$nN_X^l z*U;c|9wE6jiTHbzzTwA*X`?J%ghear$+&lQFGV%D)YS?QsQz@eJS**<-=Lz!FTi!@ zq1W+z%0A(X`)~IL)RfwZsyHUTTct}O>JPt1$X%dr6mn?g=xAt)5qCCz9r1mFoa{<> z4hU{h%0+#9SGV_jh`90l&>risHG z&*xNP$N{suv$i_@(9NrU_ z$YdNsB`Qk3++JhDv=L6Q-QBxV^-N|Y(x6QsuWdXc#cVyysfMC4yLobFrs^1t&T8|Q zyw<=fkmsTys-z9!|E+T4>zZ6WRRmf{`has=xqq)CJ-#=gNTje0QkQwp7)*3fuYFsY zXW?1R!hF=V6E`$;-Ms!!y5&biyrc%3`pPxT4&yod{^4DWmoVeT0LABGUM+3w(v0z> z<(|V0M{%NUPjR^G%jUl`m<}yul@MB6$4bVjD*}ZRs^Two=XLXwMv*8ZcDiNnLs@Hq z@t3u{57IygpUe@!6O3Vu3FPt_?BC=pA@6rgU#TOpwzy4J${gr>o z&L@*2h|(DDT~={E|NC^yjww;hx+ym{)RN6(Givn5w+dH-o|1*6q|4ynk6qjQ0UNSM zrLJEbe=DMu{%;y{#X}Mf|5t zgOB*~5$$-Ri+s#vQ0KNnPXvg6y#~Img+Sk%Qbo&xN^V8sM3)Rqv@^&xY79oDVc_R@n0yPQoh`ggsQ%rX45cW!G zX02_l^Os-4(1I}kksN_67l}$}u2EYH_h0gk#Ftl0 zc(nG56C}RwC2CFM>nF4zUT-PArLsvMAgjRy2|;%uJN~Ld_M!)AUBChei(>zfNr*{lkk=|Z{IJHTBzCZQ|Cmwe*Zt+B$=|g6G}FfU#Jl0f&t-h!y^86D+mGO%n4FMl zF29nf$Rn-qPU9&5jiE!rGS_`h2~k+sX^=rlB>MO5DP$CS zjyC)VckP^7K^Acta_zhSw=!gzDQJ6t`!QvtX7e|KV_B-t(SP&y^_wqBq_KXp$9_cH zAd1_k>dB)|HxpYfnSaQbTsxJISa>6`Yhr9V}AvnG#$!F|38y5I$DEml&W!TH9 zl_E0w-dm>`OiM8~m?oSMd)laY`IGUkxpiMEuu%HFDcw@3oR$sd*}gZ%TmV-0-) zQ;7#hAsUR6XMZ6K_v*9@o+>MUVi2zH8~tCk0D_-dui6ZO^qZe}!fG zpwYYRe(L7&{1AKhKx)O2E>lxz=ZV*0i`ag|ip;$YATaY20|ON^Ko!+|N-+PEnu#F~ z14U#&aWW@7ip}@^!_d3Sn0MEqLPCXN_D5IIvee9$Z-aDp-t0p**LsDDp&?dC9&&Zj zsOYgLOKyIyt~S9|j$`pB3_%&k7Y@(<%706;i3y0$r_%ABff;N0+1UOKvMit6c*A2O zzS1=~ThkP`yDu%>jTzQAXmZEBO7-Q*6T!(?)kPM<6cozm)1%acB~P_zwLhi)3f#Qg zFCH14q*Vr@DJy4Oz01QI6bx;1wxTZvuVbTQ{Bo01!RV)+P@OZaoAxC~v0-Bnn`b^h zgP)?L=Vdn90Qo;xK_oI6={P^Ndd z#(vn6Fd2DI$@8~1ltJs#_0<{%CCIvaU0iK%Um8V=akBgDQ_iiRu~&86<9!t3;l#va zg1?nOJw{$gf`+3WVgPNaH9Bbygewpd4Pr#8C7NyEnT{Uf9;*4&bz-IW*{#RBgQ zf}#!u#A@_}p!<|qx&FMHl6Jku>e3x0Xw1++f$4b#vsT+DxCAnGo@8S)nQNcHvhD6F z&||4@=OWI1x3@~tqikY?vI?yC%`!xdYD9O)rnLs}=gzU(OUh38TK_ho`EAlNdlXTD zOy3bq41O8zV`86M;D|sp$BD{bnf^uV+ba7|LLr|2lT|p-NkPiOMM3(v_?O`U)jtWY zi&r7z#kURKDiHBwA`;WZpbQbXmoB3r0;XbtYaXh?NED|zr4)~Y8#a{v0`VFe*mO!T zcCDTs4^$FS)&1>Q7tcYH_H1iaAX>-{)B;HlDcck{gVf1sxDm%a{IxpO%-W;qSC{@yW85A0x^y0MWYU zGs!@c8d!>2Mz3}f9;(DO#}=I$*JNi^F=Wz>kZ0NP7k@tMMfs_t(Uo%Ipeg zp}&isxgKunua7KtTy0JCcJl#oi^=HjVoMxPcSb3k>*wAsxUNN@rK{lM0giOr&^1EM ztWNF02Bp-!Z&-WE?TKD6i*@9bd`zzJy$`*(#Y^Kl7|R*N#RTC^_P754+8#fiY*xa0JPkSW_z3y8UHAgSBMzr0otKwX1rtdMV!Z_s3+x5guOZ;a;`h$*RxW zM-X=gP+iA|reIJ8 z;2bP;+xC-Q4&1m7ApR1*qW&CxKOAlM@6Ft`{$cdk1g$9!rQ6SeoqfCLJ}hS`@oSCS zcm4o~N{NQV)1m24ZM<=Je_=}%T;E>N-zsf>GdMpP0DKh+$-v1B%@oC|>Yka!NdFiX z>UA9Bj}Ea;4rf`di6C^(^p(oHt->Q z#!AcodVigtd*T%buUqQY|8|JHxjbcal4k9!F0Nch9~JvEc1sHaV?@`l9zZtUf_+k5 z7<9ZT!)Jx0$FaP3IId-EuH^D!sXW`;zLPa!evj(6nN*b=&5uvwg3)d0#8J+dSKq*I zGIjn+cnD`NMxNi?EECk^{q(1*v#~V))RO76EzD>i9%}FJOBI0Hf`ijNDtsZw*Vy)+ zXhC}SlYD-I-$3TSi9`kcg&Ox{xM|*bm}(jL=Uq6vZ`6*U>Yv!~z{SF)6Q3s}siiTB zv$abJ_Sb^mi-SKz{3uH0UvT3H*RM$6rhff^hVux#WVi{m*EM1l)rOaussnuhapsMy zd{RD7mF~AINNQW0roTHwZ6D?raDwbqlJ zrJAVO>yCO!#c|z_%a$Y0D0Z2*6e3UE@vKs-Sbx2_e&nf}vy^%B=R?W#DK9hrnA1>^ zf1=(z)@d~GoY;If7?5DVhzpwGHo;fc{$QIMu)3md&^a6@A&OvN*b>L{_zH29@_23% zXF9^gp#OF4%_?A2V0}^-qRU|8nG#T>_)|KoxE)ky^;yn&6Rc5k$iAw!1s*A#6<` z)4P*ZC$v+@bPbB5`{xG&<&pUnlU34Y4lM13@b~YiwsT3MSnRto^ysa0Jc%WeKrZ(m z216W_Llsnjo61A5L|ysLfaMY}HP1@vBTKDt?XoZ(c)6}JB?Am5YXTBJVn%X#N8tN= zjT6A*^50T?GMXs7@}zjSemBkRFxN(7v8VXti&!= z4Q~$YU&Ow7I-UmQ9%b)s&fJXYhUsO6ck=M&+YQ*foVQTYGAK~N5)PdHZ)2(Hx#`ir|?x<2DM7!!tCT#R;Rw%yk@l()uX0_XIJ+uUUIMUz-}j#!1)W6L5QAss~cfC({JKU-PRv&x&R7HXSjznpKL z`HcAV3j2HAaX}rCDzAbj2$jT=lR2nuTPdDUMiLMn>kVDbHem!_ycrIggfW=iBfzko zyc+okC9n3R`khq5hdTerH#`w2!hTTI9f8-0MTNIMMsccHuaJ_9W4^mL?~f@sb@1iqM(U^&J&aTA zi{~X5wS|CfejKbk&sQ@yv0ZN-BcGMH+mJwgvp+TQPCoz5+qgqJW$ec(Ul{@ylF=a& zkV-J&u;JR{lwWPT#r(f|oxwRC>+-s>X{VA%Z0v6rop&ND%7%XB*ZP352Ga?6hy-)D z66BolRrZ_6<5^!3-tpbOjF#PGC{xb+uehdpl5mKr1X7=aZlxYb!a`+9cF-XP&jxWB zXdKH~XlPBn4&nLztv>?jJ@7IVRbH2Tl6QMBb)9V_D5&8O4{+O1cK##LBAp^CZO_!v zg{w@lucL6-JV~#RFeEWQBWr){_MPC zCA3dYTNMPo;|0rl_8HaV>FWgzWwv9lxX|jEA(wX61h}~O$x41{7nDcrumhFlM7&wg zZ-O612x`F2;3}&+-=*G?HxIrc&nFl$O1xT*4J>YMZ2Kh7`?U8DS@n$19@@mp3b2hd zhp0?wiFxmB%&B^I-SE8Pr@t7U5yFHC)7SXao&pCV!OS6iPh#Rt&n~89`Mc}R=4-XI z^pQh@65^bcOPxL!FpEIUEJpdbsqJa8PkN1{Mc;a5sGks@y-L&}?VVC7D-(HICQo^) z$yt;_L9OwYk%YajW%J4a0i=Z&Y*%La8kSvLj8??X-&7S9*}TBF%iemZsAgem`EK$$ zd)`3!#>KDLGS$jMDo2l{s8!152si#6$-?XTM#KTZRzUwtnT^?CQycBmHw+2@MfnV&Om z%2fqL#RM785g9iJ8)h;VKcO#subY}&>?9bX4<-k}Vl{Ych3(G9E8EL*pExGHS)m=q zX_^$XX9nujaGWgo^Mzq$aPMA=;!Yg|a0T zHgm7Pw^<%<`R&ZE&Z;wXsd?OFh{l~&@Q8`f|D28q%aaR-?78Scl^zg4qbkHr z@Wm*opS57>wkgZmzY4f2QjfgJZZA=u-|2As^~$n;nS+-%(DmdBR9MD9Cpg!LADl*=C9A0Y zK^F0=U z0OLm`5NT0OlHwMOe&jX+k_58$w%l&NOt}wJ?*(cALH|$y#E+wZv!TY75xryJ^Mv|2 z!N}!0u(@j*EQ3=blyRFb#?z!HU)jEo;OP{eo33SXLcQPBA74aU;fL9tjPC}6?9eS( z((A^Yax*_UUB5fKmbulBx&5Vu01{*f6oa!Sysr_!rxa48Npyd=+*JV}s8)g*+RSj; zGUOsteOa*ZYQPax&4Ms#Os?>G?BIQgeP(;CqH-DsJIUfRfEGn%L3m{JgkAtu+j}*P zQ;STu5A-rIOTxo~NL=0m>{=3rY=tW&}8ZO{I5M+ z6!>mfXt;P7F*wOnzAnmzNz1G>SSx@--rJ3fzB>j-O4IQfd?!-9?Lf;cIPK~_2?zr& zhqDcphs;T0z}wuP-}O|N%2^LAR#%QzQI@|hztGk4M$L!^LQiZBn_GK!qMlHO)9;3e zkVAsM;ug|d4Pb3;zp?*qtvsruQR~dNrNGVHxup^C2tJ@z8Ix@MB)65fumuA7X$M?P ztK?Y3X0Bv<1pcvXuTTX_s@c_b`YnDuu)L+v#6|0yjW?s=b9r~}L2Q%K;=6RF-1@JR zfyAy};=HJ8;LAvf=PNax7G=Aj0eBDs@^wL98n=+h0{xx;!B8TVJc{aei!z1T zhk1l_2H`o(ou9t{IxJ^qrSSH1{gykM7!@UY^Ih<$CoK>}eI*%zM#Rf4kOf@ZsO`e3 zxyc5J=jOt%VnJ#@m71&q4-z~g5x6pR_WCJaTtvyoT;QdA9&5bR^yj8b4(pu1K2Ylm z;c}`xcZ97uZ1puewfKRvgL(U|4W)l9DHJ>nDDQCRVC7?d&J9rf22MRbBxvuJvPlX; z<1zirA(qR+(x>%n3eF$i8Ii8fXF7ElyDtQoXNj8{;y|p)XNM=fTS+a9AP{$M;AVbG zu*>mNjkC0v<}4Upv%*qvJ5S({fo2O{SXNXhM!tHIa;(?FcC!NlrtviKndqgi?d z;F&_VdH`X7&p|Fv?%v)#=yVb|2|0q#?pVEp53cdgOAzX5YdagjyB^Qf zq$|?r<>tnAnPXqGP1$>TcxXs39h?mhtHQ7D>Q5MGYg?}+Y`RZZ6st3}ACW+&!~ZqB zg&g7X1VKbJQ?tIlzI-5Xxx!aa#-7^OKQJ&;(?@_7#FwpeTY(_)Wm$mTsL8&m_#W#@ z-QLpDw{CE7$FB4K@$uKj+s+;{&9Wpb=dG`;QT*Y`9B{I?H?P$3m*YxK%gnT*p8GPz zQd?H`|A&Krq{h)A#~P#B+>D0o}P z+hxub*Y#t>23fLQCq#h(sUrFB@D;Zjhi&Os(%`Ns2Dpu*qjF;O>XDBp4x|duWpAH` z*K0xN<>@*348GG9$FPMbe+0==(*D<%7R)*wRcZMg)em}grI%Y{ML;1eWKS;vd3Amy zP2;lJ8aib^?()RI-*U#2D_MP{Pg7G)T!MBDRg?Eljm_i$R8wzf8;W3Jkd7JsdO7lvFymrL5} z>S{|xeAIHj`wo5ErNM-Oj!wZI=cr!Jnj3Ft>Jx+x_%~aRs#j)eDz~uQOyf;gJLt)6 z9K+eDuE{+rxL#1eSc&$-jmM|1zAd?^)u=9j9Fk?0{7kD4`eNWHAt8YRez@u?h;Shx zAwf@$S{499jNDrl=oFJabRIU7hVGop%Wx>P+$SIqqJ0+jaQLGb}7D8~6!E%0F1y*^B0HA41s zQw+wVt7M4C(Z>mS`XRR-31dU*UUMZY=8g39^dNDIk9`PwDkvDF!9s;&JQCS_(pOQ8 zm7`MQVC0eYGA^2hCQMq=Ndp;H-qAej5TyeKkKM3gVU!Y#YF{iw@|4l&GgnNihtN}J z>mP|#TEvN9CfO=EoHm$1B#vzRNjR)L=pKZrGmQx-5ASDWtdH5}6w5sl+I+D)EYCbs z15-CDh8HGNu+7wr&1ia@kKNAX8{Bul%*O(wK7Yn<^ifby01H7;7&9p077nnjg?>>j zP~W#K-EM*+yPure>5PMFQsOXa?##-{sbay?-!%@R&twP>lyX$p-Uf?NgdvuZx#27S zV+oECrwVZSo1fA&*-*n#sD`CQ8bz#Y9MydTbW5G_I0hAI+GNE-f!?DAeKtg^He|4T zZEfvA*zd!`3L$vR!1`mA75l$?QxZ=J>W42qxQ{gr7zMXlq5^mo)B~CRiU6C;M=gvF zNdfTgsebQK3$h=wjl<|H%ll5?z8R)K)c2?t=%j`2JJbJTM1~$|kLkrL(sL&(E`PwT zp7!^c`3Mc(lKGip)vvBOV?0yiFtcS<0)r8Uph+;OF*C5SvKDyBJ^DSW@EdBAHO4yn z-eBO*pENNBcvF)y@NNIzzkY98Q5}`M2OUqwNH$5fk+ybze+Dp8`ufFQvIrN$CO@Cg zG%N_0<7e`swiZF8?1rPl%uTn}t2NW7wDgmE-=zbF+R?W1bE8;*@zN)Iz#QTu-sS zSr|B7PEZpZ{fb+w?`UDsp4OG~{Miuz%JO+5czAf05k@pINtu}w$^91>&@7LkCp-zj znXa!R!}LAox2tJNOG{JaG>wZ?3r2zOZTjsoyTzw6(%LF1l+LHJGcYi)9e0zlZs1X^ zbj0>9>UB@W@pBjqcJ!7CB9wVfwdj*!=+|MMz-WLpkP6W(Tq>CB)1PRx9nXb#A2n=E zq38OE!RBL+Pu!onz0zaQDo2w@{3diyg8j`1ET!3>CMKUvlMCB;j2U!a6}T!rV2P94 z-`LsNecl)2=eO#gaQZ~f2bLrBoi2Uc+vToN%O9!*DVeEbomVN3a|63Iv}Sll;9Iu! z;H4GFYGNRDOdmjm=D`-W<2!w$+l#PDak_>w8ZlOoV$Y{nnXSrcg~P(eR`}6^rAO69 z{X?sXLH4+aMrSUS;9o2QRPsyz?8LxL#WgNoaI&aG&s$312-H7oAZ0!MY3f{T&1zJ( zMtasJ@H;w;cnPN`CkF{HfqTb-kIE&l`v7al>!h|nxj;`{(N|Skw<@hNo>-&>>QDEA z9cI?*$GW@aJ$ztI?{p<{*Oq^l7Qs}vi|)+zt2YNCDYp&gl5}Fz2G;GytGn6@aMn`Q z^KPBAU?MSO5F9xVX{AY4%pKVTjy;7}^FnGpXWiIgW;`>)Q5h9YO-*HG#^Y{2 z8Hs(Cq@<*M{K&Bu*Hr)Rt6C z71ypNSiIH4hwMsJ(gsnTFBqasI8*z!K7|6OD4#e?}AR!RS zrQw7w01UudD)i!+@OZ4qic__vm%uA74kH!TB%F(NAP{jC%Y@=}j|- z7QmXX>*Cf?7!s#61Q>&r|Jych*KKjT^o=TVVvqB|gb3``+Mq|#F!+`{^+#A8#RM|R ztxseCueef2jV)0jZ=@FkE2uwDmmYZ@>C|*iU)F6dLS>|{udkzHbKepiBhqDFIFLA5 z(^yuPHJ4>K#~CkQaJpw_Uo%~Zb*e-k2VUIKe5CzMDgQAs*tG&L6M8k$;PXv8{by-% zC~~+iWcS6LBG1Nl8uENX$Sh5|ax?H1#W%R>Dn+&|V|Y$%FqUR_X+G~?a0g!-8^+W= zERy86XkY41ps8STlai3A3*P`wA5avIST0m=cDBBf($OvfUf!`Q%}v>+kI$Z45-NNkQFpMgkWs?)G=M`P;21~b z+^BW=ExKh^K*#y0K-$Hn$58tA^oJYsz!8PCR_V4OqvMF)s*m9^5!1P!Vdm?J$0K5E zx&{LoqV>lome&?@q>%gIf5eU=u$)5IQguU4`OqPC;9$j|G7hUoEtr|bOih1J@7Pk2 zV3Zo_tyr?+*2o0@QbtF#eqXVvo}QkavqED=qJ<7XAU3D{qs?YCG1j?ceGNKdna$}Y zH;^D@vjpgvuL{qAZu_zez+Do;Ahg4YXfcnAkB@I5WA`sv7J!ax2W{6~F!8d=7ydLw`2BVl~VAVDvH6f|ozI$JB1I$R0zIj*&7-SHq?0aHM=;A?-U z$Ux7k>l%dy2+91MJ-m<$wqd8WwSw`9f>CatSrl&`8Yt&biGzMy%ZV2Ew=Nxc8y8K# z4AHUF^(wgad=F}>t9h}uFeC&lxX4Anh-D7&lVN^Q&P(RK3$Z2!9bV+RU2;+CtZ{3y zyZ^1ol!)%_J9!t}P-9H@>bWa``n!7yFF9chf6KNyvn`XgMSws_rjwUVQp!hIQ>kH0 z);oYN73s(PHEOKK!9iw{z^?*OTwGktW1R+P0mu}TEkdS4Eaf1J53G}~)>55%6S}-b zntuMAJUfDS=h>3*Pu(uILE{8Xrg+?7YbD2{r6tp4VfwhP_V#u?GQi~)w z(|HC!DsUn>IXNJ1Fc?ac&l%o4K0M?CCqHJDfTIHL3t9I3U_$FL=ep31_Y{nZ8(8-^ z`hFcr6^(f8bq;>0s_JW>B_)EBm|88$+@_&g0XNKEg3DbUN98bRVzX_zN-1`sy4yMQc&jbQb*}L=o7%hvpH=wJ7?AyO1 zM7=^m%&tqHIRNbb#)C531PcqUWOJ^rrdv8gQ2nhbU` objects | DDM account information | + +-----------+-----------+--------------------------------------------------------------------------------+-------------------------+ + +.. _ddm_07_0001__request_createusersinfo: + +.. table:: **Table 4** CreateUsersInfo + + +-----------------+-----------------+------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+==========================================================================================+===============================================================================================================================+ + | name | Yes | String | Username of the DDM account, which: | + | | | | | + | | | | - Can include 1 to 32 characters. | + | | | | - Must start with a letter. | + | | | | - Can contain only letters, digits, and underscores (_). | + | | | | | + | | | | Minimum length: 1 character | + | | | | | + | | | | Maximum length: 32 characters | + +-----------------+-----------------+------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------+ + | password | Yes | String | DDM account password | + +-----------------+-----------------+------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------+ + | base_authority | Yes | Array of strings | Basic permissions of the DDM account. | + | | | | | + | | | | The value can be **CREATE**, **DROP**, **ALTER**, **INDEX**, **INSERT**, **DELETE**, **UPDATE**, or **SELECT**. | + | | | | | + | | | | Enumerated values: | + | | | | | + | | | | - **CREATE** | + | | | | - **DROP** | + | | | | - **ALTER** | + | | | | - **INDEX** | + | | | | - **INSERT** | + | | | | - **DELETE** | + | | | | - **UPDATE** | + | | | | - **SELECT** | + +-----------------+-----------------+------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------+ + | description | No | String | Description of the DDM account, which cannot exceed 256 characters. It is left blank by default. | + | | | | | + | | | | Maximum length: 256 characters | + +-----------------+-----------------+------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------+ + | databases | No | Array of :ref:`CreateUsersDatabases ` objects | Associated schemas. The **databases** field is optional. You can create a DDM account without associating it with any schema. | + +-----------------+-----------------+------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------+ + +.. _ddm_07_0001__request_createusersdatabases: + +.. table:: **Table 5** CreateUsersDatabases + + ========= ========= ====== ============================= + Parameter Mandatory Type Description + ========= ========= ====== ============================= + name Yes String Name of the associated schema + ========= ========= ====== ============================= + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 6** Response body parameters + + +-----------+-------------------------------------------------------------------------------------------------------+-------------------------+ + | Parameter | Type | Description | + +===========+=======================================================================================================+=========================+ + | users | Array of :ref:`CreateUsersDetailResponses ` objects | DDM account information | + +-----------+-------------------------------------------------------------------------------------------------------+-------------------------+ + +.. _ddm_07_0001__response_createusersdetailresponses: + +.. table:: **Table 7** CreateUsersDetailResponses + + ========= ====== =========================== + Parameter Type Description + ========= ====== =========================== + name String Username of the DDM account + ========= ====== =========================== + +**Status code: 400** + +.. table:: **Table 8** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +**Status code: 500** + +.. table:: **Table 9** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +Example Request +--------------- + +.. code-block:: text + + POST https://{endpoint}/v1/{project_id}/instances/{instance_id}/users + + { + "users" : [ { + "name" : "DDMuser1", + "password" : "Axejs@98a", + "base_authority" : [ "CREATE", "DROP", "ALTER", "INDEX", "INSERT", "DELETE", "UPDATE", "SELECT" ], + "description" : "", + "databases" : [ { + "name" : "DDMdb1" + } ] + } ] + } + +Example Response +---------------- + +**Status code: 200** + +OK + +.. code-block:: + + { + "users" : [ { + "name" : "DDMuser1" + } ] + } + +**Status code: 400** + +bad request + +.. code-block:: + + { + "externalMessage" : "Parameter error.", + "errCode" : "DBS.280001" + } + +**Status code: 500** + +server error + +.. code-block:: + + { + "externalMessage" : "Server failure.", + "errCode" : "DBS.200412" + } + +Status Codes +------------ + +=========== ============ +Status Code Description +=========== ============ +200 OK +400 bad request +500 server error +=========== ============ + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_recommended/ddm_accounts/deleting_a_ddm_account.rst b/api-ref/source/apis_recommended/ddm_accounts/deleting_a_ddm_account.rst new file mode 100644 index 0000000..93b1a38 --- /dev/null +++ b/api-ref/source/apis_recommended/ddm_accounts/deleting_a_ddm_account.rst @@ -0,0 +1,137 @@ +:original_name: ddm_api_01_0045.html + +.. _ddm_api_01_0045: + +Deleting a DDM Account +====================== + +Function +-------- + +This API is used to delete a DDM account. This operation will also disassociate the account from associated schemas if any. + +Constraints +----------- + +None + +URI +--- + +DELETE /v1/{project_id}/instances/{instance_id}/users/{username} + +.. table:: **Table 1** Path parameters + + =========== ========= ====== ========================================= + Parameter Mandatory Type Description + =========== ========= ====== ========================================= + project_id Yes String Project ID + instance_id Yes String DDM instance ID + username Yes String Username of the DDM account to be deleted + =========== ========= ====== ========================================= + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | X-Auth-Token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 3** Response body parameters + + ========= ====== =========================== + Parameter Type Description + ========= ====== =========================== + name String Username of the DDM account + ========= ====== =========================== + +**Status code: 400** + +.. table:: **Table 4** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +**Status code: 500** + +.. table:: **Table 5** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +Example Request +--------------- + +.. code-block:: text + + DELETE https://{endpoint}/v1/{project_id}/instances/{instance_id}/users/{username} + +Example Response +---------------- + +**Status code: 200** + +OK + +.. code-block:: + + { + "name" : "ddmtest" + } + +**Status code: 400** + +bad request + +.. code-block:: + + { + "externalMessage" : "Parameter error.", + "errCode" : "DBS.280001" + } + +**Status code: 500** + +server error + +.. code-block:: + + { + "externalMessage" : "Server failure.", + "errCode" : "DBS.200412" + } + +Status Codes +------------ + +=========== ============ +Status Code Description +=========== ============ +200 OK +400 bad request +500 server error +=========== ============ + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_recommended/ddm_accounts/index.rst b/api-ref/source/apis_recommended/ddm_accounts/index.rst new file mode 100644 index 0000000..99d318e --- /dev/null +++ b/api-ref/source/apis_recommended/ddm_accounts/index.rst @@ -0,0 +1,26 @@ +:original_name: ddm_api_01_0041.html + +.. _ddm_api_01_0041: + +DDM Accounts +============ + +- :ref:`Creating a DDM Account ` +- :ref:`Querying DDM Accounts ` +- :ref:`Modifying a DDM Account ` +- :ref:`Deleting a DDM Account ` +- :ref:`Resetting the Password of a DDM Account ` +- :ref:`Managing the Administrator Password ` +- :ref:`Validating Password Strength ` + +.. toctree:: + :maxdepth: 1 + :hidden: + + creating_a_ddm_account + querying_ddm_accounts + modifying_a_ddm_account + deleting_a_ddm_account + resetting_the_password_of_a_ddm_account + managing_the_administrator_password + validating_password_strength diff --git a/api-ref/source/apis_recommended/ddm_accounts/managing_the_administrator_password.rst b/api-ref/source/apis_recommended/ddm_accounts/managing_the_administrator_password.rst new file mode 100644 index 0000000..8c46938 --- /dev/null +++ b/api-ref/source/apis_recommended/ddm_accounts/managing_the_administrator_password.rst @@ -0,0 +1,101 @@ +:original_name: ddm_api_01_0101.html + +.. _ddm_api_01_0101: + +Managing the Administrator Password +=================================== + +Function +-------- + +If it is the first time to call this API, it is used to create an administrator and reset its password for a DDM instance. Then this API can only be used to update the administrator password. + +URI +--- + +PUT /v3/{project_id}/instances/{instance_id}/admin-user + +.. table:: **Table 1** Path parameters + + =========== ========= ====== ================================== + Parameter Mandatory Type Description + =========== ========= ====== ================================== + project_id Yes String Project ID of a tenant in a region + instance_id Yes String DDM instance ID + =========== ========= ====== ================================== + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | x-auth-token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 3** Request body parameters + + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=========================================================================================================================================================================================================================================+ + | name | Yes | String | Username of the administrator. The username: | + | | | | | + | | | | - Can include 1 to 32 characters. | + | | | | - Must start with a letter. | + | | | | - Can contain only letters, digits, and underscores (_). | + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | password | Yes | String | Password of the administrator. The password: | + | | | | | + | | | | - Can include 8 to 32 characters. | + | | | | - Must be a combination of uppercase letters, lowercase letters, digits, and the following special characters: ``~!@#%^*-_=+?`` Must be a strong password to improve security and prevent security risks such as brute force cracking. | + +-----------------+-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: default** + +.. table:: **Table 4** Response body parameters + + ========== ====== ============= + Parameter Type Description + ========== ====== ============= + error_code String Error code + error_msg String Error message + ========== ====== ============= + +Example Request +--------------- + +.. code-block:: text + + POST https://{endpoint}/v3/{project_id}/instances/{instance_id}/admin-user + + { + "name" : "root", + "password" : "xxx" + } + +Example Response +---------------- + +None + +Status Codes +------------ + +=========== ======================= +Status Code Description +=========== ======================= +200 OK +default Client or server error. +=========== ======================= + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_recommended/ddm_accounts/modifying_a_ddm_account.rst b/api-ref/source/apis_recommended/ddm_accounts/modifying_a_ddm_account.rst new file mode 100644 index 0000000..a532acd --- /dev/null +++ b/api-ref/source/apis_recommended/ddm_accounts/modifying_a_ddm_account.rst @@ -0,0 +1,198 @@ +:original_name: ddm_api_01_0044.html + +.. _ddm_api_01_0044: + +Modifying a DDM Account +======================= + +Function +-------- + +This API is used to modify the permissions and associated schemas of a DDM account. + +Constraints +----------- + +At least one of the following parameters must be configured: **password**, **base_authority**, **role**, **description**, and **databases**. + +URI +--- + +PUT /v1/{project_id}/instances/{instance_id}/users/{username} + +.. table:: **Table 1** Path parameters + + =========== ========= ====== =========================== + Parameter Mandatory Type Description + =========== ========= ====== =========================== + project_id Yes String Project ID + instance_id Yes String DDM instance ID + username Yes String Username of the DDM account + =========== ========= ====== =========================== + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | X-Auth-Token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 3** Request body parameters + + +-----------+-----------+----------------------------------------------------------------------------------+-------------------------+ + | Parameter | Mandatory | Type | Description | + +===========+===========+==================================================================================+=========================+ + | user | Yes | :ref:`UpdateUserDetailReq ` object | DDM account information | + +-----------+-----------+----------------------------------------------------------------------------------+-------------------------+ + +.. _ddm_api_01_0044__request_updateuserdetailreq: + +.. table:: **Table 4** UpdateUserDetailReq + + +-----------------+-----------------+----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+==============================================================================================+=================================================================================================================+ + | base_authority | No | Array of strings | Basic permissions of the DDM account. The default value is the original account permission. | + | | | | | + | | | | The value can be **CREATE**, **DROP**, **ALTER**, **INDEX**, **INSERT**, **DELETE**, **UPDATE**, or **SELECT**. | + | | | | | + | | | | Enumerated values: | + | | | | | + | | | | - **CREATE** | + | | | | - **DROP** | + | | | | - **ALTER** | + | | | | - **INDEX** | + | | | | - **INSERT** | + | | | | - **DELETE** | + | | | | - **UPDATE** | + | | | | - **SELECT** | + +-----------------+-----------------+----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------+ + | description | No | String | Description of the DDM account, which cannot exceed 256 characters. | + | | | | | + | | | | It is left blank by default. | + | | | | | + | | | | Maximum length: 256 characters | + +-----------------+-----------------+----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------+ + | databases | No | Array of :ref:`UpdateUsersDatabases ` objects | DDM account information | + +-----------------+-----------------+----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------+ + +.. _ddm_api_01_0044__request_updateusersdatabases: + +.. table:: **Table 5** UpdateUsersDatabases + + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+==================================================================================================================+ + | name | No | String | Schema name, which is case-insensitive. The **databases** and **name** fields must be both or neither specified. | + | | | | | + | | | | The parameter is left blank by default. | + +-----------------+-----------------+-----------------+------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 6** Response body parameters + + ========= ====== =========================== + Parameter Type Description + ========= ====== =========================== + name String Username of the DDM account + ========= ====== =========================== + +**Status code: 400** + +.. table:: **Table 7** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +**Status code: 500** + +.. table:: **Table 8** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +Example Request +--------------- + +.. code-block:: text + + PUT https://{endpoint}/v1/{project_id}/instances/{instance_id}/users/{username} + + { + "user" : { + "base_authority" : [ "SELECT" ], + "description" : "test11", + "databases" : [ { + "name" : "db_7350" + } ] + } + } + +Example Response +---------------- + +**Status code: 200** + +OK + +.. code-block:: + + { + "name" : "ddmtest" + } + +**Status code: 400** + +bad request + +.. code-block:: + + { + "externalMessage" : "Parameter error.", + "errCode" : "DBS.280001" + } + +**Status code: 500** + +server error + +.. code-block:: + + { + "externalMessage" : "Server failure.", + "errCode" : "DBS.200412" + } + +Status Codes +------------ + +=========== ============ +Status Code Description +=========== ============ +200 OK +400 bad request +500 server error +=========== ============ + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_recommended/ddm_accounts/querying_ddm_accounts.rst b/api-ref/source/apis_recommended/ddm_accounts/querying_ddm_accounts.rst new file mode 100644 index 0000000..6d5581c --- /dev/null +++ b/api-ref/source/apis_recommended/ddm_accounts/querying_ddm_accounts.rst @@ -0,0 +1,211 @@ +:original_name: ddm_api_01_0043.html + +.. _ddm_api_01_0043: + +Querying DDM Accounts +===================== + +Function +-------- + +This API is used to query DDM accounts. + +Constraints +----------- + +None + +URI +--- + +GET /v1/{project_id}/instances/{instance_id}/users + +.. table:: **Table 1** Path parameters + + =========== ========= ====== =============== + Parameter Mandatory Type Description + =========== ========= ====== =============== + project_id Yes String Project ID + instance_id Yes String DDM instance ID + =========== ========= ====== =============== + +.. table:: **Table 2** Query parameters + + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=======================================================================================================================================+ + | offset | No | Integer | Which page the server starts returning items. The start value cannot be less than **0**. The default value is **0**. | + | | | | | + | | | | Minimum value: **0** | + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | limit | No | Integer | Number of records displayed on each page. The value is greater than **0** and not greater than **128**. The default value is **128**. | + | | | | | + | | | | Minimum value: **1** | + | | | | | + | | | | Maximum value: **128** | + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 3** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | X-Auth-Token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 4** Response body parameters + + +--------------+-------------------------------------------------------------------------------------------------------------+----------------------------------+ + | Parameter | Type | Description | + +==============+=============================================================================================================+==================================+ + | users | Array of :ref:`GetUsersListDetailResponses ` objects | DDM account information | + +--------------+-------------------------------------------------------------------------------------------------------------+----------------------------------+ + | page_no | Integer | Current page | + +--------------+-------------------------------------------------------------------------------------------------------------+----------------------------------+ + | page_size | Integer | Data records on the current page | + +--------------+-------------------------------------------------------------------------------------------------------------+----------------------------------+ + | total_record | Integer | Total records | + +--------------+-------------------------------------------------------------------------------------------------------------+----------------------------------+ + | total_page | Integer | Total pages | + +--------------+-------------------------------------------------------------------------------------------------------------+----------------------------------+ + +.. _ddm_api_01_0043__response_getuserslistdetailresponses: + +.. table:: **Table 5** GetUsersListDetailResponses + + +-----------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+===============================================================================================+=============================================================================================================================+ + | name | String | Username of the DDM account | + +-----------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+ + | status | String | Status of the DDM account | + +-----------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+ + | base_authority | Array of strings | Basic permissions of the DDM account. | + | | | | + | | | The value can be **CREATE**, **DROP**, **ALTER**, **INDEX**, **INSERT**, **DELETE**, **UPDATE**, or **SELECT**. | + +-----------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+ + | extend_authority | Array of strings | Extended permissions of the DDM account. This parameter is unavailable since August 2021 and was deleted in September 2021. | + | | | | + | | | The value can be **fulltableDelete**, **fulltableSelect**, or **fulltableUpdate**. | + +-----------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+ + | description | String | Description of the DDM account | + +-----------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+ + | created | Long | Time when the DDM account is created | + +-----------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+ + | databases | Array of :ref:`GetUsersListdatabase ` objects | Associated schemas | + +-----------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+ + +.. _ddm_api_01_0043__response_getuserslistdatabase: + +.. table:: **Table 6** GetUsersListdatabase + + =========== ====== ================================================== + Parameter Type Description + =========== ====== ================================================== + name String Name of the schema associated with the DDM account + description String Schema description + =========== ====== ================================================== + +**Status code: 400** + +.. table:: **Table 7** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +**Status code: 500** + +.. table:: **Table 8** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +Example Request +--------------- + +.. code-block:: text + + GET https://{endpoint}/v1/{project_id}/instances/{instance_id}/users?offset={offset}&limit={limit} + +Example Response +---------------- + +**Status code: 200** + +OK + +.. code-block:: + + { + "users" : [ { + "name" : "ddmtest", + "status" : "RUNNING", + "base_authority" : [ "SELECT" ], + "description" : "Account", + "created" : "2019-10-30T11:01:24+0800", + "databases" : [ { + "name" : "zhxtest", + "description" : "Schema" + } ] + } ], + "page_no" : 1, + "page_size" : 10, + "total_record" : 1, + "total_page" : 1 + } + +**Status code: 400** + +bad request + +.. code-block:: + + { + "externalMessage" : "Parameter error.", + "errCode" : "DBS.280001" + } + +**Status code: 500** + +server error + +.. code-block:: + + { + "externalMessage" : "Server failure.", + "errCode" : "DBS.200412" + } + +Status Codes +------------ + +=========== ============ +Status Code Description +=========== ============ +200 OK +400 bad request +500 server error +=========== ============ + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_recommended/ddm_accounts/resetting_the_password_of_a_ddm_account.rst b/api-ref/source/apis_recommended/ddm_accounts/resetting_the_password_of_a_ddm_account.rst new file mode 100644 index 0000000..eea0581 --- /dev/null +++ b/api-ref/source/apis_recommended/ddm_accounts/resetting_the_password_of_a_ddm_account.rst @@ -0,0 +1,151 @@ +:original_name: ddm_api_01_0088.html + +.. _ddm_api_01_0088: + +Resetting the Password of a DDM Account +======================================= + +Function +-------- + +This API is used to reset the password of a DDM account. + +Constraints +----------- + +None + +URI +--- + +POST /v2/{project_id}/instances/{instance_id}/users/{username}/password + +.. table:: **Table 1** Path parameters + + =========== ========= ====== ========================================== + Parameter Mandatory Type Description + =========== ========= ====== ========================================== + project_id Yes String Project ID + instance_id Yes String DDM instance ID + username Yes String Username of the DDM account to be modified + =========== ========= ====== ========================================== + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | X-Auth-Token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 3** Request body parameters + + ========= ========= ====== ============ + Parameter Mandatory Type Description + ========= ========= ====== ============ + password Yes String New password + ========= ========= ====== ============ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 4** Response body parameters + + =========== ======= =================================== + Parameter Type Description + =========== ======= =================================== + success Boolean Whether the operation is successful + instance_id String DDM instance ID + user_name String Username of the DDM account + =========== ======= =================================== + +**Status code: 400** + +.. table:: **Table 5** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +**Status code: 500** + +.. table:: **Table 6** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +Example Request +--------------- + +.. code-block:: text + + POST https://{endpoint}/v2/{project_id}/instances/{instance_id}/users/{username}/password + + { + "password" : "GaussTest_234" + } + +Example Response +---------------- + +**Status code: 200** + +OK + +.. code-block:: + + { + "name" : "ddmtest" + } + +**Status code: 400** + +bad request + +.. code-block:: + + { + "externalMessage" : "Parameter error.", + "errCode" : "DBS.280001" + } + +**Status code: 500** + +server error + +.. code-block:: + + { + "externalMessage" : "Server failure.", + "errCode" : "DBS.200412" + } + +Status Codes +------------ + +=========== ============ +Status Code Description +=========== ============ +200 OK +400 bad request +500 server error +=========== ============ + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_recommended/ddm_accounts/validating_password_strength.rst b/api-ref/source/apis_recommended/ddm_accounts/validating_password_strength.rst new file mode 100644 index 0000000..fea533d --- /dev/null +++ b/api-ref/source/apis_recommended/ddm_accounts/validating_password_strength.rst @@ -0,0 +1,108 @@ +:original_name: ddm_api_01_0102.html + +.. _ddm_api_01_0102: + +Validating Password Strength +============================ + +Function +-------- + +This API is used to check whether an instance password is a weak password. + +URI +--- + +POST /v3/{project_id}/weak-password-verification + +.. table:: **Table 1** Path parameters + + ========== ========= ====== ================================== + Parameter Mandatory Type Description + ========== ========= ====== ================================== + project_id Yes String Project ID of a tenant in a region + ========== ========= ====== ================================== + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | x-auth-token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 3** Request body parameters + + ========= ========= ====== ================================ + Parameter Mandatory Type Description + ========= ========= ====== ================================ + password Yes String Character string to be validated + ========= ========= ====== ================================ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 4** Response body parameters + + +------------------+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +==================+=========+===========================================================================================================================================================================================================================================================+ + | is_weak_password | Boolean | Whether the password is a weak password. The value can be: **true**: indicating that the password is a weak password. Such a password is not recommended. **false**: indicating that the password is not a weak password. Such a password is recommended. | + +------------------+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +**Status code: default** + +.. table:: **Table 5** Response body parameters + + ========== ====== ============= + Parameter Type Description + ========== ====== ============= + error_code String Error code + error_msg String Error message + ========== ====== ============= + +Example Request +--------------- + +.. code-block:: text + + POST https://{endpoint}/v3/{project_id}/weak-password-verification + + { + "password" : "xxx" + } + +Example Response +---------------- + +**Status code: 200** + +OK + +.. code-block:: + + { + "is_weak_password" : true + } + +Status Codes +------------ + +=========== ======================= +Status Code Description +=========== ======================= +200 OK +default Client or server error. +=========== ======================= + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_recommended/ddm_instances/changing_the_node_class_of_a_ddm_instance.rst b/api-ref/source/apis_recommended/ddm_instances/changing_the_node_class_of_a_ddm_instance.rst new file mode 100644 index 0000000..e60ff83 --- /dev/null +++ b/api-ref/source/apis_recommended/ddm_instances/changing_the_node_class_of_a_ddm_instance.rst @@ -0,0 +1,124 @@ +:original_name: ddm_api_01_0017.html + +.. _ddm_api_01_0017: + +Changing the Node Class of a DDM Instance +========================================= + +Function +-------- + +This API is used to change the node class of a DDM instance. + +Constraints +----------- + +- The node class can be changed only when the corresponding DDM instance is normal. +- The new node class cannot be the same as the original one. +- Node classes of c6s series cannot be changed to those classes of c6 series. + +URI +--- + +PUT /v3/{project_id}/instances/{instance_id}/flavor + +.. table:: **Table 1** Path parameters + + =========== ========= ====== ================================== + Parameter Mandatory Type Description + =========== ========= ====== ================================== + project_id Yes String Project ID of a tenant in a region + instance_id Yes String DDM instance ID + =========== ========= ====== ================================== + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | x-auth-token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 3** Request body parameters + + +-------------+-----------+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=============+===========+=========+==================================================================================================================================================================================================================================================================================================+ + | spec_code | Yes | String | Resource specification code of the new node class | + +-------------+-----------+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | group_id | No | String | This parameter is not required if the instance has only one node group. Each instance has one node group by default. If you need to create multiple node groups, set this parameter to the ID of the group whose node class you want to change. | + +-------------+-----------+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | is_auto_pay | No | Boolean | Whether the order is automatically paid. This parameter does not affect the billing mode of automatic renewal. **true**: indicates that the order is automatically paid from the account. **false**: indicates that the order is manually paid from the account. The default value is **false**. | + +-------------+-----------+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 4** Response body parameters + + +-----------+--------+----------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +===========+========+==================================================================================================================================+ + | job_id | String | ID of the task of changing node class. This parameter is returned only when you change the node class of a pay-per-use instance. | + +-----------+--------+----------------------------------------------------------------------------------------------------------------------------------+ + | order_id | String | Order ID. This parameter is returned only when you change the node class of a yearly/monthly instance. | + +-----------+--------+----------------------------------------------------------------------------------------------------------------------------------+ + +**Status code: default** + +.. table:: **Table 5** Response body parameters + + =============== ====== ============= + Parameter Type Description + =============== ====== ============= + errCode String Error code + externalMessage String Error message + =============== ====== ============= + +Example Request +--------------- + +.. code-block:: text + + PUT https://{endpoint}/v3/{project_id}/instances/{instance_id}/flavor + + { + "spec_code" : "ddm.c6.4xlarge.2", + "group_id" : "3e5a9063d3b84729b0a3310fad3a0942gr09", + "is_auto_pay" : false + } + +Example Response +---------------- + +**Status code: 200** + +ok + +.. code-block:: + + { + "job_id" : "2x414788a5112333a02390e2eb0ea227" + } + +Status Codes +------------ + +=========== ======================= +Status Code Description +=========== ======================= +200 ok +default Client or server error. +=========== ======================= + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_recommended/ddm_instances/creating_a_ddm_instance.rst b/api-ref/source/apis_recommended/ddm_instances/creating_a_ddm_instance.rst new file mode 100644 index 0000000..a60a9dc --- /dev/null +++ b/api-ref/source/apis_recommended/ddm_instances/creating_a_ddm_instance.rst @@ -0,0 +1,319 @@ +:original_name: ddm_04_0001.html + +.. _ddm_04_0001: + +Creating a DDM instance +======================= + +Function +-------- + +This API is used to create a DDM instance. + +Constraints +----------- + +DDM runs in VPCs. Before you buy a DDM instance, ensure that a VPC is available and a subnet and security group have been configured. + +URI +--- + +POST /v1/{project_id}/instances + +.. table:: **Table 1** Path parameters + + ========== ========= ====== ================================== + Parameter Mandatory Type Description + ========== ========= ====== ================================== + project_id Yes String Project ID of a tenant in a region + ========== ========= ====== ================================== + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | X-Auth-Token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 3** Request body parameters + + +--------------+-----------+------------------------------------------------------------------------------------------+----------------------+ + | Parameter | Mandatory | Type | Description | + +==============+===========+==========================================================================================+======================+ + | instance | Yes | :ref:`CreateInstanceDetail ` object | Instance information | + +--------------+-----------+------------------------------------------------------------------------------------------+----------------------+ + | extend_param | No | :ref:`CreateInstanceExtendParam ` object | Extended parameter | + +--------------+-----------+------------------------------------------------------------------------------------------+----------------------+ + +.. _ddm_04_0001__request_createinstancedetail: + +.. table:: **Table 4** CreateInstanceDetail + + +-----------------------+-----------------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=======================+=================+==================+=====================================================================================================================================================================================================================================================================================================================================================================================================================================+ + | name | Yes | String | Name of a DDM instance, which: | + | | | | | + | | | | - Can include 4 to 64 characters. | + | | | | - Must start with a letter. | + | | | | - Can contain only letters, digits, and hyphens (-). | + | | | | | + | | | | Minimum length: 4 characters | + | | | | | + | | | | Maximum length: 64 characters | + +-----------------------+-----------------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | flavor_id | Yes | String | Class ID | + +-----------------------+-----------------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | node_num | Yes | Integer | Number of nodes | + +-----------------------+-----------------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | engine_id | Yes | String | Engine ID | + +-----------------------+-----------------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | enterprise_project_id | No | String | Enterprise project ID | + +-----------------------+-----------------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | available_zones | Yes | Array of strings | AZ code. The value cannot be empty. For details, see `Regions and Endpoints `__. | + +-----------------------+-----------------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | vpc_id | Yes | String | VPC ID | + +-----------------------+-----------------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | security_group_id | Yes | String | Security group ID | + +-----------------------+-----------------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | subnet_id | Yes | String | Subnet ID | + +-----------------------+-----------------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | param_group_id | No | String | Parameter group ID | + +-----------------------+-----------------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | time_zone | No | String | UTC time zone. The default value is **UTC**. The value can be **UTC**, **UTC-12:00**, **UTC-11:00**, **UTC-10:00**, **UTC-09:00**, **UTC-08:00**, **UTC-07:00**, **UTC-06:00**, **UTC-05:00**, **UTC-04:00**, **UTC-03:00**, **UTC-02:00**, **UTC-01:00**, **UTC+01:00**, **UTC+02:00**, **UTC+03:00**, **UTC+05:00**, **UTC+06:00**, **UTC+07:00**, **UTC+08:00**, **UTC+09:00**, **UTC+10:00**, **UTC+11:00**, and **UTC+12:00**. | + +-----------------------+-----------------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | admin_user_name | No | String | Username of the administrator. The username: | + | | | | | + | | | | - Can include 1 to 32 characters. | + | | | | - Must start with a letter. | + | | | | - Can contain only letters, digits, and underscores (_). | + +-----------------------+-----------------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | admin_user_password | No | String | Password of the administrator. The password: | + | | | | | + | | | | - Can include 8 to 32 characters. | + | | | | - Must be a combination of uppercase letters, lowercase letters, digits, and the following special characters: ``~!@#%^*-_=+?`` Must be a strong password to improve security and prevent security risks such as brute force cracking. | + +-----------------------+-----------------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _ddm_04_0001__request_createinstanceextendparam: + +.. table:: **Table 5** CreateInstanceExtendParam + + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+===============================================================================================================================================================================================================================+ + | charge_mode | No | String | Billing mode. The value can be: | + | | | | | + | | | | - **prePaid**: indicates the prepayment method. | + | | | | - **postPaid**: indicates the post-payment method. Default value: **postPaid** | + | | | | | + | | | | Default value: **postPaid** | + | | | | | + | | | | Enumerated values: | + | | | | | + | | | | - **prePaid** | + | | | | - **postPaid** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | period_type | No | String | Subscription period. The value can be: | + | | | | | + | | | | - **month**: indicates the subscription time unit is month. | + | | | | - **year**: indicates the subscription time unit is year. This parameter is valid and mandatory if **charge_mode** is set to **prePaid**. | + | | | | | + | | | | Enumerated values: | + | | | | | + | | | | - **month** | + | | | | - **year** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | period_num | No | Integer | Subscription duration. | + | | | | | + | | | | - If **period_type** is set to **month**, the value ranges from **1** to **9**. | + | | | | - If **period_type** is set to **year**, the value is **1**. This parameter is valid and mandatory if **charge_mode** is set to **prePaid**. | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | is_auto_renew | No | String | Whether the instance is automatically renewed when it expires. The value can be: | + | | | | | + | | | | - **true**: The instance is automatically renewed when it expires. | + | | | | - **false**: The instance is not automatically renewed when it expires. This parameter is valid when **charge_mode** is set to **prePaid**. The instance is not automatically renewed by default if no value is specified. " | + | | | | | + | | | | Enumerated values: | + | | | | | + | | | | - **true** | + | | | | - **false** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | is_auto_pay | No | String | Whether the order is paid from the customer's account balance. The value can be: | + | | | | | + | | | | - **true**: indicates that the order is automatically paid from the customer's account balance. | + | | | | - **false**: indicates that the order needs to be paid manually. This parameter is available if **charge_mode** is set to **prePaid**. The order needs to be paid manually by default if no value is specified. " | + | | | | | + | | | | Enumerated values: | + | | | | | + | | | | - **true** | + | | | | - **false** | + +-----------------+-----------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 6** Response body parameters + + ========= ====== ============ + Parameter Type Description + ========= ====== ============ + id String Instance ID. + order_id String Order ID. + ========= ====== ============ + +**Status code: 400** + +.. table:: **Table 7** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +**Status code: 500** + +.. table:: **Table 8** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +Example Request +--------------- + +- Example request (without extended parameters) + + .. code-block:: text + + POST https://{endpoint}/v1/{project_id}/instances + + { + "instance" : { + "name" : "ddm-test-001", + "flavor_id" : "8f2e696c-a9c1-30bd-af90-25522bc67606", + "node_num" : "4,", + "engine_id" : "2325a707-0361-8be6-dd01-13474bbac437", + "enterprise_project_id" : "0", + "available_zones" : [ "az1xahz" ], + "vpc_id" : "e1d886ec-cfe7-4cd4-b748-fc55a10b4172", + "security_group_id" : "035b70ed-319b-4086-9fd7-62a2e8548b2e", + "subnet_id" : "f942f970-1a02-4eee-8927-xxxxxxxx", + "param_group_id" : "035b70ed-319b-4086-9fd7-xxxxxxxx" + } + } + +- Example request (with extended parameters) + + .. code-block:: text + + POST https://{endpoint}/v1/{project_id}/instances + + { + "instance" : { + "name" : "ddm-test-002", + "flavor_id" : "8f2e696c-a9c1-30bd-af90-25522bc67606", + "node_num" : 4, + "engine_id" : "2325a707-0361-8be6-dd01-13474bbac437", + "enterprise_project_id" : "0", + "available_zones" : [ "az1xahz" ], + "vpc_id" : "e1d886ec-cfe7-4cd4-b748-fc55a10b4172", + "security_group_id" : "035b70ed-319b-4086-9fd7-62a2e8548b2e", + "subnet_id" : "f942f970-1a02-4eee-8927-e8670ce5a882" + }, + "extend_param" : { + "charge_mode" : "postPaid" + } + } + +- Example request + + .. code-block:: text + + POST https://{endpoint}/v1/{project_id}/instances + + { + "instance" : { + "name" : "ddm-test-003", + "flavor_id" : "8f2e696c-a9c1-30bd-af90-25522bc67606", + "node_num" : "4,", + "engine_id" : "2325a707-0361-8be6-dd01-13474bbac437", + "enterprise_project_id" : "0", + "available_zones" : [ "az1xahz" ], + "vpc_id" : "e1d886ec-cfe7-4cd4-b748-fc55a10b4172", + "security_group_id" : "035b70ed-319b-4086-9fd7-62a2e8548b2e", + "subnet_id" : "f942f970-1a02-4eee-8927-xxxxxxxx", + "param_group_id" : "035b70ed-319b-4086-9fd7-xxxxxxxx" + }, + "extend_param" : { + "charge_mode" : "prePaid", + "period_type" : "month", + "period_num" : 1, + "is_auto_renew" : "true", + "is_auto_pay" : "true" + } + } + +Example Response +---------------- + +**Status code: 200** + +OK + +.. code-block:: + + { + "id" : "", + "order_id" : "CS1810251738L8VVD" + } + +**Status code: 400** + +bad request + +.. code-block:: + + { + "externalMessage" : "Parameter error.", + "errCode" : "DBS.280001" + } + +**Status code: 500** + +server error + +.. code-block:: + + { + "externalMessage" : "Server failure.", + "errCode" : "DBS.200412" + } + +Status Codes +------------ + +=========== ============ +Status Code Description +=========== ============ +200 OK +400 bad request +500 server error +=========== ============ + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_recommended/ddm_instances/deleting_a_ddm_instance.rst b/api-ref/source/apis_recommended/ddm_instances/deleting_a_ddm_instance.rst new file mode 100644 index 0000000..c72415b --- /dev/null +++ b/api-ref/source/apis_recommended/ddm_instances/deleting_a_ddm_instance.rst @@ -0,0 +1,160 @@ +:original_name: ddm_api_01_0022.html + +.. _ddm_api_01_0022: + +Deleting a DDM Instance +======================= + +Function +-------- + +This API is used to delete a DDM instance to release all its resources. + +Constraints +----------- + +None + +URI +--- + +DELETE /v1/{project_id}/instances/{instance_id} + +.. table:: **Table 1** Path parameters + + =========== ========= ====== =============== + Parameter Mandatory Type Description + =========== ========= ====== =============== + project_id Yes String Project ID + instance_id Yes String DDM instance ID + =========== ========= ====== =============== + +.. table:: **Table 2** Query parameters + + +-----------------+-----------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+==========================================================================================================================+ + | delete_rds_data | No | String | Whether data stored on the associated DB instances is deleted. The value can be: | + | | | | | + | | | | - **true**: indicates that the data stored on the associated DB instances is deleted. | + | | | | - **false**: indicates that the data stored on the associated DB instances is not deleted. It is left blank by default. | + | | | | | + | | | | Enumerated values: | + | | | | | + | | | | - **true** | + | | | | - **false** | + +-----------------+-----------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 3** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | X-Auth-Token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 4** Response body parameters + + ========= ====== =============== + Parameter Type Description + ========= ====== =============== + id String DDM instance ID + ========= ====== =============== + +**Status code: 400** + +.. table:: **Table 5** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +**Status code: 500** + +.. table:: **Table 6** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +Example Request +--------------- + +- Request to delete a DDM instance (including the data stored on the associated DB instances) + + .. code-block:: text + + DELETE https://{endpoint}/v1/{project_id}/instances/{instance_id}?delete_rds_data=true + +- Request to delete a DDM instance (excluding the data stored on the associated DB instances) + + .. code-block:: text + + DELETE https://{endpoint}/v1/{project_id}/instances/{instance_id}?delete_rds_data=false + +Example Response +---------------- + +**Status code: 200** + +OK + +.. code-block:: + + { + "id" : "9608ce63-bf66-4342-be8a-44f9b6b15d54" + } + +**Status code: 400** + +bad request + +.. code-block:: + + { + "externalMessage" : "Parameter error.", + "errCode" : "DBS.280001" + } + +**Status code: 500** + +server error + +.. code-block:: + + { + "externalMessage" : "Server failure.", + "errCode" : "DBS.200412" + } + +Status Codes +------------ + +=========== ============ +Status Code Description +=========== ============ +200 OK +400 bad request +500 server error +=========== ============ + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_recommended/ddm_instances/index.rst b/api-ref/source/apis_recommended/ddm_instances/index.rst new file mode 100644 index 0000000..2e092c2 --- /dev/null +++ b/api-ref/source/apis_recommended/ddm_instances/index.rst @@ -0,0 +1,50 @@ +:original_name: ddm_api_01_0014.html + +.. _ddm_api_01_0014: + +DDM Instances +============= + +- :ref:`Creating a DDM instance ` +- :ref:`Querying DDM Instances ` +- :ref:`Querying Details of a DDM Instance ` +- :ref:`Modifying the Name of a DDM Instance ` +- :ref:`Modifying the Security Group of a DDM Instance ` +- :ref:`Deleting a DDM Instance ` +- :ref:`Restarting a DDM Instance ` +- :ref:`Reloading Table Data ` +- :ref:`Scaling Out a DDM Instance ` +- :ref:`Scaling in a DDM instance ` +- :ref:`Modifying the Read Policy of the Associated DB Instance ` +- :ref:`Synchronizing Data Node Information ` +- :ref:`Querying Nodes of a DDM Instance ` +- :ref:`Querying Details of a DDM Instance Node ` +- :ref:`Querying Parameters of a Specified DDM Instance ` +- :ref:`Modifying Parameters of a DDM Instance ` +- :ref:`Querying DDM Engine Information ` +- :ref:`Querying DDM Node Classes Available in an AZ ` +- :ref:`Changing the Node Class of a DDM Instance ` + +.. toctree:: + :maxdepth: 1 + :hidden: + + creating_a_ddm_instance + querying_ddm_instances + querying_details_of_a_ddm_instance + modifying_the_name_of_a_ddm_instance + modifying_the_security_group_of_a_ddm_instance + deleting_a_ddm_instance + restarting_a_ddm_instance + reloading_table_data + scaling_out_a_ddm_instance + scaling_in_a_ddm_instance + modifying_the_read_policy_of_the_associated_db_instance + synchronizing_data_node_information + querying_nodes_of_a_ddm_instance + querying_details_of_a_ddm_instance_node + querying_parameters_of_a_specified_ddm_instance + modifying_parameters_of_a_ddm_instance + querying_ddm_engine_information + querying_ddm_node_classes_available_in_an_az + changing_the_node_class_of_a_ddm_instance diff --git a/api-ref/source/apis_recommended/ddm_instances/modifying_parameters_of_a_ddm_instance.rst b/api-ref/source/apis_recommended/ddm_instances/modifying_parameters_of_a_ddm_instance.rst new file mode 100644 index 0000000..a28da23 --- /dev/null +++ b/api-ref/source/apis_recommended/ddm_instances/modifying_parameters_of_a_ddm_instance.rst @@ -0,0 +1,265 @@ +:original_name: ddm_api_01_0085.html + +.. _ddm_api_01_0085: + +Modifying Parameters of a DDM Instance +====================================== + +Function +-------- + +This API is used to modify parameters of a DDM instance. + +Constraints +----------- + +None + +URI +--- + +PUT /v3/{project_id}/instances/{instance_id}/configurations + +.. table:: **Table 1** Path parameters + + =========== ========= ====== ================================== + Parameter Mandatory Type Description + =========== ========= ====== ================================== + project_id Yes String Project ID of a tenant in a region + instance_id Yes String DDM instance ID + =========== ========= ====== ================================== + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | X-Language | No | String | Language. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | X-Auth-Token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 3** Request body parameters + + +-----------+-----------+--------------------------------------------------------+-------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===========+===========+========================================================+=====================================+ + | values | Yes | :ref:`values ` object | Parameters that need to be modified | + +-----------+-----------+--------------------------------------------------------+-------------------------------------+ + +.. _ddm_api_01_0085__request_values: + +.. table:: **Table 4** values + + +--------------------------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +======================================+=================+=================+======================================================================================================================================================================================================================================================================================================================================================================================================================+ + | bind_table | No | String | Data association among multiple sharded tables. The optimizer processes JOIN operations at the MySQL layer based on these associations. The format is [{tb.col1,tb2.col2},{tb.col2,tb3.col1},...]. | + +--------------------------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | character_set_server | No | String | DDM server's character set. To store emoticons, set both this parameter and the character set on RDS to **utf8mb4**. To modify the character set, you must change the collation of the DDM server correspondingly. | + | | | | | + | | | | Enumerated values: | + | | | | | + | | | | - **gbk** | + | | | | - **utf8** | + | | | | - **utf8mb4** | + +--------------------------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | collation_server | No | String | Collation on the DDM server. To modify the collation, you must modify the server's character set correspondingly. | + | | | | | + | | | | Enumerated values: | + | | | | | + | | | | - **utf8_unicode_ci** | + | | | | - **utf8_bin** | + | | | | - **gbk_chinese_ci** | + | | | | - **gbk_bin** | + | | | | - **utf8mb4_unicode_ci** | + | | | | - **utf8mb4_bin** | + +--------------------------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | concurrent_execution_level | No | String | Concurrency level of scanning table shards in a logical table. **DATA_NODE**: indicates that database shards are scanned in parallel and table shards in each database shard are scanned in serial. **RDS_INSTANCE**: indicates that RDS instances are scanned in parallel and shards in each DB instance are scanned in serial. **PHY_TABLE**: indicates that all table shards are scanned in parallel. | + | | | | | + | | | | Enumerated values: | + | | | | | + | | | | - **RDS_INSTANCE** | + | | | | - **DATA_NODE** | + | | | | - **PHY_TABLE** | + +--------------------------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | connection_idle_timeout | No | String | Number of seconds the server waits for activity on a connection before closing it. The value ranges from **60** to **28800**. The default value is **28800**, indicating that the server waits for 28800 seconds before closing a connection. | + +--------------------------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | enable_table_recycle | No | String | Whether the table recycle bin is enabled. | + | | | | | + | | | | Enumerated values: | + | | | | | + | | | | - **OFF** | + | | | | - **ON** | + +--------------------------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | insert_to_load_data | No | String | Whether constant values can be inserted by executing the LOAD DATA statement. | + | | | | | + | | | | Enumerated values: | + | | | | | + | | | | - **OFF** | + | | | | - **ON** | + +--------------------------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | live_transaction_timeout_on_shutdown | No | String | Timeout limit of an in-transit transaction, in seconds. The value ranges from **0** to **100**. The default value is **1**, indicating that the server waits for 1 second before closing the connection. | + +--------------------------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | long_query_time | No | String | Minimum duration of a query to be logged as slow, in seconds. The value ranges from **0.01** to **10**. The default value is **1**, indicating that the query is considered as a slow query if its execution duration is greater than or equal to 1 second. | + +--------------------------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | max_allowed_packet | No | String | Maximum size of a packet or any generated intermediate string. The packet message buffer is initialized to **net_buffer_length** bytes, but can grow up to **max_allowed_packet** bytes if required. This value is small by default, to catch large (and possibly incorrect) packets. The value must be a multiple of **1024**. The value ranges from **1024** to **1073741824**. The default value is **16777216**. | + +--------------------------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | max_backend_connections | No | String | Maximum of concurrent RDS client connections allowed per DDM instance. When this parameter is set to **0** (default), the maximum concurrent connections from a DDM node to an RDS instance is: (RDS instance's maximum connections - 20)/DDM nodes. The value ranges from **0** to **10000000**. | + +--------------------------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | max_connections | No | String | Concurrent connections allowed per DDM instance, which depends on the class and quantity of associated RDS instances. The default value is **20000**. The value ranges from **10** to **40000**, indicating that the maximum of concurrent connections cannot exceed 40,000. | + +--------------------------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | min_backend_connections | No | String | Minimum concurrent connections from a DDM node to an RDS instance. The default value is **10**. The value ranges from **0** to **10000000**. | + +--------------------------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | not_from_pushdown | No | String | Whether the SELECT statements that do not contain any FROM clauses are pushed down. | + | | | | | + | | | | Enumerated values: | + | | | | | + | | | | - **OFF** | + | | | | - **ON** | + +--------------------------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | seconds_behind_master | No | String | Threshold in seconds of the replication lag between a primary RDS instance to its read replica. The value ranges from **0** to **7200**. The default value is **30**, indicating that the time for data replication between the primary RDS instance and its read replicas cannot exceed 30 seconds. If the time exceeds 30 seconds, the data read requests are no longer forwarded to the read replicas. | + +--------------------------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | sql_audit | No | String | Whether SQL audit is enabled. | + | | | | | + | | | | Enumerated values: | + | | | | | + | | | | - **OFF** | + | | | | - **ON** | + +--------------------------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | sql_execute_timeout | No | String | Number of seconds to wait for a SQL statement to execute before it times out. The value ranges from **100** to **28800**. The default value is **28800**, indicating that the SQL statement times out if its execution time is greater than or equal to 28,800 seconds. | + +--------------------------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | support_ddl_binlog_hint | No | String | Whether a binlog hint is added to each DDL statement. | + | | | | | + | | | | Enumerated values: | + | | | | | + | | | | - **OFF** | + | | | | - **ON** | + +--------------------------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | transaction_policy | No | String | Transactions supported by DDM. XA transaction, which attempts to ensure atomicity and isolation. FREE transaction, which is a best-effort commit transaction that allows data to be written to multiple shards, without impacting performance. FREE transactions do not ensure atomicity. NO_DTX transaction, which is a single-shard transaction. | + | | | | | + | | | | Enumerated values: | + | | | | | + | | | | - **XA** | + | | | | - **FREE** | + | | | | - **NO_DTX** | + +--------------------------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | ultimate_optimize | No | String | Whether the SQL execution plan is optimized based on parameter values. | + | | | | | + | | | | Enumerated values: | + | | | | | + | | | | - **OFF** | + | | | | - **ON** | + +--------------------------------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 5** Response body parameters + + =========== ======= ========================================== + Parameter Type Description + =========== ======= ========================================== + nodeList String DDM instance nodes + needRestart Boolean Whether the instance needs to be restarted + jobId String Task ID + configId String Parameter group ID + configName String Parameter group name + =========== ======= ========================================== + +**Status code: 400** + +.. table:: **Table 6** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +**Status code: 500** + +.. table:: **Table 7** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +Example Request +--------------- + +.. code-block:: text + + PUT https://{endpoint}/v3/{project_id}/instances/{instance_id}/configurations + + { + "values" : { + "long_query_time" : 2 + } + } + +Example Response +---------------- + +**Status code: 200** + +OK + +.. code-block:: + + { + "nodeList" : null, + "needRestart" : "false", + "jobId" : "9fe84a77-6a6b-4b03-9a3e-db910a548657", + "configId" : null, + "configName" : null + } + +**Status code: 400** + +bad request + +.. code-block:: + + { + "externalMessage" : "Parameter error.", + "errCode" : "DBS.280001" + } + +**Status code: 500** + +server error + +.. code-block:: + + { + "externalMessage" : "Server failure.", + "errCode" : "DBS.200412" + } + +Status Codes +------------ + +=========== ============ +Status Code Description +=========== ============ +200 OK +400 bad request +500 server error +=========== ============ + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_recommended/ddm_instances/modifying_the_name_of_a_ddm_instance.rst b/api-ref/source/apis_recommended/ddm_instances/modifying_the_name_of_a_ddm_instance.rst new file mode 100644 index 0000000..73b52be --- /dev/null +++ b/api-ref/source/apis_recommended/ddm_instances/modifying_the_name_of_a_ddm_instance.rst @@ -0,0 +1,156 @@ +:original_name: ddm_api_01_0020.html + +.. _ddm_api_01_0020: + +Modifying the Name of a DDM Instance +==================================== + +Function +-------- + +This API is used to modify the name of a DDM instance. + +Constraints +----------- + +None + +URI +--- + +PUT /v1/{project_id}/instances/{instance_id}/modify-name + +.. table:: **Table 1** Path parameters + + =========== ========= ====== ================================== + Parameter Mandatory Type Description + =========== ========= ====== ================================== + project_id Yes String Project ID of a tenant in a region + instance_id Yes String DDM instance ID + =========== ========= ====== ================================== + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | X-Auth-Token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 3** Request body parameters + + +-----------------+-----------------+-----------------+-------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=======================================================+ + | name | Yes | String | Name of a DDM instance, which: | + | | | | | + | | | | - Can include 4 to 64 characters. | + | | | | - Must start with a letter. | + | | | | - Can contain only letters, digits, and hyphens (-). | + | | | | | + | | | | Minimum length: 4 characters | + | | | | | + | | | | Maximum length: 64 characters | + +-----------------+-----------------+-----------------+-------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 4** Response body parameters + + ========= ====== ================= + Parameter Type Description + ========= ====== ================= + name String DDM instance name + ========= ====== ================= + +**Status code: 400** + +.. table:: **Table 5** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +**Status code: 500** + +.. table:: **Table 6** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +Example Request +--------------- + +.. code-block:: text + + PUT https://{endpoint}/v1/{project_id}/instances/{instance_id}/modify-name + + { + "name" : "DDM-test-04" + } + +Example Response +---------------- + +**Status code: 200** + +OK + +.. code-block:: + + { + "name" : "DDM-test-04" + } + +**Status code: 400** + +bad request + +.. code-block:: + + { + "externalMessage" : "Parameter error.", + "errCode" : "DBS.280001" + } + +**Status code: 500** + +server error + +.. code-block:: + + { + "externalMessage" : "Server failure.", + "errCode" : "DBS.200412" + } + +Status Codes +------------ + +=========== ============ +Status Code Description +=========== ============ +200 OK +400 bad request +500 server error +=========== ============ + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_recommended/ddm_instances/modifying_the_read_policy_of_the_associated_db_instance.rst b/api-ref/source/apis_recommended/ddm_instances/modifying_the_read_policy_of_the_associated_db_instance.rst new file mode 100644 index 0000000..ae64953 --- /dev/null +++ b/api-ref/source/apis_recommended/ddm_instances/modifying_the_read_policy_of_the_associated_db_instance.rst @@ -0,0 +1,153 @@ +:original_name: ddm_api_01_0080.html + +.. _ddm_api_01_0080: + +Modifying the Read Policy of the Associated DB Instance +======================================================= + +Function +-------- + +This API is used to modify the read policy of the DB instance associated with a DDM instance. + +Constraints +----------- + +Make sure that the associated RDS instances are available and not undergoing other operations. + +URI +--- + +PUT /v2/{project_id}/instances/{instance_id}/action/read-write-strategy + +.. table:: **Table 1** Path parameters + + =========== ========= ====== ================================== + Parameter Mandatory Type Description + =========== ========= ====== ================================== + project_id Yes String Project ID of a tenant in a region + instance_id Yes String DDM instance ID + =========== ========= ====== ================================== + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | X-Auth-Token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 3** Request body parameters + + +-------------+-----------+--------+---------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=============+===========+========+===============================================================+ + | read_weight | Yes | Object | Read weights of the primary DB instance and its read replicas | + +-------------+-----------+--------+---------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 4** Response body parameters + + =========== ======= =================================== + Parameter Type Description + =========== ======= =================================== + success Boolean Whether the operation is successful + instance_id String DDM instance ID + =========== ======= =================================== + +**Status code: 400** + +.. table:: **Table 5** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +**Status code: 500** + +.. table:: **Table 6** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +Example Request +--------------- + +.. code-block:: text + + PUT https://{endpoint}/v2/{project_id}/instances/{instance_id}/action/read-write-strategy + + { + "read_weight" : { + "395298ae6fb9496d95939ed556474983in01" : 60, + "38ef52c365a14b7caeb7333137900e96in01" : 50 + } + } + +Example Response +---------------- + +**Status code: 200** + +ok + +.. code-block:: + + { + "success" : true, + "instance_id" : "175f5aff-xxxx-xxxx-xxxx-d0858982bbec" + } + +**Status code: 400** + +bad request + +.. code-block:: + + { + "externalMessage" : "Parameter error.", + "errCode" : "DBS.280001" + } + +**Status code: 500** + +server error + +.. code-block:: + + { + "externalMessage" : "Server failure.", + "errCode" : "DBS.200412" + } + +Status Codes +------------ + +=========== ============ +Status Code Description +=========== ============ +200 ok +400 bad request +500 server error +=========== ============ + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_recommended/ddm_instances/modifying_the_security_group_of_a_ddm_instance.rst b/api-ref/source/apis_recommended/ddm_instances/modifying_the_security_group_of_a_ddm_instance.rst new file mode 100644 index 0000000..74d4001 --- /dev/null +++ b/api-ref/source/apis_recommended/ddm_instances/modifying_the_security_group_of_a_ddm_instance.rst @@ -0,0 +1,148 @@ +:original_name: ddm_api_01_0021.html + +.. _ddm_api_01_0021: + +Modifying the Security Group of a DDM Instance +============================================== + +Function +-------- + +This API is used to modify the security group of a DDM instance. + +Constraints +----------- + +None + +URI +--- + +PUT /v1/{project_id}/instances/{instance_id}/modify-security-group + +.. table:: **Table 1** Path parameters + + =========== ========= ====== ================================== + Parameter Mandatory Type Description + =========== ========= ====== ================================== + project_id Yes String Project ID of a tenant in a region + instance_id Yes String DDM instance ID + =========== ========= ====== ================================== + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | X-Auth-Token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 3** Request body parameters + + +-------------------+-----------+--------+---------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===================+===========+========+===============================================================================================================+ + | security_group_id | Yes | String | Security group ID. The default value is the original security group ID. You can change the value as required. | + +-------------------+-----------+--------+---------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 4** Response body parameters + + ================= ====== ================= + Parameter Type Description + ================= ====== ================= + security_group_id String Security group ID + ================= ====== ================= + +**Status code: 400** + +.. table:: **Table 5** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +**Status code: 500** + +.. table:: **Table 6** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +Example Request +--------------- + +.. code-block:: text + + PUT https://{endpoint}/v1/{project_id}/instances/{instance_id}/modify-security-group + + { + "security_group_id" : "035b70ed-319b-4086-9fd7-62a2e8548b2e" + } + +Example Response +---------------- + +**Status code: 200** + +OK + +.. code-block:: + + { + "security_group_id" : "035b70ed-319b-4086-9fd7-62a2e8548b2e" + } + +**Status code: 400** + +bad request + +.. code-block:: + + { + "externalMessage" : "Parameter error.", + "errCode" : "DBS.280001" + } + +**Status code: 500** + +server error + +.. code-block:: + + { + "externalMessage" : "Server failure.", + "errCode" : "DBS.200412" + } + +Status Codes +------------ + +=========== ============ +Status Code Description +=========== ============ +200 OK +400 bad request +500 server error +=========== ============ + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_recommended/ddm_instances/querying_ddm_engine_information.rst b/api-ref/source/apis_recommended/ddm_instances/querying_ddm_engine_information.rst new file mode 100644 index 0000000..46d33f7 --- /dev/null +++ b/api-ref/source/apis_recommended/ddm_instances/querying_ddm_engine_information.rst @@ -0,0 +1,201 @@ +:original_name: ddm_api_01_0015.html + +.. _ddm_api_01_0015: + +Querying DDM Engine Information +=============================== + +Function +-------- + +This API is used to query information about DDM engine. + +Constraints +----------- + +None + +URI +--- + +GET /v2/{project_id}/engines + +.. table:: **Table 1** Path parameters + + ========== ========= ====== ================================== + Parameter Mandatory Type Description + ========== ========= ====== ================================== + project_id Yes String Project ID of a tenant in a region + ========== ========= ====== ================================== + +.. table:: **Table 2** Query parameters + + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=======================================================================================================================================+ + | offset | No | Integer | Which page the server starts returning items. The start value cannot be less than **0**. The default value is **0**. | + | | | | | + | | | | Minimum value: **0** | + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | limit | No | Integer | Number of records displayed on each page. The value is greater than **0** and not greater than **128**. The default value is **128**. | + | | | | | + | | | | Minimum value: **1** | + | | | | | + | | | | Maximum value: **128** | + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 3** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | X-Auth-Token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 4** Response body parameters + + +--------------+---------------------------------------------------------------------------------------+----------------------------------------------+ + | Parameter | Type | Description | + +==============+=======================================================================================+==============================================+ + | engineGroups | Array of :ref:`EngineGroupsInfo ` objects | Information of available engines | + +--------------+---------------------------------------------------------------------------------------+----------------------------------------------+ + | offset | Integer | Which page the server starts returning items | + +--------------+---------------------------------------------------------------------------------------+----------------------------------------------+ + | limit | Integer | Number of records displayed on each page | + +--------------+---------------------------------------------------------------------------------------+----------------------------------------------+ + | total | Integer | Number of engine versions | + +--------------+---------------------------------------------------------------------------------------+----------------------------------------------+ + +.. _ddm_api_01_0015__response_enginegroupsinfo: + +.. table:: **Table 5** EngineGroupsInfo + + +------------+-----------------------------------------------------------------------------------+----------------+ + | Parameter | Type | Description | + +============+===================================================================================+================+ + | id | String | Engine ID | + +------------+-----------------------------------------------------------------------------------+----------------+ + | name | String | Engine name | + +------------+-----------------------------------------------------------------------------------+----------------+ + | version | String | Engine version | + +------------+-----------------------------------------------------------------------------------+----------------+ + | supportAzs | Array of :ref:`SupportAzsInfo ` objects | AZs | + +------------+-----------------------------------------------------------------------------------+----------------+ + +.. _ddm_api_01_0015__response_supportazsinfo: + +.. table:: **Table 6** SupportAzsInfo + + ========= ======= =================================== + Parameter Type Description + ========= ======= =================================== + code String AZ code + name String AZ name + favored Boolean Whether the current AZ is supported + ========= ======= =================================== + +**Status code: 400** + +.. table:: **Table 7** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +**Status code: 500** + +.. table:: **Table 8** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +Example Request +--------------- + +.. code-block:: text + + GET https://{endpoint}/v2/{project_id}/engines + +Example Response +---------------- + +**Status code: 200** + +OK + +.. code-block:: + + { + "engineGroups" : [ { + "id" : "b6907aa2-aacb-3ac9-9782-b90b152d456c,", + "name" : "ddm,", + "version" : "3.0.8,", + "supportAzs" : [ { + "code" : "az1xahz,", + "name" : "az1xahz,", + "favored" : false + }, { + "code" : "az2xahz,", + "name" : "az2xahz,", + "favored" : true + } ] + } ], + "offset" : "0,", + "limit" : "128,", + "total" : 1 + } + +**Status code: 400** + +bad request + +.. code-block:: + + { + "externalMessage" : "Parameter error.", + "errCode" : "DBS.280001" + } + +**Status code: 500** + +server error + +.. code-block:: + + { + "externalMessage" : "Server failure.", + "errCode" : "DBS.200412" + } + +Status Codes +------------ + +=========== ============ +Status Code Description +=========== ============ +200 OK +400 bad request +500 server error +=========== ============ + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_recommended/ddm_instances/querying_ddm_instances.rst b/api-ref/source/apis_recommended/ddm_instances/querying_ddm_instances.rst new file mode 100644 index 0000000..cdaf2c1 --- /dev/null +++ b/api-ref/source/apis_recommended/ddm_instances/querying_ddm_instances.rst @@ -0,0 +1,235 @@ +:original_name: ddm_api_01_0018.html + +.. _ddm_api_01_0018: + +Querying DDM Instances +====================== + +Function +-------- + +This API is used to query DDM instances. + +Constraints +----------- + +None + +URI +--- + +GET /v1/{project_id}/instances + +.. table:: **Table 1** Path parameters + + ========== ========= ====== ================================== + Parameter Mandatory Type Description + ========== ========= ====== ================================== + project_id Yes String Project ID of a tenant in a region + ========== ========= ====== ================================== + +.. table:: **Table 2** Query parameters + + +-----------------+-----------------+-----------------+--------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================================+ + | offset | No | Integer | Which page the server starts returning items. The start value cannot be less than **0**. The default value is **0**. | + | | | | | + | | | | Minimum value: **0** | + +-----------------+-----------------+-----------------+--------------------------------------------------------------------------------------------------------------------------------------+ + | limit | No | Integer | Number of records displayed on each page. The value is greater than **0** and not greater than **128**. The default value is **10**. | + | | | | | + | | | | Minimum value: **1** | + | | | | | + | | | | Maximum value: **128** | + +-----------------+-----------------+-----------------+--------------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 3** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | X-Auth-Token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 4** Response body parameters + + +--------------+-------------------------------------------------------------------------------------------------------+-------------------------------------+ + | Parameter | Type | Description | + +==============+=======================================================================================================+=====================================+ + | instances | Array of :ref:`ShowInstanceBeanResponse ` objects | DDM instance information | + +--------------+-------------------------------------------------------------------------------------------------------+-------------------------------------+ + | instance_num | Integer | Number of DDM instances of a tenant | + +--------------+-------------------------------------------------------------------------------------------------------+-------------------------------------+ + | page_no | Integer | Current page | + +--------------+-------------------------------------------------------------------------------------------------------+-------------------------------------+ + | page_size | Integer | Data records on the current page | + +--------------+-------------------------------------------------------------------------------------------------------+-------------------------------------+ + | total_record | Integer | Total records | + +--------------+-------------------------------------------------------------------------------------------------------+-------------------------------------+ + | total_page | Integer | Total pages | + +--------------+-------------------------------------------------------------------------------------------------------+-------------------------------------+ + +.. _ddm_api_01_0018__response_showinstancebeanresponse: + +.. table:: **Table 5** ShowInstanceBeanResponse + + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=======================+=======================================================================================================================================+ + | id | String | DDM instance ID | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | status | String | DDM instance status | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | name | String | Name of the created DDM instance | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | created | String | Time when the DDM instance is created. The time must be in the format of yyyy-mm-dd Thh:mm:ssZ. | + | | | | + | | | **T** indicates the separator between the calendar and the hourly notation of time. **Z** indicates Coordinated Universal Time (UTC). | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | updated | String | Time when the DDM instance is last updated, which is in the same format as **created**. | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | available_zone | String | AZ name | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | vpc_id | String | VPC ID | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | subnet_id | String | Subnet ID | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | security_group_id | String | Security group ID | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | node_count | Integer | Number of nodes | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | access_ip | String | Address for accessing the DDM instance | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | access_port | String | Port for accessing the DDM instance | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | core_count | String | Number of CPUs | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | ram_capacity | String | Memory size in GB | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | error_msg | String | Response message. This parameter is not returned if no abnormality occurs. | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | node_status | String | Node status | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | enterprise_project_id | String | Enterprise project ID | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | project_id | String | Project ID of a tenant in a region | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | engine_version | String | Engine version (core version) | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | order_id | String | Order ID, which is returned if the DDM instance is billed on a yearly/monthly basis | + +-----------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------+ + +**Status code: 400** + +.. table:: **Table 6** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +**Status code: 500** + +.. table:: **Table 7** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +Example Request +--------------- + +.. code-block:: text + + GET https://{endpoint}/v1/{project_id}/instances?offset={offset}&limit={limit} + +Example Response +---------------- + +**Status code: 200** + +OK + +.. code-block:: + + { + "instance_num" : 26, + "instances" : [ { + "id" : "73f27bb0b26d4a79a9b0c58a4c700c4fin09,", + "status" : "RUNNING,", + "name" : "ddm-36c7,", + "created" : "2021-12-14T07:46:22+0000,", + "updated" : "2021-12-14T10:11:22+0000,", + "available_zone" : "az1xahz,", + "vpc_id" : "1d9441c5-1a4b-431d-9edb-bf3564a83e74,", + "subnet_id" : "20c2d83c-755b-42a2-846a-4688eb35d1a7,", + "security_group_id" : "fbdff89d-32fe-45a4-832b-115ac4bfaac9,", + "node_count" : "1,", + "access_ip" : "192.168.23.143", + "access_port" : "5066,", + "core_count" : "2,", + "ram_capacity" : "4,", + "node_status" : "RUNNING,", + "enterprise_project_id" : "0,", + "project_id" : "055d9f4ee780d4d42f96c01c1bc3c50c,", + "engine_version" : "3.0.8" + } ], + "page_size" : 1, + "total_record" : 26, + "total_page" : 26, + "page_no" : 3 + } + +**Status code: 400** + +bad request + +.. code-block:: + + { + "externalMessage" : "Parameter error.", + "errCode" : "DBS.280001" + } + +**Status code: 500** + +server error + +.. code-block:: + + { + "externalMessage" : "Server failure.", + "errCode" : "DBS.200412" + } + +Status Codes +------------ + +=========== ============ +Status Code Description +=========== ============ +200 OK +400 bad request +500 server error +=========== ============ + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_recommended/ddm_instances/querying_ddm_node_classes_available_in_an_az.rst b/api-ref/source/apis_recommended/ddm_instances/querying_ddm_node_classes_available_in_an_az.rst new file mode 100644 index 0000000..ea6bd20 --- /dev/null +++ b/api-ref/source/apis_recommended/ddm_instances/querying_ddm_node_classes_available_in_an_az.rst @@ -0,0 +1,264 @@ +:original_name: ddm_api_01_0016.html + +.. _ddm_api_01_0016: + +Querying DDM Node Classes Available in an AZ +============================================ + +Function +-------- + +This API is used to query DDM node classes available in an AZ. + +Constraints +----------- + +None + +URI +--- + +GET /v2/{project_id}/flavors + +.. table:: **Table 1** Path parameters + + ========== ========= ====== ================================== + Parameter Mandatory Type Description + ========== ========= ====== ================================== + project_id Yes String Project ID of a tenant in a region + ========== ========= ====== ================================== + +.. table:: **Table 2** Query parameters + + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=======================================================================================================================================+ + | engine_id | Yes | String | Engine ID, which can be obtained by calling the API for querying DDM engine information. | + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | offset | No | Integer | Which page the server starts returning items. The start value cannot be less than **0**. The default value is **0**. | + | | | | | + | | | | Minimum value: **0** | + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | limit | No | Integer | Number of records displayed on each page. The value is greater than **0** and not greater than **128**. The default value is **128**. | + | | | | | + | | | | Minimum value: **1** | + | | | | | + | | | | Maximum value: **128** | + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 3** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | X-Auth-Token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 4** Response body parameters + + +---------------------+-----------------------------------------------------------------------------------------------------+----------------------------+ + | Parameter | Type | Description | + +=====================+=====================================================================================================+============================+ + | computeFlavorGroups | Array of :ref:`ComputeFlavorGroupsInfo ` objects | Compute flavor information | + +---------------------+-----------------------------------------------------------------------------------------------------+----------------------------+ + +.. _ddm_api_01_0016__response_computeflavorgroupsinfo: + +.. table:: **Table 5** ComputeFlavorGroupsInfo + + +----------------+-----------------------------------------------------------------------------------+--------------------------------------------------------------------------+ + | Parameter | Type | Description | + +================+===================================================================================+==========================================================================+ + | groupType | String | Compute resource architecture type. The value can be **x86** or **ARM**. | + +----------------+-----------------------------------------------------------------------------------+--------------------------------------------------------------------------+ + | computeFlavors | Array of :ref:`ComputeFlavors ` objects | Compute flavors | + +----------------+-----------------------------------------------------------------------------------+--------------------------------------------------------------------------+ + | offset | Integer | Which page the server starts returning items | + +----------------+-----------------------------------------------------------------------------------+--------------------------------------------------------------------------+ + | limit | Integer | Number of records displayed on each page | + +----------------+-----------------------------------------------------------------------------------+--------------------------------------------------------------------------+ + | total | Integer | Total number of compute flavors | + +----------------+-----------------------------------------------------------------------------------+--------------------------------------------------------------------------+ + +.. _ddm_api_01_0016__response_computeflavors: + +.. table:: **Table 6** ComputeFlavors + + +----------------+--------+--------------------------------------------------------------------------+ + | Parameter | Type | Description | + +================+========+==========================================================================+ + | id | String | Flavor ID | + +----------------+--------+--------------------------------------------------------------------------+ + | typeCode | String | Resource type code | + +----------------+--------+--------------------------------------------------------------------------+ + | code | String | VM flavor types recorded in DDM | + +----------------+--------+--------------------------------------------------------------------------+ + | iaasCode | String | VM flavor types recorded by the IaaS layer | + +----------------+--------+--------------------------------------------------------------------------+ + | cpu | String | Number of CPUs | + +----------------+--------+--------------------------------------------------------------------------+ + | mem | String | Memory size, in GB | + +----------------+--------+--------------------------------------------------------------------------+ + | maxConnections | String | Maximum number of connections | + +----------------+--------+--------------------------------------------------------------------------+ + | serverType | String | Compute resource type | + +----------------+--------+--------------------------------------------------------------------------+ + | architecture | String | Compute resource architecture type. The value can be **x86** or **ARM**. | + +----------------+--------+--------------------------------------------------------------------------+ + | azStatus | Object | AZ status | + +----------------+--------+--------------------------------------------------------------------------+ + | regionStatus | String | Region status | + +----------------+--------+--------------------------------------------------------------------------+ + | groupType | String | Compute resource architecture type. The value can be **x86** or **ARM**. | + +----------------+--------+--------------------------------------------------------------------------+ + | dbType | String | Engine type | + +----------------+--------+--------------------------------------------------------------------------+ + | extendFields | Object | Extension field for storing AZ information | + +----------------+--------+--------------------------------------------------------------------------+ + +**Status code: 400** + +.. table:: **Table 7** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +**Status code: 500** + +.. table:: **Table 8** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +Example Request +--------------- + +.. code-block:: text + + GET https://{endpoint}/v2/{project_id}/flavors?engine_id={engine_id} + +Example Response +---------------- + +**Status code: 200** + +OK + +.. code-block:: + + { + "computeFlavorGroups" : [ { + "offset" : "0,", + "limit" : "128,", + "total" : "6,", + "groupType" : "X86,", + "computeFlavors" : [ { + "id" : "8f2e696c-a9c1-30bd-af90-25522bc67606,", + "typeCode" : "cloudtype.resource.type.ddm,", + "code" : "ddm.c3.large.2,", + "iaasCode" : "c3.large.2,", + "cpu" : "2,", + "mem" : "4,", + "maxConnections" : "null,", + "serverType" : "KVM,", + "architecture" : "X86,", + "azStatus" : { + "az2.dc0" : "unsupported,", + "az3xahz" : "normal,", + "az2xahz" : "normal,", + "az1xahz" : "normal" + }, + "regionStatus" : "normal,", + "dbType" : "DDM,", + "extendFields" : { + "azCode" : "az2.dc0,az3xahz,az2xahz,az1xahz,", + "azDescription" : "az2.dc0,az3xahz,az2xahz,az1xahz" + } + } ] + }, { + "offset" : "0,", + "limit" : "128,", + "total" : "3,", + "groupType" : "ARM,", + "computeFlavors" : [ { + "id" : "87a6cb8b-0c56-3e16-a91d-9b680a1f8b7f,", + "typeCode" : "cloudtype.resource.type.ddm,", + "code" : "ddm.rc6.large.2,", + "iaasCode" : "kc1.xlarge.2,", + "cpu" : "4,", + "mem" : "8,", + "maxConnections" : "null,", + "serverType" : "KVM,", + "architecture" : "ARM,", + "azStatus" : { + "az2.dc0" : "unsupported,", + "az3xahz" : "normal,", + "az2xahz" : "normal,", + "az1xahz" : "normal" + }, + "regionStatus" : "normal,", + "groupType" : "null,", + "dbType" : "DDM,", + "extendFields" : { + "azCode" : "az2.dc0,az3xahz,az2xahz,az1xahz,", + "azDescription" : "az2.dc0,az3xahz,az2xahz,az1xahz" + } + } ] + } ] + } + +**Status code: 400** + +bad request + +.. code-block:: + + { + "externalMessage" : "Parameter error.", + "errCode" : "DBS.280001" + } + +**Status code: 500** + +server error + +.. code-block:: + + { + "externalMessage" : "Server failure.", + "errCode" : "DBS.200412" + } + +Status Codes +------------ + +=========== ============ +Status Code Description +=========== ============ +200 OK +400 bad request +500 server error +=========== ============ + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_recommended/ddm_instances/querying_details_of_a_ddm_instance.rst b/api-ref/source/apis_recommended/ddm_instances/querying_details_of_a_ddm_instance.rst new file mode 100644 index 0000000..c76e9ab --- /dev/null +++ b/api-ref/source/apis_recommended/ddm_instances/querying_details_of_a_ddm_instance.rst @@ -0,0 +1,217 @@ +:original_name: ddm_api_01_0019.html + +.. _ddm_api_01_0019: + +Querying Details of a DDM Instance +================================== + +Function +-------- + +This API is used to query details about a DDM instance. + +Constraints +----------- + +None + +URI +--- + +GET /v1/{project_id}/instances/{instance_id} + +.. table:: **Table 1** Path parameters + + =========== ========= ====== ================================== + Parameter Mandatory Type Description + =========== ========= ====== ================================== + project_id Yes String Project ID of a tenant in a region + instance_id Yes String DDM instance ID + =========== ========= ====== ================================== + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | X-Auth-Token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 3** Response body parameters + + +-----------------------+---------------------------------------------------------------------------------------------+----------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=============================================================================================+============================================================================+ + | id | String | DDM instance ID | + +-----------------------+---------------------------------------------------------------------------------------------+----------------------------------------------------------------------------+ + | status | String | DDM instance status | + +-----------------------+---------------------------------------------------------------------------------------------+----------------------------------------------------------------------------+ + | name | String | DDM instance name | + +-----------------------+---------------------------------------------------------------------------------------------+----------------------------------------------------------------------------+ + | created | String | Time when the DDM instance is created | + +-----------------------+---------------------------------------------------------------------------------------------+----------------------------------------------------------------------------+ + | updated | String | Time when the DDM instance is last updated | + +-----------------------+---------------------------------------------------------------------------------------------+----------------------------------------------------------------------------+ + | available_zone | String | Name of the AZ where the DDM instance is located | + +-----------------------+---------------------------------------------------------------------------------------------+----------------------------------------------------------------------------+ + | vpc_id | String | VPC ID | + +-----------------------+---------------------------------------------------------------------------------------------+----------------------------------------------------------------------------+ + | subnet_id | String | Subnet ID | + +-----------------------+---------------------------------------------------------------------------------------------+----------------------------------------------------------------------------+ + | security_group_id | String | Security group ID | + +-----------------------+---------------------------------------------------------------------------------------------+----------------------------------------------------------------------------+ + | node_count | Integer | Number of nodes | + +-----------------------+---------------------------------------------------------------------------------------------+----------------------------------------------------------------------------+ + | access_ip | String | Address for accessing the DDM instance | + +-----------------------+---------------------------------------------------------------------------------------------+----------------------------------------------------------------------------+ + | access_port | String | Port for accessing the DDM instance | + +-----------------------+---------------------------------------------------------------------------------------------+----------------------------------------------------------------------------+ + | node_status | String | Node status | + +-----------------------+---------------------------------------------------------------------------------------------+----------------------------------------------------------------------------+ + | core_count | String | Number of CPUs | + +-----------------------+---------------------------------------------------------------------------------------------+----------------------------------------------------------------------------+ + | ram_capacity | String | Memory size in GB | + +-----------------------+---------------------------------------------------------------------------------------------+----------------------------------------------------------------------------+ + | error_msg | String | Response message. This parameter is not returned if no abnormality occurs. | + +-----------------------+---------------------------------------------------------------------------------------------+----------------------------------------------------------------------------+ + | project_id | String | Project ID | + +-----------------------+---------------------------------------------------------------------------------------------+----------------------------------------------------------------------------+ + | order_id | String | Order ID. No value is returned when a pay-per-use instance is created. | + +-----------------------+---------------------------------------------------------------------------------------------+----------------------------------------------------------------------------+ + | enterprise_project_id | String | Enterprise project ID | + +-----------------------+---------------------------------------------------------------------------------------------+----------------------------------------------------------------------------+ + | engine_version | String | Engine version (core version) | + +-----------------------+---------------------------------------------------------------------------------------------+----------------------------------------------------------------------------+ + | nodes | Array of :ref:`GetDetailfNodesInfo ` objects | Node information | + +-----------------------+---------------------------------------------------------------------------------------------+----------------------------------------------------------------------------+ + | admin_user_name | String | Username of the administrator. The username: | + | | | | + | | | - Can include 1 to 32 characters. | + | | | - Must start with a letter. | + | | | - Can contain only letters, digits, and underscores (_). | + +-----------------------+---------------------------------------------------------------------------------------------+----------------------------------------------------------------------------+ + +.. _ddm_api_01_0019__response_getdetailfnodesinfo: + +.. table:: **Table 4** GetDetailfNodesInfo + + ========= ====== =================================== + Parameter Type Description + ========= ====== =================================== + status String Status of the DDM instance node + port String Port of the DDM instance node + ip String IP address of the DDM instance node + ========= ====== =================================== + +**Status code: 400** + +.. table:: **Table 5** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +**Status code: 500** + +.. table:: **Table 6** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +Example Request +--------------- + +.. code-block:: text + + GET https://{endpoint}/v1/{project_id}/instances/{instance_id} + +Example Response +---------------- + +**Status code: 200** + +OK + +.. code-block:: + + { + "nodes" : [ { + "status" : "RUNNING", + "port" : 5066, + "ip" : "192.168.0.160" + } ], + "id" : "1f5c9fd6cd984056ba89c8c87cc03278in09,", + "status" : "RUNNING,", + "name" : "BUG-ddm2-lixingqiao-test,", + "created" : "2021-11-09T03:30:01+0000,", + "updated" : "2021-12-15T09:12:58+0000,", + "available_zone" : "az1xahz,", + "vpc_id" : "cfaa4024-0603-4aba-81d4-2203b4ad26fb,", + "subnet_id" : "48f270ef-af70-4ad9-bb1c-c28dd5b37f93,", + "security_group_id" : "bc28ef93-0083-4652-bce6-381e14284db6,", + "node_count" : "1,", + "access_ip" : "192.168.0.160,", + "access_port" : "5066,", + "core_count" : "2,", + "ram_capacity" : "8,", + "node_status" : "RUNNING,", + "enterprise_project_id" : "0,", + "project_id" : "070c071d8e80d58c2f42c0121b10cf9f,", + "engine_version" : "3.0.6", + "admin_user_name" : "root" + } + +**Status code: 400** + +bad request + +.. code-block:: + + { + "externalMessage" : "Parameter error.", + "errCode" : "DBS.280001" + } + +**Status code: 500** + +server error + +.. code-block:: + + { + "externalMessage" : "Server failure.", + "errCode" : "DBS.200412" + } + +Status Codes +------------ + +=========== ============ +Status Code Description +=========== ============ +200 OK +400 bad request +500 server error +=========== ============ + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_recommended/ddm_instances/querying_details_of_a_ddm_instance_node.rst b/api-ref/source/apis_recommended/ddm_instances/querying_details_of_a_ddm_instance_node.rst new file mode 100644 index 0000000..df116df --- /dev/null +++ b/api-ref/source/apis_recommended/ddm_instances/querying_details_of_a_ddm_instance_node.rst @@ -0,0 +1,154 @@ +:original_name: ddm_api_01_0083.html + +.. _ddm_api_01_0083: + +Querying Details of a DDM Instance Node +======================================= + +Function +-------- + +This API is used to query details of a DDM instance node. + +Constraints +----------- + +None + +URI +--- + +GET /v1/{project_id}/instances/{instance_id}/nodes/{node_id} + +.. table:: **Table 1** Path parameters + + =========== ========= ====== ================================== + Parameter Mandatory Type Description + =========== ========= ====== ================================== + project_id Yes String Project ID of a tenant in a region + instance_id Yes String DDM instance ID + node_id Yes String DDM instance node ID + =========== ========= ====== ================================== + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | X-Auth-Token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 3** Response body parameters + + =============== ====== ========================================== + Parameter Type Description + =============== ====== ========================================== + status String Node status + name String Node name + node_id String Node ID + private_ip String Private IP address of the node + floating_ip String Floating IP address of the node + server_id String VM ID + subnet_name String Subnet name + datavolume_id String Data disk ID + res_subnet_ip String IP address provided by the resource subnet + systemvolume_id String System disk ID + =============== ====== ========================================== + +**Status code: 400** + +.. table:: **Table 4** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +**Status code: 500** + +.. table:: **Table 5** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +Example Request +--------------- + +.. code-block:: text + + GET https://{endpoint}/v1/{project_id}/instances/{instance_id}/nodes/{node_id} + +Example Response +---------------- + +**Status code: 200** + +OK + +.. code-block:: + + { + "status" : "normal,", + "name" : "BUG-ddm2-lixingqiao-test_node_01,", + "node_id" : "4a2b97b7f5e3462c9c78aae93b46ed83no09,", + "private_ip" : "192.168.0.160,", + "floating_ip" : "100.65.78.158,", + "server_id" : "8bd4d0bd-f63e-489a-95b6-50351f9657e6,", + "datavolume_id" : "30ade9fb-26de-4d1f-af08-c376974b9d86,", + "res_subnet_ip" : "172.16.15.224,", + "systemvolume_id" : "88d7de55-f886-4929-ae7c-04d842959700" + } + +**Status code: 400** + +bad request + +.. code-block:: + + { + "externalMessage" : "Parameter error.", + "errCode" : "DBS.280001" + } + +**Status code: 500** + +server error + +.. code-block:: + + { + "externalMessage" : "Server failure.", + "errCode" : "DBS.200412" + } + +Status Codes +------------ + +=========== ============ +Status Code Description +=========== ============ +200 OK +400 bad request +500 server error +=========== ============ + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_recommended/ddm_instances/querying_nodes_of_a_ddm_instance.rst b/api-ref/source/apis_recommended/ddm_instances/querying_nodes_of_a_ddm_instance.rst new file mode 100644 index 0000000..6253ef3 --- /dev/null +++ b/api-ref/source/apis_recommended/ddm_instances/querying_nodes_of_a_ddm_instance.rst @@ -0,0 +1,179 @@ +:original_name: ddm_api_01_0082.html + +.. _ddm_api_01_0082: + +Querying Nodes of a DDM Instance +================================ + +Function +-------- + +This API is used to query nodes of a DDM instance. + +Constraints +----------- + +None + +URI +--- + +GET /v1/{project_id}/instances/{instance_id}/nodes + +.. table:: **Table 1** Path parameters + + =========== ========= ====== ================================== + Parameter Mandatory Type Description + =========== ========= ====== ================================== + project_id Yes String Project ID of a tenant in a region + instance_id Yes String DDM instance ID + =========== ========= ====== ================================== + +.. table:: **Table 2** Query parameters + + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=======================================================================================================================================+ + | offset | No | Integer | Which page the server starts returning items. The start value cannot be less than **0**. The default value is **0**. | + | | | | | + | | | | Minimum value: **0** | + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | limit | No | Integer | Number of records displayed on each page. The value is greater than **0** and not greater than **128**. The default value is **128**. | + | | | | | + | | | | Minimum value: **1** | + | | | | | + | | | | Maximum value: **128** | + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 3** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | X-Auth-Token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 4** Response body parameters + + +-----------+-----------------------------------------------------------------------+-----------------------------------------------+ + | Parameter | Type | Description | + +===========+=======================================================================+===============================================+ + | nodes | Array of :ref:`NodeList ` objects | Instance node information | + +-----------+-----------------------------------------------------------------------+-----------------------------------------------+ + | offset | Integer | Which page the server starts returning items. | + +-----------+-----------------------------------------------------------------------+-----------------------------------------------+ + | limit | Integer | Number of records displayed on each page | + +-----------+-----------------------------------------------------------------------+-----------------------------------------------+ + | total | Integer | Number of DDM instance nodes | + +-----------+-----------------------------------------------------------------------+-----------------------------------------------+ + +.. _ddm_api_01_0082__response_nodelist: + +.. table:: **Table 5** NodeList + + ========= ====== =========== + Parameter Type Description + ========= ====== =========== + port String Port + status String Node status + node_id String Node ID + ip String ip + ========= ====== =========== + +**Status code: 400** + +.. table:: **Table 6** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +**Status code: 500** + +.. table:: **Table 7** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +Example Request +--------------- + +.. code-block:: text + + GET https://{endpoint}/v1/{project_id}/instances/{instance_id}/nodes + +Example Response +---------------- + +**Status code: 200** + +OK + +.. code-block:: + + { + "nodes" : [ { + "port" : "5066,", + "status" : "normal,", + "node_id" : "4a2b97b7f5e3462c9c78aae93b46ed83no09,", + "ip" : "192.168.0.160" + } ], + "offset" : "DBS.280001", + "limit" : 128, + "total" : 1 + } + +**Status code: 400** + +bad request + +.. code-block:: + + { + "externalMessage" : "Parameter error.", + "errCode" : "DBS.280001" + } + +**Status code: 500** + +server error + +.. code-block:: + + { + "externalMessage" : "Server failure.", + "errCode" : "DBS.200412" + } + +Status Codes +------------ + +=========== ============ +Status Code Description +=========== ============ +200 OK +400 bad request +500 server error +=========== ============ + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_recommended/ddm_instances/querying_parameters_of_a_specified_ddm_instance.rst b/api-ref/source/apis_recommended/ddm_instances/querying_parameters_of_a_specified_ddm_instance.rst new file mode 100644 index 0000000..2965844 --- /dev/null +++ b/api-ref/source/apis_recommended/ddm_instances/querying_parameters_of_a_specified_ddm_instance.rst @@ -0,0 +1,190 @@ +:original_name: ddm_api_01_0084.html + +.. _ddm_api_01_0084: + +Querying Parameters of a Specified DDM Instance +=============================================== + +Function +-------- + +This API is used to query parameters of a specified DDM instance. + +Constraints +----------- + +None + +URI +--- + +GET /v3/{project_id}/instances/{instance_id}/configurations + +.. table:: **Table 1** Path parameters + + =========== ========= ====== ================================== + Parameter Mandatory Type Description + =========== ========= ====== ================================== + project_id Yes String Project ID of a tenant in a region + instance_id Yes String DDM instance ID + =========== ========= ====== ================================== + +.. table:: **Table 2** Query parameters + + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=======================================================================================================================================+ + | offset | No | Integer | Which page the server starts returning items. The start value cannot be less than **0**. The default value is **0**. | + | | | | | + | | | | Minimum value: **0** | + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | limit | No | Integer | Number of records displayed on each page. The value is greater than **0** and not greater than **128**. The default value is **128**. | + | | | | | + | | | | Minimum value: **1** | + | | | | | + | | | | Maximum value: **128** | + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 3** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | X-Language | No | String | Language. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | X-Auth-Token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 4** Response body parameters + + +-------------------------+-----------------------------------------------------------------------------------------------------------+----------------------------------------------------+ + | Parameter | Type | Description | + +=========================+===========================================================================================================+====================================================+ + | updated | String | Time when DDM instance parameters are last updated | + +-------------------------+-----------------------------------------------------------------------------------------------------------+----------------------------------------------------+ + | configuration_parameter | Array of :ref:`ConfigurationParameterList ` objects | Information about DDM instance parameters | + +-------------------------+-----------------------------------------------------------------------------------------------------------+----------------------------------------------------+ + | offset | Integer | Which page the server starts returning items | + +-------------------------+-----------------------------------------------------------------------------------------------------------+----------------------------------------------------+ + | limit | Integer | Number of records displayed on each page | + +-------------------------+-----------------------------------------------------------------------------------------------------------+----------------------------------------------------+ + | total | Integer | Total collections | + +-------------------------+-----------------------------------------------------------------------------------------------------------+----------------------------------------------------+ + +.. _ddm_api_01_0084__response_configurationparameterlist: + +.. table:: **Table 5** ConfigurationParameterList + + ============ ====== ========================================== + Parameter Type Description + ============ ====== ========================================== + name String Parameter name + value String Parameter value + need_restart String Whether the instance needs to be restarted + read_only String Whether the parameter is read-only + value_range String Parameter value range + data_type String Parameter type + description String Parameter description + ============ ====== ========================================== + +**Status code: 400** + +.. table:: **Table 6** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +**Status code: 500** + +.. table:: **Table 7** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +Example Request +--------------- + +.. code-block:: text + + GET https://{endpoint}/v3/{project_id}/instances/{instance_id}/configurations + +Example Response +---------------- + +**Status code: 200** + +OK + +.. code-block:: + + { + "updated" : "2021-11-09 03:26:52", + "configuration_parameter" : [ { + "name" : "temp_table_size_limit,", + "value" : "1000000,", + "need_restart" : "0,", + "read_only" : "0,", + "value_range" : "500000-2000000000,", + "data_type" : "integer,", + "description" : "Maximum size of the temporary table." + } ], + "offset" : "0,", + "limit" : "128,", + "total" : 22 + } + +**Status code: 400** + +bad request + +.. code-block:: + + { + "externalMessage" : "Parameter error.", + "errCode" : "DBS.280001" + } + +**Status code: 500** + +server error + +.. code-block:: + + { + "externalMessage" : "Server failure.", + "errCode" : "DBS.200412" + } + +Status Codes +------------ + +=========== ============ +Status Code Description +=========== ============ +200 OK +400 bad request +500 server error +=========== ============ + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_recommended/ddm_instances/reloading_table_data.rst b/api-ref/source/apis_recommended/ddm_instances/reloading_table_data.rst new file mode 100644 index 0000000..9757cf3 --- /dev/null +++ b/api-ref/source/apis_recommended/ddm_instances/reloading_table_data.rst @@ -0,0 +1,126 @@ +:original_name: ddm_api_01_0024.html + +.. _ddm_api_01_0024: + +Reloading Table Data +==================== + +Function +-------- + +This API is used to reload table data of the destination DDM instance for cross-region DR. + +Constraints +----------- + +None + +URI +--- + +POST /v1/{project_id}/instances/{instance_id}/reload-config + +.. table:: **Table 1** Path parameters + + =========== ========= ====== ================================== + Parameter Mandatory Type Description + =========== ========= ====== ================================== + project_id Yes String Project ID of a tenant in a region + instance_id Yes String DDM instance ID + =========== ========= ====== ================================== + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | X-Auth-Token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 400** + +.. table:: **Table 3** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +**Status code: 500** + +.. table:: **Table 4** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +Example Request +--------------- + +.. code-block:: text + + POST https://{endpoint}/v1/{project_id}/instances/{instance_id}/reload_config + + { } + +Example Response +---------------- + +**Status code: 200** + +ok + +.. code-block:: + + { } + +**Status code: 400** + +bad request + +.. code-block:: + + { + "externalMessage" : "Parameter error.", + "errCode" : "DBS.280001" + } + +**Status code: 500** + +server error + +.. code-block:: + + { + "externalMessage" : "Server failure.", + "errCode" : "DBS.200412" + } + +Status Codes +------------ + +=========== ============ +Status Code Description +=========== ============ +200 ok +400 bad request +500 server error +=========== ============ + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_recommended/ddm_instances/restarting_a_ddm_instance.rst b/api-ref/source/apis_recommended/ddm_instances/restarting_a_ddm_instance.rst new file mode 100644 index 0000000..bad4f3b --- /dev/null +++ b/api-ref/source/apis_recommended/ddm_instances/restarting_a_ddm_instance.rst @@ -0,0 +1,172 @@ +:original_name: ddm_api_01_0023.html + +.. _ddm_api_01_0023: + +Restarting a DDM Instance +========================= + +Function +-------- + +This API is used to restart a DDM instance. + +Constraints +----------- + +None + +URI +--- + +POST /v1/{project_id}/instances/{instance_id}/action + +.. table:: **Table 1** Path parameters + + =========== ========= ====== ================================== + Parameter Mandatory Type Description + =========== ========= ====== ================================== + project_id Yes String Project ID of a tenant in a region + instance_id Yes String DDM instance ID + =========== ========= ====== ================================== + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | X-Auth-Token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 3** Request body parameters + + +-----------+-----------+--------------------------------------------------------------------------------+---------------------------+ + | Parameter | Mandatory | Type | Description | + +===========+===========+================================================================================+===========================+ + | restart | No | :ref:`RestarInstanceInfo ` object | Restart-related parameter | + +-----------+-----------+--------------------------------------------------------------------------------+---------------------------+ + +.. _ddm_api_01_0023__request_restarinstanceinfo: + +.. table:: **Table 4** RestarInstanceInfo + + +-----------------+-----------------+-----------------+-----------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=====================================================+ + | type | No | String | Restart type, which can be **soft** or **hard**. | + | | | | | + | | | | - **soft**: Only the process is restarted. | + | | | | - **hard**: The instance VM is forcibly restarted. | + | | | | | + | | | | Enumerated values: | + | | | | | + | | | | - **soft** | + | | | | - **hard** | + +-----------------+-----------------+-----------------+-----------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 5** Response body parameters + + ============ ====== ================= + Parameter Type Description + ============ ====== ================= + instanceId String DDM instance ID + instanceName String DDM instance name + jobId String Task ID + ============ ====== ================= + +**Status code: 400** + +.. table:: **Table 6** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +**Status code: 500** + +.. table:: **Table 7** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +Example Request +--------------- + +.. code-block:: text + + POST https://{endpoint}/v1/{project_id}/instances/{instance_id}/action + + { + "restart" : { + "type" : "soft" + } + } + +Example Response +---------------- + +**Status code: 200** + +ok + +.. code-block:: + + { + "instanceId" : "28e8841d0b9c4f6a9a30742ee60e1068in09", + "instanceName" : "BUG-ddm-fb88-test", + "jobId" : "1eb697c0-1842-43a3-8671-f562d0385cb9" + } + +**Status code: 400** + +bad request + +.. code-block:: + + { + "externalMessage" : "Parameter error.", + "errCode" : "DBS.280001" + } + +**Status code: 500** + +server error + +.. code-block:: + + { + "externalMessage" : "Server failure.", + "errCode" : "DBS.200412" + } + +Status Codes +------------ + +=========== ============ +Status Code Description +=========== ============ +200 ok +400 bad request +500 server error +=========== ============ + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_recommended/ddm_instances/scaling_in_a_ddm_instance.rst b/api-ref/source/apis_recommended/ddm_instances/scaling_in_a_ddm_instance.rst new file mode 100644 index 0000000..7b4c172 --- /dev/null +++ b/api-ref/source/apis_recommended/ddm_instances/scaling_in_a_ddm_instance.rst @@ -0,0 +1,167 @@ +:original_name: ddm_api_01_0026.html + +.. _ddm_api_01_0026: + +Scaling in a DDM instance +========================= + +Function +-------- + +This API is used to remove nodes from a specified DDM instance. + +Constraints +----------- + +Make sure that the associated RDS instances are available and not undergoing other operations. Yearly/Monthly instances do not support this operation. + +URI +--- + +POST /v2/{project_id}/instances/{instance_id}/action/reduce + +.. table:: **Table 1** Path parameters + + =========== ========= ====== ================================== + Parameter Mandatory Type Description + =========== ========= ====== ================================== + project_id Yes String Project ID of a tenant in a region + instance_id Yes String DDM instance ID + =========== ========= ====== ================================== + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | X-Auth-Token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 3** Request body parameters + + +-------------+-----------+---------+---------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=============+===========+=========+=================================================================================================================================+ + | node_number | Yes | Integer | Number of nodes to be removed. The maximum value is the instance nodes minus 1. | + +-------------+-----------+---------+---------------------------------------------------------------------------------------------------------------------------------+ + | group_id | No | String | Group ID, which specifies the group that is scaled out. This parameter must be specified if there are more than one node group. | + +-------------+-----------+---------+---------------------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 4** Response body parameters + + ============ ====== ================= + Parameter Type Description + ============ ====== ================= + instanceId String DDM instance ID + instanceName String DDM instance name + jobId String Task ID + ============ ====== ================= + +**Status code: 400** + +.. table:: **Table 5** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +**Status code: 500** + +.. table:: **Table 6** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +Example Request +--------------- + +- Example request 1 + + .. code-block:: text + + POST https://{endpoint}/v2/{project_id}/instances/{instance_id}/action/reduce + + { + "node_number" : 2 + } + +- Example request 2 where the DDM instance has more than one group + + .. code-block:: text + + POST https://{endpoint}/v2/{project_id}/instances/{instance_id}/action/reduce + + { + "group_id" : "f080abf2010d45118068c28c8958f5fcgr09", + "node_number" : 1 + } + +Example Response +---------------- + +**Status code: 200** + +ok + +.. code-block:: + + { + "instanceId" : "28e8841d0b9c4f6a9a30742ee60e1068in09", + "instanceName" : "BUG-ddm-fb88-test", + "jobId" : "1eb697c0-1842-43a3-8671-f562d0385cb9" + } + +**Status code: 400** + +bad request + +.. code-block:: + + { + "externalMessage" : "Parameter error.", + "errCode" : "DBS.280001" + } + +**Status code: 500** + +server error + +.. code-block:: + + { + "externalMessage" : "Server failure.", + "errCode" : "DBS.200412" + } + +Status Codes +------------ + +=========== ============ +Status Code Description +=========== ============ +200 ok +400 bad request +500 server error +=========== ============ + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_recommended/ddm_instances/scaling_out_a_ddm_instance.rst b/api-ref/source/apis_recommended/ddm_instances/scaling_out_a_ddm_instance.rst new file mode 100644 index 0000000..7a35ec3 --- /dev/null +++ b/api-ref/source/apis_recommended/ddm_instances/scaling_out_a_ddm_instance.rst @@ -0,0 +1,185 @@ +:original_name: ddm_api_01_0025.html + +.. _ddm_api_01_0025: + +Scaling Out a DDM Instance +========================== + +Function +-------- + +This API is used to scale out a specified DDM instance. + +Constraints +----------- + +Make sure that the associated RDS instances are available and not undergoing other operations. + +URI +--- + +POST /v2/{project_id}/instances/{instance_id}/action/enlarge + +.. table:: **Table 1** Path parameters + + =========== ========= ====== ================================== + Parameter Mandatory Type Description + =========== ========= ====== ================================== + project_id Yes String Project ID of a tenant in a region + instance_id Yes String DDM instance ID + =========== ========= ====== ================================== + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | X-Auth-Token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 3** Request body parameters + + +-------------+-----------+---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=============+===========+=========+====================================================================================================================================================================================================================================================================================================+ + | flavor_id | Yes | String | Flavor ID of the VM for deploying the DDM instance that is to be scaled out | + +-------------+-----------+---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | node_number | Yes | Integer | Number of nodes to be added | + +-------------+-----------+---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | group_id | No | String | Group ID, which specifies the node group that is scaled out. This parameter must be specified if there are more than one node group. | + +-------------+-----------+---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | is_auto_pay | No | Boolean | Whether the order is automatically paid. This parameter does not affect the billing mode of automatic renewal. **true**: indicates that the order is automatically paid from your account. **false**: indicates that the order is manually paid from your account. The default value is **false**. | + +-------------+-----------+---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 4** Response body parameters + + ============ ====== ================= + Parameter Type Description + ============ ====== ================= + instanceId String DDM instance ID + instanceName String DDM instance name + jobId String Task ID + ============ ====== ================= + +**Status code: 400** + +.. table:: **Table 5** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +**Status code: 500** + +.. table:: **Table 6** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +Example Request +--------------- + +- Example request 1 + + .. code-block:: text + + POST https://{endpoint}/v2/{project_id}/instances/{instance_id}/action/enlarge + + { + "flavor_id" : "8f2e696c-a9c1-30bd-af90-25522bc67606", + "node_number" : 1 + } + +- Example request 2: Scaling out a DDM instance that has more than one group + + .. code-block:: text + + POST https://{endpoint}/v2/{project_id}/instances/{instance_id}/action/enlarge + + { + "flavor_id" : "8f2e696c-a9c1-30bd-af90-25522bc67606", + "group_id" : "f080abf2010d45118068c28c8958f5fcgr09", + "node_number" : 1 + } + +- Example request 3: Scaling out a yearly/monthly instance for which parameter **is_auto_pay** is set to **true** + + .. code-block:: text + + POST https://{endpoint}/v2/{project_id}/instances/{instance_id}/action/enlarge + + { + "flavor_id" : "8f2e696c-a9c1-30bd-af90-25522bc67606", + "node_number" : 1, + "is_auto_pay" : true + } + +Example Response +---------------- + +**Status code: 200** + +ok + +.. code-block:: + + { + "instanceId" : "28e8841d0b9c4f6a9a30742ee60e1068in09", + "instanceName" : "BUG-ddm-fb88-test", + "jobId" : "1eb697c0-1842-43a3-8671-f562d0385cb9" + } + +**Status code: 400** + +bad request + +.. code-block:: + + { + "externalMessage" : "Parameter error.", + "errCode" : "DBS.280001" + } + +**Status code: 500** + +server error + +.. code-block:: + + { + "externalMessage" : "Server failure.", + "errCode" : "DBS.200412" + } + +Status Codes +------------ + +=========== ============ +Status Code Description +=========== ============ +200 ok +400 bad request +500 server error +=========== ============ + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_recommended/ddm_instances/synchronizing_data_node_information.rst b/api-ref/source/apis_recommended/ddm_instances/synchronizing_data_node_information.rst new file mode 100644 index 0000000..c84a4b7 --- /dev/null +++ b/api-ref/source/apis_recommended/ddm_instances/synchronizing_data_node_information.rst @@ -0,0 +1,140 @@ +:original_name: ddm_api_01_0081.html + +.. _ddm_api_01_0081: + +Synchronizing Data Node Information +=================================== + +Function +-------- + +This API is used to synchronize configuration information of all data nodes that are associated with a DDM instance. + +Constraints +----------- + +None + +URI +--- + +POST /v1/{project_id}/instances/{instance_id}/rds/sync + +.. table:: **Table 1** Path parameters + + =========== ========= ====== ================================== + Parameter Mandatory Type Description + =========== ========= ====== ================================== + project_id Yes String Project ID of a tenant in a region + instance_id Yes String DDM instance ID + =========== ========= ====== ================================== + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | X-Auth-Token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 3** Response body parameters + + ========== ====== =============== + Parameter Type Description + ========== ====== =============== + instanceId String DDM instance ID + jobId String Task ID + ========== ====== =============== + +**Status code: 400** + +.. table:: **Table 4** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +**Status code: 500** + +.. table:: **Table 5** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +Example Request +--------------- + +.. code-block:: text + + POST https://{endpoint}/v1/{project_id}/instances/{instance_id}/rds/sync + + None + +Example Response +---------------- + +**Status code: 200** + +OK + +.. code-block:: + + { + "instanceId" : "1f5c9fd6cd984056ba89c8c87cc03278in09", + "jobId" : "6f1334ca-faa6-479e-837f-f3219192675e" + } + +**Status code: 400** + +bad request + +.. code-block:: + + { + "externalMessage" : "Parameter error.", + "errCode" : "DBS.280001" + } + +**Status code: 500** + +server error + +.. code-block:: + + { + "externalMessage" : "Server failure.", + "errCode" : "DBS.200412" + } + +Status Codes +------------ + +=========== ============ +Status Code Description +=========== ============ +200 OK +400 bad request +500 server error +=========== ============ + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_recommended/index.rst b/api-ref/source/apis_recommended/index.rst new file mode 100644 index 0000000..212b38a --- /dev/null +++ b/api-ref/source/apis_recommended/index.rst @@ -0,0 +1,20 @@ +:original_name: ddm_api_02_0000.html + +.. _ddm_api_02_0000: + +APIs (Recommended) +================== + +- :ref:`DDM Instances ` +- :ref:`Schemas ` +- :ref:`DDM Accounts ` +- :ref:`Monitoring ` + +.. toctree:: + :maxdepth: 1 + :hidden: + + ddm_instances/index + schemas/index + ddm_accounts/index + monitoring/index diff --git a/api-ref/source/apis_recommended/monitoring/index.rst b/api-ref/source/apis_recommended/monitoring/index.rst new file mode 100644 index 0000000..9923ace --- /dev/null +++ b/api-ref/source/apis_recommended/monitoring/index.rst @@ -0,0 +1,14 @@ +:original_name: ddm_api_01_0089.html + +.. _ddm_api_01_0089: + +Monitoring +========== + +- :ref:`Monitoring Slow Query Logs ` + +.. toctree:: + :maxdepth: 1 + :hidden: + + monitoring_slow_query_logs diff --git a/api-ref/source/apis_recommended/monitoring/monitoring_slow_query_logs.rst b/api-ref/source/apis_recommended/monitoring/monitoring_slow_query_logs.rst new file mode 100644 index 0000000..5d999bd --- /dev/null +++ b/api-ref/source/apis_recommended/monitoring/monitoring_slow_query_logs.rst @@ -0,0 +1,186 @@ +:original_name: ddm_api_01_0090.html + +.. _ddm_api_01_0090: + +Monitoring Slow Query Logs +========================== + +Function +-------- + +This API is used to query the SQL statements that take a long time to execute on the DDM instance within a specified time range. + +Constraints +----------- + +None + +URI +--- + +GET /v2/{project_id}/instances/{instance_id}/slowlog + +.. table:: **Table 1** Path parameters + + =========== ========= ====== =============== + Parameter Mandatory Type Description + =========== ========= ====== =============== + project_id Yes String Project ID + instance_id Yes String DDM instance ID + =========== ========= ====== =============== + +.. table:: **Table 2** Query parameters + + +-----------+-----------+--------+-----------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===========+===========+========+=============================================================================================================================+ + | curPage | Yes | String | Which page the server starts returning items. The start value cannot be less than **0**. | + +-----------+-----------+--------+-----------------------------------------------------------------------------------------------------------------------------+ + | perPage | Yes | String | Number of records displayed on each page | + +-----------+-----------+--------+-----------------------------------------------------------------------------------------------------------------------------+ + | startDate | Yes | String | Start time in UTC, accurate to milliseconds | + +-----------+-----------+--------+-----------------------------------------------------------------------------------------------------------------------------+ + | endDate | Yes | String | End time in UTC, accurate to milliseconds The interval between the start time and the end time must be no more than 7 days. | + +-----------+-----------+--------+-----------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 3** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | X-Auth-Token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 4** Response body parameters + + +-------------+-----------------------------------------------------------------------------+-----------------------------------+ + | Parameter | Type | Description | + +=============+=============================================================================+===================================+ + | totalRecord | Integer | Number of slow query logs | + +-------------+-----------------------------------------------------------------------------+-----------------------------------+ + | slowLogList | Array of :ref:`SlowLogList ` objects | Information about slow query logs | + +-------------+-----------------------------------------------------------------------------+-----------------------------------+ + +.. _ddm_api_01_0090__response_slowloglist: + +.. table:: **Table 5** SlowLogList + + +--------------+--------+---------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +==============+========+===============================================================================================================+ + | users | String | Username of the DDM account for executing the slow SQL statement | + +--------------+--------+---------------------------------------------------------------------------------------------------------------+ + | database | String | Name of the schema where the slow SQL statement is executed | + +--------------+--------+---------------------------------------------------------------------------------------------------------------+ + | querySample | String | Syntax for executing the slow SQL statement | + +--------------+--------+---------------------------------------------------------------------------------------------------------------+ + | logTime | String | Time when the slow SQL statement starts to be executed | + +--------------+--------+---------------------------------------------------------------------------------------------------------------+ + | time | String | Time for a SQL statement to execute, accurate to milliseconds | + +--------------+--------+---------------------------------------------------------------------------------------------------------------+ + | shards | String | Name of the physical shard | + +--------------+--------+---------------------------------------------------------------------------------------------------------------+ + | rowsExamined | String | Number of rows affected by the SQL statements that take a long time to execute | + +--------------+--------+---------------------------------------------------------------------------------------------------------------+ + | host | String | Client IP address. This IP address may involve personal data. Anonymizing the IP address data is recommended. | + +--------------+--------+---------------------------------------------------------------------------------------------------------------+ + +**Status code: 400** + +.. table:: **Table 6** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +**Status code: 500** + +.. table:: **Table 7** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +Example Request +--------------- + +.. code-block:: text + + GET https://{endpoint}/v2/{project_id}/instances/{instance_id}/slowlog?curPage={curPage}&perPage={perPage}&startDate={startDate}&endDate={endDate} + +Example Response +---------------- + +**Status code: 200** + +OK + +.. code-block:: + + { + "totalRecord" : 2, + "slowLogList" : [ { + "users" : "testddm", + "database" : "test1", + "querySample" : "select id, sleep(3) from test", + "logTime" : "2021-04-26T02:40:21", + "time" : "12002", + "shards" : "test1_0000", + "rowsExamined" : "4", + "host" : "192.168.16.18" + } ] + } + +**Status code: 400** + +bad request + +.. code-block:: + + { + "externalMessage" : "Parameter error.", + "errCode" : "DBS.280001" + } + +**Status code: 500** + +server error + +.. code-block:: + + { + "externalMessage" : "Server failure.", + "errCode" : "DBS.200412" + } + +Status Codes +------------ + +=========== ============ +Status Code Description +=========== ============ +200 OK +400 bad request +500 server error +=========== ============ + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_recommended/schemas/creating_a_schema.rst b/api-ref/source/apis_recommended/schemas/creating_a_schema.rst new file mode 100644 index 0000000..f03fe9d --- /dev/null +++ b/api-ref/source/apis_recommended/schemas/creating_a_schema.rst @@ -0,0 +1,231 @@ +:original_name: ddm_16_0001.html + +.. _ddm_16_0001: + +Creating a Schema +================= + +Function +-------- + +This API is used to create a schema. + +Constraints +----------- + +Before creating a schema, ensure that you have associated RDS instances with your DDM instance and that the RDS instances are not associated with other DDM instances. + +URI +--- + +POST /v1/{project_id}/instances/{instance_id}/databases + +.. table:: **Table 1** Path parameters + + =========== ========= ====== ================================== + Parameter Mandatory Type Description + =========== ========= ====== ================================== + project_id Yes String Project ID of a tenant in a region + instance_id Yes String DDM instance ID + =========== ========= ====== ================================== + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | X-Auth-Token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +.. table:: **Table 3** Request body parameters + + +-----------+-----------+------------------------------------------------------------------------------------------+--------------------+ + | Parameter | Mandatory | Type | Description | + +===========+===========+==========================================================================================+====================+ + | databases | Yes | Array of :ref:`CreateDatabaseDetail ` objects | Schema information | + +-----------+-----------+------------------------------------------------------------------------------------------+--------------------+ + +.. _ddm_16_0001__request_createdatabasedetail: + +.. table:: **Table 4** CreateDatabaseDetail + + +-----------------+-----------------+----------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+==============================================================================================+===================================================================================================================================================================================================+ + | name | Yes | String | Schema name, which: | + | | | | | + | | | | - Can include 2 to 48 characters. | + | | | | - Must start with a letter. | + | | | | - Contains only lowercase letters, digits, and underscores (_). | + | | | | - Cannot contain keywords **information_schema**, **mysql, performance_schema**, or **sys**. | + | | | | | + | | | | Minimum length: 2 characters | + | | | | | + | | | | Maximum length: 48 characters | + +-----------------+-----------------+----------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | shard_mode | Yes | String | Sharding mode of the schema. The value can be: | + | | | | | + | | | | - **cluster**: indicates that the schema is in sharded mode. | + | | | | - **single**: indicates that the schema is in unsharded mode. | + | | | | | + | | | | Enumerated values: | + | | | | | + | | | | - **cluster** | + | | | | - **single** | + +-----------------+-----------------+----------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | shard_number | Yes | Integer | Number of shards in the same working mode | + | | | | | + | | | | - If **shard_unit** is not empty, the value is the product of **shard_unit** multiplied by the associated RDS instances. | + | | | | - If **shard_unit** is left blank, the value must be greater than the number of associated RDS instances and less than or equal to the product of the associated RDS instances multiplied by 64. | + +-----------------+-----------------+----------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | shard_unit | No | Integer | Number of shards per RDS instance This parameter is optional. | + | | | | | + | | | | - The value is **1** if the schema is unsharded. | + | | | | - The value ranges from **1** to **64** if the schema is sharded. | + | | | | | + | | | | Minimum value: **1** | + | | | | | + | | | | Maximum value: **64** | + +-----------------+-----------------+----------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | used_rds | Yes | Array of :ref:`DatabaseInstabcesParam ` objects | RDS instances associated with the schema | + +-----------------+-----------------+----------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _ddm_16_0001__request_databaseinstabcesparam: + +.. table:: **Table 5** DatabaseInstabcesParam + + +---------------+-----------+--------+--------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===============+===========+========+========================================================+ + | id | Yes | String | ID of the RDS instance associated with the schema | + +---------------+-----------+--------+--------------------------------------------------------+ + | adminUser | Yes | String | Username for logging in to the associated RDS instance | + +---------------+-----------+--------+--------------------------------------------------------+ + | adminPassword | Yes | String | Password for logging in to the associated RDS instance | + +---------------+-----------+--------+--------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 6** Response body parameters + + +-----------+-------------------------------------------------------------------------------------------------------------+--------------------+ + | Parameter | Type | Description | + +===========+=============================================================================================================+====================+ + | databases | Array of :ref:`CreateDatabaseDetailResponses ` objects | Schema information | + +-----------+-------------------------------------------------------------------------------------------------------------+--------------------+ + +.. _ddm_16_0001__response_createdatabasedetailresponses: + +.. table:: **Table 7** CreateDatabaseDetailResponses + + ========= ====== =========== + Parameter Type Description + ========= ====== =========== + name String Schema name + ========= ====== =========== + +**Status code: 400** + +.. table:: **Table 8** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +**Status code: 500** + +.. table:: **Table 9** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +Example Request +--------------- + +The following is an example request of creating a schema and associating it with an existing DDM account. + +.. code-block:: text + + POST https://{endpoint}/v1/{project_id}/instances/{instance_id}/databases + + { + "databases" : [ { + "name" : "mytestdb", + "shard_mode" : "cluster", + "shard_number" : 8, + "shard_unit" : 8, + "used_rds" : [ { + "id" : "f296c394f13f48449d715bf99af07e59in01", + "adminUser" : "root", + "adminPassword" : "PassWord_234" + } ] + } ] + } + +Example Response +---------------- + +**Status code: 200** + +OK + +.. code-block:: + + { + "databases" : [ { + "name" : "mytestdb" + } ] + } + +**Status code: 400** + +bad request + +.. code-block:: + + { + "externalMessage" : "Parameter error.", + "errCode" : "DBS.280001" + } + +**Status code: 500** + +server error + +.. code-block:: + + { + "externalMessage" : "Server failure.", + "errCode" : "DBS.200412" + } + +Status Codes +------------ + +=========== ============ +Status Code Description +=========== ============ +200 OK +400 bad request +500 server error +=========== ============ + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_recommended/schemas/deleting_a_schema.rst b/api-ref/source/apis_recommended/schemas/deleting_a_schema.rst new file mode 100644 index 0000000..2e79e67 --- /dev/null +++ b/api-ref/source/apis_recommended/schemas/deleting_a_schema.rst @@ -0,0 +1,151 @@ +:original_name: ddm_api_01_0031.html + +.. _ddm_api_01_0031: + +Deleting a Schema +================= + +Function +-------- + +This API is used to delete a schema to release all its resources. + +Constraints +----------- + +None + +URI +--- + +DELETE /v1/{project_id}/instances/{instance_id}/databases/{ddm_dbname} + +.. table:: **Table 1** Path parameters + + +-------------+-----------+--------+-------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=============+===========+========+=============================================================+ + | project_id | Yes | String | Project ID | + +-------------+-----------+--------+-------------------------------------------------------------+ + | instance_id | Yes | String | DDM instance ID | + +-------------+-----------+--------+-------------------------------------------------------------+ + | ddm_dbname | Yes | String | Name of the schema to be queried, which is case-insensitive | + +-------------+-----------+--------+-------------------------------------------------------------+ + +.. table:: **Table 2** Query parameters + + +-----------------+-----------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+==========================================================================================================================+ + | delete_rds_data | No | String | Whether data stored on the associated DB instances is deleted. The value can be: | + | | | | | + | | | | - **true**: indicates that the data stored on the associated DB instances is deleted. | + | | | | - **false**: indicates that the data stored on the associated DB instances is not deleted. It is left blank by default. | + | | | | | + | | | | Enumerated values: | + | | | | | + | | | | - **true** | + | | | | - **false** | + +-----------------+-----------------+-----------------+--------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 3** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | X-Auth-Token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 400** + +.. table:: **Table 4** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +**Status code: 500** + +.. table:: **Table 5** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +Example Request +--------------- + +- Request to delete a schema (including the data stored on associated DB instances) + + .. code-block:: text + + DELETE https://{endpoint}/v1/{project_id}/instances/{instance_id}/databases/{ddm_dbname}?delete_rds_data=true + +- Request to delete a schema (excluding the data stored on associated DB instances) + + .. code-block:: text + + DELETE https://{endpoint}/v1/{project_id}/instances/{instance_id}/databases/{ddm_dbname}?delete_rds_data=false + +Example Response +---------------- + +**Status code: 200** + +OK + +.. code-block:: + + { } + +**Status code: 400** + +bad request + +.. code-block:: + + { + "externalMessage" : "Parameter error.", + "errCode" : "DBS.280001" + } + +**Status code: 500** + +server error + +.. code-block:: + + { + "externalMessage" : "Server failure.", + "errCode" : "DBS.200412" + } + +Status Codes +------------ + +=========== ============ +Status Code Description +=========== ============ +200 OK +400 bad request +500 server error +=========== ============ + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_recommended/schemas/index.rst b/api-ref/source/apis_recommended/schemas/index.rst new file mode 100644 index 0000000..75b8fd3 --- /dev/null +++ b/api-ref/source/apis_recommended/schemas/index.rst @@ -0,0 +1,22 @@ +:original_name: ddm_api_01_0027.html + +.. _ddm_api_01_0027: + +Schemas +======= + +- :ref:`Creating a Schema ` +- :ref:`Querying Schemas ` +- :ref:`Querying Details of a Schema ` +- :ref:`Deleting a Schema ` +- :ref:`Querying DB Instances Available for Creating a Schema ` + +.. toctree:: + :maxdepth: 1 + :hidden: + + creating_a_schema + querying_schemas + querying_details_of_a_schema + deleting_a_schema + querying_db_instances_available_for_creating_a_schema diff --git a/api-ref/source/apis_recommended/schemas/querying_db_instances_available_for_creating_a_schema.rst b/api-ref/source/apis_recommended/schemas/querying_db_instances_available_for_creating_a_schema.rst new file mode 100644 index 0000000..248823e --- /dev/null +++ b/api-ref/source/apis_recommended/schemas/querying_db_instances_available_for_creating_a_schema.rst @@ -0,0 +1,215 @@ +:original_name: ddm_api_01_0100.html + +.. _ddm_api_01_0100: + +Querying DB Instances Available for Creating a Schema +===================================================== + +Function +-------- + +This API is used to query DB instances that can be used for creating a schema. + +Constraints +----------- + +None + +URI +--- + +GET /v1/{project_id}/instances/{instance_id}/rds + +.. table:: **Table 1** Path parameters + + =========== ========= ====== ================================== + Parameter Mandatory Type Description + =========== ========= ====== ================================== + project_id Yes String Project ID of a tenant in a region + instance_id Yes String DDM instance ID + =========== ========= ====== ================================== + +.. table:: **Table 2** Query parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+========================================================================================================================================+ + | offset | No | Integer | Which page the server starts returning items. The start value cannot be less than **0**. The default value is **0**. | + | | | | | + | | | | Minimum value: **0** | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------+ + | limit | No | Integer | Number of records displayed on each page. The value is greater than **0** and not greater than **1000**. The default value is **128**. | + | | | | | + | | | | Minimum value: **1** | + | | | | | + | | | | Maximum value: **1000** | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 3** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | X-Auth-Token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 4** Response body parameters + + +-----------+-------------------------------------------------------------------------------------------------+-----------------------------------------------------+ + | Parameter | Type | Description | + +===========+=================================================================================================+=====================================================+ + | instances | Array of :ref:`QueryAvailableRdsList ` objects | DB instances that can be used for creating a schema | + +-----------+-------------------------------------------------------------------------------------------------+-----------------------------------------------------+ + | offset | Integer | Which page the server starts returning items | + +-----------+-------------------------------------------------------------------------------------------------+-----------------------------------------------------+ + | limit | Integer | Number of records displayed on each page | + +-----------+-------------------------------------------------------------------------------------------------+-----------------------------------------------------+ + | total | Integer | Total collections | + +-----------+-------------------------------------------------------------------------------------------------+-----------------------------------------------------+ + +.. _ddm_api_01_0100__response_queryavailablerdslist: + +.. table:: **Table 5** QueryAvailableRdsList + + +-----------------------+---------+----------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+=========+==========================================================+ + | id | String | DB instance ID | + +-----------------------+---------+----------------------------------------------------------+ + | projectId | String | Project ID of the tenant that the DB instance belongs to | + +-----------------------+---------+----------------------------------------------------------+ + | status | String | DB instance status | + +-----------------------+---------+----------------------------------------------------------+ + | name | String | DB instance name | + +-----------------------+---------+----------------------------------------------------------+ + | engineName | String | Engine name of the DB instance | + +-----------------------+---------+----------------------------------------------------------+ + | engineSoftwareVersion | String | Engine version of the DB instance | + +-----------------------+---------+----------------------------------------------------------+ + | privateIp | String | Private IP address for connecting to the DB instance | + +-----------------------+---------+----------------------------------------------------------+ + | mode | String | DB instance type (primary/standby or single-node) | + +-----------------------+---------+----------------------------------------------------------+ + | port | Integer | Port for connecting to the DB instance | + +-----------------------+---------+----------------------------------------------------------+ + | azCode | String | AZ | + +-----------------------+---------+----------------------------------------------------------+ + | timeZone | String | Time zone | + +-----------------------+---------+----------------------------------------------------------+ + +**Status code: 400** + +.. table:: **Table 6** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +**Status code: 500** + +.. table:: **Table 7** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +Example Request +--------------- + +.. code-block:: text + + GET https://{endpoint}/v1/{project_id}/instances/{instance_id}/rds + +Example Response +---------------- + +**Status code: 200** + +OK + +.. code-block:: + + { + "instances" : [ { + "id" : "c6f68fed9e74478c8679479a07d7d568in01", + "projectId" : "055d9f4ee780d4d42f96c01c1bc3c50c", + "status" : "normal", + "name" : "test-ddm-no-delete-test01-00", + "engineName" : "mysql", + "engineSoftwareVersion" : 5.7, + "privateIp" : "192.168.23.97", + "mode" : "Ha", + "port" : 3306, + "azCode" : "az1xahzaz1xahz", + "timeZone" : "UTC+08: 00" + }, { + "id" : "337e2598c2a64cb5935079f85996731din01", + "projectId" : "055d9f4ee780d4d42f96c01c1bc3c50c", + "status" : "normal", + "name" : "test-ddm-no-delete-test01", + "engineName" : "mysql", + "engineSoftwareVersion" : 5.7, + "privateIp" : "192.168.23.221", + "mode" : "Ha", + "port" : 3306, + "azCode" : "az1xahzaz1xahz", + "timeZone" : "UTC+08: 00" + } ], + "offset" : 0, + "limit" : 6, + "total" : 2 + } + +**Status code: 400** + +bad request + +.. code-block:: + + { + "externalMessage" : "Parameter error.", + "errCode" : "DBS.280001" + } + +**Status code: 500** + +server error + +.. code-block:: + + { + "externalMessage" : "Server failure.", + "errCode" : "DBS.200412" + } + +Status Codes +------------ + +=========== ============ +Status Code Description +=========== ============ +200 OK +400 bad request +500 server error +=========== ============ + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_recommended/schemas/querying_details_of_a_schema.rst b/api-ref/source/apis_recommended/schemas/querying_details_of_a_schema.rst new file mode 100644 index 0000000..c346db1 --- /dev/null +++ b/api-ref/source/apis_recommended/schemas/querying_details_of_a_schema.rst @@ -0,0 +1,283 @@ +:original_name: ddm_api_01_0030.html + +.. _ddm_api_01_0030: + +Querying Details of a Schema +============================ + +Function +-------- + +This API is used to query details about a schema. + +Constraints +----------- + +None + +URI +--- + +GET /v1/{project_id}/instances/{instance_id}/databases/{ddm_dbname} + +.. table:: **Table 1** Path parameters + + +-------------+-----------+--------+-------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=============+===========+========+=============================================================+ + | project_id | Yes | String | Project ID | + +-------------+-----------+--------+-------------------------------------------------------------+ + | instance_id | Yes | String | DDM instance ID | + +-------------+-----------+--------+-------------------------------------------------------------+ + | ddm_dbname | Yes | String | Name of the schema to be queried, which is case-insensitive | + +-------------+-----------+--------+-------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 2** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | X-Auth-Token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 3** Response body parameters + + +-----------+-------------------------------------------------------------------------------------------+--------------------+ + | Parameter | Type | Description | + +===========+===========================================================================================+====================+ + | database | :ref:`GetDatabaseResponseBean ` object | Schema information | + +-----------+-------------------------------------------------------------------------------------------+--------------------+ + +.. _ddm_api_01_0030__response_getdatabaseresponsebean: + +.. table:: **Table 4** GetDatabaseResponseBean + + +-----------------------+-------------------------------------------------------------------------------------------+----------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+===========================================================================================+================================================================+ + | name | String | Schema name | + +-----------------------+-------------------------------------------------------------------------------------------+----------------------------------------------------------------+ + | created | String | Time when the schema is created | + +-----------------------+-------------------------------------------------------------------------------------------+----------------------------------------------------------------+ + | status | String | Schema status | + +-----------------------+-------------------------------------------------------------------------------------------+----------------------------------------------------------------+ + | updated | String | Time when the DDM instance is last updated | + +-----------------------+-------------------------------------------------------------------------------------------+----------------------------------------------------------------+ + | databases | Array of :ref:`GetDatabases ` objects | Sharding information of the schema | + +-----------------------+-------------------------------------------------------------------------------------------+----------------------------------------------------------------+ + | shard_mode | String | Sharding mode of the schema | + | | | | + | | | - **cluster**: indicates that the schema is in sharded mode. | + | | | - **single**: indicates that the schema is in unsharded mode. | + +-----------------------+-------------------------------------------------------------------------------------------+----------------------------------------------------------------+ + | shard_number | Integer | Number of shards in the same working mode | + +-----------------------+-------------------------------------------------------------------------------------------+----------------------------------------------------------------+ + | shard_unit | Integer | Number of shards per RDS instance | + +-----------------------+-------------------------------------------------------------------------------------------+----------------------------------------------------------------+ + | dataVips | Array of strings | IP address and port number for connecting to the schema | + +-----------------------+-------------------------------------------------------------------------------------------+----------------------------------------------------------------+ + | used_rds | Array of :ref:`GetDatabaseUsedRds ` objects | Associated RDS instances | + +-----------------------+-------------------------------------------------------------------------------------------+----------------------------------------------------------------+ + +.. _ddm_api_01_0030__response_getdatabases: + +.. table:: **Table 5** GetDatabases + + ========= ======= =================================================== + Parameter Type Description + ========= ======= =================================================== + dbslot Integer Number of shards + name String Shard name + status String Shard status + created String Time when the shard is created + updated String Time when the shard is last updated + id String ID of the RDS instance where the shard is located + idName String Name of the RDS instance where the shard is located + ========= ======= =================================================== + +.. _ddm_api_01_0030__response_getdatabaseusedrds: + +.. table:: **Table 6** GetDatabaseUsedRds + + +-----------+--------+----------------------------------------------------------------------------+ + | Parameter | Type | Description | + +===========+========+============================================================================+ + | id | String | Node ID of the associated RDS instance | + +-----------+--------+----------------------------------------------------------------------------+ + | name | String | Name of the associated RDS instance | + +-----------+--------+----------------------------------------------------------------------------+ + | status | String | Status of the associated RDS instance | + +-----------+--------+----------------------------------------------------------------------------+ + | error_msg | String | Response message. This parameter is not returned if no abnormality occurs. | + +-----------+--------+----------------------------------------------------------------------------+ + +**Status code: 400** + +.. table:: **Table 7** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +**Status code: 500** + +.. table:: **Table 8** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +Example Request +--------------- + +.. code-block:: text + + GET https://{endpoint} /v1/{project_id}/instances/{instance_id}/databases/{ddm_dbname} + +Example Response +---------------- + +**Status code: 200** + +OK + +.. code-block:: + + { + "database" : { + "name" : "db_7567", + "created" : 1604631243234, + "status" : "RUNNING", + "updated" : 1604631243234, + "databases" : [ { + "id" : "e70a82534a364492b795c5080e3a1591in01", + "name" : "db_7567_0000", + "idName" : "db_7567_0000", + "dbslot" : 0, + "status" : "RUNNING", + "created" : 1604631243234, + "updated" : 1604631243234 + }, { + "id" : "e70a82534a364492b795c5080e3a1591in01", + "name" : "db_7567_0001", + "idName" : "db_7567_0001", + "dbslot" : 1, + "status" : "RUNNING", + "created" : 1604631243234, + "updated" : 1604631243234 + }, { + "id" : "e70a82534a364492b795c5080e3a1591in01", + "name" : "db_7567_0002", + "idName" : "db_7567_0002", + "dbslot" : 2, + "status" : "RUNNING", + "created" : 1604631243234, + "updated" : 1604631243234 + }, { + "id" : "e70a82534a364492b795c5080e3a1591in01", + "name" : "db_7567_0003", + "idName" : "db_7567_0003", + "dbslot" : 3, + "status" : "RUNNING", + "created" : 1604631243234, + "updated" : 1604631243234 + }, { + "id" : "e70a82534a364492b795c5080e3a1591in01", + "name" : "db_7567_0004", + "idName" : "db_7567_0004", + "dbslot" : 4, + "status" : "RUNNING", + "created" : 1604631243234, + "updated" : 1604631243234 + }, { + "id" : "e70a82534a364492b795c5080e3a1591in01", + "name" : "db_7567_0005", + "idName" : "db_7567_0005", + "dbslot" : 5, + "status" : "RUNNING", + "created" : 1604631243234, + "updated" : 1604631243234 + }, { + "id" : "e70a82534a364492b795c5080e3a1591in01", + "name" : "db_7567_0006", + "idName" : "db_7567_0006", + "dbslot" : 6, + "status" : "RUNNING", + "created" : 1604631243234, + "updated" : 1604631243234 + }, { + "id" : "e70a82534a364492b795c5080e3a1591in01", + "name" : "db_7567_0007", + "idName" : "db_7567_0007", + "dbslot" : 7, + "status" : "RUNNING", + "created" : 1604631243234, + "updated" : 1604631243234 + } ], + "shard_mode" : "cluster", + "shard_number" : 8, + "shard_unit" : 8, + "dataVips" : [ { + "id" : "192.168.185.97:5066" + } ], + "used_rds" : [ { + "id" : "e70a82534a364492b795c5080e3a1591in01", + "name" : "rds-5338", + "status" : "normal" + } ] + } + } + +**Status code: 400** + +bad request + +.. code-block:: + + { + "externalMessage" : "Parameter error.", + "errCode" : "DBS.280001" + } + +**Status code: 500** + +server error + +.. code-block:: + + { + "externalMessage" : "Server failure.", + "errCode" : "DBS.200412" + } + +Status Codes +------------ + +=========== ============ +Status Code Description +=========== ============ +200 OK +400 bad request +500 server error +=========== ============ + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_recommended/schemas/querying_schemas.rst b/api-ref/source/apis_recommended/schemas/querying_schemas.rst new file mode 100644 index 0000000..2206fcc --- /dev/null +++ b/api-ref/source/apis_recommended/schemas/querying_schemas.rst @@ -0,0 +1,208 @@ +:original_name: ddm_api_01_0029.html + +.. _ddm_api_01_0029: + +Querying Schemas +================ + +Function +-------- + +This API is used to query schemas of a DDM instance. + +Constraints +----------- + +None + +URI +--- + +GET /v1/{project_id}/instances/{instance_id}/databases + +.. table:: **Table 1** Path parameters + + =========== ========= ====== =============== + Parameter Mandatory Type Description + =========== ========= ====== =============== + project_id Yes String Project ID + instance_id Yes String DDM instance ID + =========== ========= ====== =============== + +.. table:: **Table 2** Query parameters + + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+=======================================================================================================================================+ + | offset | No | Integer | Which page the server starts returning items. The start value cannot be less than **0**. The default value is **0**. | + | | | | | + | | | | Minimum value: **0** | + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------+ + | limit | No | Integer | Number of records displayed on each page. The value is greater than **0** and not greater than **128**. The default value is **128**. | + | | | | | + | | | | Minimum value: **1** | + | | | | | + | | | | Maximum value: **128** | + +-----------------+-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 3** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | X-Auth-Token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 4** Response body parameters + + +-----------+-------------------------------------------------------------------------------------+--------------------+ + | Parameter | Type | Description | + +===========+=====================================================================================+====================+ + | databases | Array of :ref:`GetDatabaseInfo ` objects | Schema information | + +-----------+-------------------------------------------------------------------------------------+--------------------+ + | total | Integer | Total records | + +-----------+-------------------------------------------------------------------------------------+--------------------+ + +.. _ddm_api_01_0029__response_getdatabaseinfo: + +.. table:: **Table 5** GetDatabaseInfo + + +-----------------------+-------------------------------------------------------------------------------------------+----------------------------------------------------------------+ + | Parameter | Type | Description | + +=======================+===========================================================================================+================================================================+ + | name | String | Schema name | + +-----------------------+-------------------------------------------------------------------------------------------+----------------------------------------------------------------+ + | shard_mode | String | Sharding mode of the schema | + | | | | + | | | - **cluster**: indicates that the schema is in sharded mode. | + | | | - **single**: indicates that the schema is in unsharded mode. | + +-----------------------+-------------------------------------------------------------------------------------------+----------------------------------------------------------------+ + | shard_number | Integer | Number of shards in the same working mode | + +-----------------------+-------------------------------------------------------------------------------------------+----------------------------------------------------------------+ + | status | String | Schema status | + +-----------------------+-------------------------------------------------------------------------------------------+----------------------------------------------------------------+ + | created | String | Time when the schema is created | + +-----------------------+-------------------------------------------------------------------------------------------+----------------------------------------------------------------+ + | used_rds | Array of :ref:`GetDatabaseUsedRds ` objects | RDS instances associated with the schema | + +-----------------------+-------------------------------------------------------------------------------------------+----------------------------------------------------------------+ + | shard_unit | Integer | Number of shards per RDS instance | + +-----------------------+-------------------------------------------------------------------------------------------+----------------------------------------------------------------+ + +.. _ddm_api_01_0029__response_getdatabaseusedrds: + +.. table:: **Table 6** GetDatabaseUsedRds + + +-----------+--------+----------------------------------------------------------------------------+ + | Parameter | Type | Description | + +===========+========+============================================================================+ + | id | String | Node ID of the associated RDS instance | + +-----------+--------+----------------------------------------------------------------------------+ + | name | String | Name of the associated RDS instance | + +-----------+--------+----------------------------------------------------------------------------+ + | status | String | Status of the associated RDS instance | + +-----------+--------+----------------------------------------------------------------------------+ + | error_msg | String | Response message. This parameter is not returned if no abnormality occurs. | + +-----------+--------+----------------------------------------------------------------------------+ + +**Status code: 400** + +.. table:: **Table 7** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +**Status code: 500** + +.. table:: **Table 8** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +Example Request +--------------- + +.. code-block:: text + + GET https://{endpoint}/v1/{project_id}/instances/{instance_id}/databases?offset={offset}&limit={limit} + +Example Response +---------------- + +**Status code: 200** + +OK + +.. code-block:: + + { + "databases" : [ { + "status" : "RUNNING,", + "created" : "1642063713625,", + "name" : "mytestdb170,", + "shard_mode" : "cluster,", + "shard_number" : "8,", + "shard_unit" : "8,", + "used_rds" : [ { + "id" : "c6f68fed9e74478c8679479a07d7d568in01", + "status" : "normal", + "name" : "rds-test" + } ] + } ], + "total" : 172 + } + +**Status code: 400** + +bad request + +.. code-block:: + + { + "externalMessage" : "Parameter error.", + "errCode" : "DBS.280001" + } + +**Status code: 500** + +server error + +.. code-block:: + + { + "externalMessage" : "Server failure.", + "errCode" : "DBS.200412" + } + +Status Codes +------------ + +=========== ============ +Status Code Description +=========== ============ +200 OK +400 bad request +500 server error +=========== ============ + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/apis_unavailable_soon/index.rst b/api-ref/source/apis_unavailable_soon/index.rst new file mode 100644 index 0000000..26a14fb --- /dev/null +++ b/api-ref/source/apis_unavailable_soon/index.rst @@ -0,0 +1,14 @@ +:original_name: ddm_api_02_0001.html + +.. _ddm_api_02_0001: + +APIs (Unavailable Soon) +======================= + +- :ref:`Monitoring the Read/Write Ratio ` + +.. toctree:: + :maxdepth: 1 + :hidden: + + monitoring_the_read_write_ratio diff --git a/api-ref/source/apis_unavailable_soon/monitoring_the_read_write_ratio.rst b/api-ref/source/apis_unavailable_soon/monitoring_the_read_write_ratio.rst new file mode 100644 index 0000000..e1c0ecf --- /dev/null +++ b/api-ref/source/apis_unavailable_soon/monitoring_the_read_write_ratio.rst @@ -0,0 +1,175 @@ +:original_name: ddm_api_01_0091.html + +.. _ddm_api_01_0091: + +Monitoring the Read/Write Ratio +=============================== + +Function +-------- + +This API is used to query reads and writes of a DDM instance in a specified time range. + +Constraints +----------- + +None + +URI +--- + +GET /v2/{project_id}/instances/{instance_id}/read-write-ratio + +.. table:: **Table 1** Path parameters + + =========== ========= ====== =============== + Parameter Mandatory Type Description + =========== ========= ====== =============== + project_id Yes String Project ID + instance_id Yes String DDM instance ID + =========== ========= ====== =============== + +.. table:: **Table 2** Query parameters + + +-----------+-----------+--------+------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +===========+===========+========+==============================================================================================================================+ + | curPage | Yes | String | Which page the server starts returning items. The start value cannot be less than **0**. | + +-----------+-----------+--------+------------------------------------------------------------------------------------------------------------------------------+ + | perPage | Yes | String | Number of records displayed on each page | + +-----------+-----------+--------+------------------------------------------------------------------------------------------------------------------------------+ + | startDate | Yes | String | Start time in UTC, accurate to milliseconds | + +-----------+-----------+--------+------------------------------------------------------------------------------------------------------------------------------+ + | endDate | Yes | String | End time in UTC, accurate to milliseconds The interval between the start time and the end time must be no more than 1 month. | + +-----------+-----------+--------+------------------------------------------------------------------------------------------------------------------------------+ + +Request Parameters +------------------ + +.. table:: **Table 3** Request header parameters + + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + | Parameter | Mandatory | Type | Description | + +=================+=================+=================+======================================================================================================================+ + | X-Auth-Token | Yes | String | User token | + | | | | | + | | | | It can be obtained by calling an IAM API. The value of **X-Subject-Token** in the response header is the user token. | + +-----------------+-----------------+-----------------+----------------------------------------------------------------------------------------------------------------------+ + +Response Parameters +------------------- + +**Status code: 200** + +.. table:: **Table 4** Response body parameters + + +--------------------+-------------------------------------------------------------------------------------------+-------------------------------------------+ + | Parameter | Type | Description | + +====================+===========================================================================================+===========================================+ + | totalRecord | Integer | Number of read/write ratio records on DDM | + +--------------------+-------------------------------------------------------------------------------------------+-------------------------------------------+ + | readWriteRatioList | Array of :ref:`ReadWriteRatioList ` objects | Read/Write ratio records on DDM | + +--------------------+-------------------------------------------------------------------------------------------+-------------------------------------------+ + +.. _ddm_api_01_0091__response_readwriteratiolist: + +.. table:: **Table 5** ReadWriteRatioList + + ============== ====== ============================================== + Parameter Type Description + ============== ====== ============================================== + schema String Schema name + table String Logical table name + readCount String Reads + writeCount String Writes + relationTables String Associated table + lastUpdated String Time when the read/write ratio is last updated + ============== ====== ============================================== + +**Status code: 400** + +.. table:: **Table 6** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +**Status code: 500** + +.. table:: **Table 7** Response body parameters + + =============== ====== ================== + Parameter Type Description + =============== ====== ================== + errCode String Service error code + externalMessage String Error message + =============== ====== ================== + +Example Request +--------------- + +.. code-block:: text + + GET https://{endpoint}/v2/{project_id}/instances/{instance_id}/read-write-ratio?curPage={curPage}&perPage={perPage}&startDate={startDate}&endDate={endDate} + +Example Response +---------------- + +**Status code: 200** + +OK + +.. code-block:: + + { + "totalRecord" : 2, + "readWriteRatioList" : [ { + "schema" : "xxxx", + "table" : "xxxx", + "readCount" : "215", + "writeCount" : "46", + "relationTables" : "xxxx", + "lastUpdated" : "1619404869724" + } ] + } + +**Status code: 400** + +bad request + +.. code-block:: + + { + "externalMessage" : "Parameter error.", + "errCode" : "DBS.280001" + } + +**Status code: 500** + +server error + +.. code-block:: + + { + "externalMessage" : "Server failure.", + "errCode" : "DBS.200412" + } + +Status Codes +------------ + +=========== ============ +Status Code Description +=========== ============ +200 OK +400 bad request +500 server error +=========== ============ + +Error Codes +----------- + +For details, see :ref:`Error Codes `. diff --git a/api-ref/source/appendix/abnormal_request_results.rst b/api-ref/source/appendix/abnormal_request_results.rst new file mode 100644 index 0000000..872de00 --- /dev/null +++ b/api-ref/source/appendix/abnormal_request_results.rst @@ -0,0 +1,29 @@ +:original_name: ddm_api_01_0059.html + +.. _ddm_api_01_0059: + +Abnormal Request Results +======================== + +Abnormal Response +----------------- + +.. table:: **Table 1** Parameter description + + +-----------------+--------+---------------------------------------------------------------------------------------------------------------------+ + | Parameter | Type | Description | + +=================+========+=====================================================================================================================+ + | errCode | String | Returned error code when a task submission exception occurs. For details, see :ref:`Error Codes `. | + +-----------------+--------+---------------------------------------------------------------------------------------------------------------------+ + | externalMessage | String | Description of the error returned when a task submission exception occurs. | + +-----------------+--------+---------------------------------------------------------------------------------------------------------------------+ + +Example Response +---------------- + +.. code-block:: text + + { + "errCode": "DBS.300101", + "externalMessage": "Failed to delete the schema" + } diff --git a/api-ref/source/appendix/error_codes.rst b/api-ref/source/appendix/error_codes.rst new file mode 100644 index 0000000..041b89e --- /dev/null +++ b/api-ref/source/appendix/error_codes.rst @@ -0,0 +1,242 @@ +:original_name: ddm_api_01_0061.html + +.. _ddm_api_01_0061: + +Error Codes +=========== + ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Status Code | Error Code | Error Message | Solution | ++=================+=================+=================================================================================================================================+====================================================================================================================================================================================================================================================================================================================================================================================================================================================+ +| 400 | DBS.280001 | Parameter error. | Refresh the page, modify some parameters, and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300002 | Server failure. | Refresh the page and try again later. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300005 | Failed to process the request. Contact technical support. | ``-`` | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300100 | Failed to create the schema. | Check whether the DDM instance is available, whether the instance is in the **Running** state, whether the RDS instance is being scaled, and whether the schema name is duplicated. If the schema name is duplicated, modify the name and send the request again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300101 | Failed to delete the schema. | Check whether the schema has been deleted and whether the associated RDS instance exists or becomes abnormal. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300102 | The number of RDS instances associated with the schema is invalid. | Check whether the number of RDS instances associated with the schema is valid and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300103 | The RDS instance does not exist or it is not in the same VPC as the schema. | Check whether the RDS DB instance exists and whether the DB instance is in the same VPC as the required DDM instance, and then try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300104 | The sharding rule of the schema is invalid. | Ensure that the sharding rule is valid and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300106 | The number of shards per RDS instance is invalid. | Check whether the number of shards per RDS instance in the request is correct. If not, modify the number and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300107 | The accounts are duplicated. | Check whether the accounts configured in parameters are duplicated and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300108 | The RDS instances are duplicated. | Check whether there are duplicate RDS instances in the request. If yes, modify them and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300109 | The schema name is invalid. | Check whether the schema name is valid. If no, modify it and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300110 | The status of the RDS instance does not allow associating with the schema. | Resolve the RDS instance status exception and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300112 | This schema name already exists. | Check whether a schema with the same name exists. If yes, modify the name and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300113 | Failed to create a physical database. | Check whether the RDS instance administrator and password are correct. If no, modify them and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300114 | The administrator or password is incorrect. | Check whether the RDS administrator and password are correct. If no, modify them and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300115 | Failed to delete the shard. | To delete the schema, check whether there are RDS instances associated with it. If the associated RDS DB instances have been deleted, click **Synchronize DB Instance Data** on the **Basic Information** page and delete the schema again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300116 | Failed to query available RDS instances. | Check whether the RDS service is running properly and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300117 | Failed to obtain the associated RDS instances. | Check whether the RDS service is running properly and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300118 | Failed to scale out the schema. | Check input parameters in the request. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300120 | Failed to obtain task information. | Ensure that the DDM instance is running properly and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300121 | Failed to clear source data. | Ensure that the scale-out task exists and is in the valid state and that the administrator password of the destination RDS instance is correct, and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300122 | Failed to roll back the scale-out task. | Ensure that the scale-out task exists and is in the valid state and that the administrator password of the destination RDS instance is correct, and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300123 | Failed to retry the scale-out task. | Ensure that the scaling out task exists and its status is normal, and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300125 | Failed to synchronize RDS information. | Ensure that the RDS service is running properly and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300127 | The number of shards in the RDS instances associated with the schema is invalid. | Ensure that the total number of shards in the associated RDS DB instances is valid and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300128 | Failed to query schema information. | Ensure that the DDM instance is running properly and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300129 | Failed to query schema information. | Ensure that the schema exists and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300130 | Invalid schema status. | Ensure that the schema is in the **Running** state and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300131 | Failed to update the schema SQL blacklist. | Ensure that the DDM instance is running properly and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300132 | Failed to query the schema SQL blacklist. | Ensure that the DDM instance is running properly and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300133 | The RDS instance is being used to scale out a schema. | Ensure that the RDS DB instance status is not **Scaling out** or **Scaling failed** and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300134 | The schema status does not allow rolling back or canceling the scale-out task. | Refresh the page and try again later. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300135 | Failed to update the relative read weight of the RDS instance. | Ensure that the DDM instance is running properly and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300300 | Failed to create a DDM account | Ensure that the DDM instance, schema, and account exist and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300301 | Failed to update the account. | Ensure that the account and associated schema exist and that the password meets the requirements, and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300302 | Failed to delete the account. | Ensure that the DDM instance is running properly and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300305 | Invalid DDM account name. | Ensure that the account name is valid and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300306 | The account password is invalid. | Ensure that the account name and password in the request body are correct and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300307 | The account description is invalid. | Ensure that the maximum length of account description does not exceed 256 characters and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300309 | The account basic permissions are invalid. | Ensure that basic permissions configured for the account are correct and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300310 | The account extended permissions are invalid. | Ensure that extended permissions configured for the account are correct and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300311 | The account already exists. | Ensure that the account name is unique and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300312 | Failed to query the account. | Ensure that the DDM instance is running properly and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300313 | Failed to configure the SQL blacklist. | Ensure that the schema exists and is in the **Running** state, and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300314 | Failed to modify the read/write policy. | Ensure that the DDM instance is running properly and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300315 | Invalid read/write relative weight. | Ensure that the weight is greater than 0 and less than 100. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300316 | Failed to query the read/write policy. | Ensure that the DDM instance is running properly and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300322 | Failed to save instance metadata. | Provide environment information, instance ID, involved operations, and symptom description and contact technical support. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300323 | The associated RDS instance is unavailable or this operation cannot be performed when the RDS instance is in the current state. | Ensure that the associated RDS DB instance exists and is in normal state, and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300327 | The account does not exist. | Ensure that the account exists and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300328 | Failed to reset the password. | Ensure that the account exists and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300329 | Failed to obtain the step name. | Try again or roll back the scale-out task. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300330 | Failed to convert the string from JSON to the required format. | Provide environment information, involved operations, instance ID, and symptom description and contact technical support. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300331 | Data migration error. | Provide environment information, involved operations, instance ID, and symptom description and contact technical support. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300332 | The scale-out task timed out. | Try again or roll back the scale-out task. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300333 | Failed to check the time zone. | Log in to the RDS console. In the instance list, locate the source RDS instance and click its name. In the navigation pane, choose **Parameters**, search for **time_zone** in the upper right text box to check its value. Then, perform these operations on the target RDS instance, and check whether its **time_zone** value is consistent with the source instance. If not, modify it to ensure that the two values are consistent and retry. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300334 | **sql_mode** check failed. | Log in to the RDS console. In the instance list, locate the source RDS instance and click its name. In the navigation pane, choose **Parameters**, search for **sql_mode** in the upper right text box to check its value. Then, perform these operations on the target RDS instance, and check whether its **sql_mode** value is consistent with the source instance. If not, modify it to ensure that the two values are consistent and retry. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300335 | Failed to obtain the RDS link. | Check whether the RDS service is running properly. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300336 | Physical database not found. | Log in to the associated RDS instance and execute **SHOW DATABASES**. Check whether there is a physical database whose name starts with the schema name, and whether the number of physical databases must be the same as the number of shards in the schema. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300337 | Failed to check the primary key. | Check whether there are tables without primary keys. If yes, add primary keys for those tables and retry. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300338 | Failed to disable DDL or DML. | Provide environment information, instance ID, involved operations, and symptom description and contact technical support. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300339 | Failed to insert a scale-out subtask. | Contact technical support. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300340 | Failed to change statuses of scale-out subtasks to **Initialization**. | Contact technical support. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300341 | Failed to issue a scale-out subtask. | Contact technical support. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300342 | Failed to obtain scale-out subtasks. | Contact technical support. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300343 | The volume of remaining subtask data is invalid. | Provide environment information, involved operations, and symptom description and contact technical support. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300344 | Status check for scale-out task failed. | Contact technical support. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300345 | Failed to obtain information about the scale-out task. | Try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300346 | Failed to obtain information about the DDM process. | Try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300347 | Failed to disable the link. | Try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300348 | Failed to obtain subtasks during data verification. | Contact technical support. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300349 | Failed to update the schema status during route switching. | Contact technical support. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300350 | The required data is not found. | Provide environment information, involved operations, and symptom description and contact technical support. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300351 | Failed to change statuses of scale-out subtasks to **Error**. | Contact technical support. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300352 | Failed to change statuses of scale-out subtasks to **Stop**. | Provide environment information, involved operations, and symptom description and contact technical support. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300353 | Data verification failed. | Provide environment information, involved operations, and symptom description and contact technical support. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300354 | Failed to change statuses of scale-out subtasks to **Complete**. | Provide environment information, involved operations, and symptom description and contact technical support. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300355 | Schema creation failed. | Provide environment information, involved operations, and symptom description and contact technical support. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300356 | Failed to connect to the RDS DB instance. | Check whether the RDS service is running properly. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300357 | The RDS instance administrator or password is incorrect. | If the RDS instance administrator is incorrect, log in to the RDS console, locate the required RDS instance and click its name, and view the administrator on the instance details page. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300358 | There is a schema where source data is not cleared. | Log in to the DDM console, switch to the schema management page, locate the target schema, and click **Clear** in the **Operation** column. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300360 | The associated instance does not support this operation. | Provide environment information, involved operations, and symptom description and contact technical support. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300362 | The scaling method is invalid. | Select either one of rebalance and reshard. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300363 | Pre-check failed. | Provide environment information, involved operations, and symptom description and contact technical support. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300364 | Failed to check disk space of the DB instance. | Perform the following operations to scale up disk space of the DB instance: | +| | | | | +| | | | #. Log in to the management console. | +| | | | #. Hover on the left menu to display **Service List** and choose **Database** > **Relational Database Service**. | +| | | | #. On the **Instance Management** page, locate the required DB instance and click its name. | +| | | | #. On the **Basic Information** page, locate the **Storage Space** part. | +| | | | #. Click **Scale** and try again after the scaling is complete. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300365 | Failed to update metadata. | Retry the scale-out task. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300366 | Failed to rename physical tables during migration. | Retry the scale-out task. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300367 | Failed to clear source data. | Try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300368 | Parameter **lower_case_table_names** of the DB instance is invalid. | Perform the following operations to scale up disk space of the DB instance: | +| | | | | +| | | | #. Log in to the management console. | +| | | | #. Hover on the left menu to display **Service List** and choose **Database** > **Relational Database Service**. | +| | | | #. On the **Instance Management** page, locate the required DB instance and click its name. | +| | | | #. Choose **Parameters** in the left navigation pane, search for **lower_case_table_names** and verify that its value is **1** and retry. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300369 | Failed to configure access control. Contact technical support. | View DBS-ddm-instancemanager logs and DBS-resource-manager logs and modify as follows: | +| | | | | +| | | | - If error code APIG.xxxx is returned, indicating that you have no permission to access the API, contact ELB O&M engineers to grant the user the required permission. | +| | | | | +| | | | View the URI of the API in the resource management INFO log. | +| | | | | +| | | | - If an error code containing **ELB.**\ *xxxx* is displayed, contact ELB O&M engineers to locate the fault. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300370 | Load balancing is not enabled for the current DDM instance. To enable it, contact technical support. | If needed, go to DBS Operation System to enable access control for the required DDM instance. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300371 | Creating a test DDM instance is not supported. To enable this function, contact technical support. | Creating DDM instances using the engine ID of a stable version is recommended. To create a test DDM instance, go to the DBS Operation System platform to add the user to the whitelist. | +| | | | | +| | | | View the DDM instance management logs to obtain the whitelist name. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300372 | Invalid destination DDM instance. | Create a DDM instance as the destination instance. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300375 | Invalid **{param}**. | Change the value of **{param}** and try again. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300376 | The time zone is invalid. | Enter a correct time zone. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300377 | Invalid time range. | #. Ensure that the format of the time range for route switching is HH:mm:ss. | +| | | | #. Ensure that the route switching start time and end time are the same day and the interval is longer than 1 hour. | +| | | | #. Retry after completing the above operations. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300379 | The operation is not allowed for this type of tasks. | Enter the ID of the required schema scale-out task. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300400 | The task is not found. | Enter a valid task ID. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300401 | Failed to modify the automatic route switching time range. | Provide environment information, involved operations, symptom description, and tenant node logs and contact technical support. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300402 | Failed to switch the route manually. | Provide environment information, involved operations, symptom description, and tenant node logs and contact technical support. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300405 | The schema name length is invalid. | Ensure that the schema name contains 2 to 24 characters. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300406 | The schema name cannot contain keyword *keyword*. | Ensure that the schema name does not contain **information_schema**, **mysql**, **performance_schema**, and **sys**. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300407 | The schema name cannot contain uppercase letters. | Enter a schema name that only consists of lowercase letters. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| 400 | DBS.300408 | Failed to check the RDS connectivity. | #. Upgrade Agent to 2.6.1 or later. | +| | | | #. Provide environment information, involved operations, symptom description and contact O&M engineers to check whether the Agent is faulty. | ++-----------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/api-ref/source/appendix/index.rst b/api-ref/source/appendix/index.rst new file mode 100644 index 0000000..6181304 --- /dev/null +++ b/api-ref/source/appendix/index.rst @@ -0,0 +1,24 @@ +:original_name: ddm_api_01_0058.html + +.. _ddm_api_01_0058: + +Appendix +======== + +- :ref:`Abnormal Request Results ` +- :ref:`Status Codes ` +- :ref:`Error Codes ` +- :ref:`Instance Specifications ` +- :ref:`Obtaining a Project ID ` +- :ref:`Status Description ` + +.. toctree:: + :maxdepth: 1 + :hidden: + + abnormal_request_results + status_codes + error_codes + instance_specifications + obtaining_a_project_id + status_description diff --git a/api-ref/source/appendix/instance_specifications.rst b/api-ref/source/appendix/instance_specifications.rst new file mode 100644 index 0000000..cc18736 --- /dev/null +++ b/api-ref/source/appendix/instance_specifications.rst @@ -0,0 +1,20 @@ +:original_name: ddm_api_01_0062.html + +.. _ddm_api_01_0062: + +Instance Specifications +======================= + +For details about DDM instance classes, see :ref:`Table 1 `. The classes vary depending on actual situations. + +.. _ddm_api_01_0062__table107452419227: + +.. table:: **Table 1** Supported DDM instance specifications + + ================== ===== =========== ============ + Specification Code vCPUs Memory (GB) Architecture + ================== ===== =========== ============ + ddm.c6.2xlarge.2 8 16 X86 + ddm.c6.4xlarge.2 16 32 X86 + ddm.c6.8xlarge.2 32 64 X86 + ================== ===== =========== ============ diff --git a/api-ref/source/appendix/obtaining_a_project_id.rst b/api-ref/source/appendix/obtaining_a_project_id.rst new file mode 100644 index 0000000..8efeac2 --- /dev/null +++ b/api-ref/source/appendix/obtaining_a_project_id.rst @@ -0,0 +1,66 @@ +:original_name: ddm_api_01_0063.html + +.. _ddm_api_01_0063: + +Obtaining a Project ID +====================== + +Scenarios +--------- + +When calling APIs, you need to specify the project ID in some URLs. To do so, you need to obtain the project ID first Two methods are available: + +- :ref:`Obtaining the Project ID by Calling an API ` +- :ref:`Obtaining a Project ID from the Console ` + +.. _ddm_api_01_0063__section85791974381: + +Obtaining the Project ID by Calling an API +------------------------------------------ + +The API used to obtain a project ID is **GET https://{Endpoint}/v3/projects**. **{Endpoint}** is the IAM endpoint and can be obtained from `Regions and Endpoints `__. For details about API authentication, see :ref:`Authentication `. + +The following is an example response. **id** indicates the project ID. + +.. code-block:: + + { + "projects": [ + { + "domain_id": "65382450e8f64ac0870cd180d14e684b", + "is_domain": false, + "parent_id": "65382450e8f64ac0870cd180d14e684b", + "name": "project_name", + "description": "", + "links": { + "next": null, + "previous": null, + "self": "https://www.example.com/v3/projects/a4a5d4098fb4474fa22cd05f897d6b99" + }, + "id": "a4a5d4098fb4474fa22cd05f897d6b99", + "enabled": true + } + ], + "links": { + "next": null, + "previous": null, + "self": "https://www.example.com/v3/projects" + } + } + +.. _ddm_api_01_0063__section153711445316: + +Obtaining a Project ID from the Console +--------------------------------------- + +#. Sign up and log in to the management console. + +#. Move your pointer over the username and select **My Credentials** in the displayed drop-down list. + + On the displayed page, view project IDs in the project list. + + + .. figure:: /_static/images/en-us_image_0000001509539765.jpg + :alt: **Figure 1** Viewing project IDs + + **Figure 1** Viewing project IDs diff --git a/api-ref/source/appendix/status_codes.rst b/api-ref/source/appendix/status_codes.rst new file mode 100644 index 0000000..eeca2ee --- /dev/null +++ b/api-ref/source/appendix/status_codes.rst @@ -0,0 +1,60 @@ +:original_name: ddm_api_01_0060.html + +.. _ddm_api_01_0060: + +Status Codes +============ + +Normal +------ + +:ref:`Table 1 ` lists the status codes that may be returned. + +.. _ddm_api_01_0060__table11812530035: + +.. table:: **Table 1** Normal status codes + + =========== ======= =================================================== + Status Code Message Description + =========== ======= =================================================== + 200 OK The request has been processed successfully. + 202 OK The asynchronous request is submitted successfully. + =========== ======= =================================================== + +Abnormal +-------- + +:ref:`Table 2 ` lists the status codes that may be returned. + +.. _ddm_api_01_0060__table3690182516187: + +.. table:: **Table 2** Abnormal status codes + + +-----------------------+--------------------------+---------------------------------------------------------------------------------------------------------------+ + | Status Code | Message | Description | + +=======================+==========================+===============================================================================================================+ + | 400 | Bad Request | The server fails to process the request. The possible causes are as follows: | + | | | | + | | | - The request could not be parsed by the server due to incorrect syntax. | + | | | - Request parameters are incorrect. | + +-----------------------+--------------------------+---------------------------------------------------------------------------------------------------------------+ + | 401 | Unauthorized | Necessary credentials (for example, username and password) required for user authentication are not provided. | + +-----------------------+--------------------------+---------------------------------------------------------------------------------------------------------------+ + | 403 | Forbidden | You are forbidden to access the page requested. | + +-----------------------+--------------------------+---------------------------------------------------------------------------------------------------------------+ + | 404 | Not Found | The request failed because the requested resource could not be found on the server. | + +-----------------------+--------------------------+---------------------------------------------------------------------------------------------------------------+ + | 405 | Method Not Allowed | You are not allowed to use the method specified in the request. | + +-----------------------+--------------------------+---------------------------------------------------------------------------------------------------------------+ + | 409 | Conflict | The request could not be processed due to a conflict with the current resource status. | + +-----------------------+--------------------------+---------------------------------------------------------------------------------------------------------------+ + | 413 | Request Entity Too Large | The requested resource exceeds the resource quota. | + +-----------------------+--------------------------+---------------------------------------------------------------------------------------------------------------+ + | 415 | Unsupported Media Type | **ContentType** contained in the request header is neither **application** nor **json**. | + +-----------------------+--------------------------+---------------------------------------------------------------------------------------------------------------+ + | 500 | Internal Server Error | The request is not completed due to a service error. | + +-----------------------+--------------------------+---------------------------------------------------------------------------------------------------------------+ + | 501 | Not Implemented | The request is not completed because the server does not support the requested function. | + +-----------------------+--------------------------+---------------------------------------------------------------------------------------------------------------+ + | 503 | Service Unavailable | The request could not be processed by the server because the server is being maintained or overloaded. | + +-----------------------+--------------------------+---------------------------------------------------------------------------------------------------------------+ diff --git a/api-ref/source/appendix/status_description.rst b/api-ref/source/appendix/status_description.rst new file mode 100644 index 0000000..555b130 --- /dev/null +++ b/api-ref/source/appendix/status_description.rst @@ -0,0 +1,66 @@ +:original_name: ddm_api_01_0064.html + +.. _ddm_api_01_0064: + +Status Description +================== + +DDM Instance Statuses +--------------------- + +.. table:: **Table 1** DDM instance statuses + + +--------------------------+--------------------------------------------------------------------------+ + | Status | Description | + +==========================+==========================================================================+ + | CREATING | The DDM instance is being created. | + +--------------------------+--------------------------------------------------------------------------+ + | CREATEFAILED | The DDM instance fails to be created. | + +--------------------------+--------------------------------------------------------------------------+ + | RUNNING | The DDM instance is running and available. | + +--------------------------+--------------------------------------------------------------------------+ + | ERROR | The DDM instance is faulty. | + +--------------------------+--------------------------------------------------------------------------+ + | RESTARTING | The DDM instance is being restarted. | + +--------------------------+--------------------------------------------------------------------------+ + | FREEZING | The DDM instance is being frozen. | + +--------------------------+--------------------------------------------------------------------------+ + | FROZEN | The DDM instance is frozen. | + +--------------------------+--------------------------------------------------------------------------+ + | UNFREEZING | The DDM instance is being unfrozen. | + +--------------------------+--------------------------------------------------------------------------+ + | RESIZING | Class of the DDM instance fail to be changed. | + +--------------------------+--------------------------------------------------------------------------+ + | UPGRADE_VERSION_INSTANCE | The version is being upgraded. | + +--------------------------+--------------------------------------------------------------------------+ + | GROWING | A DDM instance is being scaled out. | + +--------------------------+--------------------------------------------------------------------------+ + | REDUCING | A DDM instance is being scaled in. | + +--------------------------+--------------------------------------------------------------------------+ + | data_disk_full | Disk space is full. | + +--------------------------+--------------------------------------------------------------------------+ + | RESTORE | A DDM instance is being restored. | + +--------------------------+--------------------------------------------------------------------------+ + | BACKUP | A DDM instance is being backed up. | + +--------------------------+--------------------------------------------------------------------------+ + | ONDEMAND_TO_PERIOD | The billing mode of the DDM instance is being changed to yearly/monthly. | + +--------------------------+--------------------------------------------------------------------------+ + | PERIOD_RESOURCE_SPEC_CHG | The change to the yearly/monthly DDM instance is being verified. | + +--------------------------+--------------------------------------------------------------------------+ + +DDM Schema Statuses +------------------- + +.. table:: **Table 2** DDM schema statuses + + ================== ==================================== + Status Description + ================== ==================================== + CREATING The schema is being created. + RUNNING The schema is running and available. + CREATEFAILED The schema fails to be created. + DELETING The schema is being deleted. + Scaling out The schema is being scaled out. + Scaling out failed The schema fails to be scaled out. + Rolling back The schema is being rolled back. + ================== ==================================== diff --git a/api-ref/source/before_you_start/api_calling.rst b/api-ref/source/before_you_start/api_calling.rst new file mode 100644 index 0000000..650ff52 --- /dev/null +++ b/api-ref/source/before_you_start/api_calling.rst @@ -0,0 +1,8 @@ +:original_name: ddm_api_01_0003.html + +.. _ddm_api_01_0003: + +API Calling +=========== + +DDM supports Representational State Transfer (REST) APIs, allowing you to call APIs using HTTPS. diff --git a/api-ref/source/before_you_start/concepts.rst b/api-ref/source/before_you_start/concepts.rst new file mode 100644 index 0000000..bfd9d2e --- /dev/null +++ b/api-ref/source/before_you_start/concepts.rst @@ -0,0 +1,36 @@ +:original_name: ddm_api_01_0006.html + +.. _ddm_api_01_0006: + +Concepts +======== + +- Account + + An account is created upon successful registration. The account has full access permissions for all of its cloud services and resources. It can be used to reset user passwords and grant user permissions. The account is a payment entity and should not be used directly to perform routine management. For security purposes, create users and grant them permissions for routine management. + +- IAM user + + An IAM user is created using an account to use cloud services. Each IAM user has its own identity credentials (password and access keys). + +- Region + + A region is a geographic area in which cloud resources are deployed. Availability zones (AZs) in the same region can communicate with each other over an intranet, while AZs in different regions are isolated from each other. Deploying cloud resources in different regions can better suit certain user requirements or comply with local laws or regulations. + +- AZ + + An AZ comprises one or more physical data centers equipped with independent cooling, fire extinguishing, moisture-proof, and electricity facilities. Computing, network, storage, and other resources in an AZ are logically divided into multiple clusters. AZs within a region are interconnected using high-speed optical fibers to allow users to build cross-AZ high-availability systems. + +- Project + + A project corresponds to a region. Projects group and isolate resources (including compute, storage, and network resources) across physical regions. Users can be granted permissions in a default project to access all resources in the region associated with the project. For more refined access control, create subprojects under a project and purchase resources in the subprojects. Users can then be assigned permissions to access only specific resources in the subprojects. + + + .. figure:: /_static/images/en-us_image_0000001509858673.png + :alt: **Figure 1** Project isolating model + + **Figure 1** Project isolating model + + - Enterprise project + + Enterprise projects group and manage resources across regions. Resources in enterprise projects are logically isolated from each other. An enterprise project can contain resources of multiple regions, and resources can be added to or removed from the enterprise project. diff --git a/api-ref/source/before_you_start/constraints.rst b/api-ref/source/before_you_start/constraints.rst new file mode 100644 index 0000000..0e82c8b --- /dev/null +++ b/api-ref/source/before_you_start/constraints.rst @@ -0,0 +1,9 @@ +:original_name: ddm_api_01_0005.html + +.. _ddm_api_01_0005: + +Constraints +=========== + +- The number of DDM instances that you can create is determined by your quota. +- For more constraints, see API description. diff --git a/api-ref/source/before_you_start/endpoints.rst b/api-ref/source/before_you_start/endpoints.rst new file mode 100644 index 0000000..cadc033 --- /dev/null +++ b/api-ref/source/before_you_start/endpoints.rst @@ -0,0 +1,8 @@ +:original_name: ddm_api_01_0004.html + +.. _ddm_api_01_0004: + +Endpoints +========= + +An endpoint is the **request address** for calling an API. Endpoints vary depending on services and regions. For the endpoints of all services, see `Regions and Endpoints `__. diff --git a/api-ref/source/before_you_start/index.rst b/api-ref/source/before_you_start/index.rst new file mode 100644 index 0000000..4d47355 --- /dev/null +++ b/api-ref/source/before_you_start/index.rst @@ -0,0 +1,22 @@ +:original_name: ddm_api_01_0001.html + +.. _ddm_api_01_0001: + +Before You Start +================ + +- :ref:`Overview ` +- :ref:`API Calling ` +- :ref:`Endpoints ` +- :ref:`Constraints ` +- :ref:`Concepts ` + +.. toctree:: + :maxdepth: 1 + :hidden: + + overview + api_calling + endpoints + constraints + concepts diff --git a/api-ref/source/before_you_start/overview.rst b/api-ref/source/before_you_start/overview.rst new file mode 100644 index 0000000..075bc6e --- /dev/null +++ b/api-ref/source/before_you_start/overview.rst @@ -0,0 +1,17 @@ +:original_name: ddm_api_01_0002.html + +.. _ddm_api_01_0002: + +Overview +======== + +Welcome to Distributed Database Middleware (DDM). This document describes functions, syntax, parameters, and examples of DDM. + +If you plan to access DDM through an API, ensure that you are familiar with DDM concepts. + +This document describes how to use application programming interfaces (APIs) to perform creating, querying, deleting, and updating operations. + +.. note:: + + - This document will be updated when APIs of new functions are added, for example, adding response parameters. + - To reduce impacts caused by API changes, DDM is backward compatible with existing APIs. When using DDM, you should accept and ignore unused parameters and parameter values in JSON responses. diff --git a/api-ref/source/calling_apis/authentication.rst b/api-ref/source/calling_apis/authentication.rst new file mode 100644 index 0000000..a82ab72 --- /dev/null +++ b/api-ref/source/calling_apis/authentication.rst @@ -0,0 +1,55 @@ +:original_name: ddm_api_01_0011.html + +.. _ddm_api_01_0011: + +Authentication +============== + +Token authentication is required to call APIs. + +Authentication using tokens: General requests are authenticated using tokens. + +Token-based Authentication +-------------------------- + +.. note:: + + The validity period of a token is 24 hours. If a token is required, the system caches the token to avoid frequent calling. + +A token specifies temporary permissions in a computer system. Token-based authentication adds a token in a request as its header during API calling to obtain the permissions for operating APIs on IAM. + +.. code-block:: + + { + "auth": { + "identity": { + "methods": [ + "password" + ], + "password": { + "user": { + "name": "username", + "password": "********", + "domain": { + "name": "domainname" + } + } + } + }, + "scope": { + "project": { + "name": "xxxxxxxx" + } + } + } + } + +In :ref:`Making an API Request `, the process of calling the API used to `obtain a user token `__ is described. + +After obtaining the token, add the **X-Auth-Token** header in a request to specify the token when calling other APIs. For example, if the token is **ABCDEFJ....**, **X-Auth-Token: ABCDEFJ....** can be added to a request as follows: + +.. code-block:: text + + POST https://{{Endpoint}}/v3/auth/projects + Content-Type: application/json + X-Auth-Token: ABCDEFJ.... diff --git a/api-ref/source/calling_apis/index.rst b/api-ref/source/calling_apis/index.rst new file mode 100644 index 0000000..0d48860 --- /dev/null +++ b/api-ref/source/calling_apis/index.rst @@ -0,0 +1,18 @@ +:original_name: ddm_api_01_0008.html + +.. _ddm_api_01_0008: + +Calling APIs +============ + +- :ref:`Making an API Request ` +- :ref:`Authentication ` +- :ref:`Returned Values ` + +.. toctree:: + :maxdepth: 1 + :hidden: + + making_an_api_request + authentication + returned_values diff --git a/api-ref/source/calling_apis/making_an_api_request.rst b/api-ref/source/calling_apis/making_an_api_request.rst new file mode 100644 index 0000000..cdb190e --- /dev/null +++ b/api-ref/source/calling_apis/making_an_api_request.rst @@ -0,0 +1,161 @@ +:original_name: ddm_03_0002.html + +.. _ddm_03_0002: + +Making an API Request +===================== + +This section describes the structure of a REST API and how to call an API. Before calling an API, you need to `obtain the user token `__ using the IAM API. + +Request URI +----------- + +A request URI is in the following format: + +**{URI-scheme} :// {Endpoint} / {resource-path} ? {query-string}** + +Although a request URI is a part of a request header, most programming languages or frameworks require the request URI to be separately transmitted, rather than being conveyed in a request message. + +.. table:: **Table 1** URI parameter description + + +---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Parameter | Description | + +===============+=======================================================================================================================================================================================================================================================================================================+ + | URI-scheme | Protocol used to transmit requests. All APIs use HTTPS. | + +---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Endpoint | Domain name or IP address of the server bearing the REST service endpoint. The endpoint varies depending on the service and service region. *Endpoint*: Endpoint of the **Objective-func** function. For details, see `Regions and Endpoints `__. | + +---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | resource-path | Access path of an API for performing a specified operation. Obtain the path from the URI of an API. For example, the **resource-path** of the API used to obtain a user token is **/v3/auth/tokens**. | + +---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Query string | Query parameter, which is optional. Ensure that a question mark (?) is included before each query parameter that is in the format of "Parameter name=Parameter value". For example, **? limit=10** indicates that a maximum of 10 data records will be displayed. | + +---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. note:: + + To simplify the URI display, each API is provided only with a resource-path and a request method. This is because the **URI-scheme** value of all APIs is **HTTPS**, and the endpoints in a region are the same. Therefore, the two parts are omitted. + +Request Method +-------------- + +HTTP methods, which are also called operations or actions, specify the type of operations that you are requesting. + +.. table:: **Table 2** HTTP methods + + +-----------------------------------+--------------------------------------------------------------------------+ + | Method | Description | + +===================================+==========================================================================+ + | GET | Requests a server to return specified resources. | + +-----------------------------------+--------------------------------------------------------------------------+ + | PUT | Requests a server to update specified resources. | + +-----------------------------------+--------------------------------------------------------------------------+ + | POST | Requests the server to add a resource or perform special operations. | + +-----------------------------------+--------------------------------------------------------------------------+ + | DELETE | Requests a server to delete specified resources, for example, an object. | + +-----------------------------------+--------------------------------------------------------------------------+ + | PATCH | Requests a server to update partial content of a specified resource. | + | | | + | | If the resource does not exist, a new resource will be created. | + +-----------------------------------+--------------------------------------------------------------------------+ + +For example, for the URI of the API used to `obtain a user token `__, the request method is POST. The request is as follows: + +.. code-block:: text + + POST https://{{Endpoint}}/v3/auth/tokens + +Request Headers +--------------- + +You can also add additional header fields to a request, such as the fields required by a specified URI or HTTP method. For example, to request for the authentication information, add **Content-Type**, which specifies the request body type. + +You can also add additional fields to the request header, for example, the fields required by a specified URI and an HTTP method. :ref:`Table 3 ` lists common request header fields. + +.. _ddm_03_0002__en-us_topic_0121682347_table1986821153312: + +.. table:: **Table 3** Common request headers + + +-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------+--------------------------------------------+ + | Field | Description | Mandatory | Example | + +=================+=======================================================================================================================================================================================+========================================================================================+============================================+ + | Content-Type | MIME type of the request body. You are advised to use the default value **application/json**. For APIs used to upload objects or images, the value varies depending on the flow type. | Yes | application/json | + +-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------+--------------------------------------------+ + | Content-Length | Length of the request body. The unit is byte. | This parameter is optional for POST requests, but must be left blank for GET requests. | 3495 | + +-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------+--------------------------------------------+ + | X-Project-Id | Project ID. Obtain the project ID by following the instructions in :ref:`Obtaining a Project ID `. | No | e9993fc787d94b6c886cbaa340f9c0f4 | + +-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------+--------------------------------------------+ + | X-Auth-Token | User token | Yes | The following is part of an example token: | + | | | | | + | | After the request is processed, the value of **X-Subject-Token** in the header is the token value. | | MIIPAgYJKoZIhvcNAQcCo...ggg1BBIINPXsidG9rZ | + +-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------+--------------------------------------------+ + +The API used to `obtain a user token `__ does not require authentication. Therefore, this API only requires adding the **Content-Type** field. The request with the added **Content-Type** header is as follows: + +.. code-block:: text + + POST https://{{endpoint}}/v3/auth/tokens + Content-Type: application/json + +(Optional) Request Body +----------------------- + +This part is optional. The body of a request is often sent in a structured format (for example, JSON or XML) as specified in the **Content-Type** header field. + +The request body varies depending on APIs. Some APIs do not require the request body, such as the APIs requested using GET and DELETE methods. + +For the API used to `obtain a user token `__, the request parameters and parameter description can be obtained in the API request. The following provides an example request with a body included. Replace **username**, **domainname**, **\*******\*** (login password), and **xxxxxxxxxxxxxxxxxx** (project name) with actual values. You can obtain the values from `Regions and Endpoints `__. + +.. note:: + + The **scope** parameter specifies where a token takes effect. You can set **scope** to an account or a project under an account. In the following example, the token takes effect only for the resources in a specified project. + +.. code-block:: + + POST https://{{endpoint}}/v3/auth/tokens + Content-Type: application/json + + { + "auth": { + "identity": { + "methods": [ + "password" + ], + "password": { + "user": { + "name": "username", + "password": "********", + "domain": { + "name": "domainname" + } + } + } + }, + "scope": { + "project": { + "name": "xxxxxxxxxxxxxxxxxx" + } + } + } + } + +If all data required for the API request is available, you can send the request to call the API through `curl `__, `Postman `__, or coding. For the API of obtaining a user token, **x-subject-token** in the response header is the required user token. This token can then be used to authenticate the calling of other APIs. + +Initiating Requests +------------------- + +You can initiate a request based on the constructed request message in one of the following ways: + +- cURL + + cURL is a command-line tool used to perform URL operations and transmit information. It serves as an HTTP client that can send HTTP requests to the server and receive response messages. cURL is used for API debugging. For more information about cURL, visit https://curl.haxx.se/. + + .. note:: + + For security purposes, run the **curl** command on the server to query information, and then clear operation records, including but not limited to records in the **~/.bash_history** and **/var/log/messages** directories (if any). + +- Code + + You can call APIs using code to assemble, send, and process request messages. + +- REST client + + Both Mozilla Firefox and Google Chrome provide a graphical browser plug-in, REST client, to send and process requests. For Mozilla Firefox, see `Firefox REST Client `__. For Google Chrome, see `Chrome REST Client `__. diff --git a/api-ref/source/calling_apis/returned_values.rst b/api-ref/source/calling_apis/returned_values.rst new file mode 100644 index 0000000..92f5449 --- /dev/null +++ b/api-ref/source/calling_apis/returned_values.rst @@ -0,0 +1,62 @@ +:original_name: ddm_api_01_0012.html + +.. _ddm_api_01_0012: + +Returned Values +=============== + +Status Code +----------- + +After sending a request, you will receive a response, including the status code, response header, and response body. + +A status code is a group of digits ranging from 1xx to 5xx. It indicates the status of a response. For more information, see :ref:`Status Codes `. + +For example, if status code **201** is returned for calling the API used to `obtain a user token `__, the request is successful. + +Response Header +--------------- + +Similar to a request, a response also has a header, for example, **Content-Type**. + +:ref:`Figure 1 ` shows the response header for the API used to `obtain a user token `__. The **x-subject-token** header field is the desired user token. This token can then be used to authenticate the calling of other APIs. + +.. _ddm_api_01_0012__fig4865141011511: + +.. figure:: /_static/images/en-us_image_0000001460419110.png + :alt: **Figure 1** Header fields of the response to the request for obtaining a user token + + **Figure 1** Header fields of the response to the request for obtaining a user token + +(Optional) Response Body +------------------------ + +This part is optional. The body of a response is often returned in structured format (for example, JSON or XML) as specified in the **Content-Type** header field. The response body transfers content except the response header. + +For the API used to `obtain a user token `__, the following information is returned. The following describes part of the request body. + +.. code-block:: + + { + "token": { + "expires_at": "2019-02-13T06:52:13.855000Z", + "methods": [ + "password" + ], + "catalog": [ + { + "endpoints": [ + { + "region_id": "az-01", + ...... + +If an error occurs during API calling, the system returns an error code and message to you. The following shows the format of an error response body: + +.. code-block:: + + { + "error_code": "AS.0001", + "error_msg": "The format of message is error" + } + +In the response body, **error_code** is an error code, and **error_msg** provides information about the error. diff --git a/api-ref/source/change_history.rst b/api-ref/source/change_history.rst new file mode 100644 index 0000000..c31400f --- /dev/null +++ b/api-ref/source/change_history.rst @@ -0,0 +1,14 @@ +:original_name: ddm_api_01_0069.html + +.. _ddm_api_01_0069: + +Change History +============== + +.. table:: **Table 1** Document change history + + =========== ========================================= + Released On Description + =========== ========================================= + 2023-01-30 This issue is the first official release. + =========== ========================================= diff --git a/api-ref/source/index.rst b/api-ref/source/index.rst index f4b2a4a..05dcb51 100644 --- a/api-ref/source/index.rst +++ b/api-ref/source/index.rst @@ -2,3 +2,13 @@ Distributed Database Middleware - API Reference =============================================== +.. toctree:: + :maxdepth: 1 + + before_you_start/index + api_overview + calling_apis/index + apis_recommended/index + apis_unavailable_soon/index + appendix/index + change_history