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; } } }
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); }
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); } } }
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(); } } }
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); }
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); }