From d933b0d519b9ec6b8753a93d26f19ab66cb720ad Mon Sep 17 00:00:00 2001 From: Eunju Kim Date: Mon, 6 Apr 2020 03:14:58 -0700 Subject: [PATCH 01/33] [Microservices] Mac address manager --- services/mac_manager/.gitignore | 31 ++ .../.mvn/wrapper/MavenWrapperDownloader.java | 117 +++++++ .../.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 50710 bytes .../.mvn/wrapper/maven-wrapper.properties | 2 + .../lib/alcor_common_lib-0.1.0-SNAPSHOT.jar | Bin 0 -> 57551 bytes services/mac_manager/mvnw | 310 ++++++++++++++++++ services/mac_manager/mvnw.cmd | 182 ++++++++++ services/mac_manager/pom.xml | 128 ++++++++ .../lib/alcor_common_lib-0.1.0-SNAPSHOT.jar | Bin 0 -> 57551 bytes .../macmanager/MacManagerApplication.java | 13 + .../macmanager/config/RedisConfiguration.java | 91 +++++ .../macmanager/controller/MacController.java | 111 +++++++ .../macmanager/dao/MacRedisRepository.java | 91 +++++ .../alcor/macmanager/dao/MacRepository.java | 74 +++++ .../macmanager/dao/OuiRedisRepository.java | 75 +++++ .../alcor/macmanager/entity/MacAddress.java | 44 +++ .../alcor/macmanager/entity/MacState.java | 54 +++ .../alcor/macmanager/entity/MacStateJson.java | 32 ++ .../alcor/macmanager/entity/OuiState.java | 38 +++ .../UniquenessViolationException.java | 36 ++ .../macmanager/service/MacAddressService.java | 126 +++++++ .../macmanager/service/RedisPublisher.java | 45 +++ .../utils/RestPreconditionsUtil.java | 122 +++++++ .../src/main/resources/application.properties | 20 ++ .../src/main/resources/static/start.html | 10 + .../MacManagerApplicationTests.java | 15 + .../controller/MacControllerTest.java | 46 +++ 27 files changed, 1813 insertions(+) create mode 100644 services/mac_manager/.gitignore create mode 100644 services/mac_manager/.mvn/wrapper/MavenWrapperDownloader.java create mode 100644 services/mac_manager/.mvn/wrapper/maven-wrapper.jar create mode 100644 services/mac_manager/.mvn/wrapper/maven-wrapper.properties create mode 100644 services/mac_manager/lib/alcor_common_lib-0.1.0-SNAPSHOT.jar create mode 100644 services/mac_manager/mvnw create mode 100644 services/mac_manager/mvnw.cmd create mode 100644 services/mac_manager/pom.xml create mode 100644 services/mac_manager/src/lib/alcor_common_lib-0.1.0-SNAPSHOT.jar create mode 100644 services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/MacManagerApplication.java create mode 100644 services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/config/RedisConfiguration.java create mode 100644 services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java create mode 100644 services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRedisRepository.java create mode 100644 services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRepository.java create mode 100644 services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/OuiRedisRepository.java create mode 100644 services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacAddress.java create mode 100644 services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java create mode 100644 services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacStateJson.java create mode 100644 services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/OuiState.java create mode 100644 services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/exception/UniquenessViolationException.java create mode 100644 services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/MacAddressService.java create mode 100644 services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/RedisPublisher.java create mode 100644 services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/RestPreconditionsUtil.java create mode 100644 services/mac_manager/src/main/resources/application.properties create mode 100644 services/mac_manager/src/main/resources/static/start.html create mode 100644 services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/AlcorMacManager/MacManagerApplicationTests.java create mode 100644 services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java diff --git a/services/mac_manager/.gitignore b/services/mac_manager/.gitignore new file mode 100644 index 000000000..a2a3040aa --- /dev/null +++ b/services/mac_manager/.gitignore @@ -0,0 +1,31 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/** +!**/src/test/** + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ + +### VS Code ### +.vscode/ diff --git a/services/mac_manager/.mvn/wrapper/MavenWrapperDownloader.java b/services/mac_manager/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 000000000..e76d1f324 --- /dev/null +++ b/services/mac_manager/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,117 @@ +/* + * Copyright 2007-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import java.net.*; +import java.io.*; +import java.nio.channels.*; +import java.util.Properties; + +public class MavenWrapperDownloader { + + private static final String WRAPPER_VERSION = "0.5.6"; + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" + + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if(mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if(mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if(!outputFile.getParentFile().exists()) { + if(!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { + String username = System.getenv("MVNW_USERNAME"); + char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); + Authenticator.setDefault(new Authenticator() { + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(username, password); + } + }); + } + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/services/mac_manager/.mvn/wrapper/maven-wrapper.jar b/services/mac_manager/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..2cc7d4a55c0cd0092912bf49ae38b3a9e3fd0054 GIT binary patch literal 50710 zcmbTd1CVCTmM+|7+wQV$+qP}n>auOywyU~q+qUhh+uxis_~*a##hm*_WW?9E7Pb7N%LRFiwbEGCJ0XP=%-6oeT$XZcYgtzC2~q zk(K08IQL8oTl}>>+hE5YRgXTB@fZ4TH9>7=79e`%%tw*SQUa9~$xKD5rS!;ZG@ocK zQdcH}JX?W|0_Afv?y`-NgLum62B&WSD$-w;O6G0Sm;SMX65z)l%m1e-g8Q$QTI;(Q z+x$xth4KFvH@Bs6(zn!iF#nenk^Y^ce;XIItAoCsow38eq?Y-Auh!1in#Rt-_D>H^ z=EjbclGGGa6VnaMGmMLj`x3NcwA43Jb(0gzl;RUIRAUDcR1~99l2SAPkVhoRMMtN} zXvC<tOmX83grD8GSo_Lo?%lNfhD#EBgPo z*nf@ppMC#B!T)Ae0RG$mlJWmGl7CkuU~B8-==5i;rS;8i6rJ=PoQxf446XDX9g|c> zU64ePyMlsI^V5Jq5A+BPe#e73+kpc_r1tv#B)~EZ;7^67F0*QiYfrk0uVW;Qb=NsG zN>gsuCwvb?s-KQIppEaeXtEMdc9dy6Dfduz-tMTms+i01{eD9JE&h?Kht*$eOl#&L zJdM_-vXs(V#$Ed;5wyNWJdPNh+Z$+;$|%qR(t`4W@kDhd*{(7-33BOS6L$UPDeE_53j${QfKN-0v-HG z(QfyvFNbwPK%^!eIo4ac1;b>c0vyf9}Xby@YY!lkz-UvNp zwj#Gg|4B~?n?G^{;(W;|{SNoJbHTMpQJ*Wq5b{l9c8(%?Kd^1?H1om1de0Da9M;Q=n zUfn{f87iVb^>Exl*nZ0hs(Yt>&V9$Pg`zX`AI%`+0SWQ4Zc(8lUDcTluS z5a_KerZWe}a-MF9#Cd^fi!y3%@RFmg&~YnYZ6<=L`UJ0v={zr)>$A;x#MCHZy1st7 ztT+N07NR+vOwSV2pvWuN1%lO!K#Pj0Fr>Q~R40{bwdL%u9i`DSM4RdtEH#cW)6}+I-eE< z&tZs+(Ogu(H_;$a$!7w`MH0r%h&@KM+<>gJL@O~2K2?VrSYUBbhCn#yy?P)uF3qWU z0o09mIik+kvzV6w>vEZy@&Mr)SgxPzUiDA&%07m17udz9usD82afQEps3$pe!7fUf z0eiidkJ)m3qhOjVHC_M(RYCBO%CZKZXFb8}s0-+}@CIn&EF(rRWUX2g^yZCvl0bI} zbP;1S)iXnRC&}5-Tl(hASKqdSnO?ASGJ*MIhOXIblmEudj(M|W!+I3eDc}7t`^mtg z)PKlaXe(OH+q-)qcQ8a@!llRrpGI8DsjhoKvw9T;TEH&?s=LH0w$EzI>%u;oD@x83 zJL7+ncjI9nn!TlS_KYu5vn%f*@qa5F;| zEFxY&B?g=IVlaF3XNm_03PA)=3|{n-UCgJoTr;|;1AU9|kPE_if8!Zvb}0q$5okF$ zHaJdmO&gg!9oN|M{!qGE=tb|3pVQ8PbL$}e;NgXz<6ZEggI}wO@aBP**2Wo=yN#ZC z4G$m^yaM9g=|&!^ft8jOLuzc3Psca*;7`;gnHm}tS0%f4{|VGEwu45KptfNmwxlE~ z^=r30gi@?cOm8kAz!EylA4G~7kbEiRlRIzwrb~{_2(x^$-?|#e6Bi_**(vyr_~9Of z!n>Gqf+Qwiu!xhi9f53=PM3`3tNF}pCOiPU|H4;pzjcsqbwg*{{kyrTxk<;mx~(;; z1NMrpaQ`57yn34>Jo3b|HROE(UNcQash!0p2-!Cz;{IRv#Vp5!3o$P8!%SgV~k&Hnqhp`5eLjTcy93cK!3Hm-$`@yGnaE=?;*2uSpiZTs_dDd51U%i z{|Zd9ou-;laGS_x=O}a+ zB||za<795A?_~Q=r=coQ+ZK@@ zId~hWQL<%)fI_WDIX#=(WNl!Dm$a&ROfLTd&B$vatq!M-2Jcs;N2vps$b6P1(N}=oI3<3luMTmC|0*{ zm1w8bt7vgX($!0@V0A}XIK)w!AzUn7vH=pZEp0RU0p?}ch2XC-7r#LK&vyc2=-#Q2 z^L%8)JbbcZ%g0Du;|8=q8B>X=mIQirpE=&Ox{TiuNDnOPd-FLI^KfEF729!!0x#Es z@>3ursjFSpu%C-8WL^Zw!7a0O-#cnf`HjI+AjVCFitK}GXO`ME&on|^=~Zc}^LBp9 zj=-vlN;Uc;IDjtK38l7}5xxQF&sRtfn4^TNtnzXv4M{r&ek*(eNbIu!u$>Ed%` z5x7+&)2P&4>0J`N&ZP8$vcR+@FS0126s6+Jx_{{`3ZrIMwaJo6jdrRwE$>IU_JTZ} z(||hyyQ)4Z1@wSlT94(-QKqkAatMmkT7pCycEB1U8KQbFX&?%|4$yyxCtm3=W`$4fiG0WU3yI@c zx{wfmkZAYE_5M%4{J-ygbpH|(|GD$2f$3o_Vti#&zfSGZMQ5_f3xt6~+{RX=$H8at z?GFG1Tmp}}lmm-R->ve*Iv+XJ@58p|1_jRvfEgz$XozU8#iJS})UM6VNI!3RUU!{5 zXB(+Eqd-E;cHQ>)`h0(HO_zLmzR3Tu-UGp;08YntWwMY-9i^w_u#wR?JxR2bky5j9 z3Sl-dQQU$xrO0xa&>vsiK`QN<$Yd%YXXM7*WOhnRdSFt5$aJux8QceC?lA0_if|s> ze{ad*opH_kb%M&~(~&UcX0nFGq^MqjxW?HJIP462v9XG>j(5Gat_)#SiNfahq2Mz2 zU`4uV8m$S~o9(W>mu*=h%Gs(Wz+%>h;R9Sg)jZ$q8vT1HxX3iQnh6&2rJ1u|j>^Qf`A76K%_ubL`Zu?h4`b=IyL>1!=*%!_K)=XC z6d}4R5L+sI50Q4P3upXQ3Z!~1ZXLlh!^UNcK6#QpYt-YC=^H=EPg3)z*wXo*024Q4b2sBCG4I# zlTFFY=kQ>xvR+LsuDUAk)q%5pEcqr(O_|^spjhtpb1#aC& zghXzGkGDC_XDa%t(X`E+kvKQ4zrQ*uuQoj>7@@ykWvF332)RO?%AA&Fsn&MNzmFa$ zWk&&^=NNjxLjrli_8ESU)}U|N{%j&TQmvY~lk!~Jh}*=^INA~&QB9em!in_X%Rl1&Kd~Z(u z9mra#<@vZQlOY+JYUwCrgoea4C8^(xv4ceCXcejq84TQ#sF~IU2V}LKc~Xlr_P=ry zl&Hh0exdCbVd^NPCqNNlxM3vA13EI8XvZ1H9#bT7y*U8Y{H8nwGpOR!e!!}*g;mJ#}T{ekSb}5zIPmye*If(}}_=PcuAW#yidAa^9-`<8Gr0 z)Fz=NiZ{)HAvw{Pl5uu)?)&i&Us$Cx4gE}cIJ}B4Xz~-q7)R_%owbP!z_V2=Aq%Rj z{V;7#kV1dNT9-6R+H}}(ED*_!F=~uz>&nR3gb^Ce%+0s#u|vWl<~JD3MvS0T9thdF zioIG3c#Sdsv;LdtRv3ml7%o$6LTVL>(H`^@TNg`2KPIk*8-IB}X!MT0`hN9Ddf7yN z?J=GxPL!uJ7lqwowsl?iRrh@#5C$%E&h~Z>XQcvFC*5%0RN-Opq|=IwX(dq(*sjs+ zqy99+v~m|6T#zR*e1AVxZ8djd5>eIeCi(b8sUk)OGjAsKSOg^-ugwl2WSL@d#?mdl zib0v*{u-?cq}dDGyZ%$XRY=UkQwt2oGu`zQneZh$=^! zj;!pCBWQNtvAcwcWIBM2y9!*W|8LmQy$H~5BEx)78J`4Z0(FJO2P^!YyQU{*Al+fs z){!4JvT1iLrJ8aU3k0t|P}{RN)_^v%$$r;+p0DY7N8CXzmS*HB*=?qaaF9D@#_$SN zSz{moAK<*RH->%r7xX~9gVW$l7?b|_SYI)gcjf0VAUJ%FcQP(TpBs; zg$25D!Ry_`8xpS_OJdeo$qh#7U+cepZ??TII7_%AXsT$B z=e)Bx#v%J0j``00Zk5hsvv6%T^*xGNx%KN-=pocSoqE5_R)OK%-Pbu^1MNzfds)mL zxz^F4lDKV9D&lEY;I+A)ui{TznB*CE$=9(wgE{m}`^<--OzV-5V4X2w9j(_!+jpTr zJvD*y6;39&T+==$F&tsRKM_lqa1HC}aGL0o`%c9mO=fts?36@8MGm7Vi{Y z^<7m$(EtdSr#22<(rm_(l_(`j!*Pu~Y>>xc>I9M#DJYDJNHO&4=HM%YLIp?;iR&$m z#_$ZWYLfGLt5FJZhr3jpYb`*%9S!zCG6ivNHYzNHcI%khtgHBliM^Ou}ZVD7ehU9 zS+W@AV=?Ro!=%AJ>Kcy9aU3%VX3|XM_K0A+ZaknKDyIS3S-Hw1C7&BSW5)sqj5Ye_ z4OSW7Yu-;bCyYKHFUk}<*<(@TH?YZPHr~~Iy%9@GR2Yd}J2!N9K&CN7Eq{Ka!jdu; zQNB*Y;i(7)OxZK%IHGt#Rt?z`I|A{q_BmoF!f^G}XVeTbe1Wnzh%1g>j}>DqFf;Rp zz7>xIs12@Ke0gr+4-!pmFP84vCIaTjqFNg{V`5}Rdt~xE^I;Bxp4)|cs8=f)1YwHz zqI`G~s2~qqDV+h02b`PQpUE#^^Aq8l%y2|ByQeXSADg5*qMprEAE3WFg0Q39`O+i1 z!J@iV!`Y~C$wJ!5Z+j5$i<1`+@)tBG$JL=!*uk=2k;T<@{|s1$YL079FvK%mPhyHV zP8^KGZnp`(hVMZ;s=n~3r2y;LTwcJwoBW-(ndU-$03{RD zh+Qn$ja_Z^OuMf3Ub|JTY74s&Am*(n{J3~@#OJNYuEVVJd9*H%)oFoRBkySGm`hx! zT3tG|+aAkXcx-2Apy)h^BkOyFTWQVeZ%e2@;*0DtlG9I3Et=PKaPt&K zw?WI7S;P)TWED7aSH$3hL@Qde?H#tzo^<(o_sv_2ci<7M?F$|oCFWc?7@KBj-;N$P zB;q!8@bW-WJY9do&y|6~mEruZAVe$!?{)N9rZZxD-|oltkhW9~nR8bLBGXw<632!l z*TYQn^NnUy%Ds}$f^=yQ+BM-a5X4^GHF=%PDrRfm_uqC zh{sKwIu|O0&jWb27;wzg4w5uA@TO_j(1X?8E>5Zfma|Ly7Bklq|s z9)H`zoAGY3n-+&JPrT!>u^qg9Evx4y@GI4$n-Uk_5wttU1_t?6><>}cZ-U+&+~JE) zPlDbO_j;MoxdLzMd~Ew|1o^a5q_1R*JZ=#XXMzg?6Zy!^hop}qoLQlJ{(%!KYt`MK z8umEN@Z4w!2=q_oe=;QttPCQy3Nm4F@x>@v4sz_jo{4m*0r%J(w1cSo;D_hQtJs7W z><$QrmG^+<$4{d2bgGo&3-FV}avg9zI|Rr(k{wTyl3!M1q+a zD9W{pCd%il*j&Ft z5H$nENf>>k$;SONGW`qo6`&qKs*T z2^RS)pXk9b@(_Fw1bkb)-oqK|v}r$L!W&aXA>IpcdNZ_vWE#XO8X`#Yp1+?RshVcd zknG%rPd*4ECEI0wD#@d+3NbHKxl}n^Sgkx==Iu%}HvNliOqVBqG?P2va zQ;kRJ$J6j;+wP9cS za#m;#GUT!qAV%+rdWolk+)6kkz4@Yh5LXP+LSvo9_T+MmiaP-eq6_k;)i6_@WSJ zlT@wK$zqHu<83U2V*yJ|XJU4farT#pAA&@qu)(PO^8PxEmPD4;Txpio+2)#!9 z>&=i7*#tc0`?!==vk>s7V+PL#S1;PwSY?NIXN2=Gu89x(cToFm))7L;< z+bhAbVD*bD=}iU`+PU+SBobTQ%S!=VL!>q$rfWsaaV}Smz>lO9JXT#`CcH_mRCSf4%YQAw`$^yY z3Y*^Nzk_g$xn7a_NO(2Eb*I=^;4f!Ra#Oo~LLjlcjke*k*o$~U#0ZXOQ5@HQ&T46l z7504MUgZkz2gNP1QFN8Y?nSEnEai^Rgyvl}xZfMUV6QrJcXp;jKGqB=D*tj{8(_pV zqyB*DK$2lgYGejmJUW)*s_Cv65sFf&pb(Yz8oWgDtQ0~k^0-wdF|tj}MOXaN@ydF8 zNr={U?=;&Z?wr^VC+`)S2xl}QFagy;$mG=TUs7Vi2wws5zEke4hTa2)>O0U?$WYsZ z<8bN2bB_N4AWd%+kncgknZ&}bM~eDtj#C5uRkp21hWW5gxWvc6b*4+dn<{c?w9Rmf zIVZKsPl{W2vQAlYO3yh}-{Os=YBnL8?uN5(RqfQ=-1cOiUnJu>KcLA*tQK3FU`_bM zM^T28w;nAj5EdAXFi&Kk1Nnl2)D!M{@+D-}bIEe+Lc4{s;YJc-{F#``iS2uk;2!Zp zF9#myUmO!wCeJIoi^A+T^e~20c+c2C}XltaR!|U-HfDA=^xF97ev}$l6#oY z&-&T{egB)&aV$3_aVA51XGiU07$s9vubh_kQG?F$FycvS6|IO!6q zq^>9|3U^*!X_C~SxX&pqUkUjz%!j=VlXDo$!2VLH!rKj@61mDpSr~7B2yy{>X~_nc zRI+7g2V&k zd**H++P9dg!-AOs3;GM`(g<+GRV$+&DdMVpUxY9I1@uK28$az=6oaa+PutlO9?6#? zf-OsgT>^@8KK>ggkUQRPPgC7zjKFR5spqQb3ojCHzj^(UH~v+!y*`Smv)VpVoPwa6 zWG18WJaPKMi*F6Zdk*kU^`i~NNTfn3BkJniC`yN98L-Awd)Z&mY? zprBW$!qL-OL7h@O#kvYnLsfff@kDIegt~?{-*5A7JrA;#TmTe?jICJqhub-G@e??D zqiV#g{)M!kW1-4SDel7TO{;@*h2=_76g3NUD@|c*WO#>MfYq6_YVUP+&8e4|%4T`w zXzhmVNziAHazWO2qXcaOu@R1MrPP{t)`N)}-1&~mq=ZH=w=;-E$IOk=y$dOls{6sRR`I5>|X zpq~XYW4sd;J^6OwOf**J>a7u$S>WTFPRkjY;BfVgQst)u4aMLR1|6%)CB^18XCz+r ztkYQ}G43j~Q&1em(_EkMv0|WEiKu;z2zhb(L%$F&xWwzOmk;VLBYAZ8lOCziNoPw1 zv2BOyXA`A8z^WH!nXhKXM`t0;6D*-uGds3TYGrm8SPnJJOQ^fJU#}@aIy@MYWz**H zvkp?7I5PE{$$|~{-ZaFxr6ZolP^nL##mHOErB^AqJqn^hFA=)HWj!m3WDaHW$C)i^ z9@6G$SzB=>jbe>4kqr#sF7#K}W*Cg-5y6kun3u&0L7BpXF9=#7IN8FOjWrWwUBZiU zT_se3ih-GBKx+Uw0N|CwP3D@-C=5(9T#BH@M`F2!Goiqx+Js5xC92|Sy0%WWWp={$(am!#l~f^W_oz78HX<0X#7 zp)p1u~M*o9W@O8P{0Qkg@Wa# z2{Heb&oX^CQSZWSFBXKOfE|tsAm#^U-WkDnU;IowZ`Ok4!mwHwH=s|AqZ^YD4!5!@ zPxJj+Bd-q6w_YG`z_+r;S86zwXb+EO&qogOq8h-Ect5(M2+>(O7n7)^dP*ws_3U6v zVsh)sk^@*c>)3EML|0<-YROho{lz@Nd4;R9gL{9|64xVL`n!m$-Jjrx?-Bacp!=^5 z1^T^eB{_)Y<9)y{-4Rz@9_>;_7h;5D+@QcbF4Wv7hu)s0&==&6u)33 zHRj+&Woq-vDvjwJCYES@$C4{$?f$Ibi4G()UeN11rgjF+^;YE^5nYprYoJNoudNj= zm1pXSeG64dcWHObUetodRn1Fw|1nI$D9z}dVEYT0lQnsf_E1x2vBLql7NrHH!n&Sq z6lc*mvU=WS6=v9Lrl}&zRiu_6u;6g%_DU{9b+R z#YHqX7`m9eydf?KlKu6Sb%j$%_jmydig`B*TN`cZL-g!R)iE?+Q5oOqBFKhx z%MW>BC^(F_JuG(ayE(MT{S3eI{cKiwOtPwLc0XO*{*|(JOx;uQOfq@lp_^cZo=FZj z4#}@e@dJ>Bn%2`2_WPeSN7si^{U#H=7N4o%Dq3NdGybrZgEU$oSm$hC)uNDC_M9xc zGzwh5Sg?mpBIE8lT2XsqTt3j3?We8}3bzLBTQd639vyg^$0#1epq8snlDJP2(BF)K zSx30RM+{f+b$g{9usIL8H!hCO117Xgv}ttPJm9wVRjPk;ePH@zxv%j9k5`TzdXLeT zFgFX`V7cYIcBls5WN0Pf6SMBN+;CrQ(|EsFd*xtwr#$R{Z9FP`OWtyNsq#mCgZ7+P z^Yn$haBJ)r96{ZJd8vlMl?IBxrgh=fdq_NF!1{jARCVz>jNdC)H^wfy?R94#MPdUjcYX>#wEx+LB#P-#4S-%YH>t-j+w zOFTI8gX$ard6fAh&g=u&56%3^-6E2tpk*wx3HSCQ+t7+*iOs zPk5ysqE}i*cQocFvA68xHfL|iX(C4h*67@3|5Qwle(8wT&!&{8*{f%0(5gH+m>$tq zp;AqrP7?XTEooYG1Dzfxc>W%*CyL16q|fQ0_jp%%Bk^k!i#Nbi(N9&T>#M{gez_Ws zYK=l}adalV(nH}I_!hNeb;tQFk3BHX7N}}R8%pek^E`X}%ou=cx8InPU1EE0|Hen- zyw8MoJqB5=)Z%JXlrdTXAE)eqLAdVE-=>wGHrkRet}>3Yu^lt$Kzu%$3#(ioY}@Gu zjk3BZuQH&~7H+C*uX^4}F*|P89JX;Hg2U!pt>rDi(n(Qe-c}tzb0#6_ItoR0->LSt zR~UT<-|@TO%O`M+_e_J4wx7^)5_%%u+J=yF_S#2Xd?C;Ss3N7KY^#-vx+|;bJX&8r zD?|MetfhdC;^2WG`7MCgs>TKKN=^=!x&Q~BzmQio_^l~LboTNT=I zC5pme^P@ER``p$2md9>4!K#vV-Fc1an7pl>_|&>aqP}+zqR?+~Z;f2^`a+-!Te%V? z;H2SbF>jP^GE(R1@%C==XQ@J=G9lKX+Z<@5}PO(EYkJh=GCv#)Nj{DkWJM2}F&oAZ6xu8&g7pn1ps2U5srwQ7CAK zN&*~@t{`31lUf`O;2w^)M3B@o)_mbRu{-`PrfNpF!R^q>yTR&ETS7^-b2*{-tZAZz zw@q5x9B5V8Qd7dZ!Ai$9hk%Q!wqbE1F1c96&zwBBaRW}(^axoPpN^4Aw}&a5dMe+*Gomky_l^54*rzXro$ z>LL)U5Ry>~FJi=*{JDc)_**c)-&faPz`6v`YU3HQa}pLtb5K)u%K+BOqXP0)rj5Au$zB zW1?vr?mDv7Fsxtsr+S6ucp2l#(4dnr9sD*v+@*>g#M4b|U?~s93>Pg{{a5|rm2xfI z`>E}?9S@|IoUX{Q1zjm5YJT|3S>&09D}|2~BiMo=z4YEjXlWh)V&qs;*C{`UMxp$9 zX)QB?G$fPD6z5_pNs>Jeh{^&U^)Wbr?2D6-q?)`*1k@!UvwQgl8eG$r+)NnFoT)L6 zg7lEh+E6J17krfYJCSjWzm67hEth24pomhz71|Qodn#oAILN)*Vwu2qpJirG)4Wnv}9GWOFrQg%Je+gNrPl8mw7ykE8{ z=|B4+uwC&bpp%eFcRU6{mxRV32VeH8XxX>v$du<$(DfinaaWxP<+Y97Z#n#U~V zVEu-GoPD=9$}P;xv+S~Ob#mmi$JQmE;Iz4(){y*9pFyW-jjgdk#oG$fl4o9E8bo|L zWjo4l%n51@Kz-n%zeSCD`uB?T%FVk+KBI}=ve zvlcS#wt`U6wrJo}6I6Rwb=1GzZfwE=I&Ne@p7*pH84XShXYJRgvK)UjQL%R9Zbm(m zxzTQsLTON$WO7vM)*vl%Pc0JH7WhP;$z@j=y#avW4X8iqy6mEYr@-}PW?H)xfP6fQ z&tI$F{NNct4rRMSHhaelo<5kTYq+(?pY)Ieh8*sa83EQfMrFupMM@nfEV@EmdHUv9 z35uzIrIuo4#WnF^_jcpC@uNNaYTQ~uZWOE6P@LFT^1@$o&q+9Qr8YR+ObBkpP9=F+$s5+B!mX2~T zAuQ6RenX?O{IlLMl1%)OK{S7oL}X%;!XUxU~xJN8xk z`xywS*naF(J#?vOpB(K=o~lE;m$zhgPWDB@=p#dQIW>xe_p1OLoWInJRKbEuoncf; zmS1!u-ycc1qWnDg5Nk2D)BY%jmOwCLC+Ny>`f&UxFowIsHnOXfR^S;&F(KXd{ODlm z$6#1ccqt-HIH9)|@fHnrKudu!6B$_R{fbCIkSIb#aUN|3RM>zuO>dpMbROZ`^hvS@ z$FU-;e4W}!ubzKrU@R*dW*($tFZ>}dd*4_mv)#O>X{U@zSzQt*83l9mI zI$8O<5AIDx`wo0}f2fsPC_l>ONx_`E7kdXu{YIZbp1$(^oBAH({T~&oQ&1{X951QW zmhHUxd)t%GQ9#ak5fTjk-cahWC;>^Rg7(`TVlvy0W@Y!Jc%QL3Ozu# zDPIqBCy&T2PWBj+d-JA-pxZlM=9ja2ce|3B(^VCF+a*MMp`(rH>Rt6W1$;r{n1(VK zLs>UtkT43LR2G$AOYHVailiqk7naz2yZGLo*xQs!T9VN5Q>eE(w zw$4&)&6xIV$IO^>1N-jrEUg>O8G4^@y+-hQv6@OmF@gy^nL_n1P1-Rtyy$Bl;|VcV zF=p*&41-qI5gG9UhKmmnjs932!6hceXa#-qfK;3d*a{)BrwNFeKU|ge?N!;zk+kB! zMD_uHJR#%b54c2tr~uGPLTRLg$`fupo}cRJeTwK;~}A>(Acy4k-Xk&Aa1&eWYS1ULWUj@fhBiWY$pdfy+F z@G{OG{*v*mYtH3OdUjwEr6%_ZPZ3P{@rfbNPQG!BZ7lRyC^xlMpWH`@YRar`tr}d> z#wz87t?#2FsH-jM6m{U=gp6WPrZ%*w0bFm(T#7m#v^;f%Z!kCeB5oiF`W33W5Srdt zdU?YeOdPG@98H7NpI{(uN{FJdu14r(URPH^F6tOpXuhU7T9a{3G3_#Ldfx_nT(Hec zo<1dyhsVsTw;ZkVcJ_0-h-T3G1W@q)_Q30LNv)W?FbMH+XJ* zy=$@39Op|kZv`Rt>X`zg&at(?PO^I=X8d9&myFEx#S`dYTg1W+iE?vt#b47QwoHI9 zNP+|3WjtXo{u}VG(lLUaW0&@yD|O?4TS4dfJI`HC-^q;M(b3r2;7|FONXphw-%7~* z&;2!X17|05+kZOpQ3~3!Nb>O94b&ZSs%p)TK)n3m=4eiblVtSx@KNFgBY_xV6ts;NF;GcGxMP8OKV^h6LmSb2E#Qnw ze!6Mnz7>lE9u{AgQ~8u2zM8CYD5US8dMDX-5iMlgpE9m*s+Lh~A#P1er*rF}GHV3h z=`STo?kIXw8I<`W0^*@mB1$}pj60R{aJ7>C2m=oghKyxMbFNq#EVLgP0cH3q7H z%0?L93-z6|+jiN|@v>ix?tRBU(v-4RV`}cQH*fp|)vd3)8i9hJ3hkuh^8dz{F5-~_ zUUr1T3cP%cCaTooM8dj|4*M=e6flH0&8ve32Q)0dyisl))XkZ7Wg~N}6y`+Qi2l+e zUd#F!nJp{#KIjbQdI`%oZ`?h=5G^kZ_uN`<(`3;a!~EMsWV|j-o>c?x#;zR2ktiB! z);5rrHl?GPtr6-o!tYd|uK;Vbsp4P{v_4??=^a>>U4_aUXPWQ$FPLE4PK$T^3Gkf$ zHo&9$U&G`d(Os6xt1r?sg14n)G8HNyWa^q8#nf0lbr4A-Fi;q6t-`pAx1T*$eKM*$ z|CX|gDrk#&1}>5H+`EjV$9Bm)Njw&7-ZR{1!CJTaXuP!$Pcg69`{w5BRHysB$(tWUes@@6aM69kb|Lx$%BRY^-o6bjH#0!7b;5~{6J+jKxU!Kmi# zndh@+?}WKSRY2gZ?Q`{(Uj|kb1%VWmRryOH0T)f3cKtG4oIF=F7RaRnH0Rc_&372={_3lRNsr95%ZO{IX{p@YJ^EI%+gvvKes5cY+PE@unghjdY5#9A!G z70u6}?zmd?v+{`vCu-53_v5@z)X{oPC@P)iA3jK$`r zSA2a7&!^zmUiZ82R2=1cumBQwOJUPz5Ay`RLfY(EiwKkrx%@YN^^XuET;tE zmr-6~I7j!R!KrHu5CWGSChO6deaLWa*9LLJbcAJsFd%Dy>a!>J`N)Z&oiU4OEP-!Ti^_!p}O?7`}i7Lsf$-gBkuY*`Zb z7=!nTT;5z$_5$=J=Ko+Cp|Q0J=%oFr>hBgnL3!tvFoLNhf#D0O=X^h+x08iB;@8pXdRHxX}6R4k@i6%vmsQwu^5z zk1ip`#^N)^#Lg#HOW3sPI33xqFB4#bOPVnY%d6prwxf;Y-w9{ky4{O6&94Ra8VN@K zb-lY;&`HtxW@sF!doT5T$2&lIvJpbKGMuDAFM#!QPXW87>}=Q4J3JeXlwHys?!1^#37q_k?N@+u&Ns20pEoBeZC*np;i;M{2C0Z4_br2gsh6eL z#8`#sn41+$iD?^GL%5?cbRcaa-Nx0vE(D=*WY%rXy3B%gNz0l?#noGJGP728RMY#q z=2&aJf@DcR?QbMmN)ItUe+VM_U!ryqA@1VVt$^*xYt~-qvW!J4Tp<-3>jT=7Zow5M z8mSKp0v4b%a8bxFr>3MwZHSWD73D@+$5?nZAqGM#>H@`)mIeC#->B)P8T$zh-Pxnc z8)~Zx?TWF4(YfKuF3WN_ckpCe5;x4V4AA3(i$pm|78{%!q?|~*eH0f=?j6i)n~Hso zmTo>vqEtB)`%hP55INf7HM@taH)v`Fw40Ayc*R!T?O{ziUpYmP)AH`euTK!zg9*6Z z!>M=$3pd0!&TzU=hc_@@^Yd3eUQpX4-33}b{?~5t5lgW=ldJ@dUAH%`l5US1y_`40 zs(X`Qk}vvMDYYq+@Rm+~IyCX;iD~pMgq^KY)T*aBz@DYEB={PxA>)mI6tM*sx-DmGQHEaHwRrAmNjO!ZLHO4b;;5mf@zzlPhkP($JeZGE7 z?^XN}Gf_feGoG~BjUgVa*)O`>lX=$BSR2)uD<9 z>o^|nb1^oVDhQbfW>>!;8-7<}nL6L^V*4pB=>wwW+RXAeRvKED(n1;R`A6v$6gy0I(;Vf?!4;&sgn7F%LpM}6PQ?0%2Z@b{It<(G1CZ|>913E0nR2r^Pa*Bp z@tFGi*CQ~@Yc-?{cwu1 zsilf=k^+Qs>&WZG(3WDixisHpR>`+ihiRwkL(3T|=xsoNP*@XX3BU8hr57l3k;pni zI``=3Nl4xh4oDj<%>Q1zYXHr%Xg_xrK3Nq?vKX3|^Hb(Bj+lONTz>4yhU-UdXt2>j z<>S4NB&!iE+ao{0Tx^N*^|EZU;0kJkx@zh}S^P{ieQjGl468CbC`SWnwLRYYiStXm zOxt~Rb3D{dz=nHMcY)#r^kF8|q8KZHVb9FCX2m^X*(|L9FZg!5a7((!J8%MjT$#Fs)M1Pb zq6hBGp%O1A+&%2>l0mpaIzbo&jc^!oN^3zxap3V2dNj3x<=TwZ&0eKX5PIso9j1;e zwUg+C&}FJ`k(M|%%}p=6RPUq4sT3-Y;k-<68ciZ~_j|bt>&9ZLHNVrp#+pk}XvM{8 z`?k}o-!if>hVlCP9j%&WI2V`5SW)BCeR5>MQhF)po=p~AYN%cNa_BbV6EEh_kk^@a zD>4&>uCGCUmyA-c)%DIcF4R6!>?6T~Mj_m{Hpq`*(wj>foHL;;%;?(((YOxGt)Bhx zuS+K{{CUsaC++%}S6~CJ=|vr(iIs-je)e9uJEU8ZJAz)w166q)R^2XI?@E2vUQ!R% zn@dxS!JcOimXkWJBz8Y?2JKQr>`~SmE2F2SL38$SyR1^yqj8_mkBp)o$@+3BQ~Mid z9U$XVqxX3P=XCKj0*W>}L0~Em`(vG<>srF8+*kPrw z20{z(=^w+ybdGe~Oo_i|hYJ@kZl*(9sHw#Chi&OIc?w`nBODp?ia$uF%Hs(X>xm?j zqZQ`Ybf@g#wli`!-al~3GWiE$K+LCe=Ndi!#CVjzUZ z!sD2O*;d28zkl))m)YN7HDi^z5IuNo3^w(zy8 zszJG#mp#Cj)Q@E@r-=NP2FVxxEAeOI2e=|KshybNB6HgE^(r>HD{*}S}mO>LuRGJT{*tfTzw_#+er-0${}%YPe@CMJ1Ng#j#)i)SnY@ss3gL;g zg2D~#Kpdfu#G;q1qz_TwSz1VJT(b3zby$Vk&;Y#1(A)|xj`_?i5YQ;TR%jice5E;0 zYHg;`zS5{S*9xI6o^j>rE8Ua*XhIw{_-*&@(R|C(am8__>+Ws&Q^ymy*X4~hR2b5r zm^p3sw}yv=tdyncy_Ui7{BQS732et~Z_@{-IhHDXAV`(Wlay<#hb>%H%WDi+K$862nA@BDtM#UCKMu+kM`!JHyWSi?&)A7_ z3{cyNG%a~nnH_!+;g&JxEMAmh-Z}rC!o7>OVzW&PoMyTA_g{hqXG)SLraA^OP**<7 zjWbr7z!o2n3hnx7A=2O=WL;`@9N{vQIM@&|G-ljrPvIuJHYtss0Er0fT5cMXNUf1B z7FAwBDixt0X7C3S)mPe5g`YtME23wAnbU)+AtV}z+e8G;0BP=bI;?(#|Ep!vVfDbK zvx+|CKF>yt0hWQ3drchU#XBU+HiuG*V^snFAPUp-5<#R&BUAzoB!aZ+e*KIxa26V}s6?nBK(U-7REa573wg-jqCg>H8~>O{ z*C0JL-?X-k_y%hpUFL?I>0WV{oV`Nb)nZbJG01R~AG>flIJf)3O*oB2i8~;!P?Wo_ z0|QEB*fifiL6E6%>tlAYHm2cjTFE@*<);#>689Z6S#BySQ@VTMhf9vYQyLeDg1*F} zjq>i1*x>5|CGKN{l9br3kB0EHY|k4{%^t7-uhjd#NVipUZa=EUuE5kS1_~qYX?>hJ z$}!jc9$O$>J&wnu0SgfYods^z?J4X;X7c77Me0kS-dO_VUQ39T(Kv(Y#s}Qqz-0AH z^?WRL(4RzpkD+T5FG_0NyPq-a-B7A5LHOCqwObRJi&oRi(<;OuIN7SV5PeHU$<@Zh zPozEV`dYmu0Z&Tqd>t>8JVde9#Pt+l95iHe$4Xwfy1AhI zDM4XJ;bBTTvRFtW>E+GzkN)9k!hA5z;xUOL2 zq4}zn-DP{qc^i|Y%rvi|^5k-*8;JZ~9a;>-+q_EOX+p1Wz;>i7c}M6Nv`^NY&{J-> z`(mzDJDM}QPu5i44**2Qbo(XzZ-ZDu%6vm8w@DUarqXj41VqP~ zs&4Y8F^Waik3y1fQo`bVUH;b=!^QrWb)3Gl=QVKr+6sxc=ygauUG|cm?|X=;Q)kQ8 zM(xrICifa2p``I7>g2R~?a{hmw@{!NS5`VhH8+;cV(F>B94M*S;5#O`YzZH1Z%yD? zZ61w(M`#aS-*~Fj;x|J!KM|^o;MI#Xkh0ULJcA?o4u~f%Z^16ViA27FxU5GM*rKq( z7cS~MrZ=f>_OWx8j#-Q3%!aEU2hVuTu(7`TQk-Bi6*!<}0WQi;_FpO;fhpL4`DcWp zGOw9vx0N~6#}lz(r+dxIGZM3ah-8qrqMmeRh%{z@dbUD2w15*_4P?I~UZr^anP}DB zU9CCrNiy9I3~d#&!$DX9e?A});BjBtQ7oGAyoI$8YQrkLBIH@2;lt4E^)|d6Jwj}z z&2_E}Y;H#6I4<10d_&P0{4|EUacwFHauvrjAnAm6yeR#}f}Rk27CN)vhgRqEyPMMS7zvunj2?`f;%?alsJ+-K+IzjJx>h8 zu~m_y$!J5RWAh|C<6+uiCNsOKu)E72M3xKK(a9Okw3e_*O&}7llNV!=P87VM2DkAk zci!YXS2&=P0}Hx|wwSc9JP%m8dMJA*q&VFB0yMI@5vWoAGraygwn){R+Cj6B1a2Px z5)u(K5{+;z2n*_XD!+Auv#LJEM)(~Hx{$Yb^ldQmcYF2zNH1V30*)CN_|1$v2|`LnFUT$%-tO0Eg|c5$BB~yDfzS zcOXJ$wpzVK0MfTjBJ0b$r#_OvAJ3WRt+YOLlJPYMx~qp>^$$$h#bc|`g0pF-Ao43? z>*A+8lx>}L{p(Tni2Vvk)dtzg$hUKjSjXRagj)$h#8=KV>5s)J4vGtRn5kP|AXIz! zPgbbVxW{2o4s-UM;c#We8P&mPN|DW7_uLF!a|^0S=wr6Esx9Z$2|c1?GaupU6$tb| zY_KU`(_29O_%k(;>^|6*pZURH3`@%EuKS;Ns z1lujmf;r{qAN&Q0&m{wJSZ8MeE7RM5+Sq;ul_ z`+ADrd_Um+G37js6tKsArNB}n{p*zTUxQr>3@wA;{EUbjNjlNd6$Mx zg0|MyU)v`sa~tEY5$en7^PkC=S<2@!nEdG6L=h(vT__0F=S8Y&eM=hal#7eM(o^Lu z2?^;05&|CNliYrq6gUv;|i!(W{0N)LWd*@{2q*u)}u*> z7MQgk6t9OqqXMln?zoMAJcc zMKaof_Up})q#DzdF?w^%tTI7STI^@8=Wk#enR*)&%8yje>+tKvUYbW8UAPg55xb70 zEn5&Ba~NmOJlgI#iS8W3-@N%>V!#z-ZRwfPO1)dQdQkaHsiqG|~we2ALqG7Ruup(DqSOft2RFg_X%3w?6VqvV1uzX_@F(diNVp z4{I|}35=11u$;?|JFBEE*gb;T`dy+8gWJ9~pNsecrO`t#V9jW-6mnfO@ff9od}b(3s4>p0i30gbGIv~1@a^F2kl7YO;DxmF3? zWi-RoXhzRJV0&XE@ACc?+@6?)LQ2XNm4KfalMtsc%4!Fn0rl zpHTrHwR>t>7W?t!Yc{*-^xN%9P0cs0kr=`?bQ5T*oOo&VRRu+1chM!qj%2I!@+1XF z4GWJ=7ix9;Wa@xoZ0RP`NCWw0*8247Y4jIZ>GEW7zuoCFXl6xIvz$ezsWgKdVMBH> z{o!A7f;R-@eK9Vj7R40xx)T<2$?F2E<>Jy3F;;=Yt}WE59J!1WN367 zA^6pu_zLoZIf*x031CcwotS{L8bJE(<_F%j_KJ2P_IusaZXwN$&^t716W{M6X2r_~ zaiMwdISX7Y&Qi&Uh0upS3TyEIXNDICQlT5fHXC`aji-c{U(J@qh-mWl-uMN|T&435 z5)a1dvB|oe%b2mefc=Vpm0C%IUYYh7HI*;3UdgNIz}R##(#{(_>82|zB0L*1i4B5j-xi9O4x10rs_J6*gdRBX=@VJ+==sWb&_Qc6tSOowM{BX@(zawtjl zdU!F4OYw2@Tk1L^%~JCwb|e#3CC>srRHQ*(N%!7$Mu_sKh@|*XtR>)BmWw!;8-mq7 zBBnbjwx8Kyv|hd*`5}84flTHR1Y@@uqjG`UG+jN_YK&RYTt7DVwfEDXDW4U+iO{>K zw1hr{_XE*S*K9TzzUlJH2rh^hUm2v7_XjwTuYap|>zeEDY$HOq3X4Tz^X}E9z)x4F zs+T?Ed+Hj<#jY-`Va~fT2C$=qFT-5q$@p9~0{G&eeL~tiIAHXA!f6C(rAlS^)&k<- zXU|ZVs}XQ>s5iONo~t!XXZgtaP$Iau;JT%h)>}v54yut~pykaNye4axEK#5@?TSsQ zE;Jvf9I$GVb|S`7$pG)4vgo9NXsKr?u=F!GnA%VS2z$@Z(!MR9?EPcAqi5ft)Iz6sNl`%kj+_H-X`R<>BFrBW=fSlD|{`D%@Rcbu2?%>t7i34k?Ujb)2@J-`j#4 zLK<69qcUuniIan-$A1+fR=?@+thwDIXtF1Tks@Br-xY zfB+zblrR(ke`U;6U~-;p1Kg8Lh6v~LjW@9l2P6s+?$2!ZRPX`(ZkRGe7~q(4&gEi<$ch`5kQ?*1=GSqkeV z{SA1EaW_A!t{@^UY2D^YO0(H@+kFVzZaAh0_`A`f(}G~EP~?B|%gtxu&g%^x{EYSz zk+T;_c@d;+n@$<>V%P=nk36?L!}?*=vK4>nJSm+1%a}9UlmTJTrfX4{Lb7smNQn@T zw9p2%(Zjl^bWGo1;DuMHN(djsEm)P8mEC2sL@KyPjwD@d%QnZ$ zMJ3cnn!_!iP{MzWk%PI&D?m?C(y2d|2VChluN^yHya(b`h>~GkI1y;}O_E57zOs!{ zt2C@M$^PR2U#(dZmA-sNreB@z-yb0Bf7j*yONhZG=onhx>t4)RB`r6&TP$n zgmN*)eCqvgriBO-abHQ8ECN0bw?z5Bxpx z=jF@?zFdVn?@gD5egM4o$m`}lV(CWrOKKq(sv*`mNcHcvw&Xryfw<{ch{O&qc#WCTXX6=#{MV@q#iHYba!OUY+MGeNTjP%Fj!WgM&`&RlI^=AWTOqy-o zHo9YFt!gQ*p7{Fl86>#-JLZo(b^O`LdFK~OsZBRR@6P?ad^Ujbqm_j^XycM4ZHFyg ziUbIFW#2tj`65~#2V!4z7DM8Z;fG0|APaQ{a2VNYpNotB7eZ5kp+tPDz&Lqs0j%Y4tA*URpcfi z_M(FD=fRGdqf430j}1z`O0I=;tLu81bwJXdYiN7_&a-?ly|-j*+=--XGvCq#32Gh(=|qj5F?kmihk{%M&$}udW5)DHK zF_>}5R8&&API}o0osZJRL3n~>76nUZ&L&iy^s>PMnNcYZ|9*1$v-bzbT3rpWsJ+y{ zPrg>5Zlery96Um?lc6L|)}&{992{_$J&=4%nRp9BAC6!IB=A&=tF>r8S*O-=!G(_( zwXbX_rGZgeiK*&n5E;f=k{ktyA1(;x_kiMEt0*gpp_4&(twlS2e5C?NoD{n>X2AT# zY@Zp?#!b1zNq96MQqeO*M1MMBin5v#RH52&Xd~DO6-BZLnA6xO1$sou(YJ1Dlc{WF zVa%2DyYm`V#81jP@70IJ;DX@y*iUt$MLm)ByAD$eUuji|5{ptFYq(q)mE(5bOpxjM z^Q`AHWq44SG3`_LxC9fwR)XRVIp=B%<(-lOC3jI#bb@dK(*vjom!=t|#<@dZql%>O z15y^{4tQoeW9Lu%G&V$90x6F)xN6y_oIn;!Q zs)8jT$;&;u%Y>=T3hg34A-+Y*na=|glcStr5D;&5*t5*DmD~x;zQAV5{}Ya`?RRGa zT*t9@$a~!co;pD^!J5bo?lDOWFx%)Y=-fJ+PDGc0>;=q=s?P4aHForSB+)v0WY2JH z?*`O;RHum6j%#LG)Vu#ciO#+jRC3!>T(9fr+XE7T2B7Z|0nR5jw@WG)kDDzTJ=o4~ zUpeyt7}_nd`t}j9BKqryOha{34erm)RmST)_9Aw)@ zHbiyg5n&E{_CQR@h<}34d7WM{s{%5wdty1l+KX8*?+-YkNK2Be*6&jc>@{Fd;Ps|| z26LqdI3#9le?;}risDq$K5G3yoqK}C^@-8z^wj%tdgw-6@F#Ju{Sg7+y)L?)U$ez> zoOaP$UFZ?y5BiFycir*pnaAaY+|%1%8&|(@VB)zweR%?IidwJyK5J!STzw&2RFx zZV@qeaCB01Hu#U9|1#=Msc8Pgz5P*4Lrp!Q+~(G!OiNR{qa7|r^H?FC6gVhkk3y7=uW#Sh;&>78bZ}aK*C#NH$9rX@M3f{nckYI+5QG?Aj1DM)@~z_ zw!UAD@gedTlePB*%4+55naJ8ak_;))#S;4ji!LOqY5VRI){GMwHR~}6t4g>5C_#U# ztYC!tjKjrKvRy=GAsJVK++~$|+s!w9z3H4G^mACv=EErXNSmH7qN}%PKcN|8%9=i)qS5+$L zu&ya~HW%RMVJi4T^pv?>mw*Gf<)-7gf#Qj|e#w2|v4#t!%Jk{&xlf;$_?jW*n!Pyx zkG$<18kiLOAUPuFfyu-EfWX%4jYnjBYc~~*9JEz6oa)_R|8wjZA|RNrAp%}14L7fW zi7A5Wym*K+V8pkqqO-X#3ft{0qs?KVt^)?kS>AicmeO&q+~J~ zp0YJ_P~_a8j= zsAs~G=8F=M{4GZL{|B__UorX@MRNQLn?*_gym4aW(~+i13knnk1P=khoC-ViMZk+x zLW(l}oAg1H`dU+Fv**;qw|ANDSRs>cGqL!Yw^`; zv;{E&8CNJcc)GHzTYM}f&NPw<6j{C3gaeelU#y!M)w-utYEHOCCJo|Vgp7K6C_$14 zqIrLUB0bsgz^D%V%fbo2f9#yb#CntTX?55Xy|Kps&Xek*4_r=KDZ z+`TQuv|$l}MWLzA5Ay6Cvsa^7xvwXpy?`w(6vx4XJ zWuf1bVSb#U8{xlY4+wlZ$9jjPk)X_;NFMqdgq>m&W=!KtP+6NL57`AMljW+es zzqjUjgz;V*kktJI?!NOg^s_)ph45>4UDA!Vo0hn>KZ+h-3=?Y3*R=#!fOX zP$Y~+14$f66ix?UWB_6r#fMcC^~X4R-<&OD1CSDNuX~y^YwJ>sW0j`T<2+3F9>cLo z#!j57$ll2K9(%$4>eA7(>FJX5e)pR5&EZK!IMQzOfik#FU*o*LGz~7u(8}XzIQRy- z!U7AlMTIe|DgQFmc%cHy_9^{o`eD%ja_L>ckU6$O4*U**o5uR7`FzqkU8k4gxtI=o z^P^oGFPm5jwZMI{;nH}$?p@uV8FT4r=|#GziKXK07bHJLtK}X%I0TON$uj(iJ`SY^ zc$b2CoxCQ>7LH@nxcdW&_C#fMYBtTxcg46dL{vf%EFCZ~eErMvZq&Z%Lhumnkn^4A zsx$ay(FnN7kYah}tZ@0?-0Niroa~13`?hVi6`ndno`G+E8;$<6^gsE-K3)TxyoJ4M zb6pj5=I8^FD5H@`^V#Qb2^0cx7wUz&cruA5g>6>qR5)O^t1(-qqP&1g=qvY#s&{bx zq8Hc%LsbK1*%n|Y=FfojpE;w~)G0-X4i*K3{o|J7`krhIOd*c*$y{WIKz2n2*EXEH zT{oml3Th5k*vkswuFXdGDlcLj15Nec5pFfZ*0?XHaF_lVuiB%Pv&p7z)%38}%$Gup zVTa~C8=cw%6BKn_|4E?bPNW4PT7}jZQLhDJhvf4z;~L)506IE0 zX!tWXX(QOQPRj-p80QG79t8T2^az4Zp2hOHziQlvT!|H)jv{Ixodabzv6lBj)6WRB z{)Kg@$~~(7$-az?lw$4@L%I&DI0Lo)PEJJziWP33a3azb?jyXt1v0N>2kxwA6b%l> zZqRpAo)Npi&loWbjFWtEV)783BbeIAhqyuc+~>i7aQ8shIXt)bjCWT6$~ro^>99G} z2XfmT0(|l!)XJb^E!#3z4oEGIsL(xd; zYX1`1I(cG|u#4R4T&C|m*9KB1`UzKvho5R@1eYtUL9B72{i(ir&ls8g!pD ztR|25xGaF!4z5M+U@@lQf(12?xGy`!|3E}7pI$k`jOIFjiDr{tqf0va&3pOn6Pu)% z@xtG2zjYuJXrV)DUrIF*y<1O1<$#54kZ#2;=X51J^F#0nZ0(;S$OZDt_U2bx{RZ=Q zMMdd$fH|!s{ zXq#l;{`xfV`gp&C>A`WrQU?d{!Ey5(1u*VLJt>i27aZ-^&2IIk=zP5p+{$q(K?2(b z8?9h)kvj9SF!Dr zoyF}?V|9;6abHxWk2cEvGs$-}Pg}D+ZzgkaN&$Snp%;5m%zh1E#?Wac-}x?BYlGN#U#Mek*}kek#I9XaHt?mz3*fDrRTQ#&#~xyeqJk1QJ~E$7qsw6 z?sV;|?*=-{M<1+hXoj?@-$y+(^BJ1H~wQ9G8C0#^aEAyhDduNX@haoa=PuPp zYsGv8UBfQaRHgBgLjmP^eh>fLMeh{8ic)?xz?#3kX-D#Z{;W#cd_`9OMFIaJg-=t`_3*!YDgtNQ2+QUEAJB9M{~AvT$H`E)IKmCR21H532+ata8_i_MR@ z2Xj<3w<`isF~Ah$W{|9;51ub*f4#9ziKrOR&jM{x7I_7()O@`F*5o$KtZ?fxU~g`t zUovNEVKYn$U~VX8eR)qb`7;D8pn*Pp$(otYTqL)5KH$lUS-jf}PGBjy$weoceAcPp z&5ZYB$r&P$MN{0H0AxCe4Qmd3T%M*5d4i%#!nmBCN-WU-4m4Tjxn-%j3HagwTxCZ9 z)j5vO-C7%s%D!&UfO>bi2oXiCw<-w{vVTK^rVbv#W=WjdADJy8$khnU!`ZWCIU`># zyjc^1W~pcu>@lDZ{zr6gv%)2X4n27~Ve+cQqcND%0?IFSP4sH#yIaXXYAq^z3|cg` z`I3$m%jra>e2W-=DiD@84T!cb%||k)nPmEE09NC%@PS_OLhkrX*U!cgD*;;&gIaA(DyVT4QD+q_xu z>r`tg{hiGY&DvD-)B*h+YEd+Zn)WylQl}<4>(_NlsKXCRV;a)Rcw!wtelM2_rWX`j zTh5A|i6=2BA(iMCnj_fob@*eA;V?oa4Z1kRBGaU07O70fb6-qmA$Hg$ps@^ka1=RO zTbE_2#)1bndC3VuK@e!Sftxq4=Uux}fDxXE#Q5_x=E1h>T5`DPHz zbH<_OjWx$wy7=%0!mo*qH*7N4tySm+R0~(rbus`7;+wGh;C0O%x~fEMkt!eV>U$`i z5>Q(o z=t$gPjgGh0&I7KY#k50V7DJRX<%^X z>6+ebc9efB3@eE2Tr){;?_w`vhgF>`-GDY(YkR{9RH(MiCnyRtd!LxXJ75z+?2 zGi@m^+2hKJ5sB1@Xi@s_@p_Kwbc<*LQ_`mr^Y%j}(sV_$`J(?_FWP)4NW*BIL~sR>t6 zM;qTJZ~GoY36&{h-Pf}L#y2UtR}>ZaI%A6VkU>vG4~}9^i$5WP2Tj?Cc}5oQxe2=q z8BeLa$hwCg_psjZyC2+?yX4*hJ58Wu^w9}}7X*+i5Rjqu5^@GzXiw#SUir1G1`jY% zOL=GE_ENYxhcyUrEt9XlMNP6kx6h&%6^u3@zB8KUCAa18T(R2J`%JjWZ z!{7cXaEW+Qu*iJPu+m>QqW}Lo$4Z+!I)0JNzZ&_M%=|B1yejFRM04bGAvu{=lNPd+ zJRI^DRQ(?FcVUD+bgEcAi@o(msqys9RTCG#)TjI!9~3-dc`>gW;HSJuQvH~d`MQs86R$|SKXHh zqS9Qy)u;T`>>a!$LuaE2keJV%;8g)tr&Nnc;EkvA-RanHXsy)D@XN0a>h}z2j81R; zsUNJf&g&rKpuD0WD@=dDrPHdBoK42WoBU|nMo17o(5^;M|dB4?|FsAGVrSyWcI`+FVw^vTVC`y}f(BwJl zrw3Sp151^9=}B})6@H*i4-dIN_o^br+BkcLa^H56|^2XsT0dESw2 zMX>(KqNl=x2K5=zIKg}2JpGAZu{I_IO}0$EQ5P{4zol**PCt3F4`GX}2@vr8#Y)~J zKb)gJeHcFnR@4SSh%b;c%J`l=W*40UPjF#q{<}ywv-=vHRFmDjv)NtmC zQx9qm)d%0zH&qG7AFa3VAU1S^(n8VFTC~Hb+HjYMjX8r#&_0MzlNR*mnLH5hi}`@{ zK$8qiDDvS_(L9_2vHgzEQ${DYSE;DqB!g*jhJghE&=LTnbgl&Xepo<*uRtV{2wDHN z)l;Kg$TA>Y|K8Lc&LjWGj<+bp4Hiye_@BfU(y#nF{fpR&|Ltbye?e^j0}8JC4#xi% zv29ZR%8%hk=3ZDvO-@1u8KmQ@6p%E|dlHuy#H1&MiC<*$YdLkHmR#F3ae;bKd;@*i z2_VfELG=B}JMLCO-6UQy^>RDE%K4b>c%9ki`f~Z2Qu8hO7C#t%Aeg8E%+}6P7Twtg z-)dj(w}_zFK&86KR@q9MHicUAucLVshUdmz_2@32(V`y3`&Kf8Q2I)+!n0mR=rrDU zXvv^$ho;yh*kNqJ#r1}b0|i|xRUF6;lhx$M*uG3SNLUTC@|htC z-=fsw^F%$qqz4%QdjBrS+ov}Qv!z00E+JWas>p?z@=t!WWU3K*?Z(0meTuTOC7OTx zU|kFLE0bLZ+WGcL$u4E}5dB0g`h|uwv3=H6f+{5z9oLv-=Q45+n~V4WwgO=CabjM% zBAN+RjM65(-}>Q2V#i1Na@a0`08g&y;W#@sBiX6Tpy8r}*+{RnyGUT`?XeHSqo#|J z^ww~c;ou|iyzpErDtlVU=`8N7JSu>4M z_pr9=tX0edVn9B}YFO2y(88j#S{w%E8vVOpAboK*27a7e4Ekjt0)hIX99*1oE;vex z7#%jhY=bPijA=Ce@9rRO(Vl_vnd00!^TAc<+wVvRM9{;hP*rqEL_(RzfK$er_^SN; z)1a8vo8~Dr5?;0X0J62Cusw$A*c^Sx1)dom`-)Pl7hsW4i(r*^Mw`z5K>!2ixB_mu z*Ddqjh}zceRFdmuX1akM1$3>G=#~|y?eYv(e-`Qy?bRHIq=fMaN~fB zUa6I8Rt=)jnplP>yuS+P&PxeWpJ#1$F`iqRl|jF$WL_aZFZl@kLo&d$VJtu&w?Q0O zzuXK>6gmygq(yXJy0C1SL}T8AplK|AGNUOhzlGeK_oo|haD@)5PxF}rV+5`-w{Aag zus45t=FU*{LguJ11Sr-28EZkq;!mJO7AQGih1L4rEyUmp>B!%X0YemsrV3QFvlgt* z5kwlPzaiJ+kZ^PMd-RRbl(Y?F*m`4*UIhIuf#8q>H_M=fM*L_Op-<_r zBZagV=4B|EW+KTja?srADTZXCd3Yv%^Chfpi)cg{ED${SI>InNpRj5!euKv?=Xn92 zsS&FH(*w`qLIy$doc>RE&A5R?u zzkl1sxX|{*fLpXvIW>9d<$ePROttn3oc6R!sN{&Y+>Jr@yeQN$sFR z;w6A<2-0%UA?c8Qf;sX7>>uKRBv3Ni)E9pI{uVzX|6Bb0U)`lhLE3hK58ivfRs1}d zNjlGK0hdq0qjV@q1qI%ZFMLgcpWSY~mB^LK)4GZ^h_@H+3?dAe_a~k*;9P_d7%NEFP6+ zgV(oGr*?W(ql?6SQ~`lUsjLb%MbfC4V$)1E0Y_b|OIYxz4?O|!kRb?BGrgiH5+(>s zoqM}v*;OBfg-D1l`M6T6{K`LG+0dJ1)!??G5g(2*vlNkm%Q(MPABT$r13q?|+kL4- zf)Mi5r$sn;u41aK(K#!m+goyd$c!KPl~-&-({j#D4^7hQkV3W|&>l_b!}!z?4($OA z5IrkfuT#F&S1(`?modY&I40%gtroig{YMvF{K{>5u^I51k8RriGd${z)=5k2tG zM|&Bp5kDTfb#vfuTTd?)a=>bX=lokw^y9+2LS?kwHQIWI~pYgy7 zb?A-RKVm_vM5!9?C%qYdfRAw& zAU7`up~%g=p@}pg#b7E)BFYx3g%(J36Nw(Dij!b>cMl@CSNbrW!DBDbTD4OXk!G4x zi}JBKc8HBYx$J~31PXH+4^x|UxK~(<@I;^3pWN$E=sYma@JP|8YL`L(zI6Y#c%Q{6 z*APf`DU$S4pr#_!60BH$FGViP14iJmbrzSrOkR;f3YZa{#E7Wpd@^4E-zH8EgPc-# zKWFPvh%WbqU_%ZEt`=Q?odKHc7@SUmY{GK`?40VuL~o)bS|is$Hn=<=KGHOsEC5tB zFb|q}gGlL97NUf$G$>^1b^3E18PZ~Pm9kX%*ftnolljiEt@2#F2R5ah$zbXd%V_Ev zyDd{1o_uuoBga$fB@Fw!V5F3jIr=a-ykqrK?WWZ#a(bglI_-8pq74RK*KfQ z0~Dzus7_l;pMJYf>Bk`)`S8gF!To-BdMnVw5M-pyu+aCiC5dwNH|6fgRsIKZcF&)g zr}1|?VOp}I3)IR@m1&HX1~#wsS!4iYqES zK}4J{Ei>;e3>LB#Oly>EZkW14^@YmpbgxCDi#0RgdM${&wxR+LiX}B+iRioOB0(pDKpVEI;ND?wNx>%e|m{RsqR_{(nmQ z3ZS}@t!p4a(BKx_-CYwrcyJ5u1TO9bcXti$8sy>xcLKqKCc#~UOZYD{llKTSFEjJ~ zyNWt>tLU}*>^`TvPxtP%F`ZJQw@W0^>x;!^@?k_)9#bF$j0)S3;mH-IR5y82l|%=F z2lR8zhP?XNP-ucZZ6A+o$xOyF!w;RaLHGh57GZ|TCXhJqY~GCh)aXEV$1O&$c}La1 zjuJxkY9SM4av^Hb;i7efiYaMwI%jGy`3NdY)+mcJhF(3XEiSlU3c|jMBi|;m-c?~T z+x0_@;SxcoY=(6xNgO$bBt~Pj8`-<1S|;Bsjrzw3@zSjt^JC3X3*$HI79i~!$RmTz zsblZsLYs7L$|=1CB$8qS!tXrWs!F@BVuh?kN(PvE5Av-*r^iYu+L^j^m9JG^#=m>@ z=1soa)H*w6KzoR$B8mBCXoU;f5^bVuwQ3~2LKg!yxomG1#XPmn(?YH@E~_ED+W6mxs%x{%Z<$pW`~ON1~2XjP5v(0{C{+6Dm$00tsd3w=f=ZENy zOgb-=f}|Hb*LQ$YdWg<(u7x3`PKF)B7ZfZ6;1FrNM63 z?O6tE%EiU@6%rVuwIQjvGtOofZBGZT1Sh(xLIYt9c4VI8`!=UJd2BfLjdRI#SbVAX ziT(f*RI^T!IL5Ac>ql7uduF#nuCRJ1)2bdvAyMxp-5^Ww5p#X{rb5)(X|fEhDHHW{ zw(Lfc$g;+Q`B0AiPGtmK%*aWfQQ$d!*U<|-@n2HZvCWSiw^I>#vh+LyC;aaVWGbmkENr z&kl*8o^_FW$T?rDYLO1Pyi%>@&kJKQoH2E0F`HjcN}Zlnx1ddoDA>G4Xu_jyp6vuT zPvC}pT&Owx+qB`zUeR|4G;OH(<<^_bzkjln0k40t`PQxc$7h(T8Ya~X+9gDc8Z9{Z z&y0RAU}#_kQGrM;__MK9vwIwK^aoqFhk~dK!ARf1zJqHMxF2?7-8|~yoO@_~Ed;_wvT%Vs{9RK$6uUQ|&@#6vyBsFK9eZW1Ft#D2)VpQRwpR(;x^ zdoTgMqfF9iBl%{`QDv7B0~8{8`8k`C4@cbZAXBu00v#kYl!#_Wug{)2PwD5cNp?K^ z9+|d-4z|gZ!L{57>!Ogfbzchm>J1)Y%?NThxIS8frAw@z>Zb9v%3_3~F@<=LG%r*U zaTov}{{^z~SeX!qgSYow`_5)ij*QtGp4lvF`aIGQ>@3ZTkDmsl#@^5*NGjOuu82}o zzLF~Q9SW+mP=>88%eSA1W4_W7-Q>rdq^?t=m6}^tDPaBRGFLg%ak93W!kOp#EO{6& zP%}Iff5HZQ9VW$~+9r=|Quj#z*=YwcnssS~9|ub2>v|u1JXP47vZ1&L1O%Z1DsOrDfSIMHU{VT>&>H=9}G3i@2rP+rx@eU@uE8rJNec zij~#FmuEBj03F1~ct@C@$>y)zB+tVyjV3*n`mtAhIM0$58vM9jOQC}JJOem|EpwqeMuYPxu3sv}oMS?S#o6GGK@8PN59)m&K4Dc&X% z(;XL_kKeYkafzS3Wn5DD>Yiw{LACy_#jY4op(>9q>>-*9@C0M+=b#bknAWZ37^(Ij zq>H%<@>o4a#6NydoF{_M4i4zB_KG)#PSye9bk0Ou8h%1Dtl7Q_y#7*n%g)?m>xF~( zjqvOwC;*qvN_3(*a+w2|ao0D?@okOvg8JskUw(l7n`0fncglavwKd?~l_ryKJ^Ky! zKCHkIC-o7%fFvPa$)YNh022lakMar^dgL=t#@XLyNHHw!b?%WlM)R@^!)I!smZL@k zBi=6wE5)2v&!UNV(&)oOYW(6Qa!nUjDKKBf-~Da=#^HE4(@mWk)LPvhyN3i4goB$3K8iV7uh zsv+a?#c4&NWeK(3AH;ETrMOIFgu{_@%XRwCZ;L=^8Ts)hix4Pf3yJRQ<8xb^CkdmC z?c_gB)XmRsk`9ch#tx4*hO=#qS7={~Vb4*tTf<5P%*-XMfUUYkI9T1cEF;ObfxxI-yNuA=I$dCtz3ey znVkctYD*`fUuZ(57+^B*R=Q}~{1z#2!ca?)+YsRQb+lt^LmEvZt_`=j^wqig+wz@n@ z`LIMQJT3bxMzuKg8EGBU+Q-6cs5(@5W?N>JpZL{$9VF)veF`L5%DSYTNQEypW%6$u zm_~}T{HeHj1bAlKl8ii92l9~$dm=UM21kLemA&b$;^!wB7#IKWGnF$TVq!!lBlG4 z{?Rjz?P(uvid+|i$VH?`-C&Gcb3{(~Vpg`w+O);Wk1|Mrjxrht0GfRUnZqz2MhrXa zqgVC9nemD5)H$to=~hp)c=l9?#~Z_7i~=U-`FZxb-|TR9@YCxx;Zjo-WpMNOn2)z) zFPGGVl%3N$f`gp$gPnWC+f4(rmts%fidpo^BJx72zAd7|*Xi{2VXmbOm)1`w^tm9% znM=0Fg4bDxH5PxPEm{P3#A(mxqlM7SIARP?|2&+c7qmU8kP&iApzL|F>Dz)Ixp_`O zP%xrP1M6@oYhgo$ZWwrAsYLa4 z|I;DAvJxno9HkQrhLPQk-8}=De{9U3U%)dJ$955?_AOms!9gia%)0E$Mp}$+0er@< zq7J&_SzvShM?e%V?_zUu{niL@gt5UFOjFJUJ}L?$f%eU%jUSoujr{^O=?=^{19`ON zlRIy8Uo_nqcPa6@yyz`CM?pMJ^^SN^Fqtt`GQ8Q#W4kE7`V9^LT}j#pMChl!j#g#J zr-=CCaV%xyFeQ9SK+mG(cTwW*)xa(eK;_Z(jy)woZp~> zA(4}-&VH+TEeLzPTqw&FOoK(ZjD~m{KW05fiGLe@E3Z2`rLukIDahE*`u!ubU)9`o zn^-lyht#E#-dt~S>}4y$-mSbR8{T@}22cn^refuQ08NjLOv?JiEWjyOnzk<^R5%gO zhUH_B{oz~u#IYwVnUg8?3P*#DqD8#X;%q%HY**=I>>-S|!X*-!x1{^l#OnR56O>iD zc;i;KS+t$koh)E3)w0OjWJl_aW2;xF=9D9Kr>)(5}4FqUbk# zI#$N8o0w;IChL49m9CJTzoC!|u{Ljd%ECgBOf$}&jA^$(V#P#~)`&g`H8E{uv52pp zwto`xUL-L&WTAVREEm$0g_gYPL(^vHq(*t1WCH_6alhkeW&GCZ3hL)|{O-jiFOBrF z!EW=Jej|dqQitT6!B-7&io2K)WIm~Q)v@yq%U|VpV+I?{y0@Yd%n8~-NuuM*pM~KA z85YB};IS~M(c<}4Hxx>qRK0cdl&e?t253N%vefkgds>Ubn8X}j6Vpgs>a#nFq$osY z1ZRwLqFv=+BTb=i%D2Wv>_yE0z}+niZ4?rE|*a3d7^kndWGwnFqt+iZ(7+aln<}jzbAQ(#Z2SS}3S$%Bd}^ zc9ghB%O)Z_mTZMRC&H#)I#fiLuIkGa^`4e~9oM5zKPx?zjkC&Xy0~r{;S?FS%c7w< zWbMpzc(xSw?9tGxG~_l}Acq}zjt5ClaB7-!vzqnlrX;}$#+PyQ9oU)_DfePh2E1<7 ztok6g6K^k^DuHR*iJ?jw?bs_whk|bx`dxu^nC6#e{1*m~z1eq7m}Cf$*^Eua(oi_I zAL+3opNhJteu&mWQ@kQWPucmiP)4|nFG`b2tpC;h{-PI@`+h?9v=9mn|0R-n8#t=+Z*FD(c5 zjj79Jxkgck*DV=wpFgRZuwr%}KTm+dx?RT@aUHJdaX-ODh~gByS?WGx&czAkvkg;x zrf92l8$Or_zOwJVwh>5rB`Q5_5}ef6DjS*$x30nZbuO3dijS*wvNEqTY5p1_A0gWr znH<(Qvb!os14|R)n2Ost>jS2;d1zyLHu`Svm|&dZD+PpP{Bh>U&`Md;gRl64q;>{8MJJM$?UNUd`aC>BiLe>*{ zJY15->yW+<3rLgYeTruFDtk1ovU<$(_y7#HgUq>)r0{^}Xbth}V#6?%5jeFYt;SG^ z3qF)=uWRU;Jj)Q}cpY8-H+l_n$2$6{ZR?&*IGr{>ek!69ZH0ZoJ*Ji+ezzlJ^%qL3 zO5a`6gwFw(moEzqxh=yJ9M1FTn!eo&qD#y5AZXErHs%22?A+JmS&GIolml!)rZTnUDM3YgzYfT#;OXn)`PWv3Ta z!-i|-Wojv*k&bC}_JJDjiAK(Ba|YZgUI{f}TdEOFT2+}nPmttytw7j%@bQZDV1vvj z^rp{gRkCDmYJHGrE1~e~AE!-&6B6`7UxVQuvRrfdFkGX8H~SNP_X4EodVd;lXd^>eV1jN+Tt4}Rsn)R0LxBz0c=NXU|pUe!MQQFkGBWbR3&(jLm z%RSLc#p}5_dO{GD=DEFr=Fc% z85CBF>*t!6ugI?soX(*JNxBp+-DdZ4X0LldiK}+WWGvXV(C(Ht|!3$psR=&c*HIM=BmX;pRIpz@Ale{9dhGe(U2|Giv;# zOc|;?p67J=Q(kamB*aus=|XP|m{jN^6@V*Bpm?ye56Njh#vyJqE=DweC;?Rv7faX~ zde03n^I~0B2vUmr;w^X37tVxUK?4}ifsSH5_kpKZIzpYu0;Kv}SBGfI2AKNp+VN#z`nI{UNDRbo-wqa4NEls zICRJpu)??cj^*WcZ^MAv+;bDbh~gpN$1Cor<{Y2oyIDws^JsfW^5AL$azE(T0p&pP z1Mv~6Q44R&RHoH95&OuGx2srIr<@zYJTOMKiVs;Bx3py89I87LOb@%mr`0)#;7_~Z zzcZj8?w=)>%5@HoCHE_&hnu(n_yQ-L(~VjpjjkbT7e)Dk5??fApg(d>vwLRJ-x{um z*Nt?DqTSxh_MIyogY!vf1mU1`Gld-&L)*43f6dilz`Q@HEz;+>MDDYv9u!s;WXeao zUq=TaL$P*IFgJzrGc>j1dDOd zed+=ZBo?w4mr$2)Ya}?vedDopomhW1`#P<%YOJ_j=WwClX0xJH-f@s?^tmzs_j7t!k zK@j^zS0Q|mM4tVP5Ram$VbS6|YDY&y?Q1r1joe9dj08#CM{RSMTU}(RCh`hp_Rkl- zGd|Cv~G@F{DLhCizAm9AN!^{rNs8hu!G@8RpnGx7e`-+K$ffN<0qjR zGq^$dj_Tv!n*?zOSyk5skI7JVKJ)3jysnjIu-@VSzQiP8r6MzudCU=~?v-U8yzo^7 zGf~SUTvEp+S*!X9uX!sq=o}lH;r{pzk~M*VA(uyQ`3C8!{C;)&6)95fv(cK!%Cuz$ z_Zal57H6kPN>25KNiI6z6F)jzEkh#%OqU#-__Xzy)KyH};81#N6OfX$$IXWzOn`Q& z4f$Z1t>)8&8PcYfEwY5UadU1yg+U*(1m2ZlHoC-!2?gB!!fLhmTl))D@dhvkx#+Yj z1O=LV{(T%{^IeCuFK>%QR!VZ4GnO5tK8a+thWE zg4VytZrwcS?7^ zuZfhYnB8dwd%VLO?DK7pV5Wi<(`~DYqOXn8#jUIL^)12*Dbhk4GmL_E2`WX&iT16o zk(t|hok(Y|v-wzn?4x34T)|+SfZP>fiq!><*%vnxGN~ypST-FtC+@TPv*vYv@iU!_ z@2gf|PrgQ?Ktf*9^CnJ(x*CtZVB8!OBfg0%!wL;Z8(tYYre0vcnPGlyCc$V(Ipl*P z_(J!a=o@vp^%Efme!K74(Ke7A>Y}|sxV+JL^aYa{~m%5#$$+R1? zGaQhZTTX!#s#=Xtpegqero$RNt&`4xn3g$)=y*;=N=Qai)}~`xtxI_N*#MMCIq#HFifT zz(-*m;pVH&+4bixL&Bbg)W5FN^bH87pAHp)zPkWNMfTFqS=l~AC$3FX3kQUSh_C?-ZftyClgM)o_D7cX$RGlEYblux0jv5 zTr|i-I3@ZPCGheCl~BGhImF)K4!9@?pC(gi3ozX=a!|r1)LFxy_8c&wY0<^{2cm|P zv6Y`QktY*;I)IUd5y3ne1CqpVanlY45z8hf4&$EUBnucDj16pDa4&GI&TArYhf*xh zdj>*%APH8(h~c>o@l#%T>R$e>rwVx_WUB|~V`p^JHsg*y12lzj&zF}w6W09HwB2yb z%Q~`es&(;7#*DUC_w-Dmt7|$*?TA_m;zB+-u{2;Bg{O}nV7G_@7~<)Bv8fH^G$XG8$(&{A zwXJK5LRK%M34(t$&NI~MHT{UQ9qN-V_yn|%PqC81EIiSzmMM=2zb`mIwiP_b)x+2M z7Gd`83h79j#SItpQ}luuf2uOU`my_rY5T{6P#BNlb%h%<#MZb=m@y5aW;#o1^2Z)SWo+b`y0gV^iRcZtz5!-05vF z7wNo=hc6h4hc&s@uL^jqRvD6thVYtbErDK9k!;+a0xoE0WL7zLixjn5;$fXvT=O3I zT6jI&^A7k6R{&5#lVjz#8%_RiAa2{di{`kx79K+j72$H(!ass|B%@l%KeeKchYLe_ z>!(JC2fxsv>XVen+Y42GeYPxMWqm`6F$(E<6^s|g(slNk!lL*6v^W2>f6hh^mE$s= z3D$)}{V5(Qm&A6bp%2Q}*GZ5Qrf}n7*Hr51?bJOyA-?B4vg6y_EX<*-e20h{=0Mxs zbuQGZ$fLyO5v$nQ&^kuH+mNq9O#MWSfThtH|0q1i!NrWj^S}_P;Q1OkYLW6U^?_7G zx2wg?CULj7))QU(n{$0JE%1t2dWrMi2g-Os{v|8^wK{@qlj%+1b^?NI z$}l2tjp0g>K3O+p%yK<9!XqmQ?E9>z&(|^Pi~aSRwI5x$jaA62GFz9%fmO3t3a>cq zK8Xbv=5Ps~4mKN5+Eqw12(!PEyedFXv~VLxMB~HwT1Vfo51pQ#D8e$e4pFZ{&RC2P z5gTIzl{3!&(tor^BwZfR8j4k{7Rq#`riKXP2O-Bh66#WWK2w=z;iD9GLl+3 zpHIaI4#lQ&S-xBK8PiQ%dwOh?%BO~DCo06pN7<^dnZCN@NzY{_Z1>rrB0U|nC&+!2 z2y!oBcTd2;@lzyk(B=TkyZ)zy0deK05*Q0zk+o$@nun`VI1Er7pjq>8V zNmlW{p7S^Btgb(TA}jL(uR>`0w8gHP^T~Sh5Tkip^spk4SBAhC{TZU}_Z)UJw-}zm zPq{KBm!k)?P{`-(9?LFt&YN4s%SIZ-9lJ!Ws~B%exHOeVFk3~}HewnnH(d)qkLQ_d z6h>O)pEE{vbOVw}E+jdYC^wM+AAhaI(YAibUc@B#_mDss0Ji&BK{WG`4 zOk>vSNq(Bq2IB@s>>Rxm6Wv?h;ZXkpb1l8u|+_qXWdC*jjcPCixq;!%BVPSp#hP zqo`%cNf&YoQXHC$D=D45RiT|5ngPlh?0T~?lUf*O)){K@*Kbh?3RW1j9-T?%lDk@y z4+~?wKI%Y!-=O|_IuKz|=)F;V7ps=5@g)RrE;;tvM$gUhG>jHcw2Hr@fS+k^Zr~>G z^JvPrZc}_&d_kEsqAEMTMJw!!CBw)u&ZVzmq+ZworuaE&TT>$pYsd9|g9O^0orAe8 z221?Va!l1|Y5X1Y?{G7rt1sX#qFA^?RLG^VjoxPf63;AS=_mVDfGJKg73L zsGdnTUD40y(>S##2l|W2Cy!H(@@5KBa(#gs`vlz}Y~$ot5VsqPQ{{YtjYFvIumZzt zA{CcxZLJR|4#{j7k~Tu*jkwz8QA|5G1$Cl895R`Zyp;irp1{KN){kB30O8P1W5;@bG znvX74roeMmQlUi=v9Y%(wl$ZC#9tKNFpvi3!C}f1m6Ct|l2g%psc{TJp)@yu)*e2> z((p0Fg*8gJ!|3WZke9;Z{8}&NRkv7iP=#_y-F}x^y?2m%-D_aj^)f04%mneyjo_;) z6qc_Zu$q37d~X``*eP~Q>I2gg%rrV8v=kDfpp$=%Vj}hF)^dsSWygoN(A$g*E=Do6FX?&(@F#7pbiJ`;c0c@Ul zDqW_90Wm#5f2L<(Lf3)3TeXtI7nhYwRm(F;*r_G6K@OPW4H(Y3O5SjUzBC}u3d|eQ8*8d@?;zUPE+i#QNMn=r(ap?2SH@vo*m z3HJ%XuG_S6;QbWy-l%qU;8x;>z>4pMW7>R}J%QLf%@1BY(4f_1iixd-6GlO7Vp*yU zp{VU^3?s?90i=!#>H`lxT!q8rk>W_$2~kbpz7eV{3wR|8E=8**5?qn8#n`*(bt1xRQrdGxyx2y%B$qmw#>ZV$c7%cO#%JM1lY$Y0q?Yuo> ze9KdJoiM)RH*SB%^;TAdX-zEjA7@%y=!0=Zg%iWK7jVI9b&Dk}0$Af&08KHo+ zOwDhFvA(E|ER%a^cdh@^wLUlmIv6?_3=BvX8jKk92L=Y}7Jf5OGMfh` zBdR1wFCi-i5@`9km{isRb0O%TX+f~)KNaEz{rXQa89`YIF;EN&gN)cigu6mNh>?Cm zAO&Im2flv6D{jwm+y<%WsPe4!89n~KN|7}Cb{Z;XweER73r}Qp2 zz}WP4j}U0&(uD&9yGy6`!+_v-S(yG*iytsTR#x_Rc>=6u^vnRDnf1gP{#2>`ffrAC% zTZ5WQ@hAK;P;>kX{D)mIXe4%a5p=LO1xXH@8T?mz7Q@d)$3pL{{B!2{-v70L*o1AO+|n5beiw~ zk@(>m?T3{2k2c;NWc^`4@P&Z?BjxXJ@;x1qhn)9Mn*IFdt_J-dIqx5#d`NfyfX~m( zIS~5)MfZ2Uy?_4W`47i}u0ZgPh<{D|w_d#;D}Q&U$Q-G}xM1A@1f{#%A$jh6Qp&0hQ<0bPOM z-{1Wm&p%%#eb_?x7i;bol EfAhh=DF6Tf literal 0 HcmV?d00001 diff --git a/services/mac_manager/.mvn/wrapper/maven-wrapper.properties b/services/mac_manager/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 000000000..642d572ce --- /dev/null +++ b/services/mac_manager/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,2 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/services/mac_manager/lib/alcor_common_lib-0.1.0-SNAPSHOT.jar b/services/mac_manager/lib/alcor_common_lib-0.1.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..b69f5a443df6127989cd535f53143f97ca4dfb31 GIT binary patch literal 57551 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 F`+spTowNV| literal 0 HcmV?d00001 diff --git a/services/mac_manager/mvnw b/services/mac_manager/mvnw new file mode 100644 index 000000000..a16b5431b --- /dev/null +++ b/services/mac_manager/mvnw @@ -0,0 +1,310 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/services/mac_manager/mvnw.cmd b/services/mac_manager/mvnw.cmd new file mode 100644 index 000000000..c8d43372c --- /dev/null +++ b/services/mac_manager/mvnw.cmd @@ -0,0 +1,182 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + +FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/services/mac_manager/pom.xml b/services/mac_manager/pom.xml new file mode 100644 index 000000000..dbe523587 --- /dev/null +++ b/services/mac_manager/pom.xml @@ -0,0 +1,128 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.2.6.RELEASE + + + com.futurewei.alcor.macmanager + AlcorMacManager + 0.0.1-SNAPSHOT + AlcorMacManager + Virtual Mac Address Manager Module + + + 1.8 + + + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-starter-data-redis + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + org.springframework.boot + spring-boot-starter-web + + + org.apache.kafka + kafka-clients + 2.3.0 + + + com.google.protobuf + protobuf-java + 3.8.0 + + + org.projectlombok + lombok + 1.18.0 + + + com.futurewei.alcor.common + alcor_common_lib + 0.1.0 + system + ${pom.basedir}/lib/alcor_common_lib-0.1.0-SNAPSHOT.jar + + + mysql + mysql-connector-java + runtime + + + org.apache.commons + commons-pool2 + 2.4.2 + + + io.grpc + grpc-netty-shaded + 1.23.0 + + + io.grpc + grpc-protobuf + 1.23.0 + + + io.grpc + grpc-stub + 1.23.0 + + + com.googlecode.json-simple + json-simple + 1.1.1 + + + org.springframework.kafka + spring-kafka + + + org.apache.ignite + ignite-core + 2.8.0 + + + io.grpc + protoc-gen-grpc-java + 1.23.0 + pom + + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.vintage + junit-vintage-engine + + + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/services/mac_manager/src/lib/alcor_common_lib-0.1.0-SNAPSHOT.jar b/services/mac_manager/src/lib/alcor_common_lib-0.1.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..b69f5a443df6127989cd535f53143f97ca4dfb31 GIT binary patch literal 57551 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 F`+spTowNV| literal 0 HcmV?d00001 diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/MacManagerApplication.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/MacManagerApplication.java new file mode 100644 index 000000000..cb2c27f3f --- /dev/null +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/MacManagerApplication.java @@ -0,0 +1,13 @@ +package com.futurewei.alcor.macmanager; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class MacManagerApplication { + + public static void main(String[] args) { + SpringApplication.run(MacManagerApplication.class, args); + } + +} diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/config/RedisConfiguration.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/config/RedisConfiguration.java new file mode 100644 index 000000000..84ee6f217 --- /dev/null +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/config/RedisConfiguration.java @@ -0,0 +1,91 @@ +/* +Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + + +package com.futurewei.alcor.macmanager.config; + + +import com.futurewei.alcor.common.repo.ICachePublisher; +import com.futurewei.alcor.common.service.RedisListener; +import com.futurewei.alcor.macmanager.entity.MacState; +import com.futurewei.alcor.macmanager.service.RedisPublisher; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.domain.EntityScan; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisStandaloneConfiguration; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.listener.ChannelTopic; +import org.springframework.data.redis.listener.RedisMessageListenerContainer; +import org.springframework.data.redis.listener.adapter.MessageListenerAdapter; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +@Configuration +@ComponentScan({"com.futurewei.alcor.macmanager.service", "com.futurewei.alcor.common.service"}) +@EntityScan({"com.futurewei.alcor.macmanager.entity}", "com.futurewei.common.entity"}) +public class RedisConfiguration { + + @Value("${spring.redis.host}") + private String redisHostName; + + @Value("${spring.redis.port}") + private int redisHostPort; + + @Bean + LettuceConnectionFactory lettuceConnectionFactory() { + RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(); + configuration.setHostName(redisHostName); + configuration.setPort(redisHostPort); + return new LettuceConnectionFactory(configuration); + } + + @Bean + public RedisTemplate redisMacTemplate() { + final RedisTemplate template = new RedisTemplate(); + template.setConnectionFactory(lettuceConnectionFactory()); + template.setKeySerializer(new StringRedisSerializer()); + template.setHashValueSerializer(new Jackson2JsonRedisSerializer(MacState.class)); + template.setValueSerializer(new Jackson2JsonRedisSerializer(MacState.class)); + return template; + } + + + @Bean + MessageListenerAdapter redisListenerInstance() { + return new MessageListenerAdapter(new RedisListener()); + } + + @Bean + RedisMessageListenerContainer redisContainer() { + final RedisMessageListenerContainer container = new RedisMessageListenerContainer(); + container.setConnectionFactory(lettuceConnectionFactory()); + container.addMessageListener(redisListenerInstance(), topic()); + return container; + } + + @Bean + ICachePublisher redisMacPublisherInstance() { + return new RedisPublisher(redisMacTemplate(), topic()); + } + + @Bean + ChannelTopic topic() { + return new ChannelTopic("pubsub:queue"); + } +} diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java new file mode 100644 index 000000000..f74ef9532 --- /dev/null +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java @@ -0,0 +1,111 @@ +/* +Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package com.futurewei.alcor.macmanager.controller; + +import com.futurewei.alcor.common.exception.ParameterNullOrEmptyException; +import com.futurewei.alcor.common.exception.ResourcePersistenceException; +import com.futurewei.alcor.macmanager.entity.MacState; +import com.futurewei.alcor.macmanager.entity.MacStateJson; +import com.futurewei.alcor.macmanager.service.MacAddressService; +import com.futurewei.alcor.macmanager.utils.RestPreconditionsUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +import static org.springframework.web.bind.annotation.RequestMethod.GET; +import static org.springframework.web.bind.annotation.RequestMethod.POST; + +@RestController +public class MacController { + + final String DELIMITER = "/"; + + @Autowired + private MacAddressService service; + + @RequestMapping( + method = GET, + value = {"/macaddress/{macaddress}", "/v4/macaddress/{macaddress}"}) + public MacStateJson getMacStateByMacAddress(@PathVariable String macaddress) throws Exception { + + MacState macState = null; + + try { + RestPreconditionsUtil.verifyParameterNotNullorEmpty(macaddress); + RestPreconditionsUtil.verifyResourceFound(macaddress); + macState = this.service.getMacStateByMacAddress(macaddress); + } catch (ParameterNullOrEmptyException e) { + //TODO: REST error code + throw new Exception(e); + } + + if (macState == null) { + //TODO: REST error code + return new MacStateJson(); + } + return new MacStateJson(macState); + } + + @RequestMapping( + method = GET, + value = {"/project/{projectid}/vpcs/{vpcid}/port/{portid}", "/v4/{projectid}/vpcs/{vpcid}/port/{portid}"}) + public MacStateJson getMacStateByVpcIdPort(@PathVariable String projectid, @PathVariable String vpcid, @PathVariable String portid) throws Exception { + + MacState macState = null; + Map map = null; + + try { + RestPreconditionsUtil.verifyParameterNotNullorEmpty(projectid); + RestPreconditionsUtil.verifyParameterNotNullorEmpty(vpcid); + RestPreconditionsUtil.verifyResourceFound(portid); + map = service.getMacStateByVpcIdPort(projectid, vpcid, portid); + } catch (ParameterNullOrEmptyException e) { + //TODO: REST error code + throw new Exception(e); + } + + if (macState == null) { + //TODO: REST error code + return new MacStateJson(); + } + return new MacStateJson(macState); + } + + @RequestMapping( + method = POST, + value = {"/mac", "/v4/mac"}) + @ResponseStatus(HttpStatus.CREATED) + public MacStateJson createMacState(@RequestBody MacStateJson resource) throws Exception { + MacState macState = null; + + try { + MacState inMacState = resource.getMacState(); + RestPreconditionsUtil.verifyParameterNotNullorEmpty(inMacState); + macState = service.createMacState(inMacState); + if (macState == null) { + throw new ResourcePersistenceException(); + } + } catch (ParameterNullOrEmptyException e) { + throw new Exception(e); + } catch (Exception e) { + throw new Exception(e); + } + return new MacStateJson(macState); + } +} diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRedisRepository.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRedisRepository.java new file mode 100644 index 000000000..87bcb504a --- /dev/null +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRedisRepository.java @@ -0,0 +1,91 @@ +/*Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package com.futurewei.alcor.macmanager.dao; + +import com.futurewei.alcor.common.logging.Logger; +import com.futurewei.alcor.common.logging.LoggerFactory; +import com.futurewei.alcor.common.repo.ICacheRepository; +import com.futurewei.alcor.macmanager.entity.MacState; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.HashOperations; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Repository; + +import javax.annotation.PostConstruct; +import java.util.Map; +import java.util.logging.Level; + +@Repository +public class MacRedisRepository implements ICacheRepository { + + private String KEY; + + private RedisTemplate redisTemplate; + + private HashOperations hashOperations; + + @Autowired + public MacRedisRepository(RedisTemplate redisTemplate) { + + this.redisTemplate = redisTemplate; + } + + @PostConstruct + private void init() { + hashOperations = redisTemplate.opsForHash(); + } + + @Override + public MacState findItem(String id) { + + return (MacState) hashOperations.get(KEY, id); + } + + @Override + public Map findAllItems() { + return hashOperations.entries(KEY); + } + + @Override + public void addItem(MacState newItem) { + Logger logger = LoggerFactory.getLogger(); + logger.log(Level.INFO, "mac address:" + newItem.getMacAddress()); + hashOperations.put(KEY, newItem.getMacAddress(), newItem); + } + + @Override + public void deleteItem(String id) { + hashOperations.delete(KEY, id); + } + + public Map findMacAddressesbyVpcPort(String portId) { + return null; + } + + public MacState findMac(String id) { + return (MacState) hashOperations.get(KEY, id); + } + + public void setKey(String key) { + KEY = key; + } + + public boolean exisingOui(String oui) { + + return redisTemplate.hasKey(oui); + } +} + diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRepository.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRepository.java new file mode 100644 index 000000000..359232807 --- /dev/null +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRepository.java @@ -0,0 +1,74 @@ +/*Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package com.futurewei.alcor.macmanager.dao; + +import com.futurewei.alcor.common.exception.CacheException; +import com.futurewei.alcor.common.logging.Logger; +import com.futurewei.alcor.common.logging.LoggerFactory; +import com.futurewei.alcor.common.repo.ICache; +import com.futurewei.alcor.common.repo.ICacheRepository; +import com.futurewei.alcor.common.service.CacheFactory; +import com.futurewei.alcor.macmanager.entity.MacState; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.stereotype.Repository; + +import javax.annotation.PostConstruct; +import java.util.Map; +import java.util.logging.Level; + +@Repository +@ConditionalOnBean(CacheFactory.class) +public class MacRepository implements ICacheRepository { + private static final Logger logger = LoggerFactory.getLogger(); + private ICache cache; + + @Autowired + public MacRepository(CacheFactory cacheFactory) { + cache = cacheFactory.getCache(MacState.class); + } + + public ICache getCache() { + return cache; + } + + @PostConstruct + private void init() { + logger.log(Level.INFO, "MacRepository init completed"); + } + + @Override + public MacState findItem(String macAddress) throws CacheException { + return cache.get(macAddress); + } + + @Override + public Map findAllItems() throws CacheException { + return cache.getAll(); + } + + @Override + public void addItem(MacState macState) throws CacheException { + logger.log(Level.INFO, "Add mac state, mac_state:" + macState.getMacAddress()); + cache.put(macState.getMacAddress(), macState); + } + + @Override + public void deleteItem(String macAddress) throws CacheException { + logger.log(Level.INFO, "Delete mac state, mac address:" + macAddress); + cache.remove(macAddress); + } +} \ No newline at end of file diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/OuiRedisRepository.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/OuiRedisRepository.java new file mode 100644 index 000000000..af49b10e6 --- /dev/null +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/OuiRedisRepository.java @@ -0,0 +1,75 @@ +/*Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.futurewei.alcor.macmanager.dao; + +import com.futurewei.alcor.common.logging.Logger; +import com.futurewei.alcor.common.logging.LoggerFactory; +import com.futurewei.alcor.common.repo.ICacheRepository; +import com.futurewei.alcor.macmanager.entity.OuiState; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.HashOperations; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Repository; + +import javax.annotation.PostConstruct; +import java.util.Map; +import java.util.logging.Level; + +@Repository +public class OuiRedisRepository implements ICacheRepository { + + private static final String KEY = "OuiState"; + + private RedisTemplate redisTemplate; + + private HashOperations hashOperations; + + @Autowired + public OuiRedisRepository(RedisTemplate redisTemplate) { + this.redisTemplate = redisTemplate; + } + + @PostConstruct + private void init() { + hashOperations = redisTemplate.opsForHash(); + } + + @Override + public OuiState findItem(String id) { + + return (OuiState) hashOperations.get(KEY, id); + } + + @Override + public Map findAllItems() { + return hashOperations.entries(KEY); + } + + @Override + public void addItem(OuiState newItem) { + Logger logger = LoggerFactory.getLogger(); + logger.log(Level.INFO, "oui:" + newItem.getOu()); + hashOperations.put(KEY, newItem.getOu(), newItem.getOui()); + } + + @Override + public void deleteItem(String id) { + hashOperations.delete(KEY, id); + } + + public String findOui(String ou) { + return (String) hashOperations.get(KEY, ou); + } +} diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacAddress.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacAddress.java new file mode 100644 index 000000000..9f42c7682 --- /dev/null +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacAddress.java @@ -0,0 +1,44 @@ +/* +Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + + +package com.futurewei.alcor.macmanager.entity; + +import java.util.concurrent.ThreadLocalRandom; + +import lombok.Data; + + +@Data +public class MacAddress { + private String oui; + private String nic; + + + public MacAddress() { + } + + public MacAddress(MacAddress macAddress) { + this(macAddress.oui, macAddress.nic); + } + + public MacAddress(String oui, String nic) { + this.oui = oui; + this.nic = nic; + } + + +} diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java new file mode 100644 index 000000000..e07609193 --- /dev/null +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java @@ -0,0 +1,54 @@ +/* +Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package com.futurewei.alcor.macmanager.entity; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import java.io.Serializable; + +@Data +public class MacState implements Serializable { + + @JsonProperty("mac_address") + private String macAddress; + + @JsonProperty("project_id") + private String projectId; + + @JsonProperty("vpc_id") + private String vpcId; + + @JsonProperty("port_id") + + private String portId; + + public MacState() { + + } + + public MacState(MacState state) { + this(state.macAddress, state.projectId, state.vpcId, state.portId); + } + + public MacState(String macAddress, String projectId, String vpcId, String portId) { + this.macAddress = macAddress; + this.projectId = projectId; + this.vpcId = vpcId; + this.portId = portId; + } +} + diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacStateJson.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacStateJson.java new file mode 100644 index 000000000..db0ad8cbd --- /dev/null +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacStateJson.java @@ -0,0 +1,32 @@ +/* +Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.futurewei.alcor.macmanager.entity; + +import lombok.Data; + +@Data +public class MacStateJson { + private MacState macState; + + public MacStateJson() { + + } + + public MacStateJson(MacState macState) { + this.macState = macState; + } +} + diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/OuiState.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/OuiState.java new file mode 100644 index 000000000..15e37a090 --- /dev/null +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/OuiState.java @@ -0,0 +1,38 @@ +/*Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.futurewei.alcor.macmanager.entity; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class OuiState implements Serializable { + String ou; //project_id+"/"+vpc_id + String oui; + + public OuiState() { + + } + + public OuiState(OuiState state) { + this(state.ou, state.oui); + } + + public OuiState(String ou, String oui) { + this.ou = ou; + this.oui = oui; + } +} diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/exception/UniquenessViolationException.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/exception/UniquenessViolationException.java new file mode 100644 index 000000000..a738a7adc --- /dev/null +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/exception/UniquenessViolationException.java @@ -0,0 +1,36 @@ +/*Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.futurewei.alcor.macmanager.exception; + +public class UniquenessViolationException extends Exception { + private static final long serialVersionUID = 1L; + + public UniquenessViolationException() { + } + + public UniquenessViolationException(String message) { + super(message); + } + + public UniquenessViolationException(String message, Throwable cause) { + super(message, cause); + } + + public UniquenessViolationException(Throwable cause) { + super(cause); + } +} + + diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/MacAddressService.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/MacAddressService.java new file mode 100644 index 000000000..b330f7089 --- /dev/null +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/MacAddressService.java @@ -0,0 +1,126 @@ +/*Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.futurewei.alcor.macmanager.service; + +import com.futurewei.alcor.macmanager.dao.MacRedisRepository; +import com.futurewei.alcor.macmanager.dao.OuiRedisRepository; +import com.futurewei.alcor.macmanager.entity.MacState; +import com.futurewei.alcor.macmanager.entity.OuiState; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Map; +import java.util.concurrent.ThreadLocalRandom; + +@Service +public class MacAddressService { + + final String DELIMITER1 = "/"; + final String DELIMITER2 = ":"; + final int KEY_LENGTH = 8; + + @Autowired + private OuiRedisRepository ouiRedisRepository; + + @Autowired + private MacRedisRepository macRedisRepository; + + public MacState getMacStateByMacAddress(String macAddress) { + String key = getKey(macAddress); + macRedisRepository.setKey(key); + MacState macState = macRedisRepository.findItem(macAddress); + return macState; + } + + public Map getMacStateByVpcIdPort(String projectId, String vpcId, String portId) { + String hk = makeKey(projectId, vpcId, portId); + String oui = ouiRedisRepository.findOui(hk); + macRedisRepository.setKey(oui); + return macRedisRepository.findMacAddressesbyVpcPort(portId); + } + + public MacState createMacState(MacState macState) throws Exception { + String macAddress; + String projectId = macState.getProjectId(); + String vpcId = macState.getVpcId(); + String portId = macState.getPortId(); + String oui = generateOui(projectId, vpcId); + String nic = generateNic(oui, projectId, vpcId, portId); + macAddress = oui + DELIMITER2 + nic; + macState.setMacAddress(macAddress); + return macState; + } + + private String generateOui(String projectId, String vpcId) { + long randomOui; + String hk = projectId + DELIMITER1 + vpcId; + String oui = ouiRedisRepository.findOui(hk); + if (oui == null) { + while (oui == null) { + randomOui = ThreadLocalRandom.current().nextLong(0, 2 ^ 24); + String ouiTemp = hexToMac(Long.toHexString(randomOui)); + if (macRedisRepository.exisingOui(ouiTemp) == false) + oui = ouiTemp; + } + ouiRedisRepository.addItem(new OuiState(projectId + DELIMITER1 + vpcId, oui)); + } + return oui; + } + + private String generateNic(String oui, String projectId, String vpcId, String portId) { + String nic = null; + long randomNic; + + macRedisRepository.setKey(oui); + while (nic == null) { + randomNic = ThreadLocalRandom.current().nextLong(0, 2 ^ 24); + String nicTemp = hexToMac(Long.toHexString(randomNic)); + if (macRedisRepository.findMac(nicTemp) == null) { + String macAddress = oui + DELIMITER2 + nicTemp; + macRedisRepository.addItem(new MacState(macAddress, projectId, vpcId, portId)); + nic = nicTemp; + } + } + return nic; + } + + private String hexToMac(String hex) { + hex = hex.toUpperCase(); + while(hex.length() < (KEY_LENGTH - 2)) + hex = "0"+hex; + StringBuffer buffer = new StringBuffer(KEY_LENGTH); + buffer.insert(0, hex); + buffer.insert(2, ":"); + buffer.insert(5, ":"); + + return buffer.toString(); + } + + private String getKey(String macAddress) { + String key = macAddress.substring(0, KEY_LENGTH); + return key; + } + + private String makeKey(String projectid, String vpcid, String port) { + String key = projectid; + key = key.concat(DELIMITER1); + key = key.concat(vpcid); + key = key.concat(DELIMITER1); + key = key.concat(port); + + return key; + } +} + diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/RedisPublisher.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/RedisPublisher.java new file mode 100644 index 000000000..9521f9ef5 --- /dev/null +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/RedisPublisher.java @@ -0,0 +1,45 @@ +/* +Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package com.futurewei.alcor.macmanager.service; + +import com.futurewei.alcor.common.repo.ICachePublisher; +import com.futurewei.alcor.macmanager.entity.MacState; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.listener.ChannelTopic; +import org.springframework.stereotype.Service; + +@Service +public class RedisPublisher implements ICachePublisher { + @Autowired + private RedisTemplate redisTemplate; + + @Autowired + private ChannelTopic topic; + + public RedisPublisher() { + } + + public RedisPublisher(final RedisTemplate redisTemplate, final ChannelTopic topic) { + this.redisTemplate = redisTemplate; + this.topic = topic; + } + + public void publish(final String message) { + redisTemplate.convertAndSend(topic.getTopic(), message); + } +} diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/RestPreconditionsUtil.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/RestPreconditionsUtil.java new file mode 100644 index 000000000..4dacace64 --- /dev/null +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/RestPreconditionsUtil.java @@ -0,0 +1,122 @@ +/* +Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package com.futurewei.alcor.macmanager.utils; + +import com.futurewei.alcor.common.exception.*; +import com.futurewei.alcor.macmanager.entity.MacState; +import org.thymeleaf.util.StringUtils; + +public class RestPreconditionsUtil { + public static T verifyResourceFound(T resource) throws ResourceNotFoundException { + if (resource == null) throw new ResourceNotFoundException(); + + //TODO: Check resource exists in the repo + + return resource; + } + + public static T verifyResourceNotExists(T resource) throws ResourcePreExistenceException { + if (resource == null) throw new ResourcePreExistenceException(); + + //TODO: Check resource does not exist in the repo + + return resource; + } + + public static void verifyParameterNotNullorEmpty(String resourceId) throws ParameterNullOrEmptyException { + if (StringUtils.isEmpty(resourceId)) { + throw new ParameterNullOrEmptyException("Empty parameter"); + } + } + + public static void verifyParameterEqual(String expectedResourceId, String resourceId) throws ParameterUnexpectedValueException { + if (StringUtils.isEmpty(resourceId) || !resourceId.equalsIgnoreCase(expectedResourceId)) { + throw new ParameterUnexpectedValueException("Expeceted value: " + expectedResourceId + " | actual: " + resourceId); + } + } + + public static void verifyParameterNotNullorEmpty(MacState resource) throws ParameterNullOrEmptyException { + if (resource == null) { + throw new ParameterNullOrEmptyException("null parameter"); + } + } + + public static void populateResourceProjectId(MacState resource, String projectId, String vpcId, String portId) { + String resourceProjectId = resource.getProjectId(); + String resourceVpcId = resource.getVpcId(); + String resourcePortId = resource.getPortId(); + + if (StringUtils.isEmpty(resourceProjectId)) { + resource.setProjectId(projectId); + } else if (!resourceProjectId.equalsIgnoreCase(projectId)) { + System.out.println("Resource id not matched " + resourceProjectId + " : " + projectId); + resource.setProjectId(projectId); + } + + if (StringUtils.isEmpty(resourceVpcId)) { + resource.setVpcId(vpcId); + } else if (!resourceVpcId.equalsIgnoreCase(vpcId)) { + System.out.println("Resource vpc id not matched " + resourceVpcId + " : " + vpcId); + resource.setVpcId(vpcId); + } + + if (StringUtils.isEmpty(resourcePortId)) { + resource.setPortId(portId); + } else if (!resourcePortId.equalsIgnoreCase(portId)) { + System.out.println("Resource port is not matched " + resourcePortId + " : " + portId); + resource.setPortId(portId); + } + } + + public static void populateResourceProjectId(MacState resource, String projectId) { + String resourceProjectId = resource.getProjectId(); + if (StringUtils.isEmpty(resourceProjectId)) { + resource.setProjectId(projectId); + } else if (!resourceProjectId.equalsIgnoreCase(projectId)) { + System.out.println("Resource id not matched " + resourceProjectId + " : " + projectId); + resource.setProjectId(projectId); + } + } + + public static void populateResourceVpcId(MacState resource, String vpcId) { + String resourceVpcId = null; + if (resource instanceof MacState) { + resourceVpcId = resource.getVpcId(); + } + + if (StringUtils.isEmpty(resourceVpcId)) { + resource.setVpcId(vpcId); + } else if (!resourceVpcId.equalsIgnoreCase(vpcId)) { + System.out.println("Resource vpc id not matched " + resourceVpcId + " : " + vpcId); + resource.setVpcId(vpcId); + } + } + + public static void populateResourcePort(MacState resource, String portId) { + String resourcePortId = null; + if (resource instanceof MacState) { + resourcePortId = resource.getPortId(); + } + + if (StringUtils.isEmpty(resourcePortId)) { + resource.setPortId(portId); + } else if (!resourcePortId.equalsIgnoreCase(portId)) { + System.out.println("Resource port is not matched " + resourcePortId + " : " + portId); + resource.setPortId(portId); + } + } +} \ No newline at end of file diff --git a/services/mac_manager/src/main/resources/application.properties b/services/mac_manager/src/main/resources/application.properties new file mode 100644 index 000000000..7ad984e14 --- /dev/null +++ b/services/mac_manager/src/main/resources/application.properties @@ -0,0 +1,20 @@ +#Machine configuration +#VPCManager.machine.config=classpath:.\\config\\machine.json +#Connecton configuration +spring.redis.host=127.0.0.1 +# Please check redis pod service cluster IP +#spring.redis.host=10.99.0.27 +spring.redis.port=6379 +apache.kafka.address=172.17.0.1:9092 +#Logging configuration +logging.level.root=info +logging.level.org.springframework.web=info +logging.file.path=. +logging.type=file +#Ignite configuration +#ignite.host=localhost +#ignite.port=10800 +#ignite.key-store-path=F:\\work\\alcor\\git\\chenpp\\alcor\\src\\resources\\keystore.jks +#ignite.key-store-password=123456 +#ignite.trust-store-path=F:\\work\\alcor\\git\\chenpp\\alcor\\src\\resources\\truststore.jks +#ignite.trust-store-password=123456 \ No newline at end of file diff --git a/services/mac_manager/src/main/resources/static/start.html b/services/mac_manager/src/main/resources/static/start.html new file mode 100644 index 000000000..324cea2cc --- /dev/null +++ b/services/mac_manager/src/main/resources/static/start.html @@ -0,0 +1,10 @@ + + + + + Start + + +Mac Address Manager Module is running + + \ No newline at end of file diff --git a/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/AlcorMacManager/MacManagerApplicationTests.java b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/AlcorMacManager/MacManagerApplicationTests.java new file mode 100644 index 000000000..c9349d8e5 --- /dev/null +++ b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/AlcorMacManager/MacManagerApplicationTests.java @@ -0,0 +1,15 @@ +package com.futurewei.alcor.macmanager.AlcorMacManager; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +class MacManagerApplicationTests { + + @Test + void contextLoads() { + } +} diff --git a/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java new file mode 100644 index 000000000..4a7f36908 --- /dev/null +++ b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java @@ -0,0 +1,46 @@ +/* +Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.futurewei.alcor.macmanager.controller; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +import static org.hamcrest.Matchers.containsString; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@RunWith(SpringRunner.class) +@WebMvcTest(MacController.class) +@ContextConfiguration(classes = {MacController.class}) +public class MacControllerTest { + @Autowired + private MockMvc mvc; + + @Test + public void test_index() throws Exception { + this.mvc.perform(get("/start.html")) + .andDo(print()) + .andExpect(status().isOk()) + .andExpect(content().string(containsString("MacManager"))); + } +} \ No newline at end of file From f6316b456a7398ce2a74e0eb9a8992c4cd436bb9 Mon Sep 17 00:00:00 2001 From: Eunju Kim Date: Mon, 6 Apr 2020 15:10:44 -0700 Subject: [PATCH 02/33] [Microservices] Mac address manager - APIs create, get, delete --- .../doc/Alcor_MacManager_Doc_v2.docx | Bin 0 -> 100313 bytes .../lib/alcor_common_lib-0.1.0-SNAPSHOT.jar | Bin 57551 -> 0 bytes .../macmanager/controller/MacController.java | 45 ++++++++---------- .../macmanager/dao/MacRedisRepository.java | 9 +++- .../macmanager/service/MacAddressService.java | 27 +++++++---- .../controller/MacControllerTest.java | 3 ++ 6 files changed, 49 insertions(+), 35 deletions(-) create mode 100644 services/mac_manager/doc/Alcor_MacManager_Doc_v2.docx delete mode 100644 services/mac_manager/src/lib/alcor_common_lib-0.1.0-SNAPSHOT.jar diff --git a/services/mac_manager/doc/Alcor_MacManager_Doc_v2.docx b/services/mac_manager/doc/Alcor_MacManager_Doc_v2.docx new file mode 100644 index 0000000000000000000000000000000000000000..28629f307895cc0a33ef668281c2ce4862cbb735 GIT binary patch literal 100313 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

tEMyQrNxb}C8o8o@ByvTaE&Kzr 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 G2>1_K1vqm6 literal 0 HcmV?d00001 diff --git a/services/mac_manager/src/lib/alcor_common_lib-0.1.0-SNAPSHOT.jar b/services/mac_manager/src/lib/alcor_common_lib-0.1.0-SNAPSHOT.jar deleted file mode 100644 index b69f5a443df6127989cd535f53143f97ca4dfb31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57551 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 F`+spTowNV| diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java index f74ef9532..c4af72ba6 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java @@ -16,8 +16,11 @@ package com.futurewei.alcor.macmanager.controller; +import com.futurewei.alcor.common.entity.ResponseId; import com.futurewei.alcor.common.exception.ParameterNullOrEmptyException; +import com.futurewei.alcor.common.exception.ResourceNullException; import com.futurewei.alcor.common.exception.ResourcePersistenceException; +import com.futurewei.alcor.macmanager.dao.MacRedisRepository; import com.futurewei.alcor.macmanager.entity.MacState; import com.futurewei.alcor.macmanager.entity.MacStateJson; import com.futurewei.alcor.macmanager.service.MacAddressService; @@ -30,6 +33,7 @@ import static org.springframework.web.bind.annotation.RequestMethod.GET; import static org.springframework.web.bind.annotation.RequestMethod.POST; +import static org.springframework.web.bind.annotation.RequestMethod.DELETE; @RestController public class MacController { @@ -62,31 +66,6 @@ public MacStateJson getMacStateByMacAddress(@PathVariable String macaddress) thr return new MacStateJson(macState); } - @RequestMapping( - method = GET, - value = {"/project/{projectid}/vpcs/{vpcid}/port/{portid}", "/v4/{projectid}/vpcs/{vpcid}/port/{portid}"}) - public MacStateJson getMacStateByVpcIdPort(@PathVariable String projectid, @PathVariable String vpcid, @PathVariable String portid) throws Exception { - - MacState macState = null; - Map map = null; - - try { - RestPreconditionsUtil.verifyParameterNotNullorEmpty(projectid); - RestPreconditionsUtil.verifyParameterNotNullorEmpty(vpcid); - RestPreconditionsUtil.verifyResourceFound(portid); - map = service.getMacStateByVpcIdPort(projectid, vpcid, portid); - } catch (ParameterNullOrEmptyException e) { - //TODO: REST error code - throw new Exception(e); - } - - if (macState == null) { - //TODO: REST error code - return new MacStateJson(); - } - return new MacStateJson(macState); - } - @RequestMapping( method = POST, value = {"/mac", "/v4/mac"}) @@ -108,4 +87,20 @@ public MacStateJson createMacState(@RequestBody MacStateJson resource) throws Ex } return new MacStateJson(macState); } + + @RequestMapping( + method = DELETE, + value = {"/mac/{macaddress}", "/v4/mac/{macaddress}"}) + public ResponseId deleteMacState(@PathVariable String macaddress) throws Exception { + MacState macState = null; + + try { + RestPreconditionsUtil.verifyParameterNotNullorEmpty(macaddress); + RestPreconditionsUtil.verifyResourceFound(macaddress); + macState = service.releaseMac(macaddress); + } catch (ParameterNullOrEmptyException e) { + throw new Exception(e); + } + return new ResponseId(macState.getMacAddress()); + } } diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRedisRepository.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRedisRepository.java index 87bcb504a..06a13b7d4 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRedisRepository.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRedisRepository.java @@ -71,7 +71,11 @@ public void deleteItem(String id) { hashOperations.delete(KEY, id); } - public Map findMacAddressesbyVpcPort(String portId) { + public void updateItem(MacState newItem) { + hashOperations.put(KEY, newItem.getMacAddress(), newItem); + } + + public Map findMacAddressesbyVpcPort(String portId){ return null; } @@ -79,7 +83,8 @@ public MacState findMac(String id) { return (MacState) hashOperations.get(KEY, id); } - public void setKey(String key) { + public void setKey(String key) + { KEY = key; } diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/MacAddressService.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/MacAddressService.java index b330f7089..548f1a968 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/MacAddressService.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/MacAddressService.java @@ -28,7 +28,7 @@ public class MacAddressService { final String DELIMITER1 = "/"; - final String DELIMITER2 = ":"; + final String DELIMITER2 = "-"; final int KEY_LENGTH = 8; @Autowired @@ -44,11 +44,15 @@ public MacState getMacStateByMacAddress(String macAddress) { return macState; } - public Map getMacStateByVpcIdPort(String projectId, String vpcId, String portId) { - String hk = makeKey(projectId, vpcId, portId); - String oui = ouiRedisRepository.findOui(hk); - macRedisRepository.setKey(oui); - return macRedisRepository.findMacAddressesbyVpcPort(portId); + public MacState releaseMac(String macAddress) { + String key = getKey(macAddress); + macRedisRepository.setKey(key); + MacState macState = macRedisRepository.findItem(macAddress); + macState.setProjectId(""); + macState.setVpcId(""); + macState.setPortId(""); + macRedisRepository.updateItem(macState); + return macState; } public MacState createMacState(MacState macState) throws Exception { @@ -63,6 +67,13 @@ public MacState createMacState(MacState macState) throws Exception { return macState; } + public Map getMacStateByVpcIdPort(String projectId, String vpcId, String portId) { + String hk = makeKey(projectId, vpcId, portId); + String oui = ouiRedisRepository.findOui(hk); + macRedisRepository.setKey(oui); + return macRedisRepository.findMacAddressesbyVpcPort(portId); + } + private String generateOui(String projectId, String vpcId) { long randomOui; String hk = projectId + DELIMITER1 + vpcId; @@ -98,8 +109,8 @@ private String generateNic(String oui, String projectId, String vpcId, String po private String hexToMac(String hex) { hex = hex.toUpperCase(); - while(hex.length() < (KEY_LENGTH - 2)) - hex = "0"+hex; + while (hex.length() < (KEY_LENGTH - 2)) + hex = "0" + hex; StringBuffer buffer = new StringBuffer(KEY_LENGTH); buffer.insert(0, hex); buffer.insert(2, ":"); diff --git a/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java index 4a7f36908..c1ce88d24 100644 --- a/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java +++ b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java @@ -18,13 +18,16 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.equalTo; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; From e4b56046bc4480a83cfc4c90f4ab28fbf8a6009a Mon Sep 17 00:00:00 2001 From: Eunju Kim Date: Tue, 7 Apr 2020 09:15:26 -0700 Subject: [PATCH 03/33] [Microservices] Mac manager - update pom file and lib files --- .../doc/Alcor_MacManager_Doc_v2.docx | Bin 100313 -> 103297 bytes .../doc/~$cor_MacManager_Doc_v2.docx | Bin 0 -> 162 bytes services/mac_manager/doc/~WRL0310.tmp | Bin 0 -> 100313 bytes services/mac_manager/pom.xml | 40 +++--------------- .../macmanager/controller/MacController.java | 8 ++-- .../alcor/macmanager/entity/MacState.java | 1 - .../utils/RestPreconditionsUtil.java | 22 ---------- .../controller/MacControllerTest.java | 37 +++++++++++++--- 8 files changed, 41 insertions(+), 67 deletions(-) create mode 100644 services/mac_manager/doc/~$cor_MacManager_Doc_v2.docx create mode 100644 services/mac_manager/doc/~WRL0310.tmp diff --git a/services/mac_manager/doc/Alcor_MacManager_Doc_v2.docx b/services/mac_manager/doc/Alcor_MacManager_Doc_v2.docx index 28629f307895cc0a33ef668281c2ce4862cbb735..cf92f5714ae2433e13831e989f5f32444b89fc9e 100644 GIT binary patch delta 13799 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 diff --git a/services/mac_manager/doc/~$cor_MacManager_Doc_v2.docx b/services/mac_manager/doc/~$cor_MacManager_Doc_v2.docx new file mode 100644 index 0000000000000000000000000000000000000000..2af221603f0e39866eaeb86439468d66acb0d2cb GIT binary patch literal 162 zcmd;dEzQd+Rq)QtWgr1?GPp97GUPF20Z9c0Z-z_;h;~k(8Rys-7&wx?S+)b&PvsRJ o{jFzUXqYwwY2Bp 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

tEMyQrNxb}C8o8o@ByvTaE&Kzr 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 G2>1_K1vqm6 literal 0 HcmV?d00001 diff --git a/services/mac_manager/pom.xml b/services/mac_manager/pom.xml index dbe523587..47f4a2a45 100644 --- a/services/mac_manager/pom.xml +++ b/services/mac_manager/pom.xml @@ -50,38 +50,11 @@ lombok 1.18.0 - - com.futurewei.alcor.common - alcor_common_lib - 0.1.0 - system - ${pom.basedir}/lib/alcor_common_lib-0.1.0-SNAPSHOT.jar - - - mysql - mysql-connector-java - runtime - org.apache.commons commons-pool2 2.4.2 - - io.grpc - grpc-netty-shaded - 1.23.0 - - - io.grpc - grpc-protobuf - 1.23.0 - - - io.grpc - grpc-stub - 1.23.0 - com.googlecode.json-simple json-simple @@ -96,12 +69,6 @@ ignite-core 2.8.0 - - io.grpc - protoc-gen-grpc-java - 1.23.0 - pom - org.springframework.boot spring-boot-starter-test @@ -113,7 +80,12 @@ - + + com.futurewei.alcor.common + AlcorCommonLib + 0.1.0-SNAPSHOT + compile + diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java index c4af72ba6..fe33c99c2 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java @@ -45,14 +45,13 @@ public class MacController { @RequestMapping( method = GET, - value = {"/macaddress/{macaddress}", "/v4/macaddress/{macaddress}"}) + value = {"/macs/{macaddress}", "/v4/macaddress/{macaddress}"}) public MacStateJson getMacStateByMacAddress(@PathVariable String macaddress) throws Exception { MacState macState = null; try { RestPreconditionsUtil.verifyParameterNotNullorEmpty(macaddress); - RestPreconditionsUtil.verifyResourceFound(macaddress); macState = this.service.getMacStateByMacAddress(macaddress); } catch (ParameterNullOrEmptyException e) { //TODO: REST error code @@ -68,7 +67,7 @@ public MacStateJson getMacStateByMacAddress(@PathVariable String macaddress) thr @RequestMapping( method = POST, - value = {"/mac", "/v4/mac"}) + value = {"/macs", "/v4/macs"}) @ResponseStatus(HttpStatus.CREATED) public MacStateJson createMacState(@RequestBody MacStateJson resource) throws Exception { MacState macState = null; @@ -90,13 +89,12 @@ public MacStateJson createMacState(@RequestBody MacStateJson resource) throws Ex @RequestMapping( method = DELETE, - value = {"/mac/{macaddress}", "/v4/mac/{macaddress}"}) + value = {"/macs/{macaddress}", "/v4/macs/{macaddress}"}) public ResponseId deleteMacState(@PathVariable String macaddress) throws Exception { MacState macState = null; try { RestPreconditionsUtil.verifyParameterNotNullorEmpty(macaddress); - RestPreconditionsUtil.verifyResourceFound(macaddress); macState = service.releaseMac(macaddress); } catch (ParameterNullOrEmptyException e) { throw new Exception(e); diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java index e07609193..781b81913 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java @@ -33,7 +33,6 @@ public class MacState implements Serializable { private String vpcId; @JsonProperty("port_id") - private String portId; public MacState() { diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/RestPreconditionsUtil.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/RestPreconditionsUtil.java index 4dacace64..4c44e4267 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/RestPreconditionsUtil.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/RestPreconditionsUtil.java @@ -21,34 +21,12 @@ import org.thymeleaf.util.StringUtils; public class RestPreconditionsUtil { - public static T verifyResourceFound(T resource) throws ResourceNotFoundException { - if (resource == null) throw new ResourceNotFoundException(); - - //TODO: Check resource exists in the repo - - return resource; - } - - public static T verifyResourceNotExists(T resource) throws ResourcePreExistenceException { - if (resource == null) throw new ResourcePreExistenceException(); - - //TODO: Check resource does not exist in the repo - - return resource; - } - public static void verifyParameterNotNullorEmpty(String resourceId) throws ParameterNullOrEmptyException { if (StringUtils.isEmpty(resourceId)) { throw new ParameterNullOrEmptyException("Empty parameter"); } } - public static void verifyParameterEqual(String expectedResourceId, String resourceId) throws ParameterUnexpectedValueException { - if (StringUtils.isEmpty(resourceId) || !resourceId.equalsIgnoreCase(expectedResourceId)) { - throw new ParameterUnexpectedValueException("Expeceted value: " + expectedResourceId + " | actual: " + resourceId); - } - } - public static void verifyParameterNotNullorEmpty(MacState resource) throws ParameterNullOrEmptyException { if (resource == null) { throw new ParameterNullOrEmptyException("null parameter"); diff --git a/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java index c1ce88d24..75786f8db 100644 --- a/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java +++ b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java @@ -15,17 +15,18 @@ */ package com.futurewei.alcor.macmanager.controller; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.futurewei.alcor.macmanager.entity.MacState; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs; -import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.equalTo; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; @@ -33,7 +34,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @RunWith(SpringRunner.class) -@WebMvcTest(MacController.class) +@SpringBootTest @ContextConfiguration(classes = {MacController.class}) public class MacControllerTest { @Autowired @@ -46,4 +47,30 @@ public void test_index() throws Exception { .andExpect(status().isOk()) .andExpect(content().string(containsString("MacManager"))); } -} \ No newline at end of file + + @Test + public void test_createMacState() throws Exception { + MacState macState = new MacState("", "project1", "vpc1", "port1"); + ObjectMapper objectMapper = new ObjectMapper(); + String json = objectMapper.writeValueAsString(macState); + this.mvc.perform(post("/macs") + .contentType(MediaType.APPLICATION_JSON) + .content(json)) + .andExpect(status().isOk()) + .andReturn(); + } + + @Test + public void test_getMacStateByMacAddress() throws Exception { + this.mvc.perform(get("/macs/00-00-00-00-00-00")) + .andDo(print()) + .andExpect(status().isOk()); + } + + @Test + public void test_deleteMacStateByMacAddress() throws Exception { + this.mvc.perform(get("/macs/00-00-00-00-00-00")) + .andDo(print()) + .andExpect(status().isOk()); + } +} From 336e49951d5c8139cf18d02832a79c5348760e37 Mon Sep 17 00:00:00 2001 From: Eunju Kim Date: Wed, 8 Apr 2020 02:12:46 -0700 Subject: [PATCH 04/33] [Microservies] Macmanager document update --- docs/visionary_design/images/mac_structure.png | Bin 0 -> 28740 bytes .../images/redis_mac_mapping.png | Bin 0 -> 74491 bytes docs/visionary_design/macmanager.adoc | Bin 0 -> 14562 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/visionary_design/images/mac_structure.png create mode 100644 docs/visionary_design/images/redis_mac_mapping.png create mode 100644 docs/visionary_design/macmanager.adoc diff --git a/docs/visionary_design/images/mac_structure.png b/docs/visionary_design/images/mac_structure.png new file mode 100644 index 0000000000000000000000000000000000000000..5daef92328fe9f8b00ca709c82572b8b34432080 GIT binary patch literal 28740 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 Date: Wed, 8 Apr 2020 12:49:58 -0700 Subject: [PATCH 05/33] Revert "[Microservies] Macmanager document update" This reverts commit 336e49951d5c8139cf18d02832a79c5348760e37. --- .../visionary_design/images/mac_structure.png | Bin 28740 -> 0 bytes .../images/redis_mac_mapping.png | Bin 74491 -> 0 bytes docs/visionary_design/macmanager.adoc | Bin 14562 -> 0 bytes .../doc/Alcor_MacManager_Doc_v2.docx | Bin 103297 -> 100313 bytes .../doc/~$cor_MacManager_Doc_v2.docx | Bin 162 -> 0 bytes services/mac_manager/doc/~WRL0310.tmp | Bin 100313 -> 0 bytes services/mac_manager/pom.xml | 40 +++++++++++++++--- .../macmanager/controller/MacController.java | 8 ++-- .../alcor/macmanager/entity/MacState.java | 1 + .../utils/RestPreconditionsUtil.java | 22 ++++++++++ .../controller/MacControllerTest.java | 37 +++------------- 11 files changed, 67 insertions(+), 41 deletions(-) delete mode 100644 docs/visionary_design/images/mac_structure.png delete mode 100644 docs/visionary_design/images/redis_mac_mapping.png delete mode 100644 docs/visionary_design/macmanager.adoc delete mode 100644 services/mac_manager/doc/~$cor_MacManager_Doc_v2.docx delete mode 100644 services/mac_manager/doc/~WRL0310.tmp diff --git a/docs/visionary_design/images/mac_structure.png b/docs/visionary_design/images/mac_structure.png deleted file mode 100644 index 5daef92328fe9f8b00ca709c82572b8b34432080..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28740 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

tEMyQrNxb}C8o8o@ByvTaE&Kzr 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 G2>1_K1vqm6 diff --git a/services/mac_manager/pom.xml b/services/mac_manager/pom.xml index 47f4a2a45..dbe523587 100644 --- a/services/mac_manager/pom.xml +++ b/services/mac_manager/pom.xml @@ -50,11 +50,38 @@ lombok 1.18.0 + + com.futurewei.alcor.common + alcor_common_lib + 0.1.0 + system + ${pom.basedir}/lib/alcor_common_lib-0.1.0-SNAPSHOT.jar + + + mysql + mysql-connector-java + runtime + org.apache.commons commons-pool2 2.4.2 + + io.grpc + grpc-netty-shaded + 1.23.0 + + + io.grpc + grpc-protobuf + 1.23.0 + + + io.grpc + grpc-stub + 1.23.0 + com.googlecode.json-simple json-simple @@ -69,6 +96,12 @@ ignite-core 2.8.0 + + io.grpc + protoc-gen-grpc-java + 1.23.0 + pom + org.springframework.boot spring-boot-starter-test @@ -80,12 +113,7 @@ - - com.futurewei.alcor.common - AlcorCommonLib - 0.1.0-SNAPSHOT - compile - + diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java index fe33c99c2..c4af72ba6 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java @@ -45,13 +45,14 @@ public class MacController { @RequestMapping( method = GET, - value = {"/macs/{macaddress}", "/v4/macaddress/{macaddress}"}) + value = {"/macaddress/{macaddress}", "/v4/macaddress/{macaddress}"}) public MacStateJson getMacStateByMacAddress(@PathVariable String macaddress) throws Exception { MacState macState = null; try { RestPreconditionsUtil.verifyParameterNotNullorEmpty(macaddress); + RestPreconditionsUtil.verifyResourceFound(macaddress); macState = this.service.getMacStateByMacAddress(macaddress); } catch (ParameterNullOrEmptyException e) { //TODO: REST error code @@ -67,7 +68,7 @@ public MacStateJson getMacStateByMacAddress(@PathVariable String macaddress) thr @RequestMapping( method = POST, - value = {"/macs", "/v4/macs"}) + value = {"/mac", "/v4/mac"}) @ResponseStatus(HttpStatus.CREATED) public MacStateJson createMacState(@RequestBody MacStateJson resource) throws Exception { MacState macState = null; @@ -89,12 +90,13 @@ public MacStateJson createMacState(@RequestBody MacStateJson resource) throws Ex @RequestMapping( method = DELETE, - value = {"/macs/{macaddress}", "/v4/macs/{macaddress}"}) + value = {"/mac/{macaddress}", "/v4/mac/{macaddress}"}) public ResponseId deleteMacState(@PathVariable String macaddress) throws Exception { MacState macState = null; try { RestPreconditionsUtil.verifyParameterNotNullorEmpty(macaddress); + RestPreconditionsUtil.verifyResourceFound(macaddress); macState = service.releaseMac(macaddress); } catch (ParameterNullOrEmptyException e) { throw new Exception(e); diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java index 781b81913..e07609193 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java @@ -33,6 +33,7 @@ public class MacState implements Serializable { private String vpcId; @JsonProperty("port_id") + private String portId; public MacState() { diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/RestPreconditionsUtil.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/RestPreconditionsUtil.java index 4c44e4267..4dacace64 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/RestPreconditionsUtil.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/RestPreconditionsUtil.java @@ -21,12 +21,34 @@ import org.thymeleaf.util.StringUtils; public class RestPreconditionsUtil { + public static T verifyResourceFound(T resource) throws ResourceNotFoundException { + if (resource == null) throw new ResourceNotFoundException(); + + //TODO: Check resource exists in the repo + + return resource; + } + + public static T verifyResourceNotExists(T resource) throws ResourcePreExistenceException { + if (resource == null) throw new ResourcePreExistenceException(); + + //TODO: Check resource does not exist in the repo + + return resource; + } + public static void verifyParameterNotNullorEmpty(String resourceId) throws ParameterNullOrEmptyException { if (StringUtils.isEmpty(resourceId)) { throw new ParameterNullOrEmptyException("Empty parameter"); } } + public static void verifyParameterEqual(String expectedResourceId, String resourceId) throws ParameterUnexpectedValueException { + if (StringUtils.isEmpty(resourceId) || !resourceId.equalsIgnoreCase(expectedResourceId)) { + throw new ParameterUnexpectedValueException("Expeceted value: " + expectedResourceId + " | actual: " + resourceId); + } + } + public static void verifyParameterNotNullorEmpty(MacState resource) throws ParameterNullOrEmptyException { if (resource == null) { throw new ParameterNullOrEmptyException("null parameter"); diff --git a/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java index 75786f8db..c1ce88d24 100644 --- a/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java +++ b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java @@ -15,18 +15,17 @@ */ package com.futurewei.alcor.macmanager.controller; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.futurewei.alcor.macmanager.entity.MacState; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.http.MediaType; +import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.equalTo; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; @@ -34,7 +33,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @RunWith(SpringRunner.class) -@SpringBootTest +@WebMvcTest(MacController.class) @ContextConfiguration(classes = {MacController.class}) public class MacControllerTest { @Autowired @@ -47,30 +46,4 @@ public void test_index() throws Exception { .andExpect(status().isOk()) .andExpect(content().string(containsString("MacManager"))); } - - @Test - public void test_createMacState() throws Exception { - MacState macState = new MacState("", "project1", "vpc1", "port1"); - ObjectMapper objectMapper = new ObjectMapper(); - String json = objectMapper.writeValueAsString(macState); - this.mvc.perform(post("/macs") - .contentType(MediaType.APPLICATION_JSON) - .content(json)) - .andExpect(status().isOk()) - .andReturn(); - } - - @Test - public void test_getMacStateByMacAddress() throws Exception { - this.mvc.perform(get("/macs/00-00-00-00-00-00")) - .andDo(print()) - .andExpect(status().isOk()); - } - - @Test - public void test_deleteMacStateByMacAddress() throws Exception { - this.mvc.perform(get("/macs/00-00-00-00-00-00")) - .andDo(print()) - .andExpect(status().isOk()); - } -} +} \ No newline at end of file From 55d9c5905edc138cdb9b0220754c8115536922ef Mon Sep 17 00:00:00 2001 From: Eunju Kim Date: Wed, 8 Apr 2020 17:30:55 -0700 Subject: [PATCH 06/33] update macmanager design such as api and data structure --- docs/visionary_design/images/mac_structure.png | Bin 0 -> 30978 bytes .../images/redis_mac_mapping.png | Bin 0 -> 74491 bytes docs/visionary_design/macmanager.adoc | Bin 0 -> 15422 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/visionary_design/images/mac_structure.png create mode 100644 docs/visionary_design/images/redis_mac_mapping.png create mode 100644 docs/visionary_design/macmanager.adoc diff --git a/docs/visionary_design/images/mac_structure.png b/docs/visionary_design/images/mac_structure.png new file mode 100644 index 0000000000000000000000000000000000000000..c46b118f1722910593e10c7713d2564ddf9d3d85 GIT binary patch literal 30978 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 literal 0 HcmV?d00001 diff --git a/docs/visionary_design/images/redis_mac_mapping.png b/docs/visionary_design/images/redis_mac_mapping.png new file mode 100644 index 0000000000000000000000000000000000000000..09fab4f0f383dfacf3c975e3f54a923395399394 GIT binary patch literal 74491 zcmZU)1yGbx+dsVY(n~MhjdY82cY~5khtl1#G)jwv(h`bjM8j_KhPcJwB#U=x)j_S1P1sU+e7uSHv~e^^Y1^(fO~}<1ae=drYL6^V7d1i z!_-iNdf+sO>|w2vo}v6xC8E7fWnI#~PT9V{|NeCn7^=&qrv7!CwVt!zesO&3@3`M` z{a~xjBpGAuK5!!^N66RV#r559JF-L~X60nKfKBgKa1tZl|NI(1eomnP|IefGL?!!t zvHbs@5D%WYWQB*||DRuz+dJUh*8h1l86Fxgfb9DB1n{D(I~!>9f8X`wwhxB+zaMb@ z|Nnri(V*+I2YDke72AzGJv~=eR??v*HHqIgo;-P?&Xf!vdj6l!7(X|(wl1u%7mVwX zyO?kBuCeN1+y1`sE!(Osh&ACRgPhM&%5zmwtu&;*u~9nkhy^?R?k4bbXS%Pi4;ves zTFgz6`+Koc(#_4y{QSJ=v!9Cfa)fkJ;-0HW7A9jkxvm$q4~Iua(&(RbgxyY->#+Xf z*x8%=_^a_*hN3zr4-Xy&yXLD1Hhq14)z$0seaDepdnc!hn@jI>rs}=Dr&9@XuLSKA zpFe-jV#LG8$LB-+MYfm$&&X(ca8Q-lzE@Sd_dj=`y?nVtOH)(TR71mcuHK#n51&Td zFVj^<55sOQDhgwu@sti$HSi2e<8!vqJ)hUpEz;&OEgNvKy-4lynhyRccrSc1!z|GOuWZcGu z@9600((y^{U0f0yOCufr&bOE~xn(KB1=0!sv)Cp3m2L~4y8<%~QW+IQ-4`{xzh4}# zt?UtT@bccBY)_^!tMFR3a=@U2#^|H3A7W7u=%j3=vuf0~6XN0ZN?QJGd0SRy(H?R+ zoFgP4Ai#q0=~2i9?30>f#*YscUoZ*jl4T2|LzffOR;$gLrlzOWUXj;g8X`M~GT0yb zY(?a%1vwW{kK~G!1fp6{iMi!RMn($jjn~)Jp(vytfK}>Zf);966QnmgjTaXw#HI6B zx3)^D#TSF;CU-F+4%AcV9?42s152^9(C^RBBKZ?74$^c*MQULuYe&cO%1Uf>#sqsD7P*QT=nB{xW{)2u&X13e zSu4Y_52h*&*bfw)oVEtjnEm$`pZ9`ov%l~q+b-bdLcpV_v=pi690}L`l|;dpnUxhC z6{X75kA;?(m-nkwjU<^x4G$X|rlI7Scqjy)=*Ba>@J77Jh-1z``y`iBYIrtZa4<83Pq@-FCO>eJGnK`e|{wT2e_fm;_6voCX zZwtY``2E?L`^c{TY_47@ouz%&=l04M-C-nGDHcOrO|47!OG`@{2ea}K!+)yU$->Fu zn#x76xHWN~esEV52B<<{GlCOlx;06m_2yBqvRfU}s#l(7bb5FgFDwWgj=8zH!CJea z^zF&=jA3vlL<9xp{}sXrvQnMbl4KvUVf{Hmj+vR64r6b$ti;mB!MlKkj>Wk?*;WWX z3_kzM$<3{zq@<*x^3jwh9a=ZHCv$(3(fI09PvDa-fZ z^pMmLx-np+&^~xpAF7mGdZDnw34K{#H6I_YilIrauG$VNZ3VU zX=w?6IX`bcBw9y6BQ6_++wA<~J*9GgXQwr&xHvdC)*_`P1=gSV781JS$N9#?nUgt; z$!(Jblr>Ye4w3hpm~d7$Hc{sZbm?@(I^Jx{D_iGwzdujVJ7EUp+De^cV>Q~ZCH?&T z4!$rlGOBh>(9=;xvTD5iPN7(9%Dw`sMAtYdbd34w=~1j<+S&xpyo`)RU_*8iFm!`0 zG^fwEKHK=r3>+^aC?4K>{j$WE7>sT)w|NLhrvPqWaZS3NqhpUz_{~L{q6V&$K4?)V zCqBf!zP?Jr5)wIzdW3L|-*f~F1QjvnQeGY&6&7FooSZl$3vzRDsvyoNq~_-4st!-! zbzW>ok#M-2oq=@`n7tjpbkN_3Z!Y_aS*?1=gGGd?6#nRZ(O+}iSjbX;I_#` z8r+4=sN-e+$_?u3>YshKy*9p*5%=Z3nV(j*v$2sc*4EbE+1Zhll$?C4)w8p-u<(e1 zLDs;)`(U}tbT@;WG*9#ylQh}SkB)?anCMah-oJ;zX&|7LG&D22KHZ%$-7O)liXvod zO6%|Kg)r-uH&>{tq|ng{IpARzJoNtnZXc+upbxk#wzkB^V*XTeloe$`%a#3V;^qWU z33?z?tkdp~>XR07CU0+VTU%Q-MV?e-Q4ymb{(|xbgn`AfBa9Yt(&{?%;r#CcvqYKi z>5h@ldy^VV&^Yt>5vW|)I5_%7Mp@E2XqL`1A82cTuk^&hFKgx>g6%Li1GYnauVz2E z6>ym(b#=rjV$cQjSdTasymF|Ob~mi}#1|hK8XAg=i@P#DL>9TeZU-R1l^w(@-J1-? zB^O2c-;YBIw^NIBy`{-%~v02W30fanv<6S)RvquC_3C*4N1h@LIfb8z}fTu{{eKN zN&pG=&x%p~4^TWI`@awThY!b10OGMt4lVglD`8f)`o9;)CX3T(dw6)jO4O^Ho10Tp zVQNUdG6PUL5Qw7n4xbhP82{&mjQ^k&EiJ8q!K6eo*C%0NVNGzSh?KLm!Qp@L;zj!X z^alC=UQ=wtMM!&5Q4vdb#Su=xVU`I}plVCfXY2d%<``?57eJo<@M~pTsKOJ}NbA+! zgv-mzbnz1PDzN8otFmA7Ut#}ja$kC9Qp589c`_d2hRp_A;`J_yNSTG3J2!(l;{rc6 z$W9-AEf(A582cBCQUN|;16>mXUogvzESbMpqD5{z>Hs;+;pd0i5r5{F_WnL8Y$5f5 zKpBg=A{V7#URY}1(a~I`VR7L_-hvR04OZREtiR$~2Ci*$;0iXSXKPe%rp*+d0+T2s zwRnVGiAI{bI`vSe8p-MNQ8sO!OfFUzR#EH`drYNrYn(fE$Gu>%1`}7TNWI7I(7|ut zn608S6mFk%cP58#l=v)}01OOjeEOh!NunZLZF_3mz{GJxz_FYhL#2H73ua7zSr=`0 zlr8e?Lu8R>CG=ZndYzNo2Y0ytk?`bs!40@DyT&^xnprbe??UVS*NGnw5-rXoAhoEn zk*qv&vJND8O5LlIwC2&M%$L@j-y=$bD?XYi^6<@!i2eTbd{={elVV?bPV&k|_C0Ou zp~*1T<3f~&>@pp-r4y-|vb=dB&JnKf0Jk zhjOU4-S_sGoLIej)tE&qXit+LBI6``5!}PWL z4N#R3-RO>vj%w!bXJ<_n6ne7xtkhS-o$qcg(J=93NuVWUS7@aT#3Ur+!mXcJ?p`aN zo&5adn%->c)HgLn+A*3QaOrb@7fMD(mYl`HtCP-%C)js*cnF>VP{Jz_a3Jl%9!W{D z9Nu$KP*8xY@d`KyXoc04cG%xrW##5Rxq`~YyjsE{q$4FKud1q|6ZepGpYJO+)?R$AF6W{( z{B*U`xL?s|GeYhbggu9p+;$>j)p) z3-)jNaLoeUGmkb;_3B@Ke-<@bo&`U9E%!lMPi>pkt$m#9k5MGg`%GdV%U;cK z>uFoq?PnI=ADd$ZY0ZJh4q$PSNOTqeeVA|7he#UqKRS%G1)rx^r&d=#YYRF}4LDeq zQ=9N7rs2vJ6%a`4?fW`7C~LFS9?E)n#3?99{HfZi!;(0geF%n0eg!avfuZ5LR|^Y< z8PRL0K*0p{q~V&Fm>8BjdJIWDU0q1IgT1}8lanF9JucH#ssf^-yvN>`_B();@>#Yr ztlVCouR+rS#Ys3c>7N7z1>sW(UsS(&UCED(WWB@X-ZWN!)*AhIC}*l9dmjM%c;D7| zek7}D?@YDHSl0tMvP-S3R`wiE9ckNNEX6~YbSnSK(HixJX$J)%?7E2R8p>kRl5$f) zuS9$i!-Gh0=b)JHBv0gGMA?V=slJD4=jL0(%DlZ>oDF5|1j(=FeG<*(B7~G3I|c5D zr0TD*WEJZLvwl@Qo&C)Bpde~9?CLi&aU=r=8GK0P6I8M8V?Yk8Ejt{au4+K-!CC`O z?%f{sWNjK#GgmsR;nR7$xvCKl)h($5oAXEmPc@0V6)B(CY&lvP{}SUrlI;ldFj0)3 zuLOb_ofO{6`($Mp3)*D1=YD>hq=OFcW@jn#p82~Fe6~_b9;KQq>UuYI#H4DAwtpG5v6X$2bIOowPS==V+ zqz$MthF7g(Ki-$=v@#2szfE@SvJrdm0H0R*6KEIg34=N5>H3C-Q_Y@h03b8QPVF@Gr@TQmn{fzCd{TqJgR;UeVozQ1|9>Bq`|Ca<6(;3g3V?iDnicg68Gsray%x zYJ^*58@@>BIVqAEobLz^pC|+Tmnl)bm$DLw7bhnty}gPo={>&zS%ChUolV8-h~~mW z90*ow{W|NxV0)WcYfw2*BQ5MaF)Sm+Ssn3}EsVe zr;X*TOiKuiQout8IeM*B2K0L7qM3|1PnMbSojCUIVRQ+g z%K06BxMkPcd_eWiy>zkiql#<@4~DX2rpZw^`%C{Y_Im|Ba1VgJIMRz2MW6X6y_BDpkevpN+2J zcV9zkjt;aEqHMh0mPc1zH7=+uwx3s+HPPYpAKO=AEZeVbnca@<)V#OQ_u{ZdGUTC_ zt!y><q&D&?S+Gff_-kO$>Fhn1IQ|B;3Rhlp1t^D{gWdfjJ=JUAc;!=jq&Xa5>=t}Xfy%A0>F2!De z!g+-v00ogr-S_e@kZ&q5mohoZ(2V zA;jALehMDPiv#y!90mBrtw_F<1?Wqh(Kfi1o9?vWDxdK?|HPZb5ZdIS5$T8gz07b_ z4Dni7R4BJj=w|yG z&|$nzpF3dVUZ3oCgq%8PyWF*KpV#RVYQX4Zf=hh!8WD%i`+IEw(X0goZedG8T6MPz zUH&X1cDEMvv}|`yS{T;L-YIUig?(GhHZDMA${6xR*LE2?{5W%8aTT}dbSt*MkTJp8 z*;Tx;3lSqqsI;c?=sCR}D&HbaBK##P!<190 zPAzbJe*Sy2u+gb@&q@D>xn{IZbVZ0Ii=%!y-=g!9oR)uQY9MYl8m;1jYRUI!rg$dk zkGA@^ahvi)+=*y1he;Q zd)ElF=l$Jnx_TdIib5CBJUZBj*05WuJ54JqdQNujeA&dZGS<6pBWC-<)xL{uB%hpP zDzveai?SEu?sK%R2I(r($W}Z}jIkH!M9mpUri>m2FwgY5*sHnV&#$JQI7T8@b5K60 zySGXk8%0qoX!-z^jN>;&45hOUqJ59lh)#MGekV2YfQKi3NuCp6vxcNHZ$MDx;LBOw zo1;Y%hN$~VQnQ?%DeJ0b*k~Uk1R`+<@>e0UkTu94Acfs)11SQykQYGTWMn_1eHaso z5uQpUTO1vY*8QrtySw{GwHca`U5B79LuY9Vnm%joB z8$tqwP`WR*<5$Vf0$%l<5Q&C%gW@75mx}(IXgw|(Cr>)`3g~e$mwhM+yuMrCQ4-dP zvvfInJ;lRr0z4_gaE(g6;R>lVNOSeGmdsc;(ixg~PD*nt*Upqnl4nHd$lUL7H zDjgg?3Uci!>3N;;j>YDi{7KfQZ-qrcM)w!CGm#|L1gF}sH+fC{{)}c&pBMP+PQP;F zl9Y21{Dyavsg>Y{&zNoN#EdMOXlM2-_nx6!!QS>9!VpH_QA!7G{H*@1F%$KU_yU82 zZtUCs4+V`P2d%MAq@o;Ay+!LGv;qBx=i!S)t*;yQx>zYzhA!1KRN3l(sZi?C6%PQI z2>UZCbPt8aP8>IdFU1u-^w^rm_$J`PkUZz0aYaZK%V`Z=yZ*08A>e(N&c6KTng8LrI8An8819ZZJo3^2-lXjNURL0d{86^`WZZ`3PMh95LO`^7|L z9)%;o49)l`jTDU_DjiiyB2Uz_BRegVgeZI*3U4DiXo zB*zhphJeeU0~|r~_S4c}o$41ZuitcBXL4}#K3RJBYWn@-Bo#iHS_4jPuG52-2Tqxo^RSvB%)VG+ZKUvJ5=D2xf8R z_}B7Dwx{fEAJ2Ou3OAb`EKXIL5ndDXeHIgqX65PHLQ#J&6T}?;@%IBB%T_Gv$kg-+ z&Swj9N!jiYL}74+%XiqLJs=+}&A_`;f0&FStR>>BJ#IY8dIwqq4x{q<_b1E8Y7srP z@PCBlhPQ=~6e;J1eRFZh%*D8Cv3<=CMRam!a4;r!cFJ}$2|14TE&<1@^9!@=C}Nq< zxZ+XJ$rh-@#1`h}5E#_DO@pf_hU~K5{#z<#lCvz{Q9xiI(FtR3^e4XV16g!ZCuKcD zLmD8hp#q)76qa$!otBm+%WZFO|Frv!&0`(ymw@X4`5L3|d2({CU!2uHz)}3{X9Efs zBN`?B)o;v8y&R<6=vV7hv8S_;!5$b2DkdHrQrk&tE6k5NXv~I4oy2>^rzwUCBsgm6 z5b;=7pu~3SdY&?k!=m}Qus9$*z@zg4LY-GeC6Mw2m-!XMd3gy|fGq{CX1fPU6RV@+xs;nvzzIXz+=+g4<^#KQMl{ zS|)|cF0wx1Lebpdt|vPpE~azAMRz^ye6D`m1Xw9IF|W1_tE$!Gw0;qGgJn#iKP~AcH*Ju`4=n9f$^O<2bSw$vhr{@H#d*z^>p>ulD-iXJmk15 z0MK^oFvz+Qvoys=DGeS|9b~H}r=-NCkWOpp0i{Njy-6isDv%iA@9*!`-2?2Ega|a` z%=^a~FJHz&LJ(?d*dYjDeJ1QOjTxs>Jn1asupn%ntX z(j=!B_2iSQOqhL&WLxwc!1kX#_gP^m(w1!o6c=~TzN8H2f8^(3q)irF@VTqRH4%B} zZ`K|pBq4*M@@0Q;4jhG^M|@Uo*nNEFO`U`*!xF!rgkEbD^u+7%hV0W6j#qvQInK)S zrvca%a|zEXY;}G_Iq|vJ(}m!zix>biq(Au#@)V!ZNLqX}t`?#8`zd*;%wp$bINj_q zg8He54i=l|j@P&tc0na0MDZa(J76)`CX0i^(4}PlOUjF!%cJeLxW?|YMC1i@eWS4j zxdOqF#`G5Q@QO$e%mo4X*3Muhw<&$ZuOH8TKJvNPx;mwn3VSxD#vN(Vd{zs{ih<+s zLaVJzzun-0-Z;&;K{Nd3!$R=0xj+ty494XBr(mPL)9i+*Ee~e5>%HJd59>W7sVOOm z<~KeA&1q-0&eqTG47j&xUO*(6QgHKk`qlU#p9J+lA)Tu?SHzWEN-_|?ClU=SHS)bb zaQ2e;CGfSi!+5OPY1YSq2@TZ1k~rX&s4%s3Al3)dptdA;X5;8+!g~7p-CxOa@`RnE z@PHNU;cGg`l>A9tE&oxlsNg>n5U~!dFU~8WfCFn5zrXX8ZV50<^iFv?o)MMjR57bg zRACgm`@s1u`A46CYXL|dL3je2?ojaI^SC7P2lADIOI(MpKn|0IF#EunO#BwxLz6s! zNi@{P^Ut$qYB`B6LH$U`BnOXH`+W{v-$7ZywSZ2&NXFtiLM93WRZ*{8lmWsyMN&FC zf-ObKEt2p^qGfCVhLL55q>AyRsZPKx2A(cae*}0CEgII3j?jlOP#Cwiw!+wk&+{s} zVammYTO+~eY+AVz!Ai9T8s;Izet#eSrFcpDAnamtLB{R+jjc2zji1ZmuXDOdhujCI z^;e@MO`9L)b(SgS!(E;M==b5|=fbAxNHo76y?6rEYQSZefPCt}z!+mf)Qywh=v~QX zC*{HWficTCt0sSJK_M%IlW^!*kkLFe?{1nB^)aUoaYo%{LiZhPMc~y*x zR{fu`LUH~+3iSUyv2d~8@sQcpjxT~#$T2U4QU*IqycwfTiSR11(I)dvYh!`PzHK}Jqa!tYK>dYLff8ag8*5vlLl-ea#U zBs4EVan`_2`H>UFyUjY=0h>1M(Swrsv^1h4adB}594x%QdL|~>9~8AuSi3tf=%oT+ zB)Mz@a7$}VEiGlm(3axg6; zH8sMAE+uZelXQ8x>n7byeQ2a5g4%O@NuDg0pXu=&4?>Uc!5@6Hvm?O@CpWkBEiGcE zY z7e{$)mU2yy>)-8Yl2>)J!Ec1O(SDqlN~Fh$Ha|}2b7x3YJ=y|D>+p|v`9PRJ|w^p}0PT2M+)Ku7qY@49&3%(Vu zO_mS}!K36*mFq`ii2M*5-=5qImdsE+haBYL8uB+tPhb{2NHF0=DPNwoqx+sk5}Lpt z76k$a&k=}^bLkg^&;Y1F8G+l58^$q=cyRXW^_@TENiVB4V5Hq^U!PXf#NI~n zb%Y$N0jW4Z-eI>!#8{mX^S=92+`RCRs~Y9?i?eH(vL|*{o>l%Ei&y!%9Y>lGcYop0 z)pT(Wic99gJKA>GNiacl<&EcB|Ii9o$4wCMeGBEH?{0&+!rz85BG9q0cDJ?$TMh39 zI7LK0h2P(;Pa`@~xQG!*_V~X~VI8u^^e=ytEzDLHX9yoP=4}yT(i_NrDCIv3t*$3l z4wI|nXO@Z0pe4=tOUL9xpm|Bk;Bm6~@Ddkh;m_zX|KecW>}JLi+V9EAdCU!s2L3%C z3!bu!99aT?ywQ)36lC46y6!!VbD+%3Ul@2ff3XXWNa!Anr|c7R96Z-VlReNsuJ=m9 z!MT^#@wkxdO*~GcD+=#8%Zq1BUQ)zE7`horbz3LbsXLRs=Eq4=7mqUEKbShVY)xqo zDTr@?Ya2iLF(Zux?I1lh-$3``T!r50@bX4b#;>m;9q_Qn6JpkaRd$j=Cr;b@@bHfy z&6Zr}-hiVHSL$Q+RGZ_Ccbs*4xIQ1p`-5lSPQkyirD%*+bJ z2*YjQpECaD!nRGm4ax}b=HTHXh}RB3ml%@J?c_eiOxoxEtv$A+IQ;qzus+wc#}1Im z0bvMz%swsKy>hC+U#~QoZ0~jyp9;Y!eE9ds74}|uXY~G1IFt5M*ewc)P zBcHR@qM2dV4b>P709Pc$BO=z3948%?3h%zqGSq{vv9~5x>$m@@wt*>ov3>H{=s(0X zaC;Qs`S)vRf7lD)WXhX47Uos|L1EpJLnkG)YW`<(Dpq>i=XSM{OJbA zPag%2qHxXy%A`Dq|Id3fLf1g$1UZ^)#juFkr)MC}6e#tE#WKNA02-YwS3TG4y|m(e zf$}@PLw=S6{{7>RgXa|tCMG7OfTE>2IWM#ZdV`#iLL7lbTaZZ0Cs>v{U{LX< z02MILm6DN?BH2Jejs7hicEh1YhRf>+Xw}@@1>cd<0`L*Kk=W}7c8b8}rhDke6EXx6 zV?&Nz_Q0BqZBv$Ev`c#NLU|R0t!iDjdO#!D9L_PgdPm;g-hMC%b|Vc)WL&ONgoq{< z5@!N&I|x#!77FUq#DJQo=V5mYuDx{8xo->-38$odEfa1@e6R6uBQLf+ z(oJ-i3f(@^FC{ zb@z6MLox1)UrZFcVWpd3$6YGlEv4-180R2SvQy}_Jo-yiQhtxV2I$`6N&vlik;|y+ zRZdP?Me+f4c}2y=)v2qPn3$H60nte<>yp)`UPiflA%{8AT|oR z*^27UOpVTcyraGSCvbB|9sxT)TWaPkiDS~dRJU*gFr;mVr6%tWDGX|$k^hwp-xRr9kAQ~oVvWUbp7}5^qUHR zQ6Fw$hLp23>M0KU8bDY`k%uiLD~|?IA>OG)}aIhcLyucEJu6|Pv`2v(xvk2 zPWSeryV2QV*f1w3TE_!&4OU${M-YRbORbCp&@atmycZ!#V9#wWd=Y!mGoivcf$ay9 zI@F<^o-t^IDyYg4b{C)XU%$q}r(#La1zV>)BJX0U4tNM^6E!3tg%LUq@8(D`((Q&O zdQFX#yZBEnuvON*$ssj0@GoM6H11RaYJ6(n=5tw>eE zbsx;(1O@~w7s?Zs6c@vk?jxCjLc{WD9Q9}8)4BAqO=cLEow)paL{XVAZDUxVpDBSW9q$w-E zS7BGXzs~C^!%~eDyFCcW!Va|W+V@AVL_=TmFB<}wro=~Ich}?Y3GU*&kZ~f5-V+eE z;Ns#sIKQyyKN_8$CQAUkv~-M#=Sf4wFv*^L5kDInrgYfeY~9I5f`Dy54OmGKcniC| z;vr9B`RW8RmOy2dkdSbS@r(SIQ~XTHi}OMk9JP^==cSWT+_%SLGQdiQx+@lRs_X(o z3M4wIZm`bMSYC4K=;#Dc<&34-hTbUbGjf!-E5boI5o&w0GKCFobeYCMmjKKiv=5sQ z;B-ZbNSZ$_QGPC~Hwf`xEZ3n&2T3duVd2_SP{0ehqi8{J8skytQb{b3Dq2IYU&1hD zQ7+R^qBi>>>Li#Bu-Bd*9&_5jv4$!pS9?NCyTGCvT^?SW9%Vn6CVT&gw` zQv_lH0R)40Eg<;zN`w;^gax*^zu!z6Mq;BaMrEjDd$GjQJ1r|YnLkl|>O%T3Z&cZg zh5J|k_{`TXjh`At@fj+!)L+Ib{&al)pzaQwj1qLGPM%(m`@8N34k(<0C2<^Vt7Tco z>|;>8`jfZewj6XLLyvq`C)(JJ4~H(DxPjJRUC2J~Gj2X`q?k|(f=9#B+k|*1ie0RT z!{QH2`LFcXm#G?D@3Hq`#!n~4t{KAmnDA~;!%j#-2(;6B!#}la!vW2Bi5bPH5NqDz zg%Jq~W%}_f2pt{ZE3T7=itlsTbPXhZ)g=u(2gg1X1Y6(R5b+BLME+t>^72+9`4_5a z8VBj+%+KDN1e_S`NcteJKJ+`Vfo!3j=c)Qgc^E{tbBS5A0u=@Nsf%y5oW33F?{jfc zQn@fv6;=ku6P$16)+nhQ3=9xT2sv=@#Y9EjmfCNZyQ1rgS#L}8N@A)xcoX6=UPf`F z;;F43l?&FSTO&bP3f-Bi>KJ6x$w%_g)S?>ii8mn8W8T2tV%#-Qg?}7nbQb?$St&|3r)7~S0%6z zLCIo_;2qD>D3FzRaPDR(MLl5EJE6fMb0Q8!+eOC3(TjUT7(yA<9fY{J)Iox}oyE@G zoiDU18H$Cb0I!#+x2gv+KOyPBH<{qe#i+h_Kn54~esNiBzl&OOaeGDRHe*SK!ehF< zTFc=_pl>)W`3VS>daK8}*zC`#-pN!d<73n?kQ@K<3G25m!)A^w2w$DY$7@dVC+)Y& zWa5wv*js)2krgE^gdb%HGkUGb_oPeb;}DO~6mt*#y;J^FI{Qm{y^wFC3ay%ntUR8_ z&mVtro~b3W?cbq(_A{*WA##M6eBk)l{ZUAp_0UdALG)Vs@i;41lQq~tLzI^kA08>r zvS;3Qv8t{=F?Nro$adZuc-+U7Ot?6NB2ZkQAu(0M9E8@JZ69|FY_!_~M6K^EK*30LvbT@X2Z7ZC$9S9DMBat= zQ0l;1ycljKUYv%yfWy_yOwuW}56#S>KziheU#&n7bYdL;{#}=t2p2=|!H@T0VPT~$ z7`WuBjR~RDXL`R~;sHj=510KQjIf?2=-!&CDags015tq?0f?10GX()e6DxET<)Z@c z14LGenu;}0?w95Fu3rh*ViM3mrF))6{n@gOg?7d<%Mla36GjvgJL4Q49aUL%NFTU? z8I+UGD2MOD*wLzxC~Jc~`J5)gZ?Jyg8P!=WvlI6nMu*vGLa^lI?H( zVsVMXo9=ZUoPKpq6hs8q&&J*FtxDYQeTe$^rDgKI^1M|}rb*<_v>GuZKG$2L6-gtKNH*=KWQ8l7+<~k*=n5u!IIlr#Lr>AuuYf8;{+mK^^;GD8IIyqR~HhBm0D&~KlF@Blr&h;B`c~Pw!}G*>Vxzj zW6-bebnY-Acm&!w>o>7w8TwhG74{n13EYasP#<6bYQKHswh{M4i4pJO2^M`=q0|b- z30Zf9NvdTXtxOn=%vX>-2GRa5s{m*-YiYDp?G&>PQ>VqV#n#9977fd2g`H*@97JJ- zD=jPgwl+4p>c8dDKrJ%VMy(hDalkw5HxO6#_dFjzek>^|(My%`h_42{&$T(q@weN?wZ)4?{ z^_bQxE!!kp<{6r}wT!&CiYp6oMIth>#XGez!JCbjGuRqA;cq>JhZCQmOW`gfY9w;Qpex3In5!je4>}SyKnjdYcxX`jG2E;! zu)jQDU+^~2gZ8j;^a*KlBn&Zl*Q-UOJ)M+giYXwHKQ>20*$fdMlt#l83#m z+Zw#Hg&G*2 z2{n3P@!1d*n_k^=ZQAW}Gf><_+~&oJAs!KUQc_Y^z$}hn*c5eIX__4w!Jmg%#jAsE z_q-R#Ju$Jd#nd1fsj}PPSoTl28xN1XKCe?LkO_Z#2z_?CHEe`jx*cWYO*Ivp~T^JbJda zHCgH`bbwS3Ho}O>75m$%9s}q=0_W{EkQ+W3*2}yiu5iF(SE5Pe8)nyt3 z`mQdSsfw8yb;q6H8#4LWe?b^RNxz*b&UEqcyO01}mSWN>ri2N3qpeLaa8%0&?c`%3 zBETEfy!s(?Y3STNI6C@IWwQA9h5$N)Gw(vR2oMHBpD@A{f-7GK? zmC*(;*o^fa$O|rapnXTL2wmyMP}IYw>Rtx3i&zXAFV3vW61Cvb zaW9a+be)jV+H*4UN3y&gLIJ^RtB6jkUk1xJg?6}e>&SdIk@!T--<(gU8IimIZi zClUf>9>CVWkb3X*;Ey>9lkd(CTWCoGprCM>yq}+U`D1Tqb6laeQsB*!95$tbj|GHz z@#n1tU8Ng;e!-OZ9LEIdj{m(r_0FWj(fyg*=Xj7$bLF=_@Mx^9_1$gUdHuPN%yA65 zo-gW6$0jKs;*AHs5ciK~-?)kv6KWc_o>QgduL>EpbO}^4q`w`>9XP_t{xBb3P55Rm zB!*uwvEob0B2z0!d7k7fX4AVI>A-U&V%!(fk8suxE&8mO@N$BwR|f5QWfW91CF10e zWOOYG8RV@mhBt^QizG;kzUY0HN!4VMc)-UjNkrCtp8c4R=!WD;W+nRHMDuV?0}s8y zlw7q9bT@t;`!mHw!(9Ht32&S%?Ox=>Zh#YLVe2%QM6sw0OhQl&rna{O##azo$;9PB zMw0c7jcG8Fn1dFp`j#E=!w3TvCW0qw6ISv#p@+E77?V3-xt;I3Zle0dNl19;%t^yeW;u_X6080kVj*LcR}xganl+b{Ps{qB$i*@EC-p!!NDY^ zy+cif#tbvv76&r$I0?oCmfCa(Xaqn1V}@iUk*#i=WF=ih$Kz?6&<9m_~-W}9(@R&oLM z3x+X{S4H2q8Qa}x$3_m^ZU&QQ#x+a4T5xBKspBSX=$J(gF()vl1SYK5XR_LpEL#J>nI=$Me@FGuZ%?c>5EWKy-G%B^pv!7( z->i;m6M-A~Fj?!X!ORvOP;iL4Z$W%`?|1YJsGSV~hji`yxp}|ZOQ@jC9FiD;hLRP< zPj1=?CaKM;e-?ldqeek&=0w)d1C1sHVTsT4AbYaz^fGZ*F?AqR`CZRw?W_%pgk2|& zujy_}i$qydKddJ<(c;Vb*J2J$t=FGV`F~r=@jRX0d3Sx#vH(220#ixx`%`mn_UAzd z!?^}84EE5YfdLsG+9evD;ybjY*>bX7EP zi6Tz6XXxFc=eH9`VanG8F3(A+KkBQ$9etIg#Xh=lvq$0mYZYJ0xVW(JdA&La^UPKD zt+8u%{lGUn|FBe#6$wB!KT_}KR~9^Y2;xkHg(I#8*y9bO&`_ z2TUev$>n2eLq(Fl+s0sk_z{-Q?(+$i)zp=e48g>Q{@Z$hm}-u&*Tg5yJh1%L%zALF z8y;0SxX22dW1}2Xq;KA4^`_uaFf?;q&e3Q(r+;MDA*V2P_OsvUm048m-9-u2#oG5n zTor8#W3cODqoSf+Vc&bdtM*FjSUvxib!FsiHH1sWY4l;l}QajHd?ysXz}Os z3H`|};Gq4B6ud1;sQ&uQsGm~Pd0c-;D4vWvtP9Py0k~7d=rLeV2)i#5+coYVJU;Y| zO9qO3mC^M_xt@N>TPz?xPW>1fn`Wr_UYZSd~(}K>G5`d z@6nWqBy$}QVSRU|9)+LE>Bnx#5gz6wCxgKX$tss#kKT$;= z^j?Z>U*(sy^S{W^Az}=F`nURBQ?fr_eVa8bV3tVG+UWc3ZH3ae8N@EPE5+}}#2oB3 zgIy**zgp%K$2PxRCegq{DROdi1!*29_ySqt-xv|o#*Z;(JX03#Z(^BiL@@d{9DymQ z`mGAHZ{!ld5ZB=isyKUUufewz-o-S5dGqlf)-SW2-fdNWD|AAkiLeUL7Z#&PX1W!` z?2iZc#ySFm$3`iJ#}i9Ya{D)W6DwO5T?%!rXLYg;oARb75DfJW@XUssB&?C4D`V@D zdvvOEDvP>e?QiZ&2V$}nGg!!YeD_(j;g4){)kW=q4MN`>U?Vz0_uV#@$%ym5W?ivJ zc7p(t)54D-F&=6BfJjB*9r`W>Fwyl*&$;Gjy^(9FMhE#`T&@&}GU>zJnXuVC`YbSM z42EaGp!t%cVP#oKiTCyd>pw3k158H`yQ+RIDNu*=kE5R7^F8Y%8!u-no|VA9VS4`< zOpGl%^qL(b?6|+Oy(MLqsTY`0`Pxte!^B%l_Ds6k#rOk-Ft7Gyzf0w%JK#Zw(62wB zIA|V>sD=mPJ>US$pxRni^`m;4nVKUTV$#q&JgMW~bDfI7#iR zLQqtp>eV}8XbGBZ2ADBZGdcCve1qL1r1|OaAV%QSh4eKaj< zLp=1p%U`%&S;gCl>18${PrQv|cy^y8;Qj(FtjWcz#O&c=hczMNOETaJ|7&hO?N(i; zkPiIgadcCCfUaknsz9WnUcT&e|2$i%3;5(t=2W2rs~vSt+5|&7FsujaVpux##Cb0E z`x}(6V60&=q=F@6wiyzWTAR#5GI@8ofnZFM`eC11Mu_VP{d4xafJz^A(uV`=NU*Kh zyNwAJ2ehq7_DB6MqB#D0VVNf(o3e8=)Zg;{>#p@IEd0~v(+3H4EiD(pBzeaj>NQRk zjwW1SzP0w^1fUuJ{b_cI|3}qZM^(9YZQpcvBPlEzWDydAgmeoiAe{mVk_yrw(vl(q z64HWzl!A1pw1mmSK#9&(F1i=HP}t6$-0jxqJK8>?&2`-fehot$zsocwr=gNa55xt5 znx!hPu^Lc9^h>5y?E=_%L$*pGeI2*cccC;;`n!_O0d)ffJF}4T={H6(FDa3=E5p$_+l?;DF3D3Je&qDPy&FWr}X5;%+fTqcKtxtw&5{LK3 z$}c^%Aq$C#82~-0Gz@}lKSZ5o=JJyr?)e=DjE+7a-*o+3!?*h<*n@|g4 zkdSo#UGFV=GAcnqN9PS++ww-pL3I-0y)HLv{^ME$GqLuqYKV=ffTOOdD--7sKmG*g zLmeoP$58zOj-k|~mVNJ{qI4bdY+{m#I43eMS1|PtD-A&gMZeh4#@3c&?~y;KT34qc zTF}0NTBfqZe;v+yRPk60Wnpn~2z3Lq&NaDnsc{^j6F$DaY;k7!@F`BY|2>^vaV{{Z zqP{=+>rE|5iGJyIL4dPLKto2;Zi}z5BD8H36XZN^u@j$qId`lrnUave%;{sbQX*l# zI-ijAsD&*CWZxr1{K^5+yqN>nUGc^=veIoo^k4Pb$ z=`)}F`l=90P-QxFHWw-sZ&7$tgdI(@L++WsWll*@5?oAjTKsxZfKku}XK_fw1y+E4 zLqE?|$F&UB&0zufhY2rs+m)WP=`;A`U%zgLd3I+E6LivpphQ5vrQz7^=OFm6cFg9$ zy@lY;23QOsA)#0Wq#qXY>DvP2N5_C!0}bE$-@lOB&&>ziL}fISbV+gXUEBT-ke!L4 z5x93l@Y*K6tm?0vhEs1?@AVuM6YUCw%K7w(X}wpoKA&;5b4L^{J&{tmEU$TUFfKV{ zt-p*z;lYxzd47JfCsy_amq8{{`Q}OZ{T1+Tz=X)s+B#SVj5$h{%F46b5fX`a}tX z_+!)ij+g2wG@+pU#6O5Ya~v%;I+|@Plw@H+6MB7`%X70OhaXILfe_CFZAmjl7&lZE zv`&|)cmgwhXXk5&I)YT-(sE`f)_tK=2a}yZY&_YmPayiRM3z=z^!txm(gvS(TxlMs zxH{QQBrJzr9z5M%%PlDL2@eEB$EHGn>slPRAcE`<5 zUFVkZr{e6bF_TaaCb2(%>C!kGYEb)jpcq|dz#cI1C85f|iizxj(#-F7i(o`rnfcBW zc|OyLkJ9Eri?$_9cYP0{+vyPT{4b$B48(VQ3z(f*QpP2yu_h}0dKn#pijBV!4%s@T zr5pZ2m!O}P8~WKR%9MaFz?>7ad9(H~W1{S++FORc@b92@{iD5iFp!^%F47t;LFd@I z`?A)eXm#ZP@^3Pw%{lh|=R2X`x|F29t2g@?YVXda1f;WME!M+;gt9BoL~H1+Aa;r% zI6^Ta3jGDXLcvBv4PX?Y|BprD5z!z~0^w=K6Q{{Rv!CBu`9+eA0f&&X{wjSLS4(RE z!id@N@Oi~i&^GHkg2x(OCrHI6Ai_8GOlRxGq_0a4=Wdb!2N zPD@J*(^Uk)-y0$hG-#_F5mqQF-#@@O8|46uTZ>@HMuyyA)zbVM>i}sl<6HV~W3s?$ z7z895nw}p&5P`>~D66mzgJh2fOaeBhLH$*}G%JWu zg#eUG-L>x&DpXzsDIqm)Arg5pC z?>U3`V>FJcxuM=89Db7;fp5XzUtT=~bM)`ZhxVfdWjas)5Z?-Hk$iG+%FuN`I|S{r z@#3XP?ZnnDabcb`4Zk$ZEpN6oM2mbv@{&9U!HMu0Y+{vGM%?dSy?O=n>izsC`#5SzdKeV8$?44bK@e&lo#ePD zm!3sDqk7XBs<8W(M8gKv@$V+@GUKF%w@K>%5ezaa7 zBO{ANBWwSNmP8QMdJ`jk73y6Wb|wq<5s}&8WW!CVUt%naQVf%rEtsGq7$#8dWXvIG zCUb4MSQz{}R!nDy65b^VO4a@s7`1~id=JmUYzaXii=PMvg~;HQAE`=Cn2kYXBolQn zEAsN#Q_wBrJ=9QGU|jd50vI}(wj0{;wH=BTX0z&SoR2J>HK9yIeo3J=6SN!4eHvq6 zDn)-1!k6{@9E3kjlj>i}WiCHbs?J*sejn1yW_|5%O48GWVfS*cyxFOg%O<bE9VkD^kJ##MOASs9BK!({4L~y z(5pc&i057on!(bn$MNS#4`+^@@c~(yM{J{$y+rSS4 zye7VsAIND1wlU#dJv~{aE#~Cax+zE!ETv(N-~iqV+W|!s@xTh8ke*!-DrXKKSH%_y55R9RZ~poP3Zpy(F!JKObxsk!KjAC^fjOOA(wh z`9CN!tq<|aza_d^-xlOI%|4WyfUQ+r!4<)m|n5Wu)Q4-FtuIl{`9Yf&`Tl>4g8jWJD&`ew(x;Zm__!pg5$yyL4yW zYo6FmHkPcc4d%*%;S1RM zj~-2qjZrl&gKrO0uIZ(@z;~BL#m{SCnbAV-qOfPa#;1nSbJ~aJ*al5Z=3G%#=J}dw zbD>ZkYh$$VOK~?leTUKz&dYgBP;|A%@L3=~_jGwGc9oN1Kzx3`%w`HicY|0Wm= z2b0p%M?GAI>U^Hp*T;u~f?|$xZbkVMoKbNOBq`5E^4|0@q}io4c*ZbrR(gm%g`~+~MQ`dtWZD6%>lY z=s1IIs39nM@eLS{&CO+IcLG?yfL~F}6(Z{f%ZnU>!GW*vDAC+hC@xTyKR%w@0t;Pi z(77tQ^)(!kkkx4Cfe zV%O5+SWNj_zP_;?Ia~4VMe(mHIm`K@Pqi`ft6x^;?0K+`kk{EL6YryD zbPEzJKj!X#1@KA);L8pS5rP70J_t4lEW)9uldAC6fBz{bS5aiS$UZ^6uQ5AFqmW+j zq655)DsTP`oSq;j0OZ)aa5y@$)mt32Yw{wNC{n=b<#`SR)!QA(T zPBd?;@>^wPn?J^9YACMojGLN?2i`EvvMNP4buvl3AV@Tq6$d|YJd^axV~u=%`vjgN zgXxyLdnY~)3S7s;$+h_2`>V2>-vjbP$suG)C*trP?wqlt0z8yJodVRE=%vscPyjL1 zOvR7@z4L_X4m?zxXhTWfQ2d4VprfO!yv32%fmWj2I0WS`XHbu668&ftnFz3kRyxOkMKZeNl++1uz67QG#gL(0oXa2{ai{NjiXzNJ1m-im1B; zEAurb;O4>6QK!IQrM+%)t)T1&!EsV+oL3)8xuB8AmSt*no}YVsDvS$h z%ByDkM0W5z5Y_S4l|wSn_{l%^p@*-YdZgp-DGaznBzNz|4j+XFFK^9S)(Ekh-ZS}8 zpEbkvn2gHPzbqSbRPyP|2K5$7s+!?&&Vi^VAK`&>_O+eP;rT&$)0NSmuiPF?^^aCY$AdH)iPv|1NmLn80qj=o6Ai-kR^yIu$NN5?i9ep%Rx?@FeWoj*dw zmLb_new=0dP+lu9Cy@XY0$OGYr4>~8kHh;@`j95he_I?Y3x-W^ONo=?1hq|LYo^!w zIL);D`B?S|m_B8_xItMO3*H*beP&+sr}dE8BK14&d)GjW?%6gKy7N@S4~JEvv}-uA z_acr%xuN!2tfu`p`iXq10->pWtk9t)Qm6Ug0mWrJHYeiuCET-@$sJpMkeSMH!VPxn zXo)i=C;xc!JX(!~0#mC3T>DvBSyX(6FlRuKLSZB_y+*2lr7gkw)Sp4h=e?AEMp6<~ zY(?Z8n#=^Jf!|(Tv8LKV2A_VWX#Yp}HI*#7qH->EZH1%El3ibCc=)n`1k3+0x7;-g zyjV?ld#AKs$%FK~%SjlG$NOh(B?NBt?$@}yr`_UF0QgI6`1H=l@=Y*08rt@FTbngB zwD3k2&rM`9$y9y)idEY+)h}q<4`y5jPj`9;1ZFV+4l|6iQXnx~GnH3VR10dy&I@ff z;V(Dn=%BOB2zH73$hd1wPI})HZ2EA3feimpU!TLm$jHcDi<2TqR^Z0IfP;5(2Rr0E(Z5`}Sdjy@=OwAYtg+x2B@dlDoB zX3|XO(}jPPK0STL?lu_Z9=L|z>_t;NFUPcF<$jnUzH^}85P0GP`oqwQ-Ln_qoB^Gy zS%vcMyL(6HOD9GKNuz}(EA6#fQI(Y3$Ybr>NR`T%er| z2v=3c0#pn0DUvzY8gtdmpFpYw)(&!48RHR{tZ_yJ%$rbLyVu}|1m&SwfCOywYe*p> zR^pdvx?MGdQ8%B+$QWvBX7#Qwz0+YqxfM&Q{z{(y@e)NC*oCsPSfVZZ&@xd&N8p4X zyd!9?M1nHZ6Mz<6XuT=6ymtb;V=&XltJ2`+(6v-RQN9x zYB#rW0>OtC|1YTkja*UZ&hvwQA@xH*>tIg4HS>&5P%?0K$NSfnJ@F{MjYiwj^Pb{| z)mMurV?;ArroX*0*qui>^;Ah~K7X-Tmm#vW%D4*dl;B*+~p!uDeo9<#uFxJxt(@lKd-1R^okPD($B<5CjxXY!LOdU{q1 zYngXzmW+(F=#X6+EK6Z=val@d{^@s6h?cyEr0|HFlw06N=TC}p)9fZk4DDhLxEnJss_ZE*ckbts&&)wWWQ+aCy*B}agm&#)-xTJ(a7Tcm*9Y?6~ z=lbSsRKz$qR-m?{!RSLX!9xVnc1{dyp`aQFxYMxFi@dj?D66Vcz=Beq-Y`?e)kM)y zj7&y)cuSx)@Vn!05q0t@XIrh0Uh!#@vwd zIqpg1VT<$UqyG)Dn6o=ldT0;LTLRd&BN-dZrCl}^gC}a$oK8ilGCo}O&$u0gFaYw7 z%=d> zM`T#5bt#>UM9UhP{mxc)GQ0Prm!A~J3W7ny`YE&zRg>Sp_vs`jj#|>dCZaDu1`GHP zabxQ@Lh%CGtFyU1%Zgg4fZgRPjz@r^-vuS6o-S+%ux&it)(t<|JaZALnOj&6FkpP+jWP z(uKbP0LlO#0zy1@+V#n8T6Sf!Z-r|G!CU*2tR!85LpSyJNZbRWwS*R9q}fio(#3ZSG*o&mMMXu%Y*juht3|Ns{YN2$^fz~(coc(o z%%c8#Nyp|1Eu<;C%^i=OKdCX|_Sa8CZH~JBVs7UZ4r@q)%}S!fVsoTcp@W00{N_Gl zOU3#@xQ(S{P|Z7enumA(%{DfoNvpL?5Z_*Y6u&zWe|C@kjjmqc%>`-Gdi7 z;JMw$ju3fx-tW}SjsdUXTtNcoj3Oa<$Sa0NGHe0*_O$Buld zQ2w48U5{lRiUr)2@nPX|TnNjzs~?6#9zDiYo68qq*IA?G40ECScFACRxiejS9vqj> z=k=$^%{-!*W8kj*vDwye!Qg*+sqc|<=4dSOj`Y5!k7|9KaodQ!J{;>ZxQ7T5=7Ph0 ze5(O;>{jt^2R_FFBs&*Bmx()T5TfVDt99Qk`ne5C(jOPKSel0243VM$sw}3j10$-P zf4CkX7Q2YcKMMIzSFcgrIRXDkO7`8Ifp6ei9>R|xt1EN!w>p{}-V{Qc;Gad_8ZNsX zk{apjaS(nlU@1vt0|&WKUvX6>!9O$U9mpMfZ$|m>JZ;1=QnVm6QHS^LE1b@qU2sfq zO8I$gg+ISvi2^P%bEMqjFxWLLGnLnOA75Rkj+2KrK0`#5UR2_4%mVJ7U^)KcOYs@f zPlr%4`#-oN%J!|gT2M0JG~?Qp0%r;LH*Tbb`Hyd4%Tj1(_dQ!{DJ34ETPN=cGz)DE zx3+C99r3%BlAtyWj_d|d`k{h!lJ-R4$!F*)-J!YHq4rTMq6xF5Roq*VUeb@$;z5{u zbtU*3#(^8P)=t6D*=?CR)>H&K7B zE|Wwr{+aeV{+^wpIP#bez)?N>W73`A+C^)`$3plLEXdYfTduFLk(-~tSEx;fU7yY8eX0{3VVqHIyLtZE*W zO*zmgvq-5>pctU=-&+u@YtczNKN;Ip`6^{!YEm72i8foXPow$baleyq0;?QNV>nGq z!Bk;WFzOaj4AGZ48;Y6}g(|yG!p}P-mk{`~VQmDB+lXUv%^P5s_zTi@Z?A3c+e~Ib z^O~r}`K*|vcTKb27;Q=}uB&QvA0FVP6DyGEM$9wzn|}YDDJ!SHWw(GasKw}2@F2;%uS*MP zDRQH%NYqQZA9wxN3yOv8=HqV{zcs{`-~AJT48v5!1%w<_cBKx+6i>!{?EetxE!yhR zecRGs%LMzz`nX65?~d(~U8LGA05zJ*$<9yGb<#(8?f$xiuALxCb@J;O4*M;HB91DJ z_=|he)6MidoN+odKVvfF;5ANa;>U@k_Wkn=SV%N()^j;j#7yE}fnWkItq$H^l2l0= zoW*JEm@;x(FU5!%{hgV}qh^W8v4o?JH)lP`dsA^26M+X^Qlx>RCB_bTD^!SW`B`&o z41wUC>nL?kF*qp`^7?4R$7EtP{%DT^H4^5338u=$;GEj5v4z*U(mmh?xGnzXOg@yW zaFd>v-S*i|*+kvBz$U8lzzx!^tUUWHVXi#ucX4KSgiZe?SYcx{K4HblGPxx0Bd)b< zmSTPhkQY~{s?Itb&n8;PO3n2YZ{B`1y-0RyXNd?=SN4EfOQIzm|n?+Wygl|=~T{2`DXc(I}@6C3N z&Q(VNh=_nA^21M(<@=KJPVV{bPQsZ`dX>>9O>o zNUQ738UOsxl4;*fIx5lM4!G~eNyF_kE-aspeFl0adAF+W!}UsVZ<%_{Y`)6>Rp=hJ zY+YY=W?b~*AO1Mw_Y*~@8JEFHo`tqay5hEV*DshgIYG~&Xm0zBO(_H;zvO7D<^zlE ztMwl&Pt|=Yze@X&WphjmMjJb8OKVAThFY%`+B;ZeyLizCl@4iHmgJuIy~i^_@L`nj z{mF{N`qAtX(Qj>i|0vzy_S2brQUexE3-S1p=;VWYMIPy_bUeAo(D_1`FM8RUN!nY^ zJ&sdAC?&0xN(TjvW|wsU(h4cJoy09i4d&h^zOvQCz3o4wnn+Y=vGa+!*vhu#w%tV6 zq=X=wmNB=k`%?~@p@rAezceHQ186L?tKh@g-MwveZ7VGwr7Mn^Pei@(5^zgxU7lFd z2@z^!CQN~WhyV&W^f`APlC7QRZtb6^{rAC(STuEx7tNZlZj&aHxNXU=ys-L&FYvUG6Vd8fUqvl|BzfmID3KO8`d>nAChb8nmyzirM^V z!1i>VK%IxgcO5@>Z~;6mzrQ|Zx{>;hnIz-H*5;!$42uW&-FI=EhAV3bk7e#tq`uvv z>v5b=-sz}M3J+=#>EQ-YS*CQ-GpT2}qwEohZ**j^_nU{u9D#nBR(q)2O?uZf(8jCs zxEsgQU7Ul!bN}J`w<^c+o9~jS+xulHP(nY3^b$v_*bi4u7Kgr5uJfF>{MTW!F7nUM z=3h{K!_}yvhKbwumwCQK!;E^Lq$Cwo-2kE#lkdbg?v#V?md}v8=2Sj#VC>nidgw=$ zj_&WHE{XugsOcsvNC>xmOezKB*V}%lE3}Bfw$$K(nG#PL-Wm^C0 zdnu$&Z6NN6UN> zI?Z~I7R@sAO4SFGO?Ss>BX+He#<%XTWkyhGb0Z^|e)KmuTHwxdeW!?5dEIV{$a_0y zOZ+c|&+w7Fc2f$5pKQ{zdSD6>jWYY9uNpU;$miDo-Huya<}<$4k|vC2N^)y#k|!%R z3mAIiFxjdw+h|^-HmY>Ml*aQXSourW(QZgz?+a52cTcW;jL&jg2LqM-q*#yVSJ#RT z{@&h>nfv$+W?@FeeCwiip7Xz2)kM>$e75l>Mj;}Cq;(}zYHJ+3Kyd-sXLmR9~l>nDDvO;HFz$Piq?~;{iA$3FPm!B{6_NDjP?snzaJ^z zFmAQ&$P??deCZ*M)RMbvVA@!A#``^6=*{<&xvHR`djO&zcbdtXDyeVyC~(*-8a1L= zGu_n8I_5MvRPpU=)vJ7c3%t$(l(1VN@BEicKHu zuzCf$NV%%KbAbHDS;o(zEphi7BeJR%w`L^HM4wExIhS|G=_YM|GdYX)vj~qd^_98% z`vud`7;O#|m1Z>h=k$YS49fiCJ`1h`Grsyx6AgBghV301hYV8WKYqZnm%}olaaYcv ze;IcBFwLal>AP+CvG>vy;uVrW_GDpU0ejN|IOeRZNX;uI0UV1Xuc)Z%iY&APQpNjI zRCFxZDI?CqqXu%*$cPXtYc`Cxfn66*AH^LF^*3UB@7a_$?iF>?`4J{u>UDHSW~N{n zLgl>xN*~cPS@0VQrAr;Heky_hnAR@Qw^}l`OTz_op|fk z%rfP^>xVV`oARI!&-xaYrycg+MeqMM!bnAQs!wu6CX=tyKFL@JeII zrdK4bN)1Bwa$Qi}hP#hdidOSzE5$zr_9TD-nP3izBI&bscn!9;n==1NyAm-|4ghT8 z@S-nQ0tN;YN5*eiypRU>3A&m}EVT4Xeq;47+JuF8Z3fwZe;v|&b4<;xcFGxFWPgAM z-$t-mi@>8r(A*Oxxo|00+tE|wOlu_bDYFUk;vU;rV-Zof?k|a@7nmN zf(j(>7GrHkyBjafofUG#H}GBKZP^eSVO#97jNgA{*aKYf4taaOBC&v1j@5DGhhb-C zRh9f4vouYzIHe^eA^DhyHV$fYq&BW1W5p|qs3>7TaiG!uA$3b!64kbEF@KN@ssBZ~s8l@yiq)J+%3jMg4<)~f=5LsayG~R7;WolG zDtl^>&Gp;vQ*^5Ivvc6C%kI-VsT2eYv%fveiIo0#Tgf`u_$@7V)|URH&$hEDY$fH$ zd+uoA+rdUD%9iV+>Hj_S zl$b)04H`aD{(vBZ^?p4?z(=5_q*S?{-e`Uh0|+#}O3u`2S@2MO{uq4)8@z5bXW}Bi z9m-M^S7hZ5)K~c8C)*~Ze*wP`VhNpe>Znh;=m%`BVZJ?meH*{OZGj~D4OuukJUR*v zmc(mZl0AT^wq_fX&P#87^W(MXGpp=r{<)R-h6e^uQq{+6bn4I%eMuv~o(+AbuLIkz zm7Vo2|CXf%?1%xgkz5Et*_SV#Jq0>Na6W+bEB1Pj1LHCSBcuPFW*yQ?rfDNijd9>- z4&!~Q*-J8MJYr#sp*_5E5VQLybt0s%@}FNE)^q*m7YA!BfSLaDi-Yccxcf)#|Nq5z z>eJaQHq379@v6LxdigF#^1t@*0|}{O!(a0J1qF67@s}9a$6N=A;>-U|4A3p)BbYD} zHRp2@cY?b3XMjeDu2Wzya5sJi)ld$9|-Mi-i+3NL1;I$(0=yk>DRiiF1gb6 z+9#jYTbh_V*~1yzuPw)lpa0o`0lmu@jq{SAxSWp99#e@p|XU{dHeQrc$p*_wa7~4 z3%7$&^}ktd2{@(&rU&9Sy|&W?H@hJiK|UBoicdK)i>*RR+UpVQKAd)#<@M(QV*# zI#}R_M5k(+)IIwsVP4RVFQFH)@g9K}A>~Izd&fsum5^5I*VvG#_I(_d8mpbWm={;+ z^;H~NX@8jdBQF}YlERTeY`l~H`yXHp!;6gbCQfVe(||s}7pLFuq!+rCVJmq3t?fZX zfoU8lMSK+3>m#r6Zhd`-)Rxv(n6NT2Flc1u9sqXW<=!&9rp66EkARc|PH;es-}wvc z{o)WRxQ)lhzQRbPjFI4NX$UTWcn`Zx;*YO-J3DQ`2oLOx*-HC_$jC@oWa;GO1RJ#g zMF^Jk9?!RMrvf_NVtmd)Geas3$bQ2Y=jX7gG4hv)!$bfPH3dcN{xBds`avO6Q&m-_ zunGzSPLC3cNopN9UA~j9=~A+_PFW6)KBb}Z&&YOy_EIz z48mdfazl~Pl%2Ab(nL-c&&L8vp>O}Bf>KB^OL59S^^vK1%-!F!dD=bRt&RS*|0JqD&c&4zwrp9LXYD)~8mp?TGW-5S7mP7!k}U=;EkGcL zu&`c{-oO3!-<-<&Xpzg7Iyw@CPt;Qc_ohQ*VBt!YwjK~8t2_u{Guh=bL#U~t|NVy} z^mqGX(+uw|qHVKq8fHol(frgaHaz&0i#|=**9(gSu8tRpZ$H;diJUcuTN-XCkKo1B&@Ba+C zK5RHb2o;0v=aur@KUlXiQ(_{)E39&->7I!R!w&#Q2Ih3(Ob4`z0Z(B#S8e@g(b4rL zR3a%EchKEH@nsUUz7D!8-yywLE$2a*gJ42oZtgWY7ot!*UjVg~ll`qg@8QELc!@#i z%)#NKinMWXi1KY?B(+5^MfVJv!%R#}?2KkmO9;KToLk%2aB*|9F!WagX&*8PN)gt- z^&x~1+8r-{`TE5MxH6gNVP6;t_hZ5lyd1z>p`xOSJ#H!o+YH7tRUIz82iGYL*pQ*R zaD{-q6@6TOH&G+wa~g%gX6$K+@da1uMhpCGu=zCr3BG&#`AaXao`36WpxKyD`&^HK zf*?UVQE$sMch5mb3P-M9HwnB*PQSi70o~#n?2EH)6dttTroTydL&NOrlLRnyOX^xi ztk(BKzu>kLtx7`C%=Y2C^HZ2J^?qX{rjhj7i8$D{-hKjFyJ*_CwmzTN2TEIS>Hjvn z(T&cQ_;#}KjAdsU`wE<&8QQlfQ&3F$?4wcvax|Yh0!yjJ@vOL(r~(5MC@cH0!bEq? zbN5`M58nirmn*HMOZ4dsOGH9~smw{RGhlAcevLiv?s@YaJ%oj=DEPbMP9DVU7z20q z?FpK)Z0|3Cb48#_BlWib?yo>Lie?thw&5|23bms*zYiCkggHWCh?nnQrz!}3OK|p+ zb(H$UhYDV;{JcEHy7DMMieY4EgaRHcSO((QtFsN)ODi`(eV zNt8Y)jIy~`?Yq?(_@E~OG!2DGg&fOw1}z{rGc(|h%7YS!7z+vtB8gyYEe?30KHusR zh7}c7VI{^j_cZCu_rLUlFZ^R<#pK2{%cZ}!w-)Yo_=@CU(^^pYgUJ|{BX&@A5=3K| zGZn&?-l14wK*?5{FSYY^yESO*IX}nNtnFcpl7sWYw0g zTLW0eUs1d2Cl~Kv0Qq$EKE#-vp5Z>fnCTts`S;?VbQ!RxfyC_Rj_-LiuM4f2M4`RI zuZF7%v%bcf-`PR%4$kFiuarvJ{WKI0N~CP>jna;!j{B_6mMa1iT$W(c z)*mp34qK!&=OOu`)p$u`yQA>NA)qU{*F)*eZG$@FV3(b97Vjh(f`-Ib)Xu?g(J0Uu zFlyeWnmNEil3--pH=DPs`%FG_tFOVd=e}CdPokJRI*!ZA&0PowU>mL6_Gi$2!S`hk zLT_>@=L;8?KqpTC=ia}6A8bj0%*4Z<%9KSH1WowA; z6l~mdc1HS*ttD^{8`i$y+fkXocXa#*a^+1QNM}L7)OW1~FSu~-5deosIvBxj9NWt& z!}8gs{gHgoN&y@dhK4DKTe)!HeS3%7<2H6iq&5B>Gk5mGx5&ah3E9o`KO zoT8#4E2`6jb&tgkLNV>n2eO86PGdiaV?{+*FqTqug>cMVBP?Bj9Uy_nCJ(~qF}E#7 zAmS6q4iOs}HVDGw;N#0-;mEwozL$bTzK3;kOPMVwLDJ3?aT+KTGU#YvbJ-Zq#SdtL zWxcu^tE*x1?zkF@nGnaA0ByRRP5xd4fyKsbqd)lG5!cW;FCMfB3Hk!~mD^3xKM8~{ zJ;2`10<#r>4Vwd9;2W{=93C$K_+*48BKr4%wMY1TYlcC>h~4c<7?kxejh-U{b-R(g zw1m*r-+`fbiX}pel$hUiJs60!Hqi zKO0m$^v@C~j3AvgRrUB3|H!^2;7r={+_LtNLBQDgUuFbg8Z_UF-4-_zrhtWppbO$! zFu$txp917`^ybH%?i#mceg-jX3~mgrmk8vsZTD=0cY4E1L)#Es(*Z3E#r)jfZZTL7iv2D4*KgFMLYS1_ImQ=3{-df{tx0fGCAT|ptYhC z^vSo#u+WS2_xCGB(|^*=#zF%Ci6i)plXby^6L32OpAx>&l%0HBHcy}8zh|~U(sCxy zOPb%NhgG?n)+7AdFg**_`cQ9Lt2qt8d-^*rd8Pd_iH8gdF){3qUjT~UXAf7k**iJ8 zbdauCYpmJQNgr_-T?6d0+L+lYho5(t1!*I#z_Du`pk|&Mrb@^tg4g@ZQ`K`Mz5eX) z8%Al%QBT*$Ql-IYJyDFdVU&`ES!cS}oeGLf<+JQ4WCsZ?l6T~BANf+OggGJ@byvoH zjD8Q|KptD4FrOLJ`+<-tLu%pd8W2+WH!V7&UdnQ*nvF*!)4|vk;=|kQ8mR#AcS715 zLS+ft7!4=A!I1(E+;%X(8-25{wLe3R31A*nfi(bQO!eJ-w{t>wt*#p!vzt+1CV?~K z6@fAZzHjv&Jp8khlQeNRtQk=r9{l#Q%;3~!;yZq}tSl^*RaM~O4`;IZ%p3P+w8F9- z&y|%!FL2uw(gJ`wRpfGW+iPjL$IAq(zhUQ)`}wiU`4iRvo$UqK>uVry85dFBmNqdt z`H=$ShKxI$fCYoSz4+_PP^`Bypy}OLfjC~-L&H@OuCNBkDZIF5ui-5y(c z1WetPKJbd%9e`EI8Ag;4$#p+DxC|Jkl|0|Je(-A0%;AbXzkU1m27}%epxMG#bYYn9M$AzQLxyKa1E%%OLc# zJ7*p%&-oWhRETO6`~z6+Dx*r9g^ZacIG;%aP_T(FheHd%G2A*bQUP|teLksGEikt_ z-~TuOHK-z%1&=D4K7rEK7HVS*dZX0OH<%-*mKcmIV2vXqWf4q{qbMwjw0Rsk{?P;enjnH z$h?{SK|$k#B!f{i`S#11=FhNR$*|5RBSk5fGOXVx02y5K0JepI&nQx>e+TzZ<}}SS z#;Fx2H5wdApT|bEnhdbf(N*L%>3!YtDL`DX!x>7J`WE}hf3xS+sLxQ>@oSg*AoBVk zvdNa9w6o|}SaVMWHZDn>aW!Urw}X!uikyPQTi#21K86kNLe@l43*ML&NQODeA>Mpl z;BCN66+9P@DRhC#0G2(pCu_foMeVTOmkOEVsCLg+abHjFN=Z7vg1ED%;iq-;^VOWo zj@;+`d~A6EGM@QBuWEj7&W8nr8uRi@}5EAdLBtx_R$Q{RzLJGGl2v3`eA+L1QeEdE-E_pL) z3uR)1&;!5y+#-ZQlG=jhO;U+_&-$Ba&;-`h=-xk@!$EW23q~SuqtwFYVRdXQ5jY~T zbpY@=pW4ob5EKxA5zQL}3sq7trp4e&XjfG1x}H4E3wQLzDAvErKT;8-fE+%1L8izO zKo-h`_wMAY0|d@ar?4=-L$t3DaSwtuk7-D*ds+Ko;;u?SlI{^%DvCno7#6ZRVik<+ zTAlCOnkZxS&EDbHR$z<5kd1qj?L>%)$%E}w&FOiuf3MIZ!|yaix7wb~`7y(TpR;uy z-Z1i${kRM@`u50ly=}(FRwe&KVrk!G`lSGY8w1YJYJsIt@xd5)KvA3 zN2JGoF-^z7iv^7b1g780Hg$UR{5vhi*Gv&KaB>h84%M6+!07uu_gTzD%ZJHie)KiGr;5tuN4$+T?>q8*iD2^ljX02cc>9VMf&_Z9gV;Q zVU9)hb0(E?TPBbcHb;vlMDhj#E-Pli`J`q@eA5>3Uo3!)hcT}8?kC7(_ zdwZ>RgQ8d#pPdaBP!!3T3FyU_tgP(NGUZ+z>VL{2!{R7DZmXe#foqv38xcEK_R@a4 z#H*0i*X{YKeJPEe?O3kT%MiRKKUVns7R`H{83t`8-+_i+G@z??*843T>h|dJC2l{o z#-?so0)_7{wruV=m3^9As1F^$DUY1L-#vLL_3I*#85G2vWy;oyejzhd&XZ{z^bRtr z#&YOzvOQKx?tXV)f7!V}sEi-&-%~kRUwLY82kV99o(>MifiWRBque6@oiPmFfIP!u z`0M*uO+OfX-nEAncsgsDg_F5wo~>MfJ{ituL7{ENW|8VK}TFnkP(4L-R;rAdD<%}X2lkWBMCDg#a*W2yA zShf%U86lv*)G;!u1p~XY_VD@xLs&fYb8rx1r2Klh)(qj4h0)POld6@r1B`2GH1cqZ zw({4Ol-xQeOsOaF72$ho!o18v+qI8tX&FcBfa!I?N&DJdySZ_(+6Xm2_6^!C2m z>O4kg6X;qJ$Q7{acZ=Y0j5j>=u5g&+% zhya*H;_8KS`^mE52#j6iK4&6L&6dx(~d=DMIqai1M5 z7%>~GKva|cnsYB671Q^gI80qU{XSN6$7RS7LUi84e+a!~J4IRk_3qlwhEfo~Xu$Zc zBFsUJ9>ghPAw$yS9?;QsKeQuv=)}G?iaEwx#s?-kFY`GB-A3f8HR^)Mv^j?3ICWKx z9laZ5g^HC;;yJ*g9 z6S+88b68U96c$^5ZA4dKwY>FpCA@T~d+{!4Dj{Brik2v=6)!f)~Hnk=X2 z^R&P;LdyUS{0L2fWc$Mzab~GUyLrx*+XhWIqjFIQmVm<51U5u&AHU55L2#RfS#Tnm zm-dO%(1?zEdl>1Lk{A^&m&$SO{t`S)e4@RiM%ex8TDJmR63s)wYZv%6`4@Jx!@@@1 z@FXMn$J>{yi)uFnEQ1L+&*@OF_h4LXnN2*DeHe(F{ej(7`096Q_C@+3WsCU+)0_X5 zH)bP|CGh11%)zj2RKugI%L$lCnk4H_Hr#T5c=}e|=I53gjhUgakm9um_c|2M`v3Z` zueweoRriAtAOg8^K500K_)W|w6k#JOa2UhhmrXwv#BpQ58fTHNZDntb+DWLeEd`Rm zzTT+WJ^4_<`ga;d`SV(+zZW}Ls5lv)f;JY2;dQ9J9%w_>wDYCb+BHZ&itgh@} zAIKj8*L;W<(RR~5;1x|Zpf5wj-MrD-9r4&!pdN)ymlFsJ9N>w_m+<4}#6cQ9bYK zNU%-{U#nYAvint7>wI6T&v5q=7ClMrI=oP>oqKcdi} zx)G|n5K)Mo?#y~~7}avrKVNKcT@H}sl|o3pFn{ziH&F7NWdt(nb%4Siq^8V*hoyiUWEE^P z7NFNfEefvyn1#7_yl;bewBhHV!zg0WC$3|bM47*0l^5Huku77sH$U`&*FrIHUo8kGkZr3TBmB%!$4lp; zFEV02d`Fu_w?)sVq{=9Pm8prpwZuQM2_~!2`OH*F3;+QxOlq8qouFC(hKcjm32%NM z?Fsf4fC+4ilw`K_iW$svp_;}Ec^7Uxl%r7iyw8!`xNK;()hnL$TW@~aq(@=2bUc3m zAtG<0G}9`-&h~XGAQcRKX!Mm{WqL@??cUndoJm5H32jA)*3nL4@g@%d4%B zB=R#Yr>O|_KK1Ur<4^IWxFnR+NjO6I3kk00S;HUDbx`O_WVxElXuChXBzOw1Av}!% zc7p$pu(OQHdfnPR-O?S>B?u1+NJ)2tq~t>g0!m1ObayBrNTZ-AsdR^cG=d`19nvbz zne6lKG0ywxtPktM8hg0bhW|b9d0+FIziR|V&8Y0d-3ry0xAw#qyIrqGgq6BCztcvlBkhtEbUj6Em!-u&hY_>?_imHDO z;|9fGxCQ^!?-8BBUT?}C(G+$xGypPbaeXrdOy!$Ce%?~o)JFi=)5^Ari|*mbi=)r! zJJt$AJ^LblA3s*ryVR%Mm1YPP4cnqc%@R-5b}hPPd=U0_6h|b04YrCf{$%z(Ioz2MKbdA!fVf3=7A$l3`O#d#P2DghWxKsq*_eL?E3e-0_Y1gr&%38BK1 z*?>H-p+XRG3(~ZBvVV9^gz~|Q_`+StXWt*|$9$egmqK>76UKad1S>0di{w_#;j-un zeh2BD>SqGXP!+879s@=W9mBH4eGp3C@T`ciQ_(s@hbB3>^}_VE=k5Z_{?G67Uk1fj zc}VDI%oP`S=nUgE%|Oxw`d-7;x=$H+y}kuouT2Pv!D@lXWA-%9T>YP3+rK`232N_L z=$v%=k*uTagTb**NFCzw*}!6EA1jp%bIOiyu7{R($7Ozg!6;lUm!#CjU{#-#`j;pN zTH!snfv^Q%>v8-NKrB!=OdjDxapp)yWMyUO@|t1P1P9BOe)D&LnGl1%5DS^YKO_n( zi*bSYlQa7*%`8zOvRh_&Cf%H}RnoU3wag*Wkxxb&r^6nWoKp?|?v)JBi3vf{`nGJ6 z&d2RY(uf-G4vE|-!MvWgK`)NkrpnXqLW$Q|8PQ@VI1qIP;tX(dLhT%ii~RSF73x?- z?n322$GU+Zt%e&%3b0Y9!-UWdQ&kPQai>vLn;^L=ZzR>1uWN5~F5Iy{JZxo%2Gc6g zlfXo-K6J|m`KMGSG{T+)e+NEETAJbh&RuVg@Xx}#B4K+Flc1D%SKf6)$ake0tVeuv zKij7*#{~5~G+Z*2Ed4!kKY`@t{T!Im8hF*jUwGzY=I&!|N2&BbBZ|ruwl;^LI5Cf{ z7Vm$!OVJX&egAoke9)0=pB$yCP68TOG0F`#bZ<Mv^gpimQ+ z@i&7~br>NO&=_)v;Xt{u@6* z9A{Z`R=!4ifIBd#9+aa$6Ep}2M+`7nxb}2^-XiY4gmeEO=IQ+!`g`s6WtT;;=8S9u z&N0CIX1tCE0ALGqMDNH7Z3?%J>V$h4V}T=xI6EuVeUKwyk3_ZB!FChNuFC@5ceYwf zq^51XT46;}J=Rfb7l9CK{RDhS=PcmRRhP+s6Y+>j|BohcwkFE-zYgBx5awZ0 z;$@xChy>FHH&#<8#}&_#g`;j0>;yA_%L}`Ni8Rd}(ks>-2Q$bE_|kO0$Z~cE9Ut^H z|G$%^Fe9Rt+c#{f0`pUEko#U2+N&)3=Mf?& zhXAtIFZg^PPAt~X%y!yY4$u0>Ev;DB)b5G`)F-;o4+o1rb&FvD4Ji@0lo4tn7xPMD zqDHA)()6UT*+PL@9%AE|U1=s44{0b)xxWKH3!Zji5fLl{Ylq|G<0@id_SaLX1FdT# z24I)ik`K5c%k4CD35<|zL0xsNAj!q|LKEpEYyyc}%Kr`y ztSXJb5yEr#E(`%)K5eM0%lNv&amfzpimSaGj}_$Q^E4kvC~Igalmk0S8(l>v0yMK^ z1goN3ajp_|URWC!SR_@A)cr8oMSQ{7HDT&qBsR-XWXy<@3wG~Fa-E;bslO0yn8C_~`3A)I!ec--Gex|h?`LId@q8_2$3KUzyH_3T_G8;>qjs`bp`7$^Kc_;czeWwis*+ZGa-NeXNo}-Z1TE z)tZKgg0Mh;7TtCl`gX66CvP`EMTIFKr=}~UutA;?%SIAFRNarZu9wpR^vIrkumLhQ zm=)L-fDlP^Q=+b@sB3n%1=MSF2+tO@C%%McUra;<(I&s&(5x_kGx1o#Wv5*!&xmiV${%Y^4-_G) zL8UA;DW5fZ9;*4e5lv{GBdgYah2{nIR~};h48_+XUODwsxRTW!YA ztX+r1kJE{J^!$RGRKovhy1x3LNu7VjEVW4QTs%VB2_S%g^oGR}v7xpSD5qb)JE3B` zjKx?y6z$x9Ut`FCuveb;{Cy4X2VUe7S?3@o((=gn@1$^s4cyA1!J{=?o|G=_;u&VJ z$P)U6FGxX|tR}y%G0+rFyTI4b$jv|N6I9&-49R5!2C5&fZ|1k+DAjS?m&-H>19!Ru z>-zu_gL@Z$TfzsHa8#OP9|Jk>TIfT1?*P>#2~qU+Z7l>&tArIC9NNy+6MiAuRqIeo zTyWkg0Y5{{7pxZzy9xz+8^E zFC$|vWG!G~Va4>TZNP##ka}<+3@RxEL z-L95TvSf77&L@@F9#!h9@;;gQ%OL8tmCr5}`AX995-t(&A`PA*n7B%#NJ7Y-4b0Y!5+H6P$0__w2`}bXvmezcKrK5y zJpEaN>jMJ>>@^KLI`Dy5+JY1qc6Yw%OB_vT7a)pXMzi)_bA6nWnh4Vzs${Z04>o>Wnt*##EXM|Ke?;BaaIx1b>GSiM<}Are8ak?(+5HSGrvSl8m=_%dD}UnL+)w>6LYB%%FeYC*tI z3khNy=EPo9&6$cickuTxW(B$GtqJjAo7vtz%9xnERqp`iro0kM**EK@sqQ-52t3La z<*pb}9c^_(6XOr+9YM%{0;-6(>LX)%-vNQ4Dm$;PYPkrKP<3xK^eB`V`DhE4%fOTF z2vw2Nz(67ftaoyn1LDyIx9V3Ud{_x!C3>bO)G+wz*S6CZkRV)LU17a-WMTpWEU#cB z4xtd!mDWlkenpLSb=e}WEF2uG02bOi1*OfUd2bxZk|n{s|G*|$mX`;%CvGLBFTkw< zi!f0%guVS9$qxnK`+?WS*a{>KE6d}d@lt;6?~jqhWcdI#$AZUu7$ve`n}h@sm`kFe zrXO5d_PHeMpfq4?rE@7YS^p5G77K1_0YSek+j~iuG4mKLG_FMv%PvVymL2hQAkv^6)Y6JA%-qLv?Ks`SbIZapqQ5EYWwY*f>v1y?nvu?Ht}y z{QR7rG&zHP3x_7P3RYOGuX-SYlxeP4FujdjMScfUq>V*fNa&?J%sPma>VRl-yba^o zTBj*DfdAT%VRT3bu(KC~5Vm)64hI&6b-nl;$OOH`sP-Ul0h>p@t*y-xcK^9nmX`&6 z4wm6oVyy)63+7*EF@c!GHNdmWaNC-^t&(!=i#`7+!D#RF=rtJt@?b;Ixb`VSbU`Xn zw;P1w39_Y)f+T=s@OOajzW-hi_bb>9Ou3`T%+A>!wnS zTUMe7MMSluBE0uKuFcOJxnZc!_cVc?Ma{no22(3Bc7+gmaBEMsJQv56JJL@9h8U0; z(P-yq=!6_>tgS=kA>Mr1P+$K!?0pn~@_aq0E1^~hMrk9%VG8~HSvbiS#CC8xfPqJe zrAZv85KyBoCl(E=cOZAi&+iNjrl-fpNnKE$-^6~Ri6OIBkErPI+{4WbXzgEhvfC7011zY$@r_^~TuA6XeLj^He z4!eONjjCH$U!QERtc-(_AkhlzFHvO_G1Xwa*m36B?P;Wj4cT^AfB_&u!P-|pJCnhE=ntc^IM)sG!n0#^wZ;PSe z!O@p?>0=|{GH&t~P+==b?)dt33$}yVhE0P=i*&5PIn~h6fCI6!Z@`GOOy2Rqq*iq< z5*0p{JalLgQ|exoV&y zyqt}JK~?88b%!(p;?e5-Puwtq7?wZc$iLSsU0h#Zhi~fX(@W@?pspoH>RrP%r9L!( z(STHO2=X?-LU0DUF#M`&tE&2YdxO%OAy#nm0=!?uI2iC*LS|Q*WGPCS3?8o6*5nh& zL5KKSXt+uYKG44V$(q*KDBhR!@+J77Zl6YIKSqv2qG*sfuw}5>U`(AL;$idAxSC@G z_0wRk6r-SAZg+5-SRTvv43PdRTCeeK!zyt=Bx(ynW#cW3io%H_z}kbj$@N({Y|x?u z3Mi@0eM7g1nvM?IF%mJK)1$`_w`6-W*|uvved`Np4+vU&=)9)}l-5$+Rowkf3;#<| zF5aFA;h-IUA=lw@ux7Wa7srVS50OvcsU>XzD4~xX`Y5D+Y#54c|EedGBuxsINKQ_c z&36Hx5Ku0Hh}<4@fZ3w$#-iId_#tg%37VOj29fthpL5|{J%`LgFnmL}9R>yl6Z&~A z{KAgnN#LS^i=Ta=u1-Xns4i^qQ8|3$kTiVv(Eth`>_emy?2SWH8xtMPtV6?0H=<-= z5eQVdu{DB_(9m>VeRRjsTuDD3 z;G&vYeFSHLpG(KrHsf;;vzB=GGQsj0-{u_8cC zDKEAL2RTAcF-DlmVjOi}e89G7+)1oK^VRYn2>gPG=qWLu_$g6 zTwB%lKVrI1%Q#v85RdQ5fQrhMkRjux&dJFMP}OL_Ko89Ucxd<2M~6ui&(;V;9@0P- zE*y_Q&1Z1|Ed&GvVByx>u{-61nZYE)j2F*En(17Ru`;sBu-FE;yjKQR-ke_qV4mox zs`f)>=KeG}cxZb{#&E}JNk{}94P?L|MFDo`bZPYY;H-cjaUBX>%GCs9U~mu|J9B^S zvB=bLuc<-u_)Dq2e0kg*0?GCf{4Zk`R#jVx=%&^Y0xwuNQZ?yb%ZO=ZMvq0fXY!4n zM2~J*RF;$Vq;H=1UV!GE@G|r5(ea34j55^=&E(AIK8O=e0`6#Bd3}~epM)c)O5(`(tFE=XZ4Fzy^qrMbKHZa_L#(9h%Cw+g9YwQHs>$yGf2fidw zaEaqJ`sHpmq;gSby~xebjjJly&9~8BK3s8kr4|e2OMc#EAy6Jw68=&*L`WGVJ)5s}lf>yH*+CtviWD^lyQS&`jQemlHgiSmGu*S;vT3YffKB3aRCWH zoL$=3;D&im+|OF)+#|ZZ{!(~-yNJSW-YHr9_4LR-YIYvU`bRNd%72kmjqBivi!j7A zXyrV@d&{?khJ^fAz<4S4+&%kC7qkfKoEkBC)dMv^B{536nGVlh0HR?3#!}Bdo5hpx z{1h(FNg$1RoD%K8OBYClGNWims9B5NCpS^|LC2Hw-Yz(L7QK$OxjkDwd@zwU`n&5z z$34#-u7KTW3h__WG)COvl>FO@37H7*^L;)uabbhog2!B639p^mow2FWcF*X`fc?mUw2&{?L3i1IX5C(Gzw%3KLQ9Xr58I zWRR2#b(WFEQFUuPe-%0`ZQ0+v;5BM;C~MJS!&)nMPRu`~E&;_9$R}(#m%D}bi2Ww= zr!zkG>rn#ek?Zj^QXB0L99@W{u{W4L!=Af!>p82pjpbuN{QP)+aGhHyCgp-?{)!2! zX$X#jDMm3;zlJCOlFO3@hihYGspSQJZPz|EEw9iM^&z7I+(;| z*~uqMPsncYJ>T}g#0T^{}B*VfE!a;+|sIwhsJRFhmk+?kAUx?u)gkd_)5$!=TJG%l z9{cq!nV6r#u&zIl2)vjXh!%HU`U}VVl1uMuA$})iqkn=2bDzcTN@|&hj|tm`in7Y7}3OBvpL6 z<8?fzXKFe?AGQJpEl6|1J*n|Bz{OOWP_C@3_F_x>yte{Nz^?^ud!lrfAd)wX%M61u z^~D-vvT3dP#nwObsMDk*9UvMyV&{Us>b3I|y>&0M+a;9|ER4IGbYx%7&bs_yOV2c% z$>iI!P?hl-53GX6Wj`xBc4m~Y?Z;sG8el^;(~6C122O1(bP}lP8&o+(Z$^E#b_!vg z+ufZgG*uC6Td#Jfc{I>|=)8Cx<=$^+MqDb}UD~i6AFOEezv-{|-(mmBZE-Ov^_T`g zSYp8l()(%Vdp6}@Lq#keY<_Q7zjUS}`sVP3tNtBy&g;JS zxJ@`)rzz8dUak(BSlQX)pwCDK{t3tu{*5@s)NLG~+|~1ChLDAL9W;$9U3t#P<*r-w zNa7VL@-z9OW)C$td`*?XbKBkcOFSf#&Z;;Aw9N{4EKZXsg;fIYZd>5pczJ^AqMWVBO)Tk%9Cx6 zEWi!0#Q(KpQbtY*Y~mDrw_{St2K#jMx7?vpQMTNE$Q{mEr1Z=!`R3QJk<0_6l>Fu` zErky`W2v0qYUYaD{&YeU|gN3pAV>zn_&7sC1 zARs?I-|2s@=^$YG(~<5w1XQt*j(>@}E6{Hj%x(TSRV;2| z6x7mwzw>oo?N;sf1`OF!4Z~iBDuHwOAH77k2EUBVn0-iIMs_E{qTw&lJ{e8X7T#-5 zY{Yt99xo*Vtn78;LF?ZkG`@E$&P%?(3Adl3qEetL2*^|tmuLKle*NQvp-yEZg$eJ+ z@YhT+q#^EJUaG&(wuknc&gRVOXJfxN^0w~UE#JLs_h{(Fncr%*=$dJJj1;eoH!d@m zn8^zsx<5x`Gt{ytky>US=ki9Wu8!Nd78n>uixc#^oGL}yzJ|zVtA{U8<&e>b0TsdyR@_r(QHnq0(NZ?Qo>RIB$ zPmkZ8cg)^MqoxSG+2C>^Gt=-VvqPHam@=Pso3`gwJmvad0H7@3Vm6h?-c?F?T{Nyi z6xtno*T4~aN9z;BWr%L#~kzC*r6_UiAJ^XpzcY6KD3GC_dd1qLoJs`DAFFkO?e z>z~;%FuaCGd$m^5VcRMAKw6;Dg{ClD$dU3)dkWr8Un5%XI!airxPsUAk9#AwRj^Y5pIrfksnK=R<#&k4gr|v(rKQWo zsRy3{0a)M3r%)aginYm(nkcC7jL&%b)-CS^w2vuZiF**yB>^?h9c=jFKSie7M zxZVuRP1y5X&^on}s})(uq3wa(?=V5EE8-B6d-QKoie;7;Nz_?=KzJ{vv<4h$`ko7{ z4z3*sMIDuux7y3_KR|+Kzx`uleLZADDS1ckZ0gI)(nyQ7WnUxz;mbCvuky|T*$3Wq zZ2_Gq-^+}j!Cq<47{EVMG#dB?iR2KtfM1CPSwJE=I`$ESQ25yw>mE(=y^BjTz9Q;h7$CYo^Y1 z3D%wl;@X+=J?!}%&S2Gjqc-;GuR0RUmcXl7$kV1Ix8k{fpJ77>XL6sItE2}Oy6V2U z_535p!g}vCRYh@2Zx3cs0?(|K^zczQi4d(s>3_VJ4gb#o`(^ijrjp+h*?QTfE-%q~`nI~#;2O%SvYrPJHXeA#O zrW#1wV8vM+rhT}9O}8uR?S8WP;dnT1Lf9d8Off!7!YOPo1&enua=2apok7+e>zgSW zS?uTMg}-AHX)w_a^|M~;f2*YT`WI_l>thI18zwLH9`!DjPwowKKF7i=l}xvcQKmDG zD0CksucxRxD4X)JSdU?lsGPiRbXSm*Jd^kOzBR4TNVok@d<}(n-_^ZjpX>KiUt&fl z$EZMgtTH!03L!z_39{YJT~YYfeb#sp!-fYk8VH+nk{8kx$|U!zNH?eq2-ezv#8pHr1|MhhY!jikQ_ z)v+Q>G2r6w#bNIE!1_^iOUY$=TZ(>}kx%>&Aov|H(sHSUn{NaCOG1h(WBd=h1iF3ZXZCkhnHK@b&+rC z2s)P2fu3DWU0r?;hJUb!1BP7?L2amF@TyYFeTbhRuEPBktDaXJhU9zDdCC4QR& z?!ltlAsOBvN!8ZY<^thd@fk$DQj>5=2~Ua$DPoU*0uNtDh$>dM2@>PWs{bjeL8Vo3 zCrcyY-6fJF2)N~GHa|tjCSnw^sWUGRKs@{?IeIfV8gaNQg)I|qTK}g=x40j2EV=8^ zc*(>{ymBO-5C%*y-3^PN&#q~hDzJ6T9eFV znlttIhL)5Nl%!%NNA^~8knHn&{}Vi;SieZNr6L!5HT$MLGhpHIy4WQB`dxcg`}V=;KmPUzP3myb=_Aij1q0Jy+U>IbnG<`Z+&<*t;x+C+b zS+ojIkQXCmRytThBbzE-n;Kmvl_D&gbe{0@^T$yM(pUepXz`b^lbwZs^%GD*VLTIw zCXGI&!CvD!k|zU`6f1Un2Zw7G{LN({1R`iC^k=6x%oqB)yD|6isrbS$f{DXKM#jfs zFeCe~;2**Twn4VzpbuM;LK20e=3^24sJ7FB0RcW99)cZ8K88>=%!)vhoN0MZmkigN zoG7$=Nwgz*C3lCq1AD0~t&%#9znnXS2P=G-YO?*ad5<7!04Hi7MB&%7b#=&rXJSnv zm71!Ue0j@|rpVN z@RPa7F|>jzqmLC~67&$t^<|65JYlCDdK!KGE$Y-Xq6a?%^K@RVFReOp%9QFB1D;mP zqHd+6HXqQln$jaVAt+Sj+MBM?}hmjP!gfl%EIc`Pa1eQUJs)k>SQ|X7?u-<(baDKcGKat9x z5yE2=6B=r2ovN>G7xZy@2L~0{kWBPnS}&X>{UWg9jZclR*G=;&yf z5O}9BqiWvb!@PEr1z!5Ewt8$CH2eO6327{K_Vs^{dUK_poh6+3hYufS$WmJckZVhZ zEHbWO7a?Lg`1Pr`g$R6`kC4tuC;>m-!4f|(-0%+3lTjmI?$j9LbExNZOX+a?r_1^0 zbmv$n;h5EU2#R?aSGa4~xXq5=`?$#@0|Q$Lq8y4qv4`HM5n~4@!{j} zw&YTiGUYA*Z{t)Ee+6f#&wqRV2V1sFx_^%|Ub$Z!cE?^R+SyJJ_P^VF zllsUPi@m34RVJ^bEoC^ZWSGQz5mC z&xw7uF1Mn(7@yC}K19mDrQ|hlL2e&EPErjhm?$i#cQZonhs~#i*Mc4#>Y13XK^TeVVjiQD3d3^G+_#IuNeH69D)^?6 zP?)#crkC7i*z&E#9J2CG<2CM>!+}}SLm01T zFwzos%NAPp0`x%)C@loF$;l)!zE_v`N!>TUMVpgjEC$@H&^5D zX%75+j;owx^ht>wzbPbTTk@p-q+1b}QH(U%L_13vzBgZ*C0poBEeSGoAsu4RAqYU)R3OG!5ewB?1n+J) zkud#@!k|AFA=$LvT}~7%x%)6i$jV4o@?E_0a2}hUe$lPVHI2O9#T~}ARXX&u__*2j zz7i}_xjdY+&2saVKJmxlsLvyYz$#wPSohGOL$TPxB)xCT{#5Mu_)t_4}}2sWMi&X>X6k?Q4y;OY*5u( z%P{iq;Wlsa?;{NYn_@emD{3&x-`(x0Y7tDg_G6h-rm>Nc5pXJW$54Q_VfNXH#s>AS zB^0-i3Gx-PU#)?R`^t%bYD-?F{1FruzA5BDPIZiR3!N;gp>llR(F=!{eCS*PmdorP zYikozrKuHBV3plbB)cv9Ju@pyjzrjTl0c)Ut-W(@03tj^YglW{VkvJM5ulS{rR4-_ z2%Xkn7hl2A$6Tm*=+6s^io#lnUoDcUng$9ck1OGyMZPnI7 zI+-^(Sh-wvPh8nek^YJ2=ONj@&bPDAzs3Cu`<7iCITJ68oiM%Vz8PRIe-1CKHyw5G zn1=T|>?9)3kjmF?7v;a?R&Zpm>xB>kf;4%b82e%kprqv(C8GVf1bIy0+0N3^gLitR zK+37GAr%o5yZk%tED~N_eOI-OmNt2W4EjbTVhT&D0rt-iynTH;J_5|Z6*+1~{f45# zEnG&y{CvLPU>hw?gp1yQ?9CAjHi20MsxHl|z`c2yZx|X8=3r^nw72Id(i3Zz?ZUzyyQC}yFhDJTZbw-Md=09`y@PM$sn95G&nI<2yMf7NB zXk%v|(M&0ttzyIfOQ*3S-0Kgou(-JU5$hw&>0LCEPANKq_84#F7^rAW)MR9#sINp^ zt-hw+UP!L-by5vUqiDVQML&_acuqe4my6?C#!XEZ2rs0aVIk?nrs? zX^l@#npaw327a5K22;`K=H{kR1i&>?n^i)-eE;qR&IMXpS|i(zk9)g%6;)NYmX{pB z!XcLiRhxxM0uG)`QEV)J9GRbp=W=gyg$b`f;-^p7X0rMq93v%bYin=IO6~h7Tc4oZ z&f*Ia)zNZdV=}JgS2|Y`D8=#68PklNCNfABe}5m-SfSP2%8< z|HbkF0rj43|3!R#y=Vj9ojYz|3`ioOwiTpQ4Pgi;40V5?qtmYarl?3gMkZD5tQ7_stCUYQLi0(wZb3J=~HE|FNWFJ2)IM1 zv#5+bXJ4!pX5(7s!*zPbOw)=Tlj3ckY9?`2Pu{G);bjK-vC3abGWTW6UjZ-ES+d?vKhb+XlbdXy{Rw_jQP?RVfbgQ$ls zbQ6H2h(E97k%o68bGQ!aaXnsWl3Yx5hca0Ut!{bx<>HFt8n2P&&iA_RRmTZ&2SVD@ zvku$qKVZN!-(y8A+(9I4|lr@+|>I7%k-`$8{5Aa@#YzK)jmq z2l@2Bk9cDWU*{+=3kgA_nisfR#BsY7)YKf?LoiK)wB;e&?Sv|foI#fwZ$%kN-ksdR zg{MsotfA=&WGAJp3^W^#;En|M1WYxE_+qqq;V*DND&d7@J1OB6awU)}>f|-Dv7`3l zM<=$E;`P8Me{5Jr`M>_en(=BjY4Q6MIg2&pspLKUp8xl2Ajj0DW=Dm8H4!&~+nmS$ z?;i#;8dAgW8jOfimsL-IOnZ6vkp#d?NareEGBGow(sYkQ>lN{wHvQNxse|dC*?<50 zKpp}I=Wp7k*WF!a1kv2o?M>SZxT^F3e7<>+Wo#}iaco7@@PY%EcK1v)N2lN6^vxM*6Q$mNW z?Rq28LgH{&U>xlK;{rmm@q-6sps-%WfVm%Hl#}qIAo_W9V&b;^h(zFJ6I9dxOevJm z*K6Sg?tgm3EhO{@JeAb{;PO*ZZ)*Jt0vq5x>ZNgm$g%2o#h~wUg&%f^dN`^N>RkZT z#K4N#{M+2xeQhFeS<``;2%J{%XLU)c_oHtSj^DY4q1}D-g5M&Cq1k;SrLt0>pGL?* z5AN3F*Uvk$upbtI!~jiQX#V1`2Z+CLXF&%_wD!)dQ5XYNjhC?MXnSgWV1NMkhnE2| z7t-9o3L^=5yLu@75yj-#4vH2QtpFSu(K3C3!^z1h560QA=bluzj2qk^*Em9yFi3LX zk+Rzd2Nk?0doksvp>??)>=14zneN{Y4?ZoN0AUU^>PG^ILy*WXWWpg)b*9Qz?UHAc z;OH8Km&aRQK~BA1td?Godor9all|Dyu@j0f*mp7k7-uzPdFMK-i=B%;N=n_zV#Ugm(oW zFKIoKX@*5ML?~EJJhil}03RNoY8SL-%o<7I&UqsC;_BRoxnQ6Kx2Jj(H4P2a<;>mt z8EbKI1gq&hEpHLm!mH%?@U)vCYI8h^jFhr}_w3vpqm}G=>IE?dSPECOb|K-;6vE=c zlQ+-riZq3}*W$uLdx-KlpeExIYHRPsqFz^nYC9qc?KBuS@RG8I2RyQ945#!tKNi5V z%QaM3iwqA3mM$}d!()d~`(Ee2ZS%sV99G}W?F$xM-Vz(_IEn}@dj}VFKvE}+kY%BN z@v#cKDM?cwxZP5S(3M+q3oU3ZNL9#jO6E-T=}LL&etmY~{*{oCkuj>8YxE+z1O&nn zBuREt5gJs2k~LRpjZH;KLQEX=sR~pxsx$?-ap43L4a2X}I~@7w5!UqZ`JG^a_i${$ z;Y&q%O^f*vz{jKjXFuZw(&o{l&khrtfOSY!aH+JCMlzuub{+syqB$=Q1SKhWep50uG*nWGe2ia$J)pRr#jcj7o-I-dwF9&SXxVLjP&rWEkWq1= zl3Rz95NDp8hJIJWPMpsuGu*wukb#{n(#6U8FYz@@f*F(dkABC&)JeHl7J?}GhY&Ftzr@6*^^@hPRQpZmm;!XzaCXf zQoX#qgg6c)|W3SNaaeGmzSmOtNgfN%O~lblOtx$5{#qfk!7a!ZXkjVT-zgo-2v7HWS734 z-WzB$mF@9+NxZf7<>ci4hSY(5+cH4*t5q2pDd{WWC;b*2Na+#xt;u-&7br3BJNEFk z64gnLwxo>8(*qn@^1S9ypP$maS;Zw5q(-obDFk8od%9f>sPGW<#wPv9o_z9>QzI)i zgWZ1O&5U4mI3o7;!%vw{KO-V`kkO*oFJeDD^qzTerx@WZM&>*TZ9CAh+C}>Ty94$l z+b!biqt}J?rbJZtKKyTtX_GQCaJt(9P{Gf-Hjo+0YxEPAAgVBcQ$n2U5G);DymsPbkkN;Shrpb5#iNuL)#lX30=s}kg{6#v0p%(u22U#)&c)p4C({E1>iYT< zkpEbv{04!b=j~+**C7ws5Q=LnDLd1eyE-{Gvp4KJeQ@*vAz!D( z-{*1&vy2K4=|@#nU5(^S!n_mmyDf-0*gu$pyqLlbCR|XHubmfSvS{!$gRL!e6L+Qa%S^PY$|!556PvNSWAA z#w#7Esm1jYyQNW(^2e2(1HsGT9n#$hY2G`+!jyQSfyB|3AZ!eF9;zKdV{uv0`}8ePu( zogR09+Wh!iE%qF$Hruv=7I6=7E`h7u{<)GzptOMVwoU>fG@JPY!g6;D>?kB8$$T9!`iPeuA4$Wb zxFv1K9RL2kBi#OAAkL@gPrHpj8l+6^M&J&&b&nt~uex4_O9vBbs_zIH7hbdu@7TON z?+r^*vc-82BY3eWtZQYdd%yBfz?A%BRn;9mR(z;^ci8brI@9AMl}y;47Pl{^T#rL^ z!)12nJm;o1RCXfip%gPcKtiv0-P$2Kp}A|*61`Gyht9g<*6$ycg|H_|L@^Ly<@uGbu^Q;9`h}cAA7aH#$ayOFhl%RA)zIpQqBtw`0qgD4;^-_%CSwqQy znqn#)mXDdOJH=p%I3@>NDdK*Zxxh3|Jdm-`yn& z1pQ-5pWYQ=1kHtlMSiTVuC9>{Oby-9=f9B15d&~-81|9!EvCY6U_B}X;fIPCUEg+E zCZj@*GFs>Bz(AMIXDT6HUV;g4P<2)*BuY@=!49w9O61mTn0j!aJV(97(&8PA)VG78 zK9^WU5naq~fg2s9csE;)mGPEx_tVc1IGFH6C&z?-{mGLjpGyn4Kv%fl$TJP%qU}~e zmOXSPA;g3#f0L{=P)la1`ocMoblGqK$tn>N__#JeIby`K8pbo%8U{EoUzkn{C>QY$0psw2b z3n3)_@@d=HGe*dY{*2TiS2{z)$XZz~CNaywGFd22w=Kvu@FQM93uCc*`ZU1eNVYn+ zqxC&v-8jW!8~#=x;+s~)Wn*Jg^8P&$y$G?GH6lOC(k2Tq3UH?KR?@lC`qMV=9_`cy~p0O%mRce{}7~yG`1~XrV_#4=4^@# z%YXG(;Ax099oZgGgri^!xN_25D^Bt_=(wp2!xzY2(Ng9T9UhLgA9k);8p&iZ=8n|# zvIW~&E~;S@4d)f@b)iKY8lQ#RF|EAiN5a_YG@`f=gHHycMj=bd50g`cTABJMSh^g& zelM(2Z84;DFou6&MYK=x=<2jqaXdicw2G$ly6h+TUbN%4S75m3RTwshq>NAu<&bFJ zTmW|j>GP00LzgPpQT3hW6vSl5{({qb#i!?-U)p=z$4VbLpG?b-M9WTi8OLn7UlN+- zy#372%j?QJP9)bnfc^nBP+t;NDKX@W&N{>2o`tJ%EHQ8sxWX?p1?9e4!5;aNmv2PR znuO2NyXnH(HwK2b`hPYa#ahM}=wc{onr-CG>J&a$`+LjbyHkz=+v=fl9`2r;6!?u^ z64E}IF12^xcDve$962_n$4lrtStgk*aecrmhOG2P=jOd@JfdH_29DKLe&hQN+ctmq zm=}>=*n}rD{(m0*P>Z54kjzaM#qd!$xU%hkxcD_6%n{n8GNZ=$X&+&j_vvvpA_L%Byj&L(cx)f~7V6#QHY{jlx3^u%*rvBYRdN z*vSX7tBac5BKdyKh&e(cvfc6MeL=3(t=jQoIo6?9jWzmNo@L9psdkuORxQ=N7$xFm zwhM|wd*wL!!a0}s-=>mbhwsmyV6&#;K4rF$^5v{QW^X)Y_roYY4ll-3e1olI7bb6q zp@8=i+bSuCJVNC9C>9~ea~9trEH^ty-99z`rG6sD&L!6UcjYY@53`%k-$GLQ%Xbrh z>BY!MvmgP~p9^a@$>vf~5u|y8zW4VYO24W*Q+mAN{(a{SRZa#`Dq|MkkEcFG5C71r zdTchk9^pol^%II1wS%Y0V{%=qQ7zXH}L((F|v+*U;rGGxrsLH`5X+CiNRYhco390av66pkNEYOpZ<&}%Y9DZWOWN?D}BM`drqX;^P8Sa z`p2(plZob(n%$z$mQ$A*UeS`j%sJIhN|MET8TwyA(Ubyf;F-(7_sJ*I!xp^f7=-FV z@@?^r{6sffN2>Ivd)ZK{01)xLL}&bTmEzW1SDIhZ^TrKUg_`&7_u?eB$!9~bM>Q9HxYM~cf7O>aD-2Rz)>{do zz?Rr}H|@Bb5zS|w+%7Ox(XY*RaZ0o~TfO_{_Zds7+h^mOinH~x2AhAzzHnQ5oqVM` z*nlz7Guf3F+DX~0BCeN;Pm0A*lc#c9!X`=|5aFR%L#?tF;MAi=-Pg$aBm%&3-Ongy zn=~(Qn87Q*Q{yiKE^Rnr@e9fWlzBF}BUe%+52ztO)wII>hAJ4En5b#9&emT(gIDAe z3!K0#P2-uayt=b5ebW&HJA8fX`x&=`lQ&RFWY?(DR%x;~x3g@n*cXb`w$UR?vdURL zHsf?!h?f%>wk~he`)1}5|BsBR^?!VA%zA}${30= zR+P+RRHo2mNJ^zbDkM{gRE8#GCaF~B3=6+|wfE=q{ho9FJ?A?6y7qN#Hp}w%dOgE^ z-_QN1R&M9ZOgz=Lp!Z1d{>a+>IXVvG(0HX(a&Tu=?1DbYt)=n3U5#5`2Nnp3ZSh;L zy50S9zr%dtlW47q(?6PS9Xs>+$?h`mpTUN^g5858609Sl&p$Uv-dC_>V7qsVhKkUL zq>AhY)*79Y;^8-Aw+m%}43FAOwNhjd@5!`z^OYm=x9D0Za_3Cd??32q|8(d?HCg8U z@a&6?lp9x{{EUc_*mC@wh0Uwqx#l23o_crgCv{B zxBrYCBV2h25Ikt~8h5scndU~ftEZ0h`zx##k{Dl5dF6s>TjuVrnzSG-7CRJz4 zc6VQGnUK)C!>(9s;hSz_;+V>0;;5iqZ{t|a9aR_n^TSge>lUQSp0nd6?mpKLZ*Lc$ z>uOZJ)ibk@rnK)@?Mw{TH@>wiXZ+LMyUKd%;vIiz|6BHt% zmoMzsDv#N7@6Zy&#dxB-6k{HKvI>er))ycJ=Aa)8|D}Znc~@7wph3 z-jS5e{=vl)SzjI4tS;@&#R8MEq|3(Fqc+CJWK;0t@o?cC~Jd1iXvx(};&Tyt{O?9ep!Kjbpa zX|e4x60(-}>$@qpxZkrUd)>BXBz9$Cq+Iilt&y>pM40L!q^o^#c`O;4?l<>7eV(7NGf8hOUEZ9Bn&_2R*N zo17c>EHoA@JAN*4Ni~PxD6SVUc6yS1ak;w2SSI_a|C#B_Tl&OyDN9=s#IEwEC3+Nn zCHYFNGuGDFDkKw?yxW&~rv&feSE*VdGrfx~%d14!W4~08q0?+_o`=WByGsiZ`(m#> zFC6w#RptuY+t&~mZ5CVS^)tt$JK8WzU$)?OXlf%HQ$3CL)a z#iJ)?GIw1+9cCqL{9@aSa955<_KqQ*hy>$|omaw?^9L}26%X{KwY2-9y?)od{I&Lv z1awy1#Uq6lIGmYsqG$Dk_uk+C^O2W1R2CxKte=1XlKgb@$kfo+2f6Xt0-p9k;R%~h zFRY>VoSx2n<}IhhvG8J@c7&;}CXw@J_|fbY{zryGdy8(IzrTb{zzCEzr**#FqX-eB zzl811r?WQ=^fuZ@(pEL?gknv5fiNVPn7s7Z(DOZTAwF_c&Ny*j6fg1m&k>>c!xP>q zKG5E222Jw4rWu@UVHkY!OEcih$6N?XrCmQ&@=NDl`n9@i4~A!0KW}g!Wm67Ww_m4P zzsxWFLE9ZIguL8O+a;UbGeQ)2wml_uRK zt93FC*p%X6QNh9^jvg$mWHe&p3%5ki4ts zvR}HPyioRwwx8alf_3!l7+MtF>f61X>jp!_z4xB9kNTt-4Eaf!l{}jry>b89*Va30 z1z8cUq2%J@;IuN%Pk|^)-XiPF*z3oB`#k;2zhMP8U*_CQ^2`gk7968GUp)V_8O713 zI|qK}MX;{SUA$JBl}{mkvn_jDY04vZqxX#bEjPuvd-?wj%mI=t!?h_JRX{7wEPUr7 z6??3h+N^hLF&W}@e)j$QDls+c`=|qy^NB)1X`zkE%D04+55C*`H2uQy7De?Dtw6)b z`jG3#pNtRAunxr4o?1iR;`sqdwdGK;u-3`sZ#RWonS$6o7r)*-;wQNFfT+l7bDpRo zmwMwJ_m9WF`E;V~7x&P2;cG}FvOnN5qiXY!jy*>TcExk&9T4whBR5t3CWgBP1v8QYAW9eB8PY2&dz zA>!0}-LWrMYj<+C*i-~vh*qt|0$%m|H5j*orPkMTRrCVjbX_V4Q&KB{Qvbc{_?GZ(i<)il0Q z8fP;*J4_lHOy|-Oy5~*nm=kL)1I`uIj`Kc$r@qE0R8DPbE;?^V764fwtWx(z!Gztt>t-*n=ZlDu|b=JPnjBu$4VGa zz2N7}h{y=N8QY*+7qn`7<2IF*So4Xukp^CD{HxjC<-WX;%pBZzh&BA}*Z6RQd1~g4 z4Tls6XPI9%#9vC_vlJonEC@=(y=#gvh+0{N-?e$2_l!j_RkcA~^HTgS<^P@{8%GN3 zJ7$^4s;D}X&0;g0D=Vk0OjbwBo%z;ZG;#5{iTv3;sn_EZcCNK4I;oU4Ns%oq;Jae1 z{pAnU_Xkat<9z9>xTI~s)9p8f{8sE!3v%^Wi!e8xiXl(fb5DniF7L(9e*Jc_|MJ|l zv$<#T4O^$n9JHMk;1@taVT0MLSFa#ig{#dtOq+ZaW1XT(Y8&DB3zG{_x&xm+eysEv zV$p_!_s5SPZwwi#=5{D0gfuzscr8IUznyVJGU?ZM{-2|Q(#II$pDkvBpO*P0q`+mo zNB_ys828m#E=J{trFT0T8X7`)v2j0>wh6z00JDXQi)?zhg0+cK0vzT*8C3;Nu>@lo zAZ&>O(o_x}b#q(2X(v$~+FSqA?Vebu^o?p)q!JAH< z2{R~h8hicU5Xuw9dsW`1(B<**i(8wmA7njqmjh6g_Q398!3|{QfC*n3Dgzz$<}QDZ z(-%W7n+-e|oZa^Jx6V-`fIQQ) zruVL5IYHj>m2JPM7})-$vl!Z`q?&cOJnII9bez74r+1s1tI*IX*Z=iO6ML8JqUfDcB0sA+rNrkY z$^V-tARgGZQ>EKtABn8B_UrPq{JGRYx7()wR+={{jY%n-f4mg95>wOsejnUZ^z5KM zN3N_chrxhUl-`AFcBLVvj-eel$Ii@J3DlQi2f7qeC*%+>7~Wh~kBOHi z#?uJ**e%-Hr7Iu)`(xGcW1lrd)wy`nhm&ImQS?;*i-e|AW&luqr{1z$C@} z-%m4E_+Qwr_{9E@9NP^hecF2n84X5IWHX!RORZ&Q3nvd}R^6shWz?FIWM0}ieT3G! z>6_NWgF~fsdW6XCsZ#>R_=Sfvwl`AqI2bE@e^d}UzLBTT+Q^=t1p_4oS@g^`6; zf~6$2`JGcn^DZ;#5qThbC$kOe)U74UQIa!l@$&<8IU>mCR#iG4L33gkN@mlq#AzVZ zv#g9yw=6gPug^sH=X34T*+rtgj)^0|ut-Wnek#|3Pl(JGp6K<@XSROvD4I*&j9-^b zdy(jeTJz8)`{A*$&Et=xM_ipvDK7q&cK|QKNc$F_!Q6dLCjRn&U&Q(EXQY+ory}-A z|L@OieAs_^x99QYb!QJ~=@II5AZXAds*646Tasxnqdk%eJVo+3VLYUZ;?AX^cG%s` zFDTf+ysQX+qu$qb-*iuQ`yCMte3o?T;oUv>Jw+zwEvTia-2=OYn{zZ!qGbs)MnZh^AqN zka~+fBqi$tODn6e)oNfuSLOh!rw0AwL9XPzWDC zkmDlf>um}h==VcG=!h}q_3Ix$w2zW}N2C1TVUs4k!Z>j*6YUj2^Tpur?D|E)a_7rV{lUhy)7+UE8Kj#Sqji{I zl3GnWk4~n+mDRIn&3*TC3#IYs8yJAIs4EpX}y9zmC?$RZSn>@lZ!&Gxv35o-qkX(6m8yuDL^Yc48I_eC6(f1b?7UGpVySnrb z**!aX-slz6(OX!%W@$8jYP7Ycu8!%vQ@XIM14qQ(OJTLxh|{DEJzrEqxMBZe&KA(* z!HYki!a)?5V#DUmSB*e~3iM2ZNXD_kUc;$_=Qq(baP#c?JO2ibOBr=zND5P5zBTQI z0pF$*-^bJCf>)OQ0L$D!HHI!1i+nH4m6T|t(dj02eEz(+xVW#thBrDbUVx1(1PjxY zl&HRBacqk6XVGqzRM_orr=W~8&df9R^zq~M@u{V4)rJ3a6zyO)OHRfLz!+&#CUY$oCm4@)g>jUm0>2}i5Z1VtfaiU$>U=I9(#?s+LG$2 zUv@AdNDF|@2`uG!^*K1p>3Ngco^3wTE^CPCINB;+SoXO*-FLIIB2fKkvG+hN79mdx zX?3hmfX5xI(B|d>T;J>2*w|oVe~yzxp;CJ3&c)P+VsxzJc+Y;j)v9EFhdC<-&kze< z=w)>WEF}gx7_YcCCCiN$dXQT8<}*HvrY{P&(-i;gP!qcF4NGfI^8{bJf%i?L`0hbq z_WJiVaf(AV4&UW0@-Q^4OjZ?vU--WA%OCl^th6;~&hnA#j*Mf1b^0L~ynD?vcb0@8 z3*Ge+NL^@L!OU@N7mLbD6_(RdrYh=GkL1s<4n!YlA*55tBE~tR%MCgo6UO!1Lz+9(Qt}%o-c1L-UJl%88 zpWgx9z^=RZ?iu`w{S`?p@$AG>7d~m@pml6K!&ja@Jq4LSRaFRdl$|>gUEf^M^OE8d zkWhC`2n(Z^wj#dgI}>n;Jj_b_!;dvBTsgIJ(0@<(uyu_+kNNfJ=mvQ0*?MFB$5@+X z^qo62Aw<8Aw>R=q8@wyH1p6p?*x?P&y=bN|VkuTzw$mg~Aoy+s)!x7IdId89NHP9n z9X{2e^q7vuW+i&AwXbjzAEu=VKB^hZ*`2ERYK;rH?+BJvPRm%Dil8i}R{Qqt16&Zz z&7&Xhi-sIvx&hXcTTODi-VbkS(it$rh^_9|F~FxgN{)Ti?}agvjBZ}mcKRI=47x@6 z^AOPaoIL3c4Sno;#NZDf#4$xuB@{`2J#u%y!U7}>wqpwKGp=0O4{6?+neR~sV|gxU z#V}WtEtJYT$)d;=ZpqZH79}mSA?}&SxMVRlE@Bhh$jjo)r?<#(>EyYUmv2@lW zio!r{s_czDo%u4H8({id=FJ{@&^9Spi=;>WitNT#FD0Y&dtlMMYJ6qxnY+!Q?RMj< zm-lvecWX-OHS*)e=;r`32tW_r^k>D3gDNsPIr#u#76lV+t2|y6A>`{ar}xQgA|bR_ zKQV_QtQ5mBJN@zAxQd{gqfySJP6VH(Ao7naJrsq+^Wh9(*AGzrZg*VMZdzPek${6E zZKGS+y8Xi`)1wCF!&THL7%lscusoc+EP!%0@zJB-G1cciJ^k$+OdRbBM#DOgvn6$cuYIApp`Pj&HSzx4yJahV)oN7@ z4S(3kB3`Ei=WXOEXhvkLuW}6+EIOUJ`P9x4&N>bb4$ouQiK1Dv^W`D4FkcMY1!E1F zpyE`Gj+>hsCnx6~MP=oL`tHiJSMylWqlG{w8K1rpVpa&jX*RW(99ce?4|66GTZWQG zTD?iNJj+7Z*^AMv!m0$mhpLC&Jv_WHlrw8Fn1BBKs^|>V?vch$h74Pl?`30a zyB^DnH*fxo{iG4WxWPCK6ZW4L-MT9RA0?(gez2f$Hoz5k{qDZgxeqx7#Og} z#>VPu7nmT=mY@24VJ?i3^;ch2R^HdJtqLfRw}+0IhnJR@L)m*2p$!6A7(HxQ9F5bk zRM-55(x|j>^qqUG@CHvCBo3HGH-^xqu|ByA!8+wk!B)b?*vKAzmG{D{3@b`b=>6y_ zIfCUGY%ZSf^RdvHAdM!N#@~x}3355j&a#(wZ73k2tdSmkHS18-rvu71Z0dNI~x#Q&N*$oS3m>(Sy6XGs+ zf|9CYA@I*HaSp=+WI0>&B3gS#&hXZF?=q@BaT5?o3vfu~3BBPglq7z=aIjnEo^ zLHl#`ICgGXGch&CJB#I3R;5D;i_PA(jJ6R~lyO|D!M>2D=4Jz~Gf6>^imoj0b|J1~ z9okhDd{%=sxY11BC-Eu96sSTgRzH!s=4j)A4y#X`JlW7~&;-#yIqM!rEZ<}Ql4M;Ba5P}rIdGSheIZQtebB>OWJZ~)((SV+LojpS2SuY z)K_Z!*~b|_l^ofdC)i1O_f^yvE=;ECeMFqc>_GJ`#D+?|dLe2!W9kQT#xSJj zH*ei4&So0j)G>ozqPRbXM>2bDYmwyEEy0SaqY2n1__O*(g%lkWu65lWy+!Ia?-U{sDL2y&cH7EPB zhO_KurY1{g&TQb^N3zkY{Z+iZ6V-6kQnkoaL4ojB<&{| z4eySHCxARC9p;~F%upJODxFdOgKqpF_U4-Nq-C(0aYu^@OL3MeggHPNtjVm6eX33; zuOmBf&b~P-SSN+lr!ur|6aCT) zFJtYQz`q3m5!mcbL5)NJJ?{)j+a4KE(MM zb2B1>b-&l~MXa{S+>>uP0L+2%0j3^^O{iyH9-V=k@*s!I>eaVVV*rDRnF-g!j5s;? z554aI;p3Y|O#qFq{YfkniE3S4U7n^K?-&k5G3jEn#YyZ^5T9i)EBxi+;bC(N3pmKX z5%3+kJD*%c?NJkq4C5FDBMDO`Ra)XaBAuA2BR;(wG12jcWnh5^KR-Y3@BV(ep_tv- z7KP-7Z-oV4z1oK=+=nn4WRn^h}r0-acDohfA4ZV?gC;uZ5qGz49c8vBa6A&uw|f5H(D-B z>T>9MS7WEOwL5Hu{EFg*>GswJI1W0pQCyUFiM`fH5DHPRZ)&=O31*U}U}QzL25ppD z*-7ZR%UJEp!rJ@DbS z=j&!jHgHxS+Fg0e?MqQ}b39Mkj?X`5+Kt?I<8H6LPf6t3z*5y{Hy5Ic&E9Hi;Y~5e zJE}r-5;nCPY^h$DZ`Es&Gk}k0W9wa?7n0Y;$>k*$6ANt&YwRlAy&Um?ep_>7;rh|K zS007&d*>zr79gc@2k#}ar&UmyzoSWebdZQr#%9YS6Pp4o$BFY|WU|={@hC-FT3SPc zXbn3=Et?)`31jAwu)Hu^7_kJz5`Dv}>K_G6I4Qfe1-W|A-{iBdwh4Mf<{6XQxzY7C zNrieIC`pDJfK(Obbg)I3VbpMM4TU=)PA`p_sw$)JDndNuJF|nX{7TiLT}Djove4P@C^Yz{Z5AYYRi0_np zu)Fgy|EvOmaTiuS8^Ltqy*aR?jt7U{i%lh-tzcY_Iq@)sxbbo#vGDoxEu3m4B_;4f zX=XmhNDD!8zr#iv8{b|XfB91C$8$l6*$Vd`ZfYls=fvHsCFUZpH`Ee!9*^y>#k5Bv&fRUoX%#XjCzDOY;F#rxSY`W4 zDh6L+)twzV_e@(GmmUTPq0uCYgDz6|&8=zO}KpE)(n zHN7hSBcT z7crRFe{EkLnpel8VLeOH4h&T5U5^b{;g}d5X7?ah4I5dFS(yeJk8I`g-^@bXVeDta zwP^t7cT{*n=$0vF@B%QL8>@fvDT6-$q<+OqN-jJu;#`2nrB-@JNxitq7cwKLu}WT` zoVVOM$oWoH)e0`As)B-;K{WTaB2WE6FJt5AxVWb7GQYC-(sp)sE*CTnhcP%dC!U)x zWi}Keku88|b@)%5rJs2wvYzv%8kzeyzwpy&okr&FJa678o$dMxENTJ`Rj;XUcv6xT zP)V+w(gg9%vk34Q`ql)gv+w?Xx#j-jynnk{3-XpN&(SJj??wtcGn7h-xFy19!N4Gt zD(Dx%doLR6DC&NEh-dg)qcKcOOrR)1_joxnJo(b4^}xV3Z{8e0`{L?GOo%0gyx7+E z&ufSNe33ZM!lv(-fl*c3AOe|~gbVs^EA2PpgnC|9w-YkKjvdy=h9Pzm56d zk7$kfE-cECktwULGH`d#uZx*56QRYB#LbYj0|(-ZmO>d}Ww>isa@|IC;memVYpz*R zWKF%Oth{a|@RSdjp?RjkOL4KWbIleOHKC?eEiwuUCe$GzzJ3LJQ;kTS^}3>YRddXi z$3j9@3JR1}lo#q)I2_Aby;ZDL<}+(`{V)sguD!jqkj-LL?M`?5%vQ-AQ#Dsp8tL!PzI*r8E&63A&2tYnP_n740rAZLykVC$T+|DQ^o5AS z=ogTx506aY;Ne`tkH^Z|`eS>0a^aPUE8ZS5eG>@e&E=QVJ{(Ec};P^hoT z#yr*1rlTi`J9H0#I143_WW~kB>#|2+X#sYq_o?G)Cyp8bOpkij`P@+T9QW)fTHR3_o{M?o%yAW`cG`jX$@@@W3^?L z${k=4cz)R%7X!bTQsX=~)tX~~mhbE0O&c25%2tL^i0a?V2-P!d8gHes~27`SiE@X+g zB)V5Dah+aENaBDp&e!3Dqr-EtPZVPP5ZXq2-JP#0r`YWd9z>gV`d7DB!C@I`>67iv6oNN?~*b=si+Y4&%Y zeT7(RXc%qWhia*VlT{z99Wb5^2$;a3ykj7n)zWX)$~s|&Mjv5xE3X)AURw75JZZwq z)>dy|vE$XU;75u~F88xy`-*GDWHn!z`DL}jSB2AsucEr+VvfW(8mOr#JHg)ACQfYy z=@fe_YN*-@!Xj*ej*5X%^tqbHx->@CiLr5-@Vj0PC}g755K`$cAKI1e$~9i~@gTyF zo~UibH5p9i-9^*iB3%@|Z3XTix({%@iGL^Z73>O z&gU|GQkd=ZH$DzusD;fDx8N1ZhVd+zO2^Y$26)Zw8QF1`T3sVQvG3}m;$k?&ETN67 zt1}G1{IS2Wp}s!D_G-o)OIRLs@F`1nmeC~$CcMK2C5*#i!iXp;+B_&%U2aVkVX=Nn z5XLcy4y!4%xoPh3)WKTr++J(zw0XG+O#ds#0~yT8$??Gf73>7l2gc;hHLWQ)oB9T~ z92z;uS3)eNlYfFE{#rBVhr|2MHjs=t&Up{t1Ox==?t242J;nK6FeQ@DPSd}DHHMlX zd-e)#JadCZbwKXRjv2~p`npG653yFt`Lq~_{{1P0mibMb?Izg|ey%eeEjsk=co^LdcvYU$UeG4OV4kWq~}+#sY)lx9GbLfvVfS zy%{7s6Rv|IVaq;lTTCbTl?WK~_(d$eA ztfQ?S;*u@SuEs37bo%w{;$CfX#At9206iQV94;sF{&2V^?xv^Gp}r?s&cKTD!1LIf zsnIqW7sm|(=ZysEBF;JN*+VQyee&caP(4_M7&bA3L^h16UY6o(J{%aFhE{ZZYRaSS z2J@PWj=m>O7;!Dv0u}`8$uaT1(9ytzep+-P>^!kOyUAUdm*{r^& z=Q^|Mv;9vz+1YR8prT*W)TfzaMLkDA& zM~Dg&kg%S&iS~6=1tHEV!!*U{{H`h_gnH}6n(D!GN(s0k7?!Pofi*h1A4U_t4hi_% zT}S{}o7nLK2BaxA)9D{PxCJO$KEvDXs*vJYBiaa&|U( zx(T&S_BP(Q2Zc|cx;1HNXw?1L?o^O7Kv4z9UH`)bXlrlB3r1eL!*sTx4_uS934%z& zynW`UF#>BsuRXaz~ouYkb(p$S#LqcydKT?@$|YYhoYFn}JBl_ip-|v2NrC zSvVr%GXJOm#G^v3svhotd4)6R1zf$MDY4TfgFlvIGK0%1DxJt$g-GCnwUadwj~;Q3 z^v_RyEi@mrI5+7a#ch;)<;tt@#H|>@cMdK{KXtH4Gqs=dj>uf zRfK3r&YBF%#qj~g$nd!-dEMQ+{Qzg8y`7z&c2Ol2gEm%Ofx3ZwxOD)Vi25%{%V=ua zz>>Mjs2+O)1^O;(0o}*cu{S+0lni(5tF{Ue*t`$HJ~x1TC{TbQD(tiwn_=v2I6?mh z{u}0o=XLYu0>ghKn>#T(sjpHvt&Lk8Eu!0GQ>&lqulXWt^k zD#-R^7Qxw_drW1|9&

%chOFt65VEADUF#lamZEN`}sN6Gw!Ho7>YP@8sp_uV1?c zmj(KFn^EVG4#GM^WoBb*2OPC(JafOc@sQqufgI)HQcBm?U?LrFtN{RC9Ai@7`RvrX zg}&7pc7;P;BrLVG;WolS20w8#&_S24 zeJ1o%p*OHqQ_9XJLDOckcsgJ9O2dPJ+a#i%@xknA{jug|X*EOA^5D(JhUeFQ>a;aT<9mg%w3jZQ2~AW7J|| z)gw@sjbQ7z2kKq2Gzm-@Qq&p7P;NU|Q2a0t{>{9=-^H-LhLSTvNKZ6IcgiK7BJI0%Tpd|Ju>2XPkVN5o=WeOA{T-@BQ zM~21zY4Q4=p&#U<^@AL#PRI=*E`L1G=XEm5hj6BLXX`N@y2$rWn?O@<20yQbo76m% z8|WJ|GBQvYr=oAf8)}@1SU0u?0&qwSf6;Wgb2A)6FHOzNl9yfBCrnD$H&*=3|83LAYuE08K&ZPrXnjsLEc=ZO44lyj z0to$bgRR~P-nH-{NStfjY4w*7u^?+{m4S2wKmw4t_n`hjbs+im|N9X- z3lkF)nzRGHQ?T*Y1_unUUqlXzojXT%5$ZXPL?vZqL7fVY=xu!`}rFJ_ygvAF?*D5F^j(gK&=dYj1l3L+?!ft_rZFQm`aU!)Kv zx?=vyh5tPo|B8qIA0Od3sQ-@&xGV2o$5_|n=7xr7PNFdFv{IRplam*)%LiQ^0&Rsn zk()~itFK$ptO9&*uID=!1#>MF4ZyV;mmaF9{YCZI!I|Mnp-J;n&B<1_EjHY{_XN67 z6k>l*5mGYDy8z;SUEU}3?++SPF*ObS1q8r9J(6|`eont`Y8t4Gl-A$8ML?qKn<*ZG zUJFhRZOZR|?#KW2qvZop&{s|kykJ!sUzd3G>LND(%??iSasK@?T==b+0CQ*5xX|5A z>U56-nfi7q7RkXZq*{9Q>X-HPUr^8^<;5o?3_BU2&ywO)8&p`#ysZf{H+W1d)5l)8 z;5w220e$Q5?y?szO&EU+4iBfMr2&>>!g_9@yERdHY*-T=j>qLa;6={$pQ)>9Ly4h6 zW*FgLzYXoZm0cOaR#JZRM^f=-UBPl{InGv8KN|?P%2x(Ru*X)nF!8! zN4S0k&HKW?H7*wh6{aR8{R}#xNGfXtMMPdjRfR2R9P1)R;q5;US&`Tcw}^<%vlej!|J)*+<4{X1B#lT*vj%<%K>D&BqOdWfdN8#D>05C7wvdFxTfV9O^ylc}fb+J0 z{CNEHlb_+toEaQ?v)F%)$5e?wAfz5NlH^<9`0hi{nWfQnIzA_`^S0hUu#t3I${-r_ zvHAX06vTt5{jm4B08kYK@=?GDlPCZ^U`^a^@A1t48y}zl&#t|urbhsMdZsIlrR3!u zhGYv_;Z?F}%C&2tQ;mk-G&eh|;=)0$r~jsHZEPR>#~@$8Sn!@66roTQL6Jer0kFd& z^XVT$r#4!SPX4KT8-sP4+(_6i!|ljvakgP)17E)ai(pf+D-8{U__DvYFO=-wU8=gv zY1EOq%*HAReQJ(vnRkwZw6LfsT3g4Xjy5^mWsK64FxAd}RdscP%O>yc?p3<^aM`L5N#dsm}x4RlfB^}6gPm{?f!9Zj@%#_e4v%RObls_RCnV#?Q6mM++L^5lm2uvSN- znp?Faj#kZsfxVSy_%yxTQITG^)VRe>J12;mF05*(g<_#phB@u>&{Kevtl0^8&vJr}J~D zrv!N@x`bndSW1UoYAnDyn#?v6Jc7P-p-Ca=MkXo$j%qzNGy6OGT&`s8j6L9uJ&!`! zzs<;qS=h)llD`zJ7xvYUiwX<>^{aaS2t6o@D?vG4hRe+@glhR9gwM<83KGJt&YNO`3!E9(1)RT21Y{ zM;vK^_B^;J928|%^)-MiA?|RP7_2sTdVDTwz4ZWK^{-A<^t<<=7{b%?akSNyEPToa zOYZ)41rE6TM%!FkfuKX7Jk3Jni4V)HX1Lz7(dX2umki~JuFEkXRiNv7KZ_!B9IHO~ zWMBq#Vg=wjTyGT)t$W3^>S;-dOE4GxP4?v*IyvJuvW!<4zr0}V+<#}6-14#!ZF?2g zr0{6aYa^TPwzif)LVh+7H4xerahVl&h3`whCX7>AuJ0pdq=A5WeerSy7@rYIz#XWY z`fIcijoonYagEX7hmjg%p}W(oeR8}r~= zJW446H3ZtXdy14mePv5AKFQPJVU@TPIpswz$D2MCh@M8?vhFR4{E`ewPmv%jQf?VQO zICNs$7ESc~y_$JhsF7TvvVQ%Cw{N+BI9n^%?S^`=@H=3Wm@S7M9~IcH?A6#EGXbZQ zJrcR>?|>-8XMl3N@dDhgs^kTUEgbC9y;=!iIdjrMBEdKE?bZ499v^kDSE~bWBzXz4 z!<)Z#E!CAXf7MAH&UV5UNdkdRXAPZVoEA$?^n?>Tpz-M44o($F01zA2zV55$8a_-2 zJ>5~}w|dH1{*eJ_{tPS24XB~>tI>17gHu%iwO;&yK{ywiN+ITrS-o4{Lf;cTC zC@8%|C`t!- z@{JpX(uP1)P#SQdqG!5f;G-wD$!~;9?N`@h&iLTrrO7Xx92oPGH*?s>mQ8VO$?SpB zRrw?u{&;)f(*>x9Wj=v)@9f%t;J{~0El3nxb)2dH{p`go))*hG2;dDSttoht#48`u z!$3zlQ}_^P##t}AwAS0t&p^<7s9_b8V;-vKM(&!es*he08_?`HI<=j*F&FYxAJs8L z(x{JWijmj#v)Ne7Y0f@RuSdUeYHv zU{Sean9HHnF`c>(aB4FWF;fJgqsW?pzmfz-mT%Ze;pgKMcC$KMpxIiGC!6xbvokz_ z)->O9%fxg894{Cp8sp&wTVw(ac*mogH)R`%!)nkq*cLKGx7P5TL}~$$p|JNZ5lu;} zMxiRzY$Jt2Sgqdx)V?qcLWtVPYH|^iHuT*0++64pT#X9>R{-A^)()VU`$AcikdQ!7 z3{Gd7{?&5^hC;8`?L#m@UUjy7YV#toH8Rg#)(p+?_;B}9sU;gbJ8gMPRh5qNmOAP9$SVUUdZ8FKYHF)!Zi!>Xh)IE=W9|lZo5#>CD=yDW)Mm@Ocz$ueS(}|P|Cum z?hgy_U}IZb;Y^@Y&Uww!IS0v`W!J=A(y+c)2*p<=6asGm2WCizRfNV=Nv>OE-9g}h zqZh{DjFB?(}bJAf`5>g(lXWvc~iU5Z_7LTILv^Iwq6iqM$g zYI@VR1ry`0@+KblEL+FDPLe)SNc4CtkH2Pg=qe_Emd|NGFAPiw6HAxqdNv2mdAke6 zstYp4QBc^ANUFPXJsW95dhV@$Sy$Kp8{*g;#<~Mx>~ZY!hmNIkt$M|5sH^RGbMCW7 z{x~Ab1(mV+DFjB%8&wbXQhshgRDcE^h+U1MfgJ~P7Hmb^v)t zV$#Y^n?r{(p+|RJlxTa=fQIZPagBYYwmjvE;`3uBTmR{P(KNx+ElbO91eDP;qv{7_ zz8?Wpa|1btW2^lZWzC7NwSsRYF*l!G&f}%Lz`QQ-F1I|>6>g`bb81$T5D3(J#W-JL z7iByvbDdd0^W<2@T(XEOqpGF4jcM*ABC+%BGw@kX9~3RjHL3o@TFaJ1**9)*OqZ@^ zXn44ePaR=s&BO=`ls&g19qeqa8XF&8`mzeTyw-gLekf9O?TfC&L`K3G%n=T0Msx7n8qHN-+{sMo%w{y-u>;gK#IftndNE5gMuFB~ifGmmK7(z76Q57Q zRMlNmgh7Xe_(i4}VZ(dVNoJ$vf1aP!+)fL9RS3YA_hvtR|KUTKZVpXo0E1n-{ut;| zfgL&yT$D~%pb2KAPSHkDsi&g`zI@p`xA-ZLwmHPBZOJE_GB!3g_wq3NKQ+j|6gQ!Y z^gkcN9tu;jvO6Rt|RCQK$W|o?gKRW&*UpjDw~>0#DaQ| zX2<1-={VXnBV10xx!BB1iN)wX3))N|zKTi>^6>ZpkTFx5m=4zRnqW;7dwuw-m?pW7}8@ZuceC+<=uV<<~&_%Bu^+ox*TJEa%BX_E@ zmRj^w^4j+@Qg1CiDb$CmP2vC7)S2D+e}7?Y>srb zRDuNjD=r{D=I6l-^ zqU~>}SF_21%DG?D@0n^qeV{h;YplDso{wYkeSIQ@$D(L9-_~8n{af5Zx1+l7hGn3M zzSnTzff1X{U`NxEZ>bI1V9w{~9I~&@+c&CBtG2$e{;p_PA5cMm%!{hEnPq?;<(X{u z94s!-dZc>TjN!w1`(00X-IpamX(TSuJGR!B_50dg3W-19p7sipU?#~ zw{#gcz&|BJSpmATIbXPjYL-zD8~xNjFLT;eU9hIU1-4urL1-05*^pf@vki?v`xD6p zE#>(5RrN-)zQ#nJKdSaXRu?plRMBOyv=jsA7hDFZ!^~x_np%*mm}E8ha|WOxy*$;xd+X!lqY zkHmXl*n!msiYX^yWF0*%%RHby9OF@u6Q0z@6}-=V`ItH%Z5RoKU3oLJdu-_oF9$SN z$d{e^QItJ2$ldk&x-V@v-A#Qy@fL^7j>HA!oBDhrD{PK`Z~0pM-|@B0x4%vhJ_Eg@5s0 zY&`YJ^Xw>Z>EB273J$ew5g&vCDUaZO>I;r$Jv z_p0V3D;dK-R#p+0DG%roZMSd_63i~oNP2{SE<8i(DTvR15*-lzr&6u5@34A#G|$^o z^aiu~Wu0j2S$r7?j%?uRU;YUm?FV0j)dDMMtfvr?6L*BT=~&M?8UBZUm1lmAUael$ zo{`B@uN9sX$>2}YwibC1t+0kEWHos7AkQ=&nAdXKw?tyw-tTjV-?!dkk8j1v@i^`Y zx?5N5!iWD=?NAohS+>d|s@PHOo8zk~&hO|SSE@&7uZfp!eQzqdSW}$+K;PSH&Hc{A zDxjH4<(_}?oBu{9jj?=RBzV#A@``n=o<({;t3UkW3+a)_8p$?95s%msFL2rv4_$X# zT-@?J-B#%x-L+JUT*5{j`*%p3vqRs-hpcGs6H`aPyMdx-+}&bd3v{W-_l*= zrs-)nRTl|tiPyWLdyt`LwjHE6U#nG)SBi-8*NVce6jhJkb=Qg@(cisn?K`zgp678c zc#100ZF;23d$ttcR)xR0EZ3gsb^Mbwk_u}IsFESNF65hsg28Xj!Yjk3MlyrKI&)su?}O&W-it-vSK+y;F*Dgoy#4(6ebFfV^1T!qogb@#UrS^=kfi=T5x9A~ zMPl%}_}lUwWmMbtsCJS3-c=x5idaij3$vY7z@qUutN##tS8?*{WA7!ZE%OQ?*3ZT8 zWYR7V+0qPpHM?+Yf^YG?_o`nZ#CHMb$*7WfNb?KxQ80avFe?hPj6#g^mRMNLv4V&H zzgUPq=SO(9hF#_=7SF8yHCL?fFX|6Dm}*|Qq4)Ug`zzucBL6Y5)}xuC{5=1P^r zvWFo@6n5oYM!tHp@@DR~_bB;%b$pu{-pARV$obx)oO=fCX6FLZceUnSrrYG#_W@0( zvt+FNr{9~#-WSa+|1a46=gTXnk`Ix3J#L#kmv6+Fl{U{`C_@u=AzUkneqv@e#EkX7 zHn&gp9>m(N6tjIRPpetw`rdi6Qm_l}e7!$*k5$urxAl7QT=ddHfL9fE*t@ml05BkgfKKFS`dy>wLG?O|jU$s^7zB`%qT*$yLz3+$I zp^|E}8oPujHopJ1x3L%Bv9k2Oi|t3L$JV9y?Q3ll_rCmHcPzbc3;8gsqz5D>%IGp{F|DY!6l#8)u>Hgk30sKX$HiBC$0dXXIm= zE2P2srJ-h4;E>-}`q-Y$i*RRe-uKkLBe~}!XM2-P{^5jStCX+h6q=nP;@ks!NbS@f z`%B@Ll86ChAdwd<*ImCeC7!DcCyJ^&0Vprjj{UWE#<9u)@?a+^^o(QLaIWr=e#@s< z>`Y!bWtE;*4D~tB7tWy}(?Z%uYqmdh7U#LQeccbl`BUvx|IUviH-g6#-Q;4+YT4ql m4_usA2X>OnByIMM{?hjYynCB|!$E2O-3PTf;Yk+L?C}rZKy!`& literal 0 HcmV?d00001 From 677cf6e23b6ac72ed53c5fb320400a5ab41aa511 Mon Sep 17 00:00:00 2001 From: Eunju Kim Date: Wed, 8 Apr 2020 22:20:02 -0700 Subject: [PATCH 07/33] Add design sketch for new requirements --- .../images/Redis_MacRange.png | Bin 0 -> 18061 bytes .../images/Redis_MacState.png | Bin 0 -> 31516 bytes .../visionary_design/images/mac_structure.png | Bin 30978 -> 0 bytes .../images/redis_mac_mapping.png | Bin 74491 -> 0 bytes docs/visionary_design/macmanager.adoc | Bin 15422 -> 14828 bytes 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/visionary_design/images/Redis_MacRange.png create mode 100644 docs/visionary_design/images/Redis_MacState.png delete mode 100644 docs/visionary_design/images/mac_structure.png delete mode 100644 docs/visionary_design/images/redis_mac_mapping.png diff --git a/docs/visionary_design/images/Redis_MacRange.png b/docs/visionary_design/images/Redis_MacRange.png new file mode 100644 index 0000000000000000000000000000000000000000..cde542215faea9367c5611e6014cfe3394045422 GIT binary patch literal 18061 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 S&Igw-L`_*ssrdHY=l=ue_xYUw literal 0 HcmV?d00001 diff --git a/docs/visionary_design/images/mac_structure.png b/docs/visionary_design/images/mac_structure.png deleted file mode 100644 index c46b118f1722910593e10c7713d2564ddf9d3d85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30978 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 diff --git a/docs/visionary_design/images/redis_mac_mapping.png b/docs/visionary_design/images/redis_mac_mapping.png deleted file mode 100644 index 09fab4f0f383dfacf3c975e3f54a923395399394..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74491 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

tEMyQrNxb}C8o8o@ByvTaE&Kzr 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 G2>1_K1vqm6 diff --git a/services/mac_manager/lib/alcor_common_lib-0.1.0-SNAPSHOT.jar b/services/mac_manager/lib/alcor_common_lib-0.1.0-SNAPSHOT.jar deleted file mode 100644 index b69f5a443df6127989cd535f53143f97ca4dfb31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57551 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 F`+spTowNV| diff --git a/services/mac_manager/pom.xml b/services/mac_manager/pom.xml index dbe523587..47f4a2a45 100644 --- a/services/mac_manager/pom.xml +++ b/services/mac_manager/pom.xml @@ -50,38 +50,11 @@ lombok 1.18.0 - - com.futurewei.alcor.common - alcor_common_lib - 0.1.0 - system - ${pom.basedir}/lib/alcor_common_lib-0.1.0-SNAPSHOT.jar - - - mysql - mysql-connector-java - runtime - org.apache.commons commons-pool2 2.4.2 - - io.grpc - grpc-netty-shaded - 1.23.0 - - - io.grpc - grpc-protobuf - 1.23.0 - - - io.grpc - grpc-stub - 1.23.0 - com.googlecode.json-simple json-simple @@ -96,12 +69,6 @@ ignite-core 2.8.0 - - io.grpc - protoc-gen-grpc-java - 1.23.0 - pom - org.springframework.boot spring-boot-starter-test @@ -113,7 +80,12 @@ - + + com.futurewei.alcor.common + AlcorCommonLib + 0.1.0-SNAPSHOT + compile + diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java index c4af72ba6..fe33c99c2 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java @@ -45,14 +45,13 @@ public class MacController { @RequestMapping( method = GET, - value = {"/macaddress/{macaddress}", "/v4/macaddress/{macaddress}"}) + value = {"/macs/{macaddress}", "/v4/macaddress/{macaddress}"}) public MacStateJson getMacStateByMacAddress(@PathVariable String macaddress) throws Exception { MacState macState = null; try { RestPreconditionsUtil.verifyParameterNotNullorEmpty(macaddress); - RestPreconditionsUtil.verifyResourceFound(macaddress); macState = this.service.getMacStateByMacAddress(macaddress); } catch (ParameterNullOrEmptyException e) { //TODO: REST error code @@ -68,7 +67,7 @@ public MacStateJson getMacStateByMacAddress(@PathVariable String macaddress) thr @RequestMapping( method = POST, - value = {"/mac", "/v4/mac"}) + value = {"/macs", "/v4/macs"}) @ResponseStatus(HttpStatus.CREATED) public MacStateJson createMacState(@RequestBody MacStateJson resource) throws Exception { MacState macState = null; @@ -90,13 +89,12 @@ public MacStateJson createMacState(@RequestBody MacStateJson resource) throws Ex @RequestMapping( method = DELETE, - value = {"/mac/{macaddress}", "/v4/mac/{macaddress}"}) + value = {"/macs/{macaddress}", "/v4/macs/{macaddress}"}) public ResponseId deleteMacState(@PathVariable String macaddress) throws Exception { MacState macState = null; try { RestPreconditionsUtil.verifyParameterNotNullorEmpty(macaddress); - RestPreconditionsUtil.verifyResourceFound(macaddress); macState = service.releaseMac(macaddress); } catch (ParameterNullOrEmptyException e) { throw new Exception(e); diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java index e07609193..781b81913 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java @@ -33,7 +33,6 @@ public class MacState implements Serializable { private String vpcId; @JsonProperty("port_id") - private String portId; public MacState() { diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/RestPreconditionsUtil.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/RestPreconditionsUtil.java index 4dacace64..4c44e4267 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/RestPreconditionsUtil.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/RestPreconditionsUtil.java @@ -21,34 +21,12 @@ import org.thymeleaf.util.StringUtils; public class RestPreconditionsUtil { - public static T verifyResourceFound(T resource) throws ResourceNotFoundException { - if (resource == null) throw new ResourceNotFoundException(); - - //TODO: Check resource exists in the repo - - return resource; - } - - public static T verifyResourceNotExists(T resource) throws ResourcePreExistenceException { - if (resource == null) throw new ResourcePreExistenceException(); - - //TODO: Check resource does not exist in the repo - - return resource; - } - public static void verifyParameterNotNullorEmpty(String resourceId) throws ParameterNullOrEmptyException { if (StringUtils.isEmpty(resourceId)) { throw new ParameterNullOrEmptyException("Empty parameter"); } } - public static void verifyParameterEqual(String expectedResourceId, String resourceId) throws ParameterUnexpectedValueException { - if (StringUtils.isEmpty(resourceId) || !resourceId.equalsIgnoreCase(expectedResourceId)) { - throw new ParameterUnexpectedValueException("Expeceted value: " + expectedResourceId + " | actual: " + resourceId); - } - } - public static void verifyParameterNotNullorEmpty(MacState resource) throws ParameterNullOrEmptyException { if (resource == null) { throw new ParameterNullOrEmptyException("null parameter"); From 62957d39e628a69f365dcd6c0fe2fd752985ff22 Mon Sep 17 00:00:00 2001 From: Eunju Kim Date: Fri, 10 Apr 2020 18:41:14 -0700 Subject: [PATCH 11/33] [Microservices] Mac manager - updated pictures and unit test cases --- .../images/Redis_MacRange.png | Bin 18061 -> 18187 bytes .../macmanager/MacManagerApplication.java | 6 +- .../MacManagerApplicationTests.java | 54 ++++-------------- 3 files changed, 15 insertions(+), 45 deletions(-) diff --git a/docs/visionary_design/images/Redis_MacRange.png b/docs/visionary_design/images/Redis_MacRange.png index cde542215faea9367c5611e6014cfe3394045422..a496a64f6fcbc44cad504b077bfbbd3e0a83881b 100644 GIT binary patch literal 18187 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 literal 18061 zcmd742UJsQ*EO2Zd+1%dL8XNbQbJJ>sR|aPgVLpn^xi>=f=I7Yr3yk&gb;d1KtMpM zg7nZ^Aa|qZ9R0pK?tQ=i{ojAwI|dF$OxSxr`&oOfIoF&kkvdwc)k91yhnR@z$02!;)JL7%}cV@FkYqL!FdJVQv%I{Y;K9GtC{&t-i_~9 zn>I=&?wq6>cxSk-`ZYE8lux`HD}V5A<)puU&VMs{law=rlBJU;gi^_#D}hpps47xJ ziHNfmDnbmrk@oMt@!}!1kV&J@-pU=D2&=AW2BGN&PhDoE2wtTywFci4dYr9|uOEi! z2VRU-nB3hL&E8h-m({adle3sSFvKZq4t?t)q`_1-kvRIy8qa5oRP@(hL)|@x9kRB0|}WgFo;Z4HY%)3mWbkjUr(I zRsw-!ZFWeT!%l0QG!0QKt4U$vCwnIkdRXH}Eh6U=+4xQFY^|5=#8ITgD;k{pT&U&( zeTFo=GyME9VY1H4X34J(Io*X^gCBS085$c;iIY1>D@EgA+C6{01C4407i20I>GF8cnIRSG-68AX zwR@6e6mO=7Ep$p#k{_j-mi0}^d?CS;Jal`C>`VGMT0nR0Hr99 zH(1%!)dmf;BRC)-dP>lme0BwA@6b$J;4NWFh-aqRFk@Q@Y zu`ZZJIVUi&vT0Em3PvZP4`Y(?cr8f}%#BD7{IooM<9*5*uu1zZHY1xQG(>~S4O5T< zioq<*B(Qn?b5JliNHDRTfKefXIjU1jQ!=Q%ig+AP2G?98{!o7JPzz%9{oZ<8s{4S~ z2SrVx7@7zgFCTQH8hT=8Z%sJhY9r-*yYv(ficsTbB*P=?Bz91931M=n*vkm2n+u%A z3q)?+54X${W@YPk%h_f&o8Q?;juG)o@h&G&hWL?^k#g5xs5PFtK3vfJ?eKaio=Zc= zQj+vmSE~p6V=ExM>RRTYw^m~#If$XPKq*oRL9xlTmpI78 zlNrRgXgRU~Kb#F7Tak5B(fM)#%E!VvV>y1rCi&a`35ncO-}Dj zD~UEp@=ykYE5J+3-Y8jRKNxjJK4*vr39FxZaJR5=lwL2 zk#@o)DX*_A*|h!ggZ3b)k^iQZ-(r)`cRuW1p3Ie_S>bv={{U*viG2Fl`)fOnzRNm#n~!-D_f=zQgL( zQSA|eg~wCQ6X$3@1u~_?b2TE)knw9!AYGc%08yqCp$Ww3|Kc05;*pNNs|Nl8nNt3k z4u8Y)5K2jv=M&u0gFI);zy-HOGh`i)6#CtkeI&pAJkDo3A&Z}!(-OT!lg}xLFO8X6 zlD~&{0HctM^gkW*7kIoSb~GCdIoo%{){2EBH~Y&1Iq;t zB&ei>FmfbN4tL$E``)FNr=dg^uNJZVt!Q%l+v}|Y&H266u?X}6{A?j#pgi#RF~-Cq zO|W|=9RaU|Op>0qy}4Hb10~iX2z(Q=pC?E3r?!aG7Qe2y5#NFGm^53`mUW>RGwzBW;f8c&eVB_-H^^EMo zDVhVaVX08N)Yd^@xpfLNJoa%n;vL0$VrUo*9nu59i7dRfiv9;1MgphV%PQZE+a~KA zdx)GxcR!Q+4c7R4=wVAF^bQ;6eK}+t>c?!w3EZ~*WIXv<*Fq;|;2@ONPbLlmOsQqx zdnDnaZK|fEz@)>2kK0^CQOX!365FklhksOY}$%(oLV=3MBPA&TM0gkjyUDu zV;rDoT{AJG8o%ZgGOrF!C&pciNrw|0a*@H=l{Hi6m?Y$+a`8Jt{f0j0R5)mGp9wq; zKMGgeu|B*1B5quj+#*F_wa}Sf@*(v&r-Yr9f?;R|v{{H8>G#wgPG3n{F}q(4H5>CF zvSs;T6jxmF)~6O7Q>bJ^w3&S_ySp%$?*;|>jp)6+f^mp~$5_zh%C+nYhqE27p;)7q zr-|Mya0jK5xl62;-c|;V1Ow3f7Cpx{>1}1nA(1!-&&DO2hv>&lo74u!f=jk_C%+2H z>-n%*Ogb1kkqy*mm|<_Q$3n70oX&b8!jqlQF^$ZTnvt5uX)tHmpxLX>@Fe`bUJ#Le zCYNtM7G5(b_&&Oy8}`8>$|S9o*+4>LfmXiv)02J?;z`cTtGBZZo)7pXR6+s}m5}X3 zQ)5@gBFJkwb=|7CmHkf2*aL+}n80v@?DuO4;fiI&(E^u9EA+D@tsU>kQqOVKTiXbh7#M z6ZsBYoou`iF0t<2MH#!qr=yilocl#Ga)OQMdX8XiHveAw770O}m0jjw$B;(AWVrkZ(Nuw69RZ1((#M|m24`ITU3cslu0;`k|-)P=_ZXAininCUiTTM?TwJx_$zpefRJpak78q<*@X8heeX9?g<|BdV<`ce0OGLnjc>m zv%%B5%tDJu)@3ZhIJjB^Rg*kk=piB9i`9#AkKEe{4zdB?MET%s-D0GT1`$qbXpA0x zZq425&>wU^AyO(M{!G;Hc6_0h3sTVWAz7M`L!PZp=r-5jJxP1k+DNvw`~aCp-pwKk zYU5gSskn$ekftfF6DgR=Gv;S-6RvF5L(SL;$$S$K_`o)q!Wr7X2pU1?(oLwGo_Y4P zR6nj;dBLF<4stw786RWzdZx**une43L*I!UU-&DhwK=EW#X*dIQr0u{?&q@Co1Bg5 z7-NpE@rwv`sUP6~HvP0}wZKJ;kyLYL0S1QGEoJ=x}4!!a1u zUf?gcp`KS8l#H~($$%W2Z?v(2?Q|KN2^n zIs|ED&}4Fh?9X%_U*|ZpeS#M#_k&QA;a_L{TTo7dPM+2$E+daU|KE!Yn*+7ubiJ+QICmWkT>J8a{^;FyJY0@H%$7&e{s(LNMZYXiN`DZ`|AcbRCg+}*~zipUWW-2 zlIrl7>UcGu&Xa>pVY7w4Wk_kX9Q4-hr@8WzvK}hSU)!;d*^y0*wmOQ>&Ll$R_R!5R zNeH)nb5n^nY;MR~`%wL<8L?&o;jYa!H1P7q!Uy-w?ikwRl_X1QjaxS9@oFQTJS0*) zje`0G+r&VWl~hJPxWPRuEp{u9cKbbX=3bm@gBs()4zteH(?dDahBzi7KHDHL^uyjE zCH!G_*KPpkfV{lvve!f4n<$ zWjg*8ESxWAF2(kN9ty)-XfgH<3K(??Y=mLB(<`wax1#+_y%gm81vsXN2<8?z^M8El zCU&5L6N<@PW`2?9p!|^98&RN^eW^-~U*Gg%Cv?lLYdC1=VOxSuF)K}_@Lc%?_5S82 zQnUc)ndoar>KnJ>S%hp8;rlG(2Lf^>W;JLMh|=eZ9|4hOK2`?Kb#S>Ua-8)?ueQo+ zZkRkPAZ-2WMa(!*S6TV|{yxoyo(CzC+oxMQGVL~GTHEBS4>7o(oFSQ5kjRmVRe9x| zYnRGbT!e;YT9+cL;f&m-LSdZ0S515c-Kki=d38VA09yix(c&|GR2+-tJJg4ON#grV zQ@4;Ybz6m1?1F=iaP+`-b7hB5#&z%7CmOjaTouqM^L-ZCm3-l#54CQXL%}!Ua+Tk1 z=5ZzJ#F%7s6nrwg5Zy;IDJsWNX(d<7&}Y@M3`0i@5VXgaUHGDA@>R*m8FiMASbPwX z#j~@#8J3@8(^c%cN*GQUm~}t-Tct~Ec2>Lon%oNtot&OOPGbf}|4+CLc zjCb$zIU{=VQv`+Ez}V-)gZfXxk&DfyB`Nm}4=->cLeDsEYpz^?REF$_aHTt0X@`UB zN^mj^FLPH8XZKdo;tt~;W4!sbM6rF`POQFe7Fwm{i2HEK{@QvU>Ie9FRUkXf&G77wS`zNl+FMkJnX?I`DZ$coI1Os- z@yoFt&KVw$&d3=Zl&|nrXWQe7>FNaoi@~m!^CpJX!?RIJN6(kRzGrgug()G6R8p~x z?}d5q-ZL!Cf{{Af)f$o}v^?*-1}?}I(>k;Qzaa1+hh=I)rS;^qzLu18{{TRYdP>M+ z&aIQaRp!{GuR5+iM!sHIEcY-_u#{8-Y8G$hp4eR2gLflnBPgY2Z3(I%(BHXFD=%;P z|F&-X;rjb(N>w0)=7Qnx0(&q%+xnIGbO=^_DNwb&Kl;VC;741%fmRU_*X+qZT<$9UT= zRrP}g3Lev!gDV0}OkJx8hJLW)?Rh){pW%cs8AqSPI|JygdnN3{Q;fUg{cg1}g|XqU zi8sQ!IQXxsFE9-Y69>Ewh4fI$j8ZVmfRar$E+Y@`c!fTy^&V~Us}{TY>M_I8TUpLn{<#myuGl0Qvx$4K zj!)-%(8GgJuBDk$`n3&FX$x|V8~V0>Y0hK0RkWo{mfPveY1gDeIAcJQ;h96@Ic=Ql zQ$(Z@3`cU`Kdlq;FcJWdXG1>3#CEvoQG}ayF1?5j@O&ac>go{?4|)v}Wz6}7XkE2h zE$k4n$O!qoMPKVB^|e>jwP#lo$I0ZG6B1OLJvDizVHIKo+Kb#H!wou? zC6sD8mC-U2p=_E$gr_R)6LstcWIvOqx_Nb!s|Yi<+y7Psbu@);e;YO47LNv?31py4JzET9WJfE})$K+aCQ!Ayb|3U&| z!o+?EB6je~0LQ%HZvtqzo_6iD<)U9SEd%#Igl^#~6pV@^QaoHvK>R@nUx^Sqt{PzuxW%kQB|GSwjaY*?HT8h_iR4I=rABR9NNGgUA#8xSGR zOwfN}q^evkLA=}hHh&T*TfHyxLr=aZsCbIl5AOKpoD8p;q?;w&X22N{b3i z5|Uw;VyI}8_oA~t=rBtv{MwTW8*0pracm#csV?o0tOVEMyc~TyLN{A=XZmbM>UYN; z#N~C#Ebsl}!WKC5%y5)pjogh>gIfCgcH2B_B9Y*~uCG8%M^k4i-xqR~_{s;*D34d; zW{bk;$}C6Dxy~Hkh(@^j*~k$`YrzP7i4=eirE)|G+C)3;ehd8T7Jt^+4qT@?_{Yd@ zdErEjd8QW$?YOHz1i8(<9b7j}7Mr|G5+22_SEipu6GGyCTCD6^s21-f`-8n7|3~sQ z-31?|jcesE>Z|ccn}t2phmXp=bg!DqXVis9*>WX#$o{%k*-D2n=&dYpq7<8A{i}W7 zxD2jmkf_-={zYS)^5p|jcjI^sPVEMTBMV-OIBF0HqUdpcC4PEO)TPkxMlz_1$Mj?VYNpm>4YIZxLVE#2kAS*zrC;0Q*u%5J zmdVAIwiwAJyD!Tt5?OD!m4-JvizW%C8Bg&U)pjK$o_X}WDzu_2Raan5AS^QHxNRW+ zWjlHN&o)VWp%wKY{&a~=CJh@Tt{7C_vWn4vp%%Yz29K;1H<0NuGboskDPgD7RVrNf z3mB$2=}{#!317N$(yGHaz!6gHK;L90-9+^ZRC{P96b&eRUC_RTy%tzd8ayPmmezU~ z%M1XL%NkQqk|(-pm2Fn}q+3+2PX&-;k0bM%i^Ep7(E=H994bu|+7}y+l8~)BB9T@% zw3va=bDP`F&Ye;}@q3n$dsaof)cS^w7)q7vENfaV?`A!^G73*89R$)k-h=jtnQPD~ zM@19*v`PY>J06ri+DI=bcxtb0&@A_@HreM2<&@SJK?<+9=ygJGxQL=_o1x!Q1-a{3_*WVWhhBK_|}q z_1c^O?;2G#VX{P(>mKUtzc)M3O;n7SBK{nQ_!2zG{&|>odyb2p>^dB;Dko6R8~$_eL8O<~aOB5S|7n7?^QGbWQ|Mp==8MrI zOHDw(`R~qIg+29b{+Yoq?ljw+gOU4Wow_C;W?XQKb!N9D(sCr9gjOb%EEfu5D5p* zTs`js#<$S(|3a7VZ!+|+`QCr$UalU##|z^!*c;o! zO26)<3f3`lb4~)A=zHFDboE$-2EJo4@b7);u5N)xm~fS&`f=hk6-G43U>G-%8qFw9 z<=uHpQW?6%_z?JXEi~|=#oYeVkq2`yrEZ4W@`NQLW!<1fvER}5_smKkk|!ELIRP5; z)-EG`@oKUJDXpxTWokM;>I-K={Qd2P$+&xRPo8?9g4iA z+TNw7tSi}L&?^9P-Df#OBp0cl02W{_@47?s-TEq&YDg;{?+I66zAwOV7zs+<$=7PK z$|AuIl7gu;l*3FV2IIQ+@5Sr&p+C;(AyA1=sfiJlWzS}{?O?=sQVk`6ONx5&HVUk0;&j0{oNczp zf$1u=xtjKANIl6B*iW^Vk)ZYZxGJ)<*!aLJm(>=$)+fg+?ILI^(KXU?u;5@Y zDck3=Q~Wt++xJ3@jnADyw)}}qsf@_WM?u1ax?`A6=ZKgu?b>+cdnwTE0kf$zG?DcN z)0=QNCSF1fFdZg}|(i?*)K)WSim8_L(p?7o%M zB9Fb@3{R?Ckd=VP&h^Hqp>sS}_lSBbl9^?Zu#&J6C$*9SL*R|UlL}kVR~F}2HPKcv zdfHQ2s}_Pg@PGukeZWB_YuYz6Vyb)(RHZ0u-^rJq=}6iIH0$#=lo#{uSfBSL1yWnl zHE9v9-1Ws%vrxZaxihySX{2BKl3Pp#Z=T?XM^YQu1k<>{L<-zdaa?|v3-P!&T+Jga zPbkiJ2sp*l*VErY1nCk-Ew1Zvt{nDuz7I}w97aLGJ4P7{7tcwV!zUj5u@fDt$~%3U zd-kFEw%HRy9*qeWgKG1%oz7}+>k(3Neart25dKJ(2;p5VTqhVuX zFG|*__p04@TRksYWBw^)iGgqS;5W~QoL>as)M<7tpr~*z%G#GNkp=FU{ZXWnE z=Fg9~SRj-8QRGyjcn+`MoI?b8ijAR#;Os(T^(f{c&BtCgLm+6v&_9xwIAE z)XN_L93U1`%Jh7XW44KN8i4Fri%sFG)+zmr?Tx{kMf$s7)+hQ zf2^CWGo5J*23ICI)v0y9#M1P=o|3vXfR&=SEqQj))`VIlvV%LpBj7aDHzfoB6>Lhw zikY{CB=vk~yeyN)G|{F0=?j`)8MDR$N>(~H!3(~<3im&;NyTJOq}$&23y1Nw*Ia!) zWgt5B7$q$6hSDG59PSeT-kI*SrnFVjh79QM@e5IE^sO4kuNue63%nWRlq?N3wLlqRk0>neZw-|7hXF*j zp5*2?nj2rungV4-KYN@0$qp{DKsGkA*i6Mo@q;*Y z68HKG{3lnlXQUt}Ox>zTd*zT*vd?`F14m9mdlS76T=(TdT-)(!CZ{exec)sH5_VMA z3yaZ3yj62D(Ja-E9sL&erC?jIvby!fqssw0c!gCE`NM3R;FfBF8FR&J9XzS^^IHWz zPSIZ+O;2FiVk%B!wlN$&_XbDh`Rj*@tXFQZ3wA^$!9>&d@8;t(@)pshJ)@^h(S5fC zZWQZ{5~hj)%djlXMc-VICn|D(3iov*b^P`KbMw<~S}gQ#Nc7@+%q*J2bYj(RQ0S$> zc>|6$IS8PTU^7)*M$@!z60|pKH*=lO+}n}+a;#s9+4A(Q22x_xU@e^YG{kA5qaWOK zB0W`XN*$45GbLUpzAiQQfH1}t*P(CF?un?nCXCFKB0WrQUe|WFMIzx@^N-fxKC3iG z>4@r)7@BIMoqBRHNQH^sY3X%KtxF8w_VZ^;#f*Cab_KU_-AEGkfoGKm-O( z3;TTBDLx6aYEVCAV#&@Qt;Netsn0c^?IVlB-sAk(6;-Y7SEeCrne~#jiVbCaYW z9W;?*`_?Om=t&8;k|vi$jfH-PX(hKPl6{U5-5npD^|E`>=XPWT7HzTPnNc#+FnS}| ze;#)N38r69NYEBxbjZglkgb9Ghi!QY@_(%q%Of7v9WQX2lBU>>H4hJpU<^l&@}lf<>^oGsU~%6 z3@pgWIt|OTKvx)5HtD~S)B>aeDcEI(i8y0A|tcNgpjYc`r`NiaRsnM-o+x%fhP zh6i-eRwNoGaOvQwPs$rfEpa<{-5Zc{i}NEt%1Yxcmx~ieVA{P@1AxK;-6x4Sat;iS&l)Ivg7Xg zo7ntPqDB%Y>Gn`Zq$eoHSF1=9amx@atyt-!L-wdJG3vAF)Oh6=M<0lPlf7f8;&+h? z--J}RT$GDNata;()}T&r3brqaXO|prc_Tg8MJeyr5NdH3Nfa_C&2R!Kc==(#TZcZU zI${$eW{6o$P9Ll4KSCwo(XhR^ZGJDBD&MuK6w(1PDkNAq-8>}G@gJZbTx6vrJWcmE z=_3vceKhZkT=nX=9u?Z_{9m3{Pd7;zR@g5NzBr{k5ZR9`3NF`42GS zgTGfmkijG<$Z5j;%>{gWKi?|CG__eJr#Cfx52^n$v;bYF#g2z7Myl*G^LK{Fc1iuj zLXMtHH|8H+K%}E_FIt8T7wA46Nr%OjjR-Z^P^Xu~R6JMv3+*U$@Dzz_CS*G;nD_7m zl}O}BiRjT>Im^@up`ox{m6n_xC9@%WHr#ugh730ux6mx^Fp;^Xve(r{He_IaW=QL| z%Z6iyr>OGvsL9IPDw9D)?B_nnny=Iy+4~a**~0^@eODox){s4q{;8g;;pCcJNP{Va zLV?vU>&tLi0BkL)1i**`K-u zG=on=7Zm%aTEOW96}UdNnV!tQ9+-1q(S-!GpQ+B~B?ZllAbtXYjbVm^f`(D2l6MwN zK0W&HBmYdFH|)MVkYc|aLoX5u7>X<^I@uyM%*lZ^G{*{fB;+l%Z9CH)={&B2E=r1-O$yBmB61 zE(>fcP+^%bLC4>T!RniGEdc?-GTe2v{?P&{me|qgFvqP(oavgP!*({`SASmwa*!uP z>eYYHUG=Y?_}?8SKxfZ7>a{v6^XSIRLe6G;UJ0oyM=)X1{_>0En;hqJA;O&zYM8Dp zOqV~sb_)CHC-&1t$tHbfrQTWfUmYd{N|N{#v0R+@|Ao}KAG!<#H`dFzBZvM1q19kxdq!p96?I+2BmAP_G%*LVh zwpfzb%P}NZv+kH)pw!fTFDIJL<|Ig1%+k|x_oFOfzA#6EHBJAxYk?!RUdxcw+{I*@ z-HBF<29we7h46CS;H`o<@pqXN#IB}zo0Q5hdFz_EuEf+&L32F31mB?4-XR$cjRCmJi3w24F^9N~k0V}(AqE}r`@H+79H4v*1wE*q|yDum}*6)7- zFQVlJ#C3NaX6`VSK%G6lt4~JaXE)B4!FTiMuB;xFYJWGhNTyzjG(fcbC@C~P;uE03 zeVdizgZE6W0<2GCMDlT`K3`2qbkkg}t*~VOs z@s{~osAR9iOZUJ#yy6l0ASJ5wc0YuIN_F$x7tqY3oO6_8ZQ0dBUYC4IPz%AmX@Tcn zHcEtY&&a>~2aK19=x0-UL>;}bv#hu@iUQV8AO4wY-%!Qm>tWIm0$%cif8Dmk+NG*5 zXg9be7^L}RbS&HCN}a+_c!dvCKHOtMYFv9=eXw7ga{WTmE1o3gH{skepJ_~uw!c_u zb?_w5#osANjcjX6QcK==Qsgd+q@JLOazee6XI=vG%Q)>1`9AaNscpKw^iTRrNkE)r z07#wg5zXRCs&{L?TdXGl)%RT#Q$IOGo%^ZoNkp36Iu>prLEi8;JS`ui1Hs0Fybrn9 zSELhwKZ>>K z5(50ceDjb<5d$!JF^!u{dRlwW{cawoIb3s|jqM`z`}R0Vk5&FX{bWAB1Q08$v6&N2 zpJu7q>HTxv`zI`)Th|QS5H%VuBuwwGUkR)K(k{-cji}KPIMbg^)1a-WKM^Gh++8KSOl4~4n&W(|YV%&8Rs0v)H>XQgi_~Z2q8}{;(b3`uF zV`I=v`3sYy3{o>Pbzei8y^n4rGmeG&`^wAx_-5}s=jnsQ3tMR)+8&>BGSbczBOQX1 zA_^N+oF80zR&2M|&Q#z`0(6&3Elj}Y3)v9b=)=BTglE)y082Vi0#;N4~t6rQkn7+ur5RonvO;wD3`vB5mId zIPaeouJA7K8fs57-o%?_#Mm*cbufx~p6dP8?vpJ7Yz}dA1y8SJH`=X9zxO%08)Bv2 z!2^0qsKysVqru%q)Yba#-kU|}{@n5-Bs0l8%v3G`wDBN+J!fb7EX3}9x^XA67~SKu z5?~lhY-s9*1ay7!;p$@QrgX3Eb{#IFpuC&Hy-lGk6UFf?uYYy7DsMl|x=$`)c^}NW zxz(n)wG9Ap`k0E151r>JXNtDRKp^8M0;dpY2Q{fqG5nOV^O^T?smXBjZ&6LZB`kk) z`OfTaEn#X;Z=wo5uPLcj*~Eh4u5y1G5T~yi--mt?`7ALB^9%q>NKN6mL0$x_DvUet znpV!}iV19!5B*ZqL94;0q@QYp`M+0I{HP*92NQ1`v$5&5gkLeDt25-1{-s@CwHOa_ zaSW#pmBZmQUH)jrNC~sF;;};HABr2g#Akv^Rvr8fLb^+d7l68`r_wUg)Uq2u!&JiJ zVqp0+l_gbv(ro*TwOVra`djVWB~YY)lq zY>!xm3h#oZzQW}cxW9Qd{3Xt#ObD z!fTS+BN_`#vOANtm)1wRD|6)yDJ)To__lW2MiadJTCOpDy)6Iz5F;7c{KmmfRgb6( zN-h)`D)!6jVdQd%cx5rhZ{enLEd>e(a|dMw1)_BbBAajCb@U=~vwzqVw>5*9Rc*tw z)0s~2FYKE52I`EuOr2+ZRUZdw;m(tPC)Fntnb(sD68ZUx+3Q>8l^Gvpma?YJgZy$t3B9EE?eG?*AMXaB{27|Z`` zCgFdMn*Xa>36YEh#u6|&9^F1`7VIa-V@<~A(3n9hF$|F?rJWMz zx0{!R#VnnJY@g$6HWBKI6it}#LJZAvWTyxs`OjS4|9s@dDdDgWkmmh`GDYB+7C0tf$hY|1)NFMgD74?ul70)4 zKXrNN)`zB(4^6zl=eD`w+mlVFljnlV+1Fp*=Cl4yj26{Y%XzGTfS}RfU0UM#7xOm% z(X|fWs{?%BN>|Ibc{jFhH>CP|VE4}zK#@qu9Q&5!&CP17IJLyYjG_SvNaiiCI!|D{ zlgVrT^yJ`sJMoo>t;N1HmpuGTfrTso2rMK99+!A3RiB{rR^5(jX6b-F6!1U;-9fPg zQ-Yfdc&m!gx#w!MI)Z1kW{Vu1KS`G!*Tc9z_s!{?undqwxMMq8=#V ztupQT$6I9$Ne{bBx=7|h?ol^tt=-9TX9$jxO>8fgKjpJ6AUt=!kr!*u+dK!{Ofr zR^$#{hVr2gpy#}$rA=3}T(M?cle9fuL0Z#j;?T4l>PWDimrI>j-8R1Dfr2q4Y=JuV zWIdkqTV6L2(Pu**ol^ny-Kq-O7t8>uV&@`WX;iWb%7CCF-pf3_{?-Ag{DM%MI5fbn zwR!LB4#kt>!$MWkUJd9^PqP#IFHf_1-+U!N$81C017C{p1Q& zYZNQ}v_#La$1EevOYkskodZU+r7nMtINyulR?^K)Xw!{JB-8A>JCn-Q;)y+8pOP`A zflJ8}VOmib~G+J<%!z zT1E-bRlIo$rnf-q*4mduroOo1N?1j301}WqVJa>olkVQpu2V_=RyCJ&_Klz)l+k#$MdGf<1JN|}B zh2Wm00;h-L9Km}!%)FRtkTke~fN=ooYAwp+^YqR8pZ;$CN7S{Ut(%e+b{G%Hv9tRd zk}SI4F6LSZVdQa@ZSmZPTD<%)zOtFv%)v-YUXf@~S{5t51W=qXv9Ti^i+jVlOnK1!}N)HR#-|>k4hoK#wQuT*Z^SyOHw*Q|4DD*6h7?!$#I3_5{o0VP>D9E1D_x- z{Lq4O-w(o{UAFBd54dtvJ2x57ONH_wAn$K=mN!hMj^4w z>bfh0>MX01Bu%pld^1ggc(?L%kLzIm4l(dZ!{}d@W%$}@u*sN}9Gk`c@~2=FS;cjr z4R9{-hy!+RctO4JkE)DSdjsA6n`^3y&z?6K?oUt-f z4dh-nv_I&%Y1Ac8*0x=(R8~CGe`hE4@?LjaUDmsFRf2TDlB@LmFpA5smUYdl|Ks9{ zhx_X6Njl}ZV;K>ACQzs;pJ)1Wds#090VA%R2aW#>wvN`+3A zrG=e3UT3L+imIgOL_Sl&UCtg=}ndgj%8!fe90*_k2vW(NK5 zxUy*}%0CV5Jv<=yM2=tfO0)DA3q~3Td zG^>DXZqJj#DeS~OU48mCUXw9(_gl659&#xz3)iIZf%%p68|T;3(VnxsG>|`MBH@eA z_1XUTtr=e4Zf5o|ZW5sz5>6^rFzukRylZXthAlP^AjCfzV0Yzv&Z+IwaFdZg91wsJ zxf#MR$E|S6bS*vlzv(WkHY^$JA`x=G$Bq!dwxYR}DE*Fk1b+j=_IwQ`)<33D|Hozh zf1|P@*%FW{EPMX*(?@%@nrrUm&jH`@A^Q-^>5Rrb?7>R{b~4u;n386_kr`=)fAb6) zzVc0oiPR~q@8T0b3sYX&OY7n2yU_na0zyD)Q*miY2e}e7 z5H#3{d=0Tk)t&d*uc)FSnZ0`^#8>v4oB)+cE*o$f5HA+`VWm^AG?{FNEi7~8S3#Z~ zaIq0ZHHE{%WuiS8fno^QvPnCC4*CLIpv)xE?FL=B&3QQ^Ux$6=31bWRa8gKU9bzaX zUACzhGI0|Zu!@6!jTirv0X%NK`A$tnH~d>xG3Gm?6eJYAygpj8nh78|LxrCc#{gYP zeX$bC!thRNwB$X$W)Zh7QKKmBTuAtg`aYq3Kf0fCs^mmo^&#~<&aXMMZB3k@2=ME> zVt)%J&l*f(!G+AUOzMqkUzEE)k{7Lk!yd`wW~eqwmo{b`Q;OCTAAJe0EU(QCN1hbsZ! zV@ZEXsdL^4yB)h~Gxlb`*?E<=6nXR{@uLOxQWy?`Zq$SB_bIPJKaB`=(pUn8itz!cF<2D$Shmz3d&#~=_X!AT8B!M@=!;Bc>$lj z)$^YN-+*;oAq!^fnS1R;&iE%w*`KYTI4_a&R?xT}25PvSG;zH5VwOq#_vZg$q5VHU zcn+ZO4fm##vH8n8k=j1@Z1>aSM@6y1}XXjhV z&|SE{VEXx27DP|5wO5@_^3SUQ?%n^?m!bUceXk0^4E795DB`&mGLWdF0DOfENbS1T KwQ?oXp#KXd Date: Mon, 13 Apr 2020 11:04:14 -0700 Subject: [PATCH 12/33] [Microservices] Mac manager - added mac range and mac address pool --- .../macmanager/MacManagerApplication.java | 6 +- .../macmanager/config/RedisConfiguration.java | 18 +++ .../macmanager/controller/MacController.java | 49 ++++-- .../dao/MacPoolRedisRepository.java | 71 ++++++++ ...tory.java => MacRangeRedisRepository.java} | 35 ++-- .../macmanager/dao/MacRedisRepository.java | 14 +- .../alcor/macmanager/entity/MacAddress.java | 56 ++++++- .../alcor/macmanager/entity/MacRange.java | 57 +++++++ .../{OuiState.java => MacRangeJson.java} | 24 +-- .../alcor/macmanager/entity/MacState.java | 9 +- .../alcor/macmanager/entity/MacStateJson.java | 8 + .../macmanager/service/MacAddressService.java | 152 ++++++++++-------- .../service/RedisMacRangePublisher.java | 43 +++++ .../macmanager/service/RedisPublisher.java | 1 + .../src/main/resources/application.properties | 5 +- .../MacManagerApplicationTests.java | 54 +++++-- .../controller/MacControllerTest.java | 5 +- 17 files changed, 454 insertions(+), 153 deletions(-) create mode 100644 services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacPoolRedisRepository.java rename services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/{OuiRedisRepository.java => MacRangeRedisRepository.java} (58%) create mode 100644 services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacRange.java rename services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/{OuiState.java => MacRangeJson.java} (69%) create mode 100644 services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/RedisMacRangePublisher.java diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/MacManagerApplication.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/MacManagerApplication.java index 2e4e44a87..cb2c27f3f 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/MacManagerApplication.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/MacManagerApplication.java @@ -6,8 +6,8 @@ @SpringBootApplication public class MacManagerApplication { - public static void main(String[] args) { - SpringApplication.run(MacManagerApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(MacManagerApplication.class, args); + } } diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/config/RedisConfiguration.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/config/RedisConfiguration.java index 84ee6f217..6139f32b5 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/config/RedisConfiguration.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/config/RedisConfiguration.java @@ -20,7 +20,9 @@ import com.futurewei.alcor.common.repo.ICachePublisher; import com.futurewei.alcor.common.service.RedisListener; +import com.futurewei.alcor.macmanager.entity.MacRange; import com.futurewei.alcor.macmanager.entity.MacState; +import com.futurewei.alcor.macmanager.service.RedisMacRangePublisher; import com.futurewei.alcor.macmanager.service.RedisPublisher; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.domain.EntityScan; @@ -62,9 +64,20 @@ public RedisTemplate redisMacTemplate() { template.setKeySerializer(new StringRedisSerializer()); template.setHashValueSerializer(new Jackson2JsonRedisSerializer(MacState.class)); template.setValueSerializer(new Jackson2JsonRedisSerializer(MacState.class)); + template.setEnableTransactionSupport(true); return template; } + @Bean + public RedisTemplate redisMacRangeTemplate() { + final RedisTemplate templateMacRange = new RedisTemplate(); + templateMacRange.setConnectionFactory(lettuceConnectionFactory()); + templateMacRange.setKeySerializer(new StringRedisSerializer()); + templateMacRange.setHashValueSerializer(new Jackson2JsonRedisSerializer(MacRange.class)); + templateMacRange.setValueSerializer(new Jackson2JsonRedisSerializer(MacRange.class)); + templateMacRange.setEnableTransactionSupport(true); + return templateMacRange; + } @Bean MessageListenerAdapter redisListenerInstance() { @@ -84,6 +97,11 @@ ICachePublisher redisMacPublisherInstance() { return new RedisPublisher(redisMacTemplate(), topic()); } + @Bean + ICachePublisher redisMacRangePublisherInstance() { + return new RedisMacRangePublisher(redisMacRangeTemplate(), topic()); + } + @Bean ChannelTopic topic() { return new ChannelTopic("pubsub:queue"); diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java index fe33c99c2..317e92ee0 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java @@ -18,41 +18,58 @@ import com.futurewei.alcor.common.entity.ResponseId; import com.futurewei.alcor.common.exception.ParameterNullOrEmptyException; -import com.futurewei.alcor.common.exception.ResourceNullException; import com.futurewei.alcor.common.exception.ResourcePersistenceException; -import com.futurewei.alcor.macmanager.dao.MacRedisRepository; +import com.futurewei.alcor.macmanager.entity.MacRange; import com.futurewei.alcor.macmanager.entity.MacState; import com.futurewei.alcor.macmanager.entity.MacStateJson; import com.futurewei.alcor.macmanager.service.MacAddressService; import com.futurewei.alcor.macmanager.utils.RestPreconditionsUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.*; -import java.util.Map; +import java.util.Vector; -import static org.springframework.web.bind.annotation.RequestMethod.GET; -import static org.springframework.web.bind.annotation.RequestMethod.POST; -import static org.springframework.web.bind.annotation.RequestMethod.DELETE; +import static org.springframework.web.bind.annotation.RequestMethod.*; @RestController public class MacController { - final String DELIMITER = "/"; - @Autowired private MacAddressService service; + @RequestMapping( method = GET, - value = {"/macs/{macaddress}", "/v4/macaddress/{macaddress}"}) + value = {"/macs/debug", "/v4/macs/debug"}) + public MacStateJson getDebug1() throws Exception { + MacState macState = null; + + if (macState == null) { + //TODO: REST error code + return new MacStateJson(); + } + return new MacStateJson(macState); + } + + @RequestMapping( + method = GET, + value = {"/macs/debug2", "/v4/macs/debug2"}) + public Vector getDebug2() throws Exception { + Vector macRanges = null; + macRanges = service.getActiveMacRanges(); + + return macRanges; + } + + @RequestMapping( + method = GET, + value = {"/macs/{macaddress}", "/v4/macs/{macaddress}"}) public MacStateJson getMacStateByMacAddress(@PathVariable String macaddress) throws Exception { MacState macState = null; - try { RestPreconditionsUtil.verifyParameterNotNullorEmpty(macaddress); - macState = this.service.getMacStateByMacAddress(macaddress); + macState = service.getMacStateByMacAddress(macaddress); } catch (ParameterNullOrEmptyException e) { //TODO: REST error code throw new Exception(e); @@ -71,7 +88,6 @@ public MacStateJson getMacStateByMacAddress(@PathVariable String macaddress) thr @ResponseStatus(HttpStatus.CREATED) public MacStateJson createMacState(@RequestBody MacStateJson resource) throws Exception { MacState macState = null; - try { MacState inMacState = resource.getMacState(); RestPreconditionsUtil.verifyParameterNotNullorEmpty(inMacState); @@ -91,14 +107,13 @@ public MacStateJson createMacState(@RequestBody MacStateJson resource) throws Ex method = DELETE, value = {"/macs/{macaddress}", "/v4/macs/{macaddress}"}) public ResponseId deleteMacState(@PathVariable String macaddress) throws Exception { - MacState macState = null; - + String macAddress = null; try { RestPreconditionsUtil.verifyParameterNotNullorEmpty(macaddress); - macState = service.releaseMac(macaddress); + macAddress = service.releaseMac(macaddress); } catch (ParameterNullOrEmptyException e) { throw new Exception(e); } - return new ResponseId(macState.getMacAddress()); + return new ResponseId(macAddress); } } diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacPoolRedisRepository.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacPoolRedisRepository.java new file mode 100644 index 000000000..9108ff3ec --- /dev/null +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacPoolRedisRepository.java @@ -0,0 +1,71 @@ +/*Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.futurewei.alcor.macmanager.dao; + +import com.futurewei.alcor.common.repo.ICacheRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.SetOperations; +import org.springframework.stereotype.Repository; + +import javax.annotation.PostConstruct; +import java.util.Map; + +@Repository +public class MacPoolRedisRepository implements ICacheRepository { + + private static final String KEY = "mac_pool"; + + private RedisTemplate redisTemplate; + + private SetOperations setOperations; + + @Autowired + public MacPoolRedisRepository(RedisTemplate redisTemplate) { + this.redisTemplate = redisTemplate; + } + + @PostConstruct + private void init() { + setOperations = redisTemplate.opsForSet(); + } + + @Override + public String findItem(String value) { + if (setOperations.isMember(KEY, value)) + return value; + else + return null; + } + + @Override + public Map findAllItems() { + return (Map) setOperations.members(KEY); + } + + @Override + public void addItem(String newItem) { + setOperations.add(KEY, newItem); + } + + @Override + public void deleteItem(String value) { + setOperations.remove(KEY, value); + } + + public String getItem() { + return (String) setOperations.randomMember(KEY); + } +} diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/OuiRedisRepository.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRangeRedisRepository.java similarity index 58% rename from services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/OuiRedisRepository.java rename to services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRangeRedisRepository.java index af49b10e6..03888495d 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/OuiRedisRepository.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRangeRedisRepository.java @@ -14,10 +14,8 @@ */ package com.futurewei.alcor.macmanager.dao; -import com.futurewei.alcor.common.logging.Logger; -import com.futurewei.alcor.common.logging.LoggerFactory; import com.futurewei.alcor.common.repo.ICacheRepository; -import com.futurewei.alcor.macmanager.entity.OuiState; +import com.futurewei.alcor.macmanager.entity.MacRange; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.HashOperations; import org.springframework.data.redis.core.RedisTemplate; @@ -25,43 +23,41 @@ import javax.annotation.PostConstruct; import java.util.Map; -import java.util.logging.Level; @Repository -public class OuiRedisRepository implements ICacheRepository { +public class MacRangeRedisRepository implements ICacheRepository { - private static final String KEY = "OuiState"; + private String KEY = "mac_range"; - private RedisTemplate redisTemplate; + private RedisTemplate redisMacRangeTemplate; private HashOperations hashOperations; @Autowired - public OuiRedisRepository(RedisTemplate redisTemplate) { - this.redisTemplate = redisTemplate; + public MacRangeRedisRepository(RedisTemplate redisMacRangeTemplate) { + + this.redisMacRangeTemplate = redisMacRangeTemplate; } @PostConstruct private void init() { - hashOperations = redisTemplate.opsForHash(); + hashOperations = redisMacRangeTemplate.opsForHash(); } @Override - public OuiState findItem(String id) { + public MacRange findItem(String id) { - return (OuiState) hashOperations.get(KEY, id); + return (MacRange) hashOperations.get(KEY, id); } @Override - public Map findAllItems() { + public Map findAllItems() { return hashOperations.entries(KEY); } @Override - public void addItem(OuiState newItem) { - Logger logger = LoggerFactory.getLogger(); - logger.log(Level.INFO, "oui:" + newItem.getOu()); - hashOperations.put(KEY, newItem.getOu(), newItem.getOui()); + public void addItem(MacRange newItem) { + hashOperations.put(KEY, newItem.getRangeId(), newItem); } @Override @@ -69,7 +65,8 @@ public void deleteItem(String id) { hashOperations.delete(KEY, id); } - public String findOui(String ou) { - return (String) hashOperations.get(KEY, ou); + public void updateItem(MacRange newItem) { + hashOperations.put(KEY, newItem.getRangeId(), newItem); } } + diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRedisRepository.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRedisRepository.java index 06a13b7d4..45fb052fb 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRedisRepository.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRedisRepository.java @@ -15,8 +15,6 @@ package com.futurewei.alcor.macmanager.dao; -import com.futurewei.alcor.common.logging.Logger; -import com.futurewei.alcor.common.logging.LoggerFactory; import com.futurewei.alcor.common.repo.ICacheRepository; import com.futurewei.alcor.macmanager.entity.MacState; import org.springframework.beans.factory.annotation.Autowired; @@ -26,12 +24,11 @@ import javax.annotation.PostConstruct; import java.util.Map; -import java.util.logging.Level; @Repository public class MacRedisRepository implements ICacheRepository { - private String KEY; + private String KEY = "mac_state"; private RedisTemplate redisTemplate; @@ -61,8 +58,6 @@ public Map findAllItems() { @Override public void addItem(MacState newItem) { - Logger logger = LoggerFactory.getLogger(); - logger.log(Level.INFO, "mac address:" + newItem.getMacAddress()); hashOperations.put(KEY, newItem.getMacAddress(), newItem); } @@ -75,16 +70,11 @@ public void updateItem(MacState newItem) { hashOperations.put(KEY, newItem.getMacAddress(), newItem); } - public Map findMacAddressesbyVpcPort(String portId){ - return null; - } - public MacState findMac(String id) { return (MacState) hashOperations.get(KEY, id); } - public void setKey(String key) - { + public void setKey(String key) { KEY = key; } diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacAddress.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacAddress.java index 9f42c7682..fd41b10ff 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacAddress.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacAddress.java @@ -17,18 +17,26 @@ package com.futurewei.alcor.macmanager.entity; -import java.util.concurrent.ThreadLocalRandom; - +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; @Data public class MacAddress { + + public static final String MAC_DELIMITER = "-"; + public static final int NIC_LENGTH = 24; + + @JsonIgnore private String oui; + + @JsonIgnore private String nic; public MacAddress() { + oui = null; + nic = null; } public MacAddress(MacAddress macAddress) { @@ -40,5 +48,49 @@ public MacAddress(String oui, String nic) { this.nic = nic; } + public MacAddress(String strMacAddress) { + if (strMacAddress.length() >= 8) + this.oui = strMacAddress.substring(0, 8); + if (strMacAddress.length() > 8) + this.nic = strMacAddress.substring(9); + } + + public static String longToHex(long number) { + String hex = Long.toHexString(number); + return hex; + } + + public static String hexToMac(String hex) { + int length = MacAddress.NIC_LENGTH / 4; + int lengthDelimiter = Math.round(length / 2) - 1; + hex = hex.toUpperCase(); + while (hex.length() < length) + hex = "0" + hex; + StringBuffer buffer = new StringBuffer(length + lengthDelimiter); + buffer.insert(0, hex); + for (int i = 1; i <= lengthDelimiter; i++) { + buffer.insert(i * 2 + (i - 1), MacAddress.MAC_DELIMITER); + } + return buffer.toString(); + } + + public static String longToMac(long number) { + String mac = hexToMac(Long.toHexString(number)); + return mac; + } + + public static long macToLong(String mac) { + mac = mac.replace(MacAddress.MAC_DELIMITER, ""); + long l = Long.valueOf(mac, 16); + return Long.valueOf(mac, 16); + } + + public String getMacAddress() { + String strMacAddress = oui + MAC_DELIMITER + nic; + return strMacAddress; + } + public void print() { + System.out.println(getMacAddress()); + } } diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacRange.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacRange.java new file mode 100644 index 000000000..5f8c34ae8 --- /dev/null +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacRange.java @@ -0,0 +1,57 @@ +/*Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.futurewei.alcor.macmanager.entity; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + + +@Data +public class MacRange { + @JsonProperty("range_id") + private String rangeId; + + @JsonProperty("from") + private String from; + + @JsonProperty("to") + private String to; + + @JsonProperty("state") + private String state; + + public MacRange() { + } + + public MacRange(MacRange range) { + this(range.rangeId, range.from, range.to, range.state); + } + + public MacRange(String rangeId, String from, String to, String state) { + this.rangeId = rangeId; + this.from = from; + this.to = to; + this.state = state; + } + + public void createDefault(String oui) { + rangeId = new String("range0"); + from = new MacAddress(oui, MacAddress.longToMac(0)).getMacAddress(); + to = new MacAddress(oui, MacAddress.longToMac(MacAddress.NIC_LENGTH)).getMacAddress(); + state = new String("Active"); + } +} + + diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/OuiState.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacRangeJson.java similarity index 69% rename from services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/OuiState.java rename to services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacRangeJson.java index 15e37a090..693a6c5c5 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/OuiState.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacRangeJson.java @@ -16,23 +16,25 @@ import lombok.Data; -import java.io.Serializable; - @Data -public class OuiState implements Serializable { - String ou; //project_id+"/"+vpc_id - String oui; +public class MacRangeJson { + + private MacRange macRange; - public OuiState() { + public MacRangeJson() { } - public OuiState(OuiState state) { - this(state.ou, state.oui); + public MacRangeJson(MacRange macRange) { + this.macRange = macRange; } - public OuiState(String ou, String oui) { - this.ou = ou; - this.oui = oui; + public MacRange getMacRange() { + return macRange; + } + + public void setMacRange(MacRange macRange) { + this.macRange = macRange; } } + diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java index 781b81913..4de6dd7ad 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java @@ -18,6 +18,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; + import java.io.Serializable; @Data @@ -35,19 +36,23 @@ public class MacState implements Serializable { @JsonProperty("port_id") private String portId; + @JsonProperty("active") + private String active; + public MacState() { } public MacState(MacState state) { - this(state.macAddress, state.projectId, state.vpcId, state.portId); + this(state.macAddress, state.projectId, state.vpcId, state.portId, state.active); } - public MacState(String macAddress, String projectId, String vpcId, String portId) { + public MacState(String macAddress, String projectId, String vpcId, String portId, String active) { this.macAddress = macAddress; this.projectId = projectId; this.vpcId = vpcId; this.portId = portId; + this.active = active; } } diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacStateJson.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacStateJson.java index db0ad8cbd..0e15f59ce 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacStateJson.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacStateJson.java @@ -28,5 +28,13 @@ public MacStateJson() { public MacStateJson(MacState macState) { this.macState = macState; } + + public MacState getMacState() { + return macState; + } + + public void setMacState(MacState macState) { + this.macState = macState; + } } diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/MacAddressService.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/MacAddressService.java index 548f1a968..b075fe114 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/MacAddressService.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/MacAddressService.java @@ -14,124 +14,136 @@ */ package com.futurewei.alcor.macmanager.service; +import com.futurewei.alcor.common.exception.ResourceNotFoundException; +import com.futurewei.alcor.macmanager.dao.MacPoolRedisRepository; +import com.futurewei.alcor.macmanager.dao.MacRangeRedisRepository; import com.futurewei.alcor.macmanager.dao.MacRedisRepository; -import com.futurewei.alcor.macmanager.dao.OuiRedisRepository; +import com.futurewei.alcor.macmanager.entity.MacAddress; +import com.futurewei.alcor.macmanager.entity.MacRange; import com.futurewei.alcor.macmanager.entity.MacState; -import com.futurewei.alcor.macmanager.entity.OuiState; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import java.util.HashMap; import java.util.Map; +import java.util.Vector; import java.util.concurrent.ThreadLocalRandom; @Service public class MacAddressService { - final String DELIMITER1 = "/"; - final String DELIMITER2 = "-"; - final int KEY_LENGTH = 8; + final String DELIMITER = "/"; @Autowired - private OuiRedisRepository ouiRedisRepository; + private MacRangeRedisRepository macRangeRedisRepository; + + @Autowired + private MacPoolRedisRepository macPoolRedisRepository; @Autowired private MacRedisRepository macRedisRepository; + @Value("${macmanager.oui}") + private String oui; + + private HashMap macRanges = new HashMap(); + public MacState getMacStateByMacAddress(String macAddress) { - String key = getKey(macAddress); - macRedisRepository.setKey(key); MacState macState = macRedisRepository.findItem(macAddress); return macState; } - public MacState releaseMac(String macAddress) { - String key = getKey(macAddress); - macRedisRepository.setKey(key); + public String releaseMac(String macAddress) throws Exception { MacState macState = macRedisRepository.findItem(macAddress); - macState.setProjectId(""); - macState.setVpcId(""); - macState.setPortId(""); - macRedisRepository.updateItem(macState); - return macState; + if (macState == null) { + ResourceNotFoundException e = new ResourceNotFoundException("MAC address Not Found"); + throw e; + } else { + macPoolRedisRepository.addItem(macAddress); + macRedisRepository.deleteItem(macAddress); + } + return macAddress; } public MacState createMacState(MacState macState) throws Exception { - String macAddress; + MacAddress macAddress = new MacAddress(); String projectId = macState.getProjectId(); String vpcId = macState.getVpcId(); String portId = macState.getPortId(); - String oui = generateOui(projectId, vpcId); - String nic = generateNic(oui, projectId, vpcId, portId); - macAddress = oui + DELIMITER2 + nic; - macState.setMacAddress(macAddress); - return macState; - } - public Map getMacStateByVpcIdPort(String projectId, String vpcId, String portId) { - String hk = makeKey(projectId, vpcId, portId); - String oui = ouiRedisRepository.findOui(hk); - macRedisRepository.setKey(oui); - return macRedisRepository.findMacAddressesbyVpcPort(portId); + String strMacAddress = allocateMacState(macState); + if (strMacAddress != null) { + macState.setMacAddress(strMacAddress); + macRedisRepository.addItem(macState); + } else { + String nic = generateNic(); + macAddress.setOui(oui); + macAddress.setNic(nic); + macState.setMacAddress(macAddress.getMacAddress()); + macRedisRepository.addItem(macState); + } + + return macState; } - private String generateOui(String projectId, String vpcId) { - long randomOui; - String hk = projectId + DELIMITER1 + vpcId; - String oui = ouiRedisRepository.findOui(hk); - if (oui == null) { - while (oui == null) { - randomOui = ThreadLocalRandom.current().nextLong(0, 2 ^ 24); - String ouiTemp = hexToMac(Long.toHexString(randomOui)); - if (macRedisRepository.exisingOui(ouiTemp) == false) - oui = ouiTemp; - } - ouiRedisRepository.addItem(new OuiState(projectId + DELIMITER1 + vpcId, oui)); + private String allocateMacState(MacState macState) { + String strMacAddress = macPoolRedisRepository.getItem(); + if (strMacAddress != null) { + macPoolRedisRepository.deleteItem(strMacAddress); } - return oui; + return strMacAddress; } - private String generateNic(String oui, String projectId, String vpcId, String portId) { + private String generateNic() { String nic = null; + MacAddress macAddress = new MacAddress(); long randomNic; + Long from = (long) 0; + Long to = (long) Math.pow(2, MacAddress.NIC_LENGTH); + + MacRange macRange = getMacRange(); + if (macRange != null) { + from = MacAddress.macToLong(new MacAddress(macRange.getFrom()).getNic()); + to = MacAddress.macToLong(new MacAddress(macRange.getTo()).getNic()); + } - macRedisRepository.setKey(oui); while (nic == null) { - randomNic = ThreadLocalRandom.current().nextLong(0, 2 ^ 24); - String nicTemp = hexToMac(Long.toHexString(randomNic)); - if (macRedisRepository.findMac(nicTemp) == null) { - String macAddress = oui + DELIMITER2 + nicTemp; - macRedisRepository.addItem(new MacState(macAddress, projectId, vpcId, portId)); + randomNic = ThreadLocalRandom.current().nextLong(from, to); + String nicTemp = MacAddress.hexToMac(Long.toHexString(randomNic)); + macAddress.setNic(nicTemp); + if (macRedisRepository.findMac(macAddress.getMacAddress()) == null && macPoolRedisRepository.findItem(macAddress.getMacAddress()) == null) { nic = nicTemp; } } return nic; } - private String hexToMac(String hex) { - hex = hex.toUpperCase(); - while (hex.length() < (KEY_LENGTH - 2)) - hex = "0" + hex; - StringBuffer buffer = new StringBuffer(KEY_LENGTH); - buffer.insert(0, hex); - buffer.insert(2, ":"); - buffer.insert(5, ":"); - - return buffer.toString(); + private MacRange getMacRange() { + MacRange macRange = new MacRange(); + Vector activeMacRanges = getActiveMacRanges(); + int randomIndex = ThreadLocalRandom.current().nextInt(0, activeMacRanges.size()); + return activeMacRanges.get(randomIndex); } - private String getKey(String macAddress) { - String key = macAddress.substring(0, KEY_LENGTH); - return key; - } - - private String makeKey(String projectid, String vpcid, String port) { - String key = projectid; - key = key.concat(DELIMITER1); - key = key.concat(vpcid); - key = key.concat(DELIMITER1); - key = key.concat(port); + public Vector getActiveMacRanges() { + Vector activeMacRanges = new Vector(); - return key; + macRanges = (HashMap) macRangeRedisRepository.findAllItems(); + int nSize = macRanges.size(); + if (nSize > 0) { + for (Map.Entry entry : macRanges.entrySet()) { + if (entry.getValue().getState().equals("Active")) { + activeMacRanges.add(entry.getValue()); + } + } + } else if (macRanges != null) { + MacRange newRange = new MacRange(); + newRange.createDefault(oui); + macRangeRedisRepository.addItem(newRange); + activeMacRanges.add(newRange); + } + return activeMacRanges; } } diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/RedisMacRangePublisher.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/RedisMacRangePublisher.java new file mode 100644 index 000000000..7fb386dd3 --- /dev/null +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/RedisMacRangePublisher.java @@ -0,0 +1,43 @@ +/*Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.futurewei.alcor.macmanager.service; + +import com.futurewei.alcor.common.repo.ICachePublisher; +import com.futurewei.alcor.macmanager.entity.MacRange; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.listener.ChannelTopic; +import org.springframework.stereotype.Service; + +@Service +public class RedisMacRangePublisher implements ICachePublisher { + @Autowired + private RedisTemplate redisTemplate2; + + @Autowired + private ChannelTopic topic2; + + public RedisMacRangePublisher() { + } + + public RedisMacRangePublisher(final RedisTemplate redisTemplate, final ChannelTopic topic2) { + this.redisTemplate2 = redisTemplate; + this.topic2 = topic2; + } + + public void publish(final String message) { + redisTemplate2.convertAndSend(topic2.getTopic(), message); + } +} diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/RedisPublisher.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/RedisPublisher.java index 9521f9ef5..b7737c815 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/RedisPublisher.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/RedisPublisher.java @@ -43,3 +43,4 @@ public void publish(final String message) { redisTemplate.convertAndSend(topic.getTopic(), message); } } + diff --git a/services/mac_manager/src/main/resources/application.properties b/services/mac_manager/src/main/resources/application.properties index 7ad984e14..c2aeb08b5 100644 --- a/services/mac_manager/src/main/resources/application.properties +++ b/services/mac_manager/src/main/resources/application.properties @@ -5,7 +5,7 @@ spring.redis.host=127.0.0.1 # Please check redis pod service cluster IP #spring.redis.host=10.99.0.27 spring.redis.port=6379 -apache.kafka.address=172.17.0.1:9092 +#apache.kafka.address=172.17.0.1:9092 #Logging configuration logging.level.root=info logging.level.org.springframework.web=info @@ -17,4 +17,5 @@ logging.type=file #ignite.key-store-path=F:\\work\\alcor\\git\\chenpp\\alcor\\src\\resources\\keystore.jks #ignite.key-store-password=123456 #ignite.trust-store-path=F:\\work\\alcor\\git\\chenpp\\alcor\\src\\resources\\truststore.jks -#ignite.trust-store-password=123456 \ No newline at end of file +#ignite.trust-store-password=123456 +macmanager.oui = 00-AA-BB \ No newline at end of file diff --git a/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/AlcorMacManager/MacManagerApplicationTests.java b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/AlcorMacManager/MacManagerApplicationTests.java index 0b19ef50b..93e792f2c 100644 --- a/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/AlcorMacManager/MacManagerApplicationTests.java +++ b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/AlcorMacManager/MacManagerApplicationTests.java @@ -1,14 +1,18 @@ package com.futurewei.alcor.macmanager.AlcorMacManager; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.futurewei.alcor.macmanager.entity.MacState; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import static org.hamcrest.Matchers.containsString; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -17,18 +21,44 @@ @SpringBootTest class MacManagerApplicationTests { - @Autowired - public MockMvc mvc; + @Autowired + public MockMvc mvc; - @Test - void contextLoads() { - } + @Test + void contextLoads() { + } - @Test - public void test_index() throws Exception { - this.mvc.perform(get("/start.html")) - .andDo(print()) - .andExpect(status().isOk()) - .andExpect(content().string(containsString("MacManager"))); - } + @Test + public void test_index() throws Exception { + this.mvc.perform(get("/start.html")) + .andDo(print()) + .andExpect(status().isOk()) + .andExpect(content().string(containsString("MacManager"))); + } + +// @Test +// public void test_createMacState() throws Exception { +// MacState macState = new MacState("", "project1", "vpc1", "port1"); +// ObjectMapper objectMapper = new ObjectMapper(); +// String json = objectMapper.writeValueAsString(macState); +// this.mvc.perform(post("/macs") +// .contentType(MediaType.APPLICATION_JSON) +// .content(json)) +// .andExpect(status().isOk()) +// .andReturn(); +// } +// +// @Test +// public void test_getMacStateByMacAddress() throws Exception { +// this.mvc.perform(get("/macs/00-00-00-00-00-00")) +// .andDo(print()) +// .andExpect(status().isOk()); +// } +// +// @Test +// public void test_deleteMacStateByMacAddress() throws Exception { +// this.mvc.perform(get("/macs/00-00-00-00-00-00")) +// .andDo(print()) +// .andExpect(status().isOk()); +// } } diff --git a/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java index 54e685dfb..f84bc6074 100644 --- a/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java +++ b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java @@ -55,7 +55,7 @@ public class MacControllerTest { @Before public void init() { - MacState macState = new MacState("", "project1", "vpc1", "port1"); + MacState macState = new MacState("", "project1", "vpc1", "port1", "active"); MacStateJson macStateJson = new MacStateJson(macState); ObjectMapper objectMapper = new ObjectMapper(); @@ -77,8 +77,7 @@ public void test_index() throws Exception { @Test public void test_createMacState() throws Exception { - MacState macState = new MacState("", "project1", "vpc1", "port2"); - + MacState macState = new MacState("", "project1", "vpc1", "port2", "active"); MacStateJson macStateJson = new MacStateJson(macState); ObjectMapper objectMapper = new ObjectMapper(); String json = objectMapper.writeValueAsString(macStateJson); From 00e766c97e7fd81ccc018ac94790375165ab462e Mon Sep 17 00:00:00 2001 From: Eunju Kim Date: Mon, 13 Apr 2020 19:51:06 -0700 Subject: [PATCH 13/33] [Microservices] Mac manager - added macmanager service interface and implemention layer --- services/mac_manager/pom.xml | 4 --- .../macmanager/MacManagerApplication.java | 6 ++-- .../macmanager/config/RedisConfiguration.java | 9 +++--- .../macmanager/controller/MacController.java | 32 ++----------------- .../dao/MacPoolRedisRepository.java | 6 ++++ .../dao/MacRangeRedisRepository.java | 6 ++++ .../macmanager/dao/MacRedisRepository.java | 5 +++ .../alcor/macmanager/entity/MacRange.java | 5 +-- .../alcor/macmanager/entity/MacState.java | 1 - .../alcor/macmanager/service/MacService.java | 12 +++++++ .../MacRedisServiceImpl.java} | 17 ++++++---- .../RedisMacRangePublisherServiceImpl.java} | 8 ++--- .../RedisPublisherServiceImpl.java} | 9 +++--- .../alcor/macmanager/utils/MacUtil.java | 25 +++++++++++++++ .../controller/MacControllerTest.java | 9 +++--- 15 files changed, 90 insertions(+), 64 deletions(-) create mode 100644 services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/MacService.java rename services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/{MacAddressService.java => implement/MacRedisServiceImpl.java} (89%) rename services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/{RedisMacRangePublisher.java => implement/RedisMacRangePublisherServiceImpl.java} (80%) rename services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/{RedisPublisher.java => implement/RedisPublisherServiceImpl.java} (82%) create mode 100644 services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/MacUtil.java diff --git a/services/mac_manager/pom.xml b/services/mac_manager/pom.xml index 47f4a2a45..569181ae4 100644 --- a/services/mac_manager/pom.xml +++ b/services/mac_manager/pom.xml @@ -60,10 +60,6 @@ json-simple 1.1.1 - - org.springframework.kafka - spring-kafka - org.apache.ignite ignite-core diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/MacManagerApplication.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/MacManagerApplication.java index cb2c27f3f..2e4e44a87 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/MacManagerApplication.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/MacManagerApplication.java @@ -6,8 +6,8 @@ @SpringBootApplication public class MacManagerApplication { - public static void main(String[] args) { - SpringApplication.run(MacManagerApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(MacManagerApplication.class, args); + } } diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/config/RedisConfiguration.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/config/RedisConfiguration.java index 6139f32b5..0f4df8ab6 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/config/RedisConfiguration.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/config/RedisConfiguration.java @@ -22,8 +22,8 @@ import com.futurewei.alcor.common.service.RedisListener; import com.futurewei.alcor.macmanager.entity.MacRange; import com.futurewei.alcor.macmanager.entity.MacState; -import com.futurewei.alcor.macmanager.service.RedisMacRangePublisher; -import com.futurewei.alcor.macmanager.service.RedisPublisher; +import com.futurewei.alcor.macmanager.service.implement.RedisMacRangePublisherServiceImpl; +import com.futurewei.alcor.macmanager.service.implement.RedisPublisherServiceImpl; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.domain.EntityScan; import org.springframework.context.annotation.Bean; @@ -94,12 +94,12 @@ RedisMessageListenerContainer redisContainer() { @Bean ICachePublisher redisMacPublisherInstance() { - return new RedisPublisher(redisMacTemplate(), topic()); + return new RedisPublisherServiceImpl(redisMacTemplate(), topic()); } @Bean ICachePublisher redisMacRangePublisherInstance() { - return new RedisMacRangePublisher(redisMacRangeTemplate(), topic()); + return new RedisMacRangePublisherServiceImpl(redisMacRangeTemplate(), topic()); } @Bean @@ -107,3 +107,4 @@ ChannelTopic topic() { return new ChannelTopic("pubsub:queue"); } } + diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java index 317e92ee0..e40837076 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java @@ -19,15 +19,13 @@ import com.futurewei.alcor.common.entity.ResponseId; import com.futurewei.alcor.common.exception.ParameterNullOrEmptyException; import com.futurewei.alcor.common.exception.ResourcePersistenceException; -import com.futurewei.alcor.macmanager.entity.MacRange; import com.futurewei.alcor.macmanager.entity.MacState; import com.futurewei.alcor.macmanager.entity.MacStateJson; -import com.futurewei.alcor.macmanager.service.MacAddressService; +import com.futurewei.alcor.macmanager.service.MacService; import com.futurewei.alcor.macmanager.utils.RestPreconditionsUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; - -import java.util.Vector; +import org.springframework.web.bind.annotation.*; import static org.springframework.web.bind.annotation.RequestMethod.*; @@ -35,31 +33,7 @@ public class MacController { @Autowired - private MacAddressService service; - - - @RequestMapping( - method = GET, - value = {"/macs/debug", "/v4/macs/debug"}) - public MacStateJson getDebug1() throws Exception { - MacState macState = null; - - if (macState == null) { - //TODO: REST error code - return new MacStateJson(); - } - return new MacStateJson(macState); - } - - @RequestMapping( - method = GET, - value = {"/macs/debug2", "/v4/macs/debug2"}) - public Vector getDebug2() throws Exception { - Vector macRanges = null; - macRanges = service.getActiveMacRanges(); - - return macRanges; - } + private MacService service; @RequestMapping( method = GET, diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacPoolRedisRepository.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacPoolRedisRepository.java index 9108ff3ec..ba9452665 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacPoolRedisRepository.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacPoolRedisRepository.java @@ -14,6 +14,8 @@ */ package com.futurewei.alcor.macmanager.dao; +import com.futurewei.alcor.common.logging.Logger; +import com.futurewei.alcor.common.logging.LoggerFactory; import com.futurewei.alcor.common.repo.ICacheRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; @@ -22,6 +24,7 @@ import javax.annotation.PostConstruct; import java.util.Map; +import java.util.logging.Level; @Repository public class MacPoolRedisRepository implements ICacheRepository { @@ -57,6 +60,8 @@ public Map findAllItems() { @Override public void addItem(String newItem) { + Logger logger = LoggerFactory.getLogger(); + logger.log(Level.INFO, newItem); setOperations.add(KEY, newItem); } @@ -66,6 +71,7 @@ public void deleteItem(String value) { } public String getItem() { + return (String) setOperations.randomMember(KEY); } } diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRangeRedisRepository.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRangeRedisRepository.java index 03888495d..2b14c9ba8 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRangeRedisRepository.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRangeRedisRepository.java @@ -14,6 +14,8 @@ */ package com.futurewei.alcor.macmanager.dao; +import com.futurewei.alcor.common.logging.Logger; +import com.futurewei.alcor.common.logging.LoggerFactory; import com.futurewei.alcor.common.repo.ICacheRepository; import com.futurewei.alcor.macmanager.entity.MacRange; import org.springframework.beans.factory.annotation.Autowired; @@ -23,6 +25,7 @@ import javax.annotation.PostConstruct; import java.util.Map; +import java.util.logging.Level; @Repository public class MacRangeRedisRepository implements ICacheRepository { @@ -52,11 +55,14 @@ public MacRange findItem(String id) { @Override public Map findAllItems() { + System.out.print("test" + KEY); return hashOperations.entries(KEY); } @Override public void addItem(MacRange newItem) { + Logger logger = LoggerFactory.getLogger(); + logger.log(Level.INFO, "mac address:" + newItem.getRangeId()); hashOperations.put(KEY, newItem.getRangeId(), newItem); } diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRedisRepository.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRedisRepository.java index 45fb052fb..8eb47a6af 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRedisRepository.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRedisRepository.java @@ -15,6 +15,8 @@ package com.futurewei.alcor.macmanager.dao; +import com.futurewei.alcor.common.logging.Logger; +import com.futurewei.alcor.common.logging.LoggerFactory; import com.futurewei.alcor.common.repo.ICacheRepository; import com.futurewei.alcor.macmanager.entity.MacState; import org.springframework.beans.factory.annotation.Autowired; @@ -24,6 +26,7 @@ import javax.annotation.PostConstruct; import java.util.Map; +import java.util.logging.Level; @Repository public class MacRedisRepository implements ICacheRepository { @@ -58,6 +61,8 @@ public Map findAllItems() { @Override public void addItem(MacState newItem) { + Logger logger = LoggerFactory.getLogger(); + logger.log(Level.INFO, "mac address:" + newItem.getMacAddress()); hashOperations.put(KEY, newItem.getMacAddress(), newItem); } diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacRange.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacRange.java index 5f8c34ae8..adaf19178 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacRange.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacRange.java @@ -15,6 +15,7 @@ package com.futurewei.alcor.macmanager.entity; import com.fasterxml.jackson.annotation.JsonProperty; +import com.futurewei.alcor.macmanager.utils.MacUtil; import lombok.Data; @@ -47,10 +48,10 @@ public MacRange(String rangeId, String from, String to, String state) { } public void createDefault(String oui) { - rangeId = new String("range0"); + rangeId = MacUtil.DEFAULT_RANGE; from = new MacAddress(oui, MacAddress.longToMac(0)).getMacAddress(); to = new MacAddress(oui, MacAddress.longToMac(MacAddress.NIC_LENGTH)).getMacAddress(); - state = new String("Active"); + state = MacUtil.MAC_RANGE_STATE_ACTIVE; } } diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java index 4de6dd7ad..0da070a16 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java @@ -23,7 +23,6 @@ @Data public class MacState implements Serializable { - @JsonProperty("mac_address") private String macAddress; diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/MacService.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/MacService.java new file mode 100644 index 000000000..0b564994e --- /dev/null +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/MacService.java @@ -0,0 +1,12 @@ +package com.futurewei.alcor.macmanager.service; + +import com.futurewei.alcor.macmanager.entity.MacState; +import com.futurewei.alcor.macmanager.exception.UniquenessViolationException; + +public interface MacService { + MacState getMacStateByMacAddress(String macAddress); + + String releaseMac(String macAddress) throws Exception; + + MacState createMacState(MacState macState) throws UniquenessViolationException, Exception; +} diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/MacAddressService.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacRedisServiceImpl.java similarity index 89% rename from services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/MacAddressService.java rename to services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacRedisServiceImpl.java index b075fe114..2091c4e22 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/MacAddressService.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacRedisServiceImpl.java @@ -12,7 +12,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package com.futurewei.alcor.macmanager.service; +package com.futurewei.alcor.macmanager.service.implement; import com.futurewei.alcor.common.exception.ResourceNotFoundException; import com.futurewei.alcor.macmanager.dao.MacPoolRedisRepository; @@ -21,6 +21,8 @@ import com.futurewei.alcor.macmanager.entity.MacAddress; import com.futurewei.alcor.macmanager.entity.MacRange; import com.futurewei.alcor.macmanager.entity.MacState; +import com.futurewei.alcor.macmanager.exception.UniquenessViolationException; +import com.futurewei.alcor.macmanager.service.MacService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -31,8 +33,7 @@ import java.util.concurrent.ThreadLocalRandom; @Service -public class MacAddressService { - +public class MacRedisServiceImpl implements MacService { final String DELIMITER = "/"; @Autowired @@ -66,7 +67,7 @@ public String releaseMac(String macAddress) throws Exception { return macAddress; } - public MacState createMacState(MacState macState) throws Exception { + public MacState createMacState(MacState macState) throws UniquenessViolationException, Exception { MacAddress macAddress = new MacAddress(); String projectId = macState.getProjectId(); String vpcId = macState.getVpcId(); @@ -81,7 +82,10 @@ public MacState createMacState(MacState macState) throws Exception { macAddress.setOui(oui); macAddress.setNic(nic); macState.setMacAddress(macAddress.getMacAddress()); - macRedisRepository.addItem(macState); + if (macRedisRepository.findItem(macAddress.getMacAddress()) != null) + throw (new UniquenessViolationException("This mac address is not unique!!")); + else + macRedisRepository.addItem(macState); } return macState; @@ -145,5 +149,4 @@ public Vector getActiveMacRanges() { } return activeMacRanges; } -} - +} \ No newline at end of file diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/RedisMacRangePublisher.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/RedisMacRangePublisherServiceImpl.java similarity index 80% rename from services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/RedisMacRangePublisher.java rename to services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/RedisMacRangePublisherServiceImpl.java index 7fb386dd3..04ba96a4b 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/RedisMacRangePublisher.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/RedisMacRangePublisherServiceImpl.java @@ -12,7 +12,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package com.futurewei.alcor.macmanager.service; +package com.futurewei.alcor.macmanager.service.implement; import com.futurewei.alcor.common.repo.ICachePublisher; import com.futurewei.alcor.macmanager.entity.MacRange; @@ -22,17 +22,17 @@ import org.springframework.stereotype.Service; @Service -public class RedisMacRangePublisher implements ICachePublisher { +public class RedisMacRangePublisherServiceImpl implements ICachePublisher { @Autowired private RedisTemplate redisTemplate2; @Autowired private ChannelTopic topic2; - public RedisMacRangePublisher() { + public RedisMacRangePublisherServiceImpl() { } - public RedisMacRangePublisher(final RedisTemplate redisTemplate, final ChannelTopic topic2) { + public RedisMacRangePublisherServiceImpl(final RedisTemplate redisTemplate, final ChannelTopic topic2) { this.redisTemplate2 = redisTemplate; this.topic2 = topic2; } diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/RedisPublisher.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/RedisPublisherServiceImpl.java similarity index 82% rename from services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/RedisPublisher.java rename to services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/RedisPublisherServiceImpl.java index b7737c815..6dceab39d 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/RedisPublisher.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/RedisPublisherServiceImpl.java @@ -14,7 +14,7 @@ limitations under the License. */ -package com.futurewei.alcor.macmanager.service; +package com.futurewei.alcor.macmanager.service.implement; import com.futurewei.alcor.common.repo.ICachePublisher; import com.futurewei.alcor.macmanager.entity.MacState; @@ -24,17 +24,17 @@ import org.springframework.stereotype.Service; @Service -public class RedisPublisher implements ICachePublisher { +public class RedisPublisherServiceImpl implements ICachePublisher { @Autowired private RedisTemplate redisTemplate; @Autowired private ChannelTopic topic; - public RedisPublisher() { + public RedisPublisherServiceImpl() { } - public RedisPublisher(final RedisTemplate redisTemplate, final ChannelTopic topic) { + public RedisPublisherServiceImpl(final RedisTemplate redisTemplate, final ChannelTopic topic) { this.redisTemplate = redisTemplate; this.topic = topic; } @@ -43,4 +43,3 @@ public void publish(final String message) { redisTemplate.convertAndSend(topic.getTopic(), message); } } - diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/MacUtil.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/MacUtil.java new file mode 100644 index 000000000..6ded886bd --- /dev/null +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/MacUtil.java @@ -0,0 +1,25 @@ +/*Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.futurewei.alcor.macmanager.utils; + +public class MacUtil { + public static final String MAC_STATE_ACTIVE = "Active"; + public static final String MAC_STATE_INACTIVE= "Inactive"; + + public static final String DEFAULT_RANGE = "range0"; + public static final String MAC_RANGE_STATE_ACTIVE = "Active"; + public static final String MAC_RANGE_STATE_INACTIVE = "Inactive"; + public static final String MAC_RANGE_STATE_EXCLUDE = "Exclude"; +} diff --git a/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java index f84bc6074..48c06d2a7 100644 --- a/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java +++ b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java @@ -18,7 +18,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.futurewei.alcor.macmanager.entity.MacState; import com.futurewei.alcor.macmanager.entity.MacStateJson; -import com.futurewei.alcor.macmanager.service.MacAddressService; +import com.futurewei.alcor.macmanager.service.MacService; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -46,7 +46,7 @@ public class MacControllerTest { public MacState testMacState; @Autowired - MacAddressService service; + MacService service; String strTestMac = ""; @Autowired private MockMvc mockMvc; @@ -55,7 +55,7 @@ public class MacControllerTest { @Before public void init() { - MacState macState = new MacState("", "project1", "vpc1", "port1", "active"); + MacState macState = new MacState("", "project1", "vpc1", "port1", "Active"); MacStateJson macStateJson = new MacStateJson(macState); ObjectMapper objectMapper = new ObjectMapper(); @@ -77,7 +77,7 @@ public void test_index() throws Exception { @Test public void test_createMacState() throws Exception { - MacState macState = new MacState("", "project1", "vpc1", "port2", "active"); + MacState macState = new MacState("", "project1", "vpc1", "port2", "Active"); MacStateJson macStateJson = new MacStateJson(macState); ObjectMapper objectMapper = new ObjectMapper(); String json = objectMapper.writeValueAsString(macStateJson); @@ -108,4 +108,3 @@ public void test_deleteMacStateByMacAddress() throws Exception { } } - From 33466fbbf6320d1edf7bfea551d189982f5c5856 Mon Sep 17 00:00:00 2001 From: Eunju Kim Date: Tue, 14 Apr 2020 04:59:02 -0700 Subject: [PATCH 14/33] [Microservices] Mac manager - add MAC range APIs and MAC allocation activate/deactivate APIs --- .../macmanager/controller/MacController.java | 133 +++++++++++++++++- .../alcor/macmanager/service/MacService.java | 23 ++- .../implement/MacRedisServiceImpl.java | 93 +++++++++--- .../utils/RestPreconditionsUtil.java | 7 + .../controller/MacControllerTest.java | 36 ++++- 5 files changed, 267 insertions(+), 25 deletions(-) diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java index e40837076..e3fa6f451 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java @@ -19,6 +19,8 @@ import com.futurewei.alcor.common.entity.ResponseId; import com.futurewei.alcor.common.exception.ParameterNullOrEmptyException; import com.futurewei.alcor.common.exception.ResourcePersistenceException; +import com.futurewei.alcor.macmanager.entity.MacRange; +import com.futurewei.alcor.macmanager.entity.MacRangeJson; import com.futurewei.alcor.macmanager.entity.MacState; import com.futurewei.alcor.macmanager.entity.MacStateJson; import com.futurewei.alcor.macmanager.service.MacService; @@ -27,6 +29,8 @@ import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; +import java.util.Map; + import static org.springframework.web.bind.annotation.RequestMethod.*; @RestController @@ -77,17 +81,142 @@ public MacStateJson createMacState(@RequestBody MacStateJson resource) throws Ex return new MacStateJson(macState); } + @RequestMapping( + method = PUT, + value = {"/macs/{macaddress}", "/v4/macs/{macaddress}"}) + public MacStateJson activateMacState(@PathVariable String macaddress) throws Exception { + MacState macState = null; + try { + RestPreconditionsUtil.verifyParameterNotNullorEmpty(macaddress); + macState = service.activateMacState(macaddress); + } catch (ParameterNullOrEmptyException e) { + throw new Exception(e); + } + return new MacStateJson(macState); + } + + @RequestMapping( + method = PUT, + value = {"/macs/{macaddress}", "/v4/macs/{macaddress}"}) + public MacStateJson deactivateMacState(@PathVariable String macaddress) throws Exception { + MacState macState = null; + try { + RestPreconditionsUtil.verifyParameterNotNullorEmpty(macaddress); + macState = service.deactivateMacState(macaddress); + } catch (ParameterNullOrEmptyException e) { + throw new Exception(e); + } + return new MacStateJson(macState); + } + @RequestMapping( method = DELETE, value = {"/macs/{macaddress}", "/v4/macs/{macaddress}"}) - public ResponseId deleteMacState(@PathVariable String macaddress) throws Exception { + public ResponseId deleteMacAllocation(@PathVariable String macaddress) throws Exception { String macAddress = null; try { RestPreconditionsUtil.verifyParameterNotNullorEmpty(macaddress); - macAddress = service.releaseMac(macaddress); + macAddress = service.releaseMacState(macaddress); } catch (ParameterNullOrEmptyException e) { throw new Exception(e); } return new ResponseId(macAddress); } + + @RequestMapping( + method = GET, + value = {"/macs/ranges/{rangeid}", "/v4/macs/ranges/{rangeid}"}) + public MacRangeJson getMacRangeByMacRangeId(@PathVariable String rangeid) throws Exception { + + MacRange macRange = null; + try { + RestPreconditionsUtil.verifyParameterNotNullorEmpty(rangeid); + macRange = service.getMacRangeByMacRangeId(rangeid); + } catch (ParameterNullOrEmptyException e) { + //TODO: REST error code + throw new Exception(e); + } + + if (macRange == null) { + //TODO: REST error code + return new MacRangeJson(); + } + return new MacRangeJson(macRange); + } + + @RequestMapping( + method = GET, + value = {"/macs/ranges/", "/v4/macs/ranges/"}) + public Map getAllMacRanges() throws Exception { + + Map macRanges = null; + try { + macRanges = service.getAllMacRanges(); + + } catch (Exception e) { + //TODO: REST error code + throw new Exception(e); + } + + if (macRanges == null) { + //TODO: REST error code + return macRanges; + } + return macRanges; + } + + @RequestMapping( + method = POST, + value = {"/macs/ranges", "/v4/macs/ranges"}) + @ResponseStatus(HttpStatus.CREATED) + public MacRangeJson createMacRange(@RequestBody MacRangeJson resource) throws Exception { + MacRange macRange = null; + try { + MacRange inMacRange = resource.getMacRange(); + RestPreconditionsUtil.verifyParameterNotNullorEmpty(inMacRange); + macRange = service.createMacRange(inMacRange); + if (macRange == null) { + throw new ResourcePersistenceException(); + } + } catch (ParameterNullOrEmptyException e) { + throw new Exception(e); + } catch (Exception e) { + throw new Exception(e); + } + return new MacRangeJson(macRange); + } + + @RequestMapping( + method = PUT, + value = {"/macs/ranges/{rangeid}", "/v4/macs/ranges/{rangeid}"}) + public MacRangeJson updateMacRange(@PathVariable String rangeid, @RequestBody MacRangeJson resource) throws Exception { + MacRange macRange = null; + try { + MacRange inMacRange = resource.getMacRange(); + RestPreconditionsUtil.verifyParameterNotNullorEmpty(inMacRange); + macRange = service.updateMacRange(inMacRange); + if (macRange == null) { + throw new ResourcePersistenceException(); + } + } catch (ParameterNullOrEmptyException e) { + throw new Exception(e); + } catch (Exception e) { + throw new Exception(e); + } + return new MacRangeJson(macRange); + } + + @RequestMapping( + method = DELETE, + value = {"/macs/ranges/{rangeid}", "/v4/macs/ranges/{rangeid}"}) + public ResponseId deleteMacRange(@PathVariable String rangeid) throws Exception { + String rangeId = null; + try { + RestPreconditionsUtil.verifyParameterNotNullorEmpty(rangeid); + rangeId = service.deleteMacRange(rangeid); + } catch (ParameterNullOrEmptyException e) { + throw new Exception(e); + } + return new ResponseId(rangeid); + } } diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/MacService.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/MacService.java index 0b564994e..550feffc5 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/MacService.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/MacService.java @@ -1,12 +1,31 @@ package com.futurewei.alcor.macmanager.service; +import com.futurewei.alcor.macmanager.entity.MacRange; import com.futurewei.alcor.macmanager.entity.MacState; import com.futurewei.alcor.macmanager.exception.UniquenessViolationException; +import java.util.Hashtable; +import java.util.Map; +import java.util.Vector; + public interface MacService { MacState getMacStateByMacAddress(String macAddress); - String releaseMac(String macAddress) throws Exception; + MacState createMacState(MacState macState) throws Exception; + + MacState activateMacState(String macaddress) throws Exception; + + MacState deactivateMacState(String macaddress) throws Exception; + + String releaseMacState(String macAddress) throws Exception; + + MacRange getMacRangeByMacRangeId(String macRangeId); + + Map getAllMacRanges(); + + MacRange createMacRange(MacRange macRange) throws Exception; + + MacRange updateMacRange(MacRange macRange) throws Exception; - MacState createMacState(MacState macState) throws UniquenessViolationException, Exception; + String deleteMacRange(String rangeid) throws Exception; } diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacRedisServiceImpl.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacRedisServiceImpl.java index 2091c4e22..5114a0916 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacRedisServiceImpl.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacRedisServiceImpl.java @@ -23,11 +23,13 @@ import com.futurewei.alcor.macmanager.entity.MacState; import com.futurewei.alcor.macmanager.exception.UniquenessViolationException; import com.futurewei.alcor.macmanager.service.MacService; +import com.futurewei.alcor.macmanager.utils.MacUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.util.HashMap; +import java.util.Hashtable; import java.util.Map; import java.util.Vector; import java.util.concurrent.ThreadLocalRandom; @@ -55,24 +57,8 @@ public MacState getMacStateByMacAddress(String macAddress) { return macState; } - public String releaseMac(String macAddress) throws Exception { - MacState macState = macRedisRepository.findItem(macAddress); - if (macState == null) { - ResourceNotFoundException e = new ResourceNotFoundException("MAC address Not Found"); - throw e; - } else { - macPoolRedisRepository.addItem(macAddress); - macRedisRepository.deleteItem(macAddress); - } - return macAddress; - } - - public MacState createMacState(MacState macState) throws UniquenessViolationException, Exception { + public MacState createMacState(MacState macState) throws Exception { MacAddress macAddress = new MacAddress(); - String projectId = macState.getProjectId(); - String vpcId = macState.getVpcId(); - String portId = macState.getPortId(); - String strMacAddress = allocateMacState(macState); if (strMacAddress != null) { macState.setMacAddress(strMacAddress); @@ -87,10 +73,83 @@ public MacState createMacState(MacState macState) throws UniquenessViolationExce else macRedisRepository.addItem(macState); } + return macState; + } + @Override + public MacState activateMacState(String macAddress) throws Exception { + MacState macState = macRedisRepository.findItem(macAddress); + if (macState == null) { + ResourceNotFoundException e = new ResourceNotFoundException("MAC address Not Found"); + throw e; + } else { + macState.setActive(MacUtil.MAC_STATE_ACTIVE); + macRedisRepository.updateItem(macState); + } return macState; } + @Override + public MacState deactivateMacState(String macAddress) throws Exception { + MacState macState = macRedisRepository.findItem(macAddress); + if (macState == null) { + ResourceNotFoundException e = new ResourceNotFoundException("MAC address Not Found"); + throw e; + } else { + macState.setActive(MacUtil.MAC_RANGE_STATE_INACTIVE); + macRedisRepository.updateItem(macState); + } + return macState; + } + + public String releaseMacState(String macAddress) throws Exception { + MacState macState = macRedisRepository.findItem(macAddress); + if (macState == null) { + ResourceNotFoundException e = new ResourceNotFoundException("MAC address Not Found"); + throw e; + } else { + macPoolRedisRepository.addItem(macAddress); + macRedisRepository.deleteItem(macAddress); + } + return macAddress; + } + + @Override + public MacRange getMacRangeByMacRangeId(String macRangeId) { + MacRange macRange = macRangeRedisRepository.findItem(macRangeId); + return macRange; + } + + @Override + public Map getAllMacRanges() { + Hashtable macRanges = (Hashtable) macRangeRedisRepository.findAllItems(); + return macRanges; + } + + @Override + public MacRange createMacRange(MacRange macRange) throws Exception { + if (macRange != null) { + macRangeRedisRepository.addItem(macRange); + } + return macRange; + } + + @Override + public MacRange updateMacRange(MacRange macRange) throws Exception { + if (macRange != null) { + macRangeRedisRepository.updateItem(macRange); + } + return macRange; + } + + @Override + public String deleteMacRange(String rangeId) throws Exception { + if (rangeId != null) { + macRangeRedisRepository.deleteItem(rangeId); + } + return rangeId; + } + private String allocateMacState(MacState macState) { String strMacAddress = macPoolRedisRepository.getItem(); if (strMacAddress != null) { diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/RestPreconditionsUtil.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/RestPreconditionsUtil.java index 4c44e4267..f2b337675 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/RestPreconditionsUtil.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/RestPreconditionsUtil.java @@ -17,6 +17,7 @@ package com.futurewei.alcor.macmanager.utils; import com.futurewei.alcor.common.exception.*; +import com.futurewei.alcor.macmanager.entity.MacRange; import com.futurewei.alcor.macmanager.entity.MacState; import org.thymeleaf.util.StringUtils; @@ -33,6 +34,12 @@ public static void verifyParameterNotNullorEmpty(MacState resource) throws Param } } + public static void verifyParameterNotNullorEmpty(MacRange resource) throws ParameterNullOrEmptyException { + if (resource == null) { + throw new ParameterNullOrEmptyException("null parameter"); + } + } + public static void populateResourceProjectId(MacState resource, String projectId, String vpcId, String portId) { String resourceProjectId = resource.getProjectId(); String resourceVpcId = resource.getVpcId(); diff --git a/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java index 48c06d2a7..3dfe7296c 100644 --- a/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java +++ b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java @@ -16,6 +16,7 @@ package com.futurewei.alcor.macmanager.controller; import com.fasterxml.jackson.databind.ObjectMapper; +import com.futurewei.alcor.macmanager.entity.MacRange; import com.futurewei.alcor.macmanager.entity.MacState; import com.futurewei.alcor.macmanager.entity.MacStateJson; import com.futurewei.alcor.macmanager.service.MacService; @@ -32,6 +33,8 @@ import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; +import java.util.Hashtable; + import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -41,15 +44,16 @@ @SpringBootTest @AutoConfigureMockMvc public class MacControllerTest { - private static final ObjectMapper om = new ObjectMapper(); - public MacState testMacState; + String strTestMac = ""; + @Autowired MacService service; - String strTestMac = ""; + @Autowired private MockMvc mockMvc; + @MockBean private MacController mockController; @@ -100,11 +104,35 @@ public void test_getMacStateByMacAddress() throws Exception { } @Test - public void test_deleteMacStateByMacAddress() throws Exception { + public void test_releaseMacStateByMacAddress() throws Exception { init(); this.mockMvc.perform(delete("/macs/" + strTestMac)) .andDo(print()) .andExpect(status().isOk()); } + + @Test + public void test_activateMacState(String macaddress) throws Exception { + init(); + this.mockMvc.perform(delete("/macs/" + strTestMac)) + .andDo(print()) + .andExpect(status().isOk()); + } + + MacState activateMacState(String macaddress) throws Exception; + + MacState deactivateMacState(String macaddress) throws Exception; + + String releaseMacState(String macAddress) throws Exception; + + MacRange getMacRangeByMacRangeId(String macRangeId); + + Hashtable getAllMacRanges(); + + MacRange createMacRange(MacRange macRange) throws Exception; + + MacRange updateMacRange(MacRange macRange) throws Exception; + + String deleteMacRange(String rangeid) throws Exception; } From 6f05522a1ca0f1a77e51b25861b90aba70f82f2c Mon Sep 17 00:00:00 2001 From: Eunju Kim Date: Wed, 15 Apr 2020 10:36:38 -0700 Subject: [PATCH 15/33] [Microservices] Macmanager - combined activate/deactivate APIs to update API --- .../macmanager/controller/MacController.java | 26 ++-- .../alcor/macmanager/entity/MacRange.java | 2 +- .../alcor/macmanager/service/MacService.java | 4 +- .../implement/MacRedisServiceImpl.java | 26 +--- .../controller/MacControllerTest.java | 138 +++++++++++++++--- 5 files changed, 133 insertions(+), 63 deletions(-) diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java index e3fa6f451..5d0415639 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java @@ -84,26 +84,18 @@ public MacStateJson createMacState(@RequestBody MacStateJson resource) throws Ex @RequestMapping( method = PUT, value = {"/macs/{macaddress}", "/v4/macs/{macaddress}"}) - public MacStateJson activateMacState(@PathVariable String macaddress) throws Exception { + public MacStateJson updateMacState(@PathVariable String macaddress, @RequestBody MacStateJson resource) throws Exception { MacState macState = null; try { - RestPreconditionsUtil.verifyParameterNotNullorEmpty(macaddress); - macState = service.activateMacState(macaddress); + MacState inMacState = resource.getMacState(); + RestPreconditionsUtil.verifyParameterNotNullorEmpty(inMacState); + macState = service.updateMacState(macaddress, inMacState); + if (macState == null) { + throw new ResourcePersistenceException(); + } } catch (ParameterNullOrEmptyException e) { throw new Exception(e); - } - return new MacStateJson(macState); - } - - @RequestMapping( - method = PUT, - value = {"/macs/{macaddress}", "/v4/macs/{macaddress}"}) - public MacStateJson deactivateMacState(@PathVariable String macaddress) throws Exception { - MacState macState = null; - try { - RestPreconditionsUtil.verifyParameterNotNullorEmpty(macaddress); - macState = service.deactivateMacState(macaddress); - } catch (ParameterNullOrEmptyException e) { + } catch (Exception e) { throw new Exception(e); } return new MacStateJson(macState); @@ -146,7 +138,7 @@ public MacRangeJson getMacRangeByMacRangeId(@PathVariable String rangeid) throws @RequestMapping( method = GET, - value = {"/macs/ranges/", "/v4/macs/ranges/"}) + value = {"/macs/ranges", "/v4/macs/ranges"}) public Map getAllMacRanges() throws Exception { Map macRanges = null; diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacRange.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacRange.java index adaf19178..34156689a 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacRange.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacRange.java @@ -50,7 +50,7 @@ public MacRange(String rangeId, String from, String to, String state) { public void createDefault(String oui) { rangeId = MacUtil.DEFAULT_RANGE; from = new MacAddress(oui, MacAddress.longToMac(0)).getMacAddress(); - to = new MacAddress(oui, MacAddress.longToMac(MacAddress.NIC_LENGTH)).getMacAddress(); + to = new MacAddress(oui, MacAddress.longToMac((long)Math.pow(2,MacAddress.NIC_LENGTH))).getMacAddress(); state = MacUtil.MAC_RANGE_STATE_ACTIVE; } } diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/MacService.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/MacService.java index 550feffc5..5bbcbdd33 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/MacService.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/MacService.java @@ -13,9 +13,7 @@ public interface MacService { MacState createMacState(MacState macState) throws Exception; - MacState activateMacState(String macaddress) throws Exception; - - MacState deactivateMacState(String macaddress) throws Exception; + MacState updateMacState(String macaddress, MacState macState) throws Exception; String releaseMacState(String macAddress) throws Exception; diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacRedisServiceImpl.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacRedisServiceImpl.java index 5114a0916..09bfe4362 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacRedisServiceImpl.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacRedisServiceImpl.java @@ -68,8 +68,9 @@ public MacState createMacState(MacState macState) throws Exception { macAddress.setOui(oui); macAddress.setNic(nic); macState.setMacAddress(macAddress.getMacAddress()); + MacState macState2 = macRedisRepository.findItem(macAddress.getMacAddress()); if (macRedisRepository.findItem(macAddress.getMacAddress()) != null) - throw (new UniquenessViolationException("This mac address is not unique!!")); + throw (new UniquenessViolationException("This mac address is not unique!!"+macAddress.getMacAddress()+macState2.getProjectId())); else macRedisRepository.addItem(macState); } @@ -77,28 +78,9 @@ public MacState createMacState(MacState macState) throws Exception { } @Override - public MacState activateMacState(String macAddress) throws Exception { - MacState macState = macRedisRepository.findItem(macAddress); - if (macState == null) { - ResourceNotFoundException e = new ResourceNotFoundException("MAC address Not Found"); - throw e; - } else { - macState.setActive(MacUtil.MAC_STATE_ACTIVE); + public MacState updateMacState(String macAddress, MacState macState) throws Exception { + if(macState != null) macRedisRepository.updateItem(macState); - } - return macState; - } - - @Override - public MacState deactivateMacState(String macAddress) throws Exception { - MacState macState = macRedisRepository.findItem(macAddress); - if (macState == null) { - ResourceNotFoundException e = new ResourceNotFoundException("MAC address Not Found"); - throw e; - } else { - macState.setActive(MacUtil.MAC_RANGE_STATE_INACTIVE); - macRedisRepository.updateItem(macState); - } return macState; } diff --git a/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java index 3dfe7296c..e1e198b0d 100644 --- a/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java +++ b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java @@ -17,6 +17,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.futurewei.alcor.macmanager.entity.MacRange; +import com.futurewei.alcor.macmanager.entity.MacRangeJson; import com.futurewei.alcor.macmanager.entity.MacState; import com.futurewei.alcor.macmanager.entity.MacStateJson; import com.futurewei.alcor.macmanager.service.MacService; @@ -32,6 +33,8 @@ import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; import java.util.Hashtable; @@ -72,6 +75,35 @@ public void init() { } } + public String createMacState(MacState macState) { + MacStateJson macStateJson = new MacStateJson(macState); + ObjectMapper objectMapper = new ObjectMapper(); + String strMacAddress = ""; + try { + String json = objectMapper.writeValueAsString(macStateJson); + MacState macState2 = service.createMacState(macState); + strMacAddress = macState2.getMacAddress(); + } catch (Exception e) { + e.printStackTrace(); + } + return strMacAddress; + } + + public String createMacRange(MacRange macRange) { + MacRangeJson macRangeJson = new MacRangeJson(macRange); + ObjectMapper objectMapper = new ObjectMapper(); + String strRangeId = ""; + + try { + String json = objectMapper.writeValueAsString(macRangeJson); + MacRange macRange2 = service.createMacRange(macRange); + strRangeId = macRange2.getRangeId(); + } catch (Exception e) { + e.printStackTrace(); + } + return strRangeId; + } + @Test public void test_index() throws Exception { this.mockMvc.perform(get("/start.html")) @@ -81,23 +113,22 @@ public void test_index() throws Exception { @Test public void test_createMacState() throws Exception { - MacState macState = new MacState("", "project1", "vpc1", "port2", "Active"); + MacState macState = new MacState("", "project3", "vpc3", "port3", "Active"); MacStateJson macStateJson = new MacStateJson(macState); ObjectMapper objectMapper = new ObjectMapper(); String json = objectMapper.writeValueAsString(macStateJson); - System.out.println(json); - MvcResult mvcResult = this.mockMvc.perform(post("/macs") + this.mockMvc.perform(post("/macs") .content(json) .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)) .andExpect(status().isCreated()) - .andDo(print()) - .andReturn(); + .andDo(print()); } @Test public void test_getMacStateByMacAddress() throws Exception { - init(); + MacState macState = new MacState("", "project1", "vpc1", "port2", "Active"); + String strTestMac = createMacState(macState); this.mockMvc.perform(get("/macs/" + strTestMac)) .andDo(print()) .andExpect(status().isOk()); @@ -105,34 +136,101 @@ public void test_getMacStateByMacAddress() throws Exception { @Test public void test_releaseMacStateByMacAddress() throws Exception { - init(); + MacState macState = new MacState("", "project1", "vpc1", "port3", "Active"); + String strTestMac = createMacState(macState); this.mockMvc.perform(delete("/macs/" + strTestMac)) .andDo(print()) .andExpect(status().isOk()); } @Test - public void test_activateMacState(String macaddress) throws Exception { - init(); - this.mockMvc.perform(delete("/macs/" + strTestMac)) - .andDo(print()) - .andExpect(status().isOk()); + public void test_activateMacState() throws Exception { + MacState macState = new MacState("", "project1", "vpc1", "port5", "Inactive"); + String strTestMac = createMacState(macState); + MacStateJson macStateJson = new MacStateJson(macState); + System.out.println(macStateJson); + macState = new MacState(strTestMac, "project1", "vpc1", "port5", "Active"); + macStateJson = new MacStateJson(macState); + ObjectMapper objectMapper = new ObjectMapper(); + String json = objectMapper.writeValueAsString(macStateJson); + + this.mockMvc.perform(put("/macs/" + strTestMac) + .content(json) + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andDo(print()); } - MacState activateMacState(String macaddress) throws Exception; + @Test + public void test_deactivateMacState() throws Exception { + MacState macState = new MacState("", "project1", "vpc1", "port7", "Active"); + String strTestMac = createMacState(macState); + MacStateJson macStateJson = new MacStateJson(macState); + System.out.println(macStateJson); + macState = new MacState(strTestMac, "project1", "vpc1", "port7", "Inactive"); + macStateJson = new MacStateJson(macState); + ObjectMapper objectMapper = new ObjectMapper(); + String json = objectMapper.writeValueAsString(macStateJson); - MacState deactivateMacState(String macaddress) throws Exception; + this.mockMvc.perform(put("/macs/" + strTestMac) + .content(json) + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andDo(print()); + } - String releaseMacState(String macAddress) throws Exception; + @Test + public void test_getMacRangeByMacRangeId() throws Exception { + MacRange macRange = new MacRange("range1", "00-AA-BB-11-11-11", "00-AA-BB-11-11-FF", "Active"); + String strRangeId = createMacRange(macRange); + this.mockMvc.perform(get("/macs/ranges/" + strRangeId)) + .andDo(print()) + .andExpect(status().isOk()); + } - MacRange getMacRangeByMacRangeId(String macRangeId); + public void test_getAllMacRanges(@PathVariable String rangeid) throws Exception{ + MacRange macRange = new MacRange("range2", "00-AA-BB-11-22-22", "00-AA-BB-11-22-FF", "Active"); + String strRangeId = createMacRange(macRange); + macRange = new MacRange("range3", "00-AA-BB-11-33-33", "00-AA-BB-11-FF", "Active"); + strRangeId = createMacRange(macRange); + this.mockMvc.perform(get("/macs/ranges")) + .andDo(print()) + .andExpect(status().isOk()); + } - Hashtable getAllMacRanges(); + public void test_createMacRange() throws Exception { + MacRange macRange = new MacRange("range4", "00-AA-BB-11-00-11", "00-AA-BB-11-00-FF", "Active"); + MacRangeJson macRangeJson = new MacRangeJson(macRange); + ObjectMapper objectMapper = new ObjectMapper(); + String json = objectMapper.writeValueAsString(macRangeJson); - MacRange createMacRange(MacRange macRange) throws Exception; + this.mockMvc.perform(post("/macs/ranges") + .content(json) + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)) + .andExpect(status().isCreated()) + .andDo(print()); + } + + public void updateMacRange() throws Exception { + MacRange macRange = new MacRange("range5", "00-AA-BB-11-11-11", "00-AA-BB-55-55-55", "Inactive"); + MacRangeJson macRangeJson = new MacRangeJson(macRange); + ObjectMapper objectMapper = new ObjectMapper(); + String json = objectMapper.writeValueAsString(macRangeJson); - MacRange updateMacRange(MacRange macRange) throws Exception; + this.mockMvc.perform(put("/macs/ranges/range1") + .content(json) + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)) + .andExpect(status().isCreated()) + .andDo(print()); + } - String deleteMacRange(String rangeid) throws Exception; + public void deleteMacRange() throws Exception { + MacRange macRange = new MacRange("range6", "00-AA-BB-11-22-22", "00-AA-BB-11-22-FF", "Active"); + String strRangeId = createMacRange(macRange); + System.out.println(strRangeId); + this.mockMvc.perform(delete("/macs/ranges" + strTestMac)) + .andDo(print()) + .andExpect(status().isOk()); + } } From 0d23506232d1f52c4faf9f5f6cf7b6354433405b Mon Sep 17 00:00:00 2001 From: Liguang Xie Date: Wed, 15 Apr 2020 13:47:13 -0700 Subject: [PATCH 16/33] Fix broken maven CI workflow --- .github/workflows/maven.yml | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 53a26bd6f..43a1ea7bc 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -14,14 +14,4 @@ jobs: with: java-version: 1.8 - name: Build with Maven - run: mvn -B package --file pom.xml - - name: Build lib - run: mvn -B package --file lib/pom.xml - - name: Build web - run: mvn -B package --file web/pom.xml - - name: Build api gateway - run: mvn -B package --file services/api_gateway/pom.xml - - name: Build vpc manager - run: mvn -B package --file services/vpc_manager/pom.xml - - name: Build route manager - run: mvn -B package --file services/route_manager/pom.xml \ No newline at end of file + run: mvn -B package --file pom.xml \ No newline at end of file From 7ca5df635fa137889458ecd0c37ce15149cbf69d Mon Sep 17 00:00:00 2001 From: Eunju Kim Date: Wed, 15 Apr 2020 14:23:51 -0700 Subject: [PATCH 17/33] [Microservices] MAC manager - update a pom file --- services/mac_manager/pom.xml | 171 +++++++++++++++++------------------ 1 file changed, 83 insertions(+), 88 deletions(-) diff --git a/services/mac_manager/pom.xml b/services/mac_manager/pom.xml index 569181ae4..1be0c7cb3 100644 --- a/services/mac_manager/pom.xml +++ b/services/mac_manager/pom.xml @@ -1,96 +1,91 @@ - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 2.2.6.RELEASE - - - com.futurewei.alcor.macmanager - AlcorMacManager - 0.0.1-SNAPSHOT - AlcorMacManager - Virtual Mac Address Manager Module + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.2.6.RELEASE + + + com.futurewei.alcor.macmanager + AlcorMacManager + 0.0.1-SNAPSHOT + AlcorMacManager + Virtual MAC Address Manager Module - - 1.8 - + + 1.8 + - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-starter-data-redis - - - org.springframework.boot - spring-boot-starter-thymeleaf - - - org.springframework.boot - spring-boot-starter-web - - - org.apache.kafka - kafka-clients - 2.3.0 - - - com.google.protobuf - protobuf-java - 3.8.0 - - - org.projectlombok - lombok - 1.18.0 - - - org.apache.commons - commons-pool2 - 2.4.2 - - - com.googlecode.json-simple - json-simple - 1.1.1 - - - org.apache.ignite - ignite-core - 2.8.0 - - - org.springframework.boot - spring-boot-starter-test - test - - - org.junit.vintage - junit-vintage-engine - - - - - com.futurewei.alcor.common - AlcorCommonLib - 0.1.0-SNAPSHOT - compile - + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-starter-data-redis + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + org.springframework.boot + spring-boot-starter-web + + + com.google.protobuf + protobuf-java + 3.8.0 + + + org.projectlombok + lombok + 1.18.0 + + + org.apache.commons + commons-pool2 + 2.4.2 + + + com.googlecode.json-simple + json-simple + 1.1.1 + + + org.apache.ignite + ignite-core + 2.8.0 + + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.vintage + junit-vintage-engine + + + + + com.futurewei.alcor.common + AlcorCommonLib + 0.1.0-SNAPSHOT + compile + - - - - org.springframework.boot - spring-boot-maven-plugin - - - + + + + org.springframework.boot + spring-boot-maven-plugin + + + From 42e4ca5f286cf91dbb3d4cbd0aace91845e320bb Mon Sep 17 00:00:00 2001 From: Eunju Kim Date: Fri, 17 Apr 2020 12:31:13 -0700 Subject: [PATCH 18/33] [Microservices] MAC manager - added concurrent handling and comparing neutron sections on the document --- .../images/services_macstate.png | Bin 31516 -> 33032 bytes docs/visionary_design/mac_manager.adoc | Bin 16008 -> 21716 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/visionary_design/images/services_macstate.png b/docs/visionary_design/images/services_macstate.png index e08ed824510fd54ae14ae12705b2830c63a1346e..a0a0d57d8af079de3e067a50ee11c9d1fe0c0a12 100644 GIT binary patch literal 33032 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 S&Igw-L`_*ssrdHY=l=ue_xYUw diff --git a/docs/visionary_design/mac_manager.adoc b/docs/visionary_design/mac_manager.adoc index 0fffb34443a30926267c267273097fe5b8073e4f..b22863e222c21f19a3e80d1a0ba60abae4b1ef39 100644 GIT binary patch literal 21716 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 Date: Fri, 17 Apr 2020 12:45:16 -0700 Subject: [PATCH 19/33] [Microservices] MAC manager - added two sections: concurrent handling comparison with neutron --- docs/visionary_design/mac_manager.adoc | Bin 21716 -> 21816 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/visionary_design/mac_manager.adoc b/docs/visionary_design/mac_manager.adoc index b22863e222c21f19a3e80d1a0ba60abae4b1ef39..88662319aceb03b563affec7a15c5a9e18bfa8ad 100644 GIT binary patch delta 115 zcmcbzl5xi>#tmY&hHea*4CxG|3`Gp73wOeLo!1K rP(?07;$}hH|4h0HK;dGrLNk!I3fZ7SE~qI From 0b852b208f37f7a85be4b35d49a28f88282fd3f0 Mon Sep 17 00:00:00 2001 From: Eunju Kim Date: Fri, 17 Apr 2020 18:03:49 -0700 Subject: [PATCH 20/33] [Microservices] MAC manager - updated delete API response --- docs/visionary_design/mac_manager.adoc | Bin 21816 -> 21584 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/visionary_design/mac_manager.adoc b/docs/visionary_design/mac_manager.adoc index 88662319aceb03b563affec7a15c5a9e18bfa8ad..f56cdd432921193b8239e981dcee2c94f5406734 100644 GIT binary patch delta 194 zcmdn7it)k<#tjO*jE0jB@+wYt;B8_w+gjoH99| zNpkZcITpsvOEj~XCfkYWOunZk2C`*yoURzte4ZgCg5x8v~KatITC4A2HVe@i$*EZIA;13n4=2 From 3c223d94c9db006a6cac69002afd16ba1911a2b5 Mon Sep 17 00:00:00 2001 From: Eunju Kim Date: Fri, 17 Apr 2020 18:08:57 -0700 Subject: [PATCH 21/33] [Microservices] MAC manager - updated activate/deactivate APIs response --- docs/visionary_design/mac_manager.adoc | Bin 21584 -> 21578 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/visionary_design/mac_manager.adoc b/docs/visionary_design/mac_manager.adoc index f56cdd432921193b8239e981dcee2c94f5406734..dc6118394b95f7005b47a0c2b1b1fdcb4e6d1409 100644 GIT binary patch delta 28 kcmcbxg7MS}#trM#SUnl?7!oH>6w{r|qa?QZk6MT>0G{>=A^-pY delta 25 hcmX@Lg7Lx%#trM#CO_a1nS4rHVv>^5=5J~tx&W8_3dR5c From 6ac310ee9ca9c6d2401c86a609674e4c6750aab9 Mon Sep 17 00:00:00 2001 From: Eunju Kim Date: Fri, 17 Apr 2020 18:12:30 -0700 Subject: [PATCH 22/33] [Microservices] MAC manager - updated activate/deactivate APIs response --- docs/visionary_design/mac_manager.adoc | Bin 21578 -> 21578 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/visionary_design/mac_manager.adoc b/docs/visionary_design/mac_manager.adoc index dc6118394b95f7005b47a0c2b1b1fdcb4e6d1409..8b1314e3cb01966287ca0b46a87014d7fe11f588 100644 GIT binary patch delta 42 wcmX@Lg7MS}#tqY~rA-+O7|a=T7%~`A88R8tfpiIjErSVz5rg68jn*?I00Jip=l}o! delta 42 tcmX@Lg7MS}#tqY~rHvU3fKZ1agCUh6lOY{QmoV5en1Dn#Z?v8%0RRCF3fuqy From 3d3a0f4c8415852d03ee70127f9782d28b474ae4 Mon Sep 17 00:00:00 2001 From: Eunju Kim Date: Sat, 18 Apr 2020 04:36:53 -0700 Subject: [PATCH 23/33] [Microservices] MAC manager - tested APIs and matched output formaat between document and implementation --- docs/visionary_design/mac_manager.adoc | Bin 21578 -> 25476 bytes .../macmanager/controller/MacController.java | 25 ++++---- .../alcor/macmanager/entity/MacRange.java | 6 +- .../alcor/macmanager/entity/MacRangeJson.java | 2 + .../alcor/macmanager/entity/MacState.java | 10 ++-- .../alcor/macmanager/entity/MacStateJson.java | 3 + .../implement/MacRedisServiceImpl.java | 10 +++- .../RedisMacRangePublisherServiceImpl.java | 10 ++-- .../MacManagerApplicationTests.java | 54 ++++-------------- .../controller/MacControllerTest.java | 6 +- 10 files changed, 53 insertions(+), 73 deletions(-) diff --git a/docs/visionary_design/mac_manager.adoc b/docs/visionary_design/mac_manager.adoc index 8b1314e3cb01966287ca0b46a87014d7fe11f588..078e27d4d204bc6b083588488a12d00d5f66cf69 100644 GIT binary patch delta 2394 zcmb_d&u`mw6n}0vAW?p}O-LH@%Q0&f8ppBIcImdl*0B|aTB*>&fijh{R#0hzvUD6) z5JE7i2Q;C6#9;@JGKAFKD&+z@KoJKdE>jPa5TdAm0765XfD`a+x3-hG1q8BeC*SXT z@B2QV_j%9Xt_kmbBdq@(I51EzspgG(M zB=CXgFL~_ITNETey-6k}k{nMH-!pa`8((^iW7Zh6WcxT)HQWefjXZ=JHUn|v)U&m{ zPT&Ye9E(58YM6#O>MWfnC#HEa+f|SYRxv6LII$CZ#x}C|*)f>&5`Ge&{D0YT#a|AU zJ1=nkt6~a7t0szT1ZA!O;)}6I!$M2jPEHrgKRL3kGr08 z^w+rCb-P2DY>X!o0<_#3-j6-y+PxjSWbOVYm`3vg)YzKKU^0EJ1APg}+H#4<$gDRMex}aLAXENxL!~> zjiiE*as)5vhe~$ct*&Gyb(*GgCS!fnM+G`Uk1(@V_uSCaJN@;wK8VZR1NcMPw~rq5 ztRCv|eoSN}^hLy=Q!AtY>hTCJS43Q`WExA64gnke{;(0mG1IVB)bW`r2b{GT!jI)K zpGF#$_|{M^SHq(;%Kz*qeo-S?r;B7d#<*mjPv;r+0=>aHlCe3M#EZH#-p)&s%fnRS^qpAw&CT+6)fCc@CWVd-Ag_#Za3R9-g7VNyo;D$yyvc7Izd#x9!a*D(3&%f}AugX$?bHbNAI{v7s>}P3_m1KT#@S$=PU!?u`UQxT6o6+dm zU05xBsw0=k;pRgDuU<8vp6b*|hoD!ns09qz#rE!O*N^cHX5C}6IEZLf38f^r`gsie z_t5oN8r%73(M{E9*QchnzB&(_Yx)dU4tHa;(v5X~^I+tP>y>Ftm7<*nO|O?8#dhI7 gZtoRLs3+Ul+A0>?1i=i+cv??lLOIaL3@NF<0AW}O#Q*>R delta 847 zcmbu6O=uHA6vy90tTx?E(wL&{%?p_|c?oiUmuoO>;7( z)*dQ|2mc;Lil>}JT<}x`MG!n_D4sm^=)r?{QACTIk1j#XNrpGfoB6$&|NP&|TlTKX zp8eoZbGcyQ%?R+z#(Kjp<0oG>^7nf}NT0P~OLXI_<=oCP-JnVQ=6twjT{EbNO+kux zLA4*n2IoS}X71t1OtVZgGFB)mk+){DlEfsD!}TJ8gEYY=4ny~ zXQ)j1R>7RqhkJqyw38`odo9b9!-A=JFDkPJU;kH^}QQVClN4meu6D5TX>7meG(O{@TSMVWxxXs!N zF(+P+WFZ7OSmGgEJ)LDaxupNqB;gT!OeZYSkeo0{8wU-RgfR9n>X;^PYdyOOWKTUnb}#CA!t1z V@Xbq-l++bA#eE9fw9FaB{|D_6(_;Vt diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java index 5d0415639..67ef031a2 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java @@ -16,7 +16,6 @@ package com.futurewei.alcor.macmanager.controller; -import com.futurewei.alcor.common.entity.ResponseId; import com.futurewei.alcor.common.exception.ParameterNullOrEmptyException; import com.futurewei.alcor.common.exception.ResourcePersistenceException; import com.futurewei.alcor.macmanager.entity.MacRange; @@ -29,6 +28,8 @@ import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; +import java.util.Collection; +import java.util.HashMap; import java.util.Map; import static org.springframework.web.bind.annotation.RequestMethod.*; @@ -104,7 +105,7 @@ public MacStateJson updateMacState(@PathVariable String macaddress, @RequestBody @RequestMapping( method = DELETE, value = {"/macs/{macaddress}", "/v4/macs/{macaddress}"}) - public ResponseId deleteMacAllocation(@PathVariable String macaddress) throws Exception { + public String deleteMacAllocation(@PathVariable String macaddress) throws Exception { String macAddress = null; try { RestPreconditionsUtil.verifyParameterNotNullorEmpty(macaddress); @@ -112,7 +113,7 @@ public ResponseId deleteMacAllocation(@PathVariable String macaddress) throws Ex } catch (ParameterNullOrEmptyException e) { throw new Exception(e); } - return new ResponseId(macAddress); + return "{mac_address: " + macAddress + "}"; } @RequestMapping( @@ -139,12 +140,11 @@ public MacRangeJson getMacRangeByMacRangeId(@PathVariable String rangeid) throws @RequestMapping( method = GET, value = {"/macs/ranges", "/v4/macs/ranges"}) - public Map getAllMacRanges() throws Exception { - - Map macRanges = null; + public Map> getAllMacRanges() throws Exception { + Map macRanges; + HashMap> map = new HashMap>(); try { macRanges = service.getAllMacRanges(); - } catch (Exception e) { //TODO: REST error code throw new Exception(e); @@ -152,9 +152,10 @@ public Map getAllMacRanges() throws Exception { if (macRanges == null) { //TODO: REST error code - return macRanges; - } - return macRanges; + map.put("mac_ranges", null); + } else + map.put("mac_ranges", macRanges.values()); + return map; } @RequestMapping( @@ -201,7 +202,7 @@ public MacRangeJson updateMacRange(@PathVariable String rangeid, @RequestBody Ma @RequestMapping( method = DELETE, value = {"/macs/ranges/{rangeid}", "/v4/macs/ranges/{rangeid}"}) - public ResponseId deleteMacRange(@PathVariable String rangeid) throws Exception { + public String deleteMacRange(@PathVariable String rangeid) throws Exception { String rangeId = null; try { RestPreconditionsUtil.verifyParameterNotNullorEmpty(rangeid); @@ -209,6 +210,6 @@ public ResponseId deleteMacRange(@PathVariable String rangeid) throws Exception } catch (ParameterNullOrEmptyException e) { throw new Exception(e); } - return new ResponseId(rangeid); + return "{mac_range: " + rangeId + "}"; } } diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacRange.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacRange.java index 34156689a..12d50496c 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacRange.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacRange.java @@ -49,8 +49,10 @@ public MacRange(String rangeId, String from, String to, String state) { public void createDefault(String oui) { rangeId = MacUtil.DEFAULT_RANGE; - from = new MacAddress(oui, MacAddress.longToMac(0)).getMacAddress(); - to = new MacAddress(oui, MacAddress.longToMac((long)Math.pow(2,MacAddress.NIC_LENGTH))).getMacAddress(); + String strFrom = MacAddress.longToMac(0); + String strTo = MacAddress.longToMac((long)Math.pow(2,MacAddress.NIC_LENGTH) - 1); + from = new MacAddress(oui, strFrom).getMacAddress(); + to = new MacAddress(oui, strTo).getMacAddress(); state = MacUtil.MAC_RANGE_STATE_ACTIVE; } } diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacRangeJson.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacRangeJson.java index 693a6c5c5..a9ce11273 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacRangeJson.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacRangeJson.java @@ -14,11 +14,13 @@ */ package com.futurewei.alcor.macmanager.entity; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; @Data public class MacRangeJson { + @JsonProperty("mac_range") private MacRange macRange; public MacRangeJson() { diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java index 0da070a16..17cfc70a0 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java @@ -35,23 +35,23 @@ public class MacState implements Serializable { @JsonProperty("port_id") private String portId; - @JsonProperty("active") - private String active; + @JsonProperty("state") + private String state; public MacState() { } public MacState(MacState state) { - this(state.macAddress, state.projectId, state.vpcId, state.portId, state.active); + this(state.macAddress, state.projectId, state.vpcId, state.portId, state.state); } - public MacState(String macAddress, String projectId, String vpcId, String portId, String active) { + public MacState(String macAddress, String projectId, String vpcId, String portId, String state) { this.macAddress = macAddress; this.projectId = projectId; this.vpcId = vpcId; this.portId = portId; - this.active = active; + this.state = state; } } diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacStateJson.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacStateJson.java index 0e15f59ce..e45cd6156 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacStateJson.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacStateJson.java @@ -15,10 +15,13 @@ */ package com.futurewei.alcor.macmanager.entity; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; @Data public class MacStateJson { + + @JsonProperty("mac_state") private MacState macState; public MacStateJson() { diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacRedisServiceImpl.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacRedisServiceImpl.java index 09bfe4362..7ddce21a7 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacRedisServiceImpl.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacRedisServiceImpl.java @@ -59,6 +59,10 @@ public MacState getMacStateByMacAddress(String macAddress) { public MacState createMacState(MacState macState) throws Exception { MacAddress macAddress = new MacAddress(); + if (macState.getState() == null) + macState.setState(MacUtil.MAC_STATE_ACTIVE); + else if (macState.getState().trim().length()==0) + macState.setState(MacUtil.MAC_STATE_ACTIVE); String strMacAddress = allocateMacState(macState); if (strMacAddress != null) { macState.setMacAddress(strMacAddress); @@ -93,7 +97,8 @@ public String releaseMacState(String macAddress) throws Exception { macPoolRedisRepository.addItem(macAddress); macRedisRepository.deleteItem(macAddress); } - return macAddress; + return macState.getMacAddress(); + //return new String ("{mac_address: " + macAddress+"}"); } @Override @@ -104,7 +109,7 @@ public MacRange getMacRangeByMacRangeId(String macRangeId) { @Override public Map getAllMacRanges() { - Hashtable macRanges = (Hashtable) macRangeRedisRepository.findAllItems(); + Map macRanges = macRangeRedisRepository.findAllItems(); return macRanges; } @@ -130,6 +135,7 @@ public String deleteMacRange(String rangeId) throws Exception { macRangeRedisRepository.deleteItem(rangeId); } return rangeId; + //return new String ("{mac_range: " + rangeId+"}"); } private String allocateMacState(MacState macState) { diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/RedisMacRangePublisherServiceImpl.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/RedisMacRangePublisherServiceImpl.java index 04ba96a4b..4cb5474a5 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/RedisMacRangePublisherServiceImpl.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/RedisMacRangePublisherServiceImpl.java @@ -24,20 +24,20 @@ @Service public class RedisMacRangePublisherServiceImpl implements ICachePublisher { @Autowired - private RedisTemplate redisTemplate2; + private RedisTemplate redisTemplate; @Autowired - private ChannelTopic topic2; + private ChannelTopic topic; public RedisMacRangePublisherServiceImpl() { } public RedisMacRangePublisherServiceImpl(final RedisTemplate redisTemplate, final ChannelTopic topic2) { - this.redisTemplate2 = redisTemplate; - this.topic2 = topic2; + this.redisTemplate = redisTemplate; + this.topic = topic2; } public void publish(final String message) { - redisTemplate2.convertAndSend(topic2.getTopic(), message); + redisTemplate.convertAndSend(topic.getTopic(), message); } } diff --git a/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/AlcorMacManager/MacManagerApplicationTests.java b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/AlcorMacManager/MacManagerApplicationTests.java index 93e792f2c..0b19ef50b 100644 --- a/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/AlcorMacManager/MacManagerApplicationTests.java +++ b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/AlcorMacManager/MacManagerApplicationTests.java @@ -1,18 +1,14 @@ package com.futurewei.alcor.macmanager.AlcorMacManager; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.futurewei.alcor.macmanager.entity.MacState; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.http.MediaType; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import static org.hamcrest.Matchers.containsString; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -21,44 +17,18 @@ @SpringBootTest class MacManagerApplicationTests { - @Autowired - public MockMvc mvc; + @Autowired + public MockMvc mvc; - @Test - void contextLoads() { - } + @Test + void contextLoads() { + } - @Test - public void test_index() throws Exception { - this.mvc.perform(get("/start.html")) - .andDo(print()) - .andExpect(status().isOk()) - .andExpect(content().string(containsString("MacManager"))); - } - -// @Test -// public void test_createMacState() throws Exception { -// MacState macState = new MacState("", "project1", "vpc1", "port1"); -// ObjectMapper objectMapper = new ObjectMapper(); -// String json = objectMapper.writeValueAsString(macState); -// this.mvc.perform(post("/macs") -// .contentType(MediaType.APPLICATION_JSON) -// .content(json)) -// .andExpect(status().isOk()) -// .andReturn(); -// } -// -// @Test -// public void test_getMacStateByMacAddress() throws Exception { -// this.mvc.perform(get("/macs/00-00-00-00-00-00")) -// .andDo(print()) -// .andExpect(status().isOk()); -// } -// -// @Test -// public void test_deleteMacStateByMacAddress() throws Exception { -// this.mvc.perform(get("/macs/00-00-00-00-00-00")) -// .andDo(print()) -// .andExpect(status().isOk()); -// } + @Test + public void test_index() throws Exception { + this.mvc.perform(get("/start.html")) + .andDo(print()) + .andExpect(status().isOk()) + .andExpect(content().string(containsString("MacManager"))); + } } diff --git a/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java index e1e198b0d..6d0d0c9dc 100644 --- a/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java +++ b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java @@ -32,11 +32,7 @@ import org.springframework.http.MediaType; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.MvcResult; import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; - -import java.util.Hashtable; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; @@ -188,7 +184,7 @@ public void test_getMacRangeByMacRangeId() throws Exception { .andExpect(status().isOk()); } - public void test_getAllMacRanges(@PathVariable String rangeid) throws Exception{ + public void test_getAllMacRanges(@PathVariable String rangeid) throws Exception { MacRange macRange = new MacRange("range2", "00-AA-BB-11-22-22", "00-AA-BB-11-22-FF", "Active"); String strRangeId = createMacRange(macRange); macRange = new MacRange("range3", "00-AA-BB-11-33-33", "00-AA-BB-11-FF", "Active"); From f78c95e7f6433a134d56f0db0613976fa73f23c6 Mon Sep 17 00:00:00 2001 From: Eunju Kim Date: Sat, 18 Apr 2020 04:40:53 -0700 Subject: [PATCH 24/33] [Microservices] MAC manager - tested APIs and matched I/O data format between document and implementation --- docs/visionary_design/mac_manager.adoc | Bin 25476 -> 25476 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/visionary_design/mac_manager.adoc b/docs/visionary_design/mac_manager.adoc index 078e27d4d204bc6b083588488a12d00d5f66cf69..5e71c6160f18b9fa6b83c167c9265d838db893df 100644 GIT binary patch delta 18 acmZoU&e(FCal=2M$p`EeHp>a81pok08V98S delta 40 wcmZoU&e(FCal=0$PG^P;hD3%uhV;pXLh_Tf_{1jfGvS-uAS|>wMpz>N022=kegFUf From e44d501886d0b2cd92e1018881147e5c0e6eb1b8 Mon Sep 17 00:00:00 2001 From: Eunju Kim Date: Sat, 18 Apr 2020 04:57:13 -0700 Subject: [PATCH 25/33] [Microservices] MAC manager - tested APIs and matched I/O data format between document and implementation --- docs/visionary_design/mac_manager.adoc | Bin 25476 -> 25478 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/visionary_design/mac_manager.adoc b/docs/visionary_design/mac_manager.adoc index 5e71c6160f18b9fa6b83c167c9265d838db893df..626b82e70555c934e11f30e2d35051820cceddf3 100644 GIT binary patch delta 155 zcmZoU&e(RGaf6uzb38-w=7TbljGF@_3z(t2?~G7JD&uB3g)EqGBje-`+HR8rRQ=$( zCI?8a*qorwhoWQ#iu7ay9i7Q?QaqFETtp^o2uN+-p!Z9XF?I4rkJb%7 From a11ec2e241bf9c44d122416b89d3f0784b0c6df1 Mon Sep 17 00:00:00 2001 From: Eunju Kim Date: Sat, 18 Apr 2020 15:48:14 -0700 Subject: [PATCH 26/33] [Microservices] MAC manager - resolved github conflict --- .../macmanager/controller/MacController.java | 38 ------------- .../alcor/macmanager/entity/MacRange.java | 5 -- .../alcor/macmanager/entity/MacRangeJson.java | 6 -- .../alcor/macmanager/entity/MacState.java | 16 ------ .../alcor/macmanager/entity/MacStateJson.java | 6 -- .../implement/MacRedisServiceImpl.java | 14 ----- .../RedisMacRangePublisherServiceImpl.java | 16 ------ .../MacManagerApplicationTests.java | 56 ------------------- .../controller/MacControllerTest.java | 12 ---- 9 files changed, 169 deletions(-) diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java index 505267e5f..67ef031a2 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java @@ -16,10 +16,6 @@ package com.futurewei.alcor.macmanager.controller; -<<<<<<< HEAD -======= -import com.futurewei.alcor.common.entity.ResponseId; ->>>>>>> 0817ce8198b91bfaca7c43abedc8995c5a3746a6 import com.futurewei.alcor.common.exception.ParameterNullOrEmptyException; import com.futurewei.alcor.common.exception.ResourcePersistenceException; import com.futurewei.alcor.macmanager.entity.MacRange; @@ -32,11 +28,8 @@ import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; -<<<<<<< HEAD import java.util.Collection; import java.util.HashMap; -======= ->>>>>>> 0817ce8198b91bfaca7c43abedc8995c5a3746a6 import java.util.Map; import static org.springframework.web.bind.annotation.RequestMethod.*; @@ -112,11 +105,7 @@ public MacStateJson updateMacState(@PathVariable String macaddress, @RequestBody @RequestMapping( method = DELETE, value = {"/macs/{macaddress}", "/v4/macs/{macaddress}"}) -<<<<<<< HEAD public String deleteMacAllocation(@PathVariable String macaddress) throws Exception { -======= - public ResponseId deleteMacAllocation(@PathVariable String macaddress) throws Exception { ->>>>>>> 0817ce8198b91bfaca7c43abedc8995c5a3746a6 String macAddress = null; try { RestPreconditionsUtil.verifyParameterNotNullorEmpty(macaddress); @@ -124,11 +113,7 @@ public ResponseId deleteMacAllocation(@PathVariable String macaddress) throws Ex } catch (ParameterNullOrEmptyException e) { throw new Exception(e); } -<<<<<<< HEAD return "{mac_address: " + macAddress + "}"; -======= - return new ResponseId(macAddress); ->>>>>>> 0817ce8198b91bfaca7c43abedc8995c5a3746a6 } @RequestMapping( @@ -155,20 +140,11 @@ public MacRangeJson getMacRangeByMacRangeId(@PathVariable String rangeid) throws @RequestMapping( method = GET, value = {"/macs/ranges", "/v4/macs/ranges"}) -<<<<<<< HEAD public Map> getAllMacRanges() throws Exception { Map macRanges; HashMap> map = new HashMap>(); try { macRanges = service.getAllMacRanges(); -======= - public Map getAllMacRanges() throws Exception { - - Map macRanges = null; - try { - macRanges = service.getAllMacRanges(); - ->>>>>>> 0817ce8198b91bfaca7c43abedc8995c5a3746a6 } catch (Exception e) { //TODO: REST error code throw new Exception(e); @@ -176,16 +152,10 @@ public Map getAllMacRanges() throws Exception { if (macRanges == null) { //TODO: REST error code -<<<<<<< HEAD map.put("mac_ranges", null); } else map.put("mac_ranges", macRanges.values()); return map; -======= - return macRanges; - } - return macRanges; ->>>>>>> 0817ce8198b91bfaca7c43abedc8995c5a3746a6 } @RequestMapping( @@ -232,11 +202,7 @@ public MacRangeJson updateMacRange(@PathVariable String rangeid, @RequestBody Ma @RequestMapping( method = DELETE, value = {"/macs/ranges/{rangeid}", "/v4/macs/ranges/{rangeid}"}) -<<<<<<< HEAD public String deleteMacRange(@PathVariable String rangeid) throws Exception { -======= - public ResponseId deleteMacRange(@PathVariable String rangeid) throws Exception { ->>>>>>> 0817ce8198b91bfaca7c43abedc8995c5a3746a6 String rangeId = null; try { RestPreconditionsUtil.verifyParameterNotNullorEmpty(rangeid); @@ -244,10 +210,6 @@ public ResponseId deleteMacRange(@PathVariable String rangeid) throws Exception } catch (ParameterNullOrEmptyException e) { throw new Exception(e); } -<<<<<<< HEAD return "{mac_range: " + rangeId + "}"; -======= - return new ResponseId(rangeid); ->>>>>>> 0817ce8198b91bfaca7c43abedc8995c5a3746a6 } } diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacRange.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacRange.java index 3ec14fb80..12d50496c 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacRange.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacRange.java @@ -49,15 +49,10 @@ public MacRange(String rangeId, String from, String to, String state) { public void createDefault(String oui) { rangeId = MacUtil.DEFAULT_RANGE; -<<<<<<< HEAD String strFrom = MacAddress.longToMac(0); String strTo = MacAddress.longToMac((long)Math.pow(2,MacAddress.NIC_LENGTH) - 1); from = new MacAddress(oui, strFrom).getMacAddress(); to = new MacAddress(oui, strTo).getMacAddress(); -======= - from = new MacAddress(oui, MacAddress.longToMac(0)).getMacAddress(); - to = new MacAddress(oui, MacAddress.longToMac((long)Math.pow(2,MacAddress.NIC_LENGTH))).getMacAddress(); ->>>>>>> 0817ce8198b91bfaca7c43abedc8995c5a3746a6 state = MacUtil.MAC_RANGE_STATE_ACTIVE; } } diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacRangeJson.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacRangeJson.java index d5074747c..a9ce11273 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacRangeJson.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacRangeJson.java @@ -14,19 +14,13 @@ */ package com.futurewei.alcor.macmanager.entity; -<<<<<<< HEAD import com.fasterxml.jackson.annotation.JsonProperty; -======= ->>>>>>> 0817ce8198b91bfaca7c43abedc8995c5a3746a6 import lombok.Data; @Data public class MacRangeJson { -<<<<<<< HEAD @JsonProperty("mac_range") -======= ->>>>>>> 0817ce8198b91bfaca7c43abedc8995c5a3746a6 private MacRange macRange; public MacRangeJson() { diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java index 17f7a8460..17cfc70a0 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacState.java @@ -35,39 +35,23 @@ public class MacState implements Serializable { @JsonProperty("port_id") private String portId; -<<<<<<< HEAD @JsonProperty("state") private String state; -======= - @JsonProperty("active") - private String active; ->>>>>>> 0817ce8198b91bfaca7c43abedc8995c5a3746a6 public MacState() { } public MacState(MacState state) { -<<<<<<< HEAD this(state.macAddress, state.projectId, state.vpcId, state.portId, state.state); } public MacState(String macAddress, String projectId, String vpcId, String portId, String state) { -======= - this(state.macAddress, state.projectId, state.vpcId, state.portId, state.active); - } - - public MacState(String macAddress, String projectId, String vpcId, String portId, String active) { ->>>>>>> 0817ce8198b91bfaca7c43abedc8995c5a3746a6 this.macAddress = macAddress; this.projectId = projectId; this.vpcId = vpcId; this.portId = portId; -<<<<<<< HEAD this.state = state; -======= - this.active = active; ->>>>>>> 0817ce8198b91bfaca7c43abedc8995c5a3746a6 } } diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacStateJson.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacStateJson.java index ee879a4a1..e45cd6156 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacStateJson.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/entity/MacStateJson.java @@ -15,19 +15,13 @@ */ package com.futurewei.alcor.macmanager.entity; -<<<<<<< HEAD import com.fasterxml.jackson.annotation.JsonProperty; -======= ->>>>>>> 0817ce8198b91bfaca7c43abedc8995c5a3746a6 import lombok.Data; @Data public class MacStateJson { -<<<<<<< HEAD @JsonProperty("mac_state") -======= ->>>>>>> 0817ce8198b91bfaca7c43abedc8995c5a3746a6 private MacState macState; public MacStateJson() { diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacRedisServiceImpl.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacRedisServiceImpl.java index e86ae1d3b..7ddce21a7 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacRedisServiceImpl.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacRedisServiceImpl.java @@ -59,13 +59,10 @@ public MacState getMacStateByMacAddress(String macAddress) { public MacState createMacState(MacState macState) throws Exception { MacAddress macAddress = new MacAddress(); -<<<<<<< HEAD if (macState.getState() == null) macState.setState(MacUtil.MAC_STATE_ACTIVE); else if (macState.getState().trim().length()==0) macState.setState(MacUtil.MAC_STATE_ACTIVE); -======= ->>>>>>> 0817ce8198b91bfaca7c43abedc8995c5a3746a6 String strMacAddress = allocateMacState(macState); if (strMacAddress != null) { macState.setMacAddress(strMacAddress); @@ -100,12 +97,8 @@ public String releaseMacState(String macAddress) throws Exception { macPoolRedisRepository.addItem(macAddress); macRedisRepository.deleteItem(macAddress); } -<<<<<<< HEAD return macState.getMacAddress(); //return new String ("{mac_address: " + macAddress+"}"); -======= - return macAddress; ->>>>>>> 0817ce8198b91bfaca7c43abedc8995c5a3746a6 } @Override @@ -116,11 +109,7 @@ public MacRange getMacRangeByMacRangeId(String macRangeId) { @Override public Map getAllMacRanges() { -<<<<<<< HEAD Map macRanges = macRangeRedisRepository.findAllItems(); -======= - Hashtable macRanges = (Hashtable) macRangeRedisRepository.findAllItems(); ->>>>>>> 0817ce8198b91bfaca7c43abedc8995c5a3746a6 return macRanges; } @@ -146,10 +135,7 @@ public String deleteMacRange(String rangeId) throws Exception { macRangeRedisRepository.deleteItem(rangeId); } return rangeId; -<<<<<<< HEAD //return new String ("{mac_range: " + rangeId+"}"); -======= ->>>>>>> 0817ce8198b91bfaca7c43abedc8995c5a3746a6 } private String allocateMacState(MacState macState) { diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/RedisMacRangePublisherServiceImpl.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/RedisMacRangePublisherServiceImpl.java index e73e1548f..4cb5474a5 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/RedisMacRangePublisherServiceImpl.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/RedisMacRangePublisherServiceImpl.java @@ -24,36 +24,20 @@ @Service public class RedisMacRangePublisherServiceImpl implements ICachePublisher { @Autowired -<<<<<<< HEAD private RedisTemplate redisTemplate; @Autowired private ChannelTopic topic; -======= - private RedisTemplate redisTemplate2; - - @Autowired - private ChannelTopic topic2; ->>>>>>> 0817ce8198b91bfaca7c43abedc8995c5a3746a6 public RedisMacRangePublisherServiceImpl() { } public RedisMacRangePublisherServiceImpl(final RedisTemplate redisTemplate, final ChannelTopic topic2) { -<<<<<<< HEAD this.redisTemplate = redisTemplate; this.topic = topic2; } public void publish(final String message) { redisTemplate.convertAndSend(topic.getTopic(), message); -======= - this.redisTemplate2 = redisTemplate; - this.topic2 = topic2; - } - - public void publish(final String message) { - redisTemplate2.convertAndSend(topic2.getTopic(), message); ->>>>>>> 0817ce8198b91bfaca7c43abedc8995c5a3746a6 } } diff --git a/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/AlcorMacManager/MacManagerApplicationTests.java b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/AlcorMacManager/MacManagerApplicationTests.java index 9e36c3d72..0b19ef50b 100644 --- a/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/AlcorMacManager/MacManagerApplicationTests.java +++ b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/AlcorMacManager/MacManagerApplicationTests.java @@ -1,27 +1,14 @@ package com.futurewei.alcor.macmanager.AlcorMacManager; -<<<<<<< HEAD -======= -import com.fasterxml.jackson.databind.ObjectMapper; -import com.futurewei.alcor.macmanager.entity.MacState; ->>>>>>> 0817ce8198b91bfaca7c43abedc8995c5a3746a6 import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -<<<<<<< HEAD -======= -import org.springframework.http.MediaType; ->>>>>>> 0817ce8198b91bfaca7c43abedc8995c5a3746a6 import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import static org.hamcrest.Matchers.containsString; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -<<<<<<< HEAD -======= -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; ->>>>>>> 0817ce8198b91bfaca7c43abedc8995c5a3746a6 import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -30,7 +17,6 @@ @SpringBootTest class MacManagerApplicationTests { -<<<<<<< HEAD @Autowired public MockMvc mvc; @@ -45,46 +31,4 @@ public void test_index() throws Exception { .andExpect(status().isOk()) .andExpect(content().string(containsString("MacManager"))); } -======= - @Autowired - public MockMvc mvc; - - @Test - void contextLoads() { - } - - @Test - public void test_index() throws Exception { - this.mvc.perform(get("/start.html")) - .andDo(print()) - .andExpect(status().isOk()) - .andExpect(content().string(containsString("MacManager"))); - } - -// @Test -// public void test_createMacState() throws Exception { -// MacState macState = new MacState("", "project1", "vpc1", "port1"); -// ObjectMapper objectMapper = new ObjectMapper(); -// String json = objectMapper.writeValueAsString(macState); -// this.mvc.perform(post("/macs") -// .contentType(MediaType.APPLICATION_JSON) -// .content(json)) -// .andExpect(status().isOk()) -// .andReturn(); -// } -// -// @Test -// public void test_getMacStateByMacAddress() throws Exception { -// this.mvc.perform(get("/macs/00-00-00-00-00-00")) -// .andDo(print()) -// .andExpect(status().isOk()); -// } -// -// @Test -// public void test_deleteMacStateByMacAddress() throws Exception { -// this.mvc.perform(get("/macs/00-00-00-00-00-00")) -// .andDo(print()) -// .andExpect(status().isOk()); -// } ->>>>>>> 0817ce8198b91bfaca7c43abedc8995c5a3746a6 } diff --git a/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java index ef32a3b73..6d0d0c9dc 100644 --- a/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java +++ b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java @@ -32,15 +32,7 @@ import org.springframework.http.MediaType; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; -<<<<<<< HEAD import org.springframework.web.bind.annotation.PathVariable; -======= -import org.springframework.test.web.servlet.MvcResult; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; - -import java.util.Hashtable; ->>>>>>> 0817ce8198b91bfaca7c43abedc8995c5a3746a6 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; @@ -192,11 +184,7 @@ public void test_getMacRangeByMacRangeId() throws Exception { .andExpect(status().isOk()); } -<<<<<<< HEAD public void test_getAllMacRanges(@PathVariable String rangeid) throws Exception { -======= - public void test_getAllMacRanges(@PathVariable String rangeid) throws Exception{ ->>>>>>> 0817ce8198b91bfaca7c43abedc8995c5a3746a6 MacRange macRange = new MacRange("range2", "00-AA-BB-11-22-22", "00-AA-BB-11-22-FF", "Active"); String strRangeId = createMacRange(macRange); macRange = new MacRange("range3", "00-AA-BB-11-33-33", "00-AA-BB-11-FF", "Active"); From 2d0b7a9f3debc50ea5a6b0383df109b53ad89e1a Mon Sep 17 00:00:00 2001 From: Eunju Kim Date: Sat, 18 Apr 2020 17:24:45 -0700 Subject: [PATCH 27/33] [Microservices] MAC manager - fixed 2 pictures --- .../images/services_macrange.png | Bin 18187 -> 18770 bytes .../images/services_macstate.png | Bin 33032 -> 32424 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/visionary_design/images/services_macrange.png b/docs/visionary_design/images/services_macrange.png index a496a64f6fcbc44cad504b077bfbbd3e0a83881b..50430fe9d5542f9b40b04ea80991c5fba220cdc9 100644 GIT binary patch literal 18770 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 diff --git a/docs/visionary_design/images/services_macstate.png b/docs/visionary_design/images/services_macstate.png index a0a0d57d8af079de3e067a50ee11c9d1fe0c0a12..03450f60418b067dd805f96b97172bb2da2b6794 100644 GIT binary patch literal 32424 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 Date: Mon, 20 Apr 2020 11:14:46 -0700 Subject: [PATCH 28/33] [Microservices] MAC manager - add concurrent mac creation function --- .../dao/MacPoolRedisRepository.java | 8 +- .../dao/MacRangeRedisRepository.java | 2 +- .../macmanager/dao/MacRedisRepository.java | 2 +- .../implement/MacRedisServiceImpl.java | 105 +++++++++++++++--- .../src/main/resources/application.properties | 3 +- 5 files changed, 97 insertions(+), 23 deletions(-) diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacPoolRedisRepository.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacPoolRedisRepository.java index ba9452665..d8a92db0a 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacPoolRedisRepository.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacPoolRedisRepository.java @@ -62,7 +62,8 @@ public Map findAllItems() { public void addItem(String newItem) { Logger logger = LoggerFactory.getLogger(); logger.log(Level.INFO, newItem); - setOperations.add(KEY, newItem); + if (setOperations.isMember(KEY, newItem) == false) + setOperations.add(KEY, newItem); } @Override @@ -71,7 +72,10 @@ public void deleteItem(String value) { } public String getItem() { - return (String) setOperations.randomMember(KEY); } + + public long getSize() { + return setOperations.size(KEY); + } } diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRangeRedisRepository.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRangeRedisRepository.java index 2b14c9ba8..c8d631d86 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRangeRedisRepository.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRangeRedisRepository.java @@ -63,7 +63,7 @@ public Map findAllItems() { public void addItem(MacRange newItem) { Logger logger = LoggerFactory.getLogger(); logger.log(Level.INFO, "mac address:" + newItem.getRangeId()); - hashOperations.put(KEY, newItem.getRangeId(), newItem); + hashOperations.putIfAbsent(KEY, newItem.getRangeId(), newItem); } @Override diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRedisRepository.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRedisRepository.java index 8eb47a6af..858271b29 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRedisRepository.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRedisRepository.java @@ -63,7 +63,7 @@ public Map findAllItems() { public void addItem(MacState newItem) { Logger logger = LoggerFactory.getLogger(); logger.log(Level.INFO, "mac address:" + newItem.getMacAddress()); - hashOperations.put(KEY, newItem.getMacAddress(), newItem); + hashOperations.putIfAbsent(KEY, newItem.getMacAddress(), newItem); } @Override diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacRedisServiceImpl.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacRedisServiceImpl.java index 7ddce21a7..5ef1992cf 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacRedisServiceImpl.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacRedisServiceImpl.java @@ -28,14 +28,16 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; -import java.util.HashMap; +import java.util.ArrayList; import java.util.Hashtable; import java.util.Map; import java.util.Vector; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.ThreadLocalRandom; @Service public class MacRedisServiceImpl implements MacService { + static public Hashtable activeMacRanges = new Hashtable(); final String DELIMITER = "/"; @Autowired @@ -50,7 +52,8 @@ public class MacRedisServiceImpl implements MacService { @Value("${macmanager.oui}") private String oui; - private HashMap macRanges = new HashMap(); + @Value("${macmanager.pool.size}") + private long nMacPoolSize; public MacState getMacStateByMacAddress(String macAddress) { MacState macState = macRedisRepository.findItem(macAddress); @@ -61,7 +64,48 @@ public MacState createMacState(MacState macState) throws Exception { MacAddress macAddress = new MacAddress(); if (macState.getState() == null) macState.setState(MacUtil.MAC_STATE_ACTIVE); - else if (macState.getState().trim().length()==0) + else if (macState.getState().trim().length() == 0) + macState.setState(MacUtil.MAC_STATE_ACTIVE); + if (macPoolRedisRepository.getSize() < (nMacPoolSize - 10)) { + CompletableFuture completableFuture = CompletableFuture.supplyAsync(() -> { + long n = 0; + try { + n = generateMacInPool(20); + } catch (Exception e) { + e.printStackTrace(); + } + return n; + }); + long l = completableFuture.get(); + completableFuture.thenAccept(System.out::println); + System.out.println(("# of new MAC: " + l)); + completableFuture.join(); + } + + String strMacAddress = allocateMacState(macState); + if (strMacAddress != null) { + macState.setMacAddress(strMacAddress); + macRedisRepository.addItem(macState); + } else { + String nic = generateNic(); + macAddress.setOui(oui); + macAddress.setNic(nic); + macState.setMacAddress(macAddress.getMacAddress()); + MacState macState2 = macRedisRepository.findItem(macAddress.getMacAddress()); + if (macRedisRepository.findItem(macAddress.getMacAddress()) != null) + throw (new UniquenessViolationException("This mac address is not unique!!" + macAddress.getMacAddress() + macState2.getProjectId())); + else + macRedisRepository.addItem(macState); + } + + return macState; + } + + public MacState createMacState1(MacState macState) throws Exception { + MacAddress macAddress = new MacAddress(); + if (macState.getState() == null) + macState.setState(MacUtil.MAC_STATE_ACTIVE); + else if (macState.getState().trim().length() == 0) macState.setState(MacUtil.MAC_STATE_ACTIVE); String strMacAddress = allocateMacState(macState); if (strMacAddress != null) { @@ -74,7 +118,7 @@ else if (macState.getState().trim().length()==0) macState.setMacAddress(macAddress.getMacAddress()); MacState macState2 = macRedisRepository.findItem(macAddress.getMacAddress()); if (macRedisRepository.findItem(macAddress.getMacAddress()) != null) - throw (new UniquenessViolationException("This mac address is not unique!!"+macAddress.getMacAddress()+macState2.getProjectId())); + throw (new UniquenessViolationException("This mac address is not unique!!" + macAddress.getMacAddress() + macState2.getProjectId())); else macRedisRepository.addItem(macState); } @@ -83,7 +127,7 @@ else if (macState.getState().trim().length()==0) @Override public MacState updateMacState(String macAddress, MacState macState) throws Exception { - if(macState != null) + if (macState != null) macRedisRepository.updateItem(macState); return macState; } @@ -94,11 +138,10 @@ public String releaseMacState(String macAddress) throws Exception { ResourceNotFoundException e = new ResourceNotFoundException("MAC address Not Found"); throw e; } else { - macPoolRedisRepository.addItem(macAddress); macRedisRepository.deleteItem(macAddress); + macPoolRedisRepository.addItem(macAddress); } return macState.getMacAddress(); - //return new String ("{mac_address: " + macAddress+"}"); } @Override @@ -117,6 +160,8 @@ public Map getAllMacRanges() { public MacRange createMacRange(MacRange macRange) throws Exception { if (macRange != null) { macRangeRedisRepository.addItem(macRange); + if (macRange.getState().equals(MacUtil.MAC_RANGE_STATE_ACTIVE)) + activeMacRanges.put(macRange.getRangeId(), macRange); } return macRange; } @@ -125,6 +170,10 @@ public MacRange createMacRange(MacRange macRange) throws Exception { public MacRange updateMacRange(MacRange macRange) throws Exception { if (macRange != null) { macRangeRedisRepository.updateItem(macRange); + if (macRange.getState().equals(MacUtil.MAC_RANGE_STATE_INACTIVE) && activeMacRanges.containsKey(macRange.getRangeId())) + activeMacRanges.remove(macRange.getRangeId(), macRange); + else if (macRange.getState().equals(MacUtil.MAC_RANGE_STATE_ACTIVE) && activeMacRanges.containsKey(macRange.getRangeId()) == false) + activeMacRanges.put(macRange.getRangeId(), macRange); } return macRange; } @@ -133,9 +182,9 @@ public MacRange updateMacRange(MacRange macRange) throws Exception { public String deleteMacRange(String rangeId) throws Exception { if (rangeId != null) { macRangeRedisRepository.deleteItem(rangeId); + activeMacRanges.remove(rangeId); } return rangeId; - //return new String ("{mac_range: " + rangeId+"}"); } private String allocateMacState(MacState macState) { @@ -172,28 +221,48 @@ private String generateNic() { private MacRange getMacRange() { MacRange macRange = new MacRange(); - Vector activeMacRanges = getActiveMacRanges(); + if (activeMacRanges.isEmpty()) + getActiveMacRanges(); int randomIndex = ThreadLocalRandom.current().nextInt(0, activeMacRanges.size()); - return activeMacRanges.get(randomIndex); + Vector vector = new Vector(activeMacRanges.keySet()); + return activeMacRanges.get(vector.elementAt(randomIndex)); } - public Vector getActiveMacRanges() { - Vector activeMacRanges = new Vector(); - - macRanges = (HashMap) macRangeRedisRepository.findAllItems(); + public void getActiveMacRanges() { + Hashtable macRanges = new Hashtable(macRangeRedisRepository.findAllItems()); + if (macRanges == null) + macRanges = new Hashtable(); int nSize = macRanges.size(); if (nSize > 0) { for (Map.Entry entry : macRanges.entrySet()) { - if (entry.getValue().getState().equals("Active")) { - activeMacRanges.add(entry.getValue()); + if (entry.getValue().getState().equals(MacUtil.MAC_RANGE_STATE_ACTIVE)) { + activeMacRanges.put(entry.getKey(), entry.getValue()); } } } else if (macRanges != null) { MacRange newRange = new MacRange(); newRange.createDefault(oui); macRangeRedisRepository.addItem(newRange); - activeMacRanges.add(newRange); + activeMacRanges.put(newRange.getRangeId(), newRange); + } + } + + public long generateMacInPool(int n) throws Exception { + long nReturn = 0; + ArrayList list = new ArrayList(); + if (n < 1) return nReturn; + MacAddress macAddress = new MacAddress(); + for (int i = 0; i < n; i++) { + String nic = generateNic(); + macAddress.setOui(oui); + macAddress.setNic(nic); + String strMacAddress = macAddress.getMacAddress(); + MacState macState = macRedisRepository.findItem(strMacAddress); + if (macState == null) { + macPoolRedisRepository.addItem(strMacAddress); + nReturn++; + } } - return activeMacRanges; + return nReturn; } } \ No newline at end of file diff --git a/services/mac_manager/src/main/resources/application.properties b/services/mac_manager/src/main/resources/application.properties index c2aeb08b5..046370a81 100644 --- a/services/mac_manager/src/main/resources/application.properties +++ b/services/mac_manager/src/main/resources/application.properties @@ -18,4 +18,5 @@ logging.type=file #ignite.key-store-password=123456 #ignite.trust-store-path=F:\\work\\alcor\\git\\chenpp\\alcor\\src\\resources\\truststore.jks #ignite.trust-store-password=123456 -macmanager.oui = 00-AA-BB \ No newline at end of file +macmanager.oui = 00-AA-BB +macmanager.pool.size = 100 \ No newline at end of file From b81ade7ae3314ec179eaa8482d99c70a465d17d2 Mon Sep 17 00:00:00 2001 From: Eunju Kim Date: Mon, 20 Apr 2020 11:38:55 -0700 Subject: [PATCH 29/33] [Microservices] MAC manager - reviewed and corrected the design document --- docs/visionary_design/mac_manager.adoc | Bin 25478 -> 25412 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/visionary_design/mac_manager.adoc b/docs/visionary_design/mac_manager.adoc index 626b82e70555c934e11f30e2d35051820cceddf3..d754b1e69c5384cd1ff8944ac23770aa96aa6028 100644 GIT binary patch delta 346 zcmYLFze_?<6h1dKcu?>}&?2!rv;;OZ)+XT~Jnf}V3oM@|&yxHBJ|iO9%Auj4GmIUo1%{kmuHA;$0GDQQ63ajj3s)FX!+*v5v~#JaVJXX7>I zQj^+rN-gSBjXKQe^2^0=JA(V{gR17nLM2TpklVRkJEU`xRA(=T=Lu^&bi^AEB|Dt4 zTJo$h&sFpJ3n6N_E@YraEBMSO z!vCRisz+E`3N<*YiIJ5O4t}k-koQdoqvDWr?NU*_l&*r9+lwl*92c0B7ckhL2p8X4 q484OJM0a(iSMJ1emQu9EHR}EqrpR~jt7XW<*GwePqOQ`amw`W@Q4zkVHiU#}0zit)eIe z*TVY)w4inq)W5*hNf!qv??rTZckjFJ?)&cUA6aL>dMRzZ1U{(XKp9HlfseCVQaXed z8rlM$=n3pWq)K(c^r1#vmAEBn1ep(Yk>T0qjp7l~rivS|%QW|h&!-1W4%+Zj zQ~0nRWkViKXh8+vHr8<0SRNB)myms^LJj+dGNFPUDA}+_^P5oRuf{P$GqXCK`nTbd zT!q?16lk3mc*v~acP@c5)|@0HwyY$+%TXLn$K(pxa`4JplEoq|yo|&#ob6&Sdx2)o zO$9$9VJs9+ab!Ejzl!I~XwX2Lgl&q=APOtu nQsPE!vL>=7y>&tz!pIW64n^;GFZ%u6bRBej4k`R;=Ro=a(r$9b From a2c0c5b1ceb3febdbc3f0f175ad4c567b8f9c405 Mon Sep 17 00:00:00 2001 From: Eunju Kim Date: Wed, 22 Apr 2020 11:18:04 -0700 Subject: [PATCH 30/33] [Microservices] MAC manager - synchronized redis transaction methods --- .../macmanager/controller/MacController.java | 5 +- .../dao/MacPoolRedisRepository.java | 12 +- .../dao/MacRangeRedisRepository.java | 11 +- .../macmanager/dao/MacRedisRepository.java | 21 +--- .../exception/InvalidMacRangeException.java | 32 ++++++ .../exception/RetryLimitExceedException.java | 32 ++++++ .../UniquenessViolationException.java | 2 - .../implement/MacRedisServiceImpl.java | 105 ++++++++++-------- .../alcor/macmanager/utils/MacUtil.java | 6 +- .../src/main/resources/application.properties | 3 +- 10 files changed, 148 insertions(+), 81 deletions(-) create mode 100644 services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/exception/InvalidMacRangeException.java create mode 100644 services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/exception/RetryLimitExceedException.java diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java index 67ef031a2..761f4a9a0 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/controller/MacController.java @@ -16,6 +16,7 @@ package com.futurewei.alcor.macmanager.controller; +import com.futurewei.alcor.common.entity.ResponseId; import com.futurewei.alcor.common.exception.ParameterNullOrEmptyException; import com.futurewei.alcor.common.exception.ResourcePersistenceException; import com.futurewei.alcor.macmanager.entity.MacRange; @@ -202,7 +203,7 @@ public MacRangeJson updateMacRange(@PathVariable String rangeid, @RequestBody Ma @RequestMapping( method = DELETE, value = {"/macs/ranges/{rangeid}", "/v4/macs/ranges/{rangeid}"}) - public String deleteMacRange(@PathVariable String rangeid) throws Exception { + public ResponseId deleteMacRange(@PathVariable String rangeid) throws Exception { String rangeId = null; try { RestPreconditionsUtil.verifyParameterNotNullorEmpty(rangeid); @@ -210,6 +211,6 @@ public String deleteMacRange(@PathVariable String rangeid) throws Exception { } catch (ParameterNullOrEmptyException e) { throw new Exception(e); } - return "{mac_range: " + rangeId + "}"; + return new ResponseId(rangeId); } } diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacPoolRedisRepository.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacPoolRedisRepository.java index d8a92db0a..ca08a78df 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacPoolRedisRepository.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacPoolRedisRepository.java @@ -46,7 +46,7 @@ private void init() { } @Override - public String findItem(String value) { + public synchronized String findItem(String value) { if (setOperations.isMember(KEY, value)) return value; else @@ -54,12 +54,12 @@ public String findItem(String value) { } @Override - public Map findAllItems() { + public synchronized Map findAllItems() { return (Map) setOperations.members(KEY); } @Override - public void addItem(String newItem) { + public synchronized void addItem(String newItem) { Logger logger = LoggerFactory.getLogger(); logger.log(Level.INFO, newItem); if (setOperations.isMember(KEY, newItem) == false) @@ -67,15 +67,15 @@ public void addItem(String newItem) { } @Override - public void deleteItem(String value) { + public synchronized void deleteItem(String value) { setOperations.remove(KEY, value); } - public String getItem() { + public synchronized String getItem() { return (String) setOperations.randomMember(KEY); } - public long getSize() { + public synchronized long getSize() { return setOperations.size(KEY); } } diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRangeRedisRepository.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRangeRedisRepository.java index c8d631d86..6aa95c12c 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRangeRedisRepository.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRangeRedisRepository.java @@ -48,30 +48,29 @@ private void init() { } @Override - public MacRange findItem(String id) { + public synchronized MacRange findItem(String id) { return (MacRange) hashOperations.get(KEY, id); } @Override - public Map findAllItems() { - System.out.print("test" + KEY); + public synchronized Map findAllItems() { return hashOperations.entries(KEY); } @Override - public void addItem(MacRange newItem) { + public synchronized void addItem(MacRange newItem) { Logger logger = LoggerFactory.getLogger(); logger.log(Level.INFO, "mac address:" + newItem.getRangeId()); hashOperations.putIfAbsent(KEY, newItem.getRangeId(), newItem); } @Override - public void deleteItem(String id) { + public synchronized void deleteItem(String id) { hashOperations.delete(KEY, id); } - public void updateItem(MacRange newItem) { + public synchronized void updateItem(MacRange newItem) { hashOperations.put(KEY, newItem.getRangeId(), newItem); } } diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRedisRepository.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRedisRepository.java index 858271b29..b6fc712c3 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRedisRepository.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRedisRepository.java @@ -49,43 +49,34 @@ private void init() { } @Override - public MacState findItem(String id) { + public synchronized MacState findItem(String id) { return (MacState) hashOperations.get(KEY, id); } @Override - public Map findAllItems() { + public synchronized Map findAllItems() { return hashOperations.entries(KEY); } @Override - public void addItem(MacState newItem) { + public synchronized void addItem(MacState newItem) { Logger logger = LoggerFactory.getLogger(); logger.log(Level.INFO, "mac address:" + newItem.getMacAddress()); hashOperations.putIfAbsent(KEY, newItem.getMacAddress(), newItem); } @Override - public void deleteItem(String id) { + public synchronized void deleteItem(String id) { hashOperations.delete(KEY, id); } - public void updateItem(MacState newItem) { + public synchronized void updateItem(MacState newItem) { hashOperations.put(KEY, newItem.getMacAddress(), newItem); } - public MacState findMac(String id) { + public synchronized MacState findMac(String id) { return (MacState) hashOperations.get(KEY, id); } - - public void setKey(String key) { - KEY = key; - } - - public boolean exisingOui(String oui) { - - return redisTemplate.hasKey(oui); - } } diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/exception/InvalidMacRangeException.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/exception/InvalidMacRangeException.java new file mode 100644 index 000000000..5b2f17e96 --- /dev/null +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/exception/InvalidMacRangeException.java @@ -0,0 +1,32 @@ +/*Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.futurewei.alcor.macmanager.exception; + +public class InvalidMacRangeException extends Exception { + public InvalidMacRangeException() { + } + + public InvalidMacRangeException(String message) { + super(message); + } + + public InvalidMacRangeException(String message, Throwable cause) { + super(message, cause); + } + + public InvalidMacRangeException(Throwable cause) { + super(cause); + } +} diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/exception/RetryLimitExceedException.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/exception/RetryLimitExceedException.java new file mode 100644 index 000000000..c4c7c4f08 --- /dev/null +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/exception/RetryLimitExceedException.java @@ -0,0 +1,32 @@ +/*Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.futurewei.alcor.macmanager.exception; + +public class RetryLimitExceedException extends Exception { + public RetryLimitExceedException() { + } + + public RetryLimitExceedException(String message) { + super(message); + } + + public RetryLimitExceedException(String message, Throwable cause) { + super(message, cause); + } + + public RetryLimitExceedException(Throwable cause) { + super(cause); + } +} diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/exception/UniquenessViolationException.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/exception/UniquenessViolationException.java index a738a7adc..78e081df4 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/exception/UniquenessViolationException.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/exception/UniquenessViolationException.java @@ -15,8 +15,6 @@ package com.futurewei.alcor.macmanager.exception; public class UniquenessViolationException extends Exception { - private static final long serialVersionUID = 1L; - public UniquenessViolationException() { } diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacRedisServiceImpl.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacRedisServiceImpl.java index 5ef1992cf..d0c178181 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacRedisServiceImpl.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacRedisServiceImpl.java @@ -21,9 +21,13 @@ import com.futurewei.alcor.macmanager.entity.MacAddress; import com.futurewei.alcor.macmanager.entity.MacRange; import com.futurewei.alcor.macmanager.entity.MacState; +import com.futurewei.alcor.macmanager.exception.InvalidMacRangeException; +import com.futurewei.alcor.macmanager.exception.RetryLimitExceedException; import com.futurewei.alcor.macmanager.exception.UniquenessViolationException; import com.futurewei.alcor.macmanager.service.MacService; import com.futurewei.alcor.macmanager.utils.MacUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -37,6 +41,7 @@ @Service public class MacRedisServiceImpl implements MacService { + private static final Logger LOG = LoggerFactory.getLogger(MacRedisServiceImpl.class); static public Hashtable activeMacRanges = new Hashtable(); final String DELIMITER = "/"; @@ -55,6 +60,9 @@ public class MacRedisServiceImpl implements MacService { @Value("${macmanager.pool.size}") private long nMacPoolSize; + @Value("${macmanager.retrylimit}") + private long nRetryLimit; + public MacState getMacStateByMacAddress(String macAddress) { MacState macState = macRedisRepository.findItem(macAddress); return macState; @@ -78,8 +86,8 @@ else if (macState.getState().trim().length() == 0) }); long l = completableFuture.get(); completableFuture.thenAccept(System.out::println); - System.out.println(("# of new MAC: " + l)); completableFuture.join(); + LOG.info("{} New MAC addresses were created.", l); } String strMacAddress = allocateMacState(macState); @@ -87,40 +95,19 @@ else if (macState.getState().trim().length() == 0) macState.setMacAddress(strMacAddress); macRedisRepository.addItem(macState); } else { - String nic = generateNic(); - macAddress.setOui(oui); - macAddress.setNic(nic); - macState.setMacAddress(macAddress.getMacAddress()); - MacState macState2 = macRedisRepository.findItem(macAddress.getMacAddress()); - if (macRedisRepository.findItem(macAddress.getMacAddress()) != null) - throw (new UniquenessViolationException("This mac address is not unique!!" + macAddress.getMacAddress() + macState2.getProjectId())); - else - macRedisRepository.addItem(macState); - } - - return macState; - } - - public MacState createMacState1(MacState macState) throws Exception { - MacAddress macAddress = new MacAddress(); - if (macState.getState() == null) - macState.setState(MacUtil.MAC_STATE_ACTIVE); - else if (macState.getState().trim().length() == 0) - macState.setState(MacUtil.MAC_STATE_ACTIVE); - String strMacAddress = allocateMacState(macState); - if (strMacAddress != null) { - macState.setMacAddress(strMacAddress); - macRedisRepository.addItem(macState); - } else { - String nic = generateNic(); - macAddress.setOui(oui); - macAddress.setNic(nic); - macState.setMacAddress(macAddress.getMacAddress()); - MacState macState2 = macRedisRepository.findItem(macAddress.getMacAddress()); - if (macRedisRepository.findItem(macAddress.getMacAddress()) != null) - throw (new UniquenessViolationException("This mac address is not unique!!" + macAddress.getMacAddress() + macState2.getProjectId())); - else - macRedisRepository.addItem(macState); + try { + String nic = generateNic(); + macAddress.setOui(oui); + macAddress.setNic(nic); + macState.setMacAddress(macAddress.getMacAddress()); + MacState macState2 = macRedisRepository.findItem(macAddress.getMacAddress()); + if (macRedisRepository.findItem(macAddress.getMacAddress()) != null) + throw (new UniquenessViolationException(MacUtil.MAC_EXCEPTION_UNIQUENESSSS_VILOATION + macAddress.getMacAddress() + macState2.getProjectId())); + else + macRedisRepository.addItem(macState); + } catch (Exception e) { + throw e; + } } return macState; } @@ -159,9 +146,12 @@ public Map getAllMacRanges() { @Override public MacRange createMacRange(MacRange macRange) throws Exception { if (macRange != null) { - macRangeRedisRepository.addItem(macRange); - if (macRange.getState().equals(MacUtil.MAC_RANGE_STATE_ACTIVE)) - activeMacRanges.put(macRange.getRangeId(), macRange); + if (isValidRange(macRange)) { + macRangeRedisRepository.addItem(macRange); + if (macRange.getState().equals(MacUtil.MAC_RANGE_STATE_ACTIVE)) + activeMacRanges.put(macRange.getRangeId(), macRange); + } else + throw (new InvalidMacRangeException(MacUtil.MAC_EXCEPTION_RANGE_VALUE_INVALID)); } return macRange; } @@ -195,7 +185,7 @@ private String allocateMacState(MacState macState) { return strMacAddress; } - private String generateNic() { + private String generateNic() throws Exception { String nic = null; MacAddress macAddress = new MacAddress(); long randomNic; @@ -208,14 +198,18 @@ private String generateNic() { to = MacAddress.macToLong(new MacAddress(macRange.getTo()).getNic()); } - while (nic == null) { + int i = 0; + while (nic == null && i < nRetryLimit) { randomNic = ThreadLocalRandom.current().nextLong(from, to); String nicTemp = MacAddress.hexToMac(Long.toHexString(randomNic)); macAddress.setNic(nicTemp); if (macRedisRepository.findMac(macAddress.getMacAddress()) == null && macPoolRedisRepository.findItem(macAddress.getMacAddress()) == null) { nic = nicTemp; } + i++; } + if (nic == null && i >= nRetryLimit) + throw new RetryLimitExceedException(MacUtil.MAC_EXCEPTION_RETRY_LIMIT_EXCEED); return nic; } @@ -247,22 +241,37 @@ public void getActiveMacRanges() { } } + private boolean isValidRange(MacRange macRange) { + String strFrom = macRange.getFrom(); + String strTo = macRange.getTo(); + long from = MacAddress.macToLong(new MacAddress(strFrom).getNic()); + long to = MacAddress.macToLong(new MacAddress(strTo).getNic()); + return from < to; + } + public long generateMacInPool(int n) throws Exception { + Exception exception = null; long nReturn = 0; ArrayList list = new ArrayList(); if (n < 1) return nReturn; MacAddress macAddress = new MacAddress(); for (int i = 0; i < n; i++) { - String nic = generateNic(); - macAddress.setOui(oui); - macAddress.setNic(nic); - String strMacAddress = macAddress.getMacAddress(); - MacState macState = macRedisRepository.findItem(strMacAddress); - if (macState == null) { - macPoolRedisRepository.addItem(strMacAddress); - nReturn++; + try { + String nic = generateNic(); + macAddress.setOui(oui); + macAddress.setNic(nic); + String strMacAddress = macAddress.getMacAddress(); + MacState macState = macRedisRepository.findItem(strMacAddress); + if (macState == null) { + macPoolRedisRepository.addItem(strMacAddress); + nReturn++; + } + } catch (RetryLimitExceedException e) { + exception = e; } } + if (exception != null) + throw exception; return nReturn; } } \ No newline at end of file diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/MacUtil.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/MacUtil.java index 6ded886bd..2f5ac2b0d 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/MacUtil.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/MacUtil.java @@ -16,10 +16,14 @@ public class MacUtil { public static final String MAC_STATE_ACTIVE = "Active"; - public static final String MAC_STATE_INACTIVE= "Inactive"; + public static final String MAC_STATE_INACTIVE = "Inactive"; public static final String DEFAULT_RANGE = "range0"; public static final String MAC_RANGE_STATE_ACTIVE = "Active"; public static final String MAC_RANGE_STATE_INACTIVE = "Inactive"; public static final String MAC_RANGE_STATE_EXCLUDE = "Exclude"; + + public static final String MAC_EXCEPTION_UNIQUENESSSS_VILOATION = "This mac address is not unique!!"; + public static final String MAC_EXCEPTION_RETRY_LIMIT_EXCEED = "It exceeded the limit of retry for to create a MAC. Please check active MAC ranges"; + public static final String MAC_EXCEPTION_RANGE_VALUE_INVALID = "MAC range is not vaild. Ranges' start value should be less than end value"; } diff --git a/services/mac_manager/src/main/resources/application.properties b/services/mac_manager/src/main/resources/application.properties index 046370a81..51f41efc3 100644 --- a/services/mac_manager/src/main/resources/application.properties +++ b/services/mac_manager/src/main/resources/application.properties @@ -19,4 +19,5 @@ logging.type=file #ignite.trust-store-path=F:\\work\\alcor\\git\\chenpp\\alcor\\src\\resources\\truststore.jks #ignite.trust-store-password=123456 macmanager.oui = 00-AA-BB -macmanager.pool.size = 100 \ No newline at end of file +macmanager.pool.size = 100 +macmanager.retrylimit = 10 \ No newline at end of file From d647d13499636f39b099d2e0037250aaef5fa5e3 Mon Sep 17 00:00:00 2001 From: Eunju Kim Date: Mon, 27 Apr 2020 06:18:08 -0700 Subject: [PATCH 31/33] [Microservices] Node manager - add controller, service, dao, entity, and UT --- .../alcor/common/repo/ICacheRepository.java | 2 +- pom.xml | 8 +- .../macmanager/config/RedisConfiguration.java | 4 +- .../macmanager/dao/MacRangeRepository.java | 99 ++++++ ...epository.java => MacStateRepository.java} | 62 +++- .../{ => redis}/MacPoolRedisRepository.java | 2 +- .../{ => redis}/MacRangeRedisRepository.java | 2 +- .../MacStateRedisRepository.java} | 6 +- .../alcor/macmanager/service/MacService.java | 9 +- .../service/implement/MacServiceImpl.java | 331 ++++++++++++++++++ .../RedisMacRangePublisherServiceImpl.java | 2 +- .../RedisMacServiceImpl.java} | 34 +- .../RedisPublisherServiceImpl.java | 2 +- .../alcor/macmanager/utils/MacUtil.java | 8 +- .../src/main/resources/application.properties | 2 + services/node_manager/.gitignore | 31 ++ .../.mvn/wrapper/MavenWrapperDownloader.java | 117 +++++++ .../.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 50710 bytes .../.mvn/wrapper/maven-wrapper.properties | 2 + services/node_manager/mvnw | 310 ++++++++++++++++ services/node_manager/mvnw.cmd | 182 ++++++++++ services/node_manager/pom.xml | 99 ++++++ .../nodemanager/NodeManagerApplication.java | 22 ++ .../controller/NodeController.java | 109 ++++++ .../dao/file/DataCenterConfig.java | 20 ++ .../dao/file/DataCenterConfigLoader.java | 93 +++++ .../dao/repository/NodeRepository.java | 86 +++++ .../alcor/nodemanager/entity/NodeInfo.java | 91 +++++ .../nodemanager/entity/NodeInfoJson.java | 41 +++ .../nodemanager/service/NodeService.java | 13 + .../service/implement/NodeManager.java | 81 +++++ .../service/implement/NodeServiceImpl.java | 91 +++++ .../alcor/nodemanager/utils/NodeUtil.java | 20 ++ .../utils/RestPreconditionsUtil.java | 35 ++ .../src/main/resources/application.properties | 9 + .../src/main/resources/static/start.html | 10 + .../NodeManagerApplicationTests.java | 33 ++ .../java/controller/NodeControllerTest.java | 118 +++++++ 38 files changed, 2131 insertions(+), 55 deletions(-) create mode 100644 services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRangeRepository.java rename services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/{MacRepository.java => MacStateRepository.java} (50%) rename services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/{ => redis}/MacPoolRedisRepository.java (98%) rename services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/{ => redis}/MacRangeRedisRepository.java (98%) rename services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/{MacRedisRepository.java => redis/MacStateRedisRepository.java} (91%) create mode 100644 services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacServiceImpl.java rename services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/{ => redis}/RedisMacRangePublisherServiceImpl.java (96%) rename services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/{MacRedisServiceImpl.java => redis/RedisMacServiceImpl.java} (88%) rename services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/{ => redis}/RedisPublisherServiceImpl.java (95%) create mode 100644 services/node_manager/.gitignore create mode 100644 services/node_manager/.mvn/wrapper/MavenWrapperDownloader.java create mode 100644 services/node_manager/.mvn/wrapper/maven-wrapper.jar create mode 100644 services/node_manager/.mvn/wrapper/maven-wrapper.properties create mode 100644 services/node_manager/mvnw create mode 100644 services/node_manager/mvnw.cmd create mode 100644 services/node_manager/pom.xml create mode 100644 services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/NodeManagerApplication.java create mode 100644 services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/controller/NodeController.java create mode 100644 services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/dao/file/DataCenterConfig.java create mode 100644 services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/dao/file/DataCenterConfigLoader.java create mode 100644 services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/dao/repository/NodeRepository.java create mode 100644 services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/entity/NodeInfo.java create mode 100644 services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/entity/NodeInfoJson.java create mode 100644 services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/NodeService.java create mode 100644 services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/implement/NodeManager.java create mode 100644 services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/implement/NodeServiceImpl.java create mode 100644 services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/utils/NodeUtil.java create mode 100644 services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/utils/RestPreconditionsUtil.java create mode 100644 services/node_manager/src/main/resources/application.properties create mode 100644 services/node_manager/src/main/resources/static/start.html create mode 100644 services/node_manager/src/test/java/com/futurewei/alcor/nodemanager/AlcorNodeManager/NodeManagerApplicationTests.java create mode 100644 services/node_manager/src/test/java/controller/NodeControllerTest.java diff --git a/lib/src/main/java/com/futurewei/alcor/common/repo/ICacheRepository.java b/lib/src/main/java/com/futurewei/alcor/common/repo/ICacheRepository.java index 209451e7b..98a358078 100644 --- a/lib/src/main/java/com/futurewei/alcor/common/repo/ICacheRepository.java +++ b/lib/src/main/java/com/futurewei/alcor/common/repo/ICacheRepository.java @@ -16,7 +16,7 @@ package com.futurewei.alcor.common.repo; -import com.futurewei.alcor.common.exception.CacheException; +import com.futurewei.alcor.common.db.CacheException; import java.util.Map; diff --git a/pom.xml b/pom.xml index 310808a23..357f1cb09 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,13 @@ com.futurewei.alcor.controller AlcorController 0.1.0-SNAPSHOT - jar + + services/node_manager + services/node_manager + services/node_manager + services/nodemanager + + pom 1.8 diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/config/RedisConfiguration.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/config/RedisConfiguration.java index 0f4df8ab6..6b0938cbb 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/config/RedisConfiguration.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/config/RedisConfiguration.java @@ -22,8 +22,8 @@ import com.futurewei.alcor.common.service.RedisListener; import com.futurewei.alcor.macmanager.entity.MacRange; import com.futurewei.alcor.macmanager.entity.MacState; -import com.futurewei.alcor.macmanager.service.implement.RedisMacRangePublisherServiceImpl; -import com.futurewei.alcor.macmanager.service.implement.RedisPublisherServiceImpl; +import com.futurewei.alcor.macmanager.service.implement.redis.RedisMacRangePublisherServiceImpl; +import com.futurewei.alcor.macmanager.service.implement.redis.RedisPublisherServiceImpl; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.domain.EntityScan; import org.springframework.context.annotation.Bean; diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRangeRepository.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRangeRepository.java new file mode 100644 index 000000000..0cb055fa1 --- /dev/null +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRangeRepository.java @@ -0,0 +1,99 @@ +/*Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.futurewei.alcor.macmanager.dao; + +import com.futurewei.alcor.common.db.CacheException; +import com.futurewei.alcor.common.db.CacheFactory; +import com.futurewei.alcor.common.db.ICache; +import com.futurewei.alcor.common.repo.ICacheRepository; +import com.futurewei.alcor.macmanager.entity.MacRange; +import com.futurewei.alcor.macmanager.entity.MacState; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.stereotype.Repository; + +import javax.annotation.PostConstruct; +import java.util.HashMap; +import java.util.Map; + +@Repository +@ComponentScan(value = "com.futurewei.alcor.common.db") +public class MacRangeRepository implements ICacheRepository { + private static final Logger logger = LoggerFactory.getLogger(MacRangeRepository.class); + private ICache cache; + + @Autowired + public MacRangeRepository(CacheFactory cacheFactory) { + cache = cacheFactory.getCache(MacRange.class); + } + + public ICache getCache() { + return cache; + } + + @PostConstruct + private void init() { + logger.info("MacRangeRepository init: Done"); + } + + @Override + public MacRange findItem(String rangeId) throws CacheException { + MacRange macRange = null; + try { + macRange = cache.get(rangeId); + } catch (CacheException e) { + logger.error("MacRangeRepository findItem() exception:", e); + throw e; + } + return macRange; + } + + @Override + public Map findAllItems() throws CacheException { + HashMap hashMap = new HashMap(); + try { + hashMap = new HashMap(cache.getAll()); + } catch (CacheException e) { + logger.error("MacRangeRepository findAllItems() exception:", e); + throw e; + } + + return hashMap; + } + + @Override + public void addItem(MacRange macRange) throws CacheException { + try { + cache.put(macRange.getRangeId(), macRange); + logger.info("MacRangeRepository addItem() {}: ", macRange.getRangeId()); + } catch (CacheException e) { + logger.error("MacRangeRepository addItem() exception:", e); + throw e; + } + } + + @Override + public void deleteItem(String rangeId) throws CacheException { + try { + cache.remove(rangeId); + logger.info("MacRangeRepository deleteItem() {}: ", rangeId); + } catch (CacheException e) { + logger.error("MacRangeRepository deleteItem() exception:", e); + throw e; + } + } +} \ No newline at end of file diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRepository.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacStateRepository.java similarity index 50% rename from services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRepository.java rename to services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacStateRepository.java index 359232807..26cca96ee 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRepository.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacStateRepository.java @@ -15,29 +15,29 @@ package com.futurewei.alcor.macmanager.dao; -import com.futurewei.alcor.common.exception.CacheException; -import com.futurewei.alcor.common.logging.Logger; -import com.futurewei.alcor.common.logging.LoggerFactory; -import com.futurewei.alcor.common.repo.ICache; +import com.futurewei.alcor.common.db.CacheException; +import com.futurewei.alcor.common.db.CacheFactory; +import com.futurewei.alcor.common.db.ICache; import com.futurewei.alcor.common.repo.ICacheRepository; -import com.futurewei.alcor.common.service.CacheFactory; import com.futurewei.alcor.macmanager.entity.MacState; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.context.annotation.ComponentScan; import org.springframework.stereotype.Repository; import javax.annotation.PostConstruct; +import java.util.HashMap; import java.util.Map; -import java.util.logging.Level; @Repository -@ConditionalOnBean(CacheFactory.class) -public class MacRepository implements ICacheRepository { - private static final Logger logger = LoggerFactory.getLogger(); +@ComponentScan(value = "com.futurewei.alcor.common.db") +public class MacStateRepository implements ICacheRepository { + private static final Logger logger = LoggerFactory.getLogger(MacStateRepository.class); private ICache cache; @Autowired - public MacRepository(CacheFactory cacheFactory) { + public MacStateRepository(CacheFactory cacheFactory) { cache = cacheFactory.getCache(MacState.class); } @@ -47,28 +47,52 @@ public ICache getCache() { @PostConstruct private void init() { - logger.log(Level.INFO, "MacRepository init completed"); + logger.info("MacState repository init: Done"); } @Override public MacState findItem(String macAddress) throws CacheException { - return cache.get(macAddress); + MacState macState = null; + try { + macState = cache.get(macAddress); + } catch (CacheException e) { + logger.error("MacStateRepository findItem() exception:", e); + throw e; + } + return macState; } @Override public Map findAllItems() throws CacheException { - return cache.getAll(); + HashMap hashMap = new HashMap(); + try { + hashMap = new HashMap(cache.getAll()); + } catch (CacheException e) { + logger.error("MacStateRepository findAllItems() exception:", e); + throw e; + } + return hashMap; } @Override public void addItem(MacState macState) throws CacheException { - logger.log(Level.INFO, "Add mac state, mac_state:" + macState.getMacAddress()); - cache.put(macState.getMacAddress(), macState); + try { + cache.put(macState.getMacAddress(), macState); + logger.info("MacStateRepository addItem() {}: ", macState.getMacAddress()); + } catch (CacheException e) { + logger.error("MacStateRepository addItem() exception:", e); + throw e; + } } @Override public void deleteItem(String macAddress) throws CacheException { - logger.log(Level.INFO, "Delete mac state, mac address:" + macAddress); - cache.remove(macAddress); + try { + cache.remove(macAddress); + logger.info("MacStateRepository deleteItem() {}: ", macAddress); + } catch (CacheException e) { + logger.error("MacStateRepository deleteItem() exception:", e); + throw e; + } } -} \ No newline at end of file +} diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacPoolRedisRepository.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/redis/MacPoolRedisRepository.java similarity index 98% rename from services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacPoolRedisRepository.java rename to services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/redis/MacPoolRedisRepository.java index ca08a78df..bdbf1bf0d 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacPoolRedisRepository.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/redis/MacPoolRedisRepository.java @@ -12,7 +12,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package com.futurewei.alcor.macmanager.dao; +package com.futurewei.alcor.macmanager.dao.redis; import com.futurewei.alcor.common.logging.Logger; import com.futurewei.alcor.common.logging.LoggerFactory; diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRangeRedisRepository.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/redis/MacRangeRedisRepository.java similarity index 98% rename from services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRangeRedisRepository.java rename to services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/redis/MacRangeRedisRepository.java index 6aa95c12c..a961f6ff3 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRangeRedisRepository.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/redis/MacRangeRedisRepository.java @@ -12,7 +12,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package com.futurewei.alcor.macmanager.dao; +package com.futurewei.alcor.macmanager.dao.redis; import com.futurewei.alcor.common.logging.Logger; import com.futurewei.alcor.common.logging.LoggerFactory; diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRedisRepository.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/redis/MacStateRedisRepository.java similarity index 91% rename from services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRedisRepository.java rename to services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/redis/MacStateRedisRepository.java index b6fc712c3..2a1e02c66 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/MacRedisRepository.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/dao/redis/MacStateRedisRepository.java @@ -13,7 +13,7 @@ limitations under the License. */ -package com.futurewei.alcor.macmanager.dao; +package com.futurewei.alcor.macmanager.dao.redis; import com.futurewei.alcor.common.logging.Logger; import com.futurewei.alcor.common.logging.LoggerFactory; @@ -29,7 +29,7 @@ import java.util.logging.Level; @Repository -public class MacRedisRepository implements ICacheRepository { +public class MacStateRedisRepository implements ICacheRepository { private String KEY = "mac_state"; @@ -38,7 +38,7 @@ public class MacRedisRepository implements ICacheRepository { private HashOperations hashOperations; @Autowired - public MacRedisRepository(RedisTemplate redisTemplate) { + public MacStateRedisRepository(RedisTemplate redisTemplate) { this.redisTemplate = redisTemplate; } diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/MacService.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/MacService.java index 5bbcbdd33..4567514a8 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/MacService.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/MacService.java @@ -2,14 +2,11 @@ import com.futurewei.alcor.macmanager.entity.MacRange; import com.futurewei.alcor.macmanager.entity.MacState; -import com.futurewei.alcor.macmanager.exception.UniquenessViolationException; -import java.util.Hashtable; import java.util.Map; -import java.util.Vector; public interface MacService { - MacState getMacStateByMacAddress(String macAddress); + MacState getMacStateByMacAddress(String macAddress) throws Exception; MacState createMacState(MacState macState) throws Exception; @@ -17,9 +14,9 @@ public interface MacService { String releaseMacState(String macAddress) throws Exception; - MacRange getMacRangeByMacRangeId(String macRangeId); + MacRange getMacRangeByMacRangeId(String macRangeId) throws Exception; - Map getAllMacRanges(); + Map getAllMacRanges() throws Exception; MacRange createMacRange(MacRange macRange) throws Exception; diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacServiceImpl.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacServiceImpl.java new file mode 100644 index 000000000..88b94e97e --- /dev/null +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacServiceImpl.java @@ -0,0 +1,331 @@ +/*Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.futurewei.alcor.macmanager.service.implement; + +import com.futurewei.alcor.common.exception.ParameterNullOrEmptyException; +import com.futurewei.alcor.common.exception.ParameterUnexpectedValueException; +import com.futurewei.alcor.common.exception.ResourceNotFoundException; +import com.futurewei.alcor.macmanager.dao.MacRangeRepository; +import com.futurewei.alcor.macmanager.dao.MacStateRepository; +import com.futurewei.alcor.macmanager.entity.MacAddress; +import com.futurewei.alcor.macmanager.entity.MacRange; +import com.futurewei.alcor.macmanager.entity.MacState; +import com.futurewei.alcor.macmanager.exception.InvalidMacRangeException; +import com.futurewei.alcor.macmanager.exception.RetryLimitExceedException; +import com.futurewei.alcor.macmanager.exception.UniquenessViolationException; +import com.futurewei.alcor.macmanager.service.MacService; +import com.futurewei.alcor.macmanager.utils.MacUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ThreadLocalRandom; + +@Service +public class MacServiceImpl implements MacService { + private static final Logger logger = LoggerFactory.getLogger(MacServiceImpl.class); + static public Hashtable activeMacRanges = new Hashtable(); + final String DELIMITER = "/"; + + @Autowired + private MacRangeRepository macRangeRepository; + + @Autowired + private MacStateRepository macStateRepository; + + @Value("${macmanager.oui}") + private String oui; + + @Value("${macmanager.pool.size}") + private long nMacPoolSize; + + @Value("${macmanager.retrylimit}") + private long nRetryLimit; + + private Set macPool; + + public MacState getMacStateByMacAddress(String macAddress) throws Exception { + MacState macState = null; + if ( macAddress == null) + throw (new ParameterNullOrEmptyException(MacUtil.MAC_EXCEPTION_PARAMETER_NULL_EMPTY)); + try{ + macState = macStateRepository.findItem(macAddress); + } catch(Exception e) + { + throw e; + } + return macState; + } + + public MacState createMacState(MacState macState) throws Exception { + if ( macState == null) + throw (new ParameterNullOrEmptyException(MacUtil.MAC_EXCEPTION_PARAMETER_NULL_EMPTY)); + MacAddress macAddress = new MacAddress(); + if (macState.getState() == null) + macState.setState(MacUtil.MAC_STATE_ACTIVE); + else if (macState.getState().trim().length() == 0) + macState.setState(MacUtil.MAC_STATE_ACTIVE); + if (macPool.size() < (nMacPoolSize - 10)) { + CompletableFuture completableFuture = CompletableFuture.supplyAsync(() -> { + long n = 0; + try { + n = generateMacInPool(20); + } catch (Exception e) { + + } + return n; + }); + long l = completableFuture.get(); + completableFuture.thenAccept(System.out::println); + completableFuture.join(); + logger.info("{} New MAC addresses were created.", l); + } + + String strMacAddress = allocateMacState(macState); + if (strMacAddress != null) { + macState.setMacAddress(strMacAddress); + macStateRepository.addItem(macState); + } else { + try { + String nic = generateNic(); + macAddress.setOui(oui); + macAddress.setNic(nic); + macState.setMacAddress(macAddress.getMacAddress()); + MacState macState2 = macStateRepository.findItem(macAddress.getMacAddress()); + if (macStateRepository.findItem(macAddress.getMacAddress()) != null) + throw (new UniquenessViolationException(MacUtil.MAC_EXCEPTION_UNIQUENESSSS_VILOATION + macAddress.getMacAddress() + macState2.getProjectId())); + else + macStateRepository.addItem(macState); + } catch (Exception e) { + throw e; + } + } + return macState; + } + + @Override + public MacState updateMacState(String macAddress, MacState macState) throws Exception { + if (macAddress == null || macState == null) + throw (new ParameterNullOrEmptyException(MacUtil.MAC_EXCEPTION_PARAMETER_NULL_EMPTY)); + if(macAddress.equals(macState.getMacAddress()) == false) + throw (new ParameterUnexpectedValueException(MacUtil.MAC_EXCEPTION_PARAMETER_INVALID)); + if (macStateRepository.findItem(macAddress) != null) { + macStateRepository.addItem(macState); + } else { + throw (new ResourceNotFoundException(MacUtil.MAC_EXCEPTION_MAC_NOT_EXISTING)); + } + return macState; + } + + public String releaseMacState(String macAddress) throws Exception { + if (macAddress == null) + throw (new ParameterNullOrEmptyException(MacUtil.MAC_EXCEPTION_PARAMETER_NULL_EMPTY)); + MacState macState = macStateRepository.findItem(macAddress); + if (macState == null) { + throw (new ResourceNotFoundException(MacUtil.MAC_EXCEPTION_MAC_NOT_EXISTING)); + } else { + try { + macStateRepository.deleteItem(macAddress); + macPool.add(macAddress); + }catch (Exception e) + { + throw e; + } + } + return macState.getMacAddress(); + } + + @Override + public MacRange getMacRangeByMacRangeId(String macRangeId) throws Exception { + if (macRangeId == null) + throw (new ParameterNullOrEmptyException(MacUtil.MAC_EXCEPTION_PARAMETER_NULL_EMPTY)); + MacRange macRange = null; + try{ + macRange = macRangeRepository.findItem(macRangeId); + } catch(Exception e) + { + throw e; + } + return macRange; + } + + @Override + public Map getAllMacRanges() throws Exception { + Hashtable macRanges = new Hashtable(); + try{ + macRanges.putAll(macRangeRepository.findAllItems()); + }catch (Exception e){ + throw e; + } + return macRanges; + } + + @Override + public MacRange createMacRange(MacRange macRange) throws Exception { + if (macRange == null) + throw (new ParameterNullOrEmptyException(MacUtil.MAC_EXCEPTION_PARAMETER_NULL_EMPTY)); + if (isValidRange(macRange) == false) + throw (new InvalidMacRangeException(MacUtil.MAC_EXCEPTION_RANGE_VALUE_INVALID)); + try { + macRangeRepository.addItem(macRange); + if (macRange.getState().equals(MacUtil.MAC_RANGE_STATE_ACTIVE)) + activeMacRanges.put(macRange.getRangeId(), macRange); + } catch (Exception e) { + throw e; + } + return macRange; + } + + @Override + public MacRange updateMacRange(MacRange macRange) throws Exception { + if (macRange == null) + throw (new ParameterNullOrEmptyException(MacUtil.MAC_EXCEPTION_PARAMETER_NULL_EMPTY)); + if (isValidRange(macRange) == false) + throw (new InvalidMacRangeException(MacUtil.MAC_EXCEPTION_RANGE_VALUE_INVALID)); + try { + macRangeRepository.deleteItem(macRange.getRangeId()); + macRangeRepository.addItem(macRange); + if (macRange.getState().equals(MacUtil.MAC_RANGE_STATE_INACTIVE) && activeMacRanges.containsKey(macRange.getRangeId())) + activeMacRanges.remove(macRange.getRangeId(), macRange); + else if (macRange.getState().equals(MacUtil.MAC_RANGE_STATE_ACTIVE) && activeMacRanges.containsKey(macRange.getRangeId()) == false) + activeMacRanges.put(macRange.getRangeId(), macRange); + } catch(Exception e) + { + throw e; + } + return macRange; + } + + @Override + public String deleteMacRange(String rangeId) throws Exception { + if (rangeId == null) + throw (new ParameterNullOrEmptyException(MacUtil.MAC_EXCEPTION_PARAMETER_NULL_EMPTY)); + try{ + macRangeRepository.deleteItem(rangeId); + activeMacRanges.remove(rangeId); + }catch (Exception e) + { + throw e; + } + return rangeId; + } + + private String allocateMacState(MacState macState) throws Exception { +// if (macState == null) +// throw (new ParameterNullOrEmptyException(MacUtil.MAC_EXCEPTION_PARAMETER_NULL_EMPTY)); +// try{ +// +// } +// //String strMacAddress = macPool. +// if (strMacAddress != null) { +// // macPool.deleteItem(strMacAddress); +// } + return null; //strMacAddress; + } + + private String generateNic() throws Exception { + String nic = null; + MacAddress macAddress = new MacAddress(); + long randomNic; + Long from = (long) 0; + Long to = (long) Math.pow(2, MacAddress.NIC_LENGTH); + + MacRange macRange = getMacRange(); + if (macRange != null) { + from = MacAddress.macToLong(new MacAddress(macRange.getFrom()).getNic()); + to = MacAddress.macToLong(new MacAddress(macRange.getTo()).getNic()); + } + + int i = 0; + while (nic == null && i < nRetryLimit) { + randomNic = ThreadLocalRandom.current().nextLong(from, to); + String nicTemp = MacAddress.hexToMac(Long.toHexString(randomNic)); + macAddress.setNic(nicTemp); + if ((macStateRepository.findItem(macAddress.getMacAddress()) == null) && (macPool.contains(macAddress.getMacAddress()) == false)) { + nic = nicTemp; + } + i++; + } + if (nic == null) + throw new RetryLimitExceedException(MacUtil.MAC_EXCEPTION_RETRY_LIMIT_EXCEED); + return nic; + } + + private MacRange getMacRange() throws Exception { + MacRange macRange = new MacRange(); + if (activeMacRanges.isEmpty()) + getActiveMacRanges(); + int randomIndex = ThreadLocalRandom.current().nextInt(0, activeMacRanges.size()); + Vector vector = new Vector(activeMacRanges.keySet()); + return activeMacRanges.get(vector.elementAt(randomIndex)); + } + + public void getActiveMacRanges() throws Exception { + Hashtable macRanges = new Hashtable(macRangeRepository.findAllItems()); + if (macRanges == null) + macRanges = new Hashtable(); + int nSize = macRanges.size(); + if (nSize > 0) { + for (Map.Entry entry : macRanges.entrySet()) { + if (entry.getValue().getState().equals(MacUtil.MAC_RANGE_STATE_ACTIVE)) { + activeMacRanges.put(entry.getKey(), entry.getValue()); + } + } + } else if (macRanges != null) { + MacRange newRange = new MacRange(); + newRange.createDefault(oui); + macRangeRepository.addItem(newRange); + activeMacRanges.put(newRange.getRangeId(), newRange); + } + } + + private boolean isValidRange(MacRange macRange) { + String strFrom = macRange.getFrom(); + String strTo = macRange.getTo(); + long from = MacAddress.macToLong(new MacAddress(strFrom).getNic()); + long to = MacAddress.macToLong(new MacAddress(strTo).getNic()); + return from < to; + } + + public long generateMacInPool(int n) throws Exception { + Exception exception = null; + long nReturn = 0; + ArrayList list = new ArrayList(); + if (n < 1) return nReturn; + MacAddress macAddress = new MacAddress(); + for (int i = 0; i < n; i++) { + try { + String nic = generateNic(); + macAddress.setOui(oui); + macAddress.setNic(nic); + String strMacAddress = macAddress.getMacAddress(); + MacState macState = macStateRepository.findItem(strMacAddress); + if (macState == null) { + //macPool.addItem(strMacAddress); + nReturn++; + } + } catch (RetryLimitExceedException e) { + exception = e; + } + } + if (exception != null) + throw exception; + return nReturn; + } +} diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/RedisMacRangePublisherServiceImpl.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/redis/RedisMacRangePublisherServiceImpl.java similarity index 96% rename from services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/RedisMacRangePublisherServiceImpl.java rename to services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/redis/RedisMacRangePublisherServiceImpl.java index 4cb5474a5..ebf5d4ba0 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/RedisMacRangePublisherServiceImpl.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/redis/RedisMacRangePublisherServiceImpl.java @@ -12,7 +12,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package com.futurewei.alcor.macmanager.service.implement; +package com.futurewei.alcor.macmanager.service.implement.redis; import com.futurewei.alcor.common.repo.ICachePublisher; import com.futurewei.alcor.macmanager.entity.MacRange; diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacRedisServiceImpl.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/redis/RedisMacServiceImpl.java similarity index 88% rename from services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacRedisServiceImpl.java rename to services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/redis/RedisMacServiceImpl.java index d0c178181..b4b246112 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/MacRedisServiceImpl.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/redis/RedisMacServiceImpl.java @@ -12,12 +12,12 @@ See the License for the specific language governing permissions and limitations under the License. */ -package com.futurewei.alcor.macmanager.service.implement; +package com.futurewei.alcor.macmanager.service.implement.redis; import com.futurewei.alcor.common.exception.ResourceNotFoundException; -import com.futurewei.alcor.macmanager.dao.MacPoolRedisRepository; -import com.futurewei.alcor.macmanager.dao.MacRangeRedisRepository; -import com.futurewei.alcor.macmanager.dao.MacRedisRepository; +import com.futurewei.alcor.macmanager.dao.redis.MacPoolRedisRepository; +import com.futurewei.alcor.macmanager.dao.redis.MacRangeRedisRepository; +import com.futurewei.alcor.macmanager.dao.redis.MacStateRedisRepository; import com.futurewei.alcor.macmanager.entity.MacAddress; import com.futurewei.alcor.macmanager.entity.MacRange; import com.futurewei.alcor.macmanager.entity.MacState; @@ -40,8 +40,8 @@ import java.util.concurrent.ThreadLocalRandom; @Service -public class MacRedisServiceImpl implements MacService { - private static final Logger LOG = LoggerFactory.getLogger(MacRedisServiceImpl.class); +public class RedisMacServiceImpl implements MacService { + private static final Logger LOG = LoggerFactory.getLogger(RedisMacServiceImpl.class); static public Hashtable activeMacRanges = new Hashtable(); final String DELIMITER = "/"; @@ -52,7 +52,7 @@ public class MacRedisServiceImpl implements MacService { private MacPoolRedisRepository macPoolRedisRepository; @Autowired - private MacRedisRepository macRedisRepository; + private MacStateRedisRepository macStateRedisRepository; @Value("${macmanager.oui}") private String oui; @@ -64,7 +64,7 @@ public class MacRedisServiceImpl implements MacService { private long nRetryLimit; public MacState getMacStateByMacAddress(String macAddress) { - MacState macState = macRedisRepository.findItem(macAddress); + MacState macState = macStateRedisRepository.findItem(macAddress); return macState; } @@ -93,18 +93,18 @@ else if (macState.getState().trim().length() == 0) String strMacAddress = allocateMacState(macState); if (strMacAddress != null) { macState.setMacAddress(strMacAddress); - macRedisRepository.addItem(macState); + macStateRedisRepository.addItem(macState); } else { try { String nic = generateNic(); macAddress.setOui(oui); macAddress.setNic(nic); macState.setMacAddress(macAddress.getMacAddress()); - MacState macState2 = macRedisRepository.findItem(macAddress.getMacAddress()); - if (macRedisRepository.findItem(macAddress.getMacAddress()) != null) + MacState macState2 = macStateRedisRepository.findItem(macAddress.getMacAddress()); + if (macStateRedisRepository.findItem(macAddress.getMacAddress()) != null) throw (new UniquenessViolationException(MacUtil.MAC_EXCEPTION_UNIQUENESSSS_VILOATION + macAddress.getMacAddress() + macState2.getProjectId())); else - macRedisRepository.addItem(macState); + macStateRedisRepository.addItem(macState); } catch (Exception e) { throw e; } @@ -115,17 +115,17 @@ else if (macState.getState().trim().length() == 0) @Override public MacState updateMacState(String macAddress, MacState macState) throws Exception { if (macState != null) - macRedisRepository.updateItem(macState); + macStateRedisRepository.updateItem(macState); return macState; } public String releaseMacState(String macAddress) throws Exception { - MacState macState = macRedisRepository.findItem(macAddress); + MacState macState = macStateRedisRepository.findItem(macAddress); if (macState == null) { ResourceNotFoundException e = new ResourceNotFoundException("MAC address Not Found"); throw e; } else { - macRedisRepository.deleteItem(macAddress); + macStateRedisRepository.deleteItem(macAddress); macPoolRedisRepository.addItem(macAddress); } return macState.getMacAddress(); @@ -203,7 +203,7 @@ private String generateNic() throws Exception { randomNic = ThreadLocalRandom.current().nextLong(from, to); String nicTemp = MacAddress.hexToMac(Long.toHexString(randomNic)); macAddress.setNic(nicTemp); - if (macRedisRepository.findMac(macAddress.getMacAddress()) == null && macPoolRedisRepository.findItem(macAddress.getMacAddress()) == null) { + if (macStateRedisRepository.findMac(macAddress.getMacAddress()) == null && macPoolRedisRepository.findItem(macAddress.getMacAddress()) == null) { nic = nicTemp; } i++; @@ -261,7 +261,7 @@ public long generateMacInPool(int n) throws Exception { macAddress.setOui(oui); macAddress.setNic(nic); String strMacAddress = macAddress.getMacAddress(); - MacState macState = macRedisRepository.findItem(strMacAddress); + MacState macState = macStateRedisRepository.findItem(strMacAddress); if (macState == null) { macPoolRedisRepository.addItem(strMacAddress); nReturn++; diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/RedisPublisherServiceImpl.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/redis/RedisPublisherServiceImpl.java similarity index 95% rename from services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/RedisPublisherServiceImpl.java rename to services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/redis/RedisPublisherServiceImpl.java index 6dceab39d..0bca8552f 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/RedisPublisherServiceImpl.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/service/implement/redis/RedisPublisherServiceImpl.java @@ -14,7 +14,7 @@ limitations under the License. */ -package com.futurewei.alcor.macmanager.service.implement; +package com.futurewei.alcor.macmanager.service.implement.redis; import com.futurewei.alcor.common.repo.ICachePublisher; import com.futurewei.alcor.macmanager.entity.MacState; diff --git a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/MacUtil.java b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/MacUtil.java index 2f5ac2b0d..9d7d24bb8 100644 --- a/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/MacUtil.java +++ b/services/mac_manager/src/main/java/com/futurewei/alcor/macmanager/utils/MacUtil.java @@ -24,6 +24,10 @@ public class MacUtil { public static final String MAC_RANGE_STATE_EXCLUDE = "Exclude"; public static final String MAC_EXCEPTION_UNIQUENESSSS_VILOATION = "This mac address is not unique!!"; - public static final String MAC_EXCEPTION_RETRY_LIMIT_EXCEED = "It exceeded the limit of retry for to create a MAC. Please check active MAC ranges"; - public static final String MAC_EXCEPTION_RANGE_VALUE_INVALID = "MAC range is not vaild. Ranges' start value should be less than end value"; + public static final String MAC_EXCEPTION_RETRY_LIMIT_EXCEED = "It exceeded the limit of retry for to create a MAC. Please check active MAC ranges."; + public static final String MAC_EXCEPTION_RANGE_VALUE_INVALID = "MAC range is not vaild. Ranges' start value should be less than end value."; + public static final String MAC_EXCEPTION_MAC_NOT_EXISTING = "Non existing MAC address."; + public static final String MAC_EXCEPTION_PARAMETER_NULL_EMPTY = "Parameter is null or empty"; + public static final String MAC_EXCEPTION_PARAMETER_INVALID = "Parameter data format or value is not valid"; + } diff --git a/services/mac_manager/src/main/resources/application.properties b/services/mac_manager/src/main/resources/application.properties index 51f41efc3..22e4de0a6 100644 --- a/services/mac_manager/src/main/resources/application.properties +++ b/services/mac_manager/src/main/resources/application.properties @@ -5,6 +5,8 @@ spring.redis.host=127.0.0.1 # Please check redis pod service cluster IP #spring.redis.host=10.99.0.27 spring.redis.port=6379 +ignite.host=127.0.0.1 +ignite.port=47500 #apache.kafka.address=172.17.0.1:9092 #Logging configuration logging.level.root=info diff --git a/services/node_manager/.gitignore b/services/node_manager/.gitignore new file mode 100644 index 000000000..a2a3040aa --- /dev/null +++ b/services/node_manager/.gitignore @@ -0,0 +1,31 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/** +!**/src/test/** + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ + +### VS Code ### +.vscode/ diff --git a/services/node_manager/.mvn/wrapper/MavenWrapperDownloader.java b/services/node_manager/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 000000000..e76d1f324 --- /dev/null +++ b/services/node_manager/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,117 @@ +/* + * Copyright 2007-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import java.net.*; +import java.io.*; +import java.nio.channels.*; +import java.util.Properties; + +public class MavenWrapperDownloader { + + private static final String WRAPPER_VERSION = "0.5.6"; + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" + + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if(mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if(mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if(!outputFile.getParentFile().exists()) { + if(!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { + String username = System.getenv("MVNW_USERNAME"); + char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); + Authenticator.setDefault(new Authenticator() { + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(username, password); + } + }); + } + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/services/node_manager/.mvn/wrapper/maven-wrapper.jar b/services/node_manager/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..2cc7d4a55c0cd0092912bf49ae38b3a9e3fd0054 GIT binary patch literal 50710 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 EfAhh=DF6Tf literal 0 HcmV?d00001 diff --git a/services/node_manager/.mvn/wrapper/maven-wrapper.properties b/services/node_manager/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 000000000..642d572ce --- /dev/null +++ b/services/node_manager/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,2 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/services/node_manager/mvnw b/services/node_manager/mvnw new file mode 100644 index 000000000..a16b5431b --- /dev/null +++ b/services/node_manager/mvnw @@ -0,0 +1,310 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/services/node_manager/mvnw.cmd b/services/node_manager/mvnw.cmd new file mode 100644 index 000000000..c8d43372c --- /dev/null +++ b/services/node_manager/mvnw.cmd @@ -0,0 +1,182 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + +FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/services/node_manager/pom.xml b/services/node_manager/pom.xml new file mode 100644 index 000000000..6d69136ae --- /dev/null +++ b/services/node_manager/pom.xml @@ -0,0 +1,99 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.2.6.RELEASE + + + com.futurewei.alcor.nodemanager + AlcorNodeManager + 0.0.1-SNAPSHOT + AlcorNodeManager + Physical Node Manager Module + + + 1.8 + 2.8.0 + + + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + org.springframework.boot + spring-boot-starter-web + + + com.google.protobuf + protobuf-java + 3.8.0 + + + org.projectlombok + lombok + 1.18.0 + + + org.apache.commons + commons-pool2 + 2.4.2 + + + com.googlecode.json-simple + json-simple + 1.1.1 + + + org.apache.ignite + ignite-core + ${ignite.version} + + + org.apache.ignite + ignite-spring + ${ignite.version} + + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.vintage + junit-vintage-engine + + + + + com.futurewei.alcor.common + AlcorCommonLib + 0.1.0-SNAPSHOT + compile + + + com.futurewei.alcor.controller + AlcorController + 0.1.0-SNAPSHOT + compile + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/NodeManagerApplication.java b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/NodeManagerApplication.java new file mode 100644 index 000000000..d891fe1d9 --- /dev/null +++ b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/NodeManagerApplication.java @@ -0,0 +1,22 @@ +package com.futurewei.alcor.nodemanager; + +import com.futurewei.alcor.controller.app.onebox.OneBoxConfig; +import com.futurewei.alcor.controller.app.onebox.OneBoxUtil; +import com.futurewei.alcor.controller.model.HostInfo; +import com.futurewei.alcor.controller.resourcemgr.physical.nodemgmt.DataCenterConfig; +import com.futurewei.alcor.controller.resourcemgr.physical.nodemgmt.DataCenterConfigLoader; +import com.futurewei.alcor.controller.resourcemgr.physical.nodemgmt.NodeManager; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +import java.util.List; +import java.util.logging.Level; + +@SpringBootApplication +public class NodeManagerApplication { + + public static void main(String[] args) { + SpringApplication.run(NodeManagerApplication.class, args); + } + +} diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/controller/NodeController.java b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/controller/NodeController.java new file mode 100644 index 000000000..5a69a6a90 --- /dev/null +++ b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/controller/NodeController.java @@ -0,0 +1,109 @@ +/*Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.futurewei.alcor.nodemanager.controller; + +import com.futurewei.alcor.common.exception.ParameterNullOrEmptyException; +import com.futurewei.alcor.common.exception.ResourcePersistenceException; +import com.futurewei.alcor.nodemanager.entity.NodeInfo; +import com.futurewei.alcor.nodemanager.entity.NodeInfoJson; +import com.futurewei.alcor.nodemanager.service.NodeService; +import com.futurewei.alcor.nodemanager.utils.RestPreconditionsUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.*; + +import static org.springframework.web.bind.annotation.RequestMethod.*; + +@RestController +public class NodeController { + + @Autowired + private NodeService service; + + @RequestMapping( + method = GET, + value = {"/nodes/{nodeid}", "/v4/nodes/{nodeid}"}) + public NodeInfoJson getNodeInfoByMacAddress(@PathVariable String nodeid) throws Exception { + NodeInfo hostInfo = null; + try { + RestPreconditionsUtil.verifyParameterNotNullorEmpty(nodeid); + hostInfo = service.getNodeInfoById(nodeid); + } catch (ParameterNullOrEmptyException e) { + //TODO: REST error code + throw new Exception(e); + } + + if (hostInfo == null) { + //TODO: REST error code + return new NodeInfoJson(); + } + return new NodeInfoJson(hostInfo); + } + + @RequestMapping( + method = POST, + value = {"/nodes", "/v4/nodes"}) + @ResponseStatus(HttpStatus.CREATED) + public NodeInfoJson createNodeInfo(@RequestBody NodeInfoJson resource) throws Exception { + NodeInfo hostInfo = null; + try { + NodeInfo inNodeInfo = resource.getNodeInfo(); + RestPreconditionsUtil.verifyParameterNotNullorEmpty(inNodeInfo); + hostInfo = service.createNodeInfo(inNodeInfo); + if (hostInfo == null) { + throw new ResourcePersistenceException(); + } + } catch (ParameterNullOrEmptyException e) { + throw new Exception(e); + } catch (Exception e) { + throw new Exception(e); + } + return new NodeInfoJson(hostInfo); + } + + @RequestMapping( + method = PUT, + value = {"/nodes/{nodeid}", "/v4/nodes/{nodeid}"}) + public NodeInfoJson updateNodeInfo(@PathVariable String nodeid, @RequestBody NodeInfoJson resource) throws Exception { + NodeInfo hostInfo = null; + try { + NodeInfo inNodeInfo = resource.getNodeInfo(); + RestPreconditionsUtil.verifyParameterNotNullorEmpty(inNodeInfo); + hostInfo = service.updateNodeInfo(nodeid, inNodeInfo); + if (hostInfo == null) { + throw new ResourcePersistenceException(); + } + } catch (ParameterNullOrEmptyException e) { + throw new Exception(e); + } catch (Exception e) { + throw new Exception(e); + } + return new NodeInfoJson(hostInfo); + } + + @RequestMapping( + method = DELETE, + value = {"/nodes/{nodeid}", "/v4/nodes/{nodeid}"}) + public String deleteMacAllocation(@PathVariable String nodeid) throws Exception { + String macAddress = null; + try { + RestPreconditionsUtil.verifyParameterNotNullorEmpty(nodeid); + macAddress = service.deleteNodeInfo(nodeid); + } catch (ParameterNullOrEmptyException e) { + throw new Exception(e); + } + return "{Node(Node) Id: " + nodeid + "}"; + } +} diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/dao/file/DataCenterConfig.java b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/dao/file/DataCenterConfig.java new file mode 100644 index 000000000..cff6a25be --- /dev/null +++ b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/dao/file/DataCenterConfig.java @@ -0,0 +1,20 @@ +/* +Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.futurewei.alcor.nodemanager.dao.file; + +public class DataCenterConfig { + +} diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/dao/file/DataCenterConfigLoader.java b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/dao/file/DataCenterConfigLoader.java new file mode 100644 index 000000000..94ef3044d --- /dev/null +++ b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/dao/file/DataCenterConfigLoader.java @@ -0,0 +1,93 @@ +/* +Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package com.futurewei.alcor.nodemanager.dao.file; + +import com.futurewei.alcor.controller.utilities.Common; +import com.futurewei.alcor.nodemanager.entity.NodeInfo; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.ResourceLoader; + +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.List; + +public class DataCenterConfigLoader { + private static final Logger logger = LoggerFactory.getLogger(DataCenterConfigLoader.class); + + @Autowired + private ResourceLoader resourceLoader; + + @Value("${alcor.machine.config:app/config/machine.json}") + private String machineConfigFile; + + String getPropertyFile() { + return resourceLoader.getResource(this.machineConfigFile).getFilename(); + } + + public List loadAndGetHostNodeList() { + logger.info("Loading node from " + this.machineConfigFile); + return this.loadAndGetHostNodeList(this.machineConfigFile); + } + + public List loadAndGetHostNodeList(String machineConfigFilePath) { + JSONParser jsonParser = new JSONParser(); + List nodeInfos = new ArrayList<>(); + logger.info(this.getClass().getName(), "loadAndGetHostNodeList(String machineConfigFilePath)"); + try (FileReader reader = new FileReader(machineConfigFilePath)) { + JSONObject obj = (JSONObject) jsonParser.parse(reader); + JSONArray nodeList = (JSONArray) obj.get("Hosts"); + + nodeList.forEach(node -> { + NodeInfo hostNode = this.parseNodeObject((JSONObject) node); + if (hostNode != null) nodeInfos.add(hostNode); + }); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (ParseException e) { + e.printStackTrace(); + } + return nodeInfos; + } + + private NodeInfo parseNodeObject(JSONObject node) { + String id = (String) node.get("id"); + String ip = (String) node.get("ip"); + String mac = (String) node.get("mac"); + System.out.println("Node ID:" + id + "|IP:" + ip + "|MAC:" + mac); + + byte[] ipByteArray; + try { + ipByteArray = Common.fromIpAddressStringToByteArray(ip); + return new NodeInfo(id, id, ipByteArray, mac); + } catch (UnknownHostException e) { + logger.error("UnknownHostException"); + } + return null; + } +} diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/dao/repository/NodeRepository.java b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/dao/repository/NodeRepository.java new file mode 100644 index 000000000..f2b2f3f36 --- /dev/null +++ b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/dao/repository/NodeRepository.java @@ -0,0 +1,86 @@ +/*Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.futurewei.alcor.nodemanager.dao.repository; + +import com.futurewei.alcor.common.db.CacheException; +import com.futurewei.alcor.common.db.CacheFactory; +import com.futurewei.alcor.common.db.ICache; +import com.futurewei.alcor.common.db.Transaction; +import com.futurewei.alcor.common.repo.ICacheRepository; +import com.futurewei.alcor.nodemanager.entity.NodeInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.stereotype.Repository; + +import javax.annotation.PostConstruct; +import java.util.Map; + +@Repository +@ComponentScan(value = "com.futurewei.alcor.common.db") +public class NodeRepository implements ICacheRepository { + private static final Logger logger = LoggerFactory.getLogger(NodeRepository.class); + private ICache cache; + + @Autowired + public NodeRepository(CacheFactory cacheFactory) { + cache = cacheFactory.getCache(NodeInfo.class); + } + + public ICache getCache() { + return cache; + } + + @PostConstruct + private void init() { + logger.info("NodeRepository init completed"); + } + + @Override + public NodeInfo findItem(String id) throws CacheException { + return cache.get(id); + } + + @Override + public Map findAllItems() throws CacheException { + return cache.getAll(); + } + + @Override + public void addItem(NodeInfo nodeInfo) throws CacheException { + logger.info("Add node, Node Id:" + nodeInfo.getId()); + cache.put(nodeInfo.getId(), nodeInfo); + } + + @Override + public void deleteItem(String id) throws CacheException { + logger.info("Delete node, Node Id:" + id); + cache.remove(id); + } + + public void addItemTransaction(NodeInfo nodeInfo) throws Exception { + logger.info("Add node, Node Id:" + nodeInfo.getId()); + cache.put(nodeInfo.getId(), nodeInfo); + String ipAddr; + + try (Transaction tx = cache.getTransaction().start()) { + cache.put(nodeInfo.getId(), nodeInfo); + tx.commit(); + } catch (Exception e) { + throw e; + } + } +} diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/entity/NodeInfo.java b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/entity/NodeInfo.java new file mode 100644 index 000000000..9998485f1 --- /dev/null +++ b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/entity/NodeInfo.java @@ -0,0 +1,91 @@ +/*Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.futurewei.alcor.nodemanager.entity; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.futurewei.alcor.nodemanager.utils.NodeUtil; +import lombok.Data; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.Serializable; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +@Data +public class NodeInfo implements Serializable { + private static final Logger logger = LoggerFactory.getLogger(NodeInfo.class); + + @JsonProperty("node_id") + private String id; + + @JsonProperty("node_name") + private String name; + + @JsonProperty("local_ip") + private InetAddress localIp; + + @JsonProperty("mac_address") + private String macAddress; + + @JsonProperty("veth") + private String veth; + + @JsonProperty("server_port") + private int gRPCServerPort; + + public NodeInfo() { + + } + + public NodeInfo(NodeInfo nodeInfo) { + this(nodeInfo.id, nodeInfo.name, nodeInfo.localIp, nodeInfo.macAddress, nodeInfo.gRPCServerPort); + } + + public NodeInfo(String id, String name, InetAddress localIp, String macAddress, int gRPCServerPort) { + this.id = id; + this.name = name; + this.localIp = localIp; + this.macAddress = macAddress; + this.gRPCServerPort = gRPCServerPort; + } + + public NodeInfo(String nodeId, String nodeName, byte[] ipAddress, String macAddress, int gRPCServerPort) { + this(nodeId, nodeName, ipAddress, macAddress); + this.gRPCServerPort = gRPCServerPort; + } + + public NodeInfo(String nodeId, String nodeName, byte[] ipAddress, String macAddress) { + this.id = nodeId; + try { + this.localIp = InetAddress.getByAddress(nodeName, ipAddress); + if (this.validate(macAddress)) { + this.macAddress = macAddress; + } else { + this.macAddress = null; + } + } catch (UnknownHostException e) { + logger.error(NodeUtil.NODE_EXCEPTION_NODE_IP_INVALID + ipAddress, e); + } + } + + private boolean validate(String mac) { + Pattern p = Pattern.compile("^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$"); + Matcher m = p.matcher(mac); + return m.find(); + } +} diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/entity/NodeInfoJson.java b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/entity/NodeInfoJson.java new file mode 100644 index 000000000..284e88f2b --- /dev/null +++ b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/entity/NodeInfoJson.java @@ -0,0 +1,41 @@ +/*Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.futurewei.alcor.nodemanager.entity; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +@Data +public class NodeInfoJson { + + @JsonProperty("host_info") + private NodeInfo nodeInfo; + + public NodeInfoJson() { + + } + + public NodeInfoJson(NodeInfo nodeInfo) { + this.nodeInfo = nodeInfo; + } + + public NodeInfo getNodeInfo() { + return nodeInfo; + } + + public void setNodeInfo(NodeInfo nodeInfo) { + this.nodeInfo = nodeInfo; + } +} diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/NodeService.java b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/NodeService.java new file mode 100644 index 000000000..b946a2be5 --- /dev/null +++ b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/NodeService.java @@ -0,0 +1,13 @@ +package com.futurewei.alcor.nodemanager.service; + +import com.futurewei.alcor.nodemanager.entity.NodeInfo; + +public interface NodeService { + NodeInfo getNodeInfoById(String nodeId) throws Exception; + + NodeInfo createNodeInfo(NodeInfo nodeInfo) throws Exception; + + NodeInfo updateNodeInfo(String nodeId, NodeInfo nodeInfo) throws Exception; + + String deleteNodeInfo(String nodeId) throws Exception; +} diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/implement/NodeManager.java b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/implement/NodeManager.java new file mode 100644 index 000000000..aa3314dc5 --- /dev/null +++ b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/implement/NodeManager.java @@ -0,0 +1,81 @@ +/*Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.futurewei.alcor.nodemanager.service.implement; + +import com.futurewei.alcor.controller.utilities.Common; +import com.futurewei.alcor.nodemanager.dao.file.DataCenterConfigLoader; +import com.futurewei.alcor.nodemanager.entity.NodeInfo; +import lombok.Data; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +@Data +public class NodeManager { + private static final Logger logger = LoggerFactory.getLogger(NodeManager.class); + private static int GRPC_SERVER_PORT = 50001; + private List nodes; + private HashMap nodeMap; + + public NodeManager(List hosts) { + this.nodes = NodeManager.LoadNodes(hosts); + for (NodeInfo host : hosts) { + logger.info("Log:" + host); + } + this.BuildMapFromNodeIdToInfo(this.nodes); + } + + private static List LoadNodes(List hosts) { + List nodeInfoList = new ArrayList<>(hosts); + for (int i = 0; i < nodeInfoList.size(); i++) { + NodeInfo host = nodeInfoList.get(i); + host.setGRPCServerPort(NodeManager.GRPC_SERVER_PORT); + } + return nodeInfoList; + } + + public NodeInfo getNodeInfoById(String hostId) { + if (this.nodeMap != null) { + logger.info("Log:" + "[NodeManager] Host id: " + hostId + " info:" + this.nodeMap.get(hostId)); + return this.nodeMap.get(hostId); + } + logger.info("[NodeManager] node map is empty"); + return null; + } + + public NodeInfo[] getRandomHosts(int count) { + NodeInfo[] randomHosts = new NodeInfo[count]; + for (int i = 0; i < count; i++) { + int index = Common.getRandomNumberInRange(0, this.getNodes().size() - 1); + randomHosts[i] = this.getNodes().get(index); + } + return randomHosts; + } + + private void BuildMapFromNodeIdToInfo(List hosts) { + if (hosts != null) { + if (this.nodeMap == null) { + this.nodeMap = new HashMap<>(); + } + logger.info("hosts size : " + hosts.size()); + for (NodeInfo host : hosts) { + this.nodeMap.put(host.getId(), host); + } + } + } +} diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/implement/NodeServiceImpl.java b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/implement/NodeServiceImpl.java new file mode 100644 index 000000000..1c988f5c2 --- /dev/null +++ b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/implement/NodeServiceImpl.java @@ -0,0 +1,91 @@ +/*Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.futurewei.alcor.nodemanager.service.implement; + +import com.futurewei.alcor.common.exception.ParameterNullOrEmptyException; +import com.futurewei.alcor.nodemanager.dao.file.DataCenterConfigLoader; +import com.futurewei.alcor.nodemanager.dao.repository.NodeRepository; +import com.futurewei.alcor.nodemanager.entity.NodeInfo; +import com.futurewei.alcor.nodemanager.service.NodeService; +import com.futurewei.alcor.nodemanager.utils.NodeUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.util.Hashtable; + +@Service +public class NodeServiceImpl implements NodeService { + private static final Logger logger = LoggerFactory.getLogger(NodeServiceImpl.class); + static public Hashtable Nodes = new Hashtable(); + + @Value("${nodemanager.nodeinfo.location}") + private String nodeInfoLocation; + + @Autowired + private NodeRepository nodeRepository; + + @Autowired + private DataCenterConfigLoader dataCenterConfigLoader; + + @Override + public NodeInfo getNodeInfoById(String hostId) throws Exception { + NodeInfo nodeInfo = null; + try { + nodeInfo = nodeRepository.findItem(hostId); + } catch (Exception e) { + throw e; + } + return nodeInfo; + } + + @Override + public NodeInfo createNodeInfo(NodeInfo nodeInfo) throws Exception { + if (nodeInfo != null) { + try { + nodeRepository.addItem(nodeInfo); + } catch (Exception e) { + throw e; + } + } + return nodeInfo; + } + + @Override + public NodeInfo updateNodeInfo(String hostId, NodeInfo nodeInfo) throws Exception { + if (nodeInfo != null) { + try { + nodeRepository.addItem(nodeInfo); + } catch (Exception e) { + throw e; + } + } + return nodeInfo; + } + + @Override + public String deleteNodeInfo(String hostId) throws Exception { + if (hostId == null) + throw (new ParameterNullOrEmptyException(NodeUtil.NODE_EXCEPTION_PARAMETER_NULL_EMPTY)); + try { + nodeRepository.deleteItem(hostId); + } catch (Exception e) { + throw e; + } + return hostId; + } +} diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/utils/NodeUtil.java b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/utils/NodeUtil.java new file mode 100644 index 000000000..5e32353ac --- /dev/null +++ b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/utils/NodeUtil.java @@ -0,0 +1,20 @@ +/*Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.futurewei.alcor.nodemanager.utils; + +public class NodeUtil { + public static final String NODE_EXCEPTION_PARAMETER_NULL_EMPTY = "Parameter is null or empty"; + public static final String NODE_EXCEPTION_NODE_IP_INVALID = "Invalid ip address"; +} diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/utils/RestPreconditionsUtil.java b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/utils/RestPreconditionsUtil.java new file mode 100644 index 000000000..9c3d2e611 --- /dev/null +++ b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/utils/RestPreconditionsUtil.java @@ -0,0 +1,35 @@ +/* +Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package com.futurewei.alcor.nodemanager.utils; + +import com.futurewei.alcor.common.exception.ParameterNullOrEmptyException; +import com.futurewei.alcor.nodemanager.entity.NodeInfo; +import org.thymeleaf.util.StringUtils; + +public class RestPreconditionsUtil { + public static void verifyParameterNotNullorEmpty(String resourceId) throws ParameterNullOrEmptyException { + if (StringUtils.isEmpty(resourceId)) { + throw new ParameterNullOrEmptyException("Empty parameter"); + } + } + + public static void verifyParameterNotNullorEmpty(NodeInfo resource) throws ParameterNullOrEmptyException { + if (resource == null) { + throw new ParameterNullOrEmptyException("null parameter"); + } + } +} \ No newline at end of file diff --git a/services/node_manager/src/main/resources/application.properties b/services/node_manager/src/main/resources/application.properties new file mode 100644 index 000000000..6404de22b --- /dev/null +++ b/services/node_manager/src/main/resources/application.properties @@ -0,0 +1,9 @@ +#ignite configuration +ignite.host=localhost +ignite.port=10800 +ignite.key-store-path=keystore.jks +ignite.key-store-password=123456 +ignite.trust-store-path=truststore.jks +ignite.trust-store-password=123456 +#1: machine.json file, 2:ignite db 3:both +nodemanager.nodeinfo.location=1 \ No newline at end of file diff --git a/services/node_manager/src/main/resources/static/start.html b/services/node_manager/src/main/resources/static/start.html new file mode 100644 index 000000000..0f03fb878 --- /dev/null +++ b/services/node_manager/src/main/resources/static/start.html @@ -0,0 +1,10 @@ + + + + + Start + + +Node Manager Module is running + + \ No newline at end of file diff --git a/services/node_manager/src/test/java/com/futurewei/alcor/nodemanager/AlcorNodeManager/NodeManagerApplicationTests.java b/services/node_manager/src/test/java/com/futurewei/alcor/nodemanager/AlcorNodeManager/NodeManagerApplicationTests.java new file mode 100644 index 000000000..c2c850f2c --- /dev/null +++ b/services/node_manager/src/test/java/com/futurewei/alcor/nodemanager/AlcorNodeManager/NodeManagerApplicationTests.java @@ -0,0 +1,33 @@ +package com.futurewei.alcor.nodemanager.AlcorNodeManager; + +import org.junit.jupiter.api.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +import static org.hamcrest.Matchers.containsString; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@RunWith(SpringRunner.class) +@SpringBootTest +class NodeManagerApplicationTests { + @Autowired + public MockMvc mvc; + + @Test + void contextLoads() { + } + + @Test + public void test_index() throws Exception { + this.mvc.perform(get("/start.html")) + .andDo(print()) + .andExpect(status().isOk()) + .andExpect(content().string(containsString("NodeManager"))); + } +} diff --git a/services/node_manager/src/test/java/controller/NodeControllerTest.java b/services/node_manager/src/test/java/controller/NodeControllerTest.java new file mode 100644 index 000000000..cf2259298 --- /dev/null +++ b/services/node_manager/src/test/java/controller/NodeControllerTest.java @@ -0,0 +1,118 @@ +/*Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package controller; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.futurewei.alcor.nodemanager.controller.NodeController; +import com.futurewei.alcor.nodemanager.entity.NodeInfo; +import com.futurewei.alcor.nodemanager.entity.NodeInfoJson; +import com.futurewei.alcor.nodemanager.service.NodeService; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +import java.net.InetAddress; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@RunWith(SpringRunner.class) +@SpringBootTest +@AutoConfigureMockMvc +public class NodeControllerTest { + private static final ObjectMapper om = new ObjectMapper(); + public NodeInfo testNodeInfo; + String strTestNodeId = ""; + + @Autowired + NodeService service; + + @Autowired + private MockMvc mockMvc; + + @MockBean + private NodeController mockController; + + @Before + public void init() { + byte[] ip = new byte[]{10,0,0,1}; + NodeInfo nodeInfo = new NodeInfo("h01", "host1", ip, "AA-BB-CC-DD-EE-00", 9000); + NodeInfoJson nodeInfoJson = new NodeInfoJson(nodeInfo); + ObjectMapper objectMapper = new ObjectMapper(); + + try { + String json = objectMapper.writeValueAsString(nodeInfoJson); + NodeInfo nodeInfo2 = service.createNodeInfo(nodeInfo); + strTestNodeId = nodeInfo2.getId(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Test + public void test_index() throws Exception { + this.mockMvc.perform(get("/start.html")) + .andDo(print()) + .andExpect(status().isOk()); + } + + public String createNodeInfo(NodeInfo nodeInfo) { + NodeInfoJson nodeInfoJson = new NodeInfoJson(nodeInfo); + ObjectMapper objectMapper = new ObjectMapper(); + String strNodeId = ""; + try { + String json = objectMapper.writeValueAsString(nodeInfoJson); + NodeInfo nodeInfo2 = service.createNodeInfo(nodeInfo); + strTestNodeId = nodeInfo2.getId(); + } catch (Exception e) { + e.printStackTrace(); + } + return strTestNodeId; + } + + public void updateNodeInfo() throws Exception { + InetAddress address2 = InetAddress.getByName("10.0.0.1"); + byte[] ip = new byte[]{10,0,0,1}; + NodeInfo nodeInfo = new NodeInfo("h01", "host1", ip, "AA-BB-CC-DD-EE-00", 9000); + NodeInfoJson nodeInfoJson = new NodeInfoJson(nodeInfo); + ObjectMapper objectMapper = new ObjectMapper(); + String json = objectMapper.writeValueAsString(nodeInfoJson); + + this.mockMvc.perform(put("/macs/nodes/h01") + .content(json) + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)) + .andExpect(status().isCreated()) + .andDo(print()); + } + + public void deleteNodeInfo() throws Exception { + byte[] ip = new byte[]{10,0,0,2}; + NodeInfo nodeInfo = new NodeInfo("h01", "host1", ip, "AA-BB-CC-DD-EE-00", 1000); + String strNodeId = createNodeInfo(nodeInfo); + System.out.println(strNodeId); + this.mockMvc.perform(delete("/nodes/" + strNodeId)) + .andDo(print()) + .andExpect(status().isOk()); + } +} \ No newline at end of file From ec24cf46fd84c7d5f1816447240b7f8dcf9c31bd Mon Sep 17 00:00:00 2001 From: Eunju Kim Date: Tue, 28 Apr 2020 06:31:48 -0700 Subject: [PATCH 32/33] Microservices] Node Manager - implemented UT and tested APIs. --- .../common/db/ignite/IgniteConfiguration.java | 2 +- services/node_manager/pom.xml | 6 - .../nodemanager/NodeManagerApplication.java | 9 -- .../controller/NodeController.java | 40 ++++++ .../dao/{repository => }/NodeRepository.java | 8 +- .../alcor/nodemanager/entity/NodeInfo.java | 16 ++- .../nodemanager/service/NodeService.java | 7 + .../datacenter}/DataCenterConfig.java | 2 +- .../datacenter}/DataCenterConfigLoader.java | 37 +++-- .../service/datacenter/NodeManager.java | 129 ++++++++++++++++++ .../service/datacenter/machine.json | 64 +++++++++ .../service/implement/NodeManager.java | 81 ----------- .../service/implement/NodeServiceImpl.java | 98 +++++++++++-- .../alcor/nodemanager/utils/NodeUtil.java | 3 + .../src/main/resources/application.properties | 5 +- .../NodeManagerApplicationTests.java | 7 +- .../controller/NodeControllerTest.java | 45 ++++-- 17 files changed, 415 insertions(+), 144 deletions(-) rename services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/dao/{repository => }/NodeRepository.java (92%) rename services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/{dao/file => service/datacenter}/DataCenterConfig.java (91%) rename services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/{dao/file => service/datacenter}/DataCenterConfigLoader.java (75%) create mode 100644 services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/datacenter/NodeManager.java create mode 100644 services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/datacenter/machine.json delete mode 100644 services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/implement/NodeManager.java rename services/node_manager/src/test/java/{ => com/futurewei/alcor/nodemanager}/controller/NodeControllerTest.java (83%) diff --git a/lib/src/main/java/com/futurewei/alcor/common/db/ignite/IgniteConfiguration.java b/lib/src/main/java/com/futurewei/alcor/common/db/ignite/IgniteConfiguration.java index 6674987d6..dff0ef958 100644 --- a/lib/src/main/java/com/futurewei/alcor/common/db/ignite/IgniteConfiguration.java +++ b/lib/src/main/java/com/futurewei/alcor/common/db/ignite/IgniteConfiguration.java @@ -80,7 +80,7 @@ public IgniteClient igniteClientInstance() { logger.log(Level.WARNING, "Unexpected failure:" + e.getMessage()); } - Assert.notNull(igniteClient, "IgniteClient is null"); + //Assert.notNull(igniteClient, "IgniteClient is null"); return igniteClient; } diff --git a/services/node_manager/pom.xml b/services/node_manager/pom.xml index 6d69136ae..8cfdf4e50 100644 --- a/services/node_manager/pom.xml +++ b/services/node_manager/pom.xml @@ -79,12 +79,6 @@ 0.1.0-SNAPSHOT compile - - com.futurewei.alcor.controller - AlcorController - 0.1.0-SNAPSHOT - compile - diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/NodeManagerApplication.java b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/NodeManagerApplication.java index d891fe1d9..e672ea85a 100644 --- a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/NodeManagerApplication.java +++ b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/NodeManagerApplication.java @@ -1,17 +1,8 @@ package com.futurewei.alcor.nodemanager; -import com.futurewei.alcor.controller.app.onebox.OneBoxConfig; -import com.futurewei.alcor.controller.app.onebox.OneBoxUtil; -import com.futurewei.alcor.controller.model.HostInfo; -import com.futurewei.alcor.controller.resourcemgr.physical.nodemgmt.DataCenterConfig; -import com.futurewei.alcor.controller.resourcemgr.physical.nodemgmt.DataCenterConfigLoader; -import com.futurewei.alcor.controller.resourcemgr.physical.nodemgmt.NodeManager; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import java.util.List; -import java.util.logging.Level; - @SpringBootApplication public class NodeManagerApplication { diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/controller/NodeController.java b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/controller/NodeController.java index 5a69a6a90..5cc1f80f8 100644 --- a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/controller/NodeController.java +++ b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/controller/NodeController.java @@ -24,6 +24,10 @@ import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; +import java.util.ArrayList; +import java.util.Hashtable; +import java.util.List; + import static org.springframework.web.bind.annotation.RequestMethod.*; @RestController @@ -52,6 +56,42 @@ public NodeInfoJson getNodeInfoByMacAddress(@PathVariable String nodeid) throws return new NodeInfoJson(hostInfo); } + @RequestMapping( + method = GET, + value = {"/nodes", "/v4/nodes"}) + public Hashtable getAllNodes() throws Exception { + Hashtable nodes = null; + try { + nodes = service.getAllNodes(); + } catch (ParameterNullOrEmptyException e) { + //TODO: REST error code + throw new Exception(e); + } + if (nodes == null) { + //TODO: REST error code + return new Hashtable(); + } + return nodes; + } + + @RequestMapping( + method = GET, + value = {"/nodeslist", "/v4/nodeslist"}) + public List getAllNodesList() throws Exception { + List nodes = null; + try { + nodes = service.getAllNodesList(); + } catch (ParameterNullOrEmptyException e) { + //TODO: REST error code + throw new Exception(e); + } + if (nodes == null) { + //TODO: REST error code + return new ArrayList(); + } + return nodes; + } + @RequestMapping( method = POST, value = {"/nodes", "/v4/nodes"}) diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/dao/repository/NodeRepository.java b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/dao/NodeRepository.java similarity index 92% rename from services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/dao/repository/NodeRepository.java rename to services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/dao/NodeRepository.java index f2b2f3f36..27641dcf9 100644 --- a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/dao/repository/NodeRepository.java +++ b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/dao/NodeRepository.java @@ -12,7 +12,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package com.futurewei.alcor.nodemanager.dao.repository; +package com.futurewei.alcor.nodemanager.dao; import com.futurewei.alcor.common.db.CacheException; import com.futurewei.alcor.common.db.CacheFactory; @@ -71,6 +71,12 @@ public void deleteItem(String id) throws CacheException { cache.remove(id); } + /** + * add a new node info to node repository + * @param nodeInfo new node information + * @return void + * @throws Exception Db or cache operation exception + */ public void addItemTransaction(NodeInfo nodeInfo) throws Exception { logger.info("Add node, Node Id:" + nodeInfo.getId()); cache.put(nodeInfo.getId(), nodeInfo); diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/entity/NodeInfo.java b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/entity/NodeInfo.java index 9998485f1..df433d68b 100644 --- a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/entity/NodeInfo.java +++ b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/entity/NodeInfo.java @@ -14,6 +14,7 @@ */ package com.futurewei.alcor.nodemanager.entity; +import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonProperty; import com.futurewei.alcor.nodemanager.utils.NodeUtil; import lombok.Data; @@ -27,6 +28,8 @@ import java.util.regex.Pattern; @Data +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) public class NodeInfo implements Serializable { private static final Logger logger = LoggerFactory.getLogger(NodeInfo.class); @@ -53,34 +56,39 @@ public NodeInfo() { } public NodeInfo(NodeInfo nodeInfo) { - this(nodeInfo.id, nodeInfo.name, nodeInfo.localIp, nodeInfo.macAddress, nodeInfo.gRPCServerPort); + this(nodeInfo.id, nodeInfo.name, nodeInfo.localIp, nodeInfo.macAddress, nodeInfo.veth, nodeInfo.gRPCServerPort); } - public NodeInfo(String id, String name, InetAddress localIp, String macAddress, int gRPCServerPort) { + public NodeInfo(String id, String name, InetAddress localIp, String macAddress, String veth, int gRPCServerPort) { this.id = id; this.name = name; this.localIp = localIp; this.macAddress = macAddress; + this.veth = veth; this.gRPCServerPort = gRPCServerPort; } public NodeInfo(String nodeId, String nodeName, byte[] ipAddress, String macAddress, int gRPCServerPort) { this(nodeId, nodeName, ipAddress, macAddress); + this.veth = ""; this.gRPCServerPort = gRPCServerPort; } public NodeInfo(String nodeId, String nodeName, byte[] ipAddress, String macAddress) { this.id = nodeId; + this.name = nodeName; try { - this.localIp = InetAddress.getByAddress(nodeName, ipAddress); + this.localIp = InetAddress.getByAddress(ipAddress); if (this.validate(macAddress)) { this.macAddress = macAddress; } else { - this.macAddress = null; + this.macAddress = ""; } } catch (UnknownHostException e) { logger.error(NodeUtil.NODE_EXCEPTION_NODE_IP_INVALID + ipAddress, e); } + this.veth = ""; + this.gRPCServerPort = NodeUtil.GRPC_SERVER_PORT; } private boolean validate(String mac) { diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/NodeService.java b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/NodeService.java index b946a2be5..207a60808 100644 --- a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/NodeService.java +++ b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/NodeService.java @@ -2,9 +2,16 @@ import com.futurewei.alcor.nodemanager.entity.NodeInfo; +import java.util.Hashtable; +import java.util.List; + public interface NodeService { NodeInfo getNodeInfoById(String nodeId) throws Exception; + Hashtable getAllNodes() throws Exception; + + List getAllNodesList() throws Exception; + NodeInfo createNodeInfo(NodeInfo nodeInfo) throws Exception; NodeInfo updateNodeInfo(String nodeId, NodeInfo nodeInfo) throws Exception; diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/dao/file/DataCenterConfig.java b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/datacenter/DataCenterConfig.java similarity index 91% rename from services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/dao/file/DataCenterConfig.java rename to services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/datacenter/DataCenterConfig.java index cff6a25be..fec1ed2d3 100644 --- a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/dao/file/DataCenterConfig.java +++ b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/datacenter/DataCenterConfig.java @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package com.futurewei.alcor.nodemanager.dao.file; +package com.futurewei.alcor.nodemanager.service.datacenter; public class DataCenterConfig { diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/dao/file/DataCenterConfigLoader.java b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/datacenter/DataCenterConfigLoader.java similarity index 75% rename from services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/dao/file/DataCenterConfigLoader.java rename to services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/datacenter/DataCenterConfigLoader.java index 94ef3044d..91c1509f6 100644 --- a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/dao/file/DataCenterConfigLoader.java +++ b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/datacenter/DataCenterConfigLoader.java @@ -14,9 +14,9 @@ limitations under the License. */ -package com.futurewei.alcor.nodemanager.dao.file; +package com.futurewei.alcor.nodemanager.service.datacenter; -import com.futurewei.alcor.controller.utilities.Common; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.futurewei.alcor.nodemanager.entity.NodeInfo; import org.json.simple.JSONArray; import org.json.simple.JSONObject; @@ -27,32 +27,37 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.ResourceLoader; +import org.springframework.stereotype.Component; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; +import java.net.InetAddress; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.List; +import java.util.Random; +@Component public class DataCenterConfigLoader { private static final Logger logger = LoggerFactory.getLogger(DataCenterConfigLoader.class); @Autowired private ResourceLoader resourceLoader; - @Value("${alcor.machine.config:app/config/machine.json}") + @Value("${alcor.machine.config:.\\machine.json}") private String machineConfigFile; - String getPropertyFile() { - return resourceLoader.getResource(this.machineConfigFile).getFilename(); - } + //String getPropertyFile() { + // return resourceLoader.getResource(this.machineConfigFile).getFilename(); + //} public List loadAndGetHostNodeList() { logger.info("Loading node from " + this.machineConfigFile); return this.loadAndGetHostNodeList(this.machineConfigFile); } + @JsonIgnore public List loadAndGetHostNodeList(String machineConfigFilePath) { JSONParser jsonParser = new JSONParser(); List nodeInfos = new ArrayList<>(); @@ -75,19 +80,33 @@ public List loadAndGetHostNodeList(String machineConfigFilePath) { return nodeInfos; } + @JsonIgnore private NodeInfo parseNodeObject(JSONObject node) { String id = (String) node.get("id"); String ip = (String) node.get("ip"); String mac = (String) node.get("mac"); - System.out.println("Node ID:" + id + "|IP:" + ip + "|MAC:" + mac); - byte[] ipByteArray; try { - ipByteArray = Common.fromIpAddressStringToByteArray(ip); + ipByteArray = fromIpAddressStringToByteArray(ip); return new NodeInfo(id, id, ipByteArray, mac); } catch (UnknownHostException e) { logger.error("UnknownHostException"); } return null; } + + @JsonIgnore + public byte[] fromIpAddressStringToByteArray(String ipAddressString) throws UnknownHostException { + InetAddress ip = InetAddress.getByName(ipAddressString); + byte[] bytes = ip.getAddress(); + return bytes; + } + + public int getRandomNumberInRange(int min, int max) { + if (min >= max) { + throw new IllegalArgumentException("Max must be greater than min"); + } + Random r = new Random(); + return r.nextInt((max - min) + 1) + min; + } } diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/datacenter/NodeManager.java b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/datacenter/NodeManager.java new file mode 100644 index 000000000..689aea9a5 --- /dev/null +++ b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/datacenter/NodeManager.java @@ -0,0 +1,129 @@ +/*Copyright 2019 The Alcor Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.futurewei.alcor.nodemanager.service.datacenter; + +//import com.futurewei.alcor.controller.utilities.Common; + +import com.futurewei.alcor.nodemanager.entity.NodeInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Hashtable; +import java.util.List; +import java.util.concurrent.ThreadLocalRandom; + +@Component +public class NodeManager { + private static final Logger logger = LoggerFactory.getLogger(NodeManager.class); + @Autowired + public DataCenterConfigLoader dataCenterConfigLoader; + + private List nodes; + private Hashtable nodeTable; + + public NodeManager() { + } + + public NodeManager(List nodes) { + this.nodes = LoadNodes(); + for (NodeInfo host : nodes) { + logger.info("Log:" + host); + } + this.BuildTableFromNodeIdToInfo(this.nodes); + } + + private List LoadNodes() { + if (nodes == null) + { + nodes = dataCenterConfigLoader.loadAndGetHostNodeList(); + BuildTableFromNodeIdToInfo(this.nodes); + } + else if (nodes.size() == 0){ + nodes = dataCenterConfigLoader.loadAndGetHostNodeList(); + BuildTableFromNodeIdToInfo(this.nodes); + } + return new ArrayList(nodeTable.values()); + } + + public NodeInfo getNodeInfoById(String hostId) { + LoadNodes(); + if (this.nodeTable != null) { + return this.nodeTable.get(hostId); + } else + return null; + } + + public Hashtable getAllNodes() { + LoadNodes(); + return this.nodeTable; + } + + public List getAllNodesList() { + nodes = LoadNodes(); + return this.nodes; + } + + public Collection getAllNodes2() { + LoadNodes(); + if (this.nodeTable != null) { + return this.nodeTable.values(); + } else + return null; + } + + public NodeInfo[] getRandomHosts(int count) { + LoadNodes(); + NodeInfo[] randomHosts = new NodeInfo[count]; + for (int i = 0; i < count; i++) { + int index = ThreadLocalRandom.current().nextInt(0, this.getAllNodes().size() - 1); + randomHosts[i] = this.getAllNodes().get(index); + } + return randomHosts; + } + + public void putNode(NodeInfo nodeInfo) { + LoadNodes(); + if (this.nodeTable != null) { + logger.info("Log:" + "[NodeManager] Add Host id: " + nodeInfo.getId()); + this.nodeTable.put(nodeInfo.getId(), nodeInfo); + } + } + + public String deleteNode(String nodeId) { + LoadNodes(); + if (this.nodeTable != null) { + logger.info("Log:" + "[NodeManager] Delete Host id: " + nodeId); + this.nodeTable.remove(nodeId); + } + return nodeId; + } + + private void BuildTableFromNodeIdToInfo(List nodes) { + nodeTable = new Hashtable(); + if (nodes != null) { + if (this.nodeTable == null) { + this.nodeTable = new Hashtable(); + } + logger.info("nodes size : " + nodes.size()); + for (NodeInfo node : nodes) { + this.nodeTable.put(node.getId(), node); + } + } + } +} diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/datacenter/machine.json b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/datacenter/machine.json new file mode 100644 index 000000000..953d09f4f --- /dev/null +++ b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/datacenter/machine.json @@ -0,0 +1,64 @@ +{ + "Hosts": [ + { + "id": "ephost_0", + "ip": "172.17.0.6", + "mac": "02:42:ac:11:00:06", + "veth": {} + }, + { + "id": "ephost_1", + "ip": "172.17.0.7", + "mac": "02:42:ac:11:00:07", + "veth": {} + }, + { + "id": "ephost_2", + "ip": "172.17.0.8", + "mac": "02:42:ac:11:00:08", + "veth": {} + }, + { + "id": "ephost_3", + "ip": "172.17.0.9", + "mac": "02:42:ac:11:00:09", + "veth": {} + }, + { + "id": "ephost_4", + "ip": "172.17.0.10", + "mac": "02:42:ac:11:00:0a", + "veth": {} + }, + { + "id": "ephost_5", + "ip": "172.17.0.11", + "mac": "02:42:ac:11:00:0b", + "veth": {} + }, + { + "id": "ephost_6", + "ip": "172.17.0.12", + "mac": "02:42:ac:11:00:0c", + "veth": {} + }, + { + "id": "ephost_7", + "ip": "172.17.0.13", + "mac": "02:42:ac:11:00:0d", + "veth": {} + }, + { + "id": "ephost_8", + "ip": "172.17.0.14", + "mac": "02:42:ac:11:00:0e", + "veth": {} + }, + { + "id": "ephost_9", + "ip": "172.17.0.15", + "mac": "02:42:ac:11:00:0f", + "veth": {} + } + ] +} diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/implement/NodeManager.java b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/implement/NodeManager.java deleted file mode 100644 index aa3314dc5..000000000 --- a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/implement/NodeManager.java +++ /dev/null @@ -1,81 +0,0 @@ -/*Copyright 2019 The Alcor Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.futurewei.alcor.nodemanager.service.implement; - -import com.futurewei.alcor.controller.utilities.Common; -import com.futurewei.alcor.nodemanager.dao.file.DataCenterConfigLoader; -import com.futurewei.alcor.nodemanager.entity.NodeInfo; -import lombok.Data; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -@Data -public class NodeManager { - private static final Logger logger = LoggerFactory.getLogger(NodeManager.class); - private static int GRPC_SERVER_PORT = 50001; - private List nodes; - private HashMap nodeMap; - - public NodeManager(List hosts) { - this.nodes = NodeManager.LoadNodes(hosts); - for (NodeInfo host : hosts) { - logger.info("Log:" + host); - } - this.BuildMapFromNodeIdToInfo(this.nodes); - } - - private static List LoadNodes(List hosts) { - List nodeInfoList = new ArrayList<>(hosts); - for (int i = 0; i < nodeInfoList.size(); i++) { - NodeInfo host = nodeInfoList.get(i); - host.setGRPCServerPort(NodeManager.GRPC_SERVER_PORT); - } - return nodeInfoList; - } - - public NodeInfo getNodeInfoById(String hostId) { - if (this.nodeMap != null) { - logger.info("Log:" + "[NodeManager] Host id: " + hostId + " info:" + this.nodeMap.get(hostId)); - return this.nodeMap.get(hostId); - } - logger.info("[NodeManager] node map is empty"); - return null; - } - - public NodeInfo[] getRandomHosts(int count) { - NodeInfo[] randomHosts = new NodeInfo[count]; - for (int i = 0; i < count; i++) { - int index = Common.getRandomNumberInRange(0, this.getNodes().size() - 1); - randomHosts[i] = this.getNodes().get(index); - } - return randomHosts; - } - - private void BuildMapFromNodeIdToInfo(List hosts) { - if (hosts != null) { - if (this.nodeMap == null) { - this.nodeMap = new HashMap<>(); - } - logger.info("hosts size : " + hosts.size()); - for (NodeInfo host : hosts) { - this.nodeMap.put(host.getId(), host); - } - } - } -} diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/implement/NodeServiceImpl.java b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/implement/NodeServiceImpl.java index 1c988f5c2..475057284 100644 --- a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/implement/NodeServiceImpl.java +++ b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/implement/NodeServiceImpl.java @@ -15,10 +15,11 @@ package com.futurewei.alcor.nodemanager.service.implement; import com.futurewei.alcor.common.exception.ParameterNullOrEmptyException; -import com.futurewei.alcor.nodemanager.dao.file.DataCenterConfigLoader; -import com.futurewei.alcor.nodemanager.dao.repository.NodeRepository; +import com.futurewei.alcor.nodemanager.service.datacenter.DataCenterConfigLoader; +import com.futurewei.alcor.nodemanager.dao.NodeRepository; import com.futurewei.alcor.nodemanager.entity.NodeInfo; import com.futurewei.alcor.nodemanager.service.NodeService; +import com.futurewei.alcor.nodemanager.service.datacenter.NodeManager; import com.futurewei.alcor.nodemanager.utils.NodeUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -26,38 +27,93 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.Hashtable; +import java.util.List; @Service public class NodeServiceImpl implements NodeService { private static final Logger logger = LoggerFactory.getLogger(NodeServiceImpl.class); - static public Hashtable Nodes = new Hashtable(); + public Hashtable Nodes = new Hashtable(); @Value("${nodemanager.nodeinfo.location}") - private String nodeInfoLocation; + private int nodeInfoLocation; @Autowired private NodeRepository nodeRepository; @Autowired - private DataCenterConfigLoader dataCenterConfigLoader; + private NodeManager nodeManager; @Override - public NodeInfo getNodeInfoById(String hostId) throws Exception { + public NodeInfo getNodeInfoById(String nodeId) throws Exception { NodeInfo nodeInfo = null; try { - nodeInfo = nodeRepository.findItem(hostId); + switch(nodeInfoLocation){ + case NodeUtil.NODE_INFO_FILE: { + nodeInfo = nodeManager.getNodeInfoById(nodeId); + } + case NodeUtil.NODE_INFO_REPOSITOTY: { + nodeInfo = nodeRepository.findItem(nodeId); + } + } } catch (Exception e) { throw e; } return nodeInfo; } + @Override + public Hashtable getAllNodes() throws Exception { + Hashtable nodes = new Hashtable(); + try { + switch(nodeInfoLocation){ + case NodeUtil.NODE_INFO_FILE: { + nodes = nodeManager.getAllNodes(); + break; + } + case NodeUtil.NODE_INFO_REPOSITOTY: { + nodes.putAll(nodeRepository.findAllItems()); + break; + } + } + } catch (Exception e) { + throw e; + } + return nodes; + } + + public List getAllNodesList() throws Exception { + List nodes = new ArrayList(); + try { + switch(nodeInfoLocation){ + case NodeUtil.NODE_INFO_FILE: { + nodes = nodeManager.getAllNodesList(); + break; + } + case NodeUtil.NODE_INFO_REPOSITOTY: { + nodes = new ArrayList(nodeRepository.findAllItems().values()); + break; + } + } + } catch (Exception e) { + throw e; + } + return nodes; + } + @Override public NodeInfo createNodeInfo(NodeInfo nodeInfo) throws Exception { if (nodeInfo != null) { try { - nodeRepository.addItem(nodeInfo); + switch(nodeInfoLocation){ + case NodeUtil.NODE_INFO_FILE: { + nodeManager.putNode(nodeInfo); + } + case NodeUtil.NODE_INFO_REPOSITOTY: { + nodeRepository.addItem(nodeInfo); + } + } } catch (Exception e) { throw e; } @@ -66,10 +122,17 @@ public NodeInfo createNodeInfo(NodeInfo nodeInfo) throws Exception { } @Override - public NodeInfo updateNodeInfo(String hostId, NodeInfo nodeInfo) throws Exception { + public NodeInfo updateNodeInfo(String nodeId, NodeInfo nodeInfo) throws Exception { if (nodeInfo != null) { try { - nodeRepository.addItem(nodeInfo); + switch(nodeInfoLocation){ + case NodeUtil.NODE_INFO_FILE: { + nodeManager.putNode(nodeInfo); + } + case NodeUtil.NODE_INFO_REPOSITOTY: { + nodeRepository.addItem(nodeInfo); + } + } } catch (Exception e) { throw e; } @@ -78,14 +141,21 @@ public NodeInfo updateNodeInfo(String hostId, NodeInfo nodeInfo) throws Exceptio } @Override - public String deleteNodeInfo(String hostId) throws Exception { - if (hostId == null) + public String deleteNodeInfo(String nodeId) throws Exception { + if (nodeId == null) throw (new ParameterNullOrEmptyException(NodeUtil.NODE_EXCEPTION_PARAMETER_NULL_EMPTY)); try { - nodeRepository.deleteItem(hostId); + switch(nodeInfoLocation){ + case NodeUtil.NODE_INFO_FILE: { + nodeManager.deleteNode(nodeId); + } + case NodeUtil.NODE_INFO_REPOSITOTY: { + nodeRepository.deleteItem(nodeId); + } + } } catch (Exception e) { throw e; } - return hostId; + return nodeId; } } diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/utils/NodeUtil.java b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/utils/NodeUtil.java index 5e32353ac..a137e3285 100644 --- a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/utils/NodeUtil.java +++ b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/utils/NodeUtil.java @@ -15,6 +15,9 @@ package com.futurewei.alcor.nodemanager.utils; public class NodeUtil { + public static final int NODE_INFO_FILE = 1; + public static final int NODE_INFO_REPOSITOTY = 2; + public static final int GRPC_SERVER_PORT = 50001; public static final String NODE_EXCEPTION_PARAMETER_NULL_EMPTY = "Parameter is null or empty"; public static final String NODE_EXCEPTION_NODE_IP_INVALID = "Invalid ip address"; } diff --git a/services/node_manager/src/main/resources/application.properties b/services/node_manager/src/main/resources/application.properties index 6404de22b..f5a368243 100644 --- a/services/node_manager/src/main/resources/application.properties +++ b/services/node_manager/src/main/resources/application.properties @@ -5,5 +5,6 @@ ignite.key-store-path=keystore.jks ignite.key-store-password=123456 ignite.trust-store-path=truststore.jks ignite.trust-store-password=123456 -#1: machine.json file, 2:ignite db 3:both -nodemanager.nodeinfo.location=1 \ No newline at end of file +#1: machine.json file, 2:ignite +nodemanager.nodeinfo.location=1 +alcor.machine.config=D:\\dev\\alcor\\config\\machine.json diff --git a/services/node_manager/src/test/java/com/futurewei/alcor/nodemanager/AlcorNodeManager/NodeManagerApplicationTests.java b/services/node_manager/src/test/java/com/futurewei/alcor/nodemanager/AlcorNodeManager/NodeManagerApplicationTests.java index c2c850f2c..e82b3b5cc 100644 --- a/services/node_manager/src/test/java/com/futurewei/alcor/nodemanager/AlcorNodeManager/NodeManagerApplicationTests.java +++ b/services/node_manager/src/test/java/com/futurewei/alcor/nodemanager/AlcorNodeManager/NodeManagerApplicationTests.java @@ -3,6 +3,7 @@ import org.junit.jupiter.api.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; @@ -13,9 +14,11 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; -@RunWith(SpringRunner.class) @SpringBootTest +@RunWith(SpringRunner.class) +@AutoConfigureMockMvc class NodeManagerApplicationTests { + @Autowired public MockMvc mvc; @@ -28,6 +31,6 @@ public void test_index() throws Exception { this.mvc.perform(get("/start.html")) .andDo(print()) .andExpect(status().isOk()) - .andExpect(content().string(containsString("NodeManager"))); + .andExpect(content().string(containsString("Node Manager"))); } } diff --git a/services/node_manager/src/test/java/controller/NodeControllerTest.java b/services/node_manager/src/test/java/com/futurewei/alcor/nodemanager/controller/NodeControllerTest.java similarity index 83% rename from services/node_manager/src/test/java/controller/NodeControllerTest.java rename to services/node_manager/src/test/java/com/futurewei/alcor/nodemanager/controller/NodeControllerTest.java index cf2259298..2db1d7d28 100644 --- a/services/node_manager/src/test/java/controller/NodeControllerTest.java +++ b/services/node_manager/src/test/java/com/futurewei/alcor/nodemanager/controller/NodeControllerTest.java @@ -12,7 +12,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package controller; +package com.futurewei.alcor.nodemanager.controller; import com.fasterxml.jackson.databind.ObjectMapper; import com.futurewei.alcor.nodemanager.controller.NodeController; @@ -57,7 +57,7 @@ public class NodeControllerTest { @Before public void init() { byte[] ip = new byte[]{10,0,0,1}; - NodeInfo nodeInfo = new NodeInfo("h01", "host1", ip, "AA-BB-CC-DD-EE-00", 9000); + NodeInfo nodeInfo = new NodeInfo("h01", "host1", ip, "AA-BB-CC-DD-EE-00"); NodeInfoJson nodeInfoJson = new NodeInfoJson(nodeInfo); ObjectMapper objectMapper = new ObjectMapper(); @@ -70,13 +70,6 @@ public void init() { } } - @Test - public void test_index() throws Exception { - this.mockMvc.perform(get("/start.html")) - .andDo(print()) - .andExpect(status().isOk()); - } - public String createNodeInfo(NodeInfo nodeInfo) { NodeInfoJson nodeInfoJson = new NodeInfoJson(nodeInfo); ObjectMapper objectMapper = new ObjectMapper(); @@ -91,24 +84,48 @@ public String createNodeInfo(NodeInfo nodeInfo) { return strTestNodeId; } - public void updateNodeInfo() throws Exception { - InetAddress address2 = InetAddress.getByName("10.0.0.1"); + @Test + public void test_index() throws Exception { + this.mockMvc.perform(get("/start.html")) + .andDo(print()) + .andExpect(status().isOk()); + } + + @Test + public void test_createNodeInfo() throws Exception { byte[] ip = new byte[]{10,0,0,1}; - NodeInfo nodeInfo = new NodeInfo("h01", "host1", ip, "AA-BB-CC-DD-EE-00", 9000); + NodeInfo nodeInfo = new NodeInfo("h01", "host1", ip, "AA-BB-CC-DD-EE-00"); NodeInfoJson nodeInfoJson = new NodeInfoJson(nodeInfo); ObjectMapper objectMapper = new ObjectMapper(); String json = objectMapper.writeValueAsString(nodeInfoJson); - this.mockMvc.perform(put("/macs/nodes/h01") + this.mockMvc.perform(post("/nodes") .content(json) .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)) .andExpect(status().isCreated()) .andDo(print()); } + @Test + public void updateNodeInfo() throws Exception { + InetAddress address2 = InetAddress.getByName("10.0.0.2"); + byte[] ip = new byte[]{10,0,0,2}; + NodeInfo nodeInfo = new NodeInfo("h01", "host2", ip, "AA-BB-CC-DD-EE-99"); + NodeInfoJson nodeInfoJson = new NodeInfoJson(nodeInfo); + ObjectMapper objectMapper = new ObjectMapper(); + String json = objectMapper.writeValueAsString(nodeInfoJson); + + this.mockMvc.perform(put("/nodes/h01") + .content(json) + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andDo(print()); + } + + @Test public void deleteNodeInfo() throws Exception { byte[] ip = new byte[]{10,0,0,2}; - NodeInfo nodeInfo = new NodeInfo("h01", "host1", ip, "AA-BB-CC-DD-EE-00", 1000); + NodeInfo nodeInfo = new NodeInfo("h01", "host1", ip, "AA-BB-CC-DD-EE-00"); String strNodeId = createNodeInfo(nodeInfo); System.out.println(strNodeId); this.mockMvc.perform(delete("/nodes/" + strNodeId)) From 4fbcbaf10a1f356299a9df59a00a008dd6946852 Mon Sep 17 00:00:00 2001 From: Eunju Kim Date: Tue, 28 Apr 2020 22:03:57 -0700 Subject: [PATCH 33/33] [Microservices Node Manager - Add exception handlings --- .../nodemanager/NodeManagerApplication.java | 1 - .../controller/NodeController.java | 24 +------ .../nodemanager/service/NodeService.java | 4 +- .../service/datacenter/NodeManager.java | 34 ++++------ .../service/datacenter/machine.json | 64 ------------------- .../service/implement/NodeServiceImpl.java | 62 ++++++++++-------- .../alcor/nodemanager/utils/NodeUtil.java | 4 ++ .../utils/RestPreconditionsUtil.java | 7 ++ .../NodeManagerApplicationTests.java | 24 +++---- .../controller/NodeControllerTest.java | 35 ++++++++-- 10 files changed, 105 insertions(+), 154 deletions(-) delete mode 100644 services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/datacenter/machine.json diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/NodeManagerApplication.java b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/NodeManagerApplication.java index e672ea85a..5dcb575ca 100644 --- a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/NodeManagerApplication.java +++ b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/NodeManagerApplication.java @@ -9,5 +9,4 @@ public class NodeManagerApplication { public static void main(String[] args) { SpringApplication.run(NodeManagerApplication.class, args); } - } diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/controller/NodeController.java b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/controller/NodeController.java index 5cc1f80f8..4e0eabbaa 100644 --- a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/controller/NodeController.java +++ b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/controller/NodeController.java @@ -25,7 +25,6 @@ import org.springframework.web.bind.annotation.*; import java.util.ArrayList; -import java.util.Hashtable; import java.util.List; import static org.springframework.web.bind.annotation.RequestMethod.*; @@ -59,28 +58,10 @@ public NodeInfoJson getNodeInfoByMacAddress(@PathVariable String nodeid) throws @RequestMapping( method = GET, value = {"/nodes", "/v4/nodes"}) - public Hashtable getAllNodes() throws Exception { - Hashtable nodes = null; - try { - nodes = service.getAllNodes(); - } catch (ParameterNullOrEmptyException e) { - //TODO: REST error code - throw new Exception(e); - } - if (nodes == null) { - //TODO: REST error code - return new Hashtable(); - } - return nodes; - } - - @RequestMapping( - method = GET, - value = {"/nodeslist", "/v4/nodeslist"}) - public List getAllNodesList() throws Exception { + public List getAllNodes() throws Exception { List nodes = null; try { - nodes = service.getAllNodesList(); + nodes = service.getAllNodes(); } catch (ParameterNullOrEmptyException e) { //TODO: REST error code throw new Exception(e); @@ -121,6 +102,7 @@ public NodeInfoJson updateNodeInfo(@PathVariable String nodeid, @RequestBody Nod try { NodeInfo inNodeInfo = resource.getNodeInfo(); RestPreconditionsUtil.verifyParameterNotNullorEmpty(inNodeInfo); + RestPreconditionsUtil.verifyParameterValid(nodeid, inNodeInfo); hostInfo = service.updateNodeInfo(nodeid, inNodeInfo); if (hostInfo == null) { throw new ResourcePersistenceException(); diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/NodeService.java b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/NodeService.java index 207a60808..e0ddf906f 100644 --- a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/NodeService.java +++ b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/NodeService.java @@ -8,9 +8,7 @@ public interface NodeService { NodeInfo getNodeInfoById(String nodeId) throws Exception; - Hashtable getAllNodes() throws Exception; - - List getAllNodesList() throws Exception; + List getAllNodes() throws Exception; NodeInfo createNodeInfo(NodeInfo nodeInfo) throws Exception; diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/datacenter/NodeManager.java b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/datacenter/NodeManager.java index 689aea9a5..a19112aba 100644 --- a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/datacenter/NodeManager.java +++ b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/datacenter/NodeManager.java @@ -31,40 +31,37 @@ @Component public class NodeManager { private static final Logger logger = LoggerFactory.getLogger(NodeManager.class); + @Autowired public DataCenterConfigLoader dataCenterConfigLoader; - private List nodes; + //private List nodes; private Hashtable nodeTable; public NodeManager() { + nodeTable = null; } public NodeManager(List nodes) { - this.nodes = LoadNodes(); - for (NodeInfo host : nodes) { - logger.info("Log:" + host); + nodeTable = null; + for (NodeInfo node : nodes) { + logger.info("Log:" + node); } - this.BuildTableFromNodeIdToInfo(this.nodes); + this.BuildTableFromNodeIdToInfo(nodes); } private List LoadNodes() { - if (nodes == null) - { - nodes = dataCenterConfigLoader.loadAndGetHostNodeList(); - BuildTableFromNodeIdToInfo(this.nodes); - } - else if (nodes.size() == 0){ - nodes = dataCenterConfigLoader.loadAndGetHostNodeList(); - BuildTableFromNodeIdToInfo(this.nodes); + if (nodeTable == null) { + List nodes = dataCenterConfigLoader.loadAndGetHostNodeList(); + BuildTableFromNodeIdToInfo(nodes); } return new ArrayList(nodeTable.values()); } - public NodeInfo getNodeInfoById(String hostId) { + public NodeInfo getNodeInfoById(String nodeId) { LoadNodes(); if (this.nodeTable != null) { - return this.nodeTable.get(hostId); + return this.nodeTable.get(nodeId); } else return null; } @@ -75,8 +72,8 @@ public Hashtable getAllNodes() { } public List getAllNodesList() { - nodes = LoadNodes(); - return this.nodes; + LoadNodes(); + return new ArrayList(nodeTable.values()); } public Collection getAllNodes2() { @@ -117,9 +114,6 @@ public String deleteNode(String nodeId) { private void BuildTableFromNodeIdToInfo(List nodes) { nodeTable = new Hashtable(); if (nodes != null) { - if (this.nodeTable == null) { - this.nodeTable = new Hashtable(); - } logger.info("nodes size : " + nodes.size()); for (NodeInfo node : nodes) { this.nodeTable.put(node.getId(), node); diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/datacenter/machine.json b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/datacenter/machine.json deleted file mode 100644 index 953d09f4f..000000000 --- a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/datacenter/machine.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "Hosts": [ - { - "id": "ephost_0", - "ip": "172.17.0.6", - "mac": "02:42:ac:11:00:06", - "veth": {} - }, - { - "id": "ephost_1", - "ip": "172.17.0.7", - "mac": "02:42:ac:11:00:07", - "veth": {} - }, - { - "id": "ephost_2", - "ip": "172.17.0.8", - "mac": "02:42:ac:11:00:08", - "veth": {} - }, - { - "id": "ephost_3", - "ip": "172.17.0.9", - "mac": "02:42:ac:11:00:09", - "veth": {} - }, - { - "id": "ephost_4", - "ip": "172.17.0.10", - "mac": "02:42:ac:11:00:0a", - "veth": {} - }, - { - "id": "ephost_5", - "ip": "172.17.0.11", - "mac": "02:42:ac:11:00:0b", - "veth": {} - }, - { - "id": "ephost_6", - "ip": "172.17.0.12", - "mac": "02:42:ac:11:00:0c", - "veth": {} - }, - { - "id": "ephost_7", - "ip": "172.17.0.13", - "mac": "02:42:ac:11:00:0d", - "veth": {} - }, - { - "id": "ephost_8", - "ip": "172.17.0.14", - "mac": "02:42:ac:11:00:0e", - "veth": {} - }, - { - "id": "ephost_9", - "ip": "172.17.0.15", - "mac": "02:42:ac:11:00:0f", - "veth": {} - } - ] -} diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/implement/NodeServiceImpl.java b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/implement/NodeServiceImpl.java index 475057284..c17c093ba 100644 --- a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/implement/NodeServiceImpl.java +++ b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/service/implement/NodeServiceImpl.java @@ -15,7 +15,6 @@ package com.futurewei.alcor.nodemanager.service.implement; import com.futurewei.alcor.common.exception.ParameterNullOrEmptyException; -import com.futurewei.alcor.nodemanager.service.datacenter.DataCenterConfigLoader; import com.futurewei.alcor.nodemanager.dao.NodeRepository; import com.futurewei.alcor.nodemanager.entity.NodeInfo; import com.futurewei.alcor.nodemanager.service.NodeService; @@ -47,14 +46,18 @@ public class NodeServiceImpl implements NodeService { @Override public NodeInfo getNodeInfoById(String nodeId) throws Exception { + if (nodeId == null) + throw (new ParameterNullOrEmptyException(NodeUtil.NODE_EXCEPTION_PARAMETER_NULL_EMPTY)); NodeInfo nodeInfo = null; try { - switch(nodeInfoLocation){ + switch (nodeInfoLocation) { case NodeUtil.NODE_INFO_FILE: { nodeInfo = nodeManager.getNodeInfoById(nodeId); + break; } case NodeUtil.NODE_INFO_REPOSITOTY: { nodeInfo = nodeRepository.findItem(nodeId); + break; } } } catch (Exception e) { @@ -64,29 +67,10 @@ public NodeInfo getNodeInfoById(String nodeId) throws Exception { } @Override - public Hashtable getAllNodes() throws Exception { - Hashtable nodes = new Hashtable(); - try { - switch(nodeInfoLocation){ - case NodeUtil.NODE_INFO_FILE: { - nodes = nodeManager.getAllNodes(); - break; - } - case NodeUtil.NODE_INFO_REPOSITOTY: { - nodes.putAll(nodeRepository.findAllItems()); - break; - } - } - } catch (Exception e) { - throw e; - } - return nodes; - } - - public List getAllNodesList() throws Exception { + public List getAllNodes() throws Exception { List nodes = new ArrayList(); try { - switch(nodeInfoLocation){ + switch (nodeInfoLocation) { case NodeUtil.NODE_INFO_FILE: { nodes = nodeManager.getAllNodesList(); break; @@ -104,14 +88,23 @@ public List getAllNodesList() throws Exception { @Override public NodeInfo createNodeInfo(NodeInfo nodeInfo) throws Exception { + if (nodeInfo == null) + throw (new ParameterNullOrEmptyException(NodeUtil.NODE_EXCEPTION_PARAMETER_NULL_EMPTY)); + NodeInfo node = getNodeInfoById(nodeInfo.getId()); + if (node != null) { + if (nodeInfo.getId().equals(node.getId())) + throw (new ParameterNullOrEmptyException(NodeUtil.NODE_EXCEPTION_NODE_ALREADY_EXISTING)); + } if (nodeInfo != null) { try { - switch(nodeInfoLocation){ + switch (nodeInfoLocation) { case NodeUtil.NODE_INFO_FILE: { nodeManager.putNode(nodeInfo); + break; } case NodeUtil.NODE_INFO_REPOSITOTY: { nodeRepository.addItem(nodeInfo); + break; } } } catch (Exception e) { @@ -123,14 +116,24 @@ public NodeInfo createNodeInfo(NodeInfo nodeInfo) throws Exception { @Override public NodeInfo updateNodeInfo(String nodeId, NodeInfo nodeInfo) throws Exception { + if (nodeId == null || nodeInfo == null) + throw (new ParameterNullOrEmptyException(NodeUtil.NODE_EXCEPTION_PARAMETER_NULL_EMPTY)); + NodeInfo node = getNodeInfoById(nodeId); + if (node == null) + throw (new ParameterNullOrEmptyException(NodeUtil.NODE_EXCEPTION_NODE_NOT_EXISTING)); + else if (nodeId.equals(node.getId()) == false) { + throw (new ParameterNullOrEmptyException(NodeUtil.NODE_EXCEPTION_NODE_NOT_EXISTING)); + } if (nodeInfo != null) { try { - switch(nodeInfoLocation){ + switch (nodeInfoLocation) { case NodeUtil.NODE_INFO_FILE: { nodeManager.putNode(nodeInfo); + break; } case NodeUtil.NODE_INFO_REPOSITOTY: { nodeRepository.addItem(nodeInfo); + break; } } } catch (Exception e) { @@ -144,13 +147,20 @@ public NodeInfo updateNodeInfo(String nodeId, NodeInfo nodeInfo) throws Exceptio public String deleteNodeInfo(String nodeId) throws Exception { if (nodeId == null) throw (new ParameterNullOrEmptyException(NodeUtil.NODE_EXCEPTION_PARAMETER_NULL_EMPTY)); + NodeInfo node = getNodeInfoById(nodeId); + if (node == null) + throw (new ParameterNullOrEmptyException(NodeUtil.NODE_EXCEPTION_NODE_NOT_EXISTING)); + else if (nodeId.equals(node.getId()) == false) + throw (new ParameterNullOrEmptyException(NodeUtil.NODE_EXCEPTION_NODE_NOT_EXISTING)); try { - switch(nodeInfoLocation){ + switch (nodeInfoLocation) { case NodeUtil.NODE_INFO_FILE: { nodeManager.deleteNode(nodeId); + break; } case NodeUtil.NODE_INFO_REPOSITOTY: { nodeRepository.deleteItem(nodeId); + break; } } } catch (Exception e) { diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/utils/NodeUtil.java b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/utils/NodeUtil.java index a137e3285..0935e0072 100644 --- a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/utils/NodeUtil.java +++ b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/utils/NodeUtil.java @@ -18,6 +18,10 @@ public class NodeUtil { public static final int NODE_INFO_FILE = 1; public static final int NODE_INFO_REPOSITOTY = 2; public static final int GRPC_SERVER_PORT = 50001; + + //Exception Messages public static final String NODE_EXCEPTION_PARAMETER_NULL_EMPTY = "Parameter is null or empty"; public static final String NODE_EXCEPTION_NODE_IP_INVALID = "Invalid ip address"; + public static final String NODE_EXCEPTION_NODE_NOT_EXISTING = "The node to update or delete is not existing."; + public static final String NODE_EXCEPTION_NODE_ALREADY_EXISTING = "The node to create is already existing."; } diff --git a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/utils/RestPreconditionsUtil.java b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/utils/RestPreconditionsUtil.java index 9c3d2e611..c3e33914c 100644 --- a/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/utils/RestPreconditionsUtil.java +++ b/services/node_manager/src/main/java/com/futurewei/alcor/nodemanager/utils/RestPreconditionsUtil.java @@ -17,6 +17,7 @@ package com.futurewei.alcor.nodemanager.utils; import com.futurewei.alcor.common.exception.ParameterNullOrEmptyException; +import com.futurewei.alcor.common.exception.ParameterUnexpectedValueException; import com.futurewei.alcor.nodemanager.entity.NodeInfo; import org.thymeleaf.util.StringUtils; @@ -32,4 +33,10 @@ public static void verifyParameterNotNullorEmpty(NodeInfo resource) throws Param throw new ParameterNullOrEmptyException("null parameter"); } } + + public static void verifyParameterValid(String id, NodeInfo resource) throws ParameterUnexpectedValueException { + if (id.equals(resource.getId()) == false) { + throw new ParameterUnexpectedValueException("parameter values are not valid: parameter id and request body resource id should be same."); + } + } } \ No newline at end of file diff --git a/services/node_manager/src/test/java/com/futurewei/alcor/nodemanager/AlcorNodeManager/NodeManagerApplicationTests.java b/services/node_manager/src/test/java/com/futurewei/alcor/nodemanager/AlcorNodeManager/NodeManagerApplicationTests.java index e82b3b5cc..575c9add4 100644 --- a/services/node_manager/src/test/java/com/futurewei/alcor/nodemanager/AlcorNodeManager/NodeManagerApplicationTests.java +++ b/services/node_manager/src/test/java/com/futurewei/alcor/nodemanager/AlcorNodeManager/NodeManagerApplicationTests.java @@ -19,18 +19,18 @@ @AutoConfigureMockMvc class NodeManagerApplicationTests { - @Autowired - public MockMvc mvc; + @Autowired + public MockMvc mvc; - @Test - void contextLoads() { - } + @Test + void contextLoads() { + } - @Test - public void test_index() throws Exception { - this.mvc.perform(get("/start.html")) - .andDo(print()) - .andExpect(status().isOk()) - .andExpect(content().string(containsString("Node Manager"))); - } + @Test + public void test_index() throws Exception { + this.mvc.perform(get("/start.html")) + .andDo(print()) + .andExpect(status().isOk()) + .andExpect(content().string(containsString("Node Manager"))); + } } diff --git a/services/node_manager/src/test/java/com/futurewei/alcor/nodemanager/controller/NodeControllerTest.java b/services/node_manager/src/test/java/com/futurewei/alcor/nodemanager/controller/NodeControllerTest.java index 2db1d7d28..591c42837 100644 --- a/services/node_manager/src/test/java/com/futurewei/alcor/nodemanager/controller/NodeControllerTest.java +++ b/services/node_manager/src/test/java/com/futurewei/alcor/nodemanager/controller/NodeControllerTest.java @@ -30,6 +30,7 @@ import org.springframework.http.MediaType; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; +import org.springframework.web.bind.annotation.PathVariable; import java.net.InetAddress; @@ -57,7 +58,7 @@ public class NodeControllerTest { @Before public void init() { byte[] ip = new byte[]{10,0,0,1}; - NodeInfo nodeInfo = new NodeInfo("h01", "host1", ip, "AA-BB-CC-DD-EE-00"); + NodeInfo nodeInfo = new NodeInfo("h00", "host0", ip, "AA-BB-CC-DD-EE-00"); NodeInfoJson nodeInfoJson = new NodeInfoJson(nodeInfo); ObjectMapper objectMapper = new ObjectMapper(); @@ -94,7 +95,7 @@ public void test_index() throws Exception { @Test public void test_createNodeInfo() throws Exception { byte[] ip = new byte[]{10,0,0,1}; - NodeInfo nodeInfo = new NodeInfo("h01", "host1", ip, "AA-BB-CC-DD-EE-00"); + NodeInfo nodeInfo = new NodeInfo("h01", "host1", ip, "AA-BB-CC-DD-EE-11"); NodeInfoJson nodeInfoJson = new NodeInfoJson(nodeInfo); ObjectMapper objectMapper = new ObjectMapper(); String json = objectMapper.writeValueAsString(nodeInfoJson); @@ -110,7 +111,7 @@ public void test_createNodeInfo() throws Exception { public void updateNodeInfo() throws Exception { InetAddress address2 = InetAddress.getByName("10.0.0.2"); byte[] ip = new byte[]{10,0,0,2}; - NodeInfo nodeInfo = new NodeInfo("h01", "host2", ip, "AA-BB-CC-DD-EE-99"); + NodeInfo nodeInfo = new NodeInfo("h02", "host2", ip, "AA-BB-CC-DD-EE-22"); NodeInfoJson nodeInfoJson = new NodeInfoJson(nodeInfo); ObjectMapper objectMapper = new ObjectMapper(); String json = objectMapper.writeValueAsString(nodeInfoJson); @@ -123,11 +124,31 @@ public void updateNodeInfo() throws Exception { } @Test - public void deleteNodeInfo() throws Exception { - byte[] ip = new byte[]{10,0,0,2}; - NodeInfo nodeInfo = new NodeInfo("h01", "host1", ip, "AA-BB-CC-DD-EE-00"); + public void test_getNodeInfoByNodeId() throws Exception { + byte[] ip = new byte[]{10,0,0,3}; + NodeInfo nodeInfo = new NodeInfo("h03", "host3", ip, "AA-BB-CC-03-03-03"); String strNodeId = createNodeInfo(nodeInfo); - System.out.println(strNodeId); + this.mockMvc.perform(get("/nodes/" + strNodeId)) + .andDo(print()) + .andExpect(status().isOk()); + } + + @Test + public void test_getAllNodes() throws Exception { + byte[] ip1 = new byte[]{10,0,0,4}; + NodeInfo nodeInfo1 = new NodeInfo("h04", "host4", ip1, "AA-BB-CC-04-04-04"); + createNodeInfo(nodeInfo1); + byte[] ip2 = new byte[]{10,0,0,5}; + NodeInfo nodeInfo2 = new NodeInfo("h05", "host5", ip2, "AA-BB-CC-05-05-05"); + createNodeInfo(nodeInfo2); + this.mockMvc.perform(get("/nodes")) + .andDo(print()) + .andExpect(status().isOk()); + } + + @Test + public void deleteNodeInfo() throws Exception { + String strNodeId = "h00"; this.mockMvc.perform(delete("/nodes/" + strNodeId)) .andDo(print()) .andExpect(status().isOk());

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 TAmvuf&ClXdBkMk|B~JVT@#yQ* delta 940 zcmb7DOHWf#5T4uiUQ+si<`$b^DW|qd3w@+*`k;wHl#NkTY&0$`P16F_L`xqSL~(&T zSCk6TUu6m3` zD7Cy*@g9(Z4x`+9Q#Ue*wI*E{7qYs&CNyjesxS)-I!v@0Jh)q`!^2J^UmQ=$pdxCHDztX&Pz>WSm-}ZkL_@f3Oyo`c9(Q-;RUgAC zc>wo)C-8DK^uMiQY~&(tGYO}A?{F47G|Aeu>vWG2O?*LlehjCE)QJ|-F3S-Q7E?i& zwk!o&kS1|EQFuBX72^;DhGHs;KT~e6vPfm95VN4|s*dw8PgYt$97-qkIu#*{TNy8Q zXEJ>ybp^HeFVhgl;R;M(O>*J>s1qafJ;~VdZRXao%$0vIwnoSFdoX(Aqe~w`LFyAi TSQA}NrMB{;C^)P3Gy{JCv6kyy From 449d6e691ab8671cf472d5416d37f557889b99fb Mon Sep 17 00:00:00 2001 From: Liguang Xie Date: Wed, 8 Apr 2020 22:57:43 -0700 Subject: [PATCH 08/33] Update mac manager design doc --- .../{macmanager.adoc => mac_manager.adoc} | Bin 14828 -> 15996 bytes docs/visionary_design/table_of_content.adoc | 1 + 2 files changed, 1 insertion(+) rename docs/visionary_design/{macmanager.adoc => mac_manager.adoc} (81%) diff --git a/docs/visionary_design/macmanager.adoc b/docs/visionary_design/mac_manager.adoc similarity index 81% rename from docs/visionary_design/macmanager.adoc rename to docs/visionary_design/mac_manager.adoc index b53e67ea53c3c4512d2d801c60b1a20ddf16a34c..fa9ec7418dc1acf7a014d67781c35cd6392bf349 100644 GIT binary patch delta 1818 zcmaJ?OHUI~6h4(w6e$f>7hu#;RJ8ICAG`uY#1}q*05K+nMLQjaYD=Lltt7-TE=^q2 zyEXAg)ZgLHFfp>wl^dge-x;Qq4Vm0|oO>SM`OZ0ac8h;@n*aTs5X-EzcY624k)mY8 zm36UXQ8w^x<9ij$mZX&M%wsPqt#V(s@b(gSOP)ZU!*d+^fwW&;7y_t0HT#vT;A?t(btI1Tk~ZLS+?iwrpc%RhEZ@p|X-Sze1fJi`B0HXJAJd zq_~K(u}Car3X7gtIPMVcy87FawE9eGaV$vl(DLKv)WU%V@#K|Ljf(f64N$2rY$vf; z@r-QZN#NwiHXTjzhpSL06V!2`L0-uc;T7PxSD_O!(@QE~zX1Xg>b`o&nQt8cUB@>e zanZ$DBJ7}M~_NbClB4A^lIh0!W_ZbKfhL!H36jhIC(MGl(e zbYIJF0Kb9Rzl*AY?hOOHQyn~AoqZoAK@NJw#pycV73=!2_{oWYX*_`M`QwH637{gh8xgWL;9tfd-QwrdEe-e#ikEev5?$OmkazZRFzFNOTUk zQb3dhSLs?Z(b9Zu0nu_0m1~;=Uc^L(u0#)HWvZ>6W@EVR7^Sp#5c+g{6+SR-S}~3e zYx{ZlYG};3M+Y-Eall+c_YLdwf~+W0JK%^HJ?%&WECnfXz$xK5OBsi=i0=T&4j5<0 zaaMd1(!Li{9X)3vqvPhy$SpH|ysPD){CV7u^+0>fsoN}{YQ#bvMP{nePP037!+aXL zY`(-#d~6MypF{IzvZc#=guoai0Aspt9omxI1?&K*-v-m*Gl%k%W*&naxW-YL!ybp$ zC&0!J!ID`>_&eai=>JIQv+mu~5X*XSr4&RSAUKH|=&|iRhW+p?DUV3b6%RGeRRFLL kp_cUu+PfD&hZVgncq-vy-;T)uu8Lm$NW#2rDu?OhKWbM`4FCWD delta 698 zcmZuvKWGzS6n`;ytw~9f>v7dkl&?ygJdz!_7h?j>cXX+{h?X z#QOYwypoO3ML~n~i~zkqcAei>M&n19K4ooziPSAb8zRF#SKKUI9RkldH*)FtW#yYO ze5;S*YAzqYnR_zioC%fr%N{U&c50 Date: Thu, 9 Apr 2020 19:21:27 -0700 Subject: [PATCH 09/33] [Microservices] Mac manager - updated unit test cases --- .../MacManagerApplicationTests.java | 49 ++++++++++ .../controller/MacControllerTest.java | 93 ++++++++++++++++--- 2 files changed, 127 insertions(+), 15 deletions(-) diff --git a/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/AlcorMacManager/MacManagerApplicationTests.java b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/AlcorMacManager/MacManagerApplicationTests.java index c9349d8e5..93e792f2c 100644 --- a/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/AlcorMacManager/MacManagerApplicationTests.java +++ b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/AlcorMacManager/MacManagerApplicationTests.java @@ -1,15 +1,64 @@ package com.futurewei.alcor.macmanager.AlcorMacManager; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.futurewei.alcor.macmanager.entity.MacState; import org.junit.Test; import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +import static org.hamcrest.Matchers.containsString; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @RunWith(SpringRunner.class) @SpringBootTest class MacManagerApplicationTests { + @Autowired + public MockMvc mvc; + @Test void contextLoads() { } + + @Test + public void test_index() throws Exception { + this.mvc.perform(get("/start.html")) + .andDo(print()) + .andExpect(status().isOk()) + .andExpect(content().string(containsString("MacManager"))); + } + +// @Test +// public void test_createMacState() throws Exception { +// MacState macState = new MacState("", "project1", "vpc1", "port1"); +// ObjectMapper objectMapper = new ObjectMapper(); +// String json = objectMapper.writeValueAsString(macState); +// this.mvc.perform(post("/macs") +// .contentType(MediaType.APPLICATION_JSON) +// .content(json)) +// .andExpect(status().isOk()) +// .andReturn(); +// } +// +// @Test +// public void test_getMacStateByMacAddress() throws Exception { +// this.mvc.perform(get("/macs/00-00-00-00-00-00")) +// .andDo(print()) +// .andExpect(status().isOk()); +// } +// +// @Test +// public void test_deleteMacStateByMacAddress() throws Exception { +// this.mvc.perform(get("/macs/00-00-00-00-00-00")) +// .andDo(print()) +// .andExpect(status().isOk()); +// } } diff --git a/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java index c1ce88d24..54e685dfb 100644 --- a/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java +++ b/services/mac_manager/src/test/java/com/futurewei/alcor/macmanager/controller/MacControllerTest.java @@ -15,35 +15,98 @@ */ package com.futurewei.alcor.macmanager.controller; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.futurewei.alcor.macmanager.entity.MacState; +import com.futurewei.alcor.macmanager.entity.MacStateJson; +import com.futurewei.alcor.macmanager.service.MacAddressService; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs; -import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.test.context.ContextConfiguration; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.MvcResult; -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.equalTo; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + @RunWith(SpringRunner.class) -@WebMvcTest(MacController.class) -@ContextConfiguration(classes = {MacController.class}) +@SpringBootTest +@AutoConfigureMockMvc public class MacControllerTest { + + private static final ObjectMapper om = new ObjectMapper(); + + public MacState testMacState; @Autowired - private MockMvc mvc; + MacAddressService service; + String strTestMac = ""; + @Autowired + private MockMvc mockMvc; + @MockBean + private MacController mockController; + + @Before + public void init() { + MacState macState = new MacState("", "project1", "vpc1", "port1"); + MacStateJson macStateJson = new MacStateJson(macState); + ObjectMapper objectMapper = new ObjectMapper(); + + try { + String json = objectMapper.writeValueAsString(macStateJson); + MacState macState2 = service.createMacState(macState); + strTestMac = macState2.getMacAddress(); + } catch (Exception e) { + e.printStackTrace(); + } + } @Test public void test_index() throws Exception { - this.mvc.perform(get("/start.html")) + this.mockMvc.perform(get("/start.html")) .andDo(print()) - .andExpect(status().isOk()) - .andExpect(content().string(containsString("MacManager"))); + .andExpect(status().isOk()); } -} \ No newline at end of file + + @Test + public void test_createMacState() throws Exception { + MacState macState = new MacState("", "project1", "vpc1", "port2"); + + MacStateJson macStateJson = new MacStateJson(macState); + ObjectMapper objectMapper = new ObjectMapper(); + String json = objectMapper.writeValueAsString(macStateJson); + + System.out.println(json); + MvcResult mvcResult = this.mockMvc.perform(post("/macs") + .content(json) + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)) + .andExpect(status().isCreated()) + .andDo(print()) + .andReturn(); + } + + @Test + public void test_getMacStateByMacAddress() throws Exception { + init(); + this.mockMvc.perform(get("/macs/" + strTestMac)) + .andDo(print()) + .andExpect(status().isOk()); + } + + @Test + public void test_deleteMacStateByMacAddress() throws Exception { + init(); + this.mockMvc.perform(delete("/macs/" + strTestMac)) + .andDo(print()) + .andExpect(status().isOk()); + } +} + + From feb5a2058bff82254436c14d98bacc8446c84891 Mon Sep 17 00:00:00 2001 From: Eunju Kim Date: Thu, 9 Apr 2020 19:27:09 -0700 Subject: [PATCH 10/33] [Microservices] Mac manager - updated unit test cases --- .../doc/Alcor_MacManager_Doc_v2.docx | Bin 100313 -> 0 bytes .../lib/alcor_common_lib-0.1.0-SNAPSHOT.jar | Bin 57551 -> 0 bytes services/mac_manager/pom.xml | 40 +++--------------- .../macmanager/controller/MacController.java | 8 ++-- .../alcor/macmanager/entity/MacState.java | 1 - .../utils/RestPreconditionsUtil.java | 22 ---------- 6 files changed, 9 insertions(+), 62 deletions(-) delete mode 100644 services/mac_manager/doc/Alcor_MacManager_Doc_v2.docx delete mode 100644 services/mac_manager/lib/alcor_common_lib-0.1.0-SNAPSHOT.jar diff --git a/services/mac_manager/doc/Alcor_MacManager_Doc_v2.docx b/services/mac_manager/doc/Alcor_MacManager_Doc_v2.docx deleted file mode 100644 index 28629f307895cc0a33ef668281c2ce4862cbb735..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100313 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 delta 13799 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