Skip to content

Commit

Permalink
增加TRACKER_PROTO_CMD_STORAGE_JOIN包处理
Browse files Browse the repository at this point in the history
  • Loading branch information
jiang jianfeng committed Jul 21, 2017
1 parent d85c92e commit 61be86b
Show file tree
Hide file tree
Showing 9 changed files with 187 additions and 8 deletions.
10 changes: 10 additions & 0 deletions src/main/java/io/mybear/common/constants/CommonConstant.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,14 @@ public class CommonConstant {
* 日志格式
*/
public static final String LOG_FORMAT = "method={}, params={},result={}";

public static final int MAX_PATH_SIZE = 256;

public static final int FDFS_GROUP_NAME_MAX_LEN = 16;

public static final int FDFS_MAX_TRACKERS = 16;

public static final int FDFS_VERSION_SIZE = 6;

public static final int FDFS_DOMAIN_NAME_MAX_SIZE = 128;
}
3 changes: 3 additions & 0 deletions src/main/java/io/mybear/tracker/FdfsTrackerd.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,9 @@ public static void main(String[] args) throws IOException{
NIOAcceptor server = new NIOAcceptor("Tracker Server", ip, port, connectionFactory, reactorPool);
server.start();

//
TrackerGlobal.gUpTime.setTime(System.currentTimeMillis());

// server started
logger.info(server.getName() + " is started and listening on " + server.getPort());
}
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/io/mybear/tracker/TrackerGlobal.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
package io.mybear.tracker;

import java.util.Date;

/**
* Created by jamie on 2017/6/21.
*/
public class TrackerGlobal {
public static final int DEFAULT_SERVER_PORT = 22122;

public static Date gUpTime = new Date(0l);
}
5 changes: 4 additions & 1 deletion src/main/java/io/mybear/tracker/TrackerProto.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ public class TrackerProto {
// 解析fdfs消息头部
public static final byte FDFS_PROTO_CMD_HEAD = 0;

// storage heart beat
// storage启动后连接tracker
public static final byte TRACKER_PROTO_CMD_STORAGE_JOIN = 81;

// storage发送的心跳
public static final byte TRACKER_PROTO_CMD_STORAGE_BEAT = 83;
}
39 changes: 39 additions & 0 deletions src/main/java/io/mybear/tracker/command/StorageJoinCommand.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package io.mybear.tracker.command;

import io.mybear.common.ErrorNo;
import io.mybear.common.constants.CommonConstant;
import io.mybear.net2.tracker.TrackerConnection;
import io.mybear.net2.tracker.TrackerMessage;
import io.mybear.tracker.types.FdfsStorageJoinBody;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class StorageJoinCommand extends TrackerCommand {
private static final Logger logger = LoggerFactory.getLogger(StorageJoinCommand.class);

// 具体数值待定
public static final int STORAGE_JOIN_PACKET_LENGTH = 348;

@Override
public void handle(TrackerConnection conn, TrackerMessage message) {
logger.debug("deal with storage join");

byte state = 0;
if(message.getPkgLen() < STORAGE_JOIN_PACKET_LENGTH){
logger.error("cmd={}, client ip: {}, package size {} is not correct, expect length >= {}"
, message.getCmd(), conn.getHost(), message.getPkgLen(), STORAGE_JOIN_PACKET_LENGTH);
state = ErrorNo.EINVAL;
}

FdfsStorageJoinBody joinBody = new FdfsStorageJoinBody();
joinBody.setTrackerCount(message.readLong());
if(joinBody.getTrackerCount() <= 0 || joinBody.getTrackerCount() > CommonConstant.FDFS_MAX_TRACKERS){
logger.error("cmd={}, client ip: {}, tracker count {} is invalid, it <= 0 or > {}"
, message.getCmd(), conn.getHost(), joinBody.getTrackerCount(), CommonConstant.FDFS_MAX_TRACKERS);
state = ErrorNo.EINVAL;
}



}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package io.mybear.tracker.command;

import io.mybear.net2.Connection;
import io.mybear.net2.tracker.TrackerConnection;
import io.mybear.net2.tracker.TrackerMessage;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,18 @@
import io.mybear.tracker.TrackerProto;

public class TrackerCommandFactory {
public static final StorageBeatCommand STORAGE_BEAT_COMMAND_HANDLER = new StorageBeatCommand();

public static final StorageBeatCommand STORAGE_JOIN_COMMAND_HANDLER = new StorageBeatCommand();

public static TrackerCommand getHandler(byte cmd){
switch(cmd){
case TrackerProto.TRACKER_PROTO_CMD_STORAGE_BEAT:
return new StorageBeatCommand();
return STORAGE_BEAT_COMMAND_HANDLER;

case TrackerProto.TRACKER_PROTO_CMD_STORAGE_JOIN:
return STORAGE_JOIN_COMMAND_HANDLER;

default:
throw new RuntimeException("command[" + cmd + "] not supported.");
}
Expand Down
113 changes: 113 additions & 0 deletions src/main/java/io/mybear/tracker/types/FdfsStorageJoinBody.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
package io.mybear.tracker.types;

import io.mybear.common.constants.CommonConstant;

public class FdfsStorageJoinBody {
private int storagePort;
private int storageHttpPort;
private int storePathCount;
private int subdirCountPerPath;
private int uploadPriority;
private int joinTime;
private int upTime;

private byte[] version = new byte[CommonConstant.FDFS_VERSION_SIZE];
private byte[] groupName = new byte[CommonConstant.FDFS_GROUP_NAME_MAX_LEN + 1];
private byte[] domainName = new byte[CommonConstant.FDFS_DOMAIN_NAME_MAX_SIZE];

private byte initFlag;
private byte state;
private long trackerCount;

public int getStoragePort() {
return storagePort;
}

public void setStoragePort(int storagePort) {
this.storagePort = storagePort;
}

public int getStorageHttpPort() {
return storageHttpPort;
}

public void setStorageHttpPort(int storageHttpPort) {
this.storageHttpPort = storageHttpPort;
}

public int getStorePathCount() {
return storePathCount;
}

public void setStorePathCount(int storePathCount) {
this.storePathCount = storePathCount;
}

public int getSubdirCountPerPath() {
return subdirCountPerPath;
}

public void setSubdirCountPerPath(int subdirCountPerPath) {
this.subdirCountPerPath = subdirCountPerPath;
}

public int getUploadPriority() {
return uploadPriority;
}

public void setUploadPriority(int uploadPriority) {
this.uploadPriority = uploadPriority;
}

public int getJoinTime() {
return joinTime;
}

public void setJoinTime(int joinTime) {
this.joinTime = joinTime;
}

public int getUpTime() {
return upTime;
}

public void setUpTime(int upTime) {
this.upTime = upTime;
}

public byte[] getVersion() {
return version;
}

public byte[] getGroupName() {
return groupName;
}

public byte[] getDomainName() {
return domainName;
}

public byte getInitFlag() {
return initFlag;
}

public void setInitFlag(byte initFlag) {
this.initFlag = initFlag;
}

public byte getState() {
return state;
}

public void setState(byte state) {
this.state = state;
}

public long getTrackerCount() {
return trackerCount;
}

public void setTrackerCount(long trackerCount) {
this.trackerCount = trackerCount;
}
}
10 changes: 5 additions & 5 deletions src/main/java/io/mybear/tracker/types/FdfsStorageStat.java
Original file line number Diff line number Diff line change
Expand Up @@ -82,22 +82,22 @@ public class FdfsStorageStat {
/* last update timestamp as source server,
current server' timestamp
*/
private Date lastSourceUpdate;
private Date lastSourceUpdate = new Date(0l);

/* last update timestamp as dest server,
current server' timestamp
*/
private Date lastSyncUpdate;
private Date lastSyncUpdate = new Date(0l);

/* last syned timestamp,
source server's timestamp
*/
private Date lastSyncedTimestamp;
private Date lastSyncedTimestamp = new Date(0l);

// last heart beat time
private Date lastHeartBeatTime;
private Date lastHeartBeatTime = new Date(0l);

private Connection connection;
private Connection connection = new Connection();

public long getTotalUploadCount() {
return totalUploadCount;
Expand Down

0 comments on commit 61be86b

Please sign in to comment.