private BlockServiceInfo[] GetServersInfo(long[] serversGuid) { List<BlockServiceInfo> reply; lock (blockServersMap) { int sz = serversGuid.Length; reply = new List<BlockServiceInfo>(sz); for (int i = 0; i < sz; ++i) { BlockServiceInfo blockServer; if (blockServersMap.TryGetValue(serversGuid[i], out blockServer)) { // Copy the server information into a new object. BlockServiceInfo nbs = new BlockServiceInfo(blockServer.ServerGuid, blockServer.Address); reply.Add(nbs); } } } return reply.ToArray(); }
private void RegisterBlockServer(IServiceAddress blockServerAddress) { // Get the block server uid, Message message = new Message("serverGUID"); // Connect to the block server, IMessageProcessor processor = connector.Connect(blockServerAddress, ServiceType.Block); IEnumerable<Message> response = processor.Process(message.AsStream()); Message rm = null; foreach (Message m in response) { if (m.HasError) throw new ApplicationException(m.ErrorMessage); rm = m; } long serverGuid = (long) rm.Arguments[0].Value; // Add lookup for this server_guid <-> service address to the db, managerDb.SetValue("block.sguid." + serverGuid, blockServerAddress.ToString()); managerDb.SetValue("block.addr." + blockServerAddress, serverGuid.ToString()); // TODO: Block discovery on the introduced machine, // Set the status and guid BlockServiceInfo blockServer = new BlockServiceInfo(serverGuid, blockServerAddress); // Add it to the map lock (blockServersMap) { blockServersMap[serverGuid] = blockServer; blockServersList.Add(blockServer); PersistBlockServers(blockServersList); } }
protected void AddRegisteredBlockService(long serverGuid, IServiceAddress addr) { lock (blockServersMap) { BlockServiceInfo blockServer = new BlockServiceInfo(serverGuid, addr); // Add to the internal map/list blockServersMap[serverGuid] = blockServer; blockServersList.Add(blockServer); } }