/// <summary> /// Block report is the list of block ids contained in blockstorage /// </summary> public static DataNodeProto.BlockReportRequest CreateBlockReport() { Guid[] blockList = BlockStorage.GetBlocks(); List <DataNodeProto.UUID> blockIdList = new List <DataNodeProto.UUID>(); for (int i = 0; i < blockList.Length; i++) { blockIdList.Add(new DataNodeProto.UUID { Value = blockList[i].ToString() }); } DataNodeProto.BlockReportRequest BlockReportRequest = new DataNodeProto.BlockReportRequest { DataNode = new DataNodeProto.DataNode { IpAddress = Program.ipAddress }, BlockList = new DataNodeProto.BlockList { BlockId = { blockIdList } } }; return(BlockReportRequest); }
static void Main(string[] args) { Console.WriteLine("Initializing DataNode"); string nameNodeIp = args[0]; int port = Convert.ToInt32(args[1]); // Use ec2 instance manager to get the private ip address of this data node EC2InstanceManager.InstanceManager instanceManager = EC2InstanceManager.InstanceManager.Instance; ipAddress = instanceManager.GetPrivateIpAddress(); #if DEBUG if (ipAddress == null) { ipAddress = "localhost"; } #endif Server server = new Server { Services = { DataNodeProto.DataNodeProto.BindService(new DataNodeHandler()), ClientProto.ClientProto.BindService(new ClientHandler()) }, //Ports = { new ServerPort(ipAddress, Constants.Port, ServerCredentials.Insecure) } Ports = { new ServerPort(ipAddress, port, ServerCredentials.Insecure) } }; Console.WriteLine("Done initializing"); server.Start(); Console.WriteLine("Trying to connect to: " + nameNodeIp); Channel channel = new Channel(nameNodeIp + ":" + Constants.Port, ChannelCredentials.Insecure); ConnectionManager.Instance.NameNodeConnection = channel; var client = new DataNodeProto.DataNodeProto.DataNodeProtoClient(channel); // Send initial heartbeat to initialize datanode in namenode var response = client.SendHeartBeat(HeartBeat.CreateHeartBeatRequest(), new CallOptions().WithWaitForReady(true)); Console.WriteLine("Successfully connected to namenode"); // Initialize blockstorage BlockStorage mBlockStorage = BlockStorage.Instance; Task heartBeatTask = HeartBeat.SendHeartBeat(client); Task blockReportTask = BlockReport.SendBlockReport(client); while (true) { } }