Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
D
Distributed Computing and Network Fusion System
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
3
Issues
3
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
WirelessInformationCollaborate
Distributed Computing and Network Fusion System
Commits
23da4682
Commit
23da4682
authored
Jun 15, 2020
by
Elf
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改后的代码
parent
3100dd01
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
98 additions
and
86 deletions
+98
-86
bishe-edge-center/src/main/java/top/ninwoo/edgecenter/controller/IndexController.java
...ava/top/ninwoo/edgecenter/controller/IndexController.java
+27
-5
bishe-edge-center/src/main/java/top/ninwoo/edgecenter/controller/TransferTopoController.java
.../ninwoo/edgecenter/controller/TransferTopoController.java
+32
-0
bishe-edge-center/src/main/java/top/ninwoo/edgecenter/service/LogicTopoService.java
.../java/top/ninwoo/edgecenter/service/LogicTopoService.java
+2
-5
bishe-edge-center/src/main/java/top/ninwoo/edgecenter/service/impl/LogicTopoServiceImpl.java
.../ninwoo/edgecenter/service/impl/LogicTopoServiceImpl.java
+37
-76
No files found.
bishe-edge-center/src/main/java/top/ninwoo/edgecenter/controller/IndexController.java
View file @
23da4682
...
...
@@ -152,7 +152,6 @@ public class IndexController {
// 创建网络
// 使用topo创建工具
topologyService
.
createTopo
(
clusterConfig
.
getId
(),
clusterConfig
.
getTopology
());
logicTopoService
.
saveIPlist
(
clusterConfig
.
getId
(),
clusterConfig
.
getTopology
().
getAppNames
());
return
resMap
;
}
...
...
@@ -317,16 +316,21 @@ public class IndexController {
}
//下发逻辑拓扑
@RequestMapping
(
value
=
"/sendLogicTopo"
,
method
=
RequestMethod
.
POST
)
public
void
sendLogicTopo
(
@RequestBody
ClusterConfig
clusterConfig
)
{
// 创建网络
public
String
sendLogicTopo
(
@RequestBody
ClusterConfig
clusterConfig
)
{
if
(
clusterConfig
==
null
){
return
"请传入正确的集群设置"
;
}
// 使用topo创建工具
logicTopoService
.
creatLogicTopo
(
clusterConfig
.
getId
(),
clusterConfig
.
getTopology
());
String
res
=
logicTopoService
.
creatLogicTopo
(
clusterConfig
.
getId
(),
clusterConfig
.
getTopology
());
//System.out.println("ok");
//return "sucess"
;
return
res
;
}
//修改逻辑拓扑
@RequestMapping
(
value
=
"/adjustLogicTopo"
,
method
=
RequestMethod
.
POST
)
public
String
adjustLogicTopo
(
@RequestBody
ClusterConfig
clusterConfig
)
{
if
(
clusterConfig
==
null
){
return
"请传入正确的集群设置"
;
}
// 判断id
if
(
clusterConfig
.
getId
()
==
0
)
{
return
"没有设置clusterid"
;
...
...
@@ -335,4 +339,22 @@ public class IndexController {
//System.out.println("ok?");
return
res1
;
}
//
@GetMapping
(
"/getIPbyName"
)
public
String
getIPbyname
(
@RequestParam
(
name
=
"appname"
)
String
appname
,
@RequestParam
(
name
=
"clusterId"
)
long
clusterId
)
{
Set
<
String
>
cid
=
clusterService
.
getContainerIdsByClusterId
(
clusterId
,
appname
);
if
(
cid
==
null
){
System
.
out
.
println
(
"错误的clusterID"
);
return
"获取失败"
;
}
String
appID
=
((
String
)
cid
.
toArray
()[
0
]);
if
(
appID
==
null
){
System
.
out
.
println
(
"错误的appnmae"
);
return
"获取失败"
;
}
String
appIP
=
ipService
.
getContainerIp
(
appID
).
split
(
"/"
)[
0
];
return
appIP
;
}
}
\ No newline at end of file
bishe-edge-center/src/main/java/top/ninwoo/edgecenter/controller/
Docker
Controller.java
→
bishe-edge-center/src/main/java/top/ninwoo/edgecenter/controller/
TransferTopo
Controller.java
View file @
23da4682
...
...
@@ -5,53 +5,28 @@ import org.springframework.web.bind.annotation.GetMapping;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
top.ninwoo.edgecenter.service.ClusterService
;
import
top.ninwoo.edgecenter.service.IpService
;
import
top.ninwoo.edgecenter.service.LogicTopoService
;
import
java.util.List
;
import
java.util.Set
;
import
java.util.concurrent.ConcurrentHashMap
;
@RestController
@RequestMapping
(
"/dockerData"
)
public
class
DockerController
{
@Autowired
private
IpService
ipService
;
@Autowired
ClusterService
clusterService
;
public
class
TransferTopoController
{
@Autowired
private
LogicTopoService
logicTopoService
;
//要将过去的删除掉
@GetMapping
(
"/getIPlist"
)
public
List
<
String
>
getIPlist
()
{
System
.
out
.
println
(
"已返回IPlist"
);
return
logicTopoService
.
getIPlist
();
public
List
<
String
>
getIPlist
(
@RequestParam
(
name
=
"clusterId"
)
long
clusterId
)
{
//
System.out.println("已返回IPlist");
return
logicTopoService
.
getIPlist
(
clusterId
);
}
//需下发逻辑拓扑后才能获得
,todo
//需下发逻辑拓扑后才能获得
@GetMapping
(
"/getTopo"
)
public
int
[][]
getTopo
()
{
System
.
out
.
println
(
"已返回topo"
);
return
logicTopoService
.
getTopo
(
11111
l
);
public
int
[][]
getTopo
(
@RequestParam
(
name
=
"clusterId"
)
long
clusterId
)
{
//
System.out.println("已返回topo");
return
logicTopoService
.
getTopo
(
clusterId
);
}
@GetMapping
(
"/getIPbyName"
)
public
String
getIPbyname
(
@RequestParam
(
name
=
"appname"
)
String
appname
)
{
//System.out.println("接受到消息了");
//System.out.println(appname);
//这里可能以后要加个传入的集群ID
Set
<
String
>
cid1
=
clusterService
.
getContainerIdsByClusterId
(
11111
l
,
appname
);
//System.out.println(cid1);
String
appID1
=
((
String
)
cid1
.
toArray
()[
0
]);
//System.out.println(appID1);
String
appIP1
=
ipService
.
getContainerIp
(
appID1
).
split
(
"/"
)[
0
];
System
.
out
.
println
(
appIP1
);
return
appIP1
;
}
}
bishe-edge-center/src/main/java/top/ninwoo/edgecenter/service/LogicTopoService.java
View file @
23da4682
package
top.ninwoo.edgecenter.service
;
import
top.ninwoo.common.entity.ClusterConfig
;
import
top.ninwoo.common.entity.NetworkTopology
;
import
java.util.List
;
...
...
@@ -8,16 +7,14 @@ import java.util.List;
//逻辑网络
public
interface
LogicTopoService
{
//通过逻辑拓扑创造逻辑网络
void
creatLogicTopo
(
long
clusterId
,
NetworkTopology
logictopo
);
String
creatLogicTopo
(
long
clusterId
,
NetworkTopology
logictopo
);
//调整逻辑网络
String
modifyLogicTopology
(
long
clusterId
,
NetworkTopology
logictopo
);
//得到逻辑拓扑
NetworkTopology
getLogictopo
(
NetworkTopology
oritopo
);
//储存IPlist
void
saveIPlist
(
long
clusterId
,
String
[]
appnames
);
//返回topo到docker容器端
int
[][]
getTopo
(
long
clusterId
);
//返回IPlist到docker容器端
List
<
String
>
getIPlist
();
List
<
String
>
getIPlist
(
long
clusterId
);
}
bishe-edge-center/src/main/java/top/ninwoo/edgecenter/service/impl/LogicTopoServiceImpl.java
View file @
23da4682
...
...
@@ -22,63 +22,60 @@ public class LogicTopoServiceImpl implements LogicTopoService {
// 用于存储集群的拓扑
private
ConcurrentHashMap
<
Long
,
NetworkTopology
>
clustersTopo
=
new
ConcurrentHashMap
<>();
//根据appnames来存储IP
private
List
<
String
>
IPlist
=
new
ArrayList
<
String
>();
@Value
(
"${bs.sdn-controller.host}"
)
private
String
host
;
@Value
(
"${bs.sdn-controller.port}"
)
private
int
port
;
private
ConcurrentHashMap
<
Long
,
List
<
String
>>
clustersIPlist
=
new
ConcurrentHashMap
<>();
@Autowired
ClusterService
clusterService
;
private
ClusterService
clusterService
;
@Autowired
IpService
ipService
;
private
IpService
ipService
;
@Autowired
IptablesService
iptablesService
;
private
IptablesService
iptablesService
;
@Override
public
void
creatLogicTopo
(
long
clusterId
,
NetworkTopology
oldtopo
)
{
public
String
creatLogicTopo
(
long
clusterId
,
NetworkTopology
oldtopo
)
{
List
<
String
>
IPlist
=
new
ArrayList
<
String
>();
NetworkTopology
logictopo
=
this
.
getLogictopo
(
oldtopo
);
if
(
logictopo
==
null
)
{
LOG
.
warn
(
"集群["
+
clusterId
+
"]未设置网络"
);
return
;
return
"集群创建失败"
;
}
// 校验信息
String
[]
cNames
=
logictopo
.
getAppNames
();
int
[][]
topo
=
logictopo
.
getTopology
();
if
(
cNames
==
null
||
cNames
.
length
<=
1
)
{
return
;
return
"集群创建失败"
;
}
/*
// 这里声明:cNames中不包含ovs虚拟机,仅包含docker容器组成的逻辑拓扑
for (int i = 1; i < cNames.length; i++) {
for (int j = 0; j < i; j++) {
// 判断每一个节点的连接状态
if (topo[i][j] == 0) {
// 如果判断为0,添加IPtabale,使其断开
this.addDropIPtable(clusterId, cNames[i], cNames[j]);
}
for
(
int
k
=
0
;
k
<
cNames
.
length
;
k
++){
Set
<
String
>
cid
=
clusterService
.
getContainerIdsByClusterId
(
clusterId
,
cNames
[
k
]);
if
(
cid
==
null
){
System
.
out
.
println
(
"错误的clusterID"
);
return
"获取失败"
;
}
String
appID
=
((
String
)
cid
.
toArray
()[
0
]);
if
(
appID
==
null
){
System
.
out
.
println
(
"错误的appnmae"
);
return
"获取失败"
;
}
String
appIP
=
ipService
.
getContainerIp
(
appID
).
split
(
"/"
)[
0
];
*/
IPlist
.
add
(
appIP
);
}
clustersTopo
.
put
(
clusterId
,
logictopo
);
clustersIPlist
.
put
(
clusterId
,
IPlist
);
return
"success"
;
}
@Override
public
String
modifyLogicTopology
(
long
clusterId
,
NetworkTopology
oldtopo
)
{
//System.out.println("我运行了么?");
NetworkTopology
logictopo
=
this
.
getLogictopo
(
oldtopo
);
// 先进行校验
if
(
logictopo
==
null
)
{
System
.
out
.
println
(
"topoloy不能为空"
);
LOG
.
error
(
"topoloy不能为空"
);
return
"topoloy不能为空"
;
}
...
...
@@ -91,48 +88,26 @@ public class LogicTopoServiceImpl implements LogicTopoService {
NetworkTopology
origTopo
=
clustersTopo
.
get
(
clusterId
);
// 校验topoId是否一致
if
(
origTopo
.
getTopologyId
()
!=
logictopo
.
getTopologyId
())
{
System
.
out
.
println
(
"不是相同的网络拓扑,无法更改"
);
LOG
.
error
(
"不是相同的网络拓扑,无法更改"
);
return
"不是相同的网络拓扑,无法更改"
;
}
// 校验成员名称是否相同
for
(
int
i
=
0
;
i
<
origTopo
.
getAppNames
().
length
;
i
++)
{
if
(!
origTopo
.
getAppNames
()[
i
].
equals
(
logictopo
.
getAppNames
()[
i
]))
{
System
.
out
.
println
(
"App名称必须一致"
);
LOG
.
error
(
"App名称必须一致"
);
return
"App名称必须一致"
;
}
}
int
[][]
origTopoArr
=
origTopo
.
getTopology
();
int
[][]
newTopoArr
=
logictopo
.
getTopology
();
//System.out.println("康康我的新拓扑怎样呢");
//System.out.println(newTopoArr[2][1]);
// 校验topo是否一致
if
((
origTopoArr
.
length
!=
newTopoArr
.
length
)
||
(
origTopoArr
[
0
].
length
!=
newTopoArr
[
0
].
length
))
{
System
.
out
.
println
(
"拓扑大小不一致"
);
LOG
.
error
(
"拓扑大小不一致"
);
return
"拓扑大小不一致"
;
}
/*
//System.out.println("终于要更新网络了啦");
// 更新网络拓扑
for (int i = 1; i < newTopoArr.length; i++) {
for (int j = 0; j < i; j++) {
//增加新的 dropIPtable
if (origTopoArr[i][j] == 1 && newTopoArr[i][j] == 0) {
// 创建新的连接
this.addDropIPtable(clusterId, origTopo.getAppNames()[i], origTopo.getAppNames()[j]);
//System.out.println("改了一次");
} else if (origTopoArr[i][j] == 0 && newTopoArr[i][j] == 1) {
// 删除旧的连接
this.addDelDropIPtable(clusterId, origTopo.getAppNames()[i], origTopo.getAppNames()[j]);
//System.out.println("gaile");
}
}
}
*/
clustersTopo
.
put
(
clusterId
,
logictopo
);
return
"success"
;
...
...
@@ -195,35 +170,21 @@ public class LogicTopoServiceImpl implements LogicTopoService {
iptablesService
.
dropTraffic
(
appID2
,
appIP1
,
appIP2
);
}
@Override
public
void
saveIPlist
(
long
clusterId
,
String
[]
appnames
){
//获取appnames
//todo 这里用dowhile似乎更快些
int
flag
=
0
;
for
(
int
i
=
0
;
i
<
appnames
.
length
-
1
;
i
++)
{
if
(
appnames
[
i
].
startsWith
(
"br:"
))
{
break
;
}
flag
++;
}
for
(
int
k
=
0
;
k
<
flag
;
k
++){
Set
<
String
>
cid
=
clusterService
.
getContainerIdsByClusterId
(
clusterId
,
appnames
[
k
]);
String
appID
=
((
String
)
cid
.
toArray
()[
0
]);
String
appIP
=
ipService
.
getContainerIp
(
appID
).
split
(
"/"
)[
0
];
IPlist
.
add
(
appIP
);
}
System
.
out
.
println
(
"已储存IPlist"
);
}
@Override
public
int
[][]
getTopo
(
long
clusterId
)
{
if
(!
clustersTopo
.
containsKey
(
clusterId
)){
LOG
.
error
(
"没有该集群的Topo"
);
return
null
;
}
return
clustersTopo
.
get
(
clusterId
).
getTopology
();
}
@Override
public
List
<
String
>
getIPlist
()
{
return
IPlist
;
public
List
<
String
>
getIPlist
(
long
clusterId
)
{
if
(!
clustersIPlist
.
containsKey
(
clusterId
)){
LOG
.
error
(
"没有该集群的IPlist"
);
return
new
ArrayList
<
String
>();
}
return
clustersIPlist
.
get
(
clusterId
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment