示例#1
0
            public int uploadFile()
            {
                StorageServer  storageServer = null;
                StorageClient1 client        = new StorageClient1(trackerServer, storageServer);

                byte[] file_buff;
                string file_id;

                file_buff = new byte[2 * 1024];
                Arrays.fill(file_buff, (byte)65);

                try
                {
                    file_id = client.upload_file1(file_buff, "txt", null);
                    if (file_id == null)
                    {
                        Console.WriteLine("upload file fail, error code: " + client.getErrorCode());
                        return(-1);
                    }

                    file_ids.Enqueue(file_id);
                    return(0);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("upload file fail, error mesg: " + ex.Message);
                    return(-1);
                }
            }
示例#2
0
        public void initStorageClient()
        {
            ClientGlobal.init(CONF_NAME);
            Log.Information("network_timeout=" + ClientGlobal.g_network_timeout + "ms");
            Log.Information("charset=" + ClientGlobal.g_charset);
            TrackerClient tracker = new TrackerClient();

            trackerServer = tracker.getTrackerServer();
            StorageServer storageServer = null;

            storageClient = new StorageClient(trackerServer, storageServer);
        }
示例#3
0
            public int downloadFile(string file_id)
            {
                int            errno;
                StorageServer  storageServer = null;
                StorageClient1 client        = new StorageClient1(trackerServer, storageServer);

                try
                {
                    errno = client.download_file1(file_id, this.callback);
                    if (errno != 0)
                    {
                        Console.WriteLine("Download file fail, file_id: " + file_id + ", error no: " + errno);
                    }
                    return(errno);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Download file fail, error mesg: " + ex.Message);
                    return(-1);
                }
            }
        public void main(string[] args)
        {
            if (args.Length < 2)
            {
                Console.WriteLine("Error: Must have 2 parameters, one is config filename, "
                                  + "the other is the local filename to upload");
                return;
            }

            string conf_filename  = args[0];
            string local_filename = args[1];

            try
            {
                ClientGlobal.init(conf_filename);
                Console.WriteLine("network_timeout=" + ClientGlobal.g_network_timeout + "ms");
                Console.WriteLine("charset=" + ClientGlobal.g_charset);

                TrackerClient  tracker       = new TrackerClient();
                TrackerServer  trackerServer = tracker.getTrackerServer();
                StorageServer  storageServer = null;
                StorageClient1 client        = new StorageClient1(trackerServer, storageServer);

                NameValuePair[] metaList = new NameValuePair[1];
                metaList[0] = new NameValuePair("fileName", local_filename);
                string fileId = client.upload_file1(local_filename, null, metaList);
                Console.WriteLine("upload success. file id is: " + fileId);

                int i = 0;
                while (i++ < 10)
                {
                    byte[] result = client.download_file1(fileId);
                    Console.WriteLine(i + ", download result is: " + result.Length);
                }
            }
            catch (Exception ex)
            {
                Log.Error(ex.Message + ex.StackTrace);
            }
        }
        /**
         * entry point
         *
         * @param args comand arguments
         *             <ul><li>args[0]: config filename</li></ul>
         *             <ul><li>args[1]: local filename to upload</li></ul>
         */
        public static void main(string[] args)
        {
            if (args.Length < 2)
            {
                Console.WriteLine("Error: Must have 2 parameters, one is config filename, "
                                  + "the other is the local filename to upload");
                return;
            }

            Console.WriteLine("dotnetcore.version=" + typeof(object).GetTypeInfo().Assembly.GetName().Version.ToString());

            string conf_filename  = args[0];
            string local_filename = args[1];

            try
            {
                ClientGlobal.init(conf_filename);
                Console.WriteLine("network_timeout=" + ClientGlobal.g_network_timeout + "ms");
                Console.WriteLine("charset=" + ClientGlobal.g_charset);

                long          startTime;
                string        group_name;
                string        remote_filename;
                ServerInfo[]  servers;
                TrackerClient tracker       = new TrackerClient();
                TrackerServer trackerServer = tracker.getTrackerServer();

                StorageServer storageServer = null;

                /*
                 * storageServer = tracker.getStoreStorage(trackerServer);
                 * if (storageServer == null)
                 * {
                 *  Console.WriteLine("getStoreStorage fail, error code: " + tracker.getErrorCode());
                 *  return;
                 * }
                 */

                StorageClient   client = new StorageClient(trackerServer, storageServer);
                byte[]          file_buff;
                NameValuePair[] meta_list;
                string[]        results;
                string          master_filename;
                string          prefix_name;
                string          file_ext_name;
                string          generated_slave_filename;
                int             errno;

                meta_list    = new NameValuePair[4];
                meta_list[0] = new NameValuePair("width", "800");
                meta_list[1] = new NameValuePair("heigth", "600");
                meta_list[2] = new NameValuePair("bgcolor", "#FFFFFF");
                meta_list[3] = new NameValuePair("author", "Mike");

                file_buff = ClientGlobal.g_charset.GetBytes("this is a test");
                Console.WriteLine("file Length: " + file_buff.Length);

                group_name = null;
                StorageServer[] storageServers = tracker.getStoreStorages(trackerServer, group_name);
                if (storageServers == null)
                {
                    Log.Error("get store storage servers fail, error code: " + tracker.getErrorCode());
                }
                else
                {
                    Log.Error("store storage servers count: " + storageServers.Length);
                    for (int k = 0; k < storageServers.Length; k++)
                    {
                        Log.Error((k + 1) + ". " + storageServers[k].getInetSocketAddress().Address + ":" + storageServers[k].getInetSocketAddress().Port);
                    }
                    Log.Error("");
                }

                startTime = DateTime.Now.Ticks;
                results   = client.upload_file(file_buff, "txt", meta_list);
                Console.WriteLine("upload_file time used: " + (DateTime.Now.Ticks - startTime) + " ms");

                /*
                 * group_name = "";
                 * results = client.upload_file(group_name, file_buff, "txt", meta_list);
                 */
                if (results == null)
                {
                    Log.Error("upload file fail, error code: " + client.getErrorCode());
                    return;
                }
                else
                {
                    group_name      = results[0];
                    remote_filename = results[1];
                    Log.Error("group_name: " + group_name + ", remote_filename: " + remote_filename);
                    Log.Error(client.get_file_info(group_name, remote_filename).ToString());

                    servers = tracker.getFetchStorages(trackerServer, group_name, remote_filename);
                    if (servers == null)
                    {
                        Log.Error("get storage servers fail, error code: " + tracker.getErrorCode());
                    }
                    else
                    {
                        Log.Error("storage servers count: " + servers.Length);
                        for (int k = 0; k < servers.Length; k++)
                        {
                            Log.Error((k + 1) + ". " + servers[k].getIpAddr() + ":" + servers[k].getPort());
                        }
                        Log.Error("");
                    }

                    meta_list    = new NameValuePair[4];
                    meta_list[0] = new NameValuePair("width", "1024");
                    meta_list[1] = new NameValuePair("heigth", "768");
                    meta_list[2] = new NameValuePair("bgcolor", "#000000");
                    meta_list[3] = new NameValuePair("title", "Untitle");

                    startTime = DateTime.Now.Ticks;
                    errno     = client.set_metadata(group_name, remote_filename, meta_list, (byte)ProtoCommon.STORAGE_SET_METADATA_FLAG_MERGE);
                    Console.WriteLine("set_metadata time used: " + (DateTime.Now.Ticks - startTime) + " ms");
                    if (errno == 0)
                    {
                        Log.Error("set_metadata success");
                    }
                    else
                    {
                        Log.Error("set_metadata fail, error no: " + errno);
                    }

                    meta_list = client.get_metadata(group_name, remote_filename);
                    if (meta_list != null)
                    {
                        for (int i = 0; i < meta_list.Length; i++)
                        {
                            Console.WriteLine(meta_list[i].getName() + " " + meta_list[i].getValue());
                        }
                    }

                    //Thread.sleep(30000);

                    startTime = DateTime.Now.Ticks;
                    file_buff = client.download_file(group_name, remote_filename);
                    Console.WriteLine("download_file time used: " + (DateTime.Now.Ticks - startTime) + " ms");

                    if (file_buff != null)
                    {
                        Console.WriteLine("file Length:" + file_buff.Length);
                        Console.WriteLine(ClientGlobal.g_charset.GetString(file_buff));
                    }

                    file_buff       = ClientGlobal.g_charset.GetBytes("this is a slave buff");
                    master_filename = remote_filename;
                    prefix_name     = "-part1";
                    file_ext_name   = "txt";
                    startTime       = DateTime.Now.Ticks;
                    results         = client.upload_file(group_name, master_filename, prefix_name, file_buff, file_ext_name, meta_list);
                    Console.WriteLine("upload_file time used: " + (DateTime.Now.Ticks - startTime) + " ms");
                    if (results != null)
                    {
                        Log.Error("slave file group_name: " + results[0] + ", remote_filename: " + results[1]);

                        generated_slave_filename = ProtoCommon.genSlaveFilename(master_filename, prefix_name, file_ext_name);
                        if (generated_slave_filename != results[1])
                        {
                            Log.Error("generated slave file: " + generated_slave_filename + "\n != returned slave file: " + results[1]);
                        }

                        Log.Error(client.get_file_info(results[0], results[1]).ToString());
                    }

                    startTime = DateTime.Now.Ticks;
                    errno     = client.delete_file(group_name, remote_filename);
                    Console.WriteLine("delete_file time used: " + (DateTime.Now.Ticks - startTime) + " ms");
                    if (errno == 0)
                    {
                        Log.Error("Delete file success");
                    }
                    else
                    {
                        Log.Error("Delete file fail, error no: " + errno);
                    }
                }

                results = client.upload_file(local_filename, null, meta_list);
                if (results != null)
                {
                    string            file_id;
                    int               ts;
                    string            token;
                    string            file_url;
                    InetSocketAddress inetSockAddr;

                    group_name      = results[0];
                    remote_filename = results[1];
                    file_id         = group_name + StorageClient1.SPLIT_GROUP_NAME_AND_FILENAME_SEPERATOR + remote_filename;

                    inetSockAddr = trackerServer.getInetSocketAddress();
                    file_url     = "http://" + inetSockAddr.Address;
                    if (ClientGlobal.g_tracker_http_port != 80)
                    {
                        file_url += ":" + ClientGlobal.g_tracker_http_port;
                    }
                    file_url += "/" + file_id;
                    if (ClientGlobal.g_anti_steal_token)
                    {
                        ts        = (int)(DateTime.Now.Ticks / 1000);
                        token     = ProtoCommon.getToken(file_id, ts, ClientGlobal.g_secret_key);
                        file_url += "?token=" + token + "&ts=" + ts;
                    }

                    Log.Error("group_name: " + group_name + ", remote_filename: " + remote_filename);
                    Log.Error(client.get_file_info(group_name, remote_filename).ToString());
                    Log.Error("file url: " + file_url);

                    errno = client.download_file(group_name, remote_filename, 0, 0, "c:\\" + remote_filename.Replace("/", "_"));
                    if (errno == 0)
                    {
                        Log.Error("Download file success");
                    }
                    else
                    {
                        Log.Error("Download file fail, error no: " + errno);
                    }

                    errno = client.download_file(group_name, remote_filename, 0, 0, new DownloadFileWriter("c:\\" + remote_filename.Replace("/", "-")));
                    if (errno == 0)
                    {
                        Log.Error("Download file success");
                    }
                    else
                    {
                        Log.Error("Download file fail, error no: " + errno);
                    }

                    master_filename = remote_filename;
                    prefix_name     = "-part2";
                    file_ext_name   = null;
                    startTime       = DateTime.Now.Ticks;
                    results         = client.upload_file(group_name, master_filename, prefix_name, local_filename, null, meta_list);
                    Console.WriteLine("upload_file time used: " + (DateTime.Now.Ticks - startTime) + " ms");
                    if (results != null)
                    {
                        Log.Error("slave file group_name: " + results[0] + ", remote_filename: " + results[1]);

                        generated_slave_filename = ProtoCommon.genSlaveFilename(master_filename, prefix_name, file_ext_name);
                        if (generated_slave_filename != results[1])
                        {
                            Log.Error("generated slave file: " + generated_slave_filename + "\n != returned slave file: " + results[1]);
                        }

                        Log.Error(client.get_file_info(results[0], results[1]).ToString());
                    }
                }

                System.IO.FileInfo f;
                f = new System.IO.FileInfo(local_filename);
                int nPos = local_filename.LastIndexOf('.');
                if (nPos > 0 && local_filename.Length - nPos <= ProtoCommon.FDFS_FILE_EXT_NAME_MAX_LEN + 1)
                {
                    file_ext_name = local_filename.Substring(nPos + 1);
                }
                else
                {
                    file_ext_name = null;
                }

                results = client.upload_file(null, f.Length,
                                             new UploadLocalFileSender(local_filename), file_ext_name, meta_list);
                if (results != null)
                {
                    group_name      = results[0];
                    remote_filename = results[1];

                    Console.WriteLine("group name: " + group_name + ", remote filename: " + remote_filename);
                    Console.WriteLine(client.get_file_info(group_name, remote_filename));

                    master_filename = remote_filename;
                    prefix_name     = "-part3";
                    startTime       = DateTime.Now.Ticks;
                    results         = client.upload_file(group_name, master_filename, prefix_name, f.Length, new UploadLocalFileSender(local_filename), file_ext_name, meta_list);
                    Console.WriteLine("upload_file time used: " + (DateTime.Now.Ticks - startTime) + " ms");
                    if (results != null)
                    {
                        Log.Error("slave file group_name: " + results[0] + ", remote_filename: " + results[1]);

                        generated_slave_filename = ProtoCommon.genSlaveFilename(master_filename, prefix_name, file_ext_name);
                        if (generated_slave_filename != results[1])
                        {
                            Log.Error("generated slave file: " + generated_slave_filename + "\n != returned slave file: " + results[1]);
                        }

                        Log.Error(client.get_file_info(results[0], results[1]).ToString());
                    }
                }
                else
                {
                    Log.Error("Upload file fail, error no: " + errno);
                }

                storageServer = tracker.getFetchStorage(trackerServer, group_name, remote_filename);
                if (storageServer == null)
                {
                    Console.WriteLine("getFetchStorage fail, errno code: " + tracker.getErrorCode());
                    return;
                }
                /* for test only */
                Console.WriteLine("active test to storage server: " + storageServer.getConnection().activeTest());

                /* for test only */
                Console.WriteLine("active test to tracker server: " + trackerServer.getConnection().activeTest());
            }
            catch (Exception ex)
            {
                Log.Error(ex.Message + ex.StackTrace);
            }
        }
 /// <summary>
 /// constructor with trackerServer and storageServer
 /// NOTE: if not necessary, do NOT set storage server instance
 /// </summary>
 /// <param name="trackerServer">the tracker server, can be null</param>
 /// <param name="storageServer">the storage server, can be null</param>
 public StorageClient1(TrackerServer trackerServer, StorageServer storageServer) : base(trackerServer, storageServer)
 {
 }
        public static void main(string[] args)
        {
            try
            {
                if (args.Length < 1)
                {
                    Console.WriteLine("Usage: 2 parameters, one is config filename, "
                                      + "the other is the local filename to upload");
                    return;
                }

                string conf_filename = args[0];
                string local_filename;
                string ext_name;
                if (args.Length > 1)
                {
                    local_filename = args[1];
                    ext_name       = null;
                }
                else if (Environment.OSVersion.Platform == PlatformID.Win32NT)
                {
                    local_filename = "c:/windows/system32/notepad.exe";
                    ext_name       = "exe";
                }
                else
                {
                    local_filename = "/etc/hosts";
                    ext_name       = "";
                }

                ClientGlobal.init(conf_filename);
                Console.WriteLine("network_timeout=" + ClientGlobal.g_network_timeout + "ms");
                Console.WriteLine("charset=" + ClientGlobal.g_charset);

                TrackerGroup  tg = new TrackerGroup(new InetSocketAddress[] { new InetSocketAddress("47.95.221.159", 22122) });
                TrackerClient tc = new TrackerClient(tg);

                TrackerServer ts = tc.getTrackerServer();
                if (ts == null)
                {
                    Console.WriteLine("getTrackerServer return null");
                    return;
                }

                StorageServer ss = tc.getStoreStorage(ts);
                if (ss == null)
                {
                    Console.WriteLine("getStoreStorage return null");
                }

                StorageClient1 sc1 = new StorageClient1(ts, ss);

                NameValuePair[] meta_list = null;  //new NameValuePair[0];
                string          fileid    = sc1.upload_file1(local_filename, ext_name, meta_list);
                Console.WriteLine("Upload local file " + local_filename + " ok, fileid: " + fileid);
            }
            catch (Exception ex)
            {
                Log.Error(ex.Message + ex.StackTrace);
            }
        }
示例#8
0
        /// <summary>
        /// query storage servers to upload file
        /// </summary>
        /// <param name="trackerServer">the tracker server</param>
        /// <param name="groupName">the group name to upload file to, can be empty</param>
        /// <returns> storage servers, return null if fail</returns>
        public StorageServer[] getStoreStorages(TrackerServer trackerServer, string groupName)
        {
            byte[]     header;
            string     ip_addr;
            int        port;
            byte       cmd;
            int        out_len;
            Connection connection;

            if (trackerServer == null)
            {
                trackerServer = getTrackerServer();
                if (trackerServer == null)
                {
                    return(null);
                }
            }
            connection = trackerServer.getConnection();
            Stream outStream = connection.getOutputStream();

            try
            {
                if (groupName == null || groupName.Length == 0)
                {
                    cmd     = ProtoCommon.TRACKER_PROTO_CMD_SERVICE_QUERY_STORE_WITHOUT_GROUP_ALL;
                    out_len = 0;
                }
                else
                {
                    cmd     = ProtoCommon.TRACKER_PROTO_CMD_SERVICE_QUERY_STORE_WITH_GROUP_ALL;
                    out_len = ProtoCommon.FDFS_GROUP_NAME_MAX_LEN;
                }
                header = ProtoCommon.packHeader(cmd, out_len, (byte)0);
                outStream.Write(header, 0, header.Length);
                if (groupName != null && groupName.Length > 0)
                {
                    byte[] bGroupName;
                    byte[] bs;
                    int    group_len;
                    bs         = ClientGlobal.g_charset.GetBytes(groupName);
                    bGroupName = new byte[ProtoCommon.FDFS_GROUP_NAME_MAX_LEN];
                    if (bs.Length <= ProtoCommon.FDFS_GROUP_NAME_MAX_LEN)
                    {
                        group_len = bs.Length;
                    }
                    else
                    {
                        group_len = ProtoCommon.FDFS_GROUP_NAME_MAX_LEN;
                    }
                    Arrays.fill(bGroupName, (byte)0);
                    Array.Copy(bs, 0, bGroupName, 0, group_len);
                    outStream.Write(bGroupName, 0, bGroupName.Length);
                }
                ProtoCommon.RecvPackageInfo pkgInfo = ProtoCommon.recvPackage(connection.getInputStream(),
                                                                              ProtoCommon.TRACKER_PROTO_CMD_RESP, -1);
                this.errno = pkgInfo.errno;
                if (pkgInfo.errno != 0)
                {
                    return(null);
                }
                if (pkgInfo.body.Length < ProtoCommon.TRACKER_QUERY_STORAGE_STORE_BODY_LEN)
                {
                    this.errno = ProtoCommon.ERR_NO_EINVAL;
                    return(null);
                }
                int       ipPortLen    = pkgInfo.body.Length - (ProtoCommon.FDFS_GROUP_NAME_MAX_LEN + 1);
                const int recordLength = ProtoCommon.FDFS_IPADDR_SIZE - 1 + ProtoCommon.FDFS_PROTO_PKG_LEN_SIZE;
                if (ipPortLen % recordLength != 0)
                {
                    this.errno = ProtoCommon.ERR_NO_EINVAL;
                    return(null);
                }
                int serverCount = ipPortLen / recordLength;
                if (serverCount > 16)
                {
                    this.errno = ProtoCommon.ERR_NO_ENOSPC;
                    return(null);
                }
                StorageServer[] results    = new StorageServer[serverCount];
                byte            store_path = pkgInfo.body[pkgInfo.body.Length - 1];
                int             offset     = ProtoCommon.FDFS_GROUP_NAME_MAX_LEN;
                for (int i = 0; i < serverCount; i++)
                {
                    ip_addr    = Strings.Get(pkgInfo.body, offset, ProtoCommon.FDFS_IPADDR_SIZE - 1).Trim();
                    offset    += ProtoCommon.FDFS_IPADDR_SIZE - 1;
                    port       = (int)ProtoCommon.buff2long(pkgInfo.body, offset);
                    offset    += ProtoCommon.FDFS_PROTO_PKG_LEN_SIZE;
                    results[i] = new StorageServer(ip_addr, port, store_path);
                }
                return(results);
            }
            catch (IOException ex)
            {
                try
                {
                    connection.close();
                }
                catch (IOException ex1)
                {
                    throw ex1;
                }
                finally
                {
                    connection = null;
                }
                throw ex;
            }
            finally
            {
                if (connection != null)
                {
                    try
                    {
                        connection.release();
                    }
                    catch
                    {
                    }
                }
            }
        }