* [tarantool-patches] [PATCH 0/2] Add "_vcollation" sysview and fetch it in net.box @ 2019-05-16 11:24 Roman Khabibov 2019-05-16 11:24 ` [tarantool-patches] [PATCH 1/2] schema: add "_vcollation" sysview Roman Khabibov 2019-05-16 11:24 ` [tarantool-patches] [PATCH 2/2] net.box: fetch '_vcollation' sysview into the module Roman Khabibov 0 siblings, 2 replies; 12+ messages in thread From: Roman Khabibov @ 2019-05-16 11:24 UTC (permalink / raw) To: tarantool-patches; +Cc: kostja As I understood "readable for all" means that the filter for "_vcollation" must always return "true", because the condition "User has read access to according system space" is always met. Roman Khabibov (2): schema: add "_vcollation" sysview net.box: fetch '_vcollation' sysview into the module src/box/bootstrap.snap | Bin 4374 -> 4439 bytes src/box/lua/net_box.lua | 19 ++++-- src/box/lua/space.cc | 2 + src/box/lua/upgrade.lua | 23 ++++++++ src/box/schema_def.h | 2 + src/box/sysview.c | 13 ++++ test/app-tap/tarantoolctl.test.lua | 4 +- test/box-py/bootstrap.result | 13 +++- test/box/access_misc.result | 4 ++ test/box/access_sysview.result | 92 ++++++++++++++++++++++++++--- test/box/access_sysview.test.lua | 30 ++++++++++ test/box/alter.result | 6 +- test/box/net.box.result | 2 +- test/box/stat_net.result | 4 +- test/wal_off/alter.result | 2 +- 15 files changed, 195 insertions(+), 21 deletions(-) -- Branch: https://github.com/tarantool/tarantool/tree/romanhabibov/gh-3941-net-vcoll Issue: https://github.com/tarantool/tarantool/issues/3941 2.20.1 (Apple Git-117) ^ permalink raw reply [flat|nested] 12+ messages in thread
* [tarantool-patches] [PATCH 1/2] schema: add "_vcollation" sysview 2019-05-16 11:24 [tarantool-patches] [PATCH 0/2] Add "_vcollation" sysview and fetch it in net.box Roman Khabibov @ 2019-05-16 11:24 ` Roman Khabibov 2019-05-16 12:43 ` [tarantool-patches] " Konstantin Osipov 2019-05-30 11:57 ` Konstantin Osipov 2019-05-16 11:24 ` [tarantool-patches] [PATCH 2/2] net.box: fetch '_vcollation' sysview into the module Roman Khabibov 1 sibling, 2 replies; 12+ messages in thread From: Roman Khabibov @ 2019-05-16 11:24 UTC (permalink / raw) To: tarantool-patches; +Cc: kostja Add "_vcollation" sysview to read it from net.box. This sysview is always readable, exept when the user doesn't have "public" role. Needed for #3941 --- src/box/bootstrap.snap | Bin 4374 -> 4439 bytes src/box/lua/space.cc | 2 + src/box/lua/upgrade.lua | 23 ++++++++ src/box/schema_def.h | 2 + src/box/sysview.c | 13 ++++ test/app-tap/tarantoolctl.test.lua | 4 +- test/box-py/bootstrap.result | 13 +++- test/box/access_misc.result | 4 ++ test/box/access_sysview.result | 92 ++++++++++++++++++++++++++--- test/box/access_sysview.test.lua | 30 ++++++++++ test/box/alter.result | 6 +- test/wal_off/alter.result | 2 +- 12 files changed, 178 insertions(+), 13 deletions(-) diff --git a/src/box/bootstrap.snap b/src/box/bootstrap.snap index 871a93f9856f97636ad55b7f5260e5c6957fef36..62bae6be8a6cbbb5fe354ee87e836e2cdb02dd99 100644 GIT binary patch literal 4439 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 literal 4374 zcmV+x5$WzzPC-x#FfK7O3RY!ub7^mGIv_GGGA=MJF)%PKXJlnFH8e6c3Q2BrbYX5| zWjY{aWi&ElFf?W@Fl1yiEi^GRIW0J1HDWC>FgQ3jIXE~qG&V8{RzqxWV{1AfdwmKD z)w&D1%@Cdd&a`e1h@}7k0000ewJ-euP_2XjT9fP`Mi7wLIRFd*3;=q0Nziu>7-QNu z8W+2s#p7E5P7FBorA$dprX(X<N>V0~Q~&gcdL7za?!E)Y<UZ3H?vhm(vp*cYZQ213 z0s#W=0XQg&cOHO%ahVS=CgTCdX$NJ_kpnX4xIqW!c#dN@n8|6{Kqg0nF*&9yUl-+w zX%fXS8i-;BV#E}KFnR|j1KI8Z40IN8yDwm7TwX57VwW#jjFY*zc*)|HE?KmIOBS=3 zYS|)+Su7AmELub{y^`gBD_H(#y7GUzWM$S>0TTsFq3z#aICk^=b7=ejK7YHaR4@Sr z_exOZ-Uue(S4jeXlOo`kUkH@$rIK{-6bSB3AD}|>yV(?)-^m`J`4C6*JEYmH>qsW+ zasa7`38{&xOUluVD~ba$t_Gx#9Q@8N3zqMOTO{YSyE!($?{YzjVnYTRu%QtY8``jl zf!YE_wVDD&wORrTcmx#i{(uC$Hvj<(rm+Jom=YOa!72-;PhzvJAtKq9lP6cY*RE^{ z4fz6`cu#<k_dx}0AOiLtAZTv^fG#b70WR%FfJ?iyCIQ%NOnz*(B~5HLA12-_S>k;X zAMcSU>HSEO-i;vXy~vTW1i(mH5-C!aHXQ=MObC&1bMX2sS&$*3twQpjXulMQkXpAp z({w#S%G}MX41RB5Kzd*=sam)B_xrK%ANTFwW1Vp`<_Z^Fy&(tlKCdcO?5C#(_L4H= zhKv{{FkGzY>fL->y{KY8J+PNlPlauseZT0{n%V<<N#&`%Fn>|D)ZJn}_4UHzgXR{) z4q~VnVZrnS5ZDV%-+nE)nAOQ*3t1g3v_QR_@Rps6w|^h%>s*nA_f}xxeHB;ulnN_m zTT@ga+meEct8c%2-ET!PMfXrh(LJ6hy6?UR#gpgZdGb&6p8S({g6Dk`Pk7IS6W%Y; zg!f7?;e8TI_!J2xW_Io*A+vJ?5?~HJoDSyj`?9xV#GUMmI3jx@jL1IwA&R(O2qLZz zVu<Un2SNzzyMnOZ4iMH`&(+0y9Xq_!;o_b5Id!!8108MpFh`r(-1@<qJ@{ZvIa}7W zW}F^6-^uAbjnjGOaCRlvN=yC*PRUE2rG@o|`+b$g^Bd=PI;@?$+S^LEH!erpRaUgk z1CF+7+fCKqfrtNfaPxl-J9Hd$=>3Kqdba@w-R1_ZYp_9UHf_j~s)i{xWJ#85s8CeR z6na~OqG{CpPs1&pA&ss|WuRf}7-rZS1{t>A`h^%=fI+rv;RPP4aird{;KFQ$7I<W; z0t-AcO<{!@3Op5LQYr8_iQAz;fj2uN#Ust|(D29;&hSVwHNgyTlO>$6$xV`Af+j~O zL6bHTG^xqj2qYP0Bgqu1Mplt28fBeMDC_i5>tvn$>2v=+KY5>hHv5?Q)0nq8<}sJN zhV`ytvaI16cG4%#<cYD<iBCLcj75y`9WhQr5o7RTObc;p!FxrZ-TT>lLl9xM1L2eH zJ_rHI;!d1wdo|}Y4c0COEtvb=exHl7JD0eA$NP7_GVk|RZT3B%uK%*CkPy_(sIU1e z^t-A-1$<j}F6u_B#oXT~2ft9?ENbmM?yF<-=_(KbrY&*)o7~ERT<gr*?{`D-Tou*k z`CF|y_`Rt=L3ggES*_3g`K)zMZP8q9TbxwwlDKi_{=E*(&CDz6m$%H>@?y|`SJkKX zZ0|OAwR!&B_8J%7J!Zd8tZUZ3RhYjETGM0Q(rzm>YHFB2^W=TRI`g`kV-mEQmUaKt zH~hle`xS5a>DtcdN2k`>V-o`!;75Qa0i4*z<Y!3}A10UN{d*-#W^<DG$mSqXl50Dg zbB-jLaT!4(<0^7wCqtUaXd@Q@MrL$~6p;<7z1qXJI2KPCGwq`zgb20;8G>y<gkT%C z^#qy0YOnTWwf1^ywO8%c-YgG~D)v)*P*CX~uiAr3{m3)h_3?*n$A=#l3TL5qd-TCk zJ^0{g9(!<<qj>0%(L3_Us2zA@G^2Ig(N8+;=;s`D^s}FG&~ct|%yFJ@$Z@7`#4+1) z0}k0%8*lK=s`1=n!;SveXrq5M*yz9iG}ibZ4K@BhBaQ!4Gtl_Ij5GdE$uOfT9it5V z#UKO!Fvh?ie=x-O|BEpG_X3Rn(=NWSp9?SS-=Yf}Pk7x+JteG*Rw9v{jB*SQjWtMw z{nTC#cI!SxELfe2CDmS@JbCa`5a@M%zi8ek77YmORi|P}wqNt~x%xx|Fl+O6t=jWl z&ASztHSIKY6*d(+s=b}d(B^6dp~@&?v*tCE7cC%^Fl8=O4a`3>y+B<Qqd_29?4y_# zgIQ<#^{3VM_Z)NeH5EJhfN9JZT;<}<Qu_6$6e&@h_Cu{xu_6y@SmqXz!KxiJanNOh zx@F9krn;oTk{G2hN*O3&aMQt(z`T+!=((v$`hw&IsS6U9qb)}k9BDDiVuU4)(Ul@A zMNDammSPp$ViXWnxe-k;B*9PwLrU0N>?BDD0wF3wQ-U4{ngz*VFd(FQOLIg8Is$T_ z)*mT9QC_z+ckcO=_o+K`Z~s;=pW35}5jCKtIrzqg=J{=&wRsi>zb$>%+P7OXE7Tc- zZT`--f4@2Sk>a<jA(Zfb+wZ>P=QA8FHF0Va1G(G%7Tjn5Usmm6q-Gp*{~uP}Qgm9~ zzCShiVb!Gt(A-TW1;(p0n!A~0wFSK{>-*q!qH(Qz`QNsWS7`3$m#aw$O!ezeBn0q3 z?Nq=1{Brf^fHmMgMfB5EBLmKV{Tgte;+LyMF)H-CsxhK&&0NM&Mcr`cPgjYav_Zc& zb!h0@@Y~gfN2v3|rxrpZBLDyZ5C{Ns8%PjXTV_cH699lgf`QSpF+3Iwq!<S5ddxC4 z00SUEL4YCvWy~f`oXx1Qiw@(OqJ_Cm(ZF0yGu@W{E`|K0L6wJ7)jsH-QJ_W_Q`;x& zF8QjWU}GHOrdE4OU|-KA11Y*3hkE7)G|QILa5uUbPLuHfXTm6XkLv*Y=JosXyOr3u zJdsr7jfTph^!yYNmnJ1Y%F=*+N_|01mmsT>=K$*gEt9%7sAxncQiVIaDvM0s0_Q7L z2*E;8tGH%M4YO-v2hH}|;?R%v2VF4^#P`NPhr#_`+fOC5Qcf2ahGJdL7DtR?ip%5e zF`gtiTW5LR`;QUBn*?XHi!!CdUOMvcnB`7Qc6tuh9;a5zansT$j4<<LeByVl)^s_0 zTycu&^7Odil+Wc!@|gF((iT5)VQHN{+@4elJ+PhPF79CJK|He&C?9MJOewg+0Owex zela=XZE7nH|Hb!0bX2BV4w`V6J?4?sSw)BVTJkSla&Osg!jHqhW!3fsM-=BFm(%%g zJ62^3z_(Vc;j7Ysg)#wTNPP~!x^r(fjLqGn6DOo#B8KpN%aDrwPcdT~nK+2CKHzK& z&BfUMqm5yh-T>Ym)2iw@H$yyh(DR7)BAIr=9lDVoD`9ePi)`bEbQ|r)jinYgR<y|v zaiygWkYq_5rVm3PvR6r`#?DY;oCqsA9vz^=Bcyftv@L`<<(=93W>sw<ex5n>HgqS@ zvOY4c=&&<yLsi9FO@|dwiGU*6pI#~sy+D5_HrT-NA=~NnwHO80bc1ecLEObrU!edu z6lJhIv=lV4%ojMHHcA3MvQ5H|?&x-T-*m;Uo2ZGuQ+isc8%J<vklJ%vre+@4s3sGQ zmH<j4QS{eQc@@)Qmn>DkTY{HD)rRqgj$9T4T|ogl-p6msMraP5OGqucvDm2HEih3D z>=wfp0_q9f)RJP4+!EST`HCKYKt<7PB0{~PH(k2GiL*j>Cs)6~&b4cVZ{&D?Zhcb_ zJU-`fA9b$c%X)$G_^%OG^M-0NPiK@Y{;!shIfgmg<c`q{>6rP8YG&WHkuGJxlHM=R zkOM3<>QW3J#=9bvU+S<>cSH}axkBYKg%Vj$(ZC^J!YXxBMlsBsLYqdBjJAkv-A+qG zg5@5HZbqS<>WOW!c7n57bl<3nn@6-zbMjG5XjMSWlujAs5nGa64_;7P0NC6eg)FaY z{WZk!uMoHD8v=3^18W2%Mu7Ano)973OR15Fdm8|E%Apd@_Io+d)p##2ugONwL3DN+ zcxilZgt;KW5dR7`T*JUVB24sG<_4SdwglD{j!8J5FJNnRB$p$&DHGe`(=XIXN@J-@ z-^U`FiHbf(AN+BLsh7hgo$vSZxAf7+y$F-``P{(r+%ABvH=e{aAWUGt8tmvjKxXH7 z@?&xtMO@_N59kxx%G)Sv7GI`EC_ZkndHad2^j5TcJRc1uvo>ldjA(&D<q~nj;rby9 zVmGM9L$Cx$58??C(!G=#iMY1`aHkw9;cUO1@#|LB99>E~w9s8@7V*_|Z-L!y-Zzwf z4iRwU=p2<!vPj7MYZicR*<%`khHM-`^W0K3-a-X<d|=N=P5$V_;OD+<NPVY~{8|-1 zqe%Wz<J53N016^vjevzP5FYFaDU!cBH3+$G0kEzqWcXdnuOWncg|VvG5P-+nSR)`Y z3Zw_`gox>1NR33^+W@$WD&Qu??6p+L5Km$Nin^+HG&Z?0h<OKcE&YA&GvYI1g?S(` z@^LRUq&~7>o22y|wx5}oKagwd-?N^gV-2u6ajri4Kg}Y9m+HUDw0FkPa6oQm%4F=3 zen;aO^))@OGr;%cg{FUE2x{(OKBN!#d}bi}-c~@pQ~@?AZsi(EB7$W5h;f_Vp@}R~ zu1YaDF7f9V?PO%>;ScArPIdS+TuDr-9~=+wPn|~z8F@!sl29ZUk&h5py3`~g77Zda z1QOgA!yx;p>o<r&K3>&eS`~6h6T)k*w@&IX<0$k&NG!f}8(^6{8R2&xNdgY1e8s|b zNi<HWB}xo2d_#{$L~mV}3yX=t&~I}_5yL5tzfSsa<1YL~L@d7dx?os58R1n9NkaI_ zIo3`NGaiON2#Lb_o)H$y3Hi11EYPmVR9H>$Pj_RE`gLbnZT1O#4h{8+Tv;cFuo3uA zGVvPHZUT>4wu3BUnKI+ekUdK~lUH+%lx?#yukcP1>MahxY)gj5LoixFMkk)N0)%N~ zE-p-dAVAr&5G-T#-`cag8Ot5Re#*GG?>4dLFN=m729Yya7)h%h5u*T+C1OEsyl^RY z9=&k!gVhJ{3ZZ2o!oK=O4aNeNuuO7*e_Ra{TVoQZed}kR*8wQB#FB>4L%p!ia4=$e zYOuO=uXI%bH>&a%2UGEhi%6AqE-P;j9BOma-w;Ih`Yx@O3_ducSwe8ZIn+vQ2?-3= z%|9yMPJ!n;klelKR<4>U<6rW-U47{x7*d#zsvrw0JEj}b^1vXuaN4jv$A2^-Zc)<K zP@MU2;Kleeq#R$<iXQ?{@G39C0{$kmg+I+mNCY}1jz*t=_EuMcmc#XDGvBU41sMlx z&(6N*l}yPX=uUz4e|kXz)Y#m?IJ~=~7!7Fp3|R~51m>qn^BoGAo*o-+n<;~iD;J7| zQLrKBBIVi0?L%RO#>v{Vv)k7d4KXYOEKzvjJjy0iFhW+J&3wO~^YE6AxO(yzw(ydk zxP5vTci75K+-tH!hy7wCv~j)#kA)dcT=i~!v)V9cG5(s%(U4@}&rtx^8Z@h$qsLi+ QJ>-q$w`eZc2h|X*?NOjQ=l}o! diff --git a/src/box/lua/space.cc b/src/box/lua/space.cc index 100da0a79..fbfc2a64d 100644 --- a/src/box/lua/space.cc +++ b/src/box/lua/space.cc @@ -525,6 +525,8 @@ box_lua_space_init(struct lua_State *L) lua_setfield(L, -2, "FUNC_ID"); lua_pushnumber(L, BOX_COLLATION_ID); lua_setfield(L, -2, "COLLATION_ID"); + lua_pushnumber(L, BOX_VCOLLATION_ID); + lua_setfield(L, -2, "VCOLLATION_ID"); lua_pushnumber(L, BOX_VFUNC_ID); lua_setfield(L, -2, "VFUNC_ID"); lua_pushnumber(L, BOX_PRIV_ID); diff --git a/src/box/lua/upgrade.lua b/src/box/lua/upgrade.lua index 89d6e3d52..6ff87a8c2 100644 --- a/src/box/lua/upgrade.lua +++ b/src/box/lua/upgrade.lua @@ -737,6 +737,28 @@ local function upgrade_to_2_1_3() end end +local function create_vcollation_space() + local _collation = box.space._collation + local format = _collation:format() + create_sysview(box.schema.COLLATION_ID, box.schema.VCOLLATION_ID) + box.space[box.schema.VCOLLATION_ID]:format(format) +end + +local function upgrade_to_2_1_4() + local _collation = box.space._collation + local _index = box.space._index + + -- System space format usually is in order "id, owner, name...". + -- The fields "name", "owner" are swapped in "_collation" format, + -- due to the field "owner" was added after the "_collation" creation. + box.space._index:delete{276, 1} + log.info("update index name on _collation") + box.space._index:insert{_collation.id, 2, 'name', 'tree', {unique = true}, {{1, 'string'}}} + log.info("update index owner on _collation") + box.space._index:insert{_collation.id, 1, 'owner', 'tree', {unique = false}, {{2, 'unsigned'}}} + create_vcollation_space() +end + local function get_version() local version = box.space._schema:get{'version'} if version == nil then @@ -768,6 +790,7 @@ local function upgrade(options) {version = mkversion(2, 1, 1), func = upgrade_to_2_1_1, auto = true}, {version = mkversion(2, 1, 2), func = upgrade_to_2_1_2, auto = true}, {version = mkversion(2, 1, 3), func = upgrade_to_2_1_3, auto = true}, + {version = mkversion(2, 1, 4), func = upgrade_to_2_1_4, auto = true} } for _, handler in ipairs(handlers) do diff --git a/src/box/schema_def.h b/src/box/schema_def.h index eeeeb950b..77c004690 100644 --- a/src/box/schema_def.h +++ b/src/box/schema_def.h @@ -72,6 +72,8 @@ enum { BOX_SCHEMA_ID = 272, /** Space id of _collation. */ BOX_COLLATION_ID = 276, + /** Space id of _vcollation. */ + BOX_VCOLLATION_ID = 277, /** Space id of _space. */ BOX_SPACE_ID = 280, /** Space id of _vspace view. */ diff --git a/src/box/sysview.c b/src/box/sysview.c index 96c5e78ca..0d1259af0 100644 --- a/src/box/sysview.c +++ b/src/box/sysview.c @@ -402,6 +402,14 @@ vsequence_filter(struct space *source, struct tuple *tuple) ((PRIV_WRDA | PRIV_X) & effective); } +static bool + vcollation_filter(struct space *source, struct tuple *tuple) + { + (void) source; + (void) tuple; + return true; + } + static struct index * sysview_space_create_index(struct space *space, struct index_def *def) { @@ -448,6 +456,11 @@ sysview_space_create_index(struct space *space, struct index_def *def) source_index_id = def->iid; filter = vsequence_filter; break; + case BOX_VCOLLATION_ID: + source_space_id = BOX_COLLATION_ID; + source_index_id = def->iid; + filter = vcollation_filter; + break; default: diag_set(ClientError, ER_MODIFY_INDEX, def->name, space_name(space), diff --git a/test/app-tap/tarantoolctl.test.lua b/test/app-tap/tarantoolctl.test.lua index c1e1490ca..ac1efa0ba 100755 --- a/test/app-tap/tarantoolctl.test.lua +++ b/test/app-tap/tarantoolctl.test.lua @@ -405,8 +405,8 @@ do check_ctlcat_xlog(test_i, dir, "--from=3 --to=6 --format=json --show-system --replica 1", "\n", 3) check_ctlcat_xlog(test_i, dir, "--from=3 --to=6 --format=json --show-system --replica 1 --replica 2", "\n", 3) check_ctlcat_xlog(test_i, dir, "--from=3 --to=6 --format=json --show-system --replica 2", "\n", 0) - check_ctlcat_snap(test_i, dir, "--space=280", "---\n", 21) - check_ctlcat_snap(test_i, dir, "--space=288", "---\n", 47) + check_ctlcat_snap(test_i, dir, "--space=280", "---\n", 22) + check_ctlcat_snap(test_i, dir, "--space=288", "---\n", 51) end) end) diff --git a/test/box-py/bootstrap.result b/test/box-py/bootstrap.result index 379f6c51f..f37a28c80 100644 --- a/test/box-py/bootstrap.result +++ b/test/box-py/bootstrap.result @@ -4,7 +4,7 @@ box.internal.bootstrap() box.space._schema:select{} --- - - ['max_id', 511] - - ['version', 2, 1, 3] + - ['version', 2, 1, 4] ... box.space._cluster:select{} --- @@ -21,6 +21,10 @@ box.space._space:select{} 'name': 'name', 'type': 'string'}, {'name': 'owner', 'type': 'unsigned'}, {'name': 'type', 'type': 'string'}, {'name': 'locale', 'type': 'string'}, { 'name': 'opts', 'type': 'map'}]] + - [277, 1, '_vcollation', 'sysview', 0, {}, [{'name': 'id', 'type': 'unsigned'}, + {'name': 'name', 'type': 'string'}, {'name': 'owner', 'type': 'unsigned'}, { + 'name': 'type', 'type': 'string'}, {'name': 'locale', 'type': 'string'}, { + 'name': 'opts', 'type': 'map'}]] - [280, 1, '_space', 'memtx', 0, {}, [{'name': 'id', 'type': 'unsigned'}, {'name': 'owner', 'type': 'unsigned'}, {'name': 'name', 'type': 'string'}, {'name': 'engine', 'type': 'string'}, {'name': 'field_count', 'type': 'unsigned'}, {'name': 'flags', @@ -83,7 +87,11 @@ box.space._index:select{} --- - - [272, 0, 'primary', 'tree', {'unique': true}, [[0, 'string']]] - [276, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]] - - [276, 1, 'name', 'tree', {'unique': true}, [[1, 'string']]] + - [276, 1, 'owner', 'tree', {'unique': false}, [[2, 'unsigned']]] + - [276, 2, 'name', 'tree', {'unique': true}, [[1, 'string']]] + - [277, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]] + - [277, 1, 'owner', 'tree', {'unique': false}, [[2, 'unsigned']]] + - [277, 2, 'name', 'tree', {'unique': true}, [[1, 'string']]] - [280, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]] - [280, 1, 'owner', 'tree', {'unique': false}, [[1, 'unsigned']]] - [280, 2, 'name', 'tree', {'unique': true}, [[2, 'string']]] @@ -150,6 +158,7 @@ box.space._priv:select{} - [1, 1, 'universe', 0, 4294967295] - [1, 2, 'function', 1, 4] - [1, 2, 'space', 276, 2] + - [1, 2, 'space', 277, 1] - [1, 2, 'space', 281, 1] - [1, 2, 'space', 286, 1] - [1, 2, 'space', 289, 1] diff --git a/test/box/access_misc.result b/test/box/access_misc.result index 36ebfae09..2b7ca4f97 100644 --- a/test/box/access_misc.result +++ b/test/box/access_misc.result @@ -761,6 +761,10 @@ box.space._space:select() 'name': 'name', 'type': 'string'}, {'name': 'owner', 'type': 'unsigned'}, {'name': 'type', 'type': 'string'}, {'name': 'locale', 'type': 'string'}, { 'name': 'opts', 'type': 'map'}]] + - [277, 1, '_vcollation', 'sysview', 0, {}, [{'name': 'id', 'type': 'unsigned'}, + {'name': 'name', 'type': 'string'}, {'name': 'owner', 'type': 'unsigned'}, { + 'name': 'type', 'type': 'string'}, {'name': 'locale', 'type': 'string'}, { + 'name': 'opts', 'type': 'map'}]] - [280, 1, '_space', 'memtx', 0, {}, [{'name': 'id', 'type': 'unsigned'}, {'name': 'owner', 'type': 'unsigned'}, {'name': 'name', 'type': 'string'}, {'name': 'engine', 'type': 'string'}, {'name': 'field_count', 'type': 'unsigned'}, {'name': 'flags', diff --git a/test/box/access_sysview.result b/test/box/access_sysview.result index c6a2b22ed..96976babb 100644 --- a/test/box/access_sysview.result +++ b/test/box/access_sysview.result @@ -74,6 +74,10 @@ session.su('guest') --- - true ... +#box.space._vspace.index[2]:select('_vcollation') ~= 0 +--- +- true +... #box.space._vindex:select(box.space._vspace.id) > 0 --- - true @@ -94,6 +98,10 @@ session.su('guest') --- - true ... +#box.space._vindex:select(box.space._vcollation.id) > 0 +--- +- true +... box.session.su('admin') --- ... @@ -127,6 +135,10 @@ box.session.su('guest') --- - error: Read access to space '_vsequence' is denied for user 'guest' ... +#box.space._vcollation:select{} +--- +- error: Read access to space '_vcollation' is denied for user 'guest' +... box.session.su('admin') --- ... @@ -138,11 +150,15 @@ box.session.su('guest') ... #box.space._vspace:select{} --- -- 8 +- 9 ... #box.space._vindex:select{} --- -- 20 +- 24 +... +#box.space._vcollation:select{} +--- +- 277 ... box.session.su('admin') --- @@ -230,11 +246,11 @@ box.session.su('guest') ... #box.space._vspace:select{} --- -- 22 +- 23 ... #box.space._vindex:select{} --- -- 48 +- 52 ... #box.space._vuser:select{} --- @@ -242,12 +258,16 @@ box.session.su('guest') ... #box.space._vpriv:select{} --- -- 15 +- 16 ... #box.space._vfunc:select{} --- - 1 ... +#box.space._vcollation:select{} +--- +- 277 +... box.session.su('admin') --- ... @@ -262,7 +282,7 @@ box.session.su('guest') ... #box.space._vindex:select{} --- -- 48 +- 52 ... #box.space._vuser:select{} --- @@ -270,7 +290,7 @@ box.session.su('guest') ... #box.space._vpriv:select{} --- -- 15 +- 16 ... #box.space._vfunc:select{} --- @@ -280,6 +300,10 @@ box.session.su('guest') --- - 0 ... +#box.space._vcollation:select{} +--- +- 277 +... box.session.su('admin') --- ... @@ -631,6 +655,60 @@ seq:drop() --- ... -- +-- _vcollation +-- +box.session.su('admin') +--- +... +box.internal.collation.create('test', 'ICU', 'ru-RU') +--- +... +-- Only admin can create collation. +coll_cnt = #box.space._collation:select{} +--- +... +box.schema.user.grant("guest", "read, write, alter, execute", "space", "_collation") +--- +... +box.session.su("guest") +--- +... +box.internal.collation.create('guest0', 'ICU', 'ru-RU') +--- +- error: Create access to collation 'guest0' is denied for user 'guest' +... +box.space._vcollation:select{0} +--- +- - [0, 'none', 1, 'BINARY', '', {}] +... +#box.space._vcollation:select{} == coll_cnt +--- +- true +... +box.session.su('admin') +--- +... +-- _vcollation is readable anyway. +box.schema.user.revoke("guest", "read", "space", "_collation") +--- +... +box.session.su("guest") +--- +... +#box.space._vcollation:select{} +--- +- 278 +... +session.su('admin') +--- +... +box.internal.collation.drop('test') +--- +... +box.internal.collation.drop('guest0') +--- +... +-- -- view:alter() tests -- box.space._vspace.index[1]:alter({parts = { 2, 'string' }}) diff --git a/test/box/access_sysview.test.lua b/test/box/access_sysview.test.lua index c62458407..031df28aa 100644 --- a/test/box/access_sysview.test.lua +++ b/test/box/access_sysview.test.lua @@ -31,12 +31,14 @@ session.su('guest') #box.space._vspace.index[2]:select('_vuser') ~= 0 #box.space._vspace.index[2]:select('_vfunc') ~= 0 #box.space._vspace.index[2]:select('_vpriv') ~= 0 +#box.space._vspace.index[2]:select('_vcollation') ~= 0 #box.space._vindex:select(box.space._vspace.id) > 0 #box.space._vindex:select(box.space._vindex.id) > 0 #box.space._vindex:select(box.space._vuser.id) > 0 #box.space._vindex:select(box.space._vfunc.id) > 0 #box.space._vindex:select(box.space._vpriv.id) > 0 +#box.space._vindex:select(box.space._vcollation.id) > 0 box.session.su('admin') box.schema.user.revoke('guest', 'public') @@ -48,6 +50,7 @@ box.session.su('guest') #box.space._vpriv:select{} #box.space._vfunc:select{} #box.space._vsequence:select{} +#box.space._vcollation:select{} box.session.su('admin') box.schema.user.grant('guest', 'public') @@ -55,6 +58,7 @@ box.session.su('guest') #box.space._vspace:select{} #box.space._vindex:select{} +#box.space._vcollation:select{} box.session.su('admin') s = box.schema.space.create('test') @@ -96,6 +100,7 @@ box.session.su('guest') #box.space._vuser:select{} #box.space._vpriv:select{} #box.space._vfunc:select{} +#box.space._vcollation:select{} box.session.su('admin') box.schema.user.revoke('guest', 'read', 'universe') @@ -107,6 +112,7 @@ box.session.su('guest') #box.space._vpriv:select{} #box.space._vfunc:select{} #box.space._vsequence:select{} +#box.space._vcollation:select{} box.session.su('admin') box.schema.user.revoke('guest', 'write', 'universe') @@ -264,6 +270,30 @@ box.session.su("guest") session.su('admin') seq:drop() +-- +-- _vcollation +-- + +box.session.su('admin') +box.internal.collation.create('test', 'ICU', 'ru-RU') + +-- Only admin can create collation. +coll_cnt = #box.space._collation:select{} +box.schema.user.grant("guest", "read, write, alter, execute", "space", "_collation") +box.session.su("guest") +box.internal.collation.create('guest0', 'ICU', 'ru-RU') +box.space._vcollation:select{0} +#box.space._vcollation:select{} == coll_cnt +box.session.su('admin') + +-- _vcollation is readable anyway. +box.schema.user.revoke("guest", "read", "space", "_collation") +box.session.su("guest") +#box.space._vcollation:select{} +session.su('admin') +box.internal.collation.drop('test') +box.internal.collation.drop('guest0') + -- -- view:alter() tests -- diff --git a/test/box/alter.result b/test/box/alter.result index c1b1de135..7fb09b4cd 100644 --- a/test/box/alter.result +++ b/test/box/alter.result @@ -183,7 +183,11 @@ _index:select{} --- - - [272, 0, 'primary', 'tree', {'unique': true}, [[0, 'string']]] - [276, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]] - - [276, 1, 'name', 'tree', {'unique': true}, [[1, 'string']]] + - [276, 1, 'owner', 'tree', {'unique': false}, [[2, 'unsigned']]] + - [276, 2, 'name', 'tree', {'unique': true}, [[1, 'string']]] + - [277, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]] + - [277, 1, 'owner', 'tree', {'unique': false}, [[2, 'unsigned']]] + - [277, 2, 'name', 'tree', {'unique': true}, [[1, 'string']]] - [280, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]] - [280, 1, 'owner', 'tree', {'unique': false}, [[1, 'unsigned']]] - [280, 2, 'name', 'tree', {'unique': true}, [[2, 'string']]] diff --git a/test/wal_off/alter.result b/test/wal_off/alter.result index ee280fcbb..8040efa1a 100644 --- a/test/wal_off/alter.result +++ b/test/wal_off/alter.result @@ -28,7 +28,7 @@ end; ... #spaces; --- -- 65505 +- 65504 ... -- cleanup for k, v in pairs(spaces) do -- 2.20.1 (Apple Git-117) ^ permalink raw reply [flat|nested] 12+ messages in thread
* [tarantool-patches] Re: [PATCH 1/2] schema: add "_vcollation" sysview 2019-05-16 11:24 ` [tarantool-patches] [PATCH 1/2] schema: add "_vcollation" sysview Roman Khabibov @ 2019-05-16 12:43 ` Konstantin Osipov 2019-05-28 15:50 ` Roman Khabibov 2019-05-30 11:57 ` Konstantin Osipov 1 sibling, 1 reply; 12+ messages in thread From: Konstantin Osipov @ 2019-05-16 12:43 UTC (permalink / raw) To: Roman Khabibov; +Cc: tarantool-patches * Roman Khabibov <roman.habibov@tarantool.org> [19/05/16 14:27]: > + -- System space format usually is in order "id, owner, name...". > + -- The fields "name", "owner" are swapped in "_collation" format, > + -- due to the field "owner" was added after the "_collation" creation. > + box.space._index:delete{276, 1} > + log.info("update index name on _collation") > + box.space._index:insert{_collation.id, 2, 'name', 'tree', {unique = true}, {{1, 'string'}}} use :replace, not delete + insert > + log.info("update index owner on _collation") > + box.space._index:insert{_collation.id, 1, 'owner', 'tree', {unique = false}, {{2, 'unsigned'}}} Not update, but create. create index 'owner' on space '_collation' -- Konstantin Osipov, Moscow, Russia, +7 903 626 22 32 ^ permalink raw reply [flat|nested] 12+ messages in thread
* [tarantool-patches] Re: [PATCH 1/2] schema: add "_vcollation" sysview 2019-05-16 12:43 ` [tarantool-patches] " Konstantin Osipov @ 2019-05-28 15:50 ` Roman Khabibov 0 siblings, 0 replies; 12+ messages in thread From: Roman Khabibov @ 2019-05-28 15:50 UTC (permalink / raw) To: tarantool-patches; +Cc: Konstantin Osipov Hi! Thanks for the review. > On May 16, 2019, at 3:43 PM, Konstantin Osipov <kostja@tarantool.org> wrote: > > * Roman Khabibov <roman.habibov@tarantool.org> [19/05/16 14:27]: >> + -- System space format usually is in order "id, owner, name...". >> + -- The fields "name", "owner" are swapped in "_collation" format, >> + -- due to the field "owner" was added after the "_collation" creation. >> + box.space._index:delete{276, 1} >> + log.info("update index name on _collation") >> + box.space._index:insert{_collation.id, 2, 'name', 'tree', {unique = true}, {{1, 'string'}}} > > use :replace, not delete + insert I think, I can’t, because I change primary key. > Not update, but create. > > create index 'owner' on space ‘_collation’ + log.info("create index owner on _collation") + box.space._index:insert{_collation.id, 1, 'owner', 'tree', {unique = false}, + {{2, 'unsigned'}}} diff --git a/src/box/bootstrap.snap b/src/box/bootstrap.snap index 871a93f98..4e93a794a 100644 Binary files a/src/box/bootstrap.snap and b/src/box/bootstrap.snap differ diff --git a/src/box/lua/space.cc b/src/box/lua/space.cc index 100da0a79..fbfc2a64d 100644 --- a/src/box/lua/space.cc +++ b/src/box/lua/space.cc @@ -525,6 +525,8 @@ box_lua_space_init(struct lua_State *L) lua_setfield(L, -2, "FUNC_ID"); lua_pushnumber(L, BOX_COLLATION_ID); lua_setfield(L, -2, "COLLATION_ID"); + lua_pushnumber(L, BOX_VCOLLATION_ID); + lua_setfield(L, -2, "VCOLLATION_ID"); lua_pushnumber(L, BOX_VFUNC_ID); lua_setfield(L, -2, "VFUNC_ID"); lua_pushnumber(L, BOX_PRIV_ID); diff --git a/src/box/lua/upgrade.lua b/src/box/lua/upgrade.lua index 89d6e3d52..f2a1be639 100644 --- a/src/box/lua/upgrade.lua +++ b/src/box/lua/upgrade.lua @@ -737,6 +737,30 @@ local function upgrade_to_2_1_3() end end +local function create_vcollation_space() + local _collation = box.space._collation + local format = _collation:format() + create_sysview(box.schema.COLLATION_ID, box.schema.VCOLLATION_ID) + box.space[box.schema.VCOLLATION_ID]:format(format) +end + +local function upgrade_to_2_1_4() + local _collation = box.space._collation + local _index = box.space._index + + -- System space format usually is in order "id, owner, name...". + -- The fields "name", "owner" are swapped in "_collation" format, + -- due to the field "owner" was added after the "_collation" creation. + box.space._index:delete{276, 1} + log.info("update index name on _collation") + box.space._index:insert{_collation.id, 2, 'name', 'tree', {unique = true}, + {{1, 'string'}}} + log.info("create index owner on _collation") + box.space._index:insert{_collation.id, 1, 'owner', 'tree', {unique = false}, + {{2, 'unsigned'}}} + create_vcollation_space() +end + local function get_version() local version = box.space._schema:get{'version'} if version == nil then @@ -768,6 +792,7 @@ local function upgrade(options) {version = mkversion(2, 1, 1), func = upgrade_to_2_1_1, auto = true}, {version = mkversion(2, 1, 2), func = upgrade_to_2_1_2, auto = true}, {version = mkversion(2, 1, 3), func = upgrade_to_2_1_3, auto = true}, + {version = mkversion(2, 1, 4), func = upgrade_to_2_1_4, auto = true} } for _, handler in ipairs(handlers) do diff --git a/src/box/schema_def.h b/src/box/schema_def.h index eeeeb950b..77c004690 100644 --- a/src/box/schema_def.h +++ b/src/box/schema_def.h @@ -72,6 +72,8 @@ enum { BOX_SCHEMA_ID = 272, /** Space id of _collation. */ BOX_COLLATION_ID = 276, + /** Space id of _vcollation. */ + BOX_VCOLLATION_ID = 277, /** Space id of _space. */ BOX_SPACE_ID = 280, /** Space id of _vspace view. */ diff --git a/src/box/sysview.c b/src/box/sysview.c index 96c5e78ca..0d1259af0 100644 --- a/src/box/sysview.c +++ b/src/box/sysview.c @@ -402,6 +402,14 @@ vsequence_filter(struct space *source, struct tuple *tuple) ((PRIV_WRDA | PRIV_X) & effective); } +static bool + vcollation_filter(struct space *source, struct tuple *tuple) + { + (void) source; + (void) tuple; + return true; + } + static struct index * sysview_space_create_index(struct space *space, struct index_def *def) { @@ -448,6 +456,11 @@ sysview_space_create_index(struct space *space, struct index_def *def) source_index_id = def->iid; filter = vsequence_filter; break; + case BOX_VCOLLATION_ID: + source_space_id = BOX_COLLATION_ID; + source_index_id = def->iid; + filter = vcollation_filter; + break; default: diag_set(ClientError, ER_MODIFY_INDEX, def->name, space_name(space), diff --git a/test/app-tap/tarantoolctl.test.lua b/test/app-tap/tarantoolctl.test.lua index c1e1490ca..ac1efa0ba 100755 --- a/test/app-tap/tarantoolctl.test.lua +++ b/test/app-tap/tarantoolctl.test.lua @@ -405,8 +405,8 @@ do check_ctlcat_xlog(test_i, dir, "--from=3 --to=6 --format=json --show-system --replica 1", "\n", 3) check_ctlcat_xlog(test_i, dir, "--from=3 --to=6 --format=json --show-system --replica 1 --replica 2", "\n", 3) check_ctlcat_xlog(test_i, dir, "--from=3 --to=6 --format=json --show-system --replica 2", "\n", 0) - check_ctlcat_snap(test_i, dir, "--space=280", "---\n", 21) - check_ctlcat_snap(test_i, dir, "--space=288", "---\n", 47) + check_ctlcat_snap(test_i, dir, "--space=280", "---\n", 22) + check_ctlcat_snap(test_i, dir, "--space=288", "---\n", 51) end) end) diff --git a/test/box-py/bootstrap.result b/test/box-py/bootstrap.result index 379f6c51f..f37a28c80 100644 --- a/test/box-py/bootstrap.result +++ b/test/box-py/bootstrap.result @@ -4,7 +4,7 @@ box.internal.bootstrap() box.space._schema:select{} --- - - ['max_id', 511] - - ['version', 2, 1, 3] + - ['version', 2, 1, 4] ... box.space._cluster:select{} --- @@ -21,6 +21,10 @@ box.space._space:select{} 'name': 'name', 'type': 'string'}, {'name': 'owner', 'type': 'unsigned'}, {'name': 'type', 'type': 'string'}, {'name': 'locale', 'type': 'string'}, { 'name': 'opts', 'type': 'map'}]] + - [277, 1, '_vcollation', 'sysview', 0, {}, [{'name': 'id', 'type': 'unsigned'}, + {'name': 'name', 'type': 'string'}, {'name': 'owner', 'type': 'unsigned'}, { + 'name': 'type', 'type': 'string'}, {'name': 'locale', 'type': 'string'}, { + 'name': 'opts', 'type': 'map'}]] - [280, 1, '_space', 'memtx', 0, {}, [{'name': 'id', 'type': 'unsigned'}, {'name': 'owner', 'type': 'unsigned'}, {'name': 'name', 'type': 'string'}, {'name': 'engine', 'type': 'string'}, {'name': 'field_count', 'type': 'unsigned'}, {'name': 'flags', @@ -83,7 +87,11 @@ box.space._index:select{} --- - - [272, 0, 'primary', 'tree', {'unique': true}, [[0, 'string']]] - [276, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]] - - [276, 1, 'name', 'tree', {'unique': true}, [[1, 'string']]] + - [276, 1, 'owner', 'tree', {'unique': false}, [[2, 'unsigned']]] + - [276, 2, 'name', 'tree', {'unique': true}, [[1, 'string']]] + - [277, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]] + - [277, 1, 'owner', 'tree', {'unique': false}, [[2, 'unsigned']]] + - [277, 2, 'name', 'tree', {'unique': true}, [[1, 'string']]] - [280, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]] - [280, 1, 'owner', 'tree', {'unique': false}, [[1, 'unsigned']]] - [280, 2, 'name', 'tree', {'unique': true}, [[2, 'string']]] @@ -150,6 +158,7 @@ box.space._priv:select{} - [1, 1, 'universe', 0, 4294967295] - [1, 2, 'function', 1, 4] - [1, 2, 'space', 276, 2] + - [1, 2, 'space', 277, 1] - [1, 2, 'space', 281, 1] - [1, 2, 'space', 286, 1] - [1, 2, 'space', 289, 1] diff --git a/test/box/access_misc.result b/test/box/access_misc.result index 36ebfae09..2b7ca4f97 100644 --- a/test/box/access_misc.result +++ b/test/box/access_misc.result @@ -761,6 +761,10 @@ box.space._space:select() 'name': 'name', 'type': 'string'}, {'name': 'owner', 'type': 'unsigned'}, {'name': 'type', 'type': 'string'}, {'name': 'locale', 'type': 'string'}, { 'name': 'opts', 'type': 'map'}]] + - [277, 1, '_vcollation', 'sysview', 0, {}, [{'name': 'id', 'type': 'unsigned'}, + {'name': 'name', 'type': 'string'}, {'name': 'owner', 'type': 'unsigned'}, { + 'name': 'type', 'type': 'string'}, {'name': 'locale', 'type': 'string'}, { + 'name': 'opts', 'type': 'map'}]] - [280, 1, '_space', 'memtx', 0, {}, [{'name': 'id', 'type': 'unsigned'}, {'name': 'owner', 'type': 'unsigned'}, {'name': 'name', 'type': 'string'}, {'name': 'engine', 'type': 'string'}, {'name': 'field_count', 'type': 'unsigned'}, {'name': 'flags', diff --git a/test/box/access_sysview.result b/test/box/access_sysview.result index c6a2b22ed..96976babb 100644 --- a/test/box/access_sysview.result +++ b/test/box/access_sysview.result @@ -74,6 +74,10 @@ session.su('guest') --- - true ... +#box.space._vspace.index[2]:select('_vcollation') ~= 0 +--- +- true +... #box.space._vindex:select(box.space._vspace.id) > 0 --- - true @@ -94,6 +98,10 @@ session.su('guest') --- - true ... +#box.space._vindex:select(box.space._vcollation.id) > 0 +--- +- true +... box.session.su('admin') --- ... @@ -127,6 +135,10 @@ box.session.su('guest') --- - error: Read access to space '_vsequence' is denied for user 'guest' ... +#box.space._vcollation:select{} +--- +- error: Read access to space '_vcollation' is denied for user 'guest' +... box.session.su('admin') --- ... @@ -138,11 +150,15 @@ box.session.su('guest') ... #box.space._vspace:select{} --- -- 8 +- 9 ... #box.space._vindex:select{} --- -- 20 +- 24 +... +#box.space._vcollation:select{} +--- +- 277 ... box.session.su('admin') --- @@ -230,11 +246,11 @@ box.session.su('guest') ... #box.space._vspace:select{} --- -- 22 +- 23 ... #box.space._vindex:select{} --- -- 48 +- 52 ... #box.space._vuser:select{} --- @@ -242,12 +258,16 @@ box.session.su('guest') ... #box.space._vpriv:select{} --- -- 15 +- 16 ... #box.space._vfunc:select{} --- - 1 ... +#box.space._vcollation:select{} +--- +- 277 +... box.session.su('admin') --- ... @@ -262,7 +282,7 @@ box.session.su('guest') ... #box.space._vindex:select{} --- -- 48 +- 52 ... #box.space._vuser:select{} --- @@ -270,7 +290,7 @@ box.session.su('guest') ... #box.space._vpriv:select{} --- -- 15 +- 16 ... #box.space._vfunc:select{} --- @@ -280,6 +300,10 @@ box.session.su('guest') --- - 0 ... +#box.space._vcollation:select{} +--- +- 277 +... box.session.su('admin') --- ... @@ -631,6 +655,60 @@ seq:drop() --- ... -- +-- _vcollation +-- +box.session.su('admin') +--- +... +box.internal.collation.create('test', 'ICU', 'ru-RU') +--- +... +-- Only admin can create collation. +coll_cnt = #box.space._collation:select{} +--- +... +box.schema.user.grant("guest", "read, write, alter, execute", "space", "_collation") +--- +... +box.session.su("guest") +--- +... +box.internal.collation.create('guest0', 'ICU', 'ru-RU') +--- +- error: Create access to collation 'guest0' is denied for user 'guest' +... +box.space._vcollation:select{0} +--- +- - [0, 'none', 1, 'BINARY', '', {}] +... +#box.space._vcollation:select{} == coll_cnt +--- +- true +... +box.session.su('admin') +--- +... +-- _vcollation is readable anyway. +box.schema.user.revoke("guest", "read", "space", "_collation") +--- +... +box.session.su("guest") +--- +... +#box.space._vcollation:select{} +--- +- 278 +... +session.su('admin') +--- +... +box.internal.collation.drop('test') +--- +... +box.internal.collation.drop('guest0') +--- +... +-- -- view:alter() tests -- box.space._vspace.index[1]:alter({parts = { 2, 'string' }}) diff --git a/test/box/access_sysview.test.lua b/test/box/access_sysview.test.lua index c62458407..031df28aa 100644 --- a/test/box/access_sysview.test.lua +++ b/test/box/access_sysview.test.lua @@ -31,12 +31,14 @@ session.su('guest') #box.space._vspace.index[2]:select('_vuser') ~= 0 #box.space._vspace.index[2]:select('_vfunc') ~= 0 #box.space._vspace.index[2]:select('_vpriv') ~= 0 +#box.space._vspace.index[2]:select('_vcollation') ~= 0 #box.space._vindex:select(box.space._vspace.id) > 0 #box.space._vindex:select(box.space._vindex.id) > 0 #box.space._vindex:select(box.space._vuser.id) > 0 #box.space._vindex:select(box.space._vfunc.id) > 0 #box.space._vindex:select(box.space._vpriv.id) > 0 +#box.space._vindex:select(box.space._vcollation.id) > 0 box.session.su('admin') box.schema.user.revoke('guest', 'public') @@ -48,6 +50,7 @@ box.session.su('guest') #box.space._vpriv:select{} #box.space._vfunc:select{} #box.space._vsequence:select{} +#box.space._vcollation:select{} box.session.su('admin') box.schema.user.grant('guest', 'public') @@ -55,6 +58,7 @@ box.session.su('guest') #box.space._vspace:select{} #box.space._vindex:select{} +#box.space._vcollation:select{} box.session.su('admin') s = box.schema.space.create('test') @@ -96,6 +100,7 @@ box.session.su('guest') #box.space._vuser:select{} #box.space._vpriv:select{} #box.space._vfunc:select{} +#box.space._vcollation:select{} box.session.su('admin') box.schema.user.revoke('guest', 'read', 'universe') @@ -107,6 +112,7 @@ box.session.su('guest') #box.space._vpriv:select{} #box.space._vfunc:select{} #box.space._vsequence:select{} +#box.space._vcollation:select{} box.session.su('admin') box.schema.user.revoke('guest', 'write', 'universe') @@ -264,6 +270,30 @@ box.session.su("guest") session.su('admin') seq:drop() +-- +-- _vcollation +-- + +box.session.su('admin') +box.internal.collation.create('test', 'ICU', 'ru-RU') + +-- Only admin can create collation. +coll_cnt = #box.space._collation:select{} +box.schema.user.grant("guest", "read, write, alter, execute", "space", "_collation") +box.session.su("guest") +box.internal.collation.create('guest0', 'ICU', 'ru-RU') +box.space._vcollation:select{0} +#box.space._vcollation:select{} == coll_cnt +box.session.su('admin') + +-- _vcollation is readable anyway. +box.schema.user.revoke("guest", "read", "space", "_collation") +box.session.su("guest") +#box.space._vcollation:select{} +session.su('admin') +box.internal.collation.drop('test') +box.internal.collation.drop('guest0') + -- -- view:alter() tests -- diff --git a/test/box/alter.result b/test/box/alter.result index c1b1de135..7fb09b4cd 100644 --- a/test/box/alter.result +++ b/test/box/alter.result @@ -183,7 +183,11 @@ _index:select{} --- - - [272, 0, 'primary', 'tree', {'unique': true}, [[0, 'string']]] - [276, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]] - - [276, 1, 'name', 'tree', {'unique': true}, [[1, 'string']]] + - [276, 1, 'owner', 'tree', {'unique': false}, [[2, 'unsigned']]] + - [276, 2, 'name', 'tree', {'unique': true}, [[1, 'string']]] + - [277, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]] + - [277, 1, 'owner', 'tree', {'unique': false}, [[2, 'unsigned']]] + - [277, 2, 'name', 'tree', {'unique': true}, [[1, 'string']]] - [280, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]] - [280, 1, 'owner', 'tree', {'unique': false}, [[1, 'unsigned']]] - [280, 2, 'name', 'tree', {'unique': true}, [[2, 'string']]] diff --git a/test/wal_off/alter.result b/test/wal_off/alter.result index ee280fcbb..8040efa1a 100644 --- a/test/wal_off/alter.result +++ b/test/wal_off/alter.result @@ -28,7 +28,7 @@ end; ... #spaces; --- -- 65505 +- 65504 ... -- cleanup for k, v in pairs(spaces) do ^ permalink raw reply [flat|nested] 12+ messages in thread
* [tarantool-patches] Re: [PATCH 1/2] schema: add "_vcollation" sysview 2019-05-16 11:24 ` [tarantool-patches] [PATCH 1/2] schema: add "_vcollation" sysview Roman Khabibov 2019-05-16 12:43 ` [tarantool-patches] " Konstantin Osipov @ 2019-05-30 11:57 ` Konstantin Osipov 1 sibling, 0 replies; 12+ messages in thread From: Konstantin Osipov @ 2019-05-30 11:57 UTC (permalink / raw) To: Roman Khabibov; +Cc: tarantool-patches * Roman Khabibov <roman.habibov@tarantool.org> [19/05/16 14:27]: > +local function upgrade_to_2_1_4() > + local _collation = box.space._collation > + local _index = box.space._index > + > + -- System space format usually is in order "id, owner, name...". > + -- The fields "name", "owner" are swapped in "_collation" format, > + -- due to the field "owner" was added after the "_collation" creation. > + box.space._index:delete{276, 1} why do you delete the index entry just to rename it? Can't you update the existing record? > +static bool > + vcollation_filter(struct space *source, struct tuple *tuple) > + { > + (void) source; > + (void) tuple; > + return true; > + } > + The return value and function should have the same indent, please re-indent. I don't see where 'PUBLIC' role is granted access to the new space. How does this work? -- Konstantin Osipov, Moscow, Russia ^ permalink raw reply [flat|nested] 12+ messages in thread
* [tarantool-patches] [PATCH 2/2] net.box: fetch '_vcollation' sysview into the module 2019-05-16 11:24 [tarantool-patches] [PATCH 0/2] Add "_vcollation" sysview and fetch it in net.box Roman Khabibov 2019-05-16 11:24 ` [tarantool-patches] [PATCH 1/2] schema: add "_vcollation" sysview Roman Khabibov @ 2019-05-16 11:24 ` Roman Khabibov 2019-05-16 12:43 ` [tarantool-patches] " Konstantin Osipov 2019-05-30 11:58 ` Konstantin Osipov 1 sibling, 2 replies; 12+ messages in thread From: Roman Khabibov @ 2019-05-16 11:24 UTC (permalink / raw) To: tarantool-patches; +Cc: kostja Fetch "_vcollation" sysview to show collation name instead collation id. Closes #3941 --- src/box/lua/net_box.lua | 19 ++++++++++++++----- test/box/net.box.result | 2 +- test/box/stat_net.result | 4 ++-- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/box/lua/net_box.lua b/src/box/lua/net_box.lua index 0cfb5075d..86650a4cb 100644 --- a/src/box/lua/net_box.lua +++ b/src/box/lua/net_box.lua @@ -31,6 +31,7 @@ local decode_greeting = internal.decode_greeting local TIMEOUT_INFINITY = 500 * 365 * 86400 local VSPACE_ID = 281 local VINDEX_ID = 289 +local VCOLLATION_ID = 277 local DEFAULT_CONNECT_TIMEOUT = 10 local IPROTO_STATUS_KEY = 0x00 @@ -735,11 +736,15 @@ local function create_transport(host, port, user, password, callback, end local select1_id = new_request_id() local select2_id = new_request_id() + local select3_id = new_request_id() local response = {} -- fetch everything from space _vspace, 2 = ITER_ALL encode_select(send_buf, select1_id, VSPACE_ID, 0, 2, 0, 0xFFFFFFFF, nil) -- fetch everything from space _vindex, 2 = ITER_ALL encode_select(send_buf, select2_id, VINDEX_ID, 0, 2, 0, 0xFFFFFFFF, nil) + -- fetch everything from space _vcollation, 2 = ITER_ALL + encode_select(send_buf, select3_id, VCOLLATION_ID, 0, 2, 0, 0xFFFFFFFF, nil) + schema_version = nil -- any schema_version will do provided that -- it is consistent across responses repeat @@ -747,7 +752,7 @@ local function create_transport(host, port, user, password, callback, if err then return error_sm(err, hdr) end dispatch_response_iproto(hdr, body_rpos, body_end) local id = hdr[IPROTO_SYNC_KEY] - if id == select1_id or id == select2_id then + if id == select1_id or id == select2_id or id == select3_id then -- response to a schema query we've submitted local status = hdr[IPROTO_STATUS_KEY] local response_schema_version = hdr[IPROTO_SCHEMA_VERSION_KEY] @@ -766,9 +771,9 @@ local function create_transport(host, port, user, password, callback, body, body_end = decode(body_rpos) response[id] = body[IPROTO_DATA_KEY] end - until response[select1_id] and response[select2_id] + until response[select1_id] and response[select2_id] and response[select3_id] callback('did_fetch_schema', schema_version, - response[select1_id], response[select2_id]) + response[select1_id], response[select2_id], response[select3_id]) set_state('active') return iproto_sm(schema_version) end @@ -1190,7 +1195,7 @@ function remote_methods:timeout(timeout) return self end -function remote_methods:_install_schema(schema_version, spaces, indices) +function remote_methods:_install_schema(schema_version, spaces, indices, collations) local sl, space_mt, index_mt = {}, self._space_mt, self._index_mt for _, space in pairs(spaces) do local name = space[3] @@ -1258,11 +1263,15 @@ function remote_methods:_install_schema(schema_version, spaces, indices) local pkcollationid = index[PARTS][k].collation local pktype = index[PARTS][k][2] or index[PARTS][k].type local pkfield = index[PARTS][k][1] or index[PARTS][k].field + local pkcollation = nil + if pkcollationid ~= nil then + pkcollation = collations[pkcollationid + 1][2] + end local pk = { type = pktype, fieldno = pkfield + 1, - collation_id = pkcollationid, + collation = pkcollation, is_nullable = pknullable } idx.parts[k] = pk diff --git a/test/box/net.box.result b/test/box/net.box.result index d02fed7a3..474297af3 100644 --- a/test/box/net.box.result +++ b/test/box/net.box.result @@ -2910,7 +2910,7 @@ c.space.test.index.sk.parts --- - - type: string is_nullable: false - collation_id: 277 + collation: test fieldno: 1 ... c:close() diff --git a/test/box/stat_net.result b/test/box/stat_net.result index 92f6d581f..9eeada7ec 100644 --- a/test/box/stat_net.result +++ b/test/box/stat_net.result @@ -85,7 +85,7 @@ box.stat.net.CONNECTIONS.total ... box.stat.net.REQUESTS.total --- -- 13 +- 17 ... box.stat.net.CONNECTIONS.current --- @@ -151,7 +151,7 @@ test_run:wait_cond(function() return box.stat.net.REQUESTS.current == 0 end, WAI ... box.stat.net.REQUESTS.total --- -- 15 +- 19 ... -- reset box.stat.reset() -- 2.20.1 (Apple Git-117) ^ permalink raw reply [flat|nested] 12+ messages in thread
* [tarantool-patches] Re: [PATCH 2/2] net.box: fetch '_vcollation' sysview into the module 2019-05-16 11:24 ` [tarantool-patches] [PATCH 2/2] net.box: fetch '_vcollation' sysview into the module Roman Khabibov @ 2019-05-16 12:43 ` Konstantin Osipov 2019-05-30 11:58 ` Konstantin Osipov 1 sibling, 0 replies; 12+ messages in thread From: Konstantin Osipov @ 2019-05-16 12:43 UTC (permalink / raw) To: Roman Khabibov; +Cc: tarantool-patches * Roman Khabibov <roman.habibov@tarantool.org> [19/05/16 14:27]: > Fetch "_vcollation" sysview to show collation name instead collation id. this one is lgtm. -- Konstantin Osipov, Moscow, Russia, +7 903 626 22 32 ^ permalink raw reply [flat|nested] 12+ messages in thread
* [tarantool-patches] Re: [PATCH 2/2] net.box: fetch '_vcollation' sysview into the module 2019-05-16 11:24 ` [tarantool-patches] [PATCH 2/2] net.box: fetch '_vcollation' sysview into the module Roman Khabibov 2019-05-16 12:43 ` [tarantool-patches] " Konstantin Osipov @ 2019-05-30 11:58 ` Konstantin Osipov 2019-05-30 12:05 ` Vladislav Shpilevoy 1 sibling, 1 reply; 12+ messages in thread From: Konstantin Osipov @ 2019-05-30 11:58 UTC (permalink / raw) To: Roman Khabibov; +Cc: tarantool-patches * Roman Khabibov <roman.habibov@tarantool.org> [19/05/16 14:27]: > Fetch "_vcollation" sysview to show collation name instead collation id. @gerold107 could you review this? -- Konstantin Osipov, Moscow, Russia ^ permalink raw reply [flat|nested] 12+ messages in thread
* [tarantool-patches] Re: [PATCH 2/2] net.box: fetch '_vcollation' sysview into the module 2019-05-30 11:58 ` Konstantin Osipov @ 2019-05-30 12:05 ` Vladislav Shpilevoy 0 siblings, 0 replies; 12+ messages in thread From: Vladislav Shpilevoy @ 2019-05-30 12:05 UTC (permalink / raw) To: tarantool-patches, Konstantin Osipov, Roman Khabibov On 30/05/2019 14:58, Konstantin Osipov wrote: > * Roman Khabibov <roman.habibov@tarantool.org> [19/05/16 14:27]: >> Fetch "_vcollation" sysview to show collation name instead collation id. > > @gerold107 could you review this? > I am not 107, but 103. Ok, I will. Roman, please, send a bumped version in a new thread. ^ permalink raw reply [flat|nested] 12+ messages in thread
* [tarantool-patches] [PATCH 0/2] Add _vcollation and fetch in net.box @ 2019-05-30 12:36 Roman Khabibov 2019-05-30 12:36 ` [tarantool-patches] [PATCH 1/2] schema: add "_vcollation" sysview Roman Khabibov 0 siblings, 1 reply; 12+ messages in thread From: Roman Khabibov @ 2019-05-30 12:36 UTC (permalink / raw) To: tarantool-patches; +Cc: v.shpilevoy As I understood "readable for all" means that filter for "_vcollation" must always return "true", because the condition "User has read access to according system space" is always met. Roman Khabibov (2): schema: add "_vcollation" sysview net.box: fetch '_vcollation' sysview into the module src/box/bootstrap.snap | Bin 4374 -> 4441 bytes src/box/lua/net_box.lua | 24 ++++++-- src/box/lua/space.cc | 2 + src/box/lua/upgrade.lua | 25 ++++++++ src/box/schema_def.h | 2 + src/box/sysview.c | 13 ++++ test/app-tap/tarantoolctl.test.lua | 4 +- test/box-py/bootstrap.result | 13 +++- test/box/access_misc.result | 4 ++ test/box/access_sysview.result | 92 ++++++++++++++++++++++++++--- test/box/access_sysview.test.lua | 30 ++++++++++ test/box/alter.result | 6 +- test/box/net.box.result | 2 +- test/box/stat_net.result | 4 +- test/wal_off/alter.result | 2 +- 15 files changed, 201 insertions(+), 22 deletions(-) -- 2.20.1 (Apple Git-117) ^ permalink raw reply [flat|nested] 12+ messages in thread
* [tarantool-patches] [PATCH 1/2] schema: add "_vcollation" sysview 2019-05-30 12:36 [tarantool-patches] [PATCH 0/2] Add _vcollation and fetch in net.box Roman Khabibov @ 2019-05-30 12:36 ` Roman Khabibov 2019-06-04 16:31 ` Vladimir Davydov 0 siblings, 1 reply; 12+ messages in thread From: Roman Khabibov @ 2019-05-30 12:36 UTC (permalink / raw) To: tarantool-patches; +Cc: v.shpilevoy Add "_vcollation" sysview to read it from net.box. This sysview is always readable, exept when the user doesn't have "public" role. Needed for #3941 --- src/box/bootstrap.snap | Bin 4374 -> 4441 bytes src/box/lua/space.cc | 2 + src/box/lua/upgrade.lua | 25 ++++++++ src/box/schema_def.h | 2 + src/box/sysview.c | 13 ++++ test/app-tap/tarantoolctl.test.lua | 4 +- test/box-py/bootstrap.result | 13 +++- test/box/access_misc.result | 4 ++ test/box/access_sysview.result | 92 ++++++++++++++++++++++++++--- test/box/access_sysview.test.lua | 30 ++++++++++ test/box/alter.result | 6 +- test/wal_off/alter.result | 2 +- 12 files changed, 180 insertions(+), 13 deletions(-) diff --git a/src/box/bootstrap.snap b/src/box/bootstrap.snap index 871a93f9856f97636ad55b7f5260e5c6957fef36..4e93a794a0608710a2bb93e96e9031451186bf01 100644 GIT binary patch literal 4441 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 literal 4374 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 QJ>-q$w`eZc2h|X*?NOjQ=l}o! diff --git a/src/box/lua/space.cc b/src/box/lua/space.cc index 100da0a79..fbfc2a64d 100644 --- a/src/box/lua/space.cc +++ b/src/box/lua/space.cc @@ -525,6 +525,8 @@ box_lua_space_init(struct lua_State *L) lua_setfield(L, -2, "FUNC_ID"); lua_pushnumber(L, BOX_COLLATION_ID); lua_setfield(L, -2, "COLLATION_ID"); + lua_pushnumber(L, BOX_VCOLLATION_ID); + lua_setfield(L, -2, "VCOLLATION_ID"); lua_pushnumber(L, BOX_VFUNC_ID); lua_setfield(L, -2, "VFUNC_ID"); lua_pushnumber(L, BOX_PRIV_ID); diff --git a/src/box/lua/upgrade.lua b/src/box/lua/upgrade.lua index 89d6e3d52..f2a1be639 100644 --- a/src/box/lua/upgrade.lua +++ b/src/box/lua/upgrade.lua @@ -737,6 +737,30 @@ local function upgrade_to_2_1_3() end end +local function create_vcollation_space() + local _collation = box.space._collation + local format = _collation:format() + create_sysview(box.schema.COLLATION_ID, box.schema.VCOLLATION_ID) + box.space[box.schema.VCOLLATION_ID]:format(format) +end + +local function upgrade_to_2_1_4() + local _collation = box.space._collation + local _index = box.space._index + + -- System space format usually is in order "id, owner, name...". + -- The fields "name", "owner" are swapped in "_collation" format, + -- due to the field "owner" was added after the "_collation" creation. + box.space._index:delete{276, 1} + log.info("update index name on _collation") + box.space._index:insert{_collation.id, 2, 'name', 'tree', {unique = true}, + {{1, 'string'}}} + log.info("create index owner on _collation") + box.space._index:insert{_collation.id, 1, 'owner', 'tree', {unique = false}, + {{2, 'unsigned'}}} + create_vcollation_space() +end + local function get_version() local version = box.space._schema:get{'version'} if version == nil then @@ -768,6 +792,7 @@ local function upgrade(options) {version = mkversion(2, 1, 1), func = upgrade_to_2_1_1, auto = true}, {version = mkversion(2, 1, 2), func = upgrade_to_2_1_2, auto = true}, {version = mkversion(2, 1, 3), func = upgrade_to_2_1_3, auto = true}, + {version = mkversion(2, 1, 4), func = upgrade_to_2_1_4, auto = true} } for _, handler in ipairs(handlers) do diff --git a/src/box/schema_def.h b/src/box/schema_def.h index eeeeb950b..77c004690 100644 --- a/src/box/schema_def.h +++ b/src/box/schema_def.h @@ -72,6 +72,8 @@ enum { BOX_SCHEMA_ID = 272, /** Space id of _collation. */ BOX_COLLATION_ID = 276, + /** Space id of _vcollation. */ + BOX_VCOLLATION_ID = 277, /** Space id of _space. */ BOX_SPACE_ID = 280, /** Space id of _vspace view. */ diff --git a/src/box/sysview.c b/src/box/sysview.c index 96c5e78ca..0d1259af0 100644 --- a/src/box/sysview.c +++ b/src/box/sysview.c @@ -402,6 +402,14 @@ vsequence_filter(struct space *source, struct tuple *tuple) ((PRIV_WRDA | PRIV_X) & effective); } +static bool + vcollation_filter(struct space *source, struct tuple *tuple) + { + (void) source; + (void) tuple; + return true; + } + static struct index * sysview_space_create_index(struct space *space, struct index_def *def) { @@ -448,6 +456,11 @@ sysview_space_create_index(struct space *space, struct index_def *def) source_index_id = def->iid; filter = vsequence_filter; break; + case BOX_VCOLLATION_ID: + source_space_id = BOX_COLLATION_ID; + source_index_id = def->iid; + filter = vcollation_filter; + break; default: diag_set(ClientError, ER_MODIFY_INDEX, def->name, space_name(space), diff --git a/test/app-tap/tarantoolctl.test.lua b/test/app-tap/tarantoolctl.test.lua index c1e1490ca..ac1efa0ba 100755 --- a/test/app-tap/tarantoolctl.test.lua +++ b/test/app-tap/tarantoolctl.test.lua @@ -405,8 +405,8 @@ do check_ctlcat_xlog(test_i, dir, "--from=3 --to=6 --format=json --show-system --replica 1", "\n", 3) check_ctlcat_xlog(test_i, dir, "--from=3 --to=6 --format=json --show-system --replica 1 --replica 2", "\n", 3) check_ctlcat_xlog(test_i, dir, "--from=3 --to=6 --format=json --show-system --replica 2", "\n", 0) - check_ctlcat_snap(test_i, dir, "--space=280", "---\n", 21) - check_ctlcat_snap(test_i, dir, "--space=288", "---\n", 47) + check_ctlcat_snap(test_i, dir, "--space=280", "---\n", 22) + check_ctlcat_snap(test_i, dir, "--space=288", "---\n", 51) end) end) diff --git a/test/box-py/bootstrap.result b/test/box-py/bootstrap.result index 379f6c51f..f37a28c80 100644 --- a/test/box-py/bootstrap.result +++ b/test/box-py/bootstrap.result @@ -4,7 +4,7 @@ box.internal.bootstrap() box.space._schema:select{} --- - - ['max_id', 511] - - ['version', 2, 1, 3] + - ['version', 2, 1, 4] ... box.space._cluster:select{} --- @@ -21,6 +21,10 @@ box.space._space:select{} 'name': 'name', 'type': 'string'}, {'name': 'owner', 'type': 'unsigned'}, {'name': 'type', 'type': 'string'}, {'name': 'locale', 'type': 'string'}, { 'name': 'opts', 'type': 'map'}]] + - [277, 1, '_vcollation', 'sysview', 0, {}, [{'name': 'id', 'type': 'unsigned'}, + {'name': 'name', 'type': 'string'}, {'name': 'owner', 'type': 'unsigned'}, { + 'name': 'type', 'type': 'string'}, {'name': 'locale', 'type': 'string'}, { + 'name': 'opts', 'type': 'map'}]] - [280, 1, '_space', 'memtx', 0, {}, [{'name': 'id', 'type': 'unsigned'}, {'name': 'owner', 'type': 'unsigned'}, {'name': 'name', 'type': 'string'}, {'name': 'engine', 'type': 'string'}, {'name': 'field_count', 'type': 'unsigned'}, {'name': 'flags', @@ -83,7 +87,11 @@ box.space._index:select{} --- - - [272, 0, 'primary', 'tree', {'unique': true}, [[0, 'string']]] - [276, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]] - - [276, 1, 'name', 'tree', {'unique': true}, [[1, 'string']]] + - [276, 1, 'owner', 'tree', {'unique': false}, [[2, 'unsigned']]] + - [276, 2, 'name', 'tree', {'unique': true}, [[1, 'string']]] + - [277, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]] + - [277, 1, 'owner', 'tree', {'unique': false}, [[2, 'unsigned']]] + - [277, 2, 'name', 'tree', {'unique': true}, [[1, 'string']]] - [280, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]] - [280, 1, 'owner', 'tree', {'unique': false}, [[1, 'unsigned']]] - [280, 2, 'name', 'tree', {'unique': true}, [[2, 'string']]] @@ -150,6 +158,7 @@ box.space._priv:select{} - [1, 1, 'universe', 0, 4294967295] - [1, 2, 'function', 1, 4] - [1, 2, 'space', 276, 2] + - [1, 2, 'space', 277, 1] - [1, 2, 'space', 281, 1] - [1, 2, 'space', 286, 1] - [1, 2, 'space', 289, 1] diff --git a/test/box/access_misc.result b/test/box/access_misc.result index 36ebfae09..2b7ca4f97 100644 --- a/test/box/access_misc.result +++ b/test/box/access_misc.result @@ -761,6 +761,10 @@ box.space._space:select() 'name': 'name', 'type': 'string'}, {'name': 'owner', 'type': 'unsigned'}, {'name': 'type', 'type': 'string'}, {'name': 'locale', 'type': 'string'}, { 'name': 'opts', 'type': 'map'}]] + - [277, 1, '_vcollation', 'sysview', 0, {}, [{'name': 'id', 'type': 'unsigned'}, + {'name': 'name', 'type': 'string'}, {'name': 'owner', 'type': 'unsigned'}, { + 'name': 'type', 'type': 'string'}, {'name': 'locale', 'type': 'string'}, { + 'name': 'opts', 'type': 'map'}]] - [280, 1, '_space', 'memtx', 0, {}, [{'name': 'id', 'type': 'unsigned'}, {'name': 'owner', 'type': 'unsigned'}, {'name': 'name', 'type': 'string'}, {'name': 'engine', 'type': 'string'}, {'name': 'field_count', 'type': 'unsigned'}, {'name': 'flags', diff --git a/test/box/access_sysview.result b/test/box/access_sysview.result index c6a2b22ed..96976babb 100644 --- a/test/box/access_sysview.result +++ b/test/box/access_sysview.result @@ -74,6 +74,10 @@ session.su('guest') --- - true ... +#box.space._vspace.index[2]:select('_vcollation') ~= 0 +--- +- true +... #box.space._vindex:select(box.space._vspace.id) > 0 --- - true @@ -94,6 +98,10 @@ session.su('guest') --- - true ... +#box.space._vindex:select(box.space._vcollation.id) > 0 +--- +- true +... box.session.su('admin') --- ... @@ -127,6 +135,10 @@ box.session.su('guest') --- - error: Read access to space '_vsequence' is denied for user 'guest' ... +#box.space._vcollation:select{} +--- +- error: Read access to space '_vcollation' is denied for user 'guest' +... box.session.su('admin') --- ... @@ -138,11 +150,15 @@ box.session.su('guest') ... #box.space._vspace:select{} --- -- 8 +- 9 ... #box.space._vindex:select{} --- -- 20 +- 24 +... +#box.space._vcollation:select{} +--- +- 277 ... box.session.su('admin') --- @@ -230,11 +246,11 @@ box.session.su('guest') ... #box.space._vspace:select{} --- -- 22 +- 23 ... #box.space._vindex:select{} --- -- 48 +- 52 ... #box.space._vuser:select{} --- @@ -242,12 +258,16 @@ box.session.su('guest') ... #box.space._vpriv:select{} --- -- 15 +- 16 ... #box.space._vfunc:select{} --- - 1 ... +#box.space._vcollation:select{} +--- +- 277 +... box.session.su('admin') --- ... @@ -262,7 +282,7 @@ box.session.su('guest') ... #box.space._vindex:select{} --- -- 48 +- 52 ... #box.space._vuser:select{} --- @@ -270,7 +290,7 @@ box.session.su('guest') ... #box.space._vpriv:select{} --- -- 15 +- 16 ... #box.space._vfunc:select{} --- @@ -280,6 +300,10 @@ box.session.su('guest') --- - 0 ... +#box.space._vcollation:select{} +--- +- 277 +... box.session.su('admin') --- ... @@ -631,6 +655,60 @@ seq:drop() --- ... -- +-- _vcollation +-- +box.session.su('admin') +--- +... +box.internal.collation.create('test', 'ICU', 'ru-RU') +--- +... +-- Only admin can create collation. +coll_cnt = #box.space._collation:select{} +--- +... +box.schema.user.grant("guest", "read, write, alter, execute", "space", "_collation") +--- +... +box.session.su("guest") +--- +... +box.internal.collation.create('guest0', 'ICU', 'ru-RU') +--- +- error: Create access to collation 'guest0' is denied for user 'guest' +... +box.space._vcollation:select{0} +--- +- - [0, 'none', 1, 'BINARY', '', {}] +... +#box.space._vcollation:select{} == coll_cnt +--- +- true +... +box.session.su('admin') +--- +... +-- _vcollation is readable anyway. +box.schema.user.revoke("guest", "read", "space", "_collation") +--- +... +box.session.su("guest") +--- +... +#box.space._vcollation:select{} +--- +- 278 +... +session.su('admin') +--- +... +box.internal.collation.drop('test') +--- +... +box.internal.collation.drop('guest0') +--- +... +-- -- view:alter() tests -- box.space._vspace.index[1]:alter({parts = { 2, 'string' }}) diff --git a/test/box/access_sysview.test.lua b/test/box/access_sysview.test.lua index c62458407..031df28aa 100644 --- a/test/box/access_sysview.test.lua +++ b/test/box/access_sysview.test.lua @@ -31,12 +31,14 @@ session.su('guest') #box.space._vspace.index[2]:select('_vuser') ~= 0 #box.space._vspace.index[2]:select('_vfunc') ~= 0 #box.space._vspace.index[2]:select('_vpriv') ~= 0 +#box.space._vspace.index[2]:select('_vcollation') ~= 0 #box.space._vindex:select(box.space._vspace.id) > 0 #box.space._vindex:select(box.space._vindex.id) > 0 #box.space._vindex:select(box.space._vuser.id) > 0 #box.space._vindex:select(box.space._vfunc.id) > 0 #box.space._vindex:select(box.space._vpriv.id) > 0 +#box.space._vindex:select(box.space._vcollation.id) > 0 box.session.su('admin') box.schema.user.revoke('guest', 'public') @@ -48,6 +50,7 @@ box.session.su('guest') #box.space._vpriv:select{} #box.space._vfunc:select{} #box.space._vsequence:select{} +#box.space._vcollation:select{} box.session.su('admin') box.schema.user.grant('guest', 'public') @@ -55,6 +58,7 @@ box.session.su('guest') #box.space._vspace:select{} #box.space._vindex:select{} +#box.space._vcollation:select{} box.session.su('admin') s = box.schema.space.create('test') @@ -96,6 +100,7 @@ box.session.su('guest') #box.space._vuser:select{} #box.space._vpriv:select{} #box.space._vfunc:select{} +#box.space._vcollation:select{} box.session.su('admin') box.schema.user.revoke('guest', 'read', 'universe') @@ -107,6 +112,7 @@ box.session.su('guest') #box.space._vpriv:select{} #box.space._vfunc:select{} #box.space._vsequence:select{} +#box.space._vcollation:select{} box.session.su('admin') box.schema.user.revoke('guest', 'write', 'universe') @@ -264,6 +270,30 @@ box.session.su("guest") session.su('admin') seq:drop() +-- +-- _vcollation +-- + +box.session.su('admin') +box.internal.collation.create('test', 'ICU', 'ru-RU') + +-- Only admin can create collation. +coll_cnt = #box.space._collation:select{} +box.schema.user.grant("guest", "read, write, alter, execute", "space", "_collation") +box.session.su("guest") +box.internal.collation.create('guest0', 'ICU', 'ru-RU') +box.space._vcollation:select{0} +#box.space._vcollation:select{} == coll_cnt +box.session.su('admin') + +-- _vcollation is readable anyway. +box.schema.user.revoke("guest", "read", "space", "_collation") +box.session.su("guest") +#box.space._vcollation:select{} +session.su('admin') +box.internal.collation.drop('test') +box.internal.collation.drop('guest0') + -- -- view:alter() tests -- diff --git a/test/box/alter.result b/test/box/alter.result index c1b1de135..7fb09b4cd 100644 --- a/test/box/alter.result +++ b/test/box/alter.result @@ -183,7 +183,11 @@ _index:select{} --- - - [272, 0, 'primary', 'tree', {'unique': true}, [[0, 'string']]] - [276, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]] - - [276, 1, 'name', 'tree', {'unique': true}, [[1, 'string']]] + - [276, 1, 'owner', 'tree', {'unique': false}, [[2, 'unsigned']]] + - [276, 2, 'name', 'tree', {'unique': true}, [[1, 'string']]] + - [277, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]] + - [277, 1, 'owner', 'tree', {'unique': false}, [[2, 'unsigned']]] + - [277, 2, 'name', 'tree', {'unique': true}, [[1, 'string']]] - [280, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]] - [280, 1, 'owner', 'tree', {'unique': false}, [[1, 'unsigned']]] - [280, 2, 'name', 'tree', {'unique': true}, [[2, 'string']]] diff --git a/test/wal_off/alter.result b/test/wal_off/alter.result index ee280fcbb..8040efa1a 100644 --- a/test/wal_off/alter.result +++ b/test/wal_off/alter.result @@ -28,7 +28,7 @@ end; ... #spaces; --- -- 65505 +- 65504 ... -- cleanup for k, v in pairs(spaces) do -- 2.20.1 (Apple Git-117) ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [tarantool-patches] [PATCH 1/2] schema: add "_vcollation" sysview 2019-05-30 12:36 ` [tarantool-patches] [PATCH 1/2] schema: add "_vcollation" sysview Roman Khabibov @ 2019-06-04 16:31 ` Vladimir Davydov 2019-06-05 17:08 ` [tarantool-patches] " Roman Khabibov 0 siblings, 1 reply; 12+ messages in thread From: Vladimir Davydov @ 2019-06-04 16:31 UTC (permalink / raw) To: Roman Khabibov; +Cc: tarantool-patches, v.shpilevoy On Thu, May 30, 2019 at 03:36:02PM +0300, Roman Khabibov wrote: > diff --git a/src/box/lua/upgrade.lua b/src/box/lua/upgrade.lua > index 89d6e3d52..f2a1be639 100644 > --- a/src/box/lua/upgrade.lua > +++ b/src/box/lua/upgrade.lua > @@ -737,6 +737,30 @@ local function upgrade_to_2_1_3() > end > end > > +local function create_vcollation_space() > + local _collation = box.space._collation > + local format = _collation:format() > + create_sysview(box.schema.COLLATION_ID, box.schema.VCOLLATION_ID) > + box.space[box.schema.VCOLLATION_ID]:format(format) > +end > + > +local function upgrade_to_2_1_4() > + local _collation = box.space._collation > + local _index = box.space._index > + > + -- System space format usually is in order "id, owner, name...". > + -- The fields "name", "owner" are swapped in "_collation" format, > + -- due to the field "owner" was added after the "_collation" creation. > + box.space._index:delete{276, 1} > + log.info("update index name on _collation") > + box.space._index:insert{_collation.id, 2, 'name', 'tree', {unique = true}, > + {{1, 'string'}}} > + log.info("create index owner on _collation") > + box.space._index:insert{_collation.id, 1, 'owner', 'tree', {unique = false}, > + {{2, 'unsigned'}}} I don't understand this part. Why do you need to create 'owner' index? Why do you need to update 'name' index? > + create_vcollation_space() > +end > + > local function get_version() > local version = box.space._schema:get{'version'} > if version == nil then > @@ -768,6 +792,7 @@ local function upgrade(options) > {version = mkversion(2, 1, 1), func = upgrade_to_2_1_1, auto = true}, > {version = mkversion(2, 1, 2), func = upgrade_to_2_1_2, auto = true}, > {version = mkversion(2, 1, 3), func = upgrade_to_2_1_3, auto = true}, > + {version = mkversion(2, 1, 4), func = upgrade_to_2_1_4, auto = true} Should be in upgrade_to_2_2_1. > } > > for _, handler in ipairs(handlers) do > diff --git a/src/box/schema_def.h b/src/box/schema_def.h > index eeeeb950b..77c004690 100644 > --- a/src/box/schema_def.h > +++ b/src/box/schema_def.h > @@ -72,6 +72,8 @@ enum { > BOX_SCHEMA_ID = 272, > /** Space id of _collation. */ > BOX_COLLATION_ID = 276, > + /** Space id of _vcollation. */ > + BOX_VCOLLATION_ID = 277, > /** Space id of _space. */ > BOX_SPACE_ID = 280, > /** Space id of _vspace view. */ > diff --git a/src/box/sysview.c b/src/box/sysview.c > index 96c5e78ca..0d1259af0 100644 > --- a/src/box/sysview.c > +++ b/src/box/sysview.c > @@ -402,6 +402,14 @@ vsequence_filter(struct space *source, struct tuple *tuple) > ((PRIV_WRDA | PRIV_X) & effective); > } > > +static bool > + vcollation_filter(struct space *source, struct tuple *tuple) > + { > + (void) source; > + (void) tuple; > + return true; > + } > + Bad indentation. ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [tarantool-patches] Re: [PATCH 1/2] schema: add "_vcollation" sysview 2019-06-04 16:31 ` Vladimir Davydov @ 2019-06-05 17:08 ` Roman Khabibov 2019-06-05 17:56 ` Vladimir Davydov 0 siblings, 1 reply; 12+ messages in thread From: Roman Khabibov @ 2019-06-05 17:08 UTC (permalink / raw) To: tarantool-patches; +Cc: Vladimir Davydov Hi! Thanks for the review. > On Jun 4, 2019, at 7:31 PM, Vladimir Davydov <vdavydov.dev@gmail.com> wrote: > > On Thu, May 30, 2019 at 03:36:02PM +0300, Roman Khabibov wrote: >> diff --git a/src/box/lua/upgrade.lua b/src/box/lua/upgrade.lua >> index 89d6e3d52..f2a1be639 100644 >> --- a/src/box/lua/upgrade.lua >> +++ b/src/box/lua/upgrade.lua >> @@ -737,6 +737,30 @@ local function upgrade_to_2_1_3() >> end >> end >> >> +local function create_vcollation_space() >> + local _collation = box.space._collation >> + local format = _collation:format() >> + create_sysview(box.schema.COLLATION_ID, box.schema.VCOLLATION_ID) >> + box.space[box.schema.VCOLLATION_ID]:format(format) >> +end >> + >> +local function upgrade_to_2_1_4() >> + local _collation = box.space._collation >> + local _index = box.space._index >> + >> + -- System space format usually is in order "id, owner, name...". >> + -- The fields "name", "owner" are swapped in "_collation" format, >> + -- due to the field "owner" was added after the "_collation" creation. >> + box.space._index:delete{276, 1} >> + log.info("update index name on _collation") >> + box.space._index:insert{_collation.id, 2, 'name', 'tree', {unique = true}, >> + {{1, 'string'}}} >> + log.info("create index owner on _collation") >> + box.space._index:insert{_collation.id, 1, 'owner', 'tree', {unique = false}, >> + {{2, 'unsigned'}}} > > I don't understand this part. Why do you need to create 'owner' index? > Why do you need to update 'name' index? create_sysview() can’t work otherwise. + +-- Fit _collation indexes to be suitable forcreate_sysview(). +local function upgrade_collation_to_2_2_2() + local _collation = box.space._collation + local _index = box.space._index > >> + create_vcollation_space() >> +end >> + >> local function get_version() >> local version = box.space._schema:get{'version'} >> if version == nil then >> @@ -768,6 +792,7 @@ local function upgrade(options) >> {version = mkversion(2, 1, 1), func = upgrade_to_2_1_1, auto = true}, >> {version = mkversion(2, 1, 2), func = upgrade_to_2_1_2, auto = true}, >> {version = mkversion(2, 1, 3), func = upgrade_to_2_1_3, auto = true}, >> + {version = mkversion(2, 1, 4), func = upgrade_to_2_1_4, auto = true} > > Should be in upgrade_to_2_2_1. To 2.2.2 maybe? +-------------------------------------------------------------------------------- +-- Tarantool 2.2.2 +-------------------------------------------------------------------------------- + +-- Fit _collation space to be suitable for create_sysview(). +local function upgrade_collation_to_2_2_2() + local _collation = box.space._collation + local _index = box.space._index + + -- System space format usually is in order "id, owner, + -- name...". The fields "name", "owner" are swapped in + -- "_collation" format, due to the field "owner" was added + -- after the "_collation" creation. + box.space._index:delete{276, 1} + log.info("update index name on _collation") + box.space._index:insert{_collation.id, 2, 'name', 'tree', {unique = true}, + {{1, 'string'}}} + log.info("create index owner on _collation") + box.space._index:insert{_collation.id, 1, 'owner', 'tree', {unique = false}, + {{2, 'unsigned'}}} +end + +local function create_vcollation_space() + local _collation = box.space._collation + local format = _collation:format() + create_sysview(box.schema.COLLATION_ID, box.schema.VCOLLATION_ID) + box.space[box.schema.VCOLLATION_ID]:format(format) +end + +local function upgrade_to_2_2_2() + upgrade_collation_to_2_2_2() + create_vcollation_space() +end + -------------------------------------------------------------------------------- >> } >> >> for _, handler in ipairs(handlers) do >> diff --git a/src/box/schema_def.h b/src/box/schema_def.h >> index eeeeb950b..77c004690 100644 >> --- a/src/box/schema_def.h >> +++ b/src/box/schema_def.h >> @@ -72,6 +72,8 @@ enum { >> BOX_SCHEMA_ID = 272, >> /** Space id of _collation. */ >> BOX_COLLATION_ID = 276, >> + /** Space id of _vcollation. */ >> + BOX_VCOLLATION_ID = 277, >> /** Space id of _space. */ >> BOX_SPACE_ID = 280, >> /** Space id of _vspace view. */ >> diff --git a/src/box/sysview.c b/src/box/sysview.c >> index 96c5e78ca..0d1259af0 100644 >> --- a/src/box/sysview.c >> +++ b/src/box/sysview.c >> @@ -402,6 +402,14 @@ vsequence_filter(struct space *source, struct tuple *tuple) >> ((PRIV_WRDA | PRIV_X) & effective); >> } >> >> +static bool >> + vcollation_filter(struct space *source, struct tuple *tuple) >> + { >> + (void) source; >> + (void) tuple; >> + return true; >> + } >> + > > Bad indentation. +static bool +vcollation_filter(struct space *source, struct tuple *tuple) +{ + (void) source; + (void) tuple; + return true; +} + commit e67cd253a41f5e010c00b5cb38059224850e86c4 Author: Roman Khabibov <roman.habibov@tarantool.org> Date: Thu May 16 02:06:39 2019 +0300 schema: add "_vcollation" sysview Add "_vcollation" sysview to read it from net.box. This sysview is always readable, except when a user doesn't have "public" role. Needed for #3941 @TarantoolBot document Title: box.space._vcollation _vcollation is a system space that represents a virtual view. The structure of its tuples is identical to that of _collation. Tuples of this sysview is always readable, except when the user doesn't have "public" role. diff --git a/src/box/bootstrap.snap b/src/box/bootstrap.snap index bb8fbeba1..f01a34670 100644 Binary files a/src/box/bootstrap.snap and b/src/box/bootstrap.snap differ diff --git a/src/box/lua/space.cc b/src/box/lua/space.cc index 87adaeb16..5d837eda6 100644 --- a/src/box/lua/space.cc +++ b/src/box/lua/space.cc @@ -540,6 +540,8 @@ box_lua_space_init(struct lua_State *L) lua_setfield(L, -2, "FUNC_ID"); lua_pushnumber(L, BOX_COLLATION_ID); lua_setfield(L, -2, "COLLATION_ID"); + lua_pushnumber(L, BOX_VCOLLATION_ID); + lua_setfield(L, -2, "VCOLLATION_ID"); lua_pushnumber(L, BOX_VFUNC_ID); lua_setfield(L, -2, "VFUNC_ID"); lua_pushnumber(L, BOX_PRIV_ID); diff --git a/src/box/lua/upgrade.lua b/src/box/lua/upgrade.lua index 070662698..b7fb08014 100644 --- a/src/box/lua/upgrade.lua +++ b/src/box/lua/upgrade.lua @@ -778,6 +778,40 @@ local function upgrade_to_2_2_1() upgrade_sequence_to_2_2_1() end +-------------------------------------------------------------------------------- +-- Tarantool 2.2.2 +-------------------------------------------------------------------------------- + +-- Fit _collation indexes to be suitable forcreate_sysview(). +local function upgrade_collation_to_2_2_2() + local _collation = box.space._collation + local _index = box.space._index + + -- System space format usually is in order "id, owner, + -- name...". The fields "name", "owner" are swapped in + -- "_collation" format, due to the field "owner" was added + -- after the "_collation" creation. + box.space._index:delete{276, 1} + log.info("update index name on _collation") + box.space._index:insert{_collation.id, 2, 'name', 'tree', {unique = true}, + {{1, 'string'}}} + log.info("create index owner on _collation") + box.space._index:insert{_collation.id, 1, 'owner', 'tree', {unique = false}, + {{2, 'unsigned'}}} +end + +local function create_vcollation_space() + local _collation = box.space._collation + local format = _collation:format() + create_sysview(box.schema.COLLATION_ID, box.schema.VCOLLATION_ID) + box.space[box.schema.VCOLLATION_ID]:format(format) +end + +local function upgrade_to_2_2_2() + upgrade_collation_to_2_2_2() + create_vcollation_space() +end + -------------------------------------------------------------------------------- local function get_version() @@ -812,6 +846,7 @@ local function upgrade(options) {version = mkversion(2, 1, 2), func = upgrade_to_2_1_2, auto = true}, {version = mkversion(2, 1, 3), func = upgrade_to_2_1_3, auto = true}, {version = mkversion(2, 2, 1), func = upgrade_to_2_2_1, auto = true}, + {version = mkversion(2, 2, 2), func = upgrade_to_2_2_2, auto = true} } for _, handler in ipairs(handlers) do diff --git a/src/box/schema_def.h b/src/box/schema_def.h index b817b49f6..e0febb640 100644 --- a/src/box/schema_def.h +++ b/src/box/schema_def.h @@ -72,6 +72,8 @@ enum { BOX_SCHEMA_ID = 272, /** Space id of _collation. */ BOX_COLLATION_ID = 276, + /** Space id of _vcollation. */ + BOX_VCOLLATION_ID = 277, /** Space id of _space. */ BOX_SPACE_ID = 280, /** Space id of _vspace view. */ diff --git a/src/box/sysview.c b/src/box/sysview.c index 96c5e78ca..46cf1e13f 100644 --- a/src/box/sysview.c +++ b/src/box/sysview.c @@ -402,6 +402,14 @@ vsequence_filter(struct space *source, struct tuple *tuple) ((PRIV_WRDA | PRIV_X) & effective); } +static bool +vcollation_filter(struct space *source, struct tuple *tuple) +{ + (void) source; + (void) tuple; + return true; +} + static struct index * sysview_space_create_index(struct space *space, struct index_def *def) { @@ -448,6 +456,11 @@ sysview_space_create_index(struct space *space, struct index_def *def) source_index_id = def->iid; filter = vsequence_filter; break; + case BOX_VCOLLATION_ID: + source_space_id = BOX_COLLATION_ID; + source_index_id = def->iid; + filter = vcollation_filter; + break; default: diag_set(ClientError, ER_MODIFY_INDEX, def->name, space_name(space), diff --git a/test/app-tap/tarantoolctl.test.lua b/test/app-tap/tarantoolctl.test.lua index c1e1490ca..ac1efa0ba 100755 --- a/test/app-tap/tarantoolctl.test.lua +++ b/test/app-tap/tarantoolctl.test.lua @@ -405,8 +405,8 @@ do check_ctlcat_xlog(test_i, dir, "--from=3 --to=6 --format=json --show-system --replica 1", "\n", 3) check_ctlcat_xlog(test_i, dir, "--from=3 --to=6 --format=json --show-system --replica 1 --replica 2", "\n", 3) check_ctlcat_xlog(test_i, dir, "--from=3 --to=6 --format=json --show-system --replica 2", "\n", 0) - check_ctlcat_snap(test_i, dir, "--space=280", "---\n", 21) - check_ctlcat_snap(test_i, dir, "--space=288", "---\n", 47) + check_ctlcat_snap(test_i, dir, "--space=280", "---\n", 22) + check_ctlcat_snap(test_i, dir, "--space=288", "---\n", 51) end) end) diff --git a/test/box-py/bootstrap.result b/test/box-py/bootstrap.result index 0684914c0..c8c37eb06 100644 --- a/test/box-py/bootstrap.result +++ b/test/box-py/bootstrap.result @@ -4,7 +4,7 @@ box.internal.bootstrap() box.space._schema:select{} --- - - ['max_id', 511] - - ['version', 2, 2, 1] + - ['version', 2, 2, 2] ... box.space._cluster:select{} --- @@ -21,6 +21,10 @@ box.space._space:select{} 'name': 'name', 'type': 'string'}, {'name': 'owner', 'type': 'unsigned'}, {'name': 'type', 'type': 'string'}, {'name': 'locale', 'type': 'string'}, { 'name': 'opts', 'type': 'map'}]] + - [277, 1, '_vcollation', 'sysview', 0, {}, [{'name': 'id', 'type': 'unsigned'}, + {'name': 'name', 'type': 'string'}, {'name': 'owner', 'type': 'unsigned'}, { + 'name': 'type', 'type': 'string'}, {'name': 'locale', 'type': 'string'}, { + 'name': 'opts', 'type': 'map'}]] - [280, 1, '_space', 'memtx', 0, {}, [{'name': 'id', 'type': 'unsigned'}, {'name': 'owner', 'type': 'unsigned'}, {'name': 'name', 'type': 'string'}, {'name': 'engine', 'type': 'string'}, {'name': 'field_count', 'type': 'unsigned'}, {'name': 'flags', @@ -84,7 +88,11 @@ box.space._index:select{} --- - - [272, 0, 'primary', 'tree', {'unique': true}, [[0, 'string']]] - [276, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]] - - [276, 1, 'name', 'tree', {'unique': true}, [[1, 'string']]] + - [276, 1, 'owner', 'tree', {'unique': false}, [[2, 'unsigned']]] + - [276, 2, 'name', 'tree', {'unique': true}, [[1, 'string']]] + - [277, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]] + - [277, 1, 'owner', 'tree', {'unique': false}, [[2, 'unsigned']]] + - [277, 2, 'name', 'tree', {'unique': true}, [[1, 'string']]] - [280, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]] - [280, 1, 'owner', 'tree', {'unique': false}, [[1, 'unsigned']]] - [280, 2, 'name', 'tree', {'unique': true}, [[2, 'string']]] @@ -151,6 +159,7 @@ box.space._priv:select{} - [1, 1, 'universe', 0, 4294967295] - [1, 2, 'function', 1, 4] - [1, 2, 'space', 276, 2] + - [1, 2, 'space', 277, 1] - [1, 2, 'space', 281, 1] - [1, 2, 'space', 286, 1] - [1, 2, 'space', 289, 1] diff --git a/test/box/access_misc.result b/test/box/access_misc.result index 24bdd9d63..d5bb8b208 100644 --- a/test/box/access_misc.result +++ b/test/box/access_misc.result @@ -761,6 +761,10 @@ box.space._space:select() 'name': 'name', 'type': 'string'}, {'name': 'owner', 'type': 'unsigned'}, {'name': 'type', 'type': 'string'}, {'name': 'locale', 'type': 'string'}, { 'name': 'opts', 'type': 'map'}]] + - [277, 1, '_vcollation', 'sysview', 0, {}, [{'name': 'id', 'type': 'unsigned'}, + {'name': 'name', 'type': 'string'}, {'name': 'owner', 'type': 'unsigned'}, { + 'name': 'type', 'type': 'string'}, {'name': 'locale', 'type': 'string'}, { + 'name': 'opts', 'type': 'map'}]] - [280, 1, '_space', 'memtx', 0, {}, [{'name': 'id', 'type': 'unsigned'}, {'name': 'owner', 'type': 'unsigned'}, {'name': 'name', 'type': 'string'}, {'name': 'engine', 'type': 'string'}, {'name': 'field_count', 'type': 'unsigned'}, {'name': 'flags', diff --git a/test/box/access_sysview.result b/test/box/access_sysview.result index c6a2b22ed..96976babb 100644 --- a/test/box/access_sysview.result +++ b/test/box/access_sysview.result @@ -74,6 +74,10 @@ session.su('guest') --- - true ... +#box.space._vspace.index[2]:select('_vcollation') ~= 0 +--- +- true +... #box.space._vindex:select(box.space._vspace.id) > 0 --- - true @@ -94,6 +98,10 @@ session.su('guest') --- - true ... +#box.space._vindex:select(box.space._vcollation.id) > 0 +--- +- true +... box.session.su('admin') --- ... @@ -127,6 +135,10 @@ box.session.su('guest') --- - error: Read access to space '_vsequence' is denied for user 'guest' ... +#box.space._vcollation:select{} +--- +- error: Read access to space '_vcollation' is denied for user 'guest' +... box.session.su('admin') --- ... @@ -138,11 +150,15 @@ box.session.su('guest') ... #box.space._vspace:select{} --- -- 8 +- 9 ... #box.space._vindex:select{} --- -- 20 +- 24 +... +#box.space._vcollation:select{} +--- +- 277 ... box.session.su('admin') --- @@ -230,11 +246,11 @@ box.session.su('guest') ... #box.space._vspace:select{} --- -- 22 +- 23 ... #box.space._vindex:select{} --- -- 48 +- 52 ... #box.space._vuser:select{} --- @@ -242,12 +258,16 @@ box.session.su('guest') ... #box.space._vpriv:select{} --- -- 15 +- 16 ... #box.space._vfunc:select{} --- - 1 ... +#box.space._vcollation:select{} +--- +- 277 +... box.session.su('admin') --- ... @@ -262,7 +282,7 @@ box.session.su('guest') ... #box.space._vindex:select{} --- -- 48 +- 52 ... #box.space._vuser:select{} --- @@ -270,7 +290,7 @@ box.session.su('guest') ... #box.space._vpriv:select{} --- -- 15 +- 16 ... #box.space._vfunc:select{} --- @@ -280,6 +300,10 @@ box.session.su('guest') --- - 0 ... +#box.space._vcollation:select{} +--- +- 277 +... box.session.su('admin') --- ... @@ -631,6 +655,60 @@ seq:drop() --- ... -- +-- _vcollation +-- +box.session.su('admin') +--- +... +box.internal.collation.create('test', 'ICU', 'ru-RU') +--- +... +-- Only admin can create collation. +coll_cnt = #box.space._collation:select{} +--- +... +box.schema.user.grant("guest", "read, write, alter, execute", "space", "_collation") +--- +... +box.session.su("guest") +--- +... +box.internal.collation.create('guest0', 'ICU', 'ru-RU') +--- +- error: Create access to collation 'guest0' is denied for user 'guest' +... +box.space._vcollation:select{0} +--- +- - [0, 'none', 1, 'BINARY', '', {}] +... +#box.space._vcollation:select{} == coll_cnt +--- +- true +... +box.session.su('admin') +--- +... +-- _vcollation is readable anyway. +box.schema.user.revoke("guest", "read", "space", "_collation") +--- +... +box.session.su("guest") +--- +... +#box.space._vcollation:select{} +--- +- 278 +... +session.su('admin') +--- +... +box.internal.collation.drop('test') +--- +... +box.internal.collation.drop('guest0') +--- +... +-- -- view:alter() tests -- box.space._vspace.index[1]:alter({parts = { 2, 'string' }}) diff --git a/test/box/access_sysview.test.lua b/test/box/access_sysview.test.lua index c62458407..031df28aa 100644 --- a/test/box/access_sysview.test.lua +++ b/test/box/access_sysview.test.lua @@ -31,12 +31,14 @@ session.su('guest') #box.space._vspace.index[2]:select('_vuser') ~= 0 #box.space._vspace.index[2]:select('_vfunc') ~= 0 #box.space._vspace.index[2]:select('_vpriv') ~= 0 +#box.space._vspace.index[2]:select('_vcollation') ~= 0 #box.space._vindex:select(box.space._vspace.id) > 0 #box.space._vindex:select(box.space._vindex.id) > 0 #box.space._vindex:select(box.space._vuser.id) > 0 #box.space._vindex:select(box.space._vfunc.id) > 0 #box.space._vindex:select(box.space._vpriv.id) > 0 +#box.space._vindex:select(box.space._vcollation.id) > 0 box.session.su('admin') box.schema.user.revoke('guest', 'public') @@ -48,6 +50,7 @@ box.session.su('guest') #box.space._vpriv:select{} #box.space._vfunc:select{} #box.space._vsequence:select{} +#box.space._vcollation:select{} box.session.su('admin') box.schema.user.grant('guest', 'public') @@ -55,6 +58,7 @@ box.session.su('guest') #box.space._vspace:select{} #box.space._vindex:select{} +#box.space._vcollation:select{} box.session.su('admin') s = box.schema.space.create('test') @@ -96,6 +100,7 @@ box.session.su('guest') #box.space._vuser:select{} #box.space._vpriv:select{} #box.space._vfunc:select{} +#box.space._vcollation:select{} box.session.su('admin') box.schema.user.revoke('guest', 'read', 'universe') @@ -107,6 +112,7 @@ box.session.su('guest') #box.space._vpriv:select{} #box.space._vfunc:select{} #box.space._vsequence:select{} +#box.space._vcollation:select{} box.session.su('admin') box.schema.user.revoke('guest', 'write', 'universe') @@ -264,6 +270,30 @@ box.session.su("guest") session.su('admin') seq:drop() +-- +-- _vcollation +-- + +box.session.su('admin') +box.internal.collation.create('test', 'ICU', 'ru-RU') + +-- Only admin can create collation. +coll_cnt = #box.space._collation:select{} +box.schema.user.grant("guest", "read, write, alter, execute", "space", "_collation") +box.session.su("guest") +box.internal.collation.create('guest0', 'ICU', 'ru-RU') +box.space._vcollation:select{0} +#box.space._vcollation:select{} == coll_cnt +box.session.su('admin') + +-- _vcollation is readable anyway. +box.schema.user.revoke("guest", "read", "space", "_collation") +box.session.su("guest") +#box.space._vcollation:select{} +session.su('admin') +box.internal.collation.drop('test') +box.internal.collation.drop('guest0') + -- -- view:alter() tests -- diff --git a/test/box/alter.result b/test/box/alter.result index e83c0b7ef..ba1405cf1 100644 --- a/test/box/alter.result +++ b/test/box/alter.result @@ -168,7 +168,11 @@ _index:select{} --- - - [272, 0, 'primary', 'tree', {'unique': true}, [[0, 'string']]] - [276, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]] - - [276, 1, 'name', 'tree', {'unique': true}, [[1, 'string']]] + - [276, 1, 'owner', 'tree', {'unique': false}, [[2, 'unsigned']]] + - [276, 2, 'name', 'tree', {'unique': true}, [[1, 'string']]] + - [277, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]] + - [277, 1, 'owner', 'tree', {'unique': false}, [[2, 'unsigned']]] + - [277, 2, 'name', 'tree', {'unique': true}, [[1, 'string']]] - [280, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]] - [280, 1, 'owner', 'tree', {'unique': false}, [[1, 'unsigned']]] - [280, 2, 'name', 'tree', {'unique': true}, [[2, 'string']]] diff --git a/test/wal_off/alter.result b/test/wal_off/alter.result index ee280fcbb..8040efa1a 100644 --- a/test/wal_off/alter.result +++ b/test/wal_off/alter.result @@ -28,7 +28,7 @@ end; ... #spaces; --- -- 65505 +- 65504 ... -- cleanup for k, v in pairs(spaces) do ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [tarantool-patches] Re: [PATCH 1/2] schema: add "_vcollation" sysview 2019-06-05 17:08 ` [tarantool-patches] " Roman Khabibov @ 2019-06-05 17:56 ` Vladimir Davydov 2019-06-06 15:18 ` Roman Khabibov 0 siblings, 1 reply; 12+ messages in thread From: Vladimir Davydov @ 2019-06-05 17:56 UTC (permalink / raw) To: Roman Khabibov; +Cc: tarantool-patches On Wed, Jun 05, 2019 at 08:08:46PM +0300, Roman Khabibov wrote: > >> +local function upgrade_to_2_1_4() > >> + local _collation = box.space._collation > >> + local _index = box.space._index > >> + > >> + -- System space format usually is in order "id, owner, name...". > >> + -- The fields "name", "owner" are swapped in "_collation" format, > >> + -- due to the field "owner" was added after the "_collation" creation. > >> + box.space._index:delete{276, 1} > >> + log.info("update index name on _collation") > >> + box.space._index:insert{_collation.id, 2, 'name', 'tree', {unique = true}, > >> + {{1, 'string'}}} > >> + log.info("create index owner on _collation") > >> + box.space._index:insert{_collation.id, 1, 'owner', 'tree', {unique = false}, > >> + {{2, 'unsigned'}}} > > > > I don't understand this part. Why do you need to create 'owner' index? > > Why do you need to update 'name' index? > create_sysview() can’t work otherwise. I fail to see why is that. Could you please elaborate? > > + > +-- Fit _collation indexes to be suitable forcreate_sysview(). > +local function upgrade_collation_to_2_2_2() > + local _collation = box.space._collation > + local _index = box.space._index > > > > >> + create_vcollation_space() > >> +end > >> + > >> local function get_version() > >> local version = box.space._schema:get{'version'} > >> if version == nil then > >> @@ -768,6 +792,7 @@ local function upgrade(options) > >> {version = mkversion(2, 1, 1), func = upgrade_to_2_1_1, auto = true}, > >> {version = mkversion(2, 1, 2), func = upgrade_to_2_1_2, auto = true}, > >> {version = mkversion(2, 1, 3), func = upgrade_to_2_1_3, auto = true}, > >> + {version = mkversion(2, 1, 4), func = upgrade_to_2_1_4, auto = true} > > > > Should be in upgrade_to_2_2_1. > To 2.2.2 maybe? No. The last release was 2.2.0 so the next one will be 2.2.1. ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [tarantool-patches] Re: [PATCH 1/2] schema: add "_vcollation" sysview 2019-06-05 17:56 ` Vladimir Davydov @ 2019-06-06 15:18 ` Roman Khabibov 0 siblings, 0 replies; 12+ messages in thread From: Roman Khabibov @ 2019-06-06 15:18 UTC (permalink / raw) To: tarantool-patches; +Cc: Vladimir Davydov > On Jun 5, 2019, at 8:56 PM, Vladimir Davydov <vdavydov.dev@gmail.com> wrote: > > On Wed, Jun 05, 2019 at 08:08:46PM +0300, Roman Khabibov wrote: >>>> +local function upgrade_to_2_1_4() >>>> + local _collation = box.space._collation >>>> + local _index = box.space._index >>>> + >>>> + -- System space format usually is in order "id, owner, name...". >>>> + -- The fields "name", "owner" are swapped in "_collation" format, >>>> + -- due to the field "owner" was added after the "_collation" creation. >>>> + box.space._index:delete{276, 1} >>>> + log.info("update index name on _collation") >>>> + box.space._index:insert{_collation.id, 2, 'name', 'tree', {unique = true}, >>>> + {{1, 'string'}}} >>>> + log.info("create index owner on _collation") >>>> + box.space._index:insert{_collation.id, 1, 'owner', 'tree', {unique = false}, >>>> + {{2, 'unsigned'}}} >>> >>> I don't understand this part. Why do you need to create 'owner' index? >>> Why do you need to update 'name' index? >> create_sysview() can’t work otherwise. > > I fail to see why is that. Could you please elaborate You were right. I actually don’t need it. Removed. >> >> + >> +-- Fit _collation indexes to be suitable forcreate_sysview(). >> +local function upgrade_collation_to_2_2_2() >> + local _collation = box.space._collation >> + local _index = box.space._index >> >>> >>>> + create_vcollation_space() >>>> +end >>>> + >>>> local function get_version() >>>> local version = box.space._schema:get{'version'} >>>> if version == nil then >>>> @@ -768,6 +792,7 @@ local function upgrade(options) >>>> {version = mkversion(2, 1, 1), func = upgrade_to_2_1_1, auto = true}, >>>> {version = mkversion(2, 1, 2), func = upgrade_to_2_1_2, auto = true}, >>>> {version = mkversion(2, 1, 3), func = upgrade_to_2_1_3, auto = true}, >>>> + {version = mkversion(2, 1, 4), func = upgrade_to_2_1_4, auto = true} >>> >>> Should be in upgrade_to_2_2_1. >> To 2.2.2 maybe? > > No. The last release was 2.2.0 so the next one will be 2.2.1. Done. +local function create_vcollation_space() + local _collation = box.space._collation + local format = _collation:format() + create_sysview(box.schema.COLLATION_ID, box.schema.VCOLLATION_ID) + box.space[box.schema.VCOLLATION_ID]:format(format) +end + -- Add sequence field to _space_sequence table local function upgrade_sequence_to_2_2_1() log.info("add sequence field to space _space_sequence") @@ -776,6 +783,7 @@ end local function upgrade_to_2_2_1() upgrade_sequence_to_2_2_1() + create_vcollation_space() end commit f13d3f0ce8a2d7af8a11ebc1003d1145652a46a3 Author: Roman Khabibov <roman.habibov@tarantool.org> Date: Thu May 16 02:06:39 2019 +0300 schema: add "_vcollation" sysview Add "_vcollation" sysview to read it from net.box. This sysview is always readable, except when a user doesn't have "public" role. Needed for #3941 @TarantoolBot document Title: box.space._vcollation _vcollation is a system space that represents a virtual view. The structure of its tuples is identical to that of _collation. Tuples of this sysview is always readable, except when the user doesn't have "public" role. diff --git a/src/box/bootstrap.snap b/src/box/bootstrap.snap index bb8fbeba1..eb9297d7c 100644 Binary files a/src/box/bootstrap.snap and b/src/box/bootstrap.snap differ diff --git a/src/box/lua/space.cc b/src/box/lua/space.cc index 87adaeb16..5d837eda6 100644 --- a/src/box/lua/space.cc +++ b/src/box/lua/space.cc @@ -540,6 +540,8 @@ box_lua_space_init(struct lua_State *L) lua_setfield(L, -2, "FUNC_ID"); lua_pushnumber(L, BOX_COLLATION_ID); lua_setfield(L, -2, "COLLATION_ID"); + lua_pushnumber(L, BOX_VCOLLATION_ID); + lua_setfield(L, -2, "VCOLLATION_ID"); lua_pushnumber(L, BOX_VFUNC_ID); lua_setfield(L, -2, "VFUNC_ID"); lua_pushnumber(L, BOX_PRIV_ID); diff --git a/src/box/lua/upgrade.lua b/src/box/lua/upgrade.lua index 070662698..fe62fb0a9 100644 --- a/src/box/lua/upgrade.lua +++ b/src/box/lua/upgrade.lua @@ -749,6 +749,13 @@ end -- Tarantool 2.2.1 -------------------------------------------------------------------------------- +local function create_vcollation_space() + local _collation = box.space._collation + local format = _collation:format() + create_sysview(box.schema.COLLATION_ID, box.schema.VCOLLATION_ID) + box.space[box.schema.VCOLLATION_ID]:format(format) +end + -- Add sequence field to _space_sequence table local function upgrade_sequence_to_2_2_1() log.info("add sequence field to space _space_sequence") @@ -776,6 +783,7 @@ end local function upgrade_to_2_2_1() upgrade_sequence_to_2_2_1() + create_vcollation_space() end -------------------------------------------------------------------------------- @@ -811,7 +819,7 @@ local function upgrade(options) {version = mkversion(2, 1, 1), func = upgrade_to_2_1_1, auto = true}, {version = mkversion(2, 1, 2), func = upgrade_to_2_1_2, auto = true}, {version = mkversion(2, 1, 3), func = upgrade_to_2_1_3, auto = true}, - {version = mkversion(2, 2, 1), func = upgrade_to_2_2_1, auto = true}, + {version = mkversion(2, 2, 1), func = upgrade_to_2_2_1, auto = true} } for _, handler in ipairs(handlers) do diff --git a/src/box/schema_def.h b/src/box/schema_def.h index b817b49f6..e0febb640 100644 --- a/src/box/schema_def.h +++ b/src/box/schema_def.h @@ -72,6 +72,8 @@ enum { BOX_SCHEMA_ID = 272, /** Space id of _collation. */ BOX_COLLATION_ID = 276, + /** Space id of _vcollation. */ + BOX_VCOLLATION_ID = 277, /** Space id of _space. */ BOX_SPACE_ID = 280, /** Space id of _vspace view. */ diff --git a/src/box/sysview.c b/src/box/sysview.c index 96c5e78ca..46cf1e13f 100644 --- a/src/box/sysview.c +++ b/src/box/sysview.c @@ -402,6 +402,14 @@ vsequence_filter(struct space *source, struct tuple *tuple) ((PRIV_WRDA | PRIV_X) & effective); } +static bool +vcollation_filter(struct space *source, struct tuple *tuple) +{ + (void) source; + (void) tuple; + return true; +} + static struct index * sysview_space_create_index(struct space *space, struct index_def *def) { @@ -448,6 +456,11 @@ sysview_space_create_index(struct space *space, struct index_def *def) source_index_id = def->iid; filter = vsequence_filter; break; + case BOX_VCOLLATION_ID: + source_space_id = BOX_COLLATION_ID; + source_index_id = def->iid; + filter = vcollation_filter; + break; default: diag_set(ClientError, ER_MODIFY_INDEX, def->name, space_name(space), diff --git a/test/app-tap/tarantoolctl.test.lua b/test/app-tap/tarantoolctl.test.lua index c1e1490ca..7a72acda2 100755 --- a/test/app-tap/tarantoolctl.test.lua +++ b/test/app-tap/tarantoolctl.test.lua @@ -405,8 +405,8 @@ do check_ctlcat_xlog(test_i, dir, "--from=3 --to=6 --format=json --show-system --replica 1", "\n", 3) check_ctlcat_xlog(test_i, dir, "--from=3 --to=6 --format=json --show-system --replica 1 --replica 2", "\n", 3) check_ctlcat_xlog(test_i, dir, "--from=3 --to=6 --format=json --show-system --replica 2", "\n", 0) - check_ctlcat_snap(test_i, dir, "--space=280", "---\n", 21) - check_ctlcat_snap(test_i, dir, "--space=288", "---\n", 47) + check_ctlcat_snap(test_i, dir, "--space=280", "---\n", 22) + check_ctlcat_snap(test_i, dir, "--space=288", "---\n", 49) end) end) diff --git a/test/box-py/bootstrap.result b/test/box-py/bootstrap.result index 0684914c0..d2cca9017 100644 --- a/test/box-py/bootstrap.result +++ b/test/box-py/bootstrap.result @@ -21,6 +21,10 @@ box.space._space:select{} 'name': 'name', 'type': 'string'}, {'name': 'owner', 'type': 'unsigned'}, {'name': 'type', 'type': 'string'}, {'name': 'locale', 'type': 'string'}, { 'name': 'opts', 'type': 'map'}]] + - [277, 1, '_vcollation', 'sysview', 0, {}, [{'name': 'id', 'type': 'unsigned'}, + {'name': 'name', 'type': 'string'}, {'name': 'owner', 'type': 'unsigned'}, { + 'name': 'type', 'type': 'string'}, {'name': 'locale', 'type': 'string'}, { + 'name': 'opts', 'type': 'map'}]] - [280, 1, '_space', 'memtx', 0, {}, [{'name': 'id', 'type': 'unsigned'}, {'name': 'owner', 'type': 'unsigned'}, {'name': 'name', 'type': 'string'}, {'name': 'engine', 'type': 'string'}, {'name': 'field_count', 'type': 'unsigned'}, {'name': 'flags', @@ -85,6 +89,8 @@ box.space._index:select{} - - [272, 0, 'primary', 'tree', {'unique': true}, [[0, 'string']]] - [276, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]] - [276, 1, 'name', 'tree', {'unique': true}, [[1, 'string']]] + - [277, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]] + - [277, 1, 'name', 'tree', {'unique': true}, [[1, 'string']]] - [280, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]] - [280, 1, 'owner', 'tree', {'unique': false}, [[1, 'unsigned']]] - [280, 2, 'name', 'tree', {'unique': true}, [[2, 'string']]] @@ -151,6 +157,7 @@ box.space._priv:select{} - [1, 1, 'universe', 0, 4294967295] - [1, 2, 'function', 1, 4] - [1, 2, 'space', 276, 2] + - [1, 2, 'space', 277, 1] - [1, 2, 'space', 281, 1] - [1, 2, 'space', 286, 1] - [1, 2, 'space', 289, 1] diff --git a/test/box/access_misc.result b/test/box/access_misc.result index 24bdd9d63..d5bb8b208 100644 --- a/test/box/access_misc.result +++ b/test/box/access_misc.result @@ -761,6 +761,10 @@ box.space._space:select() 'name': 'name', 'type': 'string'}, {'name': 'owner', 'type': 'unsigned'}, {'name': 'type', 'type': 'string'}, {'name': 'locale', 'type': 'string'}, { 'name': 'opts', 'type': 'map'}]] + - [277, 1, '_vcollation', 'sysview', 0, {}, [{'name': 'id', 'type': 'unsigned'}, + {'name': 'name', 'type': 'string'}, {'name': 'owner', 'type': 'unsigned'}, { + 'name': 'type', 'type': 'string'}, {'name': 'locale', 'type': 'string'}, { + 'name': 'opts', 'type': 'map'}]] - [280, 1, '_space', 'memtx', 0, {}, [{'name': 'id', 'type': 'unsigned'}, {'name': 'owner', 'type': 'unsigned'}, {'name': 'name', 'type': 'string'}, {'name': 'engine', 'type': 'string'}, {'name': 'field_count', 'type': 'unsigned'}, {'name': 'flags', diff --git a/test/box/access_sysview.result b/test/box/access_sysview.result index c6a2b22ed..4d1f0c779 100644 --- a/test/box/access_sysview.result +++ b/test/box/access_sysview.result @@ -74,6 +74,10 @@ session.su('guest') --- - true ... +#box.space._vspace.index[2]:select('_vcollation') ~= 0 +--- +- true +... #box.space._vindex:select(box.space._vspace.id) > 0 --- - true @@ -94,6 +98,10 @@ session.su('guest') --- - true ... +#box.space._vindex:select(box.space._vcollation.id) > 0 +--- +- true +... box.session.su('admin') --- ... @@ -127,6 +135,10 @@ box.session.su('guest') --- - error: Read access to space '_vsequence' is denied for user 'guest' ... +#box.space._vcollation:select{} +--- +- error: Read access to space '_vcollation' is denied for user 'guest' +... box.session.su('admin') --- ... @@ -138,11 +150,15 @@ box.session.su('guest') ... #box.space._vspace:select{} --- -- 8 +- 9 ... #box.space._vindex:select{} --- -- 20 +- 22 +... +#box.space._vcollation:select{} +--- +- 277 ... box.session.su('admin') --- @@ -230,11 +246,11 @@ box.session.su('guest') ... #box.space._vspace:select{} --- -- 22 +- 23 ... #box.space._vindex:select{} --- -- 48 +- 50 ... #box.space._vuser:select{} --- @@ -242,12 +258,16 @@ box.session.su('guest') ... #box.space._vpriv:select{} --- -- 15 +- 16 ... #box.space._vfunc:select{} --- - 1 ... +#box.space._vcollation:select{} +--- +- 277 +... box.session.su('admin') --- ... @@ -262,7 +282,7 @@ box.session.su('guest') ... #box.space._vindex:select{} --- -- 48 +- 50 ... #box.space._vuser:select{} --- @@ -270,7 +290,7 @@ box.session.su('guest') ... #box.space._vpriv:select{} --- -- 15 +- 16 ... #box.space._vfunc:select{} --- @@ -280,6 +300,10 @@ box.session.su('guest') --- - 0 ... +#box.space._vcollation:select{} +--- +- 277 +... box.session.su('admin') --- ... @@ -631,6 +655,60 @@ seq:drop() --- ... -- +-- _vcollation +-- +box.session.su('admin') +--- +... +box.internal.collation.create('test', 'ICU', 'ru-RU') +--- +... +-- Only admin can create collation. +coll_cnt = #box.space._collation:select{} +--- +... +box.schema.user.grant("guest", "read, write, alter, execute", "space", "_collation") +--- +... +box.session.su("guest") +--- +... +box.internal.collation.create('guest0', 'ICU', 'ru-RU') +--- +- error: Create access to collation 'guest0' is denied for user 'guest' +... +box.space._vcollation:select{0} +--- +- - [0, 'none', 1, 'BINARY', '', {}] +... +#box.space._vcollation:select{} == coll_cnt +--- +- true +... +box.session.su('admin') +--- +... +-- _vcollation is readable anyway. +box.schema.user.revoke("guest", "read", "space", "_collation") +--- +... +box.session.su("guest") +--- +... +#box.space._vcollation:select{} +--- +- 278 +... +session.su('admin') +--- +... +box.internal.collation.drop('test') +--- +... +box.internal.collation.drop('guest0') +--- +... +-- -- view:alter() tests -- box.space._vspace.index[1]:alter({parts = { 2, 'string' }}) diff --git a/test/box/access_sysview.test.lua b/test/box/access_sysview.test.lua index c62458407..031df28aa 100644 --- a/test/box/access_sysview.test.lua +++ b/test/box/access_sysview.test.lua @@ -31,12 +31,14 @@ session.su('guest') #box.space._vspace.index[2]:select('_vuser') ~= 0 #box.space._vspace.index[2]:select('_vfunc') ~= 0 #box.space._vspace.index[2]:select('_vpriv') ~= 0 +#box.space._vspace.index[2]:select('_vcollation') ~= 0 #box.space._vindex:select(box.space._vspace.id) > 0 #box.space._vindex:select(box.space._vindex.id) > 0 #box.space._vindex:select(box.space._vuser.id) > 0 #box.space._vindex:select(box.space._vfunc.id) > 0 #box.space._vindex:select(box.space._vpriv.id) > 0 +#box.space._vindex:select(box.space._vcollation.id) > 0 box.session.su('admin') box.schema.user.revoke('guest', 'public') @@ -48,6 +50,7 @@ box.session.su('guest') #box.space._vpriv:select{} #box.space._vfunc:select{} #box.space._vsequence:select{} +#box.space._vcollation:select{} box.session.su('admin') box.schema.user.grant('guest', 'public') @@ -55,6 +58,7 @@ box.session.su('guest') #box.space._vspace:select{} #box.space._vindex:select{} +#box.space._vcollation:select{} box.session.su('admin') s = box.schema.space.create('test') @@ -96,6 +100,7 @@ box.session.su('guest') #box.space._vuser:select{} #box.space._vpriv:select{} #box.space._vfunc:select{} +#box.space._vcollation:select{} box.session.su('admin') box.schema.user.revoke('guest', 'read', 'universe') @@ -107,6 +112,7 @@ box.session.su('guest') #box.space._vpriv:select{} #box.space._vfunc:select{} #box.space._vsequence:select{} +#box.space._vcollation:select{} box.session.su('admin') box.schema.user.revoke('guest', 'write', 'universe') @@ -264,6 +270,30 @@ box.session.su("guest") session.su('admin') seq:drop() +-- +-- _vcollation +-- + +box.session.su('admin') +box.internal.collation.create('test', 'ICU', 'ru-RU') + +-- Only admin can create collation. +coll_cnt = #box.space._collation:select{} +box.schema.user.grant("guest", "read, write, alter, execute", "space", "_collation") +box.session.su("guest") +box.internal.collation.create('guest0', 'ICU', 'ru-RU') +box.space._vcollation:select{0} +#box.space._vcollation:select{} == coll_cnt +box.session.su('admin') + +-- _vcollation is readable anyway. +box.schema.user.revoke("guest", "read", "space", "_collation") +box.session.su("guest") +#box.space._vcollation:select{} +session.su('admin') +box.internal.collation.drop('test') +box.internal.collation.drop('guest0') + -- -- view:alter() tests -- diff --git a/test/box/alter.result b/test/box/alter.result index e83c0b7ef..3e9c5e180 100644 --- a/test/box/alter.result +++ b/test/box/alter.result @@ -169,6 +169,8 @@ _index:select{} - - [272, 0, 'primary', 'tree', {'unique': true}, [[0, 'string']]] - [276, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]] - [276, 1, 'name', 'tree', {'unique': true}, [[1, 'string']]] + - [277, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]] + - [277, 1, 'name', 'tree', {'unique': true}, [[1, 'string']]] - [280, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]] - [280, 1, 'owner', 'tree', {'unique': false}, [[1, 'unsigned']]] - [280, 2, 'name', 'tree', {'unique': true}, [[2, 'string']]] diff --git a/test/wal_off/alter.result b/test/wal_off/alter.result index ee280fcbb..8040efa1a 100644 --- a/test/wal_off/alter.result +++ b/test/wal_off/alter.result @@ -28,7 +28,7 @@ end; ... #spaces; --- -- 65505 +- 65504 ... -- cleanup for k, v in pairs(spaces) do ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2019-06-06 15:18 UTC | newest] Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2019-05-16 11:24 [tarantool-patches] [PATCH 0/2] Add "_vcollation" sysview and fetch it in net.box Roman Khabibov 2019-05-16 11:24 ` [tarantool-patches] [PATCH 1/2] schema: add "_vcollation" sysview Roman Khabibov 2019-05-16 12:43 ` [tarantool-patches] " Konstantin Osipov 2019-05-28 15:50 ` Roman Khabibov 2019-05-30 11:57 ` Konstantin Osipov 2019-05-16 11:24 ` [tarantool-patches] [PATCH 2/2] net.box: fetch '_vcollation' sysview into the module Roman Khabibov 2019-05-16 12:43 ` [tarantool-patches] " Konstantin Osipov 2019-05-30 11:58 ` Konstantin Osipov 2019-05-30 12:05 ` Vladislav Shpilevoy 2019-05-30 12:36 [tarantool-patches] [PATCH 0/2] Add _vcollation and fetch in net.box Roman Khabibov 2019-05-30 12:36 ` [tarantool-patches] [PATCH 1/2] schema: add "_vcollation" sysview Roman Khabibov 2019-06-04 16:31 ` Vladimir Davydov 2019-06-05 17:08 ` [tarantool-patches] " Roman Khabibov 2019-06-05 17:56 ` Vladimir Davydov 2019-06-06 15:18 ` Roman Khabibov
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox