示例#1
0
void dssim_t::make_server(node_id_t nid) {
   pax_serv_timo ps_timo;
   ps_timo.vca_timo = config.serv_vca_timo;
   ps_timo.dead_timo = config.serv_dead_timo;
   ps_timo.heartbeat_timo = config.serv_heartbeat_timo;
   auto server = std::make_unique<paxserver>(net, nid, ps_timo,
                                             std::make_unique<po_word_vec>());
   // l::og(l::DEBUG, "Create server %s\n", node->id_str());
   net->announce(nid);
   if(nodes[server->get_nid()] != nullptr) {
      LOG(l::WARN, "Non-null entry nid:" << server->get_nid() << "\n");
   }
   nodes[server->get_nid()] = std::move(server);
}
示例#2
0
void dssim_t::make_client(node_id_t nid, std::string prefix) {
   auto node = std::make_unique<pc_word_vec>(
      net, nid, config.client_timo, config.client_switch_ntimo,
      prefix, (uint64_t)config.nclient_req);
   //l::og(l::DEBUG) << "Create client " << node->id_str()
   //               << " " << firstlet << "\n";
   net->announce(nid);
   nodes[node->get_nid()] = std::move(node);
}
示例#3
0
static int
dissect_ib_msg(tvbuff_t *tvb, proto_tree *tree, int offset)
{
	/* typedef struct
	 * {
	 *	__u32             ibm_magic;            * I'm an ibnal message *
	 *	__u16             ibm_version;          * this is my version *

	 *	__u8              ibm_type;             * msg type *
	 *	__u8              ibm_credits;          * returned credits *
	 *	__u32             ibm_nob;              * # bytes in message *
	 *	__u32             ibm_cksum;            * checksum (0 == no
	 *                                                checksum) *
	 *	__u64             ibm_srcnid;           * sender's NID *
	 *	__u64             ibm_srcstamp;         * sender's incarnation *
	 *	__u64             ibm_dstnid;           * destination's NID *
	 *	__u64             ibm_dststamp;         * destination's
	 *                                                incarnation *

	 *	union {
	 *		kib_connparams_t      connparams;
	 *		kib_immediate_msg_t   immediate;
	 *		kib_putreq_msg_t      putreq;
	 *		kib_putack_msg_t      putack;
	 *		kib_get_msg_t         get;
	 *		kib_completion_msg_t  completion;
	 *	} WIRE_ATTR ibm_u;
	 *} WIRE_ATTR kib_msg_t;   */

	t_nid src_nid;
	t_nid dst_nid;
	guint8 msg_type;

	proto_tree_add_item(tree, hf_lnet_ib_magic, tvb, offset, 4,
			    little_endian);
	offset += 4;
	proto_tree_add_item(tree, hf_lnet_ib_version, tvb, offset, 2,
			    little_endian);
	offset += 2;
	msg_type = tvb_get_guint8(tvb, offset);
	proto_tree_add_item(tree, hf_lnet_ib_type, tvb, offset, 1,
			    little_endian);
	offset += 1;
	proto_tree_add_item(tree, hf_lnet_ib_credits, tvb, offset, 1,
			    little_endian);
	offset += 1;
	proto_tree_add_item(tree, hf_lnet_ib_nob, tvb, offset, 4,
			    little_endian);
	offset += 4;
	offset = dissect_csum(tvb, tree, offset);

	src_nid = get_nid(tvb, offset);
	proto_tree_add_text(tree, tvb, offset, 8, "src_nid = %s@tcp%d",
			    ip_to_str((guint8 *) &src_nid.addr),
			    src_nid.interface);
	offset += 8;
	proto_tree_add_item(tree, hf_lnet_ib_srcstamp, tvb, offset, 8,
			    little_endian);
	offset += 8;

	dst_nid = get_nid(tvb, offset);
	proto_tree_add_text(tree, tvb, offset, 8, "dst_nid = %s@tcp%d",
			    ip_to_str((guint8 *) &dst_nid.addr),
			    dst_nid.interface);
	offset += 8;
	proto_tree_add_item(tree, hf_lnet_ib_dststamp, tvb,offset, 8,
			    little_endian);
	offset += 8;

	/* LNet payloads only exist when the LND msg type is IMMEDIATE.
	   Return a zero offset for all other types. */
	return (msg_type == IBLND_MSG_IMMEDIATE) ? offset : 0;
}
void get_dnode_of_data(struct f2fs_sb_info *sbi, struct dnode_of_data *dn,
						pgoff_t index, int mode)
{
	int offset[4];
	unsigned int noffset[4];
	struct f2fs_node *parent = NULL;
	nid_t nids[4];
	block_t nblk[4];
	struct node_info ni;
	int level, i;
	int ret;

	level = get_node_path(index, offset, noffset);

	nids[0] = dn->nid;
	parent = dn->inode_blk;
	if (level != 0)
		nids[1] = get_nid(parent, offset[0], 1);
	else
		dn->node_blk = dn->inode_blk;

	get_node_info(sbi, nids[0], &ni);
	nblk[0] = ni.blk_addr;

	for (i = 1; i <= level; i++) {
		if (!nids[i] && mode == ALLOC_NODE) {
			f2fs_alloc_nid(sbi, &nids[i], 0);

			dn->nid = nids[i];

			/* Function new_node_blk get a new f2fs_node blk and update*/
			/* We should make sure that dn->node_blk == NULL*/
			nblk[i] = new_node_block(sbi, dn, noffset[i]);
			ASSERT(nblk[i]);

			set_nid(parent, offset[i - 1], nids[i], i == 1);
		} else {
			/* If Sparse file no read API, */
			struct node_info ni;

			get_node_info(sbi, nids[i], &ni);
			dn->node_blk = calloc(BLOCK_SZ, 1);
			ASSERT(dn->node_blk);

			ret = dev_read_block(dn->node_blk, ni.blk_addr);
			ASSERT(ret >= 0);

			nblk[i] = ni.blk_addr;
		}

		if (mode == ALLOC_NODE){
			/* Parent node may have changed */
			ret = dev_write_block(parent, nblk[i - 1]);
			ASSERT(ret >= 0);
		}
		if (i != 1)
			free(parent);

		if (i < level) {
			parent = dn->node_blk;
			nids[i + 1] = get_nid(parent, offset[i], 0);
		}
	}

	dn->nid = nids[level];
	dn->ofs_in_node = offset[level];
	dn->data_blkaddr = datablock_addr(dn->node_blk, dn->ofs_in_node);
	dn->node_blkaddr = nblk[level];
}