gfs

package module
v0.0.0-...-7c7c556 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 22, 2017 License: MIT Imports: 13 Imported by: 0

README

gfs

golang fastdfs client

修改自:https://github.com/sanxia/gfs

tips

STORAGE_PROTO_CMD_APPEND_FILE 直接追加文件末尾 STORAGE_PROTO_CMD_MODIFY_FILE 有offset追加

连接
client,e := gfs.NewFdfsClient([]string{"192.168.0.147:22122"})
上传文件
r,e := client.UploadByFilename(filename)
删除文件
client.DeleteFile(r.FileId)
追加文件
r,e := client.UploadAppenderByFilename(filename)
log.Println(r,e)
//15717 offset要注意 不能超过文件大小
e = client.ModifyByFilename(filename,r.FileId,15717)
log.Println(r,e)
获取文件信息
f,e := client.QueryFile(r.FileId)
log.Println(f,e)
下载文件
//group1/M00/00/00/wKgAk1oVPICASFqAAAA9Zbiunec638.jpg
r1,e := client.DownloadToFile("1.jpg",r.FileId,0,0)
log.Println(r1,e)

Documentation

Index

Constants

View Source
const (
	TRACKER_PROTO_CMD_STORAGE_JOIN              = 81
	FDFS_PROTO_CMD_QUIT                         = 82 //quit
	TRACKER_PROTO_CMD_STORAGE_BEAT              = 83 //storage heart beat
	TRACKER_PROTO_CMD_STORAGE_REPORT_DISK_USAGE = 84 //report disk usage
	TRACKER_PROTO_CMD_STORAGE_REPLICA_CHG       = 85 //repl new storage servers
	TRACKER_PROTO_CMD_STORAGE_SYNC_SRC_REQ      = 86 //src storage require sync
	TRACKER_PROTO_CMD_STORAGE_SYNC_DEST_REQ     = 87 //dest storage require sync
	TRACKER_PROTO_CMD_STORAGE_SYNC_NOTIFY       = 88 //sync done notify
	TRACKER_PROTO_CMD_STORAGE_SYNC_REPORT       = 89 //report src last synced time as dest server
	TRACKER_PROTO_CMD_STORAGE_SYNC_DEST_QUERY   = 79 //dest storage query sync src storage server
	TRACKER_PROTO_CMD_STORAGE_REPORT_IP_CHANGED = 78 //storage server report it's ip changed
	TRACKER_PROTO_CMD_STORAGE_CHANGELOG_REQ     = 77 //storage server request storage server's changelog
	TRACKER_PROTO_CMD_STORAGE_REPORT_STATUS     = 76 //report specified storage server status
	TRACKER_PROTO_CMD_STORAGE_PARAMETER_REQ     = 75 //storage server request parameters
	TRACKER_PROTO_CMD_STORAGE_REPORT_TRUNK_FREE = 74 //storage report trunk free space
	TRACKER_PROTO_CMD_STORAGE_REPORT_TRUNK_FID  = 73 //storage report current trunk file id
	TRACKER_PROTO_CMD_STORAGE_FETCH_TRUNK_FID   = 72 //storage get current trunk file id

	TRACKER_PROTO_CMD_TRACKER_GET_SYS_FILES_START = 61 //start of tracker get system data files
	TRACKER_PROTO_CMD_TRACKER_GET_SYS_FILES_END   = 62 //end of tracker get system data files
	TRACKER_PROTO_CMD_TRACKER_GET_ONE_SYS_FILE    = 63 //tracker get a system data file
	TRACKER_PROTO_CMD_TRACKER_GET_STATUS          = 64 //tracker get status of other tracker
	TRACKER_PROTO_CMD_TRACKER_PING_LEADER         = 65 //tracker ping leader
	TRACKER_PROTO_CMD_TRACKER_NOTIFY_NEXT_LEADER  = 66 //notify next leader to other trackers
	TRACKER_PROTO_CMD_TRACKER_COMMIT_NEXT_LEADER  = 67 //commit next leader to other trackers

	TRACKER_PROTO_CMD_SERVER_LIST_ONE_GROUP                 = 90
	TRACKER_PROTO_CMD_SERVER_LIST_ALL_GROUPS                = 91
	TRACKER_PROTO_CMD_SERVER_LIST_STORAGE                   = 92
	TRACKER_PROTO_CMD_SERVER_DELETE_STORAGE                 = 93
	TRACKER_PROTO_CMD_SERVICE_QUERY_STORE_WITHOUT_GROUP_ONE = 101
	TRACKER_PROTO_CMD_SERVICE_QUERY_FETCH_ONE               = 102
	TRACKER_PROTO_CMD_SERVICE_QUERY_UPDATE                  = 103
	TRACKER_PROTO_CMD_SERVICE_QUERY_STORE_WITH_GROUP_ONE    = 104
	TRACKER_PROTO_CMD_SERVICE_QUERY_FETCH_ALL               = 105
	TRACKER_PROTO_CMD_SERVICE_QUERY_STORE_WITHOUT_GROUP_ALL = 106
	TRACKER_PROTO_CMD_SERVICE_QUERY_STORE_WITH_GROUP_ALL    = 107
	TRACKER_PROTO_CMD_RESP                                  = 100
	FDFS_PROTO_CMD_ACTIVE_TEST                              = 111 //active test, tracker and storage both support since V1.28

	STORAGE_PROTO_CMD_REPORT_CLIENT_IP      = 9 //ip as tracker client
	STORAGE_PROTO_CMD_UPLOAD_FILE           = 11
	STORAGE_PROTO_CMD_DELETE_FILE           = 12
	STORAGE_PROTO_CMD_SET_METADATA          = 13
	STORAGE_PROTO_CMD_DOWNLOAD_FILE         = 14
	STORAGE_PROTO_CMD_GET_METADATA          = 15
	STORAGE_PROTO_CMD_SYNC_CREATE_FILE      = 16
	STORAGE_PROTO_CMD_SYNC_DELETE_FILE      = 17
	STORAGE_PROTO_CMD_SYNC_UPDATE_FILE      = 18
	STORAGE_PROTO_CMD_SYNC_CREATE_LINK      = 19
	STORAGE_PROTO_CMD_CREATE_LINK           = 20
	STORAGE_PROTO_CMD_UPLOAD_SLAVE_FILE     = 21
	STORAGE_PROTO_CMD_QUERY_FILE_INFO       = 22
	STORAGE_PROTO_CMD_UPLOAD_APPENDER_FILE  = 23 //create appender file
	STORAGE_PROTO_CMD_APPEND_FILE           = 24 //append file
	STORAGE_PROTO_CMD_SYNC_APPEND_FILE      = 25
	STORAGE_PROTO_CMD_FETCH_ONE_PATH_BINLOG = 26 //fetch binlog of one store path
	STORAGE_PROTO_CMD_RESP                  = TRACKER_PROTO_CMD_RESP
	STORAGE_PROTO_CMD_UPLOAD_MASTER_FILE    = STORAGE_PROTO_CMD_UPLOAD_FILE

	STORAGE_PROTO_CMD_TRUNK_ALLOC_SPACE          = 27 //since V3.00
	STORAGE_PROTO_CMD_TRUNK_ALLOC_CONFIRM        = 28 //since V3.00
	STORAGE_PROTO_CMD_TRUNK_FREE_SPACE           = 29 //since V3.00
	STORAGE_PROTO_CMD_TRUNK_SYNC_BINLOG          = 30 //since V3.00
	STORAGE_PROTO_CMD_TRUNK_GET_BINLOG_SIZE      = 31 //since V3.07
	STORAGE_PROTO_CMD_TRUNK_DELETE_BINLOG_MARKS  = 32 //since V3.07
	STORAGE_PROTO_CMD_TRUNK_TRUNCATE_BINLOG_FILE = 33 //since V3.07

	STORAGE_PROTO_CMD_MODIFY_FILE        = 34 //since V3.08
	STORAGE_PROTO_CMD_SYNC_MODIFY_FILE   = 35 //since V3.08
	STORAGE_PROTO_CMD_TRUNCATE_FILE      = 36 //since V3.08
	STORAGE_PROTO_CMD_SYNC_TRUNCATE_FILE = 37 //since V3.08

	//for overwrite all old metadata
	STORAGE_SET_METADATA_FLAG_OVERWRITE     = 'O'
	STORAGE_SET_METADATA_FLAG_OVERWRITE_STR = "O"
	//for replace, insert when the meta item not exist, otherwise update it
	STORAGE_SET_METADATA_FLAG_MERGE     = 'M'
	STORAGE_SET_METADATA_FLAG_MERGE_STR = "M"

	FDFS_RECORD_SEPERATOR = '\x01'
	FDFS_FIELD_SEPERATOR  = '\x02'

	//common constants
	FDFS_GROUP_NAME_MAX_LEN     = 16
	IP_ADDRESS_SIZE             = 16
	FDFS_PROTO_PKG_LEN_SIZE     = 8
	FDFS_PROTO_CMD_SIZE         = 1
	FDFS_PROTO_STATUS_SIZE      = 1
	FDFS_PROTO_IP_PORT_SIZE     = (IP_ADDRESS_SIZE + 6)
	FDFS_MAX_SERVERS_EACH_GROUP = 32
	FDFS_MAX_GROUPS             = 512
	FDFS_MAX_TRACKERS           = 16
	FDFS_DOMAIN_NAME_MAX_LEN    = 128

	FDFS_MAX_META_NAME_LEN  = 64
	FDFS_MAX_META_VALUE_LEN = 256

	FDFS_FILE_PREFIX_MAX_LEN    = 16
	FDFS_LOGIC_FILE_PATH_LEN    = 10
	FDFS_TRUE_FILE_PATH_LEN     = 6
	FDFS_FILENAME_BASE64_LENGTH = 27
	FDFS_TRUNK_FILE_INFO_LEN    = 16
	FDFS_FILE_EXT_NAME_MAX_LEN  = 6
	FDFS_SPACE_SIZE_BASE_INDEX  = 2 // storage space size based (MB)

	FDFS_UPLOAD_BY_BUFFER   = 1
	FDFS_UPLOAD_BY_FILENAME = 2
	FDFS_UPLOAD_BY_FILE     = 3
	FDFS_DOWNLOAD_TO_BUFFER = 1
	FDFS_DOWNLOAD_TO_FILE   = 2

	FDFS_NORMAL_LOGIC_FILENAME_LENGTH = (FDFS_LOGIC_FILE_PATH_LEN + FDFS_FILENAME_BASE64_LENGTH + FDFS_FILE_EXT_NAME_MAX_LEN + 1)

	FDFS_TRUNK_FILENAME_LENGTH       = (FDFS_TRUE_FILE_PATH_LEN + FDFS_FILENAME_BASE64_LENGTH + FDFS_TRUNK_FILE_INFO_LEN + 1 + FDFS_FILE_EXT_NAME_MAX_LEN)
	FDFS_TRUNK_LOGIC_FILENAME_LENGTH = (FDFS_TRUNK_FILENAME_LENGTH + (FDFS_LOGIC_FILE_PATH_LEN - FDFS_TRUE_FILE_PATH_LEN))

	FDFS_VERSION_SIZE = 6

	TRACKER_QUERY_STORAGE_FETCH_BODY_LEN = (FDFS_GROUP_NAME_MAX_LEN + IP_ADDRESS_SIZE - 1 + FDFS_PROTO_PKG_LEN_SIZE)
	TRACKER_QUERY_STORAGE_STORE_BODY_LEN = (FDFS_GROUP_NAME_MAX_LEN + IP_ADDRESS_SIZE - 1 + FDFS_PROTO_PKG_LEN_SIZE + 1)
	//status code, order is important!
	FDFS_STORAGE_STATUS_INIT       = 0
	FDFS_STORAGE_STATUS_WAIT_SYNC  = 1
	FDFS_STORAGE_STATUS_SYNCING    = 2
	FDFS_STORAGE_STATUS_IP_CHANGED = 3
	FDFS_STORAGE_STATUS_DELETED    = 4
	FDFS_STORAGE_STATUS_OFFLINE    = 5
	FDFS_STORAGE_STATUS_ONLINE     = 6
	FDFS_STORAGE_STATUS_ACTIVE     = 7
	FDFS_STORAGE_STATUS_RECOVERY   = 9
	FDFS_STORAGE_STATUS_NONE       = 99
)
View Source
const (
	PathSeparator = "/"
)

Variables

View Source
var (
	ErrClosed = errors.New("pool is closed")
)

Functions

func ColseFdfsClient

func ColseFdfsClient()

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * 关闭Fdfs客户端 * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

func TcpRecvFile

func TcpRecvFile(conn net.Conn, localFilename string, bufferSize int64) (int64, error)

func TcpRecvResponse

func TcpRecvResponse(conn net.Conn, bufferSize int64) ([]byte, int64, error)

func TcpSendData

func TcpSendData(conn net.Conn, bytesStream []byte) error

func TcpSendFile

func TcpSendFile(conn net.Conn, filename string) error

Types

type ConnectionPool

type ConnectionPool struct {
	// contains filtered or unexported fields
}

func NewConnectionPool

func NewConnectionPool(hosts []string, port int, minConns int, maxConns int) (*ConnectionPool, error)

func (*ConnectionPool) Close

func (this *ConnectionPool) Close()

func (*ConnectionPool) Get

func (this *ConnectionPool) Get() (net.Conn, error)

func (*ConnectionPool) Len

func (this *ConnectionPool) Len() int

type DeleteResponse

type DeleteResponse struct {
	// contains filtered or unexported fields
}

type DownloadResponse

type DownloadResponse struct {
	FileId  string
	Content interface{}
	Size    int64
}

type Errno

type Errno struct {
	// contains filtered or unexported fields
}

func (Errno) Error

func (e Errno) Error() string

type FdfsClient

type FdfsClient struct {
	// contains filtered or unexported fields
}

func NewFdfsClient

func NewFdfsClient(hosts []string) (*FdfsClient, error)

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * 获取Fdfs客户端 * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

func (*FdfsClient) DeleteFile

func (this *FdfsClient) DeleteFile(remoteFileId string) error

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * 删除文件 * remoteFileId: 远程文件id * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

func (*FdfsClient) DownloadToBuffer

func (this *FdfsClient) DownloadToBuffer(remoteFileId string, offset int64, size int64) (*DownloadResponse, error)

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * 下载到字节数组 * remoteFileId: 远程文件id * offset: 远程文件偏移量 * size: 下载长度 * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

func (*FdfsClient) DownloadToFile

func (this *FdfsClient) DownloadToFile(localFilename string, remoteFileId string, offset int64, size int64) (*DownloadResponse, error)

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * 下载到本地文件 * localFilename: 本地文件名 * remoteFileId: 远程文件id * offset: 远程文件偏移量 * size: 下载长度 * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

func (*FdfsClient) ModifyByFilename

func (this *FdfsClient) ModifyByFilename(filename, remoteFileId string, fileOffset int64) error

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * 追加上传从磁盘文件数据 * filename: 文件名 * remoteFileId: 远程文件id * fileOffset: 偏移量 * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

func (*FdfsClient) QueryFile

func (this *FdfsClient) QueryFile(remoteFileId string) (*QueryFileInfoResponse, error)

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * 查询文件信息 * remoteFileId: 远程文件id * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

func (*FdfsClient) UploadAppenderByBuffer

func (this *FdfsClient) UploadAppenderByBuffer(filebuffer []byte, fileExtName string) (*UploadResponse, error)

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * 更新文件数据 * filebuffer: 字节字节数组 * fileExtName: 文件扩展名 * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

func (*FdfsClient) UploadAppenderByFilename

func (this *FdfsClient) UploadAppenderByFilename(filename string) (*UploadResponse, error)

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * 更新磁盘文件 * filename: 磁盘文件名 * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

func (*FdfsClient) UploadByBuffer

func (this *FdfsClient) UploadByBuffer(filebuffer []byte, fileExtName string) (*UploadResponse, error)

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * 上传文件数据 * fileExtName: 文件扩展名 * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

func (*FdfsClient) UploadByFilename

func (this *FdfsClient) UploadByFilename(filename string) (*UploadResponse, error)

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * 上传磁盘文件 * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

func (*FdfsClient) UploadSlaveByBuffer

func (this *FdfsClient) UploadSlaveByBuffer(filebuffer []byte, remoteFileId, fileExtName string) (*UploadResponse, error)

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * 上传从文件数据 * filebuffer: 文件字节数组 * remoteFileId: 远程文件id * prefixName: 前缀 * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

func (*FdfsClient) UploadSlaveByFilename

func (this *FdfsClient) UploadSlaveByFilename(filename, remoteFileId, prefixName string) (*UploadResponse, error)

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * 上传从磁盘文件数据 * filename: 文件名 * remoteFileId: 远程文件id * prefixName: 前缀 * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

type QueryFileInfoResponse

type QueryFileInfoResponse struct {
	// contains filtered or unexported fields
}

type Request

type Request interface {
	// contains filtered or unexported methods
}

type RequestResponse

type RequestResponse interface {
	Request
	Response
}

type Response

type Response interface {
	// contains filtered or unexported methods
}

type Server

type Server struct {
	Hosts []string
	Port  int
}

type StorageClient

type StorageClient struct {
	// contains filtered or unexported fields
}

type StorageServer

type StorageServer struct {
	// contains filtered or unexported fields
}

type TrackerClient

type TrackerClient struct {
	// contains filtered or unexported fields
}

type UploadResponse

type UploadResponse struct {
	GroupName string
	FileId    string
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL