Esempio n. 1
0
bool close_socket(TCPsocket sock)
{
	{
		const size_t shard = get_shard(sock);
		const threading::lock lock(*shard_mutexes[shard]);

		pending_receives[shard].erase(std::remove(pending_receives[shard].begin(),pending_receives[shard].end(),sock),pending_receives[shard].end());

		const socket_state_map::iterator lock_it = sockets_locked[shard].find(sock);
		if(lock_it == sockets_locked[shard].end()) {
			remove_buffers(sock);
			return true;
		}
		if (!(lock_it->second == SOCKET_LOCKED || lock_it->second == SOCKET_INTERRUPT)) {
			sockets_locked[shard].erase(lock_it);
			remove_buffers(sock);
			return true;
		} else {
			lock_it->second = SOCKET_INTERRUPT;
			return false;
		}

	}


}
Esempio n. 2
0
bool is_locked(const TCPsocket sock) {
	const size_t shard = get_shard(sock);
	const threading::lock lock(*shard_mutexes[shard]);
	const socket_state_map::iterator lock_it = sockets_locked[shard].find(sock);
	if (lock_it == sockets_locked[shard].end()) return false;
	return (lock_it->second == SOCKET_LOCKED);
}
Esempio n. 3
0
static void queue_buffer(TCPsocket sock, buffer* queued_buf)
{
	const size_t shard = get_shard(sock);
	const threading::lock lock(*shard_mutexes[shard]);
	outgoing_bufs[shard].push_back(queued_buf);
	socket_state_map::const_iterator i = sockets_locked[shard].insert(std::pair<TCPsocket,SOCKET_STATE>(sock,SOCKET_READY)).first;
	if(i->second == SOCKET_READY || i->second == SOCKET_ERRORED) {
		cond[shard]->notify_one();
	}

}
 void transform_edges(TransformType transform_functor) {
   std::vector<graph_shard_id_t> shard_list = get_shard_list();
   for (size_t i = 0; i < shard_list.size(); i++) {
     graph_shard* shard = get_shard(shard_list[i]);
     graph_shard_impl& shard_impl = shard->shard_impl;
     for (size_t j = 0; j < shard->num_edges(); j++) {
       graph_row& row = shard_impl.edge_data[j];
       transform_functor(row);
     }
   }
 }
Esempio n. 5
0
void receive_data(TCPsocket sock)
{
	{
		const size_t shard = get_shard(sock);
		const threading::lock lock(*shard_mutexes[shard]);
		pending_receives[shard].push_back(sock);

		socket_state_map::const_iterator i = sockets_locked[shard].insert(std::pair<TCPsocket,SOCKET_STATE>(sock,SOCKET_READY)).first;
		if(i->second == SOCKET_READY || i->second == SOCKET_ERRORED) {
			cond[shard]->notify_one();
		}
	}
}
Esempio n. 6
0
SDF_boolean_t
object_exists(SDF_internal_ctxt_t *pai, SDF_CONTAINER c, SDF_key_t key) {

    SDF_boolean_t exists = SDF_FALSE;
    objMetaData_t *metaData = plat_alloc(sizeof(objMetaData_t));
    char *fkey = plat_alloc(256);
    char *name = NULL;

    name = (char *)ObjectKey_getName(key->object_id);

    metaData->objFlags = 0;
    metaData->expTime = 0;
    metaData->createTime = 0;
    metaData->keyLen = strlen(name);
    metaData->dataLen = 0;

    memcpy(fkey, name, strlen(name));

    if (!isContainerNull(c) && key != NULL) {
        local_SDF_CONTAINER lc = getLocalContainer(&lc, c);
        local_SDF_CONTAINER_PARENT lparent = getLocalContainerParent(&lparent, lc->parent);

        // We only need to do the check for object containers
        if (lparent->container_type == SDF_OBJECT_CONTAINER) {
            // char buf[size];
            struct shard *shard = NULL;

            if ((shard = get_shard(pai, lc)) == NULL) {

                exists = SDF_FALSE;
                plat_log_msg(21597, PLAT_LOG_CAT_SDF_SHARED, PLAT_LOG_LEVEL_TRACE,
                             "FAILURE: object_exists - failed to get shard");

            } else {

                if (flashGet(shard, metaData, (char *) fkey, NULL)) {

                        exists = SDF_TRUE;
                }

                if (fkey != NULL) {
                    plat_free(fkey);
                }
            }
        }
        releaseLocalContainer(&lc);
        releaseLocalContainerParent(&lparent);
    }

    return (exists);
}
Esempio n. 7
0
SDF_status_t
get(SDF_internal_ctxt_t *pai, SDF_CONTAINER c, SDF_key_t key, SDF_CACHE_OBJ *dest, SDF_size_t *size, SDF_operation_t *opid) {

    SDF_status_t status = SDF_FAILURE;
    struct shard *shard = NULL;
    local_SDF_CONTAINER lc = getLocalContainer(&lc, c);
    local_SDF_CONTAINER_PARENT lparent = getLocalContainerParent(&lparent, lc->parent);

    if (isContainerNull(c) || key == NULL) {

        status = SDF_INVALID_PARAMETER;
        plat_log_msg(21601, PLAT_LOG_CAT_SDF_SHARED,
                     PLAT_LOG_LEVEL_TRACE, "FAILURE: SDFGet - invalid parm");

    } else if ((shard = get_shard(pai, lc)) == NULL) {

        status = SDF_SHARD_NOT_FOUND;
        plat_log_msg(21602, PLAT_LOG_CAT_SDF_SHARED,
                     PLAT_LOG_LEVEL_TRACE, "FAILURE: SDFGet - could not find shard");

    } else {

        switch (lparent->container_type) {

        case SDF_OBJECT_CONTAINER:

            status = get_object(shard, key, dest, size, opid);
            break;

        case SDF_BLOCK_CONTAINER:

            status = get_block(c, shard, key, dest, size, opid);
            break;

        default:
            status = SDF_FAILURE_INVALID_CONTAINER_TYPE;
            plat_log_msg(21603, PLAT_LOG_CAT_SDF_SHARED,
                         PLAT_LOG_LEVEL_ERROR, "FAILURE: SDFGet - unknown container type");
            break;
        }
    }

    releaseLocalContainer(&lc);
    releaseLocalContainerParent(&lparent);

    return (status);
}
 inline size_t num_out_edges(graph_vid_t vid, graph_shard_id_t shardid) {
   graph_shard* shard = get_shard(shardid);
   ASSERT_TRUE(shard != NULL);
   return shard->shard_impl.edge_index.num_out_edges(vid);
 }