diff --git a/build.gradle b/build.gradle index a93d4ae8d0f0410dc355b9fa00466345ce313c3b..90e9fd427f746286ced9088ab9b4f0f66b4ee828 100644 --- a/build.gradle +++ b/build.gradle @@ -119,13 +119,6 @@ task buildZip(type: Zip, dependsOn: ["copyJar", "copyYJS", "copyFront", "copyAcc destinationDirectory = file('build/') } -task buildGlobalZip(type: Zip, dependsOn: ["copyJar", "copyYJS", "copyFront", "copyAccessControl", "reName", "grepCP"]) { - from './build/output/' - duplicatesStrategy = DuplicatesStrategy.INCLUDE - archiveFileName = "GlobalRouter-${version}.zip" - destinationDirectory = file('build/') -} - task copyFront(type: Copy) { from "../datanet-router-front/dist" into "./build/output/assets/" @@ -139,16 +132,10 @@ task buildYPK(dependsOn: ["buildZip"]) { org.bdware.datanet.YPKPacker.staticPack("./${reltivePath}/build/Router-${version}.zip", "./${reltivePath}/build/Router-${version}.ypk") } } -task buildGlobalYPK(dependsOn: ["buildGlobalZip"]) { - doLast { - org.bdware.datanet.YPKPacker.staticPack("./${reltivePath}/build/GlobalRouter-${version}.zip", - "./${reltivePath}/build/GlobalRouter-${version}.ypk") - } -} task deployRouterLocalDocker(dependsOn: ["buildYPK"]) { doLast { - org.bdware.ypkdeploy.HTTPTool.deployWithYpk("./${reltivePath}/input/debugLocalDocker.json", "./${reltivePath}/build/GlobalRouter-${version}.ypk") + org.bdware.ypkdeploy.HTTPTool.deployWithYpk("./${reltivePath}/input/debugLocalDocker.json", "./${reltivePath}/build/Router-${version}.ypk") } } task deployRouter(dependsOn: ["buildYPK"]) { @@ -156,21 +143,21 @@ task deployRouter(dependsOn: ["buildYPK"]) { org.bdware.ypkdeploy.HTTPTool.deploy("./${reltivePath}/input/deployconfig.json") } } -task deployGlobalRouter023(dependsOn: ["buildGlobalYPK"]) { +task deployRouter023(dependsOn: ["buildGlobalYPK"]) { doLast { - org.bdware.ypkdeploy.HTTPTool.deployWithYpk("./${reltivePath}/input/global-router-debugconf-023.json", "./${reltivePath}/build/GlobalRouter-${version}.ypk"); + org.bdware.ypkdeploy.HTTPTool.deployWithYpk("./${reltivePath}/input/global-router-debugconf-023.json", "./${reltivePath}/build/Router-${version}.ypk"); } } -task deployGlobalRouter021(dependsOn: ["buildGlobalYPK"]) { +task deployRouter021(dependsOn: ["buildGlobalYPK"]) { doLast { - org.bdware.ypkdeploy.HTTPTool.deployWithYpk("./${reltivePath}/input/global-router-debugconf-021.json", "./${reltivePath}/build/GlobalRouter-${version}.ypk"); + org.bdware.ypkdeploy.HTTPTool.deployWithYpk("./${reltivePath}/input/global-router-debugconf-021.json", "./${reltivePath}/build/Router-${version}.ypk"); } } -task deployGlobalRouter2(dependsOn: ["buildGlobalYPK"]) { +task deployRouter2(dependsOn: ["buildGlobalYPK"]) { doLast { - org.bdware.ypkdeploy.HTTPTool.deployWithYpk("./${reltivePath}/batchDeploy/GlobalRouter-252.json", "./${reltivePath}/build/GlobalRouter-${version}.ypk"); + org.bdware.ypkdeploy.HTTPTool.deployWithYpk("./${reltivePath}/batchDeploy/Router-252.json", "./${reltivePath}/build/Router-${version}.ypk"); } } @@ -179,9 +166,9 @@ task putRouterPackage(type: Exec, dependsOn: ["buildYPK"]) { workingDir "./build" commandLine "curl", "--user", "${REPO_USRNAME}:${REPO_PASSWORD}", "--upload-file", "./Router-${version}.ypk", "${REPO_HOST}/Router/${version}/Router-${version}.ypk" } -task putGlobalRouterPackage(type: Exec, dependsOn: ["buildGlobalYPK"]) { +task putRouterPackage(type: Exec, dependsOn: ["buildGlobalYPK"]) { workingDir "./build" - commandLine "curl", "--user", "${REPO_USRNAME}:${REPO_PASSWORD}", "--upload-file", "./GlobalRouter-${version}.ypk", "${REPO_HOST}/GlobalRouter/${version}/GlobalRouter-${version}.ypk" + commandLine "curl", "--user", "${REPO_USRNAME}:${REPO_PASSWORD}", "--upload-file", "./Router-${version}.ypk", "${REPO_HOST}/Router/${version}/Router-${version}.ypk" } repositories { diff --git a/src/main/java/org/bdware/datanet/router/Config.java b/src/main/java/org/bdware/datanet/router/Config.java index 02f1b5d2dc9c7d533c25be31424975ccd6092928..9d43f035113883a719d8c715bc7f0f0ecb6a5d8e 100644 --- a/src/main/java/org/bdware/datanet/router/Config.java +++ b/src/main/java/org/bdware/datanet/router/Config.java @@ -36,6 +36,16 @@ public class Config { // Random RoundRobin IPHash private String strategy; + // 是否是根节点 + private boolean isRoot; + public boolean getIsRoot() { + return isRoot; + } + + public void setIsRoot(boolean isRoot) { + this.isRoot = isRoot; + } + public JsonObject setRouterBaseInfo(JsonObject jo, boolean restart) { RouterBaseInfo base = JsonUtil.fromJson(jo, RouterBaseInfo.class); return setRouterBaseInfo(base, restart); diff --git a/src/main/java/org/bdware/datanet/router/Global.java b/src/main/java/org/bdware/datanet/router/Global.java index 9fe6435574ab87659241880b3a7218287d929e99..2caaf2535c6c58016df69eb3ee419b6b254e4268 100644 --- a/src/main/java/org/bdware/datanet/router/Global.java +++ b/src/main/java/org/bdware/datanet/router/Global.java @@ -43,35 +43,30 @@ import java.util.ArrayList; import java.util.List; public class Global { + private static final Logger LOGGER = LogManager.getLogger(Global.class); // configuration of Router public static Config config = new Config(); - - // key = suffix of doid; value = doid; public static RocksDBUtil lRSStorage = RocksDBUtil.loadDB("./lrsTable", false); - // key = suffix public static RocksDBUtil repoStorage = RocksDBUtil.loadDB("./repoStorage", false); - // key = suffix of doid; value = doid; public static RocksDBUtil doStorage = RocksDBUtil.loadDB("./doStorage", false); - // key = timestamp; value = doid public static RocksDBUtil doidIndex = RocksDBUtil.loadDB("./doIndex", "doIndex"); public static RocksDBUtil indexStorage = RocksDBUtil.loadDB("./indexStorage", false); public static RocksDBUtil otherURIRouterStorage = RocksDBUtil.loadDB("./otherURIRouterStorage", false); public static RocksDBUtil repoProxy = RocksDBUtil.loadDB("./repoProxy", false); - static boolean isVerified = false; static IrpServer server; private static IrsHandlerImpl irsHandler; - private static final Logger LOGGER = LogManager.getLogger(Global.class); public static void resetEnvironment(Object arg) { try { JsonObject jsonObject = JSONTool.convertMirrorToJson(arg).getAsJsonObject(); boolean isRoot = jsonObject.has("isRoot") && jsonObject.get("isRoot").getAsBoolean(); + Global.config.setIsRoot(isRoot); String routerUrl; // fix: setEnableBindRepo 在得到 false 时,设置了 enableFlex 为 false // if (jsonObject.has("enableBindRepo") @@ -109,9 +104,9 @@ public class Global { Global.config.setRouterBaseInfo(prefixAndPort, false); Global.config.setScheme(jsonObject.get("scheme").getAsString()); String[] createDefaultRepoKeyList = - new String[] {"auditProxyAddress", "auditRepoAddress", "controlProxyAddress", + new String[]{"auditProxyAddress", "auditRepoAddress", "controlProxyAddress", "repositoryAddress", "registryAddress"}; - String[] createDefaultRepoNameList = new String[] {AutoAuditDO.AUDIT_PROXY, "AuditRepo", + String[] createDefaultRepoNameList = new String[]{AutoAuditDO.AUDIT_PROXY, "AuditRepo", "ControlProxy", "Repository", "Registry"}; for (int i = 0; i < createDefaultRepoNameList.length; i++) { String name = createDefaultRepoNameList[i]; @@ -260,6 +255,11 @@ public class Global { // TODO ResponseInfo responseInfo = new Gson().fromJson(verifyInfo, ResponseInfo.class); LOGGER.info("responseInfo:" + responseInfo.toString()); + + // 服务启动正常status应该写死是online + JsonObject ret = JsonUtil.parseStringAsJsonObject(responseInfo.routerInfo); + ret.addProperty("status", "online"); + responseInfo.routerInfo = ret.toString(); RouterBaseInfo baseInfo = new RouterBaseInfo(responseInfo.prefix, responseInfo.port); // TODO 取上级信息,并保存 client.resolve(responseInfo.prefix.lastIndexOf()) JsonObject upperRouterInfo = client.resolve( @@ -292,7 +292,7 @@ public class Global { } private static String signAndAuth(IrpRouterClientImpl client, String pubkey, String name, - String signInfo, SM2Signer signer) throws IrpClientException { + String signInfo, SM2Signer signer) throws IrpClientException { IrpMessage req = IrpForRouterRequest.newVerifyRouterAuthRequest(pubkey, name, signInfo); signer.signMessage(req); IrpResponse res = client.sendMessageSync(req); @@ -307,40 +307,6 @@ public class Global { return new Gson().toJson(resInfo); } - @ChannelHandler.Sharable - public static class NettyConnectServerHandler extends ChannelInboundHandlerAdapter { - public NettyConnectServerHandler() {} - - @Override - public void channelRegistered(ChannelHandlerContext ctx) throws Exception { - super.channelRegistered(ctx); - CongestionControl.connectionControl(ctx); - } - } - - static class CCAdder extends SimpleChannelInboundHandler { - SimpleChannelInboundHandler handler; - - CCAdder(SimpleChannelInboundHandler handler) { - this.handler = handler; - } - - @Override - protected void channelRead0(ChannelHandlerContext channelHandlerContext, - IrpMessage irpMessage) throws Exception { - try { - CongestionControl.currentRequest.incrementAndGet(); - if (!CongestionControl.connectionControl(channelHandlerContext)) { - handler.channelRead(channelHandlerContext, irpMessage); - } - } catch (Exception e) { - // e.printStackTrace(); - } finally { - CongestionControl.currentRequest.decrementAndGet(); - } - } - } - static public void startIRPServer() { try { int irpServerPort = config.getPort(); @@ -440,4 +406,39 @@ public class Global { } return ret; } + + @ChannelHandler.Sharable + public static class NettyConnectServerHandler extends ChannelInboundHandlerAdapter { + public NettyConnectServerHandler() { + } + + @Override + public void channelRegistered(ChannelHandlerContext ctx) throws Exception { + super.channelRegistered(ctx); + CongestionControl.connectionControl(ctx); + } + } + + static class CCAdder extends SimpleChannelInboundHandler { + SimpleChannelInboundHandler handler; + + CCAdder(SimpleChannelInboundHandler handler) { + this.handler = handler; + } + + @Override + protected void channelRead0(ChannelHandlerContext channelHandlerContext, + IrpMessage irpMessage) throws Exception { + try { + CongestionControl.currentRequest.incrementAndGet(); + if (!CongestionControl.connectionControl(channelHandlerContext)) { + handler.channelRead(channelHandlerContext, irpMessage); + } + } catch (Exception e) { + // e.printStackTrace(); + } finally { + CongestionControl.currentRequest.decrementAndGet(); + } + } + } } diff --git a/src/main/java/org/bdware/datanet/router/Router.java b/src/main/java/org/bdware/datanet/router/Router.java index 77f807dbfac06c86c27d278e56221b5b125ebc29..48d2af618cb01a242ddfa6e0f62e0004beef1086 100644 --- a/src/main/java/org/bdware/datanet/router/Router.java +++ b/src/main/java/org/bdware/datanet/router/Router.java @@ -732,6 +732,13 @@ public class Router { } public static JsonObject addOtherRouter(Object arg) { + if (Global.config.getIsRoot()) { + JsonObject ret = new JsonObject(); + ret.addProperty("result", "failed"); + ret.addProperty("code", 1); + ret.addProperty("errorMessage", "only root router can add other router"); + return ret; + } JsonObject jsonObject = null; if (arg instanceof String) jsonObject = JsonParser.parseString(arg.toString()).getAsJsonObject(); @@ -752,6 +759,13 @@ public class Router { } public static JsonObject removeOtherRouter(Object arg) { + if (Global.config.getIsRoot()) { + JsonObject ret = new JsonObject(); + ret.addProperty("result", "failed"); + ret.addProperty("code", 1); + ret.addProperty("errorMessage", "only root router can remove other router"); + return ret; + } JsonObject jsonObject = null; if (arg instanceof String) jsonObject = JsonParser.parseString(arg.toString()).getAsJsonObject(); @@ -770,6 +784,13 @@ public class Router { } public static JsonObject listOtherRouters() { + if (Global.config.getIsRoot()) { + JsonObject ret = new JsonObject(); + ret.addProperty("result", "failed"); + ret.addProperty("code", 1); + ret.addProperty("errorMessage", "only root router can list other router"); + return ret; + } return listValues(Global.otherURIRouterStorage); } } diff --git a/yjs/GlobalRouter.yjs b/yjs/GlobalRouter.yjs deleted file mode 100644 index a5e31aa9be9fdc333d4565d3c1e9ae16dcd84340..0000000000000000000000000000000000000000 --- a/yjs/GlobalRouter.yjs +++ /dev/null @@ -1,53 +0,0 @@ -import "actemplate/ABAC.yjs"; -import "routerModule.yjs"; -import "testfuns.yjs"; -@Permission("Async") -@Permission("RocksDB") -@Access({ - "ACFunction" : "accept" -}) -oracle GlobalRouter { - function onCreate(arg) { - Global.isGlobal = true; - Global.rootPrefix = ""; - initABAC(requester); - AsyncUtil.postFunction(initAsync, arg); - } - - function initAsync(arg) { - arg.isRoot = true; - org.bdware.datanet.router.Global.resetEnvironment(arg); - } - @ArgSchema({}) - export function setRouterBaseInfo(arg) { - return org.bdware.datanet.router.Router.setRouterBaseInfo(arg); - } - @ArgSchema({}) - export function setRootRouterInfo(arg) { - return org.bdware.datanet.router.Router.setRootRouterInfo(arg); - } - - @ArgSchema({ - "!scheme" : "string", "!address" : "string" - }) - @Description("{\"scheme\":\"xx\",\"address\":\"tcp://ip:port\"}") - export function addOtherRouter(arg) { - return org.bdware.datanet.router.Router.addOtherRouter(arg); - } - - @ArgSchema({ - "!scheme" : "string" - }) - @Description("{\"scheme\":\"xx\"}") - export function removeOtherRouter(arg) { - return org.bdware.datanet.router.Router.removeOtherRouter(arg); - } - - export function listOtherRouters(arg) { - return org.bdware.datanet.router.Router.listOtherRouters(); - } - - export function reInit(arg) { - return org.bdware.datanet.router.Router.reInit(); - } -} diff --git a/yjs/Router.yjs b/yjs/Router.yjs index 8b37ce346202fdd58b5d90294591bc6131c51c86..1b8e8d9c22675dc40fd77322c7218dab8651e3f2 100644 --- a/yjs/Router.yjs +++ b/yjs/Router.yjs @@ -5,13 +5,12 @@ import "routerModule.yjs"; @Access({"ACFunction":"accept"}) oracle Router { function onCreate(arg) { - Global.isGlobal = false; + Global.isGlobal = arg.isRoot; Global.rootPrefix = ""; initABAC(requester); AsyncUtil.postFunction(initAsync, arg); } function initAsync(arg) { - arg.isRoot = false; org.bdware.datanet.router.Global.resetEnvironment(arg); } // 域路由器调用 @@ -24,4 +23,33 @@ oracle Router { export function setRouterBaseInfo(arg) { return org.bdware.datanet.router.Config.setRouterBaseInfo(obj); } + + @ArgSchema({}) + export function setRootRouterInfo(arg) { + return org.bdware.datanet.router.Router.setRootRouterInfo(arg); + } + + @ArgSchema({ + "!scheme" : "string", "!address" : "string" + }) + @Description("{\"scheme\":\"xx\",\"address\":\"tcp://ip:port\"}") + export function addOtherRouter(arg) { + return org.bdware.datanet.router.Router.addOtherRouter(arg); + } + + @ArgSchema({ + "!scheme" : "string" + }) + @Description("{\"scheme\":\"xx\"}") + export function removeOtherRouter(arg) { + return org.bdware.datanet.router.Router.removeOtherRouter(arg); + } + + export function listOtherRouters(arg) { + return org.bdware.datanet.router.Router.listOtherRouters(); + } + + export function reInit(arg) { + return org.bdware.datanet.router.Router.reInit(); + } }