mirror of
https://gitee.com/BDWare/router-backend
synced 2025-01-10 01:44:05 +00:00
build: config spotless plugin and reformat code
This commit is contained in:
parent
b2124820ca
commit
16350d3a78
@ -3,6 +3,8 @@ plugins {
|
|||||||
id 'application'
|
id 'application'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
apply from: '../spotless.gradle'
|
||||||
|
|
||||||
mainClassName = 'org.bdware.server.NodeCenterServer'
|
mainClassName = 'org.bdware.server.NodeCenterServer'
|
||||||
|
|
||||||
application {
|
application {
|
||||||
|
@ -2,7 +2,7 @@ package org.bdware.sc.udp;
|
|||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.ObjectInputStream;
|
import java.io.ObjectInputStream;
|
||||||
import java.io.ObjectOutputStream;
|
import java.io.ObjectOutputStream;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -10,77 +10,76 @@ import java.util.List;
|
|||||||
|
|
||||||
|
|
||||||
public class UDPMessage implements Serializable {
|
public class UDPMessage implements Serializable {
|
||||||
private static final long serialVersionUID = -8103830946473687985L;
|
private static final long serialVersionUID = -8103830946473687985L;
|
||||||
int isPart = 0;
|
int isPart = 0;
|
||||||
public UDPMessageType type;
|
public UDPMessageType type;
|
||||||
public int id; // 要标记sender
|
public int id; // 要标记sender
|
||||||
int order;
|
int order;
|
||||||
int requestID;
|
int requestID;
|
||||||
byte[] content;
|
byte[] content;
|
||||||
|
|
||||||
public UDPMessage() {
|
public UDPMessage() {}
|
||||||
}
|
|
||||||
|
|
||||||
public void setIsPart(boolean isPart) {
|
public void setIsPart(boolean isPart) {
|
||||||
this.isPart = isPart ? 1 : 0;
|
this.isPart = isPart ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setContent(byte[] content) {
|
public void setContent(byte[] content) {
|
||||||
this.content = content;
|
this.content = content;
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] getContent() {
|
public byte[] getContent() {
|
||||||
return content;
|
return content;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int Len = 6000;// 1000
|
static int Len = 6000;// 1000
|
||||||
|
|
||||||
public List<UDPMessage> split() {
|
public List<UDPMessage> split() {
|
||||||
List<UDPMessage> splited = new ArrayList<>();
|
List<UDPMessage> splited = new ArrayList<>();
|
||||||
// System.out.println("[UDPMessage split] content.length" + content.length);
|
// System.out.println("[UDPMessage split] content.length" + content.length);
|
||||||
if (content.length < Len) {
|
if (content.length < Len) {
|
||||||
splited.add(this);
|
splited.add(this);
|
||||||
return splited;
|
return splited;
|
||||||
}
|
}
|
||||||
for (int i = 0; i < content.length; i += Len) {
|
for (int i = 0; i < content.length; i += Len) {
|
||||||
UDPMessage msg = new UDPMessage();
|
UDPMessage msg = new UDPMessage();
|
||||||
msg.isPart = 1;
|
msg.isPart = 1;
|
||||||
msg.id = this.id;
|
msg.id = this.id;
|
||||||
msg.order = i / Len;
|
msg.order = i / Len;
|
||||||
if (i + Len > content.length) {
|
if (i + Len > content.length) {
|
||||||
msg.content = new byte[content.length - i];
|
msg.content = new byte[content.length - i];
|
||||||
System.arraycopy(content, i, msg.content, 0, content.length - i);
|
System.arraycopy(content, i, msg.content, 0, content.length - i);
|
||||||
} else {
|
} else {
|
||||||
msg.content = new byte[Len];
|
msg.content = new byte[Len];
|
||||||
System.arraycopy(content, i, msg.content, 0, Len);
|
System.arraycopy(content, i, msg.content, 0, Len);
|
||||||
}
|
}
|
||||||
splited.add(msg);
|
splited.add(msg);
|
||||||
}
|
}
|
||||||
return splited;
|
return splited;
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] toByteArray() {
|
public byte[] toByteArray() {
|
||||||
try {
|
try {
|
||||||
ByteArrayOutputStream bo = new ByteArrayOutputStream();
|
ByteArrayOutputStream bo = new ByteArrayOutputStream();
|
||||||
ObjectOutputStream output;
|
ObjectOutputStream output;
|
||||||
output = new ObjectOutputStream(bo);
|
output = new ObjectOutputStream(bo);
|
||||||
output.writeObject(this);
|
output.writeObject(this);
|
||||||
return bo.toByteArray();
|
return bo.toByteArray();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static UDPMessage parse(byte[] data, int len) {
|
public static UDPMessage parse(byte[] data, int len) {
|
||||||
try {
|
try {
|
||||||
ByteArrayInputStream bi = new ByteArrayInputStream(data);
|
ByteArrayInputStream bi = new ByteArrayInputStream(data);
|
||||||
ObjectInputStream input = new ObjectInputStream(bi);
|
ObjectInputStream input = new ObjectInputStream(bi);
|
||||||
return (UDPMessage) input.readObject();
|
return (UDPMessage) input.readObject();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,5 +3,5 @@ package org.bdware.sc.udp;
|
|||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
public enum UDPMessageType implements Serializable {
|
public enum UDPMessageType implements Serializable {
|
||||||
shakeHand, request, reply
|
shakeHand, request, reply
|
||||||
}
|
}
|
||||||
|
@ -5,16 +5,16 @@ import java.net.SocketAddress;
|
|||||||
import org.bdware.sc.conn.Node;
|
import org.bdware.sc.conn.Node;
|
||||||
|
|
||||||
public class UDPNode extends Node {
|
public class UDPNode extends Node {
|
||||||
public UDPNode(SocketAddress addr) {
|
public UDPNode(SocketAddress addr) {
|
||||||
this.addr = addr;
|
this.addr = addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int id;
|
public int id;
|
||||||
public long lastUpdatedTime;
|
public long lastUpdatedTime;
|
||||||
public SocketAddress addr;
|
public SocketAddress addr;
|
||||||
|
|
||||||
public String getAddr() {
|
public String getAddr() {
|
||||||
InetSocketAddress inet4 = (InetSocketAddress) addr;
|
InetSocketAddress inet4 = (InetSocketAddress) addr;
|
||||||
return inet4.getHostString() + ":" + inet4.getPort();
|
return inet4.getHostString() + ":" + inet4.getPort();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -53,17 +53,15 @@ public class NodeCenterServer {
|
|||||||
Executors.newScheduledThreadPool(8);
|
Executors.newScheduledThreadPool(8);
|
||||||
static SslContext sslContext = null;
|
static SslContext sslContext = null;
|
||||||
public static URLClassLoader pluginLoader;
|
public static URLClassLoader pluginLoader;
|
||||||
// static byte[] delimiter = "wonbifoodie".getBytes();
|
// static byte[] delimiter = "wonbifoodie".getBytes();
|
||||||
|
|
||||||
static {
|
static {
|
||||||
KeyValueDBUtil.setupNC();
|
KeyValueDBUtil.setupNC();
|
||||||
// TimeDBUtil.setupNC();
|
// TimeDBUtil.setupNC();
|
||||||
TimeDBUtil.setupNC();
|
TimeDBUtil.setupNC();
|
||||||
Configurator.setLevel(
|
Configurator.setLevel("io.netty.handler.codec.http.websocketx.WebSocket08FrameDecoder",
|
||||||
"io.netty.handler.codec.http.websocketx.WebSocket08FrameDecoder",
|
|
||||||
Level.OFF);
|
Level.OFF);
|
||||||
Configurator.setLevel(
|
Configurator.setLevel("io.netty.handler.codec.http.websocketx.WebSocket08FrameEncoder",
|
||||||
"io.netty.handler.codec.http.websocketx.WebSocket08FrameEncoder",
|
|
||||||
Level.OFF);
|
Level.OFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -102,7 +100,7 @@ public class NodeCenterServer {
|
|||||||
|
|
||||||
private static String[] parseStrAsList(String str) {
|
private static String[] parseStrAsList(String str) {
|
||||||
if (str == null) {
|
if (str == null) {
|
||||||
return new String[]{};
|
return new String[] {};
|
||||||
}
|
}
|
||||||
return str.split(",");
|
return str.split(",");
|
||||||
}
|
}
|
||||||
@ -125,18 +123,18 @@ public class NodeCenterServer {
|
|||||||
try {
|
try {
|
||||||
BufferedReader br = new BufferedReader(new FileReader(keyFile));
|
BufferedReader br = new BufferedReader(new FileReader(keyFile));
|
||||||
String pubKey = br.readLine();
|
String pubKey = br.readLine();
|
||||||
String nowManager =
|
String nowManager = KeyValueDBUtil.instance.getValue(NCTables.ConfigDB.toString(),
|
||||||
KeyValueDBUtil.instance.getValue(
|
NCManagerAction.centerManger);
|
||||||
NCTables.ConfigDB.toString(), NCManagerAction.centerManger);
|
|
||||||
// manager.key is used when node manager isn' set
|
// manager.key is used when node manager isn' set
|
||||||
if (null == nowManager || nowManager.isEmpty()) {
|
if (null == nowManager || nowManager.isEmpty()) {
|
||||||
KeyValueDBUtil.instance.setValue(
|
KeyValueDBUtil.instance.setValue(NCTables.ConfigDB.toString(),
|
||||||
NCTables.ConfigDB.toString(), NCManagerAction.centerManger, pubKey);
|
NCManagerAction.centerManger, pubKey);
|
||||||
KeyValueDBUtil.instance.setValue(
|
KeyValueDBUtil.instance.setValue(NCTables.ConfigDB.toString(),
|
||||||
NCTables.ConfigDB.toString(), NCManagerAction.clusterName, "clusterName_" + pubKey.substring(0, 5));
|
NCManagerAction.clusterName, "clusterName_" + pubKey.substring(0, 5));
|
||||||
KeyValueDBUtil.instance.setValue(NCTables.NodeUser.toString(), pubKey, Role.CenterManager.toString());
|
KeyValueDBUtil.instance.setValue(NCTables.NodeUser.toString(), pubKey,
|
||||||
KeyValueDBUtil.instance.setValue(
|
Role.CenterManager.toString());
|
||||||
NCTables.NodeTime.toString(), pubKey, Long.toString(new Date().getTime()));
|
KeyValueDBUtil.instance.setValue(NCTables.NodeTime.toString(), pubKey,
|
||||||
|
Long.toString(new Date().getTime()));
|
||||||
LOGGER.info("set node manager from manager.key");
|
LOGGER.info("set node manager from manager.key");
|
||||||
}
|
}
|
||||||
} catch (IOException ignored) {
|
} catch (IOException ignored) {
|
||||||
@ -148,7 +146,7 @@ public class NodeCenterServer {
|
|||||||
OtherNCProxy.instance.init();
|
OtherNCProxy.instance.init();
|
||||||
|
|
||||||
startHttp(cmf.servicePort);
|
startHttp(cmf.servicePort);
|
||||||
//System.out.println("PORT"+cmf.servicePort);
|
// System.out.println("PORT"+cmf.servicePort);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void listenSocket(int port) throws Exception {
|
public static void listenSocket(int port) throws Exception {
|
||||||
@ -157,25 +155,21 @@ public class NodeCenterServer {
|
|||||||
EventLoopGroup workerGroup = new NioEventLoopGroup();
|
EventLoopGroup workerGroup = new NioEventLoopGroup();
|
||||||
ServerBootstrap b = new ServerBootstrap();
|
ServerBootstrap b = new ServerBootstrap();
|
||||||
b.option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT);
|
b.option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT);
|
||||||
b.group(bossGroup, workerGroup)
|
b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class)
|
||||||
.channel(NioServerSocketChannel.class)
|
.option(ChannelOption.SO_BACKLOG, 100).localAddress(port)
|
||||||
.option(ChannelOption.SO_BACKLOG, 100)
|
.childHandler(new ChannelInitializer<SocketChannel>() {
|
||||||
.localAddress(port)
|
@Override
|
||||||
.childHandler(
|
protected void initChannel(SocketChannel arg0) {
|
||||||
new ChannelInitializer<SocketChannel>() {
|
arg0.pipeline().addLast(new DelimiterCodec())
|
||||||
@Override
|
.addLast(new NodeCenterFrameHandler());
|
||||||
protected void initChannel(SocketChannel arg0) {
|
}
|
||||||
arg0.pipeline()
|
});
|
||||||
.addLast(new DelimiterCodec())
|
|
||||||
.addLast(new NodeCenterFrameHandler());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
b.bind(port).sync().channel();
|
b.bind(port).sync().channel();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void startHttp(int port) {
|
public static void startHttp(int port) {
|
||||||
File[] pluginJar = new File("./pluginLib/")
|
File[] pluginJar =
|
||||||
.listFiles(pathname -> pathname.getName().endsWith(".jar"));
|
new File("./pluginLib/").listFiles(pathname -> pathname.getName().endsWith(".jar"));
|
||||||
URL[] urls;
|
URL[] urls;
|
||||||
if (pluginJar != null && pluginJar.length > 0) {
|
if (pluginJar != null && pluginJar.length > 0) {
|
||||||
urls = new URL[pluginJar.length];
|
urls = new URL[pluginJar.length];
|
||||||
@ -188,7 +182,7 @@ public class NodeCenterServer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
urls = new URL[]{};
|
urls = new URL[] {};
|
||||||
}
|
}
|
||||||
pluginLoader = new URLClassLoader(urls, NodeCenterServer.class.getClassLoader());
|
pluginLoader = new URLClassLoader(urls, NodeCenterServer.class.getClassLoader());
|
||||||
LOGGER.info("start at: " + port);
|
LOGGER.info("start at: " + port);
|
||||||
@ -199,9 +193,7 @@ public class NodeCenterServer {
|
|||||||
ServerBootstrap b = new ServerBootstrap();
|
ServerBootstrap b = new ServerBootstrap();
|
||||||
ControlledChannelInitializer initializer = new ControlledChannelInitializer();
|
ControlledChannelInitializer initializer = new ControlledChannelInitializer();
|
||||||
b.option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT);
|
b.option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT);
|
||||||
b.group(bossGroup, workerGroup)
|
b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class).localAddress(port)
|
||||||
.channel(NioServerSocketChannel.class)
|
|
||||||
.localAddress(port)
|
|
||||||
.childHandler(initializer);
|
.childHandler(initializer);
|
||||||
final Channel ch = b.bind(port).sync().channel();
|
final Channel ch = b.bind(port).sync().channel();
|
||||||
ch.closeFuture().sync();
|
ch.closeFuture().sync();
|
||||||
@ -233,12 +225,9 @@ public class NodeCenterServer {
|
|||||||
} else {
|
} else {
|
||||||
LOGGER.warn("disable ssl");
|
LOGGER.warn("disable ssl");
|
||||||
}
|
}
|
||||||
arg0.pipeline()
|
arg0.pipeline().addLast(new HttpServerCodec()).addLast(new HttpObjectAggregator(65536))
|
||||||
.addLast(new HttpServerCodec())
|
|
||||||
.addLast(new HttpObjectAggregator(65536))
|
|
||||||
.addLast(new WebSocketServerProtocolHandler(PATH, null, true))
|
.addLast(new WebSocketServerProtocolHandler(PATH, null, true))
|
||||||
.addLast(new ChunkedWriteHandler())
|
.addLast(new ChunkedWriteHandler()).addLast(handler)
|
||||||
.addLast(handler)
|
|
||||||
.addLast(new NodeCenterWSFrameHandler());
|
.addLast(new NodeCenterWSFrameHandler());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,15 +16,16 @@ public class DistributeCallback extends ResultCallback {
|
|||||||
private static final Logger LOGGER = LogManager.getLogger(DistributeCallback.class);
|
private static final Logger LOGGER = LogManager.getLogger(DistributeCallback.class);
|
||||||
String sponsorPubkey;// 发起节点的
|
String sponsorPubkey;// 发起节点的
|
||||||
Map<String, String> nodes;
|
Map<String, String> nodes;
|
||||||
String pubKey; //发起节点的用户公钥
|
String pubKey; // 发起节点的用户公钥
|
||||||
String signature; // 发起节点的
|
String signature; // 发起节点的
|
||||||
int count; // 集群中几个节点已成功启动
|
int count; // 集群中几个节点已成功启动
|
||||||
ResultCallback res; // 返回给Node
|
ResultCallback res; // 返回给Node
|
||||||
String fileName; // ypk的文件名
|
String fileName; // ypk的文件名
|
||||||
int index;
|
int index;
|
||||||
String distributeID; //发起节点的分发id
|
String distributeID; // 发起节点的分发id
|
||||||
|
|
||||||
public DistributeCallback(String ss, String sponID, Map<String, String> n, ResultCallback re, String p, String s) {
|
public DistributeCallback(String ss, String sponID, Map<String, String> n, ResultCallback re,
|
||||||
|
String p, String s) {
|
||||||
distributeID = ss;
|
distributeID = ss;
|
||||||
count = 0;
|
count = 0;
|
||||||
index = 1;
|
index = 1;
|
||||||
@ -67,14 +68,10 @@ public class DistributeCallback extends ResultCallback {
|
|||||||
public void onDistribute(String progress, String nodeIP) {
|
public void onDistribute(String progress, String nodeIP) {
|
||||||
Map<String, String> ret2 = new HashMap<>();
|
Map<String, String> ret2 = new HashMap<>();
|
||||||
ret2.put("action", "onDistributeContract");
|
ret2.put("action", "onDistributeContract");
|
||||||
ret2.put(
|
ret2.put("progress", "NC is sending ypk to NO." + index + " node in the units,progress is "
|
||||||
"progress",
|
+ progress + "%.");
|
||||||
"NC is sending ypk to NO."
|
if (progress.equals("100.00"))
|
||||||
+ index
|
index++;
|
||||||
+ " node in the units,progress is "
|
|
||||||
+ progress
|
|
||||||
+ "%.");
|
|
||||||
if (progress.equals("100.00")) index++;
|
|
||||||
|
|
||||||
Map<String, String> map = new HashMap<>();
|
Map<String, String> map = new HashMap<>();
|
||||||
map.put("action", "onDistribute");
|
map.put("action", "onDistribute");
|
||||||
@ -111,7 +108,7 @@ public class DistributeCallback extends ResultCallback {
|
|||||||
map_send.put("nodeIP", nodeIP);
|
map_send.put("nodeIP", nodeIP);
|
||||||
map_send.put("content", JsonUtil.toJson(ret2));
|
map_send.put("content", JsonUtil.toJson(ret2));
|
||||||
res.onResult(JsonUtil.toJson(map_send));
|
res.onResult(JsonUtil.toJson(map_send));
|
||||||
//NC delete file
|
// NC delete file
|
||||||
File file = new File("./temp/stateFiles/" + fileName);
|
File file = new File("./temp/stateFiles/" + fileName);
|
||||||
if (file.exists() && file.isFile())
|
if (file.exists() && file.isFile())
|
||||||
file.delete();
|
file.delete();
|
||||||
@ -123,27 +120,27 @@ public class DistributeCallback extends ResultCallback {
|
|||||||
public void onResult(String str) {
|
public void onResult(String str) {
|
||||||
LOGGER.info("[DistributeCallback] str=" + str);
|
LOGGER.info("[DistributeCallback] str=" + str);
|
||||||
|
|
||||||
Map<String, String> map = JsonUtil.fromJson(str, new TypeToken<Map<String, String>>() {
|
Map<String, String> map =
|
||||||
}.getType());
|
JsonUtil.fromJson(str, new TypeToken<Map<String, String>>() {}.getType());
|
||||||
|
|
||||||
NodeCenterActions.sync.sleepWithTimeout(map.get("requestID"), this, 60);
|
NodeCenterActions.sync.sleepWithTimeout(map.get("requestID"), this, 60);
|
||||||
|
|
||||||
String operation = map.get("operation");
|
String operation = map.get("operation");
|
||||||
|
|
||||||
switch (operation) {
|
switch (operation) {
|
||||||
//上传到nodecenter
|
// 上传到nodecenter
|
||||||
case "NCreceive":
|
case "NCreceive":
|
||||||
NCreceive(map.get("progress"));
|
NCreceive(map.get("progress"));
|
||||||
break;
|
break;
|
||||||
//开始分发给各个节点
|
// 开始分发给各个节点
|
||||||
case "distribute":
|
case "distribute":
|
||||||
distributeContractProject(map.get("receiveFileName"), map.get("isPrivate"));
|
distributeContractProject(map.get("receiveFileName"), map.get("isPrivate"));
|
||||||
break;
|
break;
|
||||||
//分发给各个节点
|
// 分发给各个节点
|
||||||
case "onDistribute":
|
case "onDistribute":
|
||||||
onDistribute(map.get("progress"), map.get("nodeIP"));
|
onDistribute(map.get("progress"), map.get("nodeIP"));
|
||||||
break;
|
break;
|
||||||
//各个节点返回收到
|
// 各个节点返回收到
|
||||||
case "onReceive":
|
case "onReceive":
|
||||||
onReceive(map);
|
onReceive(map);
|
||||||
break;
|
break;
|
||||||
|
@ -25,27 +25,26 @@ public class RequestAllExecutor implements ContractExecutor {
|
|||||||
resultCount = count;
|
resultCount = count;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ResultCallback createResultCallback(
|
public ResultCallback createResultCallback(final String requestID,
|
||||||
final String requestID, final ResultCallback originalCb, int count, String contractID) {
|
final ResultCallback originalCb, int count, String contractID) {
|
||||||
return new Collector(requestID, originalCb, count, contractID);
|
return new Collector(requestID, originalCb, count, contractID);
|
||||||
}
|
}
|
||||||
|
|
||||||
//only for test ADSP
|
// only for test ADSP
|
||||||
// public ResultCallback createResultCallback(
|
// public ResultCallback createResultCallback(
|
||||||
// final String requestID, final ResultCallback originalCb, int count,String contractID,String seq) {
|
// final String requestID, final ResultCallback originalCb, int count,String contractID,String
|
||||||
// ResultCallback collector = new Collector(requestID, originalCb, count,contractID,seq);
|
// seq) {
|
||||||
// return collector;
|
// ResultCallback collector = new Collector(requestID, originalCb, count,contractID,seq);
|
||||||
// }
|
// return collector;
|
||||||
|
// }
|
||||||
|
|
||||||
public void sendRequest(String req, ResultCallback collector) {
|
public void sendRequest(String req, ResultCallback collector) {
|
||||||
List<String> nodes = info.members;
|
List<String> nodes = info.members;
|
||||||
for (String node : nodes) {
|
for (String node : nodes) {
|
||||||
CMNode cmNode = NodeCenterActions.nodeInfos.get(node);
|
CMNode cmNode = NodeCenterActions.nodeInfos.get(node);
|
||||||
if (cmNode == null) {
|
if (cmNode == null) {
|
||||||
collector.onResult(
|
collector.onResult("{\"status\":\"Error\",\"result\":\"node " + node
|
||||||
"{\"status\":\"Error\",\"result\":\"node "
|
+ " offline\",\"action\":\"onExecuteContractTrustfully\"}");
|
||||||
+ node
|
|
||||||
+ " offline\",\"action\":\"onExecuteContractTrustfully\"}");
|
|
||||||
} else {
|
} else {
|
||||||
cmNode.connection.controller.sendMsg(req);
|
cmNode.connection.controller.sendMsg(req);
|
||||||
}
|
}
|
||||||
@ -57,12 +56,13 @@ public class RequestAllExecutor implements ContractExecutor {
|
|||||||
JsonObject jo2 = JsonParser.parseString(req).getAsJsonObject();
|
JsonObject jo2 = JsonParser.parseString(req).getAsJsonObject();
|
||||||
String id = jo2.get("contractID").getAsString();
|
String id = jo2.get("contractID").getAsString();
|
||||||
|
|
||||||
//only for test ADSP
|
// only for test ADSP
|
||||||
// ResultCallback collector = createResultCallback(requestID, rc, resultCount,id,jo2.get("seq").getAsString());
|
// ResultCallback collector = createResultCallback(requestID, rc,
|
||||||
|
// resultCount,id,jo2.get("seq").getAsString());
|
||||||
|
|
||||||
ResultCallback collector = createResultCallback(requestID, rc, resultCount, id);
|
ResultCallback collector = createResultCallback(requestID, rc, resultCount, id);
|
||||||
|
|
||||||
//TODO NC.sync?有问题?
|
// TODO NC.sync?有问题?
|
||||||
NodeCenterActions.sync.sleep(requestID, collector);
|
NodeCenterActions.sync.sleep(requestID, collector);
|
||||||
sendRequest(req, collector);
|
sendRequest(req, collector);
|
||||||
}
|
}
|
||||||
@ -74,20 +74,20 @@ public class RequestAllExecutor implements ContractExecutor {
|
|||||||
AtomicInteger count = new AtomicInteger(0);
|
AtomicInteger count = new AtomicInteger(0);
|
||||||
|
|
||||||
|
|
||||||
//only for testADSP
|
// only for testADSP
|
||||||
// boolean flag = true; //true表示还没在文件中记录这次调用结果
|
// boolean flag = true; //true表示还没在文件中记录这次调用结果
|
||||||
// String seq;
|
// String seq;
|
||||||
// Map<String,Integer> res = new ConcurrentHashMap<String,Integer>();
|
// Map<String,Integer> res = new ConcurrentHashMap<String,Integer>();
|
||||||
|
|
||||||
|
|
||||||
//only for test ADSP
|
// only for test ADSP
|
||||||
// public Collector(String reqID, ResultCallback callback, int c,String id,String seq2) {
|
// public Collector(String reqID, ResultCallback callback, int c,String id,String seq2) {
|
||||||
// total = c;
|
// total = c;
|
||||||
// requestID = reqID;
|
// requestID = reqID;
|
||||||
// commiter = callback;
|
// commiter = callback;
|
||||||
// contractID = id;
|
// contractID = id;
|
||||||
// seq = seq2;
|
// seq = seq2;
|
||||||
// }
|
// }
|
||||||
ResultCallback committer;
|
ResultCallback committer;
|
||||||
|
|
||||||
public Collector(String reqID, ResultCallback callback, int c, String id) {
|
public Collector(String reqID, ResultCallback callback, int c, String id) {
|
||||||
@ -105,7 +105,7 @@ public class RequestAllExecutor implements ContractExecutor {
|
|||||||
obj.addProperty("seqNum", count.getAndIncrement());
|
obj.addProperty("seqNum", count.getAndIncrement());
|
||||||
obj.addProperty("total", total);
|
obj.addProperty("total", total);
|
||||||
|
|
||||||
//NodeCenterActions.recoverMap.get(nodePubKey).get(contractID).lastExeSeq++;
|
// NodeCenterActions.recoverMap.get(nodePubKey).get(contractID).lastExeSeq++;
|
||||||
|
|
||||||
if (committer != null)
|
if (committer != null)
|
||||||
committer.onResult(obj.toString());
|
committer.onResult(obj.toString());
|
||||||
@ -125,47 +125,45 @@ public class RequestAllExecutor implements ContractExecutor {
|
|||||||
String data = obj.get("data").getAsString();
|
String data = obj.get("data").getAsString();
|
||||||
ContractResult cr = JsonUtil.fromJson(data, ContractResult.class);
|
ContractResult cr = JsonUtil.fromJson(data, ContractResult.class);
|
||||||
|
|
||||||
//only for testADSP
|
// only for testADSP
|
||||||
// if(TestADSP.getFlag()){
|
// if(TestADSP.getFlag()){
|
||||||
// String r = cr.result;
|
// String r = cr.result;
|
||||||
// if(!res.containsKey(r)){
|
// if(!res.containsKey(r)){
|
||||||
// res.put(r,0);
|
// res.put(r,0);
|
||||||
// }
|
// }
|
||||||
// int former = res.get(r);
|
// int former = res.get(r);
|
||||||
// res.put(r,++former);
|
// res.put(r,++former);
|
||||||
// for(String s : res.keySet()){
|
// for(String s : res.keySet()){
|
||||||
// if(res.get(s) > total / 2 && flag){
|
// if(res.get(s) > total / 2 && flag){
|
||||||
// //写入文件
|
// //写入文件
|
||||||
// File file = new File(TestADSP.resultPath);
|
// File file = new File(TestADSP.resultPath);
|
||||||
// synchronized (file){
|
// synchronized (file){
|
||||||
// try {
|
// try {
|
||||||
// FileWriter fw = new FileWriter(file, true);
|
// FileWriter fw = new FileWriter(file, true);
|
||||||
// PrintWriter pw = new PrintWriter(fw);
|
// PrintWriter pw = new PrintWriter(fw);
|
||||||
// pw.println(seq + " " + r);
|
// pw.println(seq + " " + r);
|
||||||
// pw.flush();
|
// pw.flush();
|
||||||
// fw.flush();
|
// fw.flush();
|
||||||
// pw.close();
|
// pw.close();
|
||||||
// fw.close();
|
// fw.close();
|
||||||
// } catch (IOException e) {
|
// } catch (IOException e) {
|
||||||
// e.printStackTrace();
|
// e.printStackTrace();
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// flag = false;
|
// flag = false;
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
|
||||||
/* if (cr.status == ContractResult.Status.Error) { //TODO 规范Status的使用 改成 ==Statuc.Error才恢复
|
/*
|
||||||
String nodePubKey = obj.get("nodeID").getAsString();
|
* if (cr.status == ContractResult.Status.Error) { //TODO 规范Status的使用 改成
|
||||||
if(NodeCenterActions.recoverMap.containsKey(nodePubKey)){
|
* ==Statuc.Error才恢复 String nodePubKey = obj.get("nodeID").getAsString();
|
||||||
ContractRecord record = NodeCenterActions.recoverMap.get(nodePubKey).get(contractID);
|
* if(NodeCenterActions.recoverMap.containsKey(nodePubKey)){ ContractRecord record =
|
||||||
if(record.recoverFlag == RecoverFlag.Fine){
|
* NodeCenterActions.recoverMap.get(nodePubKey).get(contractID);
|
||||||
record.recoverFlag = RecoverFlag.ToRecover;
|
* if(record.recoverFlag == RecoverFlag.Fine){ record.recoverFlag =
|
||||||
MasterActions.restartContracts(nodePubKey);
|
* RecoverFlag.ToRecover; MasterActions.restartContracts(nodePubKey); } } }
|
||||||
}
|
*/
|
||||||
}
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,18 +26,17 @@ public class RequestOnceExecutor implements ContractExecutor {
|
|||||||
JsonObject jo2 = (new JsonParser()).parse(req).getAsJsonObject();
|
JsonObject jo2 = (new JsonParser()).parse(req).getAsJsonObject();
|
||||||
String contractID = jo2.get("contractID").getAsString();
|
String contractID = jo2.get("contractID").getAsString();
|
||||||
|
|
||||||
ResultCallback cb =
|
ResultCallback cb = new ResultCallback() {
|
||||||
new ResultCallback() {
|
@Override
|
||||||
@Override
|
public void onResult(String str) {
|
||||||
public void onResult(String str) {
|
LOGGER.debug(str);
|
||||||
LOGGER.debug(str);
|
JsonObject jo = (new JsonParser()).parse(str).getAsJsonObject();
|
||||||
JsonObject jo = (new JsonParser()).parse(str).getAsJsonObject();
|
jo.remove("action");
|
||||||
jo.remove("action");
|
jo.addProperty("action", "onExecuteResult");
|
||||||
jo.addProperty("action", "onExecuteResult");
|
LOGGER.debug(jo.toString());
|
||||||
LOGGER.debug(jo.toString());
|
rc.onResult(jo.toString());
|
||||||
rc.onResult(jo.toString());
|
}
|
||||||
}
|
};
|
||||||
};
|
|
||||||
NodeCenterActions.sync.sleep(requestID, cb);
|
NodeCenterActions.sync.sleep(requestID, cb);
|
||||||
for (int i = 0; i < info.members.size(); i++) {
|
for (int i = 0; i < info.members.size(); i++) {
|
||||||
int size = info.members.size();
|
int size = info.members.size();
|
||||||
@ -49,8 +48,7 @@ public class RequestOnceExecutor implements ContractExecutor {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rc.onResult(
|
rc.onResult("{\"status\":\"Error\",\"result\":\"all nodes "
|
||||||
"{\"status\":\"Error\",\"result\":\"all nodes "
|
+ " offline\",\"action\":\"onExecuteContract\"}");
|
||||||
+ " offline\",\"action\":\"onExecuteContract\"}");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,31 +32,30 @@ public class ResponseOnceExecutor implements ContractExecutor {
|
|||||||
JsonObject jo2 = (new JsonParser()).parse(req).getAsJsonObject();
|
JsonObject jo2 = (new JsonParser()).parse(req).getAsJsonObject();
|
||||||
String contractID = jo2.get("contractID").getAsString();
|
String contractID = jo2.get("contractID").getAsString();
|
||||||
// TODO 标注失效节点,是否选择重新迁移??
|
// TODO 标注失效节点,是否选择重新迁移??
|
||||||
ResultCallback cb =
|
ResultCallback cb = new ResultCallback() {
|
||||||
new ResultCallback() {
|
@Override
|
||||||
@Override
|
public void onResult(String str) {
|
||||||
public void onResult(String str) {
|
LOGGER.debug(str);
|
||||||
LOGGER.debug(str);
|
JsonObject jo = (new JsonParser()).parse(str).getAsJsonObject();
|
||||||
JsonObject jo = (new JsonParser()).parse(str).getAsJsonObject();
|
jo.remove("action");
|
||||||
jo.remove("action");
|
jo.addProperty("action", "onExecuteResult");
|
||||||
jo.addProperty("action", "onExecuteResult");
|
LOGGER.debug(jo.toString());
|
||||||
LOGGER.debug(jo.toString());
|
if (jo.has("data")) {
|
||||||
if (jo.has("data")) {
|
String data = jo.get("data").getAsString();
|
||||||
String data = jo.get("data").getAsString();
|
ContractResult cr = JsonUtil.fromJson(data, ContractResult.class);
|
||||||
ContractResult cr = JsonUtil.fromJson(data, ContractResult.class);
|
if (cr.status != ContractResult.Status.Success && count > 0) {
|
||||||
if (cr.status != ContractResult.Status.Success && count > 0) {
|
executeInternal(requestID, rc, req, count - 1);
|
||||||
executeInternal(requestID, rc, req, count - 1);
|
} else
|
||||||
} else
|
rc.onResult(jo.toString());
|
||||||
rc.onResult(jo.toString());
|
} else {
|
||||||
} else {
|
JsonObject jo2 = new JsonObject();
|
||||||
JsonObject jo2 = new JsonObject();
|
jo2.addProperty("action", "onExecuteResult");
|
||||||
jo2.addProperty("action", "onExecuteResult");
|
jo.remove("action");
|
||||||
jo.remove("action");
|
jo2.addProperty("data", jo.toString());
|
||||||
jo2.addProperty("data", jo.toString());
|
rc.onResult(jo2.toString());
|
||||||
rc.onResult(jo2.toString());
|
}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
};
|
|
||||||
NodeCenterActions.sync.sleepWithTimeout(requestID, cb, 5);
|
NodeCenterActions.sync.sleepWithTimeout(requestID, cb, 5);
|
||||||
if (!sendOnce(req))
|
if (!sendOnce(req))
|
||||||
rc.onResult(
|
rc.onResult(
|
||||||
|
@ -32,8 +32,8 @@ public class CMNode {
|
|||||||
contracts = cons;
|
contracts = cons;
|
||||||
contractVersion = version;
|
contractVersion = version;
|
||||||
for (ContractDesp desp : cons) {
|
for (ContractDesp desp : cons) {
|
||||||
KeyValueDBUtil.instance.setValue(
|
KeyValueDBUtil.instance.setValue(NCTables.ContractMeta.toString(), desp.contractID,
|
||||||
NCTables.ContractMeta.toString(), desp.contractID, desp.contractName);
|
desp.contractName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -53,7 +53,8 @@ public class CMNode {
|
|||||||
if (null != contracts) {
|
if (null != contracts) {
|
||||||
for (ContractDesp desp : contracts) {
|
for (ContractDesp desp : contracts) {
|
||||||
if (desp.contractID.equals(contractIDOrName)
|
if (desp.contractID.equals(contractIDOrName)
|
||||||
|| desp.contractName.equals(contractIDOrName)) return true;
|
|| desp.contractName.equals(contractIDOrName))
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -79,14 +80,15 @@ public class CMNode {
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
if (!connection.controller.isOpen()) {
|
if (!connection.controller.isOpen()) {
|
||||||
LOGGER.info("node " + nodeName + "(" + pubKey.substring(0, 5) + ") may be offline!");
|
LOGGER.info(
|
||||||
// System.out.println(
|
"node " + nodeName + "(" + pubKey.substring(0, 5) + ") may be offline!");
|
||||||
// new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
|
// System.out.println(
|
||||||
// .format(new Date(System.currentTimeMillis()))
|
// new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
|
||||||
// + "[ADSP][CMNode] isAlive : "
|
// .format(new Date(System.currentTimeMillis()))
|
||||||
// + nodeName
|
// + "[ADSP][CMNode] isAlive : "
|
||||||
// + " not open!"
|
// + nodeName
|
||||||
// + "\n");
|
// + " not open!"
|
||||||
|
// + "\n");
|
||||||
return doubleCheckAlive();
|
return doubleCheckAlive();
|
||||||
} else {
|
} else {
|
||||||
return true;
|
return true;
|
||||||
@ -116,10 +118,8 @@ public class CMNode {
|
|||||||
LOGGER.debug("removeCIManager" + string);
|
LOGGER.debug("removeCIManager" + string);
|
||||||
int start = this.cimanager.indexOf(string);
|
int start = this.cimanager.indexOf(string);
|
||||||
if (start > 0) {
|
if (start > 0) {
|
||||||
this.cimanager =
|
this.cimanager = this.cimanager.substring(0, start)
|
||||||
this.cimanager
|
.concat(this.cimanager.substring(start + 130));
|
||||||
.substring(0, start)
|
|
||||||
.concat(this.cimanager.substring(start + 130));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,14 +34,9 @@ public class CheckAgentAliveTimer extends TimerTask {
|
|||||||
if (null != info.contracts && !info.contracts.isEmpty()) {
|
if (null != info.contracts && !info.contracts.isEmpty()) {
|
||||||
for (ContractDesp cd : info.contracts) {
|
for (ContractDesp cd : info.contracts) {
|
||||||
cd.setIsMaster(false);
|
cd.setIsMaster(false);
|
||||||
//注意 选举不通过NC的机制触发。
|
// 注意 选举不通过NC的机制触发。
|
||||||
LOGGER.info(
|
LOGGER.info("checkAlive---- 设置节点 " + info.pubKey.substring(0, 5) + " 的合约 "
|
||||||
"checkAlive---- 设置节点 "
|
+ cd.contractID + " isMaster=" + false);
|
||||||
+ info.pubKey.substring(0, 5)
|
|
||||||
+ " 的合约 "
|
|
||||||
+ cd.contractID
|
|
||||||
+ " isMaster="
|
|
||||||
+ false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package org.bdware.server.nodecenter;
|
package org.bdware.server.nodecenter;
|
||||||
|
|
||||||
import org.bdware.sc.conn.ResultCallback;
|
import org.bdware.sc.conn.ResultCallback;
|
||||||
|
|
||||||
public interface ContractExecutor {
|
public interface ContractExecutor {
|
||||||
public void execute(String requestID, ResultCallback rc, String req);
|
public void execute(String requestID, ResultCallback rc, String req);
|
||||||
|
@ -4,12 +4,12 @@ import java.util.HashMap;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
||||||
//NC
|
// NC
|
||||||
public class ElectMasterTimeRecorder {
|
public class ElectMasterTimeRecorder {
|
||||||
public static Long startElect; //NC开始选举
|
public static Long startElect; // NC开始选举
|
||||||
public static Long findNewMaster; //NC选出新master
|
public static Long findNewMaster; // NC选出新master
|
||||||
public static String newMaster;
|
public static String newMaster;
|
||||||
public static Long changeMasterFinish; //新master在NC上更新路由信息
|
public static Long changeMasterFinish; // 新master在NC上更新路由信息
|
||||||
|
|
||||||
public static Map nodeFindMasterCrash = new HashMap<String,Long>(); //nodeID,electMaster调用时间
|
public static Map nodeFindMasterCrash = new HashMap<String, Long>(); // nodeID,electMaster调用时间
|
||||||
}
|
}
|
||||||
|
@ -49,9 +49,7 @@ public class FileActions {
|
|||||||
return ret != null && ret.equals("locked");
|
return ret != null && ret.equals("locked");
|
||||||
}
|
}
|
||||||
|
|
||||||
@URIPath(
|
@URIPath(method = org.bdware.server.http.HttpMethod.POST, value = {"/upload"})
|
||||||
method = org.bdware.server.http.HttpMethod.POST,
|
|
||||||
value = {"/upload"})
|
|
||||||
public static void handleUploadRequest(ChannelHandlerContext ctx, FullHttpRequest request) {
|
public static void handleUploadRequest(ChannelHandlerContext ctx, FullHttpRequest request) {
|
||||||
LOGGER.info("[FileActions] handleUploadRequest : ");
|
LOGGER.info("[FileActions] handleUploadRequest : ");
|
||||||
// Upload method is POST
|
// Upload method is POST
|
||||||
@ -65,18 +63,12 @@ public class FileActions {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!transformedParam.containsKey("fileName")
|
if (!transformedParam.containsKey("fileName") || !transformedParam.containsKey("order")
|
||||||
|| !transformedParam.containsKey("order")
|
|| !transformedParam.containsKey("count") || !transformedParam.containsKey("pubKey")
|
||||||
|| !transformedParam.containsKey("count")
|
|
||||||
|| !transformedParam.containsKey("pubKey")
|
|
||||||
|| !transformedParam.containsKey("sign")) {
|
|| !transformedParam.containsKey("sign")) {
|
||||||
DefaultFullHttpResponse fullResponse =
|
DefaultFullHttpResponse fullResponse = new DefaultFullHttpResponse(
|
||||||
new DefaultFullHttpResponse(
|
request.protocolVersion(), OK, Unpooled.wrappedBuffer(
|
||||||
request.protocolVersion(),
|
"{\"status\":\"false\",\"data\":\"Missing argument!\"}".getBytes()));
|
||||||
OK,
|
|
||||||
Unpooled.wrappedBuffer(
|
|
||||||
"{\"status\":\"false\",\"data\":\"Missing argument!\"}"
|
|
||||||
.getBytes()));
|
|
||||||
|
|
||||||
ChannelFuture f = ctx.write(fullResponse);
|
ChannelFuture f = ctx.write(fullResponse);
|
||||||
f.addListener(ChannelFutureListener.CLOSE);
|
f.addListener(ChannelFutureListener.CLOSE);
|
||||||
@ -84,10 +76,8 @@ public class FileActions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 验签
|
// 验签
|
||||||
// HttpMethod method = request.method();
|
// HttpMethod method = request.method();
|
||||||
String uri =
|
String uri = URLDecoder.decode(request.uri()).split("\\?")[1]; // http请求中规定签名必须是最后一个且公钥名必须为pubKey,否则验签失败
|
||||||
URLDecoder.decode(request.uri())
|
|
||||||
.split("\\?")[1]; // http请求中规定签名必须是最后一个且公钥名必须为pubKey,否则验签失败
|
|
||||||
int index = uri.lastIndexOf('&');
|
int index = uri.lastIndexOf('&');
|
||||||
String str = uri.substring(0, index);
|
String str = uri.substring(0, index);
|
||||||
|
|
||||||
@ -115,9 +105,8 @@ public class FileActions {
|
|||||||
Method mm;
|
Method mm;
|
||||||
Action a = null;
|
Action a = null;
|
||||||
try {
|
try {
|
||||||
mm =
|
mm = FileActions.class.getDeclaredMethod("uploadFile", JsonObject.class,
|
||||||
FileActions.class.getDeclaredMethod(
|
ResultCallback.class);
|
||||||
"uploadFile", JsonObject.class, ResultCallback.class);
|
|
||||||
a = mm.getAnnotation(Action.class);
|
a = mm.getAnnotation(Action.class);
|
||||||
} catch (SecurityException | NoSuchMethodException e1) {
|
} catch (SecurityException | NoSuchMethodException e1) {
|
||||||
// TODO Auto-generated catch block
|
// TODO Auto-generated catch block
|
||||||
@ -147,28 +136,17 @@ public class FileActions {
|
|||||||
status = "accept";
|
status = "accept";
|
||||||
}
|
}
|
||||||
|
|
||||||
TimeDBUtil.instance.put(
|
TimeDBUtil.instance.put(NCTables.NodeHttpLog.toString(),
|
||||||
NCTables.NodeHttpLog.toString(),
|
"{\"action\":\"" + action + "\",\"pubKey\":\"" + transformedParam.get("pubKey")
|
||||||
"{\"action\":\""
|
+ "\",\"status\":\"" + status + "\",\"date\":" + System.currentTimeMillis()
|
||||||
+ action
|
|
||||||
+ "\",\"pubKey\":\""
|
|
||||||
+ transformedParam.get("pubKey")
|
|
||||||
+ "\",\"status\":\""
|
|
||||||
+ status
|
|
||||||
+ "\",\"date\":"
|
|
||||||
+ System.currentTimeMillis()
|
|
||||||
+ "}");
|
+ "}");
|
||||||
|
|
||||||
// logger.info("[CMHttpHandler] flag = " + flag + " flag2 = " + flag2);
|
// logger.info("[CMHttpHandler] flag = " + flag + " flag2 = " + flag2);
|
||||||
|
|
||||||
if (!flag || !flag2) {
|
if (!flag || !flag2) {
|
||||||
DefaultFullHttpResponse fullResponse =
|
DefaultFullHttpResponse fullResponse = new DefaultFullHttpResponse(
|
||||||
new DefaultFullHttpResponse(
|
request.protocolVersion(), OK, Unpooled.wrappedBuffer(
|
||||||
request.protocolVersion(),
|
"{\"status\":\"false\",\"data\":\"Permission denied!\"}".getBytes()));
|
||||||
OK,
|
|
||||||
Unpooled.wrappedBuffer(
|
|
||||||
"{\"status\":\"false\",\"data\":\"Permission denied!\"}"
|
|
||||||
.getBytes()));
|
|
||||||
|
|
||||||
ChannelFuture f = ctx.write(fullResponse);
|
ChannelFuture f = ctx.write(fullResponse);
|
||||||
f.addListener(ChannelFutureListener.CLOSE);
|
f.addListener(ChannelFutureListener.CLOSE);
|
||||||
@ -191,27 +169,24 @@ public class FileActions {
|
|||||||
}
|
}
|
||||||
File target = new File(dir, fileName);
|
File target = new File(dir, fileName);
|
||||||
if (fileName.contains("..")) {
|
if (fileName.contains("..")) {
|
||||||
DefaultFullHttpResponse fullResponse =
|
DefaultFullHttpResponse fullResponse = new DefaultFullHttpResponse(
|
||||||
new DefaultFullHttpResponse(
|
request.protocolVersion(), OK, Unpooled.wrappedBuffer(
|
||||||
request.protocolVersion(),
|
"{\"status\":\"false\",\"data\":\"FileName illegal!\"}".getBytes()));
|
||||||
OK,
|
|
||||||
Unpooled.wrappedBuffer(
|
|
||||||
"{\"status\":\"false\",\"data\":\"FileName illegal!\"}"
|
|
||||||
.getBytes()));
|
|
||||||
|
|
||||||
ChannelFuture f = ctx.write(fullResponse);
|
ChannelFuture f = ctx.write(fullResponse);
|
||||||
f.addListener(ChannelFutureListener.CLOSE);
|
f.addListener(ChannelFutureListener.CLOSE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// LOGGER.info(request.refCnt());
|
// LOGGER.info(request.refCnt());
|
||||||
// httpDecoder.offer(request);
|
// httpDecoder.offer(request);
|
||||||
// LOGGER.info(request.refCnt());
|
// LOGGER.info(request.refCnt());
|
||||||
|
|
||||||
FileOutputStream fout;
|
FileOutputStream fout;
|
||||||
if (order == 0) {
|
if (order == 0) {
|
||||||
try {
|
try {
|
||||||
LOGGER.debug("Path:" + target.getAbsolutePath());
|
LOGGER.debug("Path:" + target.getAbsolutePath());
|
||||||
if (!target.getParentFile().exists()) target.getParentFile().mkdirs();
|
if (!target.getParentFile().exists())
|
||||||
|
target.getParentFile().mkdirs();
|
||||||
fout = new FileOutputStream(target, false);
|
fout = new FileOutputStream(target, false);
|
||||||
fileMap.put(target.getAbsolutePath(), fout);
|
fileMap.put(target.getAbsolutePath(), fout);
|
||||||
} catch (FileNotFoundException e) {
|
} catch (FileNotFoundException e) {
|
||||||
@ -232,22 +207,21 @@ public class FileActions {
|
|||||||
}
|
}
|
||||||
fileMap.remove(target.getAbsolutePath());
|
fileMap.remove(target.getAbsolutePath());
|
||||||
updateTime.remove(target.getAbsolutePath());
|
updateTime.remove(target.getAbsolutePath());
|
||||||
// String doi = unzipIfYpk(target, dir);
|
// String doi = unzipIfYpk(target, dir);
|
||||||
String doi = null;
|
String doi = null;
|
||||||
if (null != doi) {
|
if (null != doi) {
|
||||||
retStr = retStr.replaceFirst("null", doi);
|
retStr = retStr.replaceFirst("null", doi);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DefaultFullHttpResponse fullResponse =
|
DefaultFullHttpResponse fullResponse = new DefaultFullHttpResponse(
|
||||||
new DefaultFullHttpResponse(
|
request.protocolVersion(), OK, Unpooled.wrappedBuffer(retStr.getBytes()));
|
||||||
request.protocolVersion(), OK, Unpooled.wrappedBuffer(retStr.getBytes()));
|
|
||||||
fullResponse.headers().add("Access-Control-Allow-Origin", "*");
|
fullResponse.headers().add("Access-Control-Allow-Origin", "*");
|
||||||
ChannelFuture f = ctx.write(fullResponse);
|
ChannelFuture f = ctx.write(fullResponse);
|
||||||
f.addListener(ChannelFutureListener.CLOSE);
|
f.addListener(ChannelFutureListener.CLOSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void writeChunk(
|
private static void writeChunk(ChannelHandlerContext ctx, HttpPostRequestDecoder httpDecoder,
|
||||||
ChannelHandlerContext ctx, HttpPostRequestDecoder httpDecoder, File file) {
|
File file) {
|
||||||
try {
|
try {
|
||||||
if (!file.exists()) {
|
if (!file.exists()) {
|
||||||
file.createNewFile();
|
file.createNewFile();
|
||||||
@ -274,19 +248,14 @@ public class FileActions {
|
|||||||
|
|
||||||
@URIPath(method = HttpMethod.OPTIONS)
|
@URIPath(method = HttpMethod.OPTIONS)
|
||||||
public static void crossOrigin(ChannelHandlerContext ctx, FullHttpRequest request) {
|
public static void crossOrigin(ChannelHandlerContext ctx, FullHttpRequest request) {
|
||||||
DefaultFullHttpResponse fullResponse =
|
DefaultFullHttpResponse fullResponse = new DefaultFullHttpResponse(
|
||||||
new DefaultFullHttpResponse(
|
request.protocolVersion(), OK, Unpooled.wrappedBuffer("success".getBytes()));
|
||||||
request.protocolVersion(),
|
|
||||||
OK,
|
|
||||||
Unpooled.wrappedBuffer("success".getBytes()));
|
|
||||||
fullResponse.headers().remove("Access-Control-Allow-Origin");
|
fullResponse.headers().remove("Access-Control-Allow-Origin");
|
||||||
fullResponse.headers().remove("Access-Control-Allow-Headers");
|
fullResponse.headers().remove("Access-Control-Allow-Headers");
|
||||||
fullResponse.headers().add("Access-Control-Allow-Origin", "*");
|
fullResponse.headers().add("Access-Control-Allow-Origin", "*");
|
||||||
fullResponse
|
fullResponse.headers().add("Access-Control-Allow-Headers",
|
||||||
.headers()
|
"Content-Type, Cookie, Accept-Encoding, User-Agent, Host, Referer, "
|
||||||
.add("Access-Control-Allow-Headers",
|
+ "X-Requested-With, Accept, Accept-Language, Cache-Control, Connection");
|
||||||
"Content-Type, Cookie, Accept-Encoding, User-Agent, Host, Referer, " +
|
|
||||||
"X-Requested-With, Accept, Accept-Language, Cache-Control, Connection");
|
|
||||||
ChannelFuture f = ctx.write(fullResponse);
|
ChannelFuture f = ctx.write(fullResponse);
|
||||||
f.addListener(ChannelFutureListener.CLOSE);
|
f.addListener(ChannelFutureListener.CLOSE);
|
||||||
LOGGER.info("[OOOOOOOOption] received!");
|
LOGGER.info("[OOOOOOOOption] received!");
|
||||||
@ -338,10 +307,8 @@ public class FileActions {
|
|||||||
// 文本文件
|
// 文本文件
|
||||||
if (!path.contains("..") && isTextFile(path)) {
|
if (!path.contains("..") && isTextFile(path)) {
|
||||||
LOGGER.debug("[FileActions] 上传文本文件类型 : ");
|
LOGGER.debug("[FileActions] 上传文本文件类型 : ");
|
||||||
BufferedWriter bw =
|
BufferedWriter bw = new BufferedWriter(
|
||||||
new BufferedWriter(
|
new FileWriter(target.getAbsolutePath() + "/" + fileName, isAppend));
|
||||||
new FileWriter(
|
|
||||||
target.getAbsolutePath() + "/" + fileName, isAppend));
|
|
||||||
bw.write(content);
|
bw.write(content);
|
||||||
bw.close();
|
bw.close();
|
||||||
} else { // 其他类型文件
|
} else { // 其他类型文件
|
||||||
@ -426,10 +393,7 @@ public class FileActions {
|
|||||||
File f = new File(parPath + "/" + oldFile);
|
File f = new File(parPath + "/" + oldFile);
|
||||||
if (!oldFile.contains("..") && f.exists()) {
|
if (!oldFile.contains("..") && f.exists()) {
|
||||||
LOGGER.info(
|
LOGGER.info(
|
||||||
"[FileController] delete:"
|
"[FileController] delete:" + f.getAbsolutePath() + " exists:" + f.exists());
|
||||||
+ f.getAbsolutePath()
|
|
||||||
+ " exists:"
|
|
||||||
+ f.exists());
|
|
||||||
f.delete();
|
f.delete();
|
||||||
}
|
}
|
||||||
response.data = "success";
|
response.data = "success";
|
||||||
|
@ -7,7 +7,6 @@ import org.apache.logging.log4j.Logger;
|
|||||||
import org.bdware.sc.conn.ResultCallback;
|
import org.bdware.sc.conn.ResultCallback;
|
||||||
import org.bdware.sc.db.KeyValueDBUtil;
|
import org.bdware.sc.db.KeyValueDBUtil;
|
||||||
import org.bdware.sc.db.MultiIndexTimeDBUtilIntf;
|
import org.bdware.sc.db.MultiIndexTimeDBUtilIntf;
|
||||||
import org.bdware.sc.util.JsonUtil;
|
|
||||||
import org.bdware.server.NodeCenterServer;
|
import org.bdware.server.NodeCenterServer;
|
||||||
import org.bdware.server.action.Action;
|
import org.bdware.server.action.Action;
|
||||||
|
|
||||||
@ -33,10 +32,7 @@ public class LogActions {
|
|||||||
resultCallback.onResult(jsonResult);
|
resultCallback.onResult(jsonResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void queryInternal(
|
private void queryInternal(String actResp, MultiIndexTimeDBUtilIntf db, JsonObject json,
|
||||||
String actResp,
|
|
||||||
MultiIndexTimeDBUtilIntf db,
|
|
||||||
JsonObject json,
|
|
||||||
ResultCallback resultCallback) {
|
ResultCallback resultCallback) {
|
||||||
long start = System.currentTimeMillis();
|
long start = System.currentTimeMillis();
|
||||||
if (!json.has("start")) {
|
if (!json.has("start")) {
|
||||||
@ -48,26 +44,25 @@ public class LogActions {
|
|||||||
if (json.has("end")) {
|
if (json.has("end")) {
|
||||||
endTime = json.get("end").getAsLong();
|
endTime = json.get("end").getAsLong();
|
||||||
}
|
}
|
||||||
String[] category = new String[]{null};
|
String[] category = new String[] {null};
|
||||||
if (json.has("category")) {
|
if (json.has("category")) {
|
||||||
category = json.get("category").getAsString().split(",");
|
category = json.get("category").getAsString().split(",");
|
||||||
}
|
}
|
||||||
Map<String, Object> data = new HashMap<>();
|
Map<String, Object> data = new HashMap<>();
|
||||||
for (String str : category) {
|
for (String str : category) {
|
||||||
List<JsonObject> array = db.queryByDateAsJson(str, startTime, endTime);
|
List<JsonObject> array = db.queryByDateAsJson(str, startTime, endTime);
|
||||||
if (str == null) data.put("primary", array);
|
if (str == null)
|
||||||
else data.put(str, array);
|
data.put("primary", array);
|
||||||
|
else
|
||||||
|
data.put(str, array);
|
||||||
}
|
}
|
||||||
simpleReply(resultCallback, actResp, data);
|
simpleReply(resultCallback, actResp, data);
|
||||||
long end = System.currentTimeMillis();
|
long end = System.currentTimeMillis();
|
||||||
LOGGER.debug("[queryInternal:time]" + (end - start));
|
LOGGER.debug("[queryInternal:time]" + (end - start));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void countLogByCategoryInternal(
|
private void countLogByCategoryInternal(String actResp, MultiIndexTimeDBUtilIntf db,
|
||||||
String actResp,
|
JsonObject json, ResultCallback resultCallback) {
|
||||||
MultiIndexTimeDBUtilIntf db,
|
|
||||||
JsonObject json,
|
|
||||||
ResultCallback resultCallback) {
|
|
||||||
if (!json.has("start")) {
|
if (!json.has("start")) {
|
||||||
simpleReply(resultCallback, actResp, new ArrayList<>());
|
simpleReply(resultCallback, actResp, new ArrayList<>());
|
||||||
return;
|
return;
|
||||||
@ -78,15 +73,17 @@ public class LogActions {
|
|||||||
endTime = json.get("end").getAsLong();
|
endTime = json.get("end").getAsLong();
|
||||||
}
|
}
|
||||||
long interval = json.get("interval").getAsLong();
|
long interval = json.get("interval").getAsLong();
|
||||||
String[] category = new String[]{null};
|
String[] category = new String[] {null};
|
||||||
if (json.has("category")) {
|
if (json.has("category")) {
|
||||||
category = json.get("category").getAsString().split(",");
|
category = json.get("category").getAsString().split(",");
|
||||||
}
|
}
|
||||||
JsonObject data = new JsonObject();
|
JsonObject data = new JsonObject();
|
||||||
for (String str : category) {
|
for (String str : category) {
|
||||||
JsonArray array = db.countInInterval(str, startTime, interval, endTime);
|
JsonArray array = db.countInInterval(str, startTime, interval, endTime);
|
||||||
if (str == null) data.add("primary", array);
|
if (str == null)
|
||||||
else data.add(str, array);
|
data.add("primary", array);
|
||||||
|
else
|
||||||
|
data.add(str, array);
|
||||||
}
|
}
|
||||||
simpleReply(resultCallback, actResp, data);
|
simpleReply(resultCallback, actResp, data);
|
||||||
}
|
}
|
||||||
@ -98,8 +95,8 @@ public class LogActions {
|
|||||||
|
|
||||||
@Action(userPermission = 1 << 8, async = true)
|
@Action(userPermission = 1 << 8, async = true)
|
||||||
public void countActionLogByCategory(JsonObject json, ResultCallback resultCallback) {
|
public void countActionLogByCategory(JsonObject json, ResultCallback resultCallback) {
|
||||||
countLogByCategoryInternal(
|
countLogByCategoryInternal("onCountActionLogByCategory", NodeCenterServer.nodeHttpLogDB,
|
||||||
"onCountActionLogByCategory", NodeCenterServer.nodeHttpLogDB, json, resultCallback);
|
json, resultCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Action(userPermission = 1 << 8, async = true)
|
@Action(userPermission = 1 << 8, async = true)
|
||||||
@ -109,8 +106,8 @@ public class LogActions {
|
|||||||
|
|
||||||
@Action(userPermission = 1 << 8, async = true)
|
@Action(userPermission = 1 << 8, async = true)
|
||||||
public void countCMLogByCategory(JsonObject json, ResultCallback resultCallback) {
|
public void countCMLogByCategory(JsonObject json, ResultCallback resultCallback) {
|
||||||
countLogByCategoryInternal(
|
countLogByCategoryInternal("onCountCMLogByCategory", NodeCenterServer.nodeTcpLogDB, json,
|
||||||
"onCountCMLogByCategory", NodeCenterServer.nodeTcpLogDB, json, resultCallback);
|
resultCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Action(userPermission = 1 << 9)
|
@Action(userPermission = 1 << 9)
|
||||||
@ -138,8 +135,7 @@ public class LogActions {
|
|||||||
List<CMNode> onlineNodes = new ArrayList<>();
|
List<CMNode> onlineNodes = new ArrayList<>();
|
||||||
|
|
||||||
Map<String, Object> ret = new HashMap<>();
|
Map<String, Object> ret = new HashMap<>();
|
||||||
if (KeyValueDBUtil.instance
|
if (KeyValueDBUtil.instance.getValue(NCTables.ConfigDB.toString(), "__CenterManager__")
|
||||||
.getValue(NCTables.ConfigDB.toString(), "__CenterManager__")
|
|
||||||
.contains(pubKey)) {
|
.contains(pubKey)) {
|
||||||
LOGGER.debug("is center manager");
|
LOGGER.debug("is center manager");
|
||||||
LOGGER.debug("dbnodes " + dbnodes.toString());
|
LOGGER.debug("dbnodes " + dbnodes.toString());
|
||||||
|
@ -11,25 +11,25 @@ import java.util.concurrent.TimeUnit;
|
|||||||
|
|
||||||
public class MasterActions {
|
public class MasterActions {
|
||||||
private static final Logger LOGGER = LogManager.getLogger(MasterActions.class);
|
private static final Logger LOGGER = LogManager.getLogger(MasterActions.class);
|
||||||
// TODO 定期清缓存
|
// TODO 定期清缓存
|
||||||
public static Map<String, RequestCache> requestCache =
|
public static Map<String, RequestCache> requestCache = new ConcurrentHashMap<>(); // key is
|
||||||
new ConcurrentHashMap<>(); // key is contractID,only for requestAll type contract
|
// contractID,only
|
||||||
|
// for
|
||||||
|
// requestAll
|
||||||
|
// type
|
||||||
|
// contract
|
||||||
|
|
||||||
static {
|
static {
|
||||||
NodeCenterServer.scheduledThreadPool.scheduleWithFixedDelay(
|
NodeCenterServer.scheduledThreadPool.scheduleWithFixedDelay(() -> {
|
||||||
() -> {
|
boolean flag = clearCache();
|
||||||
boolean flag = clearCache();
|
if (flag) {
|
||||||
if (flag) {
|
try {
|
||||||
try {
|
Thread.sleep(10000L);
|
||||||
Thread.sleep(10000L);
|
} catch (InterruptedException e) {
|
||||||
} catch (InterruptedException e) {
|
LOGGER.error("sleeping is interrupted! " + e.getMessage());
|
||||||
LOGGER.error("sleeping is interrupted! " + e.getMessage());
|
}
|
||||||
}
|
}
|
||||||
}
|
}, 0, 0, TimeUnit.SECONDS);
|
||||||
},
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
TimeUnit.SECONDS);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public NodeCenterFrameHandler controller;
|
public NodeCenterFrameHandler controller;
|
||||||
@ -39,213 +39,184 @@ public class MasterActions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// judge the just online node whwther need to restart contracts,send the contracts'info
|
// judge the just online node whwther need to restart contracts,send the contracts'info
|
||||||
/* public static void restartContracts(String nodePubKey){
|
/*
|
||||||
if(!NodeCenterActions.recoverMap.containsKey(nodePubKey)){
|
* public static void restartContracts(String nodePubKey){
|
||||||
return;
|
* if(!NodeCenterActions.recoverMap.containsKey(nodePubKey)){ return; }
|
||||||
}
|
*
|
||||||
|
* System.out.println("开始恢复节点" + NodeCenterActions.nodeinfos.get(nodePubKey).nodeName);
|
||||||
System.out.println("开始恢复节点" + NodeCenterActions.nodeinfos.get(nodePubKey).nodeName);
|
*
|
||||||
|
*
|
||||||
|
* // 恢复该节点的每一个集群运行的合约 for (ContractRecord record :
|
||||||
// 恢复该节点的每一个集群运行的合约
|
* NodeCenterActions.recoverMap.get(nodePubKey).values()) { String contractID =
|
||||||
for (ContractRecord record : NodeCenterActions.recoverMap.get(nodePubKey).values()) {
|
* record.contractID; if (record.recoverFlag != RecoverFlag.ToRecover) continue;
|
||||||
String contractID = record.contractID;
|
*
|
||||||
if (record.recoverFlag != RecoverFlag.ToRecover)
|
* Map<String, String> req = new HashMap<String, String>(); req.put("action",
|
||||||
continue;
|
* "queryUnitStatus"); req.put("contractID", contractID); CMNode cmNode =
|
||||||
|
* NodeCenterActions.nodeinfos.get(nodePubKey);
|
||||||
Map<String, String> req = new HashMap<String, String>();
|
* cmNode.connection.controller.sendMsg(gson.toJson(req)); } }
|
||||||
req.put("action", "queryUnitStatus");
|
*/
|
||||||
req.put("contractID", contractID);
|
|
||||||
CMNode cmNode = NodeCenterActions.nodeinfos.get(nodePubKey);
|
|
||||||
cmNode.connection.controller.sendMsg(gson.toJson(req));
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
/* @Action(async = true)
|
|
||||||
public void onQueryUnitStatus(Map<String, String> args, final ResultCallback rc) {
|
|
||||||
String mode = args.get("mode");
|
|
||||||
String nodeID = args.get("nodeID");
|
|
||||||
String contractID = args.get("contractID");
|
|
||||||
ContractRecord record = NodeCenterActions.recoverMap.get(nodeID).get(contractID);
|
|
||||||
logger.debug("节点" + NodeCenterActions.nodeinfos.get(args.get("nodeID")).nodeName + "崩溃前模式为" + mode);
|
|
||||||
if(mode.equals(ContractUnitStatus.CommonMode.toString())){
|
|
||||||
restartFromCommonMode(nodeID,record);
|
|
||||||
}else if(mode.equals(ContractUnitStatus.StableMode.toString())){
|
|
||||||
restartFromStableMode(nodeID,record);
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
// 当StableMode的节点的lastExeSeq和集群相差超过10时,通过CommonNode的恢复方式恢复
|
|
||||||
/* @Action(async = true)
|
|
||||||
public void restartByCommonNode(Map<String, String> args, final ResultCallback rc){
|
|
||||||
String nodeID = args.get("nodeID");
|
|
||||||
String contractID = args.get("contractID");
|
|
||||||
ContractRecord record = NodeCenterActions.recoverMap.get(nodeID).get(contractID);
|
|
||||||
restartFromCommonMode(nodeID,record);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
public static void restartFromCommonMode(String nodePubKey,ContractRecord record){
|
* @Action(async = true) public void onQueryUnitStatus(Map<String, String> args, final
|
||||||
logger.debug("从CommonMode中恢复:");
|
* ResultCallback rc) { String mode = args.get("mode"); String nodeID = args.get("nodeID");
|
||||||
|
* String contractID = args.get("contractID"); ContractRecord record =
|
||||||
|
* NodeCenterActions.recoverMap.get(nodeID).get(contractID); logger.debug("节点" +
|
||||||
|
* NodeCenterActions.nodeinfos.get(args.get("nodeID")).nodeName + "崩溃前模式为" + mode);
|
||||||
|
* if(mode.equals(ContractUnitStatus.CommonMode.toString())){
|
||||||
|
* restartFromCommonMode(nodeID,record); }else
|
||||||
|
* if(mode.equals(ContractUnitStatus.StableMode.toString())){
|
||||||
|
* restartFromStableMode(nodeID,record); } }
|
||||||
|
*/
|
||||||
|
|
||||||
String contractID = record.contractID;
|
// 当StableMode的节点的lastExeSeq和集群相差超过10时,通过CommonNode的恢复方式恢复
|
||||||
|
/*
|
||||||
|
* @Action(async = true) public void restartByCommonNode(Map<String, String> args, final
|
||||||
|
* ResultCallback rc){ String nodeID = args.get("nodeID"); String contractID =
|
||||||
|
* args.get("contractID"); ContractRecord record =
|
||||||
|
* NodeCenterActions.recoverMap.get(nodeID).get(contractID);
|
||||||
|
* restartFromCommonMode(nodeID,record); }
|
||||||
|
*/
|
||||||
|
|
||||||
record.recoverFlag = RecoverFlag.Recovering;
|
/*
|
||||||
//先发消息,让恢复节点的该合约收到消息后只加入队列不dealRequests
|
* public static void restartFromCommonMode(String nodePubKey,ContractRecord record){
|
||||||
Map<String, String> request = new HashMap<>();
|
* logger.debug("从CommonMode中恢复:");
|
||||||
request.put("action", "setRecovering");
|
*
|
||||||
request.put("contractID",contractID);
|
* String contractID = record.contractID;
|
||||||
CMNode node = NodeCenterActions.nodeinfos.get(nodePubKey);
|
*
|
||||||
node.connection.controller.sendMsg(gson.toJson(request));
|
* record.recoverFlag = RecoverFlag.Recovering; //先发消息,让恢复节点的该合约收到消息后只加入队列不dealRequests
|
||||||
|
* Map<String, String> request = new HashMap<>(); request.put("action", "setRecovering");
|
||||||
//System.out.println("第一步 : [NodeCeterActions] restartContracts 开始处理合约 contractID=" + contractID);
|
* request.put("contractID",contractID); CMNode node =
|
||||||
|
* NodeCenterActions.nodeinfos.get(nodePubKey);
|
||||||
if (NodeCenterActions.contractID2Members.containsKey(contractID)) {
|
* node.connection.controller.sendMsg(gson.toJson(request));
|
||||||
|
*
|
||||||
// 在nodeinfos中找节点,该节点的pubKey在pubKeys中
|
* //System.out.println("第一步 : [NodeCeterActions] restartContracts 开始处理合约 contractID=" +
|
||||||
MultiPointContractInfo info = NodeCenterActions.contractID2Members.get(contractID);
|
* contractID);
|
||||||
CMNode cmNode = null;
|
*
|
||||||
for (int i = 0; i < info.members.size(); i++) {
|
* if (NodeCenterActions.contractID2Members.containsKey(contractID)) {
|
||||||
int size = info.members.size();
|
*
|
||||||
String tempNodeID = info.members.get(record.order.incrementAndGet() % size);
|
* // 在nodeinfos中找节点,该节点的pubKey在pubKeys中 MultiPointContractInfo info =
|
||||||
|
* NodeCenterActions.contractID2Members.get(contractID); CMNode cmNode = null; for (int i = 0; i
|
||||||
if(NodeCenterActions.nodeinfos.containsKey(tempNodeID))
|
* < info.members.size(); i++) { int size = info.members.size(); String tempNodeID =
|
||||||
cmNode = NodeCenterActions.nodeinfos.get(tempNodeID);
|
* info.members.get(record.order.incrementAndGet() % size);
|
||||||
else continue;
|
*
|
||||||
|
* if(NodeCenterActions.nodeinfos.containsKey(tempNodeID)) cmNode =
|
||||||
//System.out.println("查询节点 " + cmNode.nodeName);
|
* NodeCenterActions.nodeinfos.get(tempNodeID); else continue;
|
||||||
|
*
|
||||||
if (cmNode != null && !cmNode.pubKey.equals(nodePubKey)) {
|
* //System.out.println("查询节点 " + cmNode.nodeName);
|
||||||
//System.out.println("第二步 : [NodeCenterActions] 找到一个依赖恢复节点,其节点名为 " + cmNode.nodeName);
|
*
|
||||||
|
* if (cmNode != null && !cmNode.pubKey.equals(nodePubKey)) {
|
||||||
Map<String, String> req = new HashMap<String, String>();
|
* //System.out.println("第二步 : [NodeCenterActions] 找到一个依赖恢复节点,其节点名为 " + cmNode.nodeName);
|
||||||
req.put("action", "dumpCurrentState");
|
*
|
||||||
req.put("contractID", contractID);
|
* Map<String, String> req = new HashMap<String, String>(); req.put("action",
|
||||||
req.put("targetNodePubkey", nodePubKey);
|
* "dumpCurrentState"); req.put("contractID", contractID); req.put("targetNodePubkey",
|
||||||
|
* nodePubKey);
|
||||||
// NC向该节点发送请求,让其存储自身当前状态并发给NC
|
*
|
||||||
cmNode.connection.controller.sendMsg(gson.toJson(req));
|
* // NC向该节点发送请求,让其存储自身当前状态并发给NC cmNode.connection.controller.sendMsg(gson.toJson(req));
|
||||||
|
*
|
||||||
return;
|
* return; } }
|
||||||
}
|
*
|
||||||
}
|
* if(cmNode == null){ logger.debug("[NodeCenterActions] Can't find a recover rely node!"); } }
|
||||||
|
* }
|
||||||
if(cmNode == null){
|
*/
|
||||||
logger.debug("[NodeCenterActions] Can't find a recover rely node!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
/* public static void restartFromStableMode(String nodePubkey,ContractRecord record){
|
/*
|
||||||
logger.debug("从StableMode中恢复:");
|
* public static void restartFromStableMode(String nodePubkey,ContractRecord record){
|
||||||
|
* logger.debug("从StableMode中恢复:");
|
||||||
|
*
|
||||||
|
* String contractID = record.contractID; record.recoverFlag = RecoverFlag.Recovering;
|
||||||
|
* //先发消息,让恢复节点的该合约收到消息后只加入队列不dealRequests Map<String, String> request = new HashMap<>();
|
||||||
|
* request.put("action", "setRecovering"); request.put("contractID",contractID);
|
||||||
|
* request.put("mode", ContractUnitStatus.StableMode.toString()); int lastExeSeq =
|
||||||
|
* NodeCenterActions.contractID2Members.get(contractID).ai.get() - 1;
|
||||||
|
* request.put("lastExeSeq",lastExeSeq + ""); CMNode node =
|
||||||
|
* NodeCenterActions.nodeinfos.get(nodePubkey);
|
||||||
|
* node.connection.controller.sendMsg(gson.toJson(request)); }
|
||||||
|
*/
|
||||||
|
|
||||||
String contractID = record.contractID;
|
/*
|
||||||
record.recoverFlag = RecoverFlag.Recovering;
|
* public static void unitModeCheck(String contractID){ MultiPointContractInfo mpci =
|
||||||
//先发消息,让恢复节点的该合约收到消息后只加入队列不dealRequests
|
* NodeCenterActions.contractID2Members.get(contractID); int total = 0,online = 0; for(String
|
||||||
Map<String, String> request = new HashMap<>();
|
* nodeId : mpci.members){ if(NodeCenterActions.nodeinfos.containsKey(nodeId)){ online++; }
|
||||||
request.put("action", "setRecovering");
|
* total++; }
|
||||||
request.put("contractID",contractID);
|
*
|
||||||
request.put("mode", ContractUnitStatus.StableMode.toString());
|
* logger.debug("合约" + contractID + "的集群,上线节点有" + online + "个,总共节点有" + total +
|
||||||
int lastExeSeq = NodeCenterActions.contractID2Members.get(contractID).ai.get() - 1;
|
* "个. Math.ceil(total / 2)=" + Math.ceil((double)total / 2) +
|
||||||
request.put("lastExeSeq",lastExeSeq + "");
|
* " online > Math.ceil(total / 2)" + (online > Math.ceil(total / 2)) + " mpci.unitStatus=" +
|
||||||
CMNode node = NodeCenterActions.nodeinfos.get(nodePubkey);
|
* mpci.unitStatus); if(online > Math.ceil((double)total / 2) && mpci.unitStatus ==
|
||||||
node.connection.controller.sendMsg(gson.toJson(request));
|
* ContractUnitStatus.StableMode){ logger.debug("合约" + contractID + "的集群更改模式为" +
|
||||||
}*/
|
* ContractUnitStatus.CommonMode.toString());
|
||||||
|
*
|
||||||
|
* Map<String, String> req = new HashMap<String, String>(); req.put("action",
|
||||||
|
* "changeUnitStatus"); req.put("contractID", contractID);
|
||||||
|
* req.put("mode",ContractUnitStatus.CommonMode.toString()); for(String nodeId : mpci.members){
|
||||||
|
* if(NodeCenterActions.nodeinfos.containsKey(nodeId)){ CMNode cmNode =
|
||||||
|
* NodeCenterActions.nodeinfos.get(nodeId); logger.debug("发消息给节点 " + cmNode.nodeName + " 设置合约" +
|
||||||
|
* contractID + "的集群模式为CommonMode"); cmNode.connection.controller.sendMsg(gson.toJson(req)); } }
|
||||||
|
*
|
||||||
|
* mpci.unitStatus = ContractUnitStatus.CommonMode; }else if(online <= Math.ceil((double)total /
|
||||||
|
* 2) && mpci.unitStatus == ContractUnitStatus.CommonMode){ logger.debug("合约" + contractID +
|
||||||
|
* "的集群更改模式为" + ContractUnitStatus.StableMode.toString());
|
||||||
|
*
|
||||||
|
* Map<String, String> req = new HashMap<String, String>(); req.put("action",
|
||||||
|
* "changeUnitStatus"); req.put("contractID", contractID);
|
||||||
|
* req.put("mode",ContractUnitStatus.StableMode.toString()); for(String nodeId : mpci.members){
|
||||||
|
* if(NodeCenterActions.nodeinfos.containsKey(nodeId)){ CMNode cmNode =
|
||||||
|
* NodeCenterActions.nodeinfos.get(nodeId); Map<String,String> map =
|
||||||
|
* NodeCenterActions.recoverMap.get(nodeId).get(contractID).members;
|
||||||
|
* req.put("membersStr",JsonUtil.toJson(map)); //ContractRecord's members logger.debug("发消息给节点 "
|
||||||
|
* + cmNode.nodeName + " 设置合约" + contractID + "的集群模式为StableMode");
|
||||||
|
* cmNode.connection.controller.sendMsg(gson.toJson(req)); } }
|
||||||
|
*
|
||||||
|
* mpci.unitStatus = ContractUnitStatus.StableMode;
|
||||||
|
*
|
||||||
|
* //将ContractRecord中members发给集群中节点
|
||||||
|
*
|
||||||
|
* } }
|
||||||
|
*/
|
||||||
|
|
||||||
/* public static void unitModeCheck(String contractID){
|
/*
|
||||||
MultiPointContractInfo mpci = NodeCenterActions.contractID2Members.get(contractID);
|
* @Action(async = true) public void recoverFinish(Map<String, String> args, final
|
||||||
int total = 0,online = 0;
|
* ResultCallback rc) { ContractRecord cr =
|
||||||
for(String nodeId : mpci.members){
|
* NodeCenterActions.recoverMap.get(args.get("nodeID")).get(args.get("contractID"));
|
||||||
if(NodeCenterActions.nodeinfos.containsKey(nodeId)){
|
* logger.debug("节点" + NodeCenterActions.nodeinfos.get(args.get("nodeID")).nodeName + "恢复完成!");
|
||||||
online++;
|
* if(cr.recoverFlag == RecoverFlag.Recovering) cr.recoverFlag = RecoverFlag.Fine;
|
||||||
}
|
*
|
||||||
total++;
|
* logger.debug("恢复完成,需要检查合约" + args.get("contractID") + "的集群运行模式");
|
||||||
}
|
* unitModeCheck(args.get("contractID")); }
|
||||||
|
*/
|
||||||
logger.debug("合约" + contractID + "的集群,上线节点有" + online + "个,总共节点有" + total + "个. Math.ceil(total / 2)=" + Math.ceil((double)total / 2) + " online > Math.ceil(total / 2)" + (online > Math.ceil(total / 2)) + " mpci.unitStatus=" + mpci.unitStatus);
|
|
||||||
if(online > Math.ceil((double)total / 2) && mpci.unitStatus == ContractUnitStatus.StableMode){
|
|
||||||
logger.debug("合约" + contractID + "的集群更改模式为" + ContractUnitStatus.CommonMode.toString());
|
|
||||||
|
|
||||||
Map<String, String> req = new HashMap<String, String>();
|
|
||||||
req.put("action", "changeUnitStatus");
|
|
||||||
req.put("contractID", contractID);
|
|
||||||
req.put("mode",ContractUnitStatus.CommonMode.toString());
|
|
||||||
for(String nodeId : mpci.members){
|
|
||||||
if(NodeCenterActions.nodeinfos.containsKey(nodeId)){
|
|
||||||
CMNode cmNode = NodeCenterActions.nodeinfos.get(nodeId);
|
|
||||||
logger.debug("发消息给节点 " + cmNode.nodeName + " 设置合约" + contractID + "的集群模式为CommonMode");
|
|
||||||
cmNode.connection.controller.sendMsg(gson.toJson(req));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mpci.unitStatus = ContractUnitStatus.CommonMode;
|
|
||||||
}else if(online <= Math.ceil((double)total / 2) && mpci.unitStatus == ContractUnitStatus.CommonMode){
|
|
||||||
logger.debug("合约" + contractID + "的集群更改模式为" + ContractUnitStatus.StableMode.toString());
|
|
||||||
|
|
||||||
Map<String, String> req = new HashMap<String, String>();
|
|
||||||
req.put("action", "changeUnitStatus");
|
|
||||||
req.put("contractID", contractID);
|
|
||||||
req.put("mode",ContractUnitStatus.StableMode.toString());
|
|
||||||
for(String nodeId : mpci.members){
|
|
||||||
if(NodeCenterActions.nodeinfos.containsKey(nodeId)){
|
|
||||||
CMNode cmNode = NodeCenterActions.nodeinfos.get(nodeId);
|
|
||||||
Map<String,String> map = NodeCenterActions.recoverMap.get(nodeId).get(contractID).members;
|
|
||||||
req.put("membersStr",JsonUtil.toJson(map)); //ContractRecord's members
|
|
||||||
logger.debug("发消息给节点 " + cmNode.nodeName + " 设置合约" + contractID + "的集群模式为StableMode");
|
|
||||||
cmNode.connection.controller.sendMsg(gson.toJson(req));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mpci.unitStatus = ContractUnitStatus.StableMode;
|
|
||||||
|
|
||||||
//将ContractRecord中members发给集群中节点
|
|
||||||
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
/* @Action(async = true)
|
|
||||||
public void recoverFinish(Map<String, String> args, final ResultCallback rc) {
|
|
||||||
ContractRecord cr = NodeCenterActions.recoverMap.get(args.get("nodeID")).get(args.get("contractID"));
|
|
||||||
logger.debug("节点" + NodeCenterActions.nodeinfos.get(args.get("nodeID")).nodeName + "恢复完成!");
|
|
||||||
if(cr.recoverFlag == RecoverFlag.Recovering)
|
|
||||||
cr.recoverFlag = RecoverFlag.Fine;
|
|
||||||
|
|
||||||
logger.debug("恢复完成,需要检查合约" + args.get("contractID") + "的集群运行模式");
|
|
||||||
unitModeCheck(args.get("contractID"));
|
|
||||||
}*/
|
|
||||||
|
|
||||||
static boolean clearCache() {
|
static boolean clearCache() {
|
||||||
if (requestCache.isEmpty()) return true;
|
if (requestCache.isEmpty())
|
||||||
|
return true;
|
||||||
|
|
||||||
// final long time = System.currentTimeMillis() - 60000L; //60s
|
// final long time = System.currentTimeMillis() - 60000L; //60s
|
||||||
// requestCache.entrySet()
|
// requestCache.entrySet()
|
||||||
// .removeIf(
|
// .removeIf(
|
||||||
// entry -> {
|
// entry -> {
|
||||||
// RequestCache cache = entry.getValue();
|
// RequestCache cache = entry.getValue();
|
||||||
// if (cache == null) return true;
|
// if (cache == null) return true;
|
||||||
// return cache.getTime() < time;
|
// return cache.getTime() < time;
|
||||||
// });
|
// });
|
||||||
//
|
//
|
||||||
// return false;
|
// return false;
|
||||||
|
|
||||||
// 对每个合约,只保存最近RESERVED个请求
|
// 对每个合约,只保存最近RESERVED个请求
|
||||||
// for(RequestCache rc : requestCache.values()){
|
// for(RequestCache rc : requestCache.values()){
|
||||||
// int delete = rc.size() - RequestCache.RESERVED,count = 0;
|
// int delete = rc.size() - RequestCache.RESERVED,count = 0;
|
||||||
// if(delete > 0){
|
// if(delete > 0){
|
||||||
// synchronized (rc){
|
// synchronized (rc){
|
||||||
// for(Iterator<Integer> iterator = rc.requests.keySet().iterator();
|
// for(Iterator<Integer> iterator = rc.requests.keySet().iterator();
|
||||||
// iterator.hasNext(); ) {
|
// iterator.hasNext(); ) {
|
||||||
// Integer key = iterator.next();
|
// Integer key = iterator.next();
|
||||||
// if(count < delete){
|
// if(count < delete){
|
||||||
// iterator.remove();
|
// iterator.remove();
|
||||||
// count++;
|
// count++;
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -253,7 +224,8 @@ public class MasterActions {
|
|||||||
static RequestCache getCache(String contractID) {
|
static RequestCache getCache(String contractID) {
|
||||||
if (contractID != null) {
|
if (contractID != null) {
|
||||||
RequestCache cache = requestCache.get(contractID);
|
RequestCache cache = requestCache.get(contractID);
|
||||||
if (cache != null) return cache;
|
if (cache != null)
|
||||||
|
return cache;
|
||||||
else {
|
else {
|
||||||
LOGGER.debug("[NodeCenterActions] create requestcache:" + contractID);
|
LOGGER.debug("[NodeCenterActions] create requestcache:" + contractID);
|
||||||
RequestCache reqc = new RequestCache();
|
RequestCache reqc = new RequestCache();
|
||||||
@ -264,26 +236,17 @@ public class MasterActions {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* @Action(async = true)
|
/*
|
||||||
public void sendCachedRequests(Map<String, String> args, final ResultCallback rc) {
|
* @Action(async = true) public void sendCachedRequests(Map<String, String> args, final
|
||||||
String contractID = args.get("contractID");
|
* ResultCallback rc) { String contractID = args.get("contractID"); int start =
|
||||||
int start = Integer.parseInt(args.get("start"));
|
* Integer.parseInt(args.get("start")); int end = Integer.parseInt(args.get("end"));
|
||||||
int end = Integer.parseInt(args.get("end"));
|
*
|
||||||
|
* RequestCache cache = getCache(contractID); for(int i = start + 1;i < end;i++){ if(cache ==
|
||||||
RequestCache cache = getCache(contractID);
|
* null || !cache.containsKey(i)){ //this node crash String nodeID = args.get("nodeID");
|
||||||
for(int i = start + 1;i < end;i++){
|
* MasterActions.restartContracts(nodeID); } JsonObject jo = cache.get(i); if(jo == null){
|
||||||
if(cache == null || !cache.containsKey(i)){
|
* logger.debug("在NC中第 " + i + "个请求已经被清,无法发给恢复节点!"); }else
|
||||||
//this node crash
|
* controller.sendMsg(JsonUtil.toJson(jo));
|
||||||
String nodeID = args.get("nodeID");
|
*
|
||||||
MasterActions.restartContracts(nodeID);
|
* logger.debug("NC发送第 " + i + " " + jo.get("seq").getAsString() + " 个请求给Node"); } }
|
||||||
}
|
*/
|
||||||
JsonObject jo = cache.get(i);
|
|
||||||
if(jo == null){
|
|
||||||
logger.debug("在NC中第 " + i + "个请求已经被清,无法发给恢复节点!");
|
|
||||||
}else
|
|
||||||
controller.sendMsg(JsonUtil.toJson(jo));
|
|
||||||
|
|
||||||
logger.debug("NC发送第 " + i + " " + jo.get("seq").getAsString() + " 个请求给Node");
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
@ -49,9 +49,9 @@ public class MetaIndexAction { // public static IndexWriter indexWriter;
|
|||||||
public static Integer page;
|
public static Integer page;
|
||||||
public static boolean isEmpty = false;
|
public static boolean isEmpty = false;
|
||||||
public static NodeCenterFrameHandler controller;
|
public static NodeCenterFrameHandler controller;
|
||||||
// public MetaIndexAction(NodeCenterFrameHandler nodeCenterFrameHandler) {
|
// public MetaIndexAction(NodeCenterFrameHandler nodeCenterFrameHandler) {
|
||||||
// controller = nodeCenterFrameHandler;
|
// controller = nodeCenterFrameHandler;
|
||||||
// }
|
// }
|
||||||
private static IndexWriter indexWriter;
|
private static IndexWriter indexWriter;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
@ -90,7 +90,8 @@ public class MetaIndexAction { // public static IndexWriter indexWriter;
|
|||||||
Query query = new TermQuery(new Term("contractID", thisDesp.contractID));
|
Query query = new TermQuery(new Term("contractID", thisDesp.contractID));
|
||||||
TopDocs docs = indexSearcher.search(query, 10);
|
TopDocs docs = indexSearcher.search(query, 10);
|
||||||
LOGGER.debug(docs.scoreDocs);
|
LOGGER.debug(docs.scoreDocs);
|
||||||
if (null != thisDesp.contractName && (docs.scoreDocs == null || docs.scoreDocs.length == 0)) {
|
if (null != thisDesp.contractName
|
||||||
|
&& (docs.scoreDocs == null || docs.scoreDocs.length == 0)) {
|
||||||
req.addProperty("action", "requestReadMe");
|
req.addProperty("action", "requestReadMe");
|
||||||
req.addProperty("contractID", thisDesp.contractID);
|
req.addProperty("contractID", thisDesp.contractID);
|
||||||
rc.onResult(req);
|
rc.onResult(req);
|
||||||
@ -101,8 +102,8 @@ public class MetaIndexAction { // public static IndexWriter indexWriter;
|
|||||||
LOGGER.warn("getting index failed! " + e.getMessage());
|
LOGGER.warn("getting index failed! " + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// req.addProperty("action", "requestReadMe");
|
// req.addProperty("action", "requestReadMe");
|
||||||
// req.addProperty("contractID", thisDesp.contractID);
|
// req.addProperty("contractID", thisDesp.contractID);
|
||||||
// rc.onResult(req);
|
// rc.onResult(req);
|
||||||
LOGGER.info("contract " + thisDesp.contractName + " --> actually to index");
|
LOGGER.info("contract " + thisDesp.contractName + " --> actually to index");
|
||||||
}
|
}
|
||||||
@ -128,7 +129,8 @@ public class MetaIndexAction { // public static IndexWriter indexWriter;
|
|||||||
|
|
||||||
public static void delIndexbyCID(JsonObject jo) {
|
public static void delIndexbyCID(JsonObject jo) {
|
||||||
try {
|
try {
|
||||||
if (!jo.has("contractID")) return;
|
if (!jo.has("contractID"))
|
||||||
|
return;
|
||||||
String contractID = jo.get("contractID").getAsString();
|
String contractID = jo.get("contractID").getAsString();
|
||||||
LOGGER.info("contractID:" + contractID + "-->actually to delete");
|
LOGGER.info("contractID:" + contractID + "-->actually to delete");
|
||||||
indexWriter.deleteDocuments(new Term("contractID", contractID));
|
indexWriter.deleteDocuments(new Term("contractID", contractID));
|
||||||
@ -140,7 +142,8 @@ public class MetaIndexAction { // public static IndexWriter indexWriter;
|
|||||||
|
|
||||||
public static void delIndexbyOwner(JsonObject jo) {
|
public static void delIndexbyOwner(JsonObject jo) {
|
||||||
try {
|
try {
|
||||||
if (!jo.has("owner")) return;
|
if (!jo.has("owner"))
|
||||||
|
return;
|
||||||
String owner = jo.get("owner").getAsString();
|
String owner = jo.get("owner").getAsString();
|
||||||
LOGGER.info("owner:" + owner + "-->actually to delete");
|
LOGGER.info("owner:" + owner + "-->actually to delete");
|
||||||
indexWriter.deleteDocuments(new Term("owner", owner));
|
indexWriter.deleteDocuments(new Term("owner", owner));
|
||||||
@ -167,18 +170,18 @@ public class MetaIndexAction { // public static IndexWriter indexWriter;
|
|||||||
default:
|
default:
|
||||||
return "no such search type";
|
return "no such search type";
|
||||||
}
|
}
|
||||||
// if (searchReq != null) {
|
// if (searchReq != null) {
|
||||||
// logger.info(searchReq.get("pubkey").getAsString() + "---->start
|
// logger.info(searchReq.get("pubkey").getAsString() + "---->start
|
||||||
// search");
|
// search");
|
||||||
// DirectoryReader indexReader = DirectoryReader.open(indexDir);
|
// DirectoryReader indexReader = DirectoryReader.open(indexDir);
|
||||||
// IndexSearcher indexSearcher = new IndexSearcher(indexReader);
|
// IndexSearcher indexSearcher = new IndexSearcher(indexReader);
|
||||||
// BooleanQuery.Builder queryBuilder = new BooleanQuery.Builder();
|
// BooleanQuery.Builder queryBuilder = new BooleanQuery.Builder();
|
||||||
// reandler(searchReq, queryBuilder);
|
// reandler(searchReq, queryBuilder);
|
||||||
// BooleanQuery searchQuery = queryBuilder.build();
|
// BooleanQuery searchQuery = queryBuilder.build();
|
||||||
// TopDocs docs = indexSearcher.search(searchQuery, 10);
|
// TopDocs docs = indexSearcher.search(searchQuery, 10);
|
||||||
// return docs.scoreDocs.length + "";
|
// return docs.scoreDocs.length + "";
|
||||||
// }
|
// }
|
||||||
// else return "0";
|
// else return "0";
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
ByteArrayOutputStream bo = new ByteArrayOutputStream();
|
ByteArrayOutputStream bo = new ByteArrayOutputStream();
|
||||||
e.printStackTrace(new PrintStream(bo));
|
e.printStackTrace(new PrintStream(bo));
|
||||||
@ -188,12 +191,17 @@ public class MetaIndexAction { // public static IndexWriter indexWriter;
|
|||||||
|
|
||||||
public static String getMetabyReadme(JsonObject jo) {
|
public static String getMetabyReadme(JsonObject jo) {
|
||||||
try {
|
try {
|
||||||
if (!jo.has("keyword")) return "missing arguments: keyword";
|
if (!jo.has("keyword"))
|
||||||
|
return "missing arguments: keyword";
|
||||||
|
|
||||||
if (!jo.has("page")) page = 1;
|
if (!jo.has("page"))
|
||||||
else page = jo.get("page").getAsInt();
|
page = 1;
|
||||||
if (page <= 0) page = 1;
|
else
|
||||||
if (jo.has("pageSize")) PAGE_SIZE = jo.get("pageSize").getAsInt();
|
page = jo.get("page").getAsInt();
|
||||||
|
if (page <= 0)
|
||||||
|
page = 1;
|
||||||
|
if (jo.has("pageSize"))
|
||||||
|
PAGE_SIZE = jo.get("pageSize").getAsInt();
|
||||||
String keyword = jo.get("keyword").getAsString();
|
String keyword = jo.get("keyword").getAsString();
|
||||||
// Analyzer analyzer = new StandardAnalyzer();
|
// Analyzer analyzer = new StandardAnalyzer();
|
||||||
Analyzer analyzer = new IKAnalyzer();
|
Analyzer analyzer = new IKAnalyzer();
|
||||||
@ -203,17 +211,17 @@ public class MetaIndexAction { // public static IndexWriter indexWriter;
|
|||||||
DirectoryReader indexReader = DirectoryReader.open(indexDir);
|
DirectoryReader indexReader = DirectoryReader.open(indexDir);
|
||||||
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
|
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
|
||||||
TopDocs docs = indexSearcher.search(rmQuery, 1000);
|
TopDocs docs = indexSearcher.search(rmQuery, 1000);
|
||||||
// Document document = null ;
|
// Document document = null ;
|
||||||
// if (docs.scoreDocs!=null&& docs.scoreDocs.length>0) {
|
// if (docs.scoreDocs!=null&& docs.scoreDocs.length>0) {
|
||||||
// document = indexSearcher.doc(docs.scoreDocs[0].doc);
|
// document = indexSearcher.doc(docs.scoreDocs[0].doc);
|
||||||
// ContractMeta contractMeta = new ContractMeta();
|
// ContractMeta contractMeta = new ContractMeta();
|
||||||
// contractMeta.setContractID(document.get("contractID"));
|
// contractMeta.setContractID(document.get("contractID"));
|
||||||
// contractMeta.setOwner(document.get("owner"));
|
// contractMeta.setOwner(document.get("owner"));
|
||||||
// contractMeta.setPubkey(document.get("pubkey"));
|
// contractMeta.setPubkey(document.get("pubkey"));
|
||||||
// contractMeta.setReadmeStr(document.get("readmeStr"));
|
// contractMeta.setReadmeStr(document.get("readmeStr"));
|
||||||
// String rs = JsonUtil.toJson(contractMeta);
|
// String rs = JsonUtil.toJson(contractMeta);
|
||||||
// return rs;
|
// return rs;
|
||||||
// }
|
// }
|
||||||
ResultModel resultModel = null;
|
ResultModel resultModel = null;
|
||||||
if (docs.scoreDocs != null && docs.scoreDocs.length > 0)
|
if (docs.scoreDocs != null && docs.scoreDocs.length > 0)
|
||||||
resultModel = paginate(docs, indexReader);
|
resultModel = paginate(docs, indexReader);
|
||||||
@ -231,28 +239,32 @@ public class MetaIndexAction { // public static IndexWriter indexWriter;
|
|||||||
|
|
||||||
private static String getMetabyPubkey(JsonObject jo) {
|
private static String getMetabyPubkey(JsonObject jo) {
|
||||||
try {
|
try {
|
||||||
if (!jo.has("pubkey")) return "missing arguments: pubkey";
|
if (!jo.has("pubkey"))
|
||||||
|
return "missing arguments: pubkey";
|
||||||
|
|
||||||
if (!jo.has("page")) page = 1;
|
if (!jo.has("page"))
|
||||||
else page = jo.get("page").getAsInt();
|
page = 1;
|
||||||
if (page <= 0) page = 1;
|
else
|
||||||
|
page = jo.get("page").getAsInt();
|
||||||
|
if (page <= 0)
|
||||||
|
page = 1;
|
||||||
|
|
||||||
String pubkey = jo.get("pubkey").getAsString();
|
String pubkey = jo.get("pubkey").getAsString();
|
||||||
DirectoryReader indexReader = DirectoryReader.open(indexDir);
|
DirectoryReader indexReader = DirectoryReader.open(indexDir);
|
||||||
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
|
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
|
||||||
Query query = new TermQuery(new Term("pubkey", pubkey));
|
Query query = new TermQuery(new Term("pubkey", pubkey));
|
||||||
TopDocs docs = indexSearcher.search(query, 10);
|
TopDocs docs = indexSearcher.search(query, 10);
|
||||||
// Document document = null;
|
// Document document = null;
|
||||||
// if (docs.scoreDocs!=null&& docs.scoreDocs.length>0) {
|
// if (docs.scoreDocs!=null&& docs.scoreDocs.length>0) {
|
||||||
// document = indexSearcher.doc(docs.scoreDocs[0].doc);
|
// document = indexSearcher.doc(docs.scoreDocs[0].doc);
|
||||||
// ContractMeta contractMeta = new ContractMeta();
|
// ContractMeta contractMeta = new ContractMeta();
|
||||||
// contractMeta.setContractID(document.get("contractID"));
|
// contractMeta.setContractID(document.get("contractID"));
|
||||||
// contractMeta.setOwner(document.get("owner"));
|
// contractMeta.setOwner(document.get("owner"));
|
||||||
// contractMeta.setPubkey(document.get("pubkey"));
|
// contractMeta.setPubkey(document.get("pubkey"));
|
||||||
// contractMeta.setReadmeStr(document.get("readmeStr"));
|
// contractMeta.setReadmeStr(document.get("readmeStr"));
|
||||||
// String rs = JsonUtil.toJson(contractMeta);
|
// String rs = JsonUtil.toJson(contractMeta);
|
||||||
// return rs;
|
// return rs;
|
||||||
// }
|
// }
|
||||||
ResultModel resultModel = null;
|
ResultModel resultModel = null;
|
||||||
if (docs.scoreDocs != null && docs.scoreDocs.length > 0)
|
if (docs.scoreDocs != null && docs.scoreDocs.length > 0)
|
||||||
resultModel = paginate(docs, indexReader);
|
resultModel = paginate(docs, indexReader);
|
||||||
@ -271,28 +283,32 @@ public class MetaIndexAction { // public static IndexWriter indexWriter;
|
|||||||
private static String getMetabyCID(JsonObject jo) {
|
private static String getMetabyCID(JsonObject jo) {
|
||||||
System.out.println("getMetabyCID" + jo.toString());
|
System.out.println("getMetabyCID" + jo.toString());
|
||||||
try {
|
try {
|
||||||
if (!jo.has("contractID")) return "missing arguments: contractID";
|
if (!jo.has("contractID"))
|
||||||
|
return "missing arguments: contractID";
|
||||||
|
|
||||||
if (!jo.has("page")) page = 1;
|
if (!jo.has("page"))
|
||||||
else page = jo.get("page").getAsInt();
|
page = 1;
|
||||||
if (page <= 0) page = 1;
|
else
|
||||||
|
page = jo.get("page").getAsInt();
|
||||||
|
if (page <= 0)
|
||||||
|
page = 1;
|
||||||
|
|
||||||
String contractID = jo.get("contractID").getAsString();
|
String contractID = jo.get("contractID").getAsString();
|
||||||
DirectoryReader indexReader = DirectoryReader.open(indexDir);
|
DirectoryReader indexReader = DirectoryReader.open(indexDir);
|
||||||
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
|
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
|
||||||
Query query = new TermQuery(new Term("contractID", contractID));
|
Query query = new TermQuery(new Term("contractID", contractID));
|
||||||
TopDocs docs = indexSearcher.search(query, 10);
|
TopDocs docs = indexSearcher.search(query, 10);
|
||||||
// Document document = null;
|
// Document document = null;
|
||||||
// if (docs.scoreDocs!=null&& docs.scoreDocs.length>0) {
|
// if (docs.scoreDocs!=null&& docs.scoreDocs.length>0) {
|
||||||
// document = indexSearcher.doc(docs.scoreDocs[0].doc);
|
// document = indexSearcher.doc(docs.scoreDocs[0].doc);
|
||||||
// ContractMeta contractMeta = new ContractMeta();
|
// ContractMeta contractMeta = new ContractMeta();
|
||||||
// contractMeta.setContractID(document.get("contractID"));
|
// contractMeta.setContractID(document.get("contractID"));
|
||||||
// contractMeta.setOwner(document.get("owner"));
|
// contractMeta.setOwner(document.get("owner"));
|
||||||
// contractMeta.setPubkey(document.get("pubkey"));
|
// contractMeta.setPubkey(document.get("pubkey"));
|
||||||
// contractMeta.setReadmeStr(document.get("readmeStr"));
|
// contractMeta.setReadmeStr(document.get("readmeStr"));
|
||||||
// String rs = JsonUtil.toJson(contractMeta);
|
// String rs = JsonUtil.toJson(contractMeta);
|
||||||
// return rs;
|
// return rs;
|
||||||
// }
|
// }
|
||||||
ResultModel resultModel = null;
|
ResultModel resultModel = null;
|
||||||
if (docs.scoreDocs != null && docs.scoreDocs.length > 0)
|
if (docs.scoreDocs != null && docs.scoreDocs.length > 0)
|
||||||
resultModel = paginate(docs, indexReader);
|
resultModel = paginate(docs, indexReader);
|
||||||
@ -310,28 +326,33 @@ public class MetaIndexAction { // public static IndexWriter indexWriter;
|
|||||||
|
|
||||||
private static String getMetabyOwner(JsonObject jo) {
|
private static String getMetabyOwner(JsonObject jo) {
|
||||||
try {
|
try {
|
||||||
if (!jo.has("owner")) return "missing arguments: owner";
|
if (!jo.has("owner"))
|
||||||
|
return "missing arguments: owner";
|
||||||
|
|
||||||
if (!jo.has("page")) page = 1;
|
if (!jo.has("page"))
|
||||||
else page = jo.get("page").getAsInt();
|
page = 1;
|
||||||
if (page <= 0) page = 1;
|
else
|
||||||
if (jo.has("pageSize")) PAGE_SIZE = jo.get("pageSize").getAsInt();
|
page = jo.get("page").getAsInt();
|
||||||
|
if (page <= 0)
|
||||||
|
page = 1;
|
||||||
|
if (jo.has("pageSize"))
|
||||||
|
PAGE_SIZE = jo.get("pageSize").getAsInt();
|
||||||
String owner = jo.get("owner").getAsString();
|
String owner = jo.get("owner").getAsString();
|
||||||
DirectoryReader indexReader = DirectoryReader.open(indexDir);
|
DirectoryReader indexReader = DirectoryReader.open(indexDir);
|
||||||
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
|
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
|
||||||
Query query = new TermQuery(new Term("owner", owner));
|
Query query = new TermQuery(new Term("owner", owner));
|
||||||
TopDocs docs = indexSearcher.search(query, 1000);
|
TopDocs docs = indexSearcher.search(query, 1000);
|
||||||
// Document document = null;
|
// Document document = null;
|
||||||
// if (docs.scoreDocs!=null&& docs.scoreDocs.length>0) {
|
// if (docs.scoreDocs!=null&& docs.scoreDocs.length>0) {
|
||||||
// document = indexSearcher.doc(docs.scoreDocs[0].doc);
|
// document = indexSearcher.doc(docs.scoreDocs[0].doc);
|
||||||
// ContractMeta contractMeta = new ContractMeta();
|
// ContractMeta contractMeta = new ContractMeta();
|
||||||
// contractMeta.setContractID(document.get("contractID"));
|
// contractMeta.setContractID(document.get("contractID"));
|
||||||
// contractMeta.setOwner(document.get("owner"));
|
// contractMeta.setOwner(document.get("owner"));
|
||||||
// contractMeta.setPubkey(document.get("pubkey"));
|
// contractMeta.setPubkey(document.get("pubkey"));
|
||||||
// contractMeta.setReadmeStr(document.get("readmeStr"));
|
// contractMeta.setReadmeStr(document.get("readmeStr"));
|
||||||
// String rs = JsonUtil.toJson(contractMeta);
|
// String rs = JsonUtil.toJson(contractMeta);
|
||||||
// return rs;
|
// return rs;
|
||||||
// }
|
// }
|
||||||
ResultModel resultModel = null;
|
ResultModel resultModel = null;
|
||||||
if (docs.scoreDocs != null && docs.scoreDocs.length > 0)
|
if (docs.scoreDocs != null && docs.scoreDocs.length > 0)
|
||||||
resultModel = paginate(docs, indexReader);
|
resultModel = paginate(docs, indexReader);
|
||||||
@ -350,18 +371,15 @@ public class MetaIndexAction { // public static IndexWriter indexWriter;
|
|||||||
public static void reqHandler(JsonObject req, BooleanQuery.Builder query)
|
public static void reqHandler(JsonObject req, BooleanQuery.Builder query)
|
||||||
throws ParseException {
|
throws ParseException {
|
||||||
if (req.get("contractID").getAsString() != null) {
|
if (req.get("contractID").getAsString() != null) {
|
||||||
query.add(
|
query.add(new FuzzyQuery(new Term("contractID", req.get("contractID").getAsString())),
|
||||||
new FuzzyQuery(new Term("contractID", req.get("contractID").getAsString())),
|
|
||||||
BooleanClause.Occur.SHOULD);
|
BooleanClause.Occur.SHOULD);
|
||||||
}
|
}
|
||||||
if (req.get("owner").getAsString() != null) {
|
if (req.get("owner").getAsString() != null) {
|
||||||
query.add(
|
query.add(new FuzzyQuery(new Term("owner", req.get("owner").getAsString())),
|
||||||
new FuzzyQuery(new Term("owner", req.get("owner").getAsString())),
|
|
||||||
BooleanClause.Occur.SHOULD);
|
BooleanClause.Occur.SHOULD);
|
||||||
}
|
}
|
||||||
if (req.get("pubkey").getAsString() != null) {
|
if (req.get("pubkey").getAsString() != null) {
|
||||||
query.add(
|
query.add(new PrefixQuery(new Term("pubkey", req.get("pubkey").getAsString())),
|
||||||
new PrefixQuery(new Term("pubkey", req.get("pubkey").getAsString())),
|
|
||||||
BooleanClause.Occur.SHOULD);
|
BooleanClause.Occur.SHOULD);
|
||||||
}
|
}
|
||||||
if (req.get("readmeStr").getAsString() != null) {
|
if (req.get("readmeStr").getAsString() != null) {
|
||||||
@ -400,8 +418,7 @@ public class MetaIndexAction { // public static IndexWriter indexWriter;
|
|||||||
resultModel.setContractMetaList(contractMetaList);
|
resultModel.setContractMetaList(contractMetaList);
|
||||||
resultModel.setCurPage(page);
|
resultModel.setCurPage(page);
|
||||||
Long pageCount =
|
Long pageCount =
|
||||||
docs.totalHits.value % PAGE_SIZE > 0
|
docs.totalHits.value % PAGE_SIZE > 0 ? (docs.totalHits.value) / PAGE_SIZE + 1
|
||||||
? (docs.totalHits.value) / PAGE_SIZE + 1
|
|
||||||
: (docs.totalHits.value) / PAGE_SIZE;
|
: (docs.totalHits.value) / PAGE_SIZE;
|
||||||
resultModel.setPageCount(pageCount);
|
resultModel.setPageCount(pageCount);
|
||||||
return resultModel;
|
return resultModel;
|
||||||
@ -410,23 +427,19 @@ public class MetaIndexAction { // public static IndexWriter indexWriter;
|
|||||||
@Action(async = true, userPermission = 1L)
|
@Action(async = true, userPermission = 1L)
|
||||||
public synchronized void onRequestReadMe(JsonObject json, ResultCallback rc)
|
public synchronized void onRequestReadMe(JsonObject json, ResultCallback rc)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
// try {
|
// try {
|
||||||
// Thread.sleep(2000);
|
// Thread.sleep(2000);
|
||||||
// } catch (InterruptedException e) {
|
// } catch (InterruptedException e) {
|
||||||
// e.printStackTrace();
|
// e.printStackTrace();
|
||||||
// }
|
// }
|
||||||
CMNode node = NodeCenterActions.nodeInfos.get(controller.pubKey);
|
CMNode node = NodeCenterActions.nodeInfos.get(controller.pubKey);
|
||||||
String nodeAddr = getNodeAddr(node.masterAddress);
|
String nodeAddr = getNodeAddr(node.masterAddress);
|
||||||
String name = json.get("name").getAsString();
|
String name = json.get("name").getAsString();
|
||||||
// /DOIP/Hello1/assets/logo.png
|
// /DOIP/Hello1/assets/logo.png
|
||||||
// String nodeAddr="127.0.0.1:21030";
|
// String nodeAddr="127.0.0.1:21030";
|
||||||
String pngUrl = "http://" + nodeAddr + "/DOIP/" + name + "/assets/logo.png";
|
String pngUrl = "http://" + nodeAddr + "/DOIP/" + name + "/assets/logo.png";
|
||||||
System.out.println(
|
System.out.println("node.masterAddress: " + node.masterAddress + "==========" + "nodeAddr: "
|
||||||
"node.masterAddress: "
|
+ nodeAddr);
|
||||||
+ node.masterAddress
|
|
||||||
+ "=========="
|
|
||||||
+ "nodeAddr: "
|
|
||||||
+ nodeAddr);
|
|
||||||
System.out.println("name: " + name + "pngUrl: " + pngUrl);
|
System.out.println("name: " + name + "pngUrl: " + pngUrl);
|
||||||
String contractID = json.get("contractID").getAsString();
|
String contractID = json.get("contractID").getAsString();
|
||||||
String status = json.get("status").getAsString();
|
String status = json.get("status").getAsString();
|
||||||
@ -465,7 +478,8 @@ public class MetaIndexAction { // public static IndexWriter indexWriter;
|
|||||||
public void getMetabyReadme(JsonObject json, ResultCallback rc) {
|
public void getMetabyReadme(JsonObject json, ResultCallback rc) {
|
||||||
String result = getMetabyReadme(json);
|
String result = getMetabyReadme(json);
|
||||||
JsonObject object = new JsonObject();
|
JsonObject object = new JsonObject();
|
||||||
if (json.has("requestID")) object.add("responseID", json.get("requestID"));
|
if (json.has("requestID"))
|
||||||
|
object.add("responseID", json.get("requestID"));
|
||||||
System.out.println("zzzResult" + result);
|
System.out.println("zzzResult" + result);
|
||||||
object.add("result", JsonParser.parseString(result));
|
object.add("result", JsonParser.parseString(result));
|
||||||
object.addProperty("action", "getMetabyReadme");
|
object.addProperty("action", "getMetabyReadme");
|
||||||
@ -474,15 +488,19 @@ public class MetaIndexAction { // public static IndexWriter indexWriter;
|
|||||||
|
|
||||||
@Action(async = true, userPermission = 1L)
|
@Action(async = true, userPermission = 1L)
|
||||||
public void segmentWord(JsonObject json, ResultCallback rc) throws IOException {
|
public void segmentWord(JsonObject json, ResultCallback rc) throws IOException {
|
||||||
//Analyzer analyzer = new IKAnalyzer(true);
|
// Analyzer analyzer = new IKAnalyzer(true);
|
||||||
CharArraySet stopWords = CharArraySet.unmodifiableSet(WordlistLoader.getWordSet(new InputStreamReader(Objects.requireNonNull(MetaIndexAction.class.getClassLoader().getResourceAsStream(
|
CharArraySet stopWords =
|
||||||
"org/bdware/server/stopwords.txt")), StandardCharsets.UTF_8)));
|
CharArraySet.unmodifiableSet(WordlistLoader.getWordSet(new InputStreamReader(
|
||||||
|
Objects.requireNonNull(MetaIndexAction.class.getClassLoader()
|
||||||
|
.getResourceAsStream("org/bdware/server/stopwords.txt")),
|
||||||
|
StandardCharsets.UTF_8)));
|
||||||
Analyzer analyzer = new SmartChineseAnalyzer(stopWords);
|
Analyzer analyzer = new SmartChineseAnalyzer(stopWords);
|
||||||
JsonObject object = new JsonObject();
|
JsonObject object = new JsonObject();
|
||||||
|
|
||||||
String words = "我喜欢区块链,我想试用一下这个,我是做大数据处理的,我是科技局的管理员"; // 从json拿
|
String words = "我喜欢区块链,我想试用一下这个,我是做大数据处理的,我是科技局的管理员"; // 从json拿
|
||||||
TokenStream stream = null;
|
TokenStream stream = null;
|
||||||
if (json.has("requestID")) object.add("responseID", json.get("requestID"));
|
if (json.has("requestID"))
|
||||||
|
object.add("responseID", json.get("requestID"));
|
||||||
try {
|
try {
|
||||||
stream = analyzer.tokenStream("myfield", words);
|
stream = analyzer.tokenStream("myfield", words);
|
||||||
CharTermAttribute charTermAtt = stream.addAttribute(CharTermAttribute.class);
|
CharTermAttribute charTermAtt = stream.addAttribute(CharTermAttribute.class);
|
||||||
@ -511,7 +529,8 @@ public class MetaIndexAction { // public static IndexWriter indexWriter;
|
|||||||
public void getMetabyCID(JsonObject json, ResultCallback rc) {
|
public void getMetabyCID(JsonObject json, ResultCallback rc) {
|
||||||
String result = getMetabyCID(json);
|
String result = getMetabyCID(json);
|
||||||
JsonObject object = new JsonObject();
|
JsonObject object = new JsonObject();
|
||||||
if (json.has("requestID")) object.add("responseID", json.get("requestID"));
|
if (json.has("requestID"))
|
||||||
|
object.add("responseID", json.get("requestID"));
|
||||||
object.add("result", JsonParser.parseString(result));
|
object.add("result", JsonParser.parseString(result));
|
||||||
object.addProperty("action", "getMetabyCID");
|
object.addProperty("action", "getMetabyCID");
|
||||||
rc.onResult(object);
|
rc.onResult(object);
|
||||||
@ -521,7 +540,8 @@ public class MetaIndexAction { // public static IndexWriter indexWriter;
|
|||||||
public void getMetabyOwner(JsonObject json, ResultCallback rc) {
|
public void getMetabyOwner(JsonObject json, ResultCallback rc) {
|
||||||
String result = getMetabyOwner(json);
|
String result = getMetabyOwner(json);
|
||||||
JsonObject object = new JsonObject();
|
JsonObject object = new JsonObject();
|
||||||
if (json.has("requestID")) object.add("responseID", json.get("requestID"));
|
if (json.has("requestID"))
|
||||||
|
object.add("responseID", json.get("requestID"));
|
||||||
object.add("result", JsonParser.parseString(result));
|
object.add("result", JsonParser.parseString(result));
|
||||||
object.addProperty("action", "getMetabyOwner");
|
object.addProperty("action", "getMetabyOwner");
|
||||||
rc.onResult(object);
|
rc.onResult(object);
|
||||||
@ -531,7 +551,8 @@ public class MetaIndexAction { // public static IndexWriter indexWriter;
|
|||||||
public void getMetabyPubkey(JsonObject json, ResultCallback rc) {
|
public void getMetabyPubkey(JsonObject json, ResultCallback rc) {
|
||||||
String result = getMetabyPubkey(json);
|
String result = getMetabyPubkey(json);
|
||||||
JsonObject object = new JsonObject();
|
JsonObject object = new JsonObject();
|
||||||
if (json.has("requestID")) object.add("responseID", json.get("requestID"));
|
if (json.has("requestID"))
|
||||||
|
object.add("responseID", json.get("requestID"));
|
||||||
object.add("result", JsonParser.parseString(result));
|
object.add("result", JsonParser.parseString(result));
|
||||||
object.addProperty("action", "getMetabyPubkey");
|
object.addProperty("action", "getMetabyPubkey");
|
||||||
rc.onResult(object);
|
rc.onResult(object);
|
||||||
|
@ -6,13 +6,13 @@ import java.util.List;
|
|||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
public class MultiPointContractInfo {
|
public class MultiPointContractInfo {
|
||||||
public List<String> members; //pubKey
|
public List<String> members; // pubKey
|
||||||
public ContractExecType type;
|
public ContractExecType type;
|
||||||
AtomicInteger ai = new AtomicInteger();
|
AtomicInteger ai = new AtomicInteger();
|
||||||
|
|
||||||
public transient ContractExecutor rcf;
|
public transient ContractExecutor rcf;
|
||||||
|
|
||||||
public String getNextSeq(){
|
public String getNextSeq() {
|
||||||
System.out.println("MultiPointContractInfo获得下一个序号" + (ai.get() + 1));
|
System.out.println("MultiPointContractInfo获得下一个序号" + (ai.get() + 1));
|
||||||
return ai.getAndIncrement() + "";
|
return ai.getAndIncrement() + "";
|
||||||
}
|
}
|
||||||
|
@ -35,8 +35,9 @@ public class NCClientActions {
|
|||||||
map.put("id", OtherNCProxy.instance.sm2.getPublicKeyStr());
|
map.put("id", OtherNCProxy.instance.sm2.getPublicKeyStr());
|
||||||
byte[] signature = "no signature".getBytes();
|
byte[] signature = "no signature".getBytes();
|
||||||
try {
|
try {
|
||||||
signature = SM2Util.sign(OtherNCProxy.instance.sm2.getPrivateKeyParameter(), (OtherNCProxy.instance.sm2.getPublicKeyStr() + json.get("session").getAsString())
|
signature = SM2Util.sign(OtherNCProxy.instance.sm2.getPrivateKeyParameter(),
|
||||||
.getBytes());
|
(OtherNCProxy.instance.sm2.getPublicKeyStr()
|
||||||
|
+ json.get("session").getAsString()).getBytes());
|
||||||
} catch (CryptoException e) {
|
} catch (CryptoException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
@ -62,8 +63,8 @@ public class NCClientActions {
|
|||||||
if (json.has("empty")) {
|
if (json.has("empty")) {
|
||||||
LOGGER.info("receive from NC ,do not have any cp.");
|
LOGGER.info("receive from NC ,do not have any cp.");
|
||||||
} else {
|
} else {
|
||||||
info = JsonUtil.fromJson(json.get("contracts").getAsString(), new TypeToken<List<OtherNCInfo>>() {
|
info = JsonUtil.fromJson(json.get("contracts").getAsString(),
|
||||||
}.getType());
|
new TypeToken<List<OtherNCInfo>>() {}.getType());
|
||||||
}
|
}
|
||||||
|
|
||||||
LOGGER.info(JsonUtil.toJson(info));
|
LOGGER.info(JsonUtil.toJson(info));
|
||||||
|
@ -23,7 +23,7 @@ import java.util.concurrent.Executors;
|
|||||||
public class NCClientHandler extends SimpleChannelInboundHandler<Object> {
|
public class NCClientHandler extends SimpleChannelInboundHandler<Object> {
|
||||||
private static final Logger LOGGER = LogManager.getLogger(NCClientHandler.class);
|
private static final Logger LOGGER = LogManager.getLogger(NCClientHandler.class);
|
||||||
static ExecutorService executorService = Executors.newFixedThreadPool(5);
|
static ExecutorService executorService = Executors.newFixedThreadPool(5);
|
||||||
public boolean hasPermission; //是否在目标NC上有权限
|
public boolean hasPermission; // 是否在目标NC上有权限
|
||||||
public NCClientActions actions;
|
public NCClientActions actions;
|
||||||
Channel channel;
|
Channel channel;
|
||||||
ActionExecutor<ResultCallback, JsonObject> ae;
|
ActionExecutor<ResultCallback, JsonObject> ae;
|
||||||
@ -67,21 +67,16 @@ public class NCClientHandler extends SimpleChannelInboundHandler<Object> {
|
|||||||
protected void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception {
|
protected void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception {
|
||||||
ByteBuf bb = (ByteBuf) msg;
|
ByteBuf bb = (ByteBuf) msg;
|
||||||
try {
|
try {
|
||||||
final JsonObject arg =
|
final JsonObject arg = new JsonParser()
|
||||||
new JsonParser()
|
.parse(new InputStreamReader(new ByteBufInputStream(bb))).getAsJsonObject();
|
||||||
.parse(new InputStreamReader(new ByteBufInputStream(bb)))
|
|
||||||
.getAsJsonObject();
|
|
||||||
if (arg.has("action")) {
|
if (arg.has("action")) {
|
||||||
final String action = arg.get("action").getAsString();
|
final String action = arg.get("action").getAsString();
|
||||||
ae.handle(
|
ae.handle(action, arg, new ResultCallback() {
|
||||||
action,
|
@Override
|
||||||
arg,
|
public void onResult(String str) {
|
||||||
new ResultCallback() {
|
sendMsg(str);
|
||||||
@Override
|
}
|
||||||
public void onResult(String str) {
|
});
|
||||||
sendMsg(str);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (java.lang.IllegalArgumentException e) {
|
} catch (java.lang.IllegalArgumentException e) {
|
||||||
@ -100,7 +95,8 @@ public class NCClientHandler extends SimpleChannelInboundHandler<Object> {
|
|||||||
public void close() {
|
public void close() {
|
||||||
try {
|
try {
|
||||||
isConnected = false;
|
isConnected = false;
|
||||||
if (channel != null) channel.close();
|
if (channel != null)
|
||||||
|
channel.close();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
} finally {
|
} finally {
|
||||||
|
@ -15,7 +15,8 @@ import java.util.concurrent.TimeUnit;
|
|||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
public class NCElectMasterUtil {
|
public class NCElectMasterUtil {
|
||||||
public static final Map<String, ElectInfo> electInfos = new ConcurrentHashMap<>(); //key is contractID
|
public static final Map<String, ElectInfo> electInfos = new ConcurrentHashMap<>(); // key is
|
||||||
|
// contractID
|
||||||
private static final Logger LOGGER = LogManager.getLogger(NCElectMasterUtil.class);
|
private static final Logger LOGGER = LogManager.getLogger(NCElectMasterUtil.class);
|
||||||
|
|
||||||
public static class ElectInfo {
|
public static class ElectInfo {
|
||||||
@ -24,10 +25,10 @@ public class NCElectMasterUtil {
|
|||||||
String formerMaster;
|
String formerMaster;
|
||||||
String uniNumber;
|
String uniNumber;
|
||||||
long lastTime = System.currentTimeMillis();
|
long lastTime = System.currentTimeMillis();
|
||||||
int onlineNum; //除旧的master之外的在线节点数
|
int onlineNum; // 除旧的master之外的在线节点数
|
||||||
String contractID;
|
String contractID;
|
||||||
String mems; //执行这个合约的所有节点的pubKey
|
String mems; // 执行这个合约的所有节点的pubKey
|
||||||
private Map<String, Integer> nodeID2LastExe = new ConcurrentHashMap<>(); //key is nodeID
|
private Map<String, Integer> nodeID2LastExe = new ConcurrentHashMap<>(); // key is nodeID
|
||||||
private Timer timer;
|
private Timer timer;
|
||||||
|
|
||||||
|
|
||||||
@ -38,11 +39,10 @@ public class NCElectMasterUtil {
|
|||||||
uniNumber = uni;
|
uniNumber = uni;
|
||||||
String[] mem = members.split(",");
|
String[] mem = members.split(",");
|
||||||
|
|
||||||
/* try {
|
/*
|
||||||
Thread.sleep(2000); //让NC发现崩溃节点
|
* try { Thread.sleep(2000); //让NC发现崩溃节点 } catch (InterruptedException e) {
|
||||||
} catch (InterruptedException e) {
|
* e.printStackTrace(); }
|
||||||
e.printStackTrace();
|
*/
|
||||||
}*/
|
|
||||||
|
|
||||||
for (String memID : mem) {
|
for (String memID : mem) {
|
||||||
if (memID == null || memID.length() == 0)
|
if (memID == null || memID.length() == 0)
|
||||||
@ -52,26 +52,22 @@ public class NCElectMasterUtil {
|
|||||||
onlineNum++;
|
onlineNum++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
NodeCenterServer.scheduledThreadPool.scheduleWithFixedDelay(
|
NodeCenterServer.scheduledThreadPool.scheduleWithFixedDelay(() -> {
|
||||||
() -> {
|
// cancel the election if no nodes find the master's crash in delay + 2 seconds
|
||||||
// cancel the election if no nodes find the master's crash in delay + 2 seconds
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd.HH:mm:ss.SSS");
|
||||||
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd.HH:mm:ss.SSS");
|
if (System.currentTimeMillis() - lastTime > (delay + 15000)) {
|
||||||
if (System.currentTimeMillis() - lastTime > (delay + 15000)) {
|
LOGGER.info("lastTime=" + df.format(lastTime) + " cancel the election");
|
||||||
LOGGER.info("lastTime=" + df.format(lastTime) + " cancel the election");
|
cancel();
|
||||||
cancel();
|
}
|
||||||
}
|
// start timeout election
|
||||||
// start timeout election
|
// if (electInfos.containsKey(contractID) && nodeID2LastExe.size() == onlineNum) {
|
||||||
// if (electInfos.containsKey(contractID) && nodeID2LastExe.size() == onlineNum) {
|
// elect();
|
||||||
// elect();
|
// }
|
||||||
// }
|
}, delay + 1500, delay + 1500, TimeUnit.MILLISECONDS);
|
||||||
},
|
// timer.schedule(task, dealy + 2000);
|
||||||
delay + 1500,
|
|
||||||
delay + 1500,
|
|
||||||
TimeUnit.MILLISECONDS);
|
|
||||||
//timer.schedule(task, dealy + 2000);
|
|
||||||
|
|
||||||
LOGGER.info("new election of contract " + contractID + " is added to electInfos, " +
|
LOGGER.info("new election of contract " + contractID + " is added to electInfos, "
|
||||||
onlineNum + " node is online");
|
+ onlineNum + " node is online");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void cancel() {
|
public void cancel() {
|
||||||
@ -84,10 +80,11 @@ public class NCElectMasterUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void put(String nodeID, int lastExe, String master, String mem2, String uniNum) {
|
public synchronized void put(String nodeID, int lastExe, String master, String mem2,
|
||||||
|
String uniNum) {
|
||||||
LOGGER.info("put nodeID=" + nodeID);
|
LOGGER.info("put nodeID=" + nodeID);
|
||||||
|
|
||||||
//确保该合约某时只能有一个选举,其他的选举请求被忽略
|
// 确保该合约某时只能有一个选举,其他的选举请求被忽略
|
||||||
if (!master.equals(formerMaster)) {
|
if (!master.equals(formerMaster)) {
|
||||||
LOGGER.debug("[NCElectMasterUtil] master error!");
|
LOGGER.debug("[NCElectMasterUtil] master error!");
|
||||||
return;
|
return;
|
||||||
@ -105,13 +102,14 @@ public class NCElectMasterUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
long now = System.currentTimeMillis();
|
long now = System.currentTimeMillis();
|
||||||
//认为是一个新的选举,之前的作废
|
// 认为是一个新的选举,之前的作废
|
||||||
if (now - lastTime > delay) {
|
if (now - lastTime > delay) {
|
||||||
LOGGER.info("[NCElectMasterUtil] time error!");
|
LOGGER.info("[NCElectMasterUtil] time error!");
|
||||||
cancel();
|
cancel();
|
||||||
synchronized (electInfos) {
|
synchronized (electInfos) {
|
||||||
//electInfos.remove(contractID);
|
// electInfos.remove(contractID);
|
||||||
NCElectMasterUtil.electInfos.put(contractID, new ElectInfo(master, contractID, mem2, uniNum));
|
NCElectMasterUtil.electInfos.put(contractID,
|
||||||
|
new ElectInfo(master, contractID, mem2, uniNum));
|
||||||
ElectInfo eleInfo = electInfos.get(contractID);
|
ElectInfo eleInfo = electInfos.get(contractID);
|
||||||
eleInfo.put(nodeID, lastExe, master, mem2, uniNum);
|
eleInfo.put(nodeID, lastExe, master, mem2, uniNum);
|
||||||
}
|
}
|
||||||
@ -137,15 +135,17 @@ public class NCElectMasterUtil {
|
|||||||
startElect.set(true);
|
startElect.set(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
//更新路由信息,这个合约的master暂时为null
|
// 更新路由信息,这个合约的master暂时为null
|
||||||
if (NodeCenterActions.nodeInfos.containsKey(formerMaster)) {
|
if (NodeCenterActions.nodeInfos.containsKey(formerMaster)) {
|
||||||
CMNode node = NodeCenterActions.nodeInfos.get(formerMaster);
|
CMNode node = NodeCenterActions.nodeInfos.get(formerMaster);
|
||||||
if (node != null) {
|
if (node != null) {
|
||||||
synchronized (node) {
|
synchronized (node) {
|
||||||
for (ContractDesp cd : node.contracts) {
|
for (ContractDesp cd : node.contracts) {
|
||||||
if (cd.contractID.equals(contractID) || cd.contractName.equals(contractID)) {
|
if (cd.contractID.equals(contractID)
|
||||||
|
|| cd.contractName.equals(contractID)) {
|
||||||
cd.setIsMaster(false);
|
cd.setIsMaster(false);
|
||||||
LOGGER.debug("设置节点 " + node.pubKey.substring(0, 5) + " 的合约 " + contractID + " isMaster=" + false);
|
LOGGER.debug("设置节点 " + node.pubKey.substring(0, 5) + " 的合约 "
|
||||||
|
+ contractID + " isMaster=" + false);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -164,16 +164,16 @@ public class NCElectMasterUtil {
|
|||||||
LOGGER.info("[NCElectMasterUtil] 选举出新的master " + newMaster);
|
LOGGER.info("[NCElectMasterUtil] 选举出新的master " + newMaster);
|
||||||
|
|
||||||
cancel();
|
cancel();
|
||||||
//electInfos.remove(contractID);
|
// electInfos.remove(contractID);
|
||||||
|
|
||||||
//通知新的master让它发起重连操作,并在所有节点重连成功之后开启master的恢复
|
// 通知新的master让它发起重连操作,并在所有节点重连成功之后开启master的恢复
|
||||||
try {
|
try {
|
||||||
Thread.sleep(1500);
|
Thread.sleep(1500);
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
LOGGER.info("开始计算需要连接新master的都有哪些节点:");
|
LOGGER.info("开始计算需要连接新master的都有哪些节点:");
|
||||||
StringBuilder onlineMems = new StringBuilder(); //不包含旧的master
|
StringBuilder onlineMems = new StringBuilder(); // 不包含旧的master
|
||||||
for (String memID : nodeID2LastExe.keySet()) {
|
for (String memID : nodeID2LastExe.keySet()) {
|
||||||
if (memID == null || memID.length() == 0)
|
if (memID == null || memID.length() == 0)
|
||||||
continue;
|
continue;
|
||||||
|
@ -47,10 +47,8 @@ public class NCHttpHandler extends SimpleChannelInboundHandler<HttpObject> {
|
|||||||
static LogActions logActions = new LogActions(managerAction);
|
static LogActions logActions = new LogActions(managerAction);
|
||||||
static UnitActions unitActions = new UnitActions(managerAction);
|
static UnitActions unitActions = new UnitActions(managerAction);
|
||||||
private static final ActionExecutor<ResultCallback, JsonObject> actionExecutor =
|
private static final ActionExecutor<ResultCallback, JsonObject> actionExecutor =
|
||||||
new ActionExecutor<ResultCallback, JsonObject>(
|
new ActionExecutor<ResultCallback, JsonObject>(NodeCenterFrameHandler.executorService,
|
||||||
NodeCenterFrameHandler.executorService,
|
new NodeCenterActions(null), managerAction, logActions, unitActions) {
|
||||||
new NodeCenterActions(null),
|
|
||||||
managerAction, logActions, unitActions) {
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean checkPermission(Action a, JsonObject arg, long per) {
|
public boolean checkPermission(Action a, JsonObject arg, long per) {
|
||||||
@ -78,21 +76,14 @@ public class NCHttpHandler extends SimpleChannelInboundHandler<HttpObject> {
|
|||||||
if (arg.has("pubKey")) {
|
if (arg.has("pubKey")) {
|
||||||
pubkey = arg.get("pubKey").getAsString();
|
pubkey = arg.get("pubKey").getAsString();
|
||||||
}
|
}
|
||||||
NodeCenterServer.nodeHttpLogDB.put(
|
NodeCenterServer.nodeHttpLogDB.put(action,
|
||||||
action,
|
"{\"action\":\"" + action + "\",\"pubKey\":\"" + pubkey + "\",\"date\":"
|
||||||
"{\"action\":\""
|
+ System.currentTimeMillis() + "}");
|
||||||
+ action
|
|
||||||
+ "\",\"pubKey\":\""
|
|
||||||
+ pubkey
|
|
||||||
+ "\",\"date\":"
|
|
||||||
+ System.currentTimeMillis()
|
|
||||||
+ "}");
|
|
||||||
LOGGER.debug("[NCHttpHandler] flag = " + flag + " flag2 = " + flag2);
|
LOGGER.debug("[NCHttpHandler] flag = " + flag + " flag2 = " + flag2);
|
||||||
return flag && flag2;
|
return flag && flag2;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
static TypeToken<Map<String, String>> token = new TypeToken<Map<String, String>>() {
|
static TypeToken<Map<String, String>> token = new TypeToken<Map<String, String>>() {};
|
||||||
};
|
|
||||||
private final HttpFileHandleAdapter fileAdapter;
|
private final HttpFileHandleAdapter fileAdapter;
|
||||||
// public static ExecutorService executor = Executors.newFixedThreadPool(5);
|
// public static ExecutorService executor = Executors.newFixedThreadPool(5);
|
||||||
public AtomicInteger counter = new AtomicInteger(0);
|
public AtomicInteger counter = new AtomicInteger(0);
|
||||||
@ -149,20 +140,15 @@ public class NCHttpHandler extends SimpleChannelInboundHandler<HttpObject> {
|
|||||||
|
|
||||||
@URIPath(method = HttpMethod.OPTIONS)
|
@URIPath(method = HttpMethod.OPTIONS)
|
||||||
public void crossOrigin(ChannelHandlerContext ctx, FullHttpRequest request) {
|
public void crossOrigin(ChannelHandlerContext ctx, FullHttpRequest request) {
|
||||||
DefaultFullHttpResponse fullResponse =
|
DefaultFullHttpResponse fullResponse = new DefaultFullHttpResponse(
|
||||||
new DefaultFullHttpResponse(
|
request.protocolVersion(), OK, Unpooled.wrappedBuffer("success".getBytes()));
|
||||||
request.protocolVersion(),
|
|
||||||
OK,
|
|
||||||
Unpooled.wrappedBuffer("success".getBytes()));
|
|
||||||
fullResponse.headers().remove("Access-Control-Allow-Origin");
|
fullResponse.headers().remove("Access-Control-Allow-Origin");
|
||||||
fullResponse.headers().remove("Access-Control-Allow-Headers");
|
fullResponse.headers().remove("Access-Control-Allow-Headers");
|
||||||
fullResponse.headers().add("Access-Control-Allow-Origin", "*");
|
fullResponse.headers().add("Access-Control-Allow-Origin", "*");
|
||||||
fullResponse.headers().add("Access-Control-Allow-Methods", "*");
|
fullResponse.headers().add("Access-Control-Allow-Methods", "*");
|
||||||
fullResponse
|
fullResponse.headers().add("Access-Control-Allow-Headers",
|
||||||
.headers()
|
"Content-Type, Cookie, Accept-Encoding, User-Agent, Host, Referer, "
|
||||||
.add("Access-Control-Allow-Headers",
|
+ "X-Requested-With, Accept, Accept-Language, Cache-Control, Connection");
|
||||||
"Content-Type, Cookie, Accept-Encoding, User-Agent, Host, Referer, " +
|
|
||||||
"X-Requested-With, Accept, Accept-Language, Cache-Control, Connection");
|
|
||||||
ChannelFuture f = ctx.write(fullResponse);
|
ChannelFuture f = ctx.write(fullResponse);
|
||||||
f.addListener(ChannelFutureListener.CLOSE);
|
f.addListener(ChannelFutureListener.CLOSE);
|
||||||
LOGGER.info("[Option] received!");
|
LOGGER.info("[Option] received!");
|
||||||
@ -189,14 +175,13 @@ public class NCHttpHandler extends SimpleChannelInboundHandler<HttpObject> {
|
|||||||
JsonObject transformedParam = new JsonObject();
|
JsonObject transformedParam = new JsonObject();
|
||||||
for (String key : parameters.keySet()) {
|
for (String key : parameters.keySet()) {
|
||||||
List<String> val = parameters.get(key);
|
List<String> val = parameters.get(key);
|
||||||
if (val != null) transformedParam.addProperty(key, val.get(0));
|
if (val != null)
|
||||||
|
transformedParam.addProperty(key, val.get(0));
|
||||||
}
|
}
|
||||||
return transformedParam;
|
return transformedParam;
|
||||||
}
|
}
|
||||||
|
|
||||||
@URIPath(
|
@URIPath(method = org.bdware.server.http.HttpMethod.GET, value = {"/doip"})
|
||||||
method = org.bdware.server.http.HttpMethod.GET,
|
|
||||||
value = {"/doip"})
|
|
||||||
public void handleDOIP(ChannelHandlerContext ctx, FullHttpRequest req) {
|
public void handleDOIP(ChannelHandlerContext ctx, FullHttpRequest req) {
|
||||||
ByteBuf content = req.content();
|
ByteBuf content = req.content();
|
||||||
JsonObject map = parseArgInQuery(req);
|
JsonObject map = parseArgInQuery(req);
|
||||||
@ -209,11 +194,8 @@ public class NCHttpHandler extends SimpleChannelInboundHandler<HttpObject> {
|
|||||||
}
|
}
|
||||||
injectPermission(map, str);
|
injectPermission(map, str);
|
||||||
|
|
||||||
DefaultFullHttpResponse response =
|
DefaultFullHttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, OK,
|
||||||
new DefaultFullHttpResponse(
|
Unpooled.wrappedBuffer(MetaIndexAction.search(map).getBytes()));
|
||||||
HttpVersion.HTTP_1_1,
|
|
||||||
OK,
|
|
||||||
Unpooled.wrappedBuffer(MetaIndexAction.search(map).getBytes()));
|
|
||||||
response.headers().add("Access-Control-Allow-Origin", "*");
|
response.headers().add("Access-Control-Allow-Origin", "*");
|
||||||
response.headers().add("Access-Control-Allow-Methods", "*");
|
response.headers().add("Access-Control-Allow-Methods", "*");
|
||||||
ChannelFuture f = ctx.write(response);
|
ChannelFuture f = ctx.write(response);
|
||||||
@ -224,8 +206,7 @@ public class NCHttpHandler extends SimpleChannelInboundHandler<HttpObject> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void channelRead0(ChannelHandlerContext ctx, HttpObject msg) {
|
public void channelRead0(ChannelHandlerContext ctx, HttpObject msg) {
|
||||||
LOGGER.debug("[NCHttpHandler] TID:" + Thread.currentThread().getId() +
|
LOGGER.debug("[NCHttpHandler] TID:" + Thread.currentThread().getId() + msg.toString());
|
||||||
msg.toString());
|
|
||||||
if (msg instanceof FullHttpRequest) {
|
if (msg instanceof FullHttpRequest) {
|
||||||
FullHttpRequest request = (FullHttpRequest) msg;
|
FullHttpRequest request = (FullHttpRequest) msg;
|
||||||
handler.handle(ctx, request);
|
handler.handle(ctx, request);
|
||||||
@ -234,9 +215,8 @@ public class NCHttpHandler extends SimpleChannelInboundHandler<HttpObject> {
|
|||||||
|
|
||||||
public static String getRole(String pubKey) {
|
public static String getRole(String pubKey) {
|
||||||
try {
|
try {
|
||||||
String ret =
|
String ret = KeyValueDBUtil.instance.getValue(NCTables.ConfigDB.toString(),
|
||||||
KeyValueDBUtil.instance.getValue(
|
"__CenterManager__");
|
||||||
NCTables.ConfigDB.toString(), "__CenterManager__");
|
|
||||||
if (ret != null && ret.length() > 0) {
|
if (ret != null && ret.length() > 0) {
|
||||||
boolean isCenterManager = (ret.equals(pubKey)); // 表示此节点是否是平台管理员
|
boolean isCenterManager = (ret.equals(pubKey)); // 表示此节点是否是平台管理员
|
||||||
ret = KeyValueDBUtil.instance.getValue(NCTables.NodeUser.toString(), pubKey);
|
ret = KeyValueDBUtil.instance.getValue(NCTables.NodeUser.toString(), pubKey);
|
||||||
@ -313,7 +293,8 @@ public class NCHttpHandler extends SimpleChannelInboundHandler<HttpObject> {
|
|||||||
|
|
||||||
if (map.has("callback"))
|
if (map.has("callback"))
|
||||||
cb = new HttpResultCallback(ctx, map.get("callback").getAsString());
|
cb = new HttpResultCallback(ctx, map.get("callback").getAsString());
|
||||||
else cb = new HttpResultCallback(ctx, null);
|
else
|
||||||
|
cb = new HttpResultCallback(ctx, null);
|
||||||
cb.addHeader("Access-Control-Allow-Origin", "*");
|
cb.addHeader("Access-Control-Allow-Origin", "*");
|
||||||
cb.addHeader("Access-Control-Allow-Methods", "*");
|
cb.addHeader("Access-Control-Allow-Methods", "*");
|
||||||
cb.addHeader("charset", "utf-8");
|
cb.addHeader("charset", "utf-8");
|
||||||
@ -321,20 +302,16 @@ public class NCHttpHandler extends SimpleChannelInboundHandler<HttpObject> {
|
|||||||
}
|
}
|
||||||
actionExecutor.handle(action, map, cb);
|
actionExecutor.handle(action, map, cb);
|
||||||
} else {
|
} else {
|
||||||
DefaultFullHttpResponse response =
|
DefaultFullHttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1,
|
||||||
new DefaultFullHttpResponse(
|
OK, Unpooled.wrappedBuffer(ret.getBytes()));
|
||||||
HttpVersion.HTTP_1_1, OK, Unpooled.wrappedBuffer(ret.getBytes()));
|
|
||||||
response.headers().add("Access-Control-Allow-Origin", "*");
|
response.headers().add("Access-Control-Allow-Origin", "*");
|
||||||
response.headers().add("Access-Control-Allow-Methods", "*");
|
response.headers().add("Access-Control-Allow-Methods", "*");
|
||||||
ChannelFuture f = ctx.write(response);
|
ChannelFuture f = ctx.write(response);
|
||||||
f.addListener(ChannelFutureListener.CLOSE);
|
f.addListener(ChannelFutureListener.CLOSE);
|
||||||
}
|
}
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
DefaultFullHttpResponse response =
|
DefaultFullHttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, OK,
|
||||||
new DefaultFullHttpResponse(
|
Unpooled.wrappedBuffer(e.getMessage().getBytes()));
|
||||||
HttpVersion.HTTP_1_1,
|
|
||||||
OK,
|
|
||||||
Unpooled.wrappedBuffer(e.getMessage().getBytes()));
|
|
||||||
response.headers().add("Access-Control-Allow-Origin", "*");
|
response.headers().add("Access-Control-Allow-Origin", "*");
|
||||||
response.headers().add("Access-Control-Allow-Methods", "*");
|
response.headers().add("Access-Control-Allow-Methods", "*");
|
||||||
ChannelFuture f = ctx.write(response);
|
ChannelFuture f = ctx.write(response);
|
||||||
@ -345,11 +322,8 @@ public class NCHttpHandler extends SimpleChannelInboundHandler<HttpObject> {
|
|||||||
ByteArrayOutputStream bo = new ByteArrayOutputStream();
|
ByteArrayOutputStream bo = new ByteArrayOutputStream();
|
||||||
e.printStackTrace(new PrintStream(bo));
|
e.printStackTrace(new PrintStream(bo));
|
||||||
ret.put("msg", bo.toString());
|
ret.put("msg", bo.toString());
|
||||||
DefaultFullHttpResponse response =
|
DefaultFullHttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, OK,
|
||||||
new DefaultFullHttpResponse(
|
Unpooled.wrappedBuffer(JsonUtil.toJson(ret).getBytes()));
|
||||||
HttpVersion.HTTP_1_1,
|
|
||||||
OK,
|
|
||||||
Unpooled.wrappedBuffer(JsonUtil.toJson(ret).getBytes()));
|
|
||||||
response.headers().add("Access-Control-Allow-Origin", "*");
|
response.headers().add("Access-Control-Allow-Origin", "*");
|
||||||
response.headers().add("Access-Control-Allow-Methods", "*");
|
response.headers().add("Access-Control-Allow-Methods", "*");
|
||||||
ChannelFuture f = ctx.write(response);
|
ChannelFuture f = ctx.write(response);
|
||||||
|
@ -27,11 +27,9 @@ public class NCManagerAction {
|
|||||||
public static final String centerManger = "__CenterManager__";
|
public static final String centerManger = "__CenterManager__";
|
||||||
public static final String clusterName = "__ClusterName__";
|
public static final String clusterName = "__ClusterName__";
|
||||||
static final String Licence = "__LICENCE___";
|
static final String Licence = "__LICENCE___";
|
||||||
static final ECPublicKeyParameters licencePub =
|
static final ECPublicKeyParameters licencePub = BCECUtil.createECPublicKeyFromStrParameters(
|
||||||
BCECUtil.createECPublicKeyFromStrParameters(
|
"04844412ecb77b07d5ad7097c488ae9dff1013b310d2311f8bd84c491642011e1a6a7041bae8c2ad75da29c27e320bd430abc723cf6bcb0490afc82cc26e6d5637",
|
||||||
"04844412ecb77b07d5ad7097c488ae9dff1013b310d2311f8bd84c491642011e1a6a7041bae8c2ad75da29c27e320bd430abc723cf6bcb0490afc82cc26e6d5637",
|
SM2Util.CURVE, SM2Util.DOMAIN_PARAMS);
|
||||||
SM2Util.CURVE,
|
|
||||||
SM2Util.DOMAIN_PARAMS);
|
|
||||||
private static final Logger LOGGER = LogManager.getLogger(NCManagerAction.class);
|
private static final Logger LOGGER = LogManager.getLogger(NCManagerAction.class);
|
||||||
String sessionID = null;
|
String sessionID = null;
|
||||||
private String publicKey;
|
private String publicKey;
|
||||||
@ -45,7 +43,8 @@ public class NCManagerAction {
|
|||||||
|
|
||||||
public String getPubKey(JsonObject jo) {
|
public String getPubKey(JsonObject jo) {
|
||||||
try {
|
try {
|
||||||
if (publicKey != null) return publicKey;
|
if (publicKey != null)
|
||||||
|
return publicKey;
|
||||||
return jo.get("pubKey").getAsString();
|
return jo.get("pubKey").getAsString();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
}
|
}
|
||||||
@ -55,8 +54,7 @@ public class NCManagerAction {
|
|||||||
public static boolean isCenterManager(String pubkey) {
|
public static boolean isCenterManager(String pubkey) {
|
||||||
String ret = KeyValueDBUtil.instance.getValue(NCTables.ConfigDB.toString(), centerManger);
|
String ret = KeyValueDBUtil.instance.getValue(NCTables.ConfigDB.toString(), centerManger);
|
||||||
LOGGER.debug("centerManger: " + ret);
|
LOGGER.debug("centerManger: " + ret);
|
||||||
return !StringUtil.isNullOrEmpty(ret)
|
return !StringUtil.isNullOrEmpty(ret) && !StringUtil.isNullOrEmpty(pubkey)
|
||||||
&& !StringUtil.isNullOrEmpty(pubkey)
|
|
||||||
&& pubkey.equals(ret);
|
&& pubkey.equals(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -104,8 +102,8 @@ public class NCManagerAction {
|
|||||||
@Action(userPermission = 0)
|
@Action(userPermission = 0)
|
||||||
public void setClusterName(JsonObject json, ResultCallback resultCallback) {
|
public void setClusterName(JsonObject json, ResultCallback resultCallback) {
|
||||||
if (json.has("name")) {
|
if (json.has("name")) {
|
||||||
KeyValueDBUtil.instance.setValue(
|
KeyValueDBUtil.instance.setValue(NCTables.ConfigDB.toString(), clusterName,
|
||||||
NCTables.ConfigDB.toString(), clusterName, json.get("name").getAsString());
|
json.get("name").getAsString());
|
||||||
simpleReply(resultCallback, "onSetClusterName", "success");
|
simpleReply(resultCallback, "onSetClusterName", "success");
|
||||||
} else {
|
} else {
|
||||||
simpleReply(resultCallback, "onSetClusterName", "failed");
|
simpleReply(resultCallback, "onSetClusterName", "failed");
|
||||||
@ -122,7 +120,7 @@ public class NCManagerAction {
|
|||||||
String ret =
|
String ret =
|
||||||
KeyValueDBUtil.instance.getValue(NCTables.ConfigDB.toString(), centerManger);
|
KeyValueDBUtil.instance.getValue(NCTables.ConfigDB.toString(), centerManger);
|
||||||
if (ret != null && ret.length() > 0) {
|
if (ret != null && ret.length() > 0) {
|
||||||
boolean isCenterManager = (ret.equals(pubKey)); //表示此节点是否是平台管理员
|
boolean isCenterManager = (ret.equals(pubKey)); // 表示此节点是否是平台管理员
|
||||||
ret = KeyValueDBUtil.instance.getValue(NCTables.NodeUser.toString(), pubKey);
|
ret = KeyValueDBUtil.instance.getValue(NCTables.NodeUser.toString(), pubKey);
|
||||||
String role = "";
|
String role = "";
|
||||||
if (isCenterManager) {
|
if (isCenterManager) {
|
||||||
@ -140,10 +138,10 @@ public class NCManagerAction {
|
|||||||
handler.setPermission(Role.compoundValue(role.split(",")));
|
handler.setPermission(Role.compoundValue(role.split(",")));
|
||||||
simpleReply(resultCallback, "onLogin", role);
|
simpleReply(resultCallback, "onLogin", role);
|
||||||
} else {
|
} else {
|
||||||
KeyValueDBUtil.instance.setValue(
|
KeyValueDBUtil.instance.setValue(NCTables.ConfigDB.toString(), centerManger,
|
||||||
NCTables.ConfigDB.toString(), centerManger, pubKey);
|
pubKey);
|
||||||
KeyValueDBUtil.instance.setValue(
|
KeyValueDBUtil.instance.setValue(NCTables.ConfigDB.toString(), clusterName,
|
||||||
NCTables.ConfigDB.toString(), clusterName, "clusterName_" + pubKey.substring(0, 5));
|
"clusterName_" + pubKey.substring(0, 5));
|
||||||
handler.setPermission(0x30000ffL);
|
handler.setPermission(0x30000ffL);
|
||||||
simpleReply(resultCallback, "onLogin", "CenterManager");
|
simpleReply(resultCallback, "onLogin", "CenterManager");
|
||||||
}
|
}
|
||||||
@ -185,18 +183,22 @@ public class NCManagerAction {
|
|||||||
if (str.contains(Role.CenterManager.toString())) {
|
if (str.contains(Role.CenterManager.toString())) {
|
||||||
if (json.has("newPubKey")) {
|
if (json.has("newPubKey")) {
|
||||||
String newPubKey = json.get("newPubKey").getAsString();
|
String newPubKey = json.get("newPubKey").getAsString();
|
||||||
KeyValueDBUtil.instance.setValue(NCTables.ConfigDB.toString(), centerManger, newPubKey);
|
KeyValueDBUtil.instance.setValue(NCTables.ConfigDB.toString(), centerManger,
|
||||||
KeyValueDBUtil.instance.setValue(
|
newPubKey);
|
||||||
NCTables.NodeUser.toString(), newPubKey, Role.CenterManager.toString());
|
KeyValueDBUtil.instance.setValue(NCTables.NodeUser.toString(), newPubKey,
|
||||||
resultCallback.onResult("{\"action\":\"onResetCenterManager\",\"data\":\"success\",\"pubKey\":\""
|
Role.CenterManager.toString());
|
||||||
+ newPubKey + "\"}");
|
resultCallback.onResult(
|
||||||
|
"{\"action\":\"onResetCenterManager\",\"data\":\"success\",\"pubKey\":\""
|
||||||
|
+ newPubKey + "\"}");
|
||||||
} else {
|
} else {
|
||||||
//just keep the same
|
// just keep the same
|
||||||
resultCallback.onResult("{\"action\":\"onResetCenterManager\",\"data\":\"success\",\"pubKey\":\""
|
resultCallback.onResult(
|
||||||
+ getPubKey(json) + "\"}");
|
"{\"action\":\"onResetCenterManager\",\"data\":\"success\",\"pubKey\":\""
|
||||||
|
+ getPubKey(json) + "\"}");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
resultCallback.onResult("{\"action\":\"onResetCenterManager\",\"data\":\"failed, no permission\"}");
|
resultCallback.onResult(
|
||||||
|
"{\"action\":\"onResetCenterManager\",\"data\":\"failed, no permission\"}");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -225,14 +227,10 @@ public class NCManagerAction {
|
|||||||
@Action(userPermission = 1 << 6)
|
@Action(userPermission = 1 << 6)
|
||||||
public void addNode(JsonObject json, ResultCallback resultCallback) {
|
public void addNode(JsonObject json, ResultCallback resultCallback) {
|
||||||
try {
|
try {
|
||||||
KeyValueDBUtil.instance.setValue(
|
KeyValueDBUtil.instance.setValue(NCTables.NodeUser.toString(),
|
||||||
NCTables.NodeUser.toString(),
|
json.get("nodePubKey").getAsString(), Role.Node.toString());
|
||||||
json.get("nodePubKey").getAsString(),
|
KeyValueDBUtil.instance.setValue(NCTables.NodeTime.toString(),
|
||||||
Role.Node.toString());
|
json.get("nodePubKey").getAsString(), Long.toString(new Date().getTime()));
|
||||||
KeyValueDBUtil.instance.setValue(
|
|
||||||
NCTables.NodeTime.toString(),
|
|
||||||
json.get("nodePubKey").getAsString(),
|
|
||||||
Long.toString(new Date().getTime()));
|
|
||||||
simpleReply(resultCallback, "onAddNodes", "success");
|
simpleReply(resultCallback, "onAddNodes", "success");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@ -251,14 +249,14 @@ public class NCManagerAction {
|
|||||||
}
|
}
|
||||||
if (str == null || str.length() == 0) {
|
if (str == null || str.length() == 0) {
|
||||||
KeyValueDBUtil.instance.setValue(NCTables.ApplyRole.toString(), pubKey, role.name());
|
KeyValueDBUtil.instance.setValue(NCTables.ApplyRole.toString(), pubKey, role.name());
|
||||||
KeyValueDBUtil.instance.setValue(
|
KeyValueDBUtil.instance.setValue(NCTables.ApplyTime.toString(), pubKey,
|
||||||
NCTables.ApplyTime.toString(), pubKey, Long.toString(new Date().getTime()));
|
Long.toString(new Date().getTime()));
|
||||||
} else {
|
} else {
|
||||||
if (!str.contains(role.name())) {
|
if (!str.contains(role.name())) {
|
||||||
KeyValueDBUtil.instance.setValue(
|
KeyValueDBUtil.instance.setValue(NCTables.ApplyRole.toString(), pubKey,
|
||||||
NCTables.ApplyRole.toString(), pubKey, str + "," + role.name());
|
str + "," + role.name());
|
||||||
KeyValueDBUtil.instance.setValue(
|
KeyValueDBUtil.instance.setValue(NCTables.ApplyTime.toString(), pubKey,
|
||||||
NCTables.ApplyTime.toString(), pubKey, Long.toString(new Date().getTime()));
|
Long.toString(new Date().getTime()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
simpleReply(resultCallback, "onApplyRole", "success!");
|
simpleReply(resultCallback, "onApplyRole", "success!");
|
||||||
@ -310,8 +308,8 @@ public class NCManagerAction {
|
|||||||
already = roles;
|
already = roles;
|
||||||
}
|
}
|
||||||
KeyValueDBUtil.instance.setValue(NCTables.NodeUser.toString(), pubKey, already);
|
KeyValueDBUtil.instance.setValue(NCTables.NodeUser.toString(), pubKey, already);
|
||||||
KeyValueDBUtil.instance.setValue(
|
KeyValueDBUtil.instance.setValue(NCTables.NodeTime.toString(), pubKey,
|
||||||
NCTables.NodeTime.toString(), pubKey, Long.toString(new Date().getTime()));
|
Long.toString(new Date().getTime()));
|
||||||
KeyValueDBUtil.instance.delete(NCTables.ApplyRole.toString(), pubKey);
|
KeyValueDBUtil.instance.delete(NCTables.ApplyRole.toString(), pubKey);
|
||||||
KeyValueDBUtil.instance.delete(NCTables.ApplyTime.toString(), pubKey);
|
KeyValueDBUtil.instance.delete(NCTables.ApplyTime.toString(), pubKey);
|
||||||
simpleReply(resultCallback, "onAuthNodeManager", "success");
|
simpleReply(resultCallback, "onAuthNodeManager", "success");
|
||||||
@ -445,13 +443,14 @@ public class NCManagerAction {
|
|||||||
SM2Util.verify(licencePub, content.getBytes(), ByteUtils.fromHexString(sign));
|
SM2Util.verify(licencePub, content.getBytes(), ByteUtils.fromHexString(sign));
|
||||||
|
|
||||||
if (verify) {
|
if (verify) {
|
||||||
KeyValueDBUtil.instance.setValue(
|
KeyValueDBUtil.instance.setValue(NCTables.ConfigDB.toString(), Licence,
|
||||||
NCTables.ConfigDB.toString(), Licence, json.toString());
|
json.toString());
|
||||||
simpleReply(resultCallback, "onUpdateLicence", "success");
|
simpleReply(resultCallback, "onUpdateLicence", "success");
|
||||||
long end = System.currentTimeMillis();
|
long end = System.currentTimeMillis();
|
||||||
LOGGER.debug("[listLicence:time]" + (end - start));
|
LOGGER.debug("[listLicence:time]" + (end - start));
|
||||||
return;
|
return;
|
||||||
} else simpleReply(resultCallback, "onUpdateLicence", "failed");
|
} else
|
||||||
|
simpleReply(resultCallback, "onUpdateLicence", "failed");
|
||||||
long end = System.currentTimeMillis();
|
long end = System.currentTimeMillis();
|
||||||
LOGGER.debug("[updateLicence:time]" + (end - start));
|
LOGGER.debug("[updateLicence:time]" + (end - start));
|
||||||
}
|
}
|
||||||
@ -535,14 +534,8 @@ public class NCManagerAction {
|
|||||||
|
|
||||||
Map<String, String> result = new HashMap<>();
|
Map<String, String> result = new HashMap<>();
|
||||||
result.put("action", "onTransfer");
|
result.put("action", "onTransfer");
|
||||||
result.put(
|
result.put("data", "now start transfer contract " + contractID + " from node:" + node1ID
|
||||||
"data",
|
+ " to node:" + node2ID);
|
||||||
"now start transfer contract "
|
|
||||||
+ contractID
|
|
||||||
+ " from node:"
|
|
||||||
+ node1ID
|
|
||||||
+ " to node:"
|
|
||||||
+ node2ID);
|
|
||||||
resultCallback.onResult(result);
|
resultCallback.onResult(result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,19 +1,7 @@
|
|||||||
package org.bdware.server.nodecenter;
|
package org.bdware.server.nodecenter;
|
||||||
|
|
||||||
public enum NCTables {
|
public enum NCTables {
|
||||||
NodeUser,
|
NodeUser, NodeTime, ApplyRole, ApplyTime, NodeHttpLog, ContractMeta, ConfigDB, NodeTcpLog, NodesDB, TrustUnitsDB, OtherNCs, NCFile, ApplyNodeManager;
|
||||||
NodeTime,
|
|
||||||
ApplyRole,
|
|
||||||
ApplyTime,
|
|
||||||
NodeHttpLog,
|
|
||||||
ContractMeta,
|
|
||||||
ConfigDB,
|
|
||||||
NodeTcpLog,
|
|
||||||
NodesDB,
|
|
||||||
TrustUnitsDB,
|
|
||||||
OtherNCs,
|
|
||||||
NCFile,
|
|
||||||
ApplyNodeManager;
|
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "NC_" + super.toString();
|
return "NC_" + super.toString();
|
||||||
|
@ -33,21 +33,21 @@ public class NCUDPRunner extends Thread {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
// TimerTask task = new TimerTask() {
|
// TimerTask task = new TimerTask() {
|
||||||
//
|
//
|
||||||
// @Override
|
// @Override
|
||||||
// public void run(Timeout arg0) throws Exception {
|
// public void run(Timeout arg0) throws Exception {
|
||||||
// Set<Integer> nodes = new HashSet<Integer>();
|
// Set<Integer> nodes = new HashSet<Integer>();
|
||||||
// for (Integer i:id2IP.keySet()) {
|
// for (Integer i:id2IP.keySet()) {
|
||||||
// UDPNode node = id2IP.get(i);
|
// UDPNode node = id2IP.get(i);
|
||||||
// if (System.currentTimeMillis()-node.lastUpdatedTime<60*1000) {
|
// if (System.currentTimeMillis()-node.lastUpdatedTime<60*1000) {
|
||||||
// nodes.remove(i);
|
// nodes.remove(i);
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// for (Integer i:nodes)
|
// for (Integer i:nodes)
|
||||||
// node.re
|
// node.re
|
||||||
// }
|
// }
|
||||||
// };
|
// };
|
||||||
id2IP = new HashMap<Integer, UDPNode>();
|
id2IP = new HashMap<Integer, UDPNode>();
|
||||||
int startPort = mainPort;
|
int startPort = mainPort;
|
||||||
while (true) {
|
while (true) {
|
||||||
@ -82,11 +82,8 @@ public class NCUDPRunner extends Thread {
|
|||||||
private void onUDPMessage(UDPMessage msg, DatagramPacket request) {
|
private void onUDPMessage(UDPMessage msg, DatagramPacket request) {
|
||||||
switch (msg.type) {
|
switch (msg.type) {
|
||||||
case shakeHand:
|
case shakeHand:
|
||||||
LOGGER.debug(
|
LOGGER.debug("[NCUDPRunner] shakeHand:" + request.getAddress().getHostAddress()
|
||||||
"[NCUDPRunner] shakeHand:"
|
+ ":" + request.getPort());
|
||||||
+ request.getAddress().getHostAddress()
|
|
||||||
+ ":"
|
|
||||||
+ request.getPort());
|
|
||||||
id2IP.put(msg.id, new UDPNode(request.getSocketAddress()));
|
id2IP.put(msg.id, new UDPNode(request.getSocketAddress()));
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
package org.bdware.server.nodecenter;
|
package org.bdware.server.nodecenter;
|
||||||
|
|
||||||
public class NameAndID {
|
public class NameAndID {
|
||||||
String name,id;
|
String name, id;
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -34,40 +34,31 @@ public class NodeCenterFrameHandler extends SimpleChannelInboundHandler<Object>
|
|||||||
this.actions = new NodeCenterActions(this);
|
this.actions = new NodeCenterActions(this);
|
||||||
MetaIndexAction.controller = this;
|
MetaIndexAction.controller = this;
|
||||||
// TODO 添加那个UnitAction.
|
// TODO 添加那个UnitAction.
|
||||||
ae =
|
ae = new ActionExecutor<ResultCallback, JsonObject>(executorService, actions,
|
||||||
new ActionExecutor<ResultCallback, JsonObject>(
|
new MetaIndexAction()) {
|
||||||
executorService, actions, new MetaIndexAction()) {
|
@Override
|
||||||
@Override
|
public boolean checkPermission(Action a, final JsonObject args, long permission) {
|
||||||
public boolean checkPermission(
|
long val = a.userPermission();
|
||||||
Action a, final JsonObject args, long permission) {
|
boolean flag;
|
||||||
long val = a.userPermission();
|
String status = "refuse";
|
||||||
boolean flag;
|
String action = args.get("action").getAsString();
|
||||||
String status = "refuse";
|
if (val == 0) {
|
||||||
String action = args.get("action").getAsString();
|
flag = true;
|
||||||
if (val == 0) {
|
status = "accept";
|
||||||
flag = true;
|
} else if ((permission & val) == val) {
|
||||||
status = "accept";
|
flag = true;
|
||||||
} else if ((permission & val) == val) {
|
status = "accept";
|
||||||
flag = true;
|
} else {
|
||||||
status = "accept";
|
flag = false;
|
||||||
} else {
|
}
|
||||||
flag = false;
|
if (!action.contains("checkAlive"))
|
||||||
}
|
NodeCenterServer.nodeTcpLogDB.put(action,
|
||||||
if (!action.contains("checkAlive"))
|
"{\"action\":\"" + action + "\",\"pubKey\":\"" + pubKey
|
||||||
NodeCenterServer.nodeTcpLogDB.put(
|
+ "\",\"status\":\"" + status + "\",\"date\":"
|
||||||
action,
|
+ System.currentTimeMillis() + "}");
|
||||||
"{\"action\":\""
|
return flag;
|
||||||
+ action
|
}
|
||||||
+ "\",\"pubKey\":\""
|
};
|
||||||
+ pubKey
|
|
||||||
+ "\",\"status\":\""
|
|
||||||
+ status
|
|
||||||
+ "\",\"date\":"
|
|
||||||
+ System.currentTimeMillis()
|
|
||||||
+ "}");
|
|
||||||
return flag;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
LOGGER.info("create NodeCenterFrameHandler instance succeed!");
|
LOGGER.info("create NodeCenterFrameHandler instance succeed!");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -80,10 +71,9 @@ public class NodeCenterFrameHandler extends SimpleChannelInboundHandler<Object>
|
|||||||
this.ctx = ctx;
|
this.ctx = ctx;
|
||||||
JsonObject map;
|
JsonObject map;
|
||||||
try {
|
try {
|
||||||
map =
|
map = JsonParser
|
||||||
JsonParser.parseReader(
|
.parseReader(new InputStreamReader(new ByteBufInputStream((ByteBuf) frame)))
|
||||||
new InputStreamReader(new ByteBufInputStream((ByteBuf) frame)))
|
.getAsJsonObject();
|
||||||
.getAsJsonObject();
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LOGGER.error("can't handle msg! " + e.getMessage());
|
LOGGER.error("can't handle msg! " + e.getMessage());
|
||||||
@ -93,15 +83,12 @@ public class NodeCenterFrameHandler extends SimpleChannelInboundHandler<Object>
|
|||||||
try {
|
try {
|
||||||
final String action = map.get("action").getAsString();
|
final String action = map.get("action").getAsString();
|
||||||
// System.out.println("[NodeCenterFramHandler] handle:" + action);
|
// System.out.println("[NodeCenterFramHandler] handle:" + action);
|
||||||
ae.handle(
|
ae.handle(action, map, new ResultCallback() {
|
||||||
action,
|
@Override
|
||||||
map,
|
public void onResult(String ret) {
|
||||||
new ResultCallback() {
|
sendMsg(ret);
|
||||||
@Override
|
}
|
||||||
public void onResult(String ret) {
|
});
|
||||||
sendMsg(ret);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
response = new Response();
|
response = new Response();
|
||||||
response.action = "onException";
|
response.action = "onException";
|
||||||
@ -117,12 +104,9 @@ public class NodeCenterFrameHandler extends SimpleChannelInboundHandler<Object>
|
|||||||
StringBuilder ret = new StringBuilder();
|
StringBuilder ret = new StringBuilder();
|
||||||
int count = 0;
|
int count = 0;
|
||||||
for (String s : strs) {
|
for (String s : strs) {
|
||||||
if (s.contains("sun.reflect")
|
if (s.contains("sun.reflect") || s.contains("java.lang.reflect")
|
||||||
|| s.contains("java.lang.reflect")
|
|| s.contains("org.apache") || s.contains("java.util")
|
||||||
|| s.contains("org.apache")
|
|| s.contains("java.lang") || s.contains("io.netty")) {
|
||||||
|| s.contains("java.util")
|
|
||||||
|| s.contains("java.lang")
|
|
||||||
|| s.contains("io.netty")) {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
ret.append(s);
|
ret.append(s);
|
||||||
@ -140,7 +124,7 @@ public class NodeCenterFrameHandler extends SimpleChannelInboundHandler<Object>
|
|||||||
if (ctx != null) {
|
if (ctx != null) {
|
||||||
// System.out.println("[NodeCenterFrame send] TID:" + Thread.currentThread().getId() + "
|
// System.out.println("[NodeCenterFrame send] TID:" + Thread.currentThread().getId() + "
|
||||||
// isOpen:"
|
// isOpen:"
|
||||||
// + ctx.channel().isOpen() + " isActive:" + ctx.channel().isActive() + " -->" + json);
|
// + ctx.channel().isOpen() + " isActive:" + ctx.channel().isActive() + " -->" + json);
|
||||||
ByteBuf buf = Unpooled.wrappedBuffer(json.getBytes());
|
ByteBuf buf = Unpooled.wrappedBuffer(json.getBytes());
|
||||||
ctx.channel().writeAndFlush(buf);
|
ctx.channel().writeAndFlush(buf);
|
||||||
}
|
}
|
||||||
|
@ -39,35 +39,29 @@ public class NodeCenterWSFrameHandler extends SimpleChannelInboundHandler<WebSoc
|
|||||||
logActions = new LogActions(managerAction);
|
logActions = new LogActions(managerAction);
|
||||||
unitActions = new UnitActions(managerAction);
|
unitActions = new UnitActions(managerAction);
|
||||||
fileActions = new FileActions(this);
|
fileActions = new FileActions(this);
|
||||||
ae =
|
ae = new ActionExecutor<ResultCallback, JsonObject>(executorService, managerAction,
|
||||||
new ActionExecutor<ResultCallback, JsonObject>(
|
logActions, unitActions, fileActions, new MetaIndexAction(), new TracingAction()) {
|
||||||
executorService, managerAction, logActions, unitActions, fileActions, new MetaIndexAction(), new TracingAction()) {
|
@Override
|
||||||
@Override
|
public boolean checkPermission(Action a, JsonObject arg, long permission) {
|
||||||
public boolean checkPermission(Action a, JsonObject arg, long permission) {
|
// Permission userPermission = a.userPermission();
|
||||||
// Permission userPermission = a.userPermission();
|
// long val=userPermission.getValue();
|
||||||
// long val=userPermission.getValue();
|
long val = a.userPermission();
|
||||||
long val = a.userPermission();
|
String pubKey = managerAction.getPubKey(null);
|
||||||
String pubKey = managerAction.getPubKey(null);
|
String action = arg.get("action").getAsString();
|
||||||
String action = arg.get("action").getAsString();
|
LOGGER.debug("permission" + permission);
|
||||||
LOGGER.debug("permission" + permission);
|
LOGGER.debug("userPermission" + val);
|
||||||
LOGGER.debug("userPermission" + val);
|
NodeCenterServer.nodeHttpLogDB.put(action,
|
||||||
NodeCenterServer.nodeHttpLogDB.put(
|
"{\"action\":\"" + action + "\",\"pubKey\":\"" + pubKey + "\",\"date\":"
|
||||||
action,
|
+ System.currentTimeMillis() + "}");
|
||||||
"{\"action\":\""
|
|
||||||
+ action
|
|
||||||
+ "\",\"pubKey\":\""
|
|
||||||
+ pubKey
|
|
||||||
+ "\",\"date\":"
|
|
||||||
+ System.currentTimeMillis()
|
|
||||||
+ "}");
|
|
||||||
|
|
||||||
// if (val == 0) return true;
|
// if (val == 0) return true;
|
||||||
// return true;
|
// return true;
|
||||||
if ((permission & val) == val) {
|
if ((permission & val) == val) {
|
||||||
return true;
|
return true;
|
||||||
} else return false;
|
} else
|
||||||
}
|
return false;
|
||||||
};
|
}
|
||||||
|
};
|
||||||
for (String str : wsPluginActions) {
|
for (String str : wsPluginActions) {
|
||||||
Object obj = createInstanceByClzName(str);
|
Object obj = createInstanceByClzName(str);
|
||||||
ae.appendHandler(obj);
|
ae.appendHandler(obj);
|
||||||
@ -114,13 +108,13 @@ public class NodeCenterWSFrameHandler extends SimpleChannelInboundHandler<WebSoc
|
|||||||
response.action = "sendNextSegment";
|
response.action = "sendNextSegment";
|
||||||
try {
|
try {
|
||||||
boolean isSegment = false;
|
boolean isSegment = false;
|
||||||
if (map.has("isSegment")) isSegment = map.get("isSegment").getAsBoolean();
|
if (map.has("isSegment"))
|
||||||
|
isSegment = map.get("isSegment").getAsBoolean();
|
||||||
if (isSegment) {
|
if (isSegment) {
|
||||||
dataCache.append(map.get("data").getAsString());
|
dataCache.append(map.get("data").getAsString());
|
||||||
response = new Response();
|
response = new Response();
|
||||||
response.action = "sendNextSegment";
|
response.action = "sendNextSegment";
|
||||||
ctx.channel()
|
ctx.channel().writeAndFlush(new TextWebSocketFrame(JsonUtil.toJson(response)));
|
||||||
.writeAndFlush(new TextWebSocketFrame(JsonUtil.toJson(response)));
|
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
if (dataCache.length() > 0) {
|
if (dataCache.length() > 0) {
|
||||||
@ -133,32 +127,29 @@ public class NodeCenterWSFrameHandler extends SimpleChannelInboundHandler<WebSoc
|
|||||||
}
|
}
|
||||||
String action = map.get("action").getAsString();
|
String action = map.get("action").getAsString();
|
||||||
final JsonObject jmap = map;
|
final JsonObject jmap = map;
|
||||||
ae.handle(
|
ae.handle(action, map, new ResultCallback() {
|
||||||
action,
|
@Override
|
||||||
map,
|
public void onResult(Map jo) {
|
||||||
new ResultCallback() {
|
if (jmap.has("requestID")) {
|
||||||
@Override
|
jo.put("responseID", jmap.get("requestID"));
|
||||||
public void onResult(Map jo) {
|
}
|
||||||
if (jmap.has("requestID")) {
|
onResult(JsonUtil.toJson(jo));
|
||||||
jo.put("responseID", jmap.get("requestID"));
|
}
|
||||||
}
|
|
||||||
onResult(JsonUtil.toJson(jo));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onResult(JsonObject jo) {
|
public void onResult(JsonObject jo) {
|
||||||
if (jmap.has("requestID")) {
|
if (jmap.has("requestID")) {
|
||||||
jo.add("responseID", jmap.get("requestID"));
|
jo.add("responseID", jmap.get("requestID"));
|
||||||
}
|
}
|
||||||
onResult(jo.toString());
|
onResult(jo.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onResult(String ret) {
|
public void onResult(String ret) {
|
||||||
if (ret != null)
|
if (ret != null)
|
||||||
ctx.channel().writeAndFlush(new TextWebSocketFrame(ret));
|
ctx.channel().writeAndFlush(new TextWebSocketFrame(ret));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
response = new Response();
|
response = new Response();
|
||||||
response.action = "onException";
|
response.action = "onException";
|
||||||
@ -175,15 +166,22 @@ public class NodeCenterWSFrameHandler extends SimpleChannelInboundHandler<WebSoc
|
|||||||
String ret = "";
|
String ret = "";
|
||||||
int count = 0;
|
int count = 0;
|
||||||
for (String s : strs) {
|
for (String s : strs) {
|
||||||
if (s.contains("sun.reflect")) continue;
|
if (s.contains("sun.reflect"))
|
||||||
if (s.contains("java.lang.reflect")) continue;
|
continue;
|
||||||
if (s.contains("org.apache")) continue;
|
if (s.contains("java.lang.reflect"))
|
||||||
if (s.contains("java.util")) continue;
|
continue;
|
||||||
if (s.contains("java.lang")) continue;
|
if (s.contains("org.apache"))
|
||||||
if (s.contains("io.netty")) continue;
|
continue;
|
||||||
|
if (s.contains("java.util"))
|
||||||
|
continue;
|
||||||
|
if (s.contains("java.lang"))
|
||||||
|
continue;
|
||||||
|
if (s.contains("io.netty"))
|
||||||
|
continue;
|
||||||
ret += s;
|
ret += s;
|
||||||
ret += "\n";
|
ret += "\n";
|
||||||
if (count++ > 5) break;
|
if (count++ > 5)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
response.data = ret;
|
response.data = ret;
|
||||||
ctx.channel().writeAndFlush(new TextWebSocketFrame(JsonUtil.toJson(response)));
|
ctx.channel().writeAndFlush(new TextWebSocketFrame(JsonUtil.toJson(response)));
|
||||||
|
@ -31,13 +31,12 @@ import java.util.concurrent.TimeUnit;
|
|||||||
public class OtherNCProxy {
|
public class OtherNCProxy {
|
||||||
private static final Logger LOGGER = LogManager.getLogger(OtherNCProxy.class);
|
private static final Logger LOGGER = LogManager.getLogger(OtherNCProxy.class);
|
||||||
public static OtherNCProxy instance = new OtherNCProxy();
|
public static OtherNCProxy instance = new OtherNCProxy();
|
||||||
private final TreeMap<String, List<OtherNCInfo>> otherNodeCenterInfos = new TreeMap<>(); //key为NC节点的pubkey(非一致的)
|
private final TreeMap<String, List<OtherNCInfo>> otherNodeCenterInfos = new TreeMap<>(); // key为NC节点的pubkey(非一致的)
|
||||||
public Map<String, NCConnector> connList = new ConcurrentHashMap<>(); //连接别的NC key为ip:port
|
public Map<String, NCConnector> connList = new ConcurrentHashMap<>(); // 连接别的NC key为ip:port
|
||||||
public Set<String> ncAdds = ConcurrentHashMap.newKeySet(); //其他NC的ip:port
|
public Set<String> ncAdds = ConcurrentHashMap.newKeySet(); // 其他NC的ip:port
|
||||||
public SM2KeyPair sm2; //NC证书
|
public SM2KeyPair sm2; // NC证书
|
||||||
|
|
||||||
private OtherNCProxy() {
|
private OtherNCProxy() {}
|
||||||
}
|
|
||||||
|
|
||||||
// 从DB中加载OtherNC和NCFile的信息
|
// 从DB中加载OtherNC和NCFile的信息
|
||||||
public void init() {
|
public void init() {
|
||||||
@ -56,12 +55,8 @@ public class OtherNCProxy {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void periodUpdate() {
|
public void periodUpdate() {
|
||||||
NodeCenterServer.scheduledThreadPool.scheduleWithFixedDelay(
|
NodeCenterServer.scheduledThreadPool.scheduleWithFixedDelay(() -> {
|
||||||
() -> {
|
}, 0, 30, TimeUnit.SECONDS);
|
||||||
},
|
|
||||||
0,
|
|
||||||
30,
|
|
||||||
TimeUnit.SECONDS);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void loadOtherNCs() {
|
public void loadOtherNCs() {
|
||||||
@ -134,7 +129,7 @@ public class OtherNCProxy {
|
|||||||
return KeyValueDBUtil.instance.getValue(NCTables.NCFile.toString(), "filePath");
|
return KeyValueDBUtil.instance.getValue(NCTables.NCFile.toString(), "filePath");
|
||||||
}
|
}
|
||||||
|
|
||||||
//配置其他NC
|
// 配置其他NC
|
||||||
public String setOtherNCs(String add) {
|
public String setOtherNCs(String add) {
|
||||||
LOGGER.debug("setOtherNC: " + add);
|
LOGGER.debug("setOtherNC: " + add);
|
||||||
|
|
||||||
@ -143,7 +138,7 @@ public class OtherNCProxy {
|
|||||||
return getOtherNCs();
|
return getOtherNCs();
|
||||||
}
|
}
|
||||||
|
|
||||||
//配置NC文件
|
// 配置NC文件
|
||||||
public String setNCFile(String fileName) {
|
public String setNCFile(String fileName) {
|
||||||
LOGGER.debug("setNCFIle: " + fileName);
|
LOGGER.debug("setNCFIle: " + fileName);
|
||||||
|
|
||||||
@ -152,17 +147,18 @@ public class OtherNCProxy {
|
|||||||
return getNCFile();
|
return getNCFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
//本地更新
|
// 本地更新
|
||||||
public void updateOtherNCInfo(String nodePubkey, List<OtherNCInfo> list) {
|
public void updateOtherNCInfo(String nodePubkey, List<OtherNCInfo> list) {
|
||||||
LOGGER.debug("updateOtherNCInfo: ");
|
LOGGER.debug("updateOtherNCInfo: ");
|
||||||
|
|
||||||
synchronized (otherNodeCenterInfos) {
|
synchronized (otherNodeCenterInfos) {
|
||||||
otherNodeCenterInfos.put(nodePubkey, list);
|
otherNodeCenterInfos.put(nodePubkey, list);
|
||||||
LOGGER.debug("update route nodePubkey=" + nodePubkey + " list=" + JsonUtil.toJson(list));
|
LOGGER.debug(
|
||||||
|
"update route nodePubkey=" + nodePubkey + " list=" + JsonUtil.toJson(list));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//通过合约id或name在别的nc上查询信息
|
// 通过合约id或name在别的nc上查询信息
|
||||||
public String search(String id) {
|
public String search(String id) {
|
||||||
LOGGER.debug("search : " + id);
|
LOGGER.debug("search : " + id);
|
||||||
synchronized (otherNodeCenterInfos) {
|
synchronized (otherNodeCenterInfos) {
|
||||||
@ -170,7 +166,8 @@ public class OtherNCProxy {
|
|||||||
List<OtherNCInfo> list = otherNodeCenterInfos.get(pubKey);
|
List<OtherNCInfo> list = otherNodeCenterInfos.get(pubKey);
|
||||||
for (OtherNCInfo info : list) {
|
for (OtherNCInfo info : list) {
|
||||||
if (info.contractID.equals(id) || info.contractName.equals(id)) {
|
if (info.contractID.equals(id) || info.contractName.equals(id)) {
|
||||||
LOGGER.debug("[OtherNCProxy] find contract " + id + "pubKey is " + pubKey + " master is " + info.master + " from other NC route info");
|
LOGGER.debug("[OtherNCProxy] find contract " + id + "pubKey is " + pubKey
|
||||||
|
+ " master is " + info.master + " from other NC route info");
|
||||||
return pubKey + ";" + info.master;
|
return pubKey + ";" + info.master;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -179,7 +176,7 @@ public class OtherNCProxy {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//向其他NC发起同步
|
// 向其他NC发起同步
|
||||||
public void requestUpdate() {
|
public void requestUpdate() {
|
||||||
LOGGER.debug("sendUpdate: ");
|
LOGGER.debug("sendUpdate: ");
|
||||||
for (String add : instance.ncAdds) {
|
for (String add : instance.ncAdds) {
|
||||||
@ -207,7 +204,8 @@ public class OtherNCProxy {
|
|||||||
continue;
|
continue;
|
||||||
for (ContractDesp desp : node.contracts) {
|
for (ContractDesp desp : node.contracts) {
|
||||||
if (desp.type == ContractExecType.Sole || desp.getIsMaster()) {
|
if (desp.type == ContractExecType.Sole || desp.getIsMaster()) {
|
||||||
list.add(new OtherNCInfo(desp.contractID, desp.contractName, node.masterAddress));
|
list.add(new OtherNCInfo(desp.contractID, desp.contractName,
|
||||||
|
node.masterAddress));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -227,22 +225,18 @@ public class OtherNCProxy {
|
|||||||
b.group(group);
|
b.group(group);
|
||||||
NCConnector conn = new NCConnector(target, b, new NCClientHandler());
|
NCConnector conn = new NCConnector(target, b, new NCClientHandler());
|
||||||
connList.put(target, conn);
|
connList.put(target, conn);
|
||||||
b.channel(NioSocketChannel.class)
|
b.channel(NioSocketChannel.class).handler(new ChannelInitializer<SocketChannel>() {
|
||||||
.handler(
|
@Override
|
||||||
new ChannelInitializer<SocketChannel>() {
|
protected void initChannel(SocketChannel ch) {
|
||||||
@Override
|
ChannelPipeline p = ch.pipeline();
|
||||||
protected void initChannel(SocketChannel ch) {
|
p.addLast(new DelimiterCodec()).addLast(conn.handler);
|
||||||
ChannelPipeline p = ch.pipeline();
|
}
|
||||||
p.addLast(new DelimiterCodec()).addLast(conn.handler);
|
});
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
if (!conn.handler.isOpen()) {
|
if (!conn.handler.isOpen()) {
|
||||||
String[] ipAndPort = target.split(":");
|
String[] ipAndPort = target.split(":");
|
||||||
b.connect(ipAndPort[0], Integer.parseInt(ipAndPort[1]))
|
b.connect(ipAndPort[0], Integer.parseInt(ipAndPort[1])).sync().channel();
|
||||||
.sync()
|
|
||||||
.channel();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
reconnect(target);
|
reconnect(target);
|
||||||
@ -257,10 +251,7 @@ public class OtherNCProxy {
|
|||||||
NCConnector conn = connList.get(target);
|
NCConnector conn = connList.get(target);
|
||||||
if (!conn.handler.isOpen()) {
|
if (!conn.handler.isOpen()) {
|
||||||
String[] ipAndPort = conn.ipAndPort.split(":");
|
String[] ipAndPort = conn.ipAndPort.split(":");
|
||||||
conn.bootstrap
|
conn.bootstrap.connect(ipAndPort[0], Integer.parseInt(ipAndPort[1])).sync().channel();
|
||||||
.connect(ipAndPort[0], Integer.parseInt(ipAndPort[1]))
|
|
||||||
.sync()
|
|
||||||
.channel();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ import java.io.PrintStream;
|
|||||||
|
|
||||||
public class TracingAction {
|
public class TracingAction {
|
||||||
private static JsonObject getDependentContract(JsonObject jo) {
|
private static JsonObject getDependentContract(JsonObject jo) {
|
||||||
//考虑多层依赖
|
// 考虑多层依赖
|
||||||
JsonObject result = new JsonObject();
|
JsonObject result = new JsonObject();
|
||||||
JsonArray beDependent = new JsonArray();
|
JsonArray beDependent = new JsonArray();
|
||||||
String contractName = jo.get("contractName").getAsString();
|
String contractName = jo.get("contractName").getAsString();
|
||||||
@ -29,7 +29,8 @@ public class TracingAction {
|
|||||||
dependencies.add(val);
|
dependencies.add(val);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (desp.dependentContracts != null && desp.dependentContracts.contains(contractName)) {
|
if (desp.dependentContracts != null
|
||||||
|
&& desp.dependentContracts.contains(contractName)) {
|
||||||
beDependent.add(desp.contractName);
|
beDependent.add(desp.contractName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,8 @@ public class UnitActions {
|
|||||||
|
|
||||||
private static String convertContractName(String contractID) {
|
private static String convertContractName(String contractID) {
|
||||||
ContractDesp desp = NodeCenterActions.getContractByName(contractID);
|
ContractDesp desp = NodeCenterActions.getContractByName(contractID);
|
||||||
if (desp != null) return desp.contractID;
|
if (desp != null)
|
||||||
|
return desp.contractID;
|
||||||
return contractID;
|
return contractID;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47,10 +48,8 @@ public class UnitActions {
|
|||||||
long start = System.currentTimeMillis();
|
long start = System.currentTimeMillis();
|
||||||
final String pubKey = managerAction.getPubKey(json);
|
final String pubKey = managerAction.getPubKey(json);
|
||||||
List<KV> allunits = KeyValueDBUtil.instance.getKeyValues(NCTables.TrustUnitsDB.toString());
|
List<KV> allunits = KeyValueDBUtil.instance.getKeyValues(NCTables.TrustUnitsDB.toString());
|
||||||
if (pubKey != null
|
if (pubKey != null && KeyValueDBUtil.instance
|
||||||
&& KeyValueDBUtil.instance
|
.getValue(NCTables.ConfigDB.toString(), "__CenterManager__").contains(pubKey)) {
|
||||||
.getValue(NCTables.ConfigDB.toString(), "__CenterManager__")
|
|
||||||
.contains(pubKey)) {
|
|
||||||
simpleReply(resultCallback, "onListTrustUnits", allunits);
|
simpleReply(resultCallback, "onListTrustUnits", allunits);
|
||||||
LOGGER.debug("is center manager");
|
LOGGER.debug("is center manager");
|
||||||
long end = System.currentTimeMillis();
|
long end = System.currentTimeMillis();
|
||||||
@ -75,10 +74,8 @@ public class UnitActions {
|
|||||||
public void createTrustUnit(JsonObject json, ResultCallback resultCallback) {
|
public void createTrustUnit(JsonObject json, ResultCallback resultCallback) {
|
||||||
final String pubKey = managerAction.getPubKey(json);
|
final String pubKey = managerAction.getPubKey(json);
|
||||||
LOGGER.debug("[createTrustUnit] " + json.get("data").toString());
|
LOGGER.debug("[createTrustUnit] " + json.get("data").toString());
|
||||||
KeyValueDBUtil.instance.setValue(
|
KeyValueDBUtil.instance.setValue(NCTables.TrustUnitsDB.toString(),
|
||||||
NCTables.TrustUnitsDB.toString(),
|
pubKey + "_" + json.get("msg").getAsString(), json.get("data").toString());
|
||||||
pubKey + "_" + json.get("msg").getAsString(),
|
|
||||||
json.get("data").toString());
|
|
||||||
Map<String, Object> ret = new HashMap<>();
|
Map<String, Object> ret = new HashMap<>();
|
||||||
ret.put("action", "onCreateTrustUnit");
|
ret.put("action", "onCreateTrustUnit");
|
||||||
ret.put("status", "Success");
|
ret.put("status", "Success");
|
||||||
@ -87,27 +84,23 @@ public class UnitActions {
|
|||||||
|
|
||||||
@Action(userPermission = 1 << 6, async = true)
|
@Action(userPermission = 1 << 6, async = true)
|
||||||
public void deleteTrustUnit(JsonObject json, ResultCallback resultCallback) {
|
public void deleteTrustUnit(JsonObject json, ResultCallback resultCallback) {
|
||||||
// final String pubKey = managerAction.pubKey;
|
// final String pubKey = managerAction.pubKey;
|
||||||
LOGGER.debug(
|
LOGGER.debug("[deleteTrustUnit] before" + KeyValueDBUtil.instance
|
||||||
"[deleteTrustUnit] before"
|
.getValue(NCTables.TrustUnitsDB.toString(), json.get("data").getAsString()));
|
||||||
+ KeyValueDBUtil.instance.getValue(
|
KeyValueDBUtil.instance.delete(NCTables.TrustUnitsDB.toString(),
|
||||||
NCTables.TrustUnitsDB.toString(), json.get("data").getAsString()));
|
json.get("data").getAsString());
|
||||||
KeyValueDBUtil.instance.delete(
|
LOGGER.debug("[deleteTrustUnit] after" + KeyValueDBUtil.instance
|
||||||
NCTables.TrustUnitsDB.toString(), json.get("data").getAsString());
|
.getValue(NCTables.TrustUnitsDB.toString(), json.get("data").getAsString()));
|
||||||
LOGGER.debug(
|
|
||||||
"[deleteTrustUnit] after"
|
|
||||||
+ KeyValueDBUtil.instance.getValue(
|
|
||||||
NCTables.TrustUnitsDB.toString(), json.get("data").getAsString()));
|
|
||||||
Map<String, Object> ret = new HashMap<>();
|
Map<String, Object> ret = new HashMap<>();
|
||||||
ret.put("action", "onDeleteTrustUnit");
|
ret.put("action", "onDeleteTrustUnit");
|
||||||
ret.put("status", "Success");
|
ret.put("status", "Success");
|
||||||
resultCallback.onResult(ret);
|
resultCallback.onResult(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Action(async = true)
|
// @Action(async = true)
|
||||||
// public void executeContract(JsonObject args, final ResultCallback rc) {
|
// public void executeContract(JsonObject args, final ResultCallback rc) {
|
||||||
// executeContractTrustfully(args, rc);
|
// executeContractTrustfully(args, rc);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
@Action(async = true, userPermission = 1L << 6)
|
@Action(async = true, userPermission = 1L << 6)
|
||||||
public void getNodeTrustUnits(JsonObject json, ResultCallback resultCallback) {
|
public void getNodeTrustUnits(JsonObject json, ResultCallback resultCallback) {
|
||||||
@ -124,89 +117,88 @@ public class UnitActions {
|
|||||||
simpleReply(resultCallback, "onGetNodeTrustUnits", nodeunits);
|
simpleReply(resultCallback, "onGetNodeTrustUnits", nodeunits);
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Action(async = true, userPermission = 0)
|
// @Action(async = true, userPermission = 0)
|
||||||
// public void executeContractTrustfully(JsonObject args, final ResultCallback rc) {
|
// public void executeContractTrustfully(JsonObject args, final ResultCallback rc) {
|
||||||
// String contractID = args.get("contractID").getAsString();
|
// String contractID = args.get("contractID").getAsString();
|
||||||
//
|
//
|
||||||
// contractID = convertContractName(contractID);
|
// contractID = convertContractName(contractID);
|
||||||
//
|
//
|
||||||
// args.remove("contractID");
|
// args.remove("contractID");
|
||||||
// args.addProperty("contractID", contractID);
|
// args.addProperty("contractID", contractID);
|
||||||
// String requestID;
|
// String requestID;
|
||||||
// if (!args.has("requestID")) {
|
// if (!args.has("requestID")) {
|
||||||
// requestID = System.currentTimeMillis() + "_" + (int) (Math.random() * 10000);
|
// requestID = System.currentTimeMillis() + "_" + (int) (Math.random() * 10000);
|
||||||
// args.addProperty("requestID", requestID);
|
// args.addProperty("requestID", requestID);
|
||||||
// } else requestID = args.get("requestID").getAsString();
|
// } else requestID = args.get("requestID").getAsString();
|
||||||
// args.remove("action");
|
// args.remove("action");
|
||||||
// args.addProperty("action", "executeContractTrustfully");
|
// args.addProperty("action", "executeContractTrustfully");
|
||||||
// MultiPointContractInfo mInfo = NodeCenterActions.contractID2Members.get(contractID);
|
// MultiPointContractInfo mInfo = NodeCenterActions.contractID2Members.get(contractID);
|
||||||
// args.addProperty("seq", mInfo.getNextSeq());
|
// args.addProperty("seq", mInfo.getNextSeq());
|
||||||
// args.addProperty("needSeq", ContractType.needSeq(mInfo.type));
|
// args.addProperty("needSeq", ContractType.needSeq(mInfo.type));
|
||||||
// List<String> nodes = mInfo.members;
|
// List<String> nodes = mInfo.members;
|
||||||
// logger.debug("tid:" + Thread.currentThread().getId() + " contractID:" + contractID);
|
// logger.debug("tid:" + Thread.currentThread().getId() + " contractID:" + contractID);
|
||||||
// if (nodes == null) {
|
// if (nodes == null) {
|
||||||
// rc.onResult(
|
// rc.onResult(
|
||||||
// "{\"status\":\"Error\",\"result\":\"can't locate contract\",\"action\":\"onExecuteContractTrustfully\"}");
|
// "{\"status\":\"Error\",\"result\":\"can't locate
|
||||||
// } else {
|
// contract\",\"action\":\"onExecuteContractTrustfully\"}");
|
||||||
// mInfo.rcf.execute(requestID, rc, JsonUtil.toJson(args));
|
// } else {
|
||||||
// }
|
// mInfo.rcf.execute(requestID, rc, JsonUtil.toJson(args));
|
||||||
//
|
// }
|
||||||
// // add request cache,only for requestAll type contract
|
//
|
||||||
// if (ContractType.needSeq(mInfo.type)) {
|
// // add request cache,only for requestAll type contract
|
||||||
// RequestCache reqc = NodeCenterActions.getCache(contractID);
|
// if (ContractType.needSeq(mInfo.type)) {
|
||||||
// reqc.put(args.get("seq").getAsString(), args);
|
// RequestCache reqc = NodeCenterActions.getCache(contractID);
|
||||||
// }
|
// reqc.put(args.get("seq").getAsString(), args);
|
||||||
// }
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
//only for test ADSP
|
// only for test ADSP
|
||||||
// public static void testExecuteContract(JsonObject args, final ResultCallback rc) {
|
// public static void testExecuteContract(JsonObject args, final ResultCallback rc) {
|
||||||
// String contractID = args.get("contractID").getAsString();
|
// String contractID = args.get("contractID").getAsString();
|
||||||
//
|
//
|
||||||
// contractID = convertContractName(contractID);
|
// contractID = convertContractName(contractID);
|
||||||
//
|
//
|
||||||
// args.remove("contractID");
|
// args.remove("contractID");
|
||||||
// args.addProperty("contractID", contractID);
|
// args.addProperty("contractID", contractID);
|
||||||
// String requestID;
|
// String requestID;
|
||||||
// if (!args.has("requestID")) {
|
// if (!args.has("requestID")) {
|
||||||
// requestID = System.currentTimeMillis() + "_" + (int) (Math.random() * 10000);
|
// requestID = System.currentTimeMillis() + "_" + (int) (Math.random() * 10000);
|
||||||
// args.addProperty("requestID", requestID);
|
// args.addProperty("requestID", requestID);
|
||||||
// } else requestID = args.get("requestID").getAsString();
|
// } else requestID = args.get("requestID").getAsString();
|
||||||
// args.remove("action");
|
// args.remove("action");
|
||||||
// args.addProperty("action", "executeContractTrustfully");
|
// args.addProperty("action", "executeContractTrustfully");
|
||||||
// MultiPointContractInfo mInfo = NodeCenterActions.contractID2Members.get(contractID);
|
// MultiPointContractInfo mInfo = NodeCenterActions.contractID2Members.get(contractID);
|
||||||
// System.out.println("mInfo是空吗?" + mInfo == null);
|
// System.out.println("mInfo是空吗?" + mInfo == null);
|
||||||
//
|
//
|
||||||
// args.addProperty("seq", mInfo.getNextSeq());
|
// args.addProperty("seq", mInfo.getNextSeq());
|
||||||
// args.addProperty("needSeq", ContractType.needSeq(mInfo.type));
|
// args.addProperty("needSeq", ContractType.needSeq(mInfo.type));
|
||||||
// List<String> nodes = mInfo.members;
|
// List<String> nodes = mInfo.members;
|
||||||
// logger.debug("tid:" + Thread.currentThread().getId() + " contractID:" + contractID);
|
// logger.debug("tid:" + Thread.currentThread().getId() + " contractID:" + contractID);
|
||||||
// if (nodes == null) {
|
// if (nodes == null) {
|
||||||
// rc.onResult(
|
// rc.onResult(
|
||||||
// "{\"status\":\"Error\",\"result\":\"can't locate contract\",\"action\":\"onExecuteContractTrustfully\"}");
|
// "{\"status\":\"Error\",\"result\":\"can't locate
|
||||||
// } else {
|
// contract\",\"action\":\"onExecuteContractTrustfully\"}");
|
||||||
// mInfo.rcf.execute(requestID, rc, JsonUtil.toJson(args));
|
// } else {
|
||||||
// }
|
// mInfo.rcf.execute(requestID, rc, JsonUtil.toJson(args));
|
||||||
//
|
// }
|
||||||
// //add request cache,only for requestAll type contract
|
//
|
||||||
// if(ContractType.needSeq(mInfo.type)){
|
// //add request cache,only for requestAll type contract
|
||||||
// RequestCache reqc = NodeCenterActions.getCache(contractID);
|
// if(ContractType.needSeq(mInfo.type)){
|
||||||
// reqc.put(args.get("seq").getAsString(),args);
|
// RequestCache reqc = NodeCenterActions.getCache(contractID);
|
||||||
// }
|
// reqc.put(args.get("seq").getAsString(),args);
|
||||||
// }
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
@Action(async = true, userPermission = 1L << 6)
|
@Action(async = true, userPermission = 1L << 6)
|
||||||
public void listContractProcess(JsonObject args, final ResultCallback rc) {
|
public void listContractProcess(JsonObject args, final ResultCallback rc) {
|
||||||
List<ContractDesp> info = new ArrayList<>();
|
List<ContractDesp> info = new ArrayList<>();
|
||||||
LOGGER.debug(
|
LOGGER.debug("[contracts] " + JsonUtil.toPrettyJson(NodeCenterActions.nodeInfos));
|
||||||
"[contracts] "
|
LOGGER.debug("[cid2Nodes]" + JsonUtil.toPrettyJson(NodeCenterActions.contractID2Members));
|
||||||
+ JsonUtil.toPrettyJson(NodeCenterActions.nodeInfos));
|
|
||||||
LOGGER.debug(
|
|
||||||
"[cid2Nodes]"
|
|
||||||
+ JsonUtil.toPrettyJson(NodeCenterActions.contractID2Members));
|
|
||||||
for (String key : NodeCenterActions.contractID2Members.keySet()) {
|
for (String key : NodeCenterActions.contractID2Members.keySet()) {
|
||||||
ContractDesp desp = NodeCenterActions.getContractByID(key);
|
ContractDesp desp = NodeCenterActions.getContractByID(key);
|
||||||
if (desp != null) info.add(desp);
|
if (desp != null)
|
||||||
|
info.add(desp);
|
||||||
}
|
}
|
||||||
simpleReply(rc, "onListContractProcess", JsonUtil.toJson(info));
|
simpleReply(rc, "onListContractProcess", JsonUtil.toJson(info));
|
||||||
}
|
}
|
||||||
@ -214,15 +206,12 @@ public class UnitActions {
|
|||||||
@Action(userPermission = 1 << 6, async = true)
|
@Action(userPermission = 1 << 6, async = true)
|
||||||
public void listMultiPointContractProcess(JsonObject json, ResultCallback resultCallback) {
|
public void listMultiPointContractProcess(JsonObject json, ResultCallback resultCallback) {
|
||||||
List<ContractDesp> info = new ArrayList<>();
|
List<ContractDesp> info = new ArrayList<>();
|
||||||
LOGGER.debug(
|
LOGGER.debug("[contracts] " + JsonUtil.toPrettyJson(NodeCenterActions.nodeInfos));
|
||||||
"[contracts] "
|
LOGGER.debug("[cid2Nodes]" + JsonUtil.toPrettyJson(NodeCenterActions.contractID2Members));
|
||||||
+ JsonUtil.toPrettyJson(NodeCenterActions.nodeInfos));
|
|
||||||
LOGGER.debug(
|
|
||||||
"[cid2Nodes]"
|
|
||||||
+ JsonUtil.toPrettyJson(NodeCenterActions.contractID2Members));
|
|
||||||
for (String key : NodeCenterActions.contractID2Members.keySet()) {
|
for (String key : NodeCenterActions.contractID2Members.keySet()) {
|
||||||
ContractDesp desp = NodeCenterActions.getContractByID(key);
|
ContractDesp desp = NodeCenterActions.getContractByID(key);
|
||||||
if (desp != null) info.add(desp);
|
if (desp != null)
|
||||||
|
info.add(desp);
|
||||||
}
|
}
|
||||||
simpleReply(resultCallback, "onListMultiPointContractProcess", JsonUtil.toJson(info));
|
simpleReply(resultCallback, "onListMultiPointContractProcess", JsonUtil.toJson(info));
|
||||||
}
|
}
|
||||||
@ -251,7 +240,8 @@ public class UnitActions {
|
|||||||
String[] strs = args.get("nodeIDs").getAsString().split(",");
|
String[] strs = args.get("nodeIDs").getAsString().split(",");
|
||||||
Set<String> nodePubKeys = new HashSet<>(); // nodes' pubkey
|
Set<String> nodePubKeys = new HashSet<>(); // nodes' pubkey
|
||||||
for (String str : strs) {
|
for (String str : strs) {
|
||||||
if (str != null && str.length() > 0) nodePubKeys.add(str);
|
if (str != null && str.length() > 0)
|
||||||
|
nodePubKeys.add(str);
|
||||||
}
|
}
|
||||||
Map<String, String> nodes = new HashMap<>(); // node's pubKey-node'a name
|
Map<String, String> nodes = new HashMap<>(); // node's pubKey-node'a name
|
||||||
for (CMNode node : NodeCenterActions.nodeInfos.values()) {
|
for (CMNode node : NodeCenterActions.nodeInfos.values()) {
|
||||||
@ -264,9 +254,8 @@ public class UnitActions {
|
|||||||
simpleReply(rc, "onDistributeYPK", "empty nodes");
|
simpleReply(rc, "onDistributeYPK", "empty nodes");
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean result =
|
boolean result = SM2Util.plainStrVerify(pubKey,
|
||||||
SM2Util.plainStrVerify(
|
"DistributeYPK|" + projectName + "|" + pubKey, signature);
|
||||||
pubKey, "DistributeYPK|" + projectName + "|" + pubKey, signature);
|
|
||||||
LOGGER.info("[UnitAcitons] 验签:" + result + " -> projectName:" + projectName);
|
LOGGER.info("[UnitAcitons] 验签:" + result + " -> projectName:" + projectName);
|
||||||
|
|
||||||
String ypkType = projectName.split("_")[0];
|
String ypkType = projectName.split("_")[0];
|
||||||
@ -292,154 +281,154 @@ public class UnitActions {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Action(async = true, userPermission = 1L << 6)
|
// @Action(async = true, userPermission = 1L << 6)
|
||||||
// public void startContractMultiPoint(JsonObject args, final ResultCallback rc) {
|
// public void startContractMultiPoint(JsonObject args, final ResultCallback rc) {
|
||||||
// Map<String, String> request = new HashMap<String, String>();
|
// Map<String, String> request = new HashMap<String, String>();
|
||||||
// Contract contract = new Contract();
|
// Contract contract = new Contract();
|
||||||
// if (args.has("type")) {
|
// if (args.has("type")) {
|
||||||
// contract.setType(ContractType.valueOf(args.get("type").getAsString()));
|
// contract.setType(ContractType.valueOf(args.get("type").getAsString()));
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
// // this multiPointContractInfo problem
|
// // this multiPointContractInfo problem
|
||||||
// MultiPointContractInfo multiPointContractInfo = new MultiPointContractInfo();
|
// MultiPointContractInfo multiPointContractInfo = new MultiPointContractInfo();
|
||||||
// multiPointContractInfo.type = contract.getType();
|
// multiPointContractInfo.type = contract.getType();
|
||||||
//
|
//
|
||||||
// logger.debug("startContractMultiPoint:");
|
// logger.debug("startContractMultiPoint:");
|
||||||
// logger.debug(JsonUtil.toPrettyJson(args));
|
// logger.debug(JsonUtil.toPrettyJson(args));
|
||||||
// if (args.has("script")) contract.setScript(args.get("script").getAsString());
|
// if (args.has("script")) contract.setScript(args.get("script").getAsString());
|
||||||
// else if (args.has("path")) contract.setScript(args.get("path").getAsString());
|
// else if (args.has("path")) contract.setScript(args.get("path").getAsString());
|
||||||
// else if (args.has("projectName"))
|
// else if (args.has("projectName"))
|
||||||
// contract.setScript("/" + args.get("projectName").getAsString());
|
// contract.setScript("/" + args.get("projectName").getAsString());
|
||||||
// // contract.setScript("/" + args.get("projectName").getAsString() + "/manifest.json");
|
// // contract.setScript("/" + args.get("projectName").getAsString() + "/manifest.json");
|
||||||
//
|
//
|
||||||
// SM2 sm2 = new SM2();
|
// SM2 sm2 = new SM2();
|
||||||
// SM2KeyPair sm2Key = sm2.generateKeyPair();
|
// SM2KeyPair sm2Key = sm2.generateKeyPair();
|
||||||
// contract.setID(sm2Key.getPublicKeyStr().hashCode() + "");
|
// contract.setID(sm2Key.getPublicKeyStr().hashCode() + "");
|
||||||
// contract.setKey(sm2Key.getPrivateKey().toString(16));
|
// contract.setKey(sm2Key.getPrivateKey().toString(16));
|
||||||
// contract.setPublicKey(sm2Key.getPublicKeyStr());
|
// contract.setPublicKey(sm2Key.getPublicKeyStr());
|
||||||
//
|
//
|
||||||
// contract.setNodeCenterRepoDOI(DOIPMainServer4NC.repoIdentifier);
|
// contract.setNodeCenterRepoDOI(DOIPMainServer4NC.repoIdentifier);
|
||||||
// // 多点合约部署时,由NC预先注册一个DOI以备使用
|
// // 多点合约部署时,由NC预先注册一个DOI以备使用
|
||||||
// if (DoConfig.openContractDORegister) {
|
// if (DoConfig.openContractDORegister) {
|
||||||
// try {
|
// try {
|
||||||
// HandleService hs = new HandleService(HandleServiceUtils.hrRegister);
|
// HandleService hs = new HandleService(HandleServiceUtils.hrRegister);
|
||||||
// String tmpDOI = hs.registerContract(DOIPMainServer4NC.repoIdentifier);
|
// String tmpDOI = hs.registerContract(DOIPMainServer4NC.repoIdentifier);
|
||||||
// if (tmpDOI == "" || tmpDOI == null)
|
// if (tmpDOI == "" || tmpDOI == null)
|
||||||
// contract.setDOI("RegisterFailed");
|
// contract.setDOI("RegisterFailed");
|
||||||
// else
|
// else
|
||||||
// contract.setDOI(tmpDOI);
|
// contract.setDOI(tmpDOI);
|
||||||
// }
|
// }
|
||||||
// catch (Exception e) {
|
// catch (Exception e) {
|
||||||
// e.printStackTrace();
|
// e.printStackTrace();
|
||||||
// contract.setDOI("RegisterFailed");
|
// contract.setDOI("RegisterFailed");
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
// String[] nodeNames =
|
// String[] nodeNames =
|
||||||
// args.get("peersID").getAsString().split(","); // all nodes' peerID in the unit
|
// args.get("peersID").getAsString().split(","); // all nodes' peerID in the unit
|
||||||
// Set<String> nodeNameSet = new HashSet<>(); // nodes' peerID
|
// Set<String> nodeNameSet = new HashSet<>(); // nodes' peerID
|
||||||
// for (String str : nodeNames) {
|
// for (String str : nodeNames) {
|
||||||
// if (str != null && str.length() > 0) nodeNameSet.add(str);
|
// if (str != null && str.length() > 0) nodeNameSet.add(str);
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
// List<String> udpids = new ArrayList<>(); // nodes' udpID in the unit
|
// List<String> udpids = new ArrayList<>(); // nodes' udpID in the unit
|
||||||
//
|
//
|
||||||
// for (CMNode node : NodeCenterActions.nodeinfos.values()) {
|
// for (CMNode node : NodeCenterActions.nodeinfos.values()) {
|
||||||
// if (nodeNameSet.contains(node.nodeName)) {
|
// if (nodeNameSet.contains(node.nodeName)) {
|
||||||
// udpids.add(node.udpID);
|
// udpids.add(node.udpID);
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// final long curr = System.currentTimeMillis();
|
// final long curr = System.currentTimeMillis();
|
||||||
// String requestID = curr + "_" + (int) (Math.random() * 10000);
|
// String requestID = curr + "_" + (int) (Math.random() * 10000);
|
||||||
// NodeCenterActions.ResultCollector collector =
|
// NodeCenterActions.ResultCollector collector =
|
||||||
// new NodeCenterActions.ResultCollector(
|
// new NodeCenterActions.ResultCollector(
|
||||||
// requestID,
|
// requestID,
|
||||||
// new ResultCallback() {
|
// new ResultCallback() {
|
||||||
// @Override
|
// @Override
|
||||||
// public void onResult(String str) {
|
// public void onResult(String str) {
|
||||||
// Map<String, String> ret = new HashMap<>();
|
// Map<String, String> ret = new HashMap<>();
|
||||||
// ret.put("action", "onStartContractTrustfullyResult");
|
// ret.put("action", "onStartContractTrustfullyResult");
|
||||||
// ret.put("data", str);
|
// ret.put("data", str);
|
||||||
// ret.put("executionTime", (System.currentTimeMillis() - curr) + "");
|
// ret.put("executionTime", (System.currentTimeMillis() - curr) + "");
|
||||||
// rc.onResult(JsonUtil.toJson(ret));
|
// rc.onResult(JsonUtil.toJson(ret));
|
||||||
// }
|
// }
|
||||||
// },
|
// },
|
||||||
// udpids.size());
|
// udpids.size());
|
||||||
// NodeCenterActions.sync.sleepWithTimeout(requestID, collector, 20);
|
// NodeCenterActions.sync.sleepWithTimeout(requestID, collector, 20);
|
||||||
//
|
//
|
||||||
// // ArrayList<String> udpids=gson.fromJson(args.get("members"),
|
// // ArrayList<String> udpids=gson.fromJson(args.get("members"),
|
||||||
// // new TypeToken<ArrayList<String>>(){}.getType());
|
// // new TypeToken<ArrayList<String>>(){}.getType());
|
||||||
// Map<String, String> members = new HashMap<>(); // nodes' <udpID,udpAddress>
|
// Map<String, String> members = new HashMap<>(); // nodes' <udpID,udpAddress>
|
||||||
// for (int i = 0; i < udpids.size(); i++) {
|
// for (int i = 0; i < udpids.size(); i++) {
|
||||||
// members.put(
|
// members.put(
|
||||||
// udpids.get(i),
|
// udpids.get(i),
|
||||||
// NodeCenterActions.runner.getUDPAddr(Integer.valueOf(udpids.get(i)))
|
// NodeCenterActions.runner.getUDPAddr(Integer.valueOf(udpids.get(i)))
|
||||||
// + ":"
|
// + ":"
|
||||||
// + (i == 0)); // regard the first node as the master in the unit
|
// + (i == 0)); // regard the first node as the master in the unit
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
// List<String> nodes = new ArrayList<>(); // nodes' pubKey
|
// List<String> nodes = new ArrayList<>(); // nodes' pubKey
|
||||||
// for (CMNode node : NodeCenterActions.nodeinfos.values()) {
|
// for (CMNode node : NodeCenterActions.nodeinfos.values()) {
|
||||||
// if (nodeNameSet.contains(node.nodeName)) {
|
// if (nodeNameSet.contains(node.nodeName)) {
|
||||||
// nodes.add(node.pubKey);
|
// nodes.add(node.pubKey);
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
// request.put("memberStr", JsonUtil.toJson(members));
|
// request.put("memberStr", JsonUtil.toJson(members));
|
||||||
// request.put("isPrivate", args.get("isPrivate").getAsString());
|
// request.put("isPrivate", args.get("isPrivate").getAsString());
|
||||||
// request.put("pubKey", managerAction.pubKey);
|
// request.put("pubKey", managerAction.pubKey);
|
||||||
// request.put("action", "startContractTrustfully");
|
// request.put("action", "startContractTrustfully");
|
||||||
// request.put("requestID", requestID);
|
// request.put("requestID", requestID);
|
||||||
// multiPointContractInfo.members = nodes;
|
// multiPointContractInfo.members = nodes;
|
||||||
//
|
//
|
||||||
// contract.setNumOfCopies(1);
|
// contract.setNumOfCopies(1);
|
||||||
// switch (multiPointContractInfo.type) {
|
// switch (multiPointContractInfo.type) {
|
||||||
// case Sole:
|
// case Sole:
|
||||||
// logger.debug("Can't support Solo in multi-point mode");
|
// logger.debug("Can't support Solo in multi-point mode");
|
||||||
// return;
|
// return;
|
||||||
// case RequestOnce:
|
// case RequestOnce:
|
||||||
// multiPointContractInfo.rcf = new RequestOnceExecutor(multiPointContractInfo);
|
// multiPointContractInfo.rcf = new RequestOnceExecutor(multiPointContractInfo);
|
||||||
// break;
|
// break;
|
||||||
// case ResponseOnce:
|
// case ResponseOnce:
|
||||||
// multiPointContractInfo.rcf = new ResponseOnceExecutor(multiPointContractInfo);
|
// multiPointContractInfo.rcf = new ResponseOnceExecutor(multiPointContractInfo);
|
||||||
// break;
|
// break;
|
||||||
// case RequestAllResponseFirst:
|
// case RequestAllResponseFirst:
|
||||||
// multiPointContractInfo.rcf = new RequestAllExecutor(multiPointContractInfo, 1);
|
// multiPointContractInfo.rcf = new RequestAllExecutor(multiPointContractInfo, 1);
|
||||||
// contract.setNumOfCopies(nodes.size());
|
// contract.setNumOfCopies(nodes.size());
|
||||||
// break;
|
// break;
|
||||||
// case RequestAllResponseHalf:
|
// case RequestAllResponseHalf:
|
||||||
// multiPointContractInfo.rcf =
|
// multiPointContractInfo.rcf =
|
||||||
// new RequestAllExecutor(multiPointContractInfo, nodes.size() / 2 + 1);
|
// new RequestAllExecutor(multiPointContractInfo, nodes.size() / 2 + 1);
|
||||||
// contract.setNumOfCopies(nodes.size());
|
// contract.setNumOfCopies(nodes.size());
|
||||||
// break;
|
// break;
|
||||||
// case RequestAllResponseAll:
|
// case RequestAllResponseAll:
|
||||||
// multiPointContractInfo.rcf =
|
// multiPointContractInfo.rcf =
|
||||||
// new RequestAllExecutor(multiPointContractInfo, nodes.size());
|
// new RequestAllExecutor(multiPointContractInfo, nodes.size());
|
||||||
// contract.setNumOfCopies(nodes.size());
|
// contract.setNumOfCopies(nodes.size());
|
||||||
// break;
|
// break;
|
||||||
// }
|
// }
|
||||||
// NodeCenterActions.contractID2Members.put(contract.getID(), multiPointContractInfo);
|
// NodeCenterActions.contractID2Members.put(contract.getID(), multiPointContractInfo);
|
||||||
//
|
//
|
||||||
// request.put("contractStr", JsonUtil.toJson(contract));
|
// request.put("contractStr", JsonUtil.toJson(contract));
|
||||||
// String startReq = JsonUtil.toJson(request);
|
// String startReq = JsonUtil.toJson(request);
|
||||||
// logger.debug("启动合约:" + startReq);
|
// logger.debug("启动合约:" + startReq);
|
||||||
//
|
//
|
||||||
// for (String nodeID : nodes) {
|
// for (String nodeID : nodes) {
|
||||||
// CMNode node;
|
// CMNode node;
|
||||||
// node = NodeCenterActions.nodeinfos.get(nodeID);
|
// node = NodeCenterActions.nodeinfos.get(nodeID);
|
||||||
// node.connection.controller.sendMsg(startReq);
|
// node.connection.controller.sendMsg(startReq);
|
||||||
//
|
//
|
||||||
// if (!NodeCenterActions.recoverMap.containsKey(nodeID)) {
|
// if (!NodeCenterActions.recoverMap.containsKey(nodeID)) {
|
||||||
// NodeCenterActions.recoverMap.put(nodeID, new ConcurrentHashMap<>());
|
// NodeCenterActions.recoverMap.put(nodeID, new ConcurrentHashMap<>());
|
||||||
// }
|
// }
|
||||||
// ContractRecord record = new ContractRecord(contract.getID());
|
// ContractRecord record = new ContractRecord(contract.getID());
|
||||||
// record.members = new HashMap<>(members);
|
// record.members = new HashMap<>(members);
|
||||||
// NodeCenterActions.recoverMap.get(nodeID).put(contract.getID(), record);
|
// NodeCenterActions.recoverMap.get(nodeID).put(contract.getID(), record);
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
// rc.onResult(
|
// rc.onResult(
|
||||||
// "{\"status\":\"Success\",\"result\":\""
|
// "{\"status\":\"Success\",\"result\":\""
|
||||||
// + contract.getID()
|
// + contract.getID()
|
||||||
// + "\",\"action\":\"onStartTrustfulContract\"}");
|
// + "\",\"action\":\"onStartTrustfulContract\"}");
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,7 @@ public class PermissionHelper {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void listClusterHttpAction() {
|
public void listClusterHttpAction() {
|
||||||
ActionExecutor<ResultCallback, JsonObject> ae = NCHttpHandler.getActionExecutor();
|
ActionExecutor<ResultCallback, JsonObject> ae = NCHttpHandler.getActionExecutor();
|
||||||
Map<String, ActionExecutor.Pair<Method, Object>> handlers = ae.getHandlers();
|
Map<String, ActionExecutor.Pair<Method, Object>> handlers = ae.getHandlers();
|
||||||
EnumSet<Role> set = EnumSet.allOf(Role.class);
|
EnumSet<Role> set = EnumSet.allOf(Role.class);
|
||||||
set.remove(Role.ContractInstanceManager);
|
set.remove(Role.ContractInstanceManager);
|
||||||
@ -44,8 +44,8 @@ public class PermissionHelper {
|
|||||||
printActions(handlers, set);
|
printActions(handlers, set);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void printActions(
|
private void printActions(Map<String, ActionExecutor.Pair<Method, Object>> handlers,
|
||||||
Map<String, ActionExecutor.Pair<Method, Object>> handlers, EnumSet<Role> set) {
|
EnumSet<Role> set) {
|
||||||
List<Line> lines = new ArrayList<>();
|
List<Line> lines = new ArrayList<>();
|
||||||
for (String str : handlers.keySet()) {
|
for (String str : handlers.keySet()) {
|
||||||
Method m = handlers.get(str).first();
|
Method m = handlers.get(str).first();
|
||||||
@ -56,23 +56,23 @@ public class PermissionHelper {
|
|||||||
l.permission = a.userPermission();
|
l.permission = a.userPermission();
|
||||||
l.roles = "";
|
l.roles = "";
|
||||||
for (Role r : set)
|
for (Role r : set)
|
||||||
if ((r.getValue() & l.permission) == l.permission) l.roles += r.name() + ";";
|
if ((r.getValue() & l.permission) == l.permission)
|
||||||
if (l.roles.equals("CenterManager;NodeManager;Node;Anonymous;")) l.roles = "任意角色";
|
l.roles += r.name() + ";";
|
||||||
|
if (l.roles.equals("CenterManager;NodeManager;Node;Anonymous;"))
|
||||||
|
l.roles = "任意角色";
|
||||||
}
|
}
|
||||||
lines.sort(
|
lines.sort(new Comparator<Line>() {
|
||||||
new Comparator<Line>() {
|
@Override
|
||||||
@Override
|
public int compare(Line o1, Line o2) {
|
||||||
public int compare(Line o1, Line o2) {
|
return o1.action.compareTo(o2.action);
|
||||||
return o1.action.compareTo(o2.action);
|
}
|
||||||
}
|
});
|
||||||
});
|
lines.sort(new Comparator<Line>() {
|
||||||
lines.sort(
|
@Override
|
||||||
new Comparator<Line>() {
|
public int compare(Line o1, Line o2) {
|
||||||
@Override
|
return o1.roles.compareTo(o2.roles);
|
||||||
public int compare(Line o1, Line o2) {
|
}
|
||||||
return o1.roles.compareTo(o2.roles);
|
});
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Gson g = new GsonBuilder().setPrettyPrinting().create();
|
Gson g = new GsonBuilder().setPrettyPrinting().create();
|
||||||
for (Line l : lines) {
|
for (Line l : lines) {
|
||||||
|
@ -18,8 +18,7 @@ public class TestServer {
|
|||||||
public void channelActive(ChannelHandlerContext ctx) {
|
public void channelActive(ChannelHandlerContext ctx) {
|
||||||
LOGGER.info("active");
|
LOGGER.info("active");
|
||||||
System.out.println("======Active=======");
|
System.out.println("======Active=======");
|
||||||
ctx.channel()
|
ctx.channel().writeAndFlush("ACTIVE from Server")
|
||||||
.writeAndFlush("ACTIVE from Server")
|
|
||||||
.addListener(future -> LOGGER.info("Active Send Done!!"));
|
.addListener(future -> LOGGER.info("Active Send Done!!"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,192 +1,201 @@
|
|||||||
package org.bdware.bdserver.test;
|
package org.bdware.bdserver.test;
|
||||||
|
|
||||||
public class TestADSP {
|
public class TestADSP {
|
||||||
// public static Map<String,String> nodes = new HashMap<String,String>();
|
// public static Map<String,String> nodes = new HashMap<String,String>();
|
||||||
//
|
//
|
||||||
// private static volatile Boolean flag = false;
|
// private static volatile Boolean flag = false;
|
||||||
// private static int totalRequest = 10;
|
// private static int totalRequest = 10;
|
||||||
// private static int nodeCount = 5;
|
// private static int nodeCount = 5;
|
||||||
//
|
//
|
||||||
// public static String resultPath = "./testADSP/" + "result.txt";
|
// public static String resultPath = "./testADSP/" + "result.txt";
|
||||||
// public static String contractID = "counter";
|
// public static String contractID = "counter";
|
||||||
// public static String action = "executeContract";
|
// public static String action = "executeContract";
|
||||||
// public static String pubkey = "0480204f4ef341359a5f64fcb11baf9ca2e6706ac20cba36ca83066870cf2c1d5de6df67e24e68dde7934af9b31d94a6084281db3d32d5ce42ab8f75bf799aca05";
|
// public static String pubkey =
|
||||||
//
|
// "0480204f4ef341359a5f64fcb11baf9ca2e6706ac20cba36ca83066870cf2c1d5de6df67e24e68dde7934af9b31d94a6084281db3d32d5ce42ab8f75bf799aca05";
|
||||||
// public static String operation = "count";
|
//
|
||||||
// public static String arg = "1";
|
// public static String operation = "count";
|
||||||
//
|
// public static String arg = "1";
|
||||||
// public static String priKey = "63464fa9587bbf2a022b3d655f4ed49c7d9a4249de1079d52bd5a1fec3308719";
|
//
|
||||||
// public static String signature = "dfd07c00c5c89fb0f901bed132db4342f49f4560f34c15878636623d2a8716a2c93ad32eeb9ee9c4f1d905df292cb4a1a27aa0171f2856848ce07cfc8022e809";
|
// public static String priKey =
|
||||||
//
|
// "63464fa9587bbf2a022b3d655f4ed49c7d9a4249de1079d52bd5a1fec3308719";
|
||||||
// public static List<String> crashSeries = new ArrayList<String>();
|
// public static String signature =
|
||||||
// public static AtomicInteger crashIndex = new AtomicInteger();
|
// "dfd07c00c5c89fb0f901bed132db4342f49f4560f34c15878636623d2a8716a2c93ad32eeb9ee9c4f1d905df292cb4a1a27aa0171f2856848ce07cfc8022e809";
|
||||||
//
|
//
|
||||||
// public static ConcurrentSet<String> crashSet = new ConcurrentSet<String>();
|
// public static List<String> crashSeries = new ArrayList<String>();
|
||||||
// public static ConcurrentSet<String> recover = new ConcurrentSet<String>();
|
// public static AtomicInteger crashIndex = new AtomicInteger();
|
||||||
//
|
//
|
||||||
// public static TestTask tt;
|
// public static ConcurrentSet<String> crashSet = new ConcurrentSet<String>();
|
||||||
// public static int period = 3000;
|
// public static ConcurrentSet<String> recover = new ConcurrentSet<String>();
|
||||||
//
|
//
|
||||||
// static{
|
// public static TestTask tt;
|
||||||
// getSig();
|
// public static int period = 3000;
|
||||||
//
|
//
|
||||||
// nodes.put("zyx's book","0440023d13facddcefbd87f2bb622b1b2b6ca43eb84c0579b82450814233ce557bd7ad7852cd47f1d6df867c5413ecf3dd1954cdbf5a6da683e3a89095f091d83d");
|
// static{
|
||||||
// nodes.put("localNode1","0480f783cf63294224afbd19e175e5c7ea0c5c60ee115ed9e114fe2691eb28cc1680e5fec532d64c80d2f6b737e8b43b94d5a9c73206ac6235c50ff992133e4d38");
|
// getSig();
|
||||||
// nodes.put("localNode2","044e0c127e24407ee8a8abd4fe507b32b340ce9775317b8d7b5bb8e182745d6a45c57aaf867d80a5f816a7561564f9294c6aee5916f95e93c0011e16c28b9e849a");
|
//
|
||||||
// nodes.put("localNode3","0485040cfd94bec672bb8ba184856188963ee4ad339d247a76e2d9819f20e61bfad24ec763b1371998583f9dc0cf55c4d53cb1a2ec84c67aed1aa5203cc84fc78f");
|
// nodes.put("zyx's
|
||||||
// nodes.put("localNode4","");
|
// book","0440023d13facddcefbd87f2bb622b1b2b6ca43eb84c0579b82450814233ce557bd7ad7852cd47f1d6df867c5413ecf3dd1954cdbf5a6da683e3a89095f091d83d");
|
||||||
// nodes.put("localNode5","");
|
// nodes.put("localNode1","0480f783cf63294224afbd19e175e5c7ea0c5c60ee115ed9e114fe2691eb28cc1680e5fec532d64c80d2f6b737e8b43b94d5a9c73206ac6235c50ff992133e4d38");
|
||||||
//
|
// nodes.put("localNode2","044e0c127e24407ee8a8abd4fe507b32b340ce9775317b8d7b5bb8e182745d6a45c57aaf867d80a5f816a7561564f9294c6aee5916f95e93c0011e16c28b9e849a");
|
||||||
//
|
// nodes.put("localNode3","0485040cfd94bec672bb8ba184856188963ee4ad339d247a76e2d9819f20e61bfad24ec763b1371998583f9dc0cf55c4d53cb1a2ec84c67aed1aa5203cc84fc78f");
|
||||||
// //生成崩溃序列
|
// nodes.put("localNode4","");
|
||||||
// crashSeries.clear();
|
// nodes.put("localNode5","");
|
||||||
// for(int i = 1;i <= totalRequest;i++){
|
//
|
||||||
// int temp = i % nodeCount;
|
//
|
||||||
// if(temp == 0)
|
// //生成崩溃序列
|
||||||
// temp = nodeCount;
|
// crashSeries.clear();
|
||||||
// crashSeries.add("crash localNode" + temp);
|
// for(int i = 1;i <= totalRequest;i++){
|
||||||
// crashSeries.add("recover localNode" + temp);
|
// int temp = i % nodeCount;
|
||||||
// }
|
// if(temp == 0)
|
||||||
//
|
// temp = nodeCount;
|
||||||
// System.out.println("崩溃序列" + crashSeries.size());
|
// crashSeries.add("crash localNode" + temp);
|
||||||
//
|
// crashSeries.add("recover localNode" + temp);
|
||||||
// Timer timer = new Timer();
|
// }
|
||||||
// tt = new TestTask();
|
//
|
||||||
// timer.schedule(tt, new Date(), period);
|
// System.out.println("崩溃序列" + crashSeries.size());
|
||||||
// }
|
//
|
||||||
//
|
// Timer timer = new Timer();
|
||||||
// static class TestTask extends TimerTask {
|
// tt = new TestTask();
|
||||||
// @Override
|
// timer.schedule(tt, new Date(), period);
|
||||||
// public void run() {
|
// }
|
||||||
// if(TestADSP.getFlag()){
|
//
|
||||||
// int index = TestADSP.crashIndex.getAndIncrement();
|
// static class TestTask extends TimerTask {
|
||||||
// System.out.println("[TestADSP] index=" + TestADSP.crashIndex.get());
|
// @Override
|
||||||
//
|
// public void run() {
|
||||||
// String[] crash = TestADSP.crashSeries.get(index).split(" ");
|
// if(TestADSP.getFlag()){
|
||||||
// String pubKey = convertNameToPubkey(crash[1]);
|
// int index = TestADSP.crashIndex.getAndIncrement();
|
||||||
// switch (crash[0]){
|
// System.out.println("[TestADSP] index=" + TestADSP.crashIndex.get());
|
||||||
// case "crash":
|
//
|
||||||
// if(pubKey != null){
|
// String[] crash = TestADSP.crashSeries.get(index).split(" ");
|
||||||
// System.out.println("[TestADSP] 令节点 " + crash[1] + "崩溃");
|
// String pubKey = convertNameToPubkey(crash[1]);
|
||||||
// System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(System.currentTimeMillis())));
|
// switch (crash[0]){
|
||||||
// crashSet.add(pubKey);
|
// case "crash":
|
||||||
// }
|
// if(pubKey != null){
|
||||||
// break;
|
// System.out.println("[TestADSP] 令节点 " + crash[1] + "崩溃");
|
||||||
// case "recover":
|
// System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new
|
||||||
// if(pubKey != null){
|
// Date(System.currentTimeMillis())));
|
||||||
// if(crashSet.contains(pubKey)){
|
// crashSet.add(pubKey);
|
||||||
// crashSet.remove(pubKey);
|
// }
|
||||||
// }
|
// break;
|
||||||
// recover.add(pubKey);
|
// case "recover":
|
||||||
// System.out.println("[TestADSP] 令节点 " + crash[1] + "上线");
|
// if(pubKey != null){
|
||||||
// System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(System.currentTimeMillis())));
|
// if(crashSet.contains(pubKey)){
|
||||||
// }
|
// crashSet.remove(pubKey);
|
||||||
// break;
|
// }
|
||||||
// default:
|
// recover.add(pubKey);
|
||||||
// break;
|
// System.out.println("[TestADSP] 令节点 " + crash[1] + "上线");
|
||||||
// }
|
// System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new
|
||||||
//
|
// Date(System.currentTimeMillis())));
|
||||||
//
|
// }
|
||||||
// try {
|
// break;
|
||||||
// Thread.sleep(period / 2);
|
// default:
|
||||||
// } catch (InterruptedException e) {
|
// break;
|
||||||
// e.printStackTrace();
|
// }
|
||||||
// }
|
//
|
||||||
//
|
//
|
||||||
//
|
// try {
|
||||||
//
|
// Thread.sleep(period / 2);
|
||||||
// System.out.println("[TestADSP]发起请求 " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(System.currentTimeMillis())));
|
// } catch (InterruptedException e) {
|
||||||
// JsonObject jo = new JsonObject();
|
// e.printStackTrace();
|
||||||
// jo.addProperty("action", TestADSP.action);
|
// }
|
||||||
// jo.addProperty("contractID", TestADSP.contractID);
|
//
|
||||||
// jo.addProperty("operation", TestADSP.operation);
|
//
|
||||||
// jo.addProperty("arg", TestADSP.arg);
|
//
|
||||||
// jo.addProperty("pubkey",TestADSP.pubkey);
|
// System.out.println("[TestADSP]发起请求 " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new
|
||||||
// jo.addProperty("signature",TestADSP.signature);
|
// Date(System.currentTimeMillis())));
|
||||||
// UnitActions.testExecuteContract(jo,null);
|
// JsonObject jo = new JsonObject();
|
||||||
//
|
// jo.addProperty("action", TestADSP.action);
|
||||||
// if(index == (TestADSP.crashSeries.size() - 1)){
|
// jo.addProperty("contractID", TestADSP.contractID);
|
||||||
// System.out.println("测试停止!");
|
// jo.addProperty("operation", TestADSP.operation);
|
||||||
// TestADSP.setFlag(false);
|
// jo.addProperty("arg", TestADSP.arg);
|
||||||
// //TestADSP.check();
|
// jo.addProperty("pubkey",TestADSP.pubkey);
|
||||||
// }
|
// jo.addProperty("signature",TestADSP.signature);
|
||||||
// }//if
|
// UnitActions.testExecuteContract(jo,null);
|
||||||
// }
|
//
|
||||||
// }
|
// if(index == (TestADSP.crashSeries.size() - 1)){
|
||||||
//
|
// System.out.println("测试停止!");
|
||||||
// public static boolean getFlag(){
|
// TestADSP.setFlag(false);
|
||||||
// boolean temp;
|
// //TestADSP.check();
|
||||||
// synchronized (flag){
|
// }
|
||||||
// temp = flag;
|
// }//if
|
||||||
// }
|
// }
|
||||||
// return temp;
|
// }
|
||||||
// }
|
//
|
||||||
//
|
// public static boolean getFlag(){
|
||||||
// public static void setFlag(boolean temp){
|
// boolean temp;
|
||||||
// synchronized (flag){
|
// synchronized (flag){
|
||||||
// flag = temp;
|
// temp = flag;
|
||||||
// System.out.println("[TestADSP]设置flag为" + flag);
|
// }
|
||||||
// }
|
// return temp;
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
// public static void getSig(){
|
// public static void setFlag(boolean temp){
|
||||||
// String temp = contractID + "|" + operation + "|" + arg + "|" + pubkey;
|
// synchronized (flag){
|
||||||
// SM2 sm2 = new SM2();
|
// flag = temp;
|
||||||
// signature = sm2.sign(temp.getBytes(),priKey).toString();
|
// System.out.println("[TestADSP]设置flag为" + flag);
|
||||||
// }
|
// }
|
||||||
//
|
// }
|
||||||
// //查看结果输出文件
|
//
|
||||||
// public static void check() {
|
// public static void getSig(){
|
||||||
// tt.cancel();
|
// String temp = contractID + "|" + operation + "|" + arg + "|" + pubkey;
|
||||||
//
|
// SM2 sm2 = new SM2();
|
||||||
// int correct = 0;
|
// signature = sm2.sign(temp.getBytes(),priKey).toString();
|
||||||
// int incorrect = 0;
|
// }
|
||||||
// int unavailable = 0;
|
//
|
||||||
// int fileTotal = 0;
|
// //查看结果输出文件
|
||||||
//
|
// public static void check() {
|
||||||
// File file = new File("./front-cluster/testADSP/result.txt");
|
// tt.cancel();
|
||||||
// System.out.println(file.getAbsolutePath());
|
//
|
||||||
// StringBuilder result = new StringBuilder();
|
// int correct = 0;
|
||||||
// try{
|
// int incorrect = 0;
|
||||||
// BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));//构造一个BufferedReader类来读取文件
|
// int unavailable = 0;
|
||||||
//
|
// int fileTotal = 0;
|
||||||
// String s = null;
|
//
|
||||||
// while((s = br.readLine())!=null){//使用readLine方法,一次读一行
|
// File file = new File("./front-cluster/testADSP/result.txt");
|
||||||
// if(!s.equals("")){
|
// System.out.println(file.getAbsolutePath());
|
||||||
// fileTotal++;
|
// StringBuilder result = new StringBuilder();
|
||||||
// String str[] = s.split(" ");
|
// try{
|
||||||
// if(str[1].equals((Integer.parseInt(str[0]) + 1) + ".0")){
|
// BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file),
|
||||||
// correct++;
|
// "UTF-8"));//构造一个BufferedReader类来读取文件
|
||||||
// }else{
|
//
|
||||||
// incorrect++;
|
// String s = null;
|
||||||
// }
|
// while((s = br.readLine())!=null){//使用readLine方法,一次读一行
|
||||||
// }
|
// if(!s.equals("")){
|
||||||
// }
|
// fileTotal++;
|
||||||
// br.close();
|
// String str[] = s.split(" ");
|
||||||
//
|
// if(str[1].equals((Integer.parseInt(str[0]) + 1) + ".0")){
|
||||||
// }catch(Exception e){
|
// correct++;
|
||||||
// e.printStackTrace();
|
// }else{
|
||||||
// }
|
// incorrect++;
|
||||||
//
|
// }
|
||||||
// unavailable = totalRequest * 2 - fileTotal;
|
// }
|
||||||
//
|
// }
|
||||||
// System.out.println("共有" + totalRequest * 2 + "次请求,其中" + correct + "正确," + incorrect + "不正确," + unavailable + "不可用.");
|
// br.close();
|
||||||
// }
|
//
|
||||||
//
|
// }catch(Exception e){
|
||||||
// public static String convertNameToPubkey(String nodeName){
|
// e.printStackTrace();
|
||||||
// return nodes.get(nodeName);
|
// }
|
||||||
// }
|
//
|
||||||
//
|
// unavailable = totalRequest * 2 - fileTotal;
|
||||||
// public static String convertPubKeyToName(String pubkey){
|
//
|
||||||
// for(String key : nodes.keySet()){
|
// System.out.println("共有" + totalRequest * 2 + "次请求,其中" + correct + "正确," + incorrect + "不正确,"
|
||||||
// if(nodes.get(key).equals(pubkey)){
|
// + unavailable + "不可用.");
|
||||||
// return key;
|
// }
|
||||||
// }
|
//
|
||||||
// }
|
// public static String convertNameToPubkey(String nodeName){
|
||||||
// return null;
|
// return nodes.get(nodeName);
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
// public static void main(String[] args){
|
// public static String convertPubKeyToName(String pubkey){
|
||||||
// check();
|
// for(String key : nodes.keySet()){
|
||||||
// }
|
// if(nodes.get(key).equals(pubkey)){
|
||||||
|
// return key;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return null;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public static void main(String[] args){
|
||||||
|
// check();
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
@ -32,44 +32,44 @@ public class TestSearch {
|
|||||||
@Test
|
@Test
|
||||||
public void testIndexSearch() throws Exception {
|
public void testIndexSearch() throws Exception {
|
||||||
|
|
||||||
//1. 创建分词器(对搜索的关键词进行分词使用)
|
// 1. 创建分词器(对搜索的关键词进行分词使用)
|
||||||
//注意: 分词器要和创建索引的时候使用的分词器一模一样
|
// 注意: 分词器要和创建索引的时候使用的分词器一模一样
|
||||||
Analyzer analyzer = new StandardAnalyzer();
|
Analyzer analyzer = new StandardAnalyzer();
|
||||||
|
|
||||||
//2. 创建查询对象,
|
// 2. 创建查询对象,
|
||||||
//第一个参数: 默认查询域, 如果查询的关键字中带搜索的域名, 则从指定域中查询, 如果不带域名则从, 默认搜索域中查询
|
// 第一个参数: 默认查询域, 如果查询的关键字中带搜索的域名, 则从指定域中查询, 如果不带域名则从, 默认搜索域中查询
|
||||||
//第二个参数: 使用的分词器
|
// 第二个参数: 使用的分词器
|
||||||
QueryParser queryParser = new QueryParser("name", analyzer);
|
QueryParser queryParser = new QueryParser("name", analyzer);
|
||||||
|
|
||||||
//3. 设置搜索关键词
|
// 3. 设置搜索关键词
|
||||||
//华 OR 为 手 机
|
// 华 OR 为 手 机
|
||||||
Query query = queryParser.parse("华为手机");
|
Query query = queryParser.parse("华为手机");
|
||||||
|
|
||||||
//4. 创建Directory目录对象, 指定索引库的位置
|
// 4. 创建Directory目录对象, 指定索引库的位置
|
||||||
Directory dir = FSDirectory.open(Paths.get("E:\\dir"));
|
Directory dir = FSDirectory.open(Paths.get("E:\\dir"));
|
||||||
//5. 创建输入流对象
|
// 5. 创建输入流对象
|
||||||
IndexReader indexReader = DirectoryReader.open(dir);
|
IndexReader indexReader = DirectoryReader.open(dir);
|
||||||
//6. 创建搜索对象
|
// 6. 创建搜索对象
|
||||||
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
|
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
|
||||||
//7. 搜索, 并返回结果
|
// 7. 搜索, 并返回结果
|
||||||
//第二个参数: 是返回多少条数据用于展示, 分页使用
|
// 第二个参数: 是返回多少条数据用于展示, 分页使用
|
||||||
TopDocs topDocs = indexSearcher.search(query, 10);
|
TopDocs topDocs = indexSearcher.search(query, 10);
|
||||||
|
|
||||||
//获取查询到的结果集的总数, 打印
|
// 获取查询到的结果集的总数, 打印
|
||||||
System.out.println("=======count=======" + topDocs.totalHits);
|
System.out.println("=======count=======" + topDocs.totalHits);
|
||||||
|
|
||||||
//8. 获取结果集
|
// 8. 获取结果集
|
||||||
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
|
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
|
||||||
|
|
||||||
//9. 遍历结果集
|
// 9. 遍历结果集
|
||||||
if (scoreDocs != null) {
|
if (scoreDocs != null) {
|
||||||
for (ScoreDoc scoreDoc : scoreDocs) {
|
for (ScoreDoc scoreDoc : scoreDocs) {
|
||||||
//获取查询到的文档唯一标识, 文档id, 这个id是lucene在创建文档的时候自动分配的
|
// 获取查询到的文档唯一标识, 文档id, 这个id是lucene在创建文档的时候自动分配的
|
||||||
int docID = scoreDoc.doc;
|
int docID = scoreDoc.doc;
|
||||||
//通过文档id, 读取文档
|
// 通过文档id, 读取文档
|
||||||
Document doc = indexSearcher.doc(docID);
|
Document doc = indexSearcher.doc(docID);
|
||||||
System.out.println("==================================================");
|
System.out.println("==================================================");
|
||||||
//通过域名, 从文档中获取域值
|
// 通过域名, 从文档中获取域值
|
||||||
System.out.println("===id==" + doc.get("id"));
|
System.out.println("===id==" + doc.get("id"));
|
||||||
System.out.println("===name==" + doc.get("name"));
|
System.out.println("===name==" + doc.get("name"));
|
||||||
System.out.println("===price==" + doc.get("price"));
|
System.out.println("===price==" + doc.get("price"));
|
||||||
@ -79,6 +79,6 @@ public class TestSearch {
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//10. 关闭流
|
// 10. 关闭流
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user