本文整理汇总了C++中TError函数的典型用法代码示例。如果您正苦于以下问题:C++ TError函数的具体用法?C++ TError怎么用?C++ TError使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了TError函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: L_ACT
TError TContainerHolder::Restore(TScopedLock &holder_lock, const std::string &name,
const kv::TNode &node) {
if (name == ROOT_CONTAINER || name == PORTO_ROOT_CONTAINER)
return TError::Success();
L_ACT() << "Restore container " << name << " (" << node.ShortDebugString() << ")" << std::endl;
auto parent = GetParent(name);
if (!parent)
return TError(EError::InvalidValue, "invalid parent container");
int id = 0;
TError error = RestoreId(node, id);
if (error)
return error;
if (!id)
return TError(EError::Unknown, "Couldn't restore container id");
auto c = std::make_shared<TContainer>(shared_from_this(), Storage, name, parent, id);
error = c->Restore(holder_lock, node);
if (error) {
L_ERR() << "Can't restore container " << name << ": " << error << std::endl;
return error;
}
Containers[name] = c;
Statistics->Created++;
return TError::Success();
}
示例2: TError
TError TClient::ComposeRelativeName(const TContainer &target,
std::string &relative_name) const {
std::string name = target.GetName();
auto base = ClientContainer.lock();
if (!base)
return TError(EError::ContainerDoesNotExist, "Cannot find client container");
std::string ns = base->GetPortoNamespace();
if (target.IsRoot()) {
relative_name = ROOT_CONTAINER;
return TError::Success();
}
if (ns == "") {
relative_name = name;
return TError::Success();
}
if (name.length() <= ns.length() || name.compare(0, ns.length(), ns) != 0)
return TError(EError::ContainerDoesNotExist,
"Cannot access container " + name + " from namespace " + ns);
relative_name = name.substr(ns.length());
return TError::Success();
}
示例3: rtnl_route_alloc
TError TNlLink::AddDirectRoute(const TNlAddr &addr) {
struct rtnl_route *route;
struct rtnl_nexthop *nh;
int ret;
route = rtnl_route_alloc();
if (!route)
return TError(EError::Unknown, "Cannot allocate route");
ret = rtnl_route_set_dst(route, addr.Addr);
if (ret < 0) {
rtnl_route_put(route);
return Error(ret, "Cannot set route destination");
}
nh = rtnl_route_nh_alloc();
if (!route) {
rtnl_route_put(route);
return TError(EError::Unknown, "Cannot allocate next hop");
}
rtnl_route_nh_set_ifindex(nh, GetIndex());
rtnl_route_add_nexthop(route, nh);
Dump("add", route);
ret = rtnl_route_add(GetSock(), route, NLM_F_CREATE | NLM_F_REPLACE);
rtnl_route_put(route);
if (ret < 0)
return Error(ret, "Cannot add direct route");
return TError::Success();
}
示例4: rtnl_qdisc_alloc
TError TNlHtb::Create(const TNlLink &link, uint32_t defaultClass) {
TError error = TError::Success();
int ret;
struct rtnl_qdisc *qdisc;
qdisc = rtnl_qdisc_alloc();
if (!qdisc)
return TError(EError::Unknown, std::string("Unable to allocate qdisc object"));
rtnl_tc_set_ifindex(TC_CAST(qdisc), link.GetIndex());
rtnl_tc_set_parent(TC_CAST(qdisc), Parent);
rtnl_tc_set_handle(TC_CAST(qdisc), Handle);
ret = rtnl_tc_set_kind(TC_CAST(qdisc), "htb");
if (ret < 0) {
error = TError(EError::Unknown, std::string("Unable to set qdisc type: ") + nl_geterror(ret));
goto free_qdisc;
}
rtnl_htb_set_defcls(qdisc, TC_H_MIN(defaultClass));
rtnl_htb_set_rate2quantum(qdisc, 10);
link.Dump("add", qdisc);
ret = rtnl_qdisc_add(link.GetSock(), qdisc, NLM_F_CREATE);
if (ret < 0)
error = TError(EError::Unknown, std::string("Unable to add qdisc: ") + nl_geterror(ret));
free_qdisc:
rtnl_qdisc_put(qdisc);
return error;
}
示例5: rtnl_cls_alloc
TError TNlCgFilter::Remove(const TNlLink &link) {
TError error = TError::Success();
struct rtnl_cls *cls;
int ret;
cls = rtnl_cls_alloc();
if (!cls)
return TError(EError::Unknown, std::string("Unable to allocate filter object"));
rtnl_tc_set_ifindex(TC_CAST(cls), link.GetIndex());
ret = rtnl_tc_set_kind(TC_CAST(cls), FilterType);
if (ret < 0) {
error = TError(EError::Unknown, std::string("Unable to set filter type: ") + nl_geterror(ret));
goto free_cls;
}
rtnl_cls_set_prio(cls, FilterPrio);
rtnl_cls_set_protocol(cls, 0);
rtnl_tc_set_parent(TC_CAST(cls), Parent);
link.Dump("remove", cls);
ret = rtnl_cls_delete(link.GetSock(), cls, 0);
if (ret < 0)
error = TError(EError::Unknown, std::string("Unable to remove filter: ") + nl_geterror(ret));
free_cls:
rtnl_cls_put(cls);
return error;
}
示例6: lock
TError TClient::SendResponse(bool first) {
TScopedLock lock(Mutex);
if (Fd < 0)
return TError::Success(); /* Connection closed */
ssize_t len = send(Fd, &Buffer[Offset], Length - Offset, MSG_DONTWAIT);
if (len > 0)
Offset += len;
else if (len == 0) {
if (!first)
return TError(EError::Unknown, "send return zero");
} else if (errno != EAGAIN && errno != EWOULDBLOCK)
return TError(EError::Unknown, errno, "send response failed");
if (Offset >= Length) {
Length = Offset = 0;
Processing = false;
return EpollLoop->StartInput(Fd);
}
if (first)
return EpollLoop->StartOutput(Fd);
return TError::Success();
}
示例7: TError
TError TTclass::Create() {
TError firstError = TError::Success();
for (auto &link : Net->GetLinks()) {
auto alias = link->GetAlias();
if (Prio.find(alias) == Prio.end())
return TError(EError::Unknown, "Can't find prio for link " + alias);
else if (Rate.find(alias) == Rate.end())
return TError(EError::Unknown, "Can't find rate for link " + alias);
else if (Ceil.find(alias) == Ceil.end())
return TError(EError::Unknown, "Can't find ceil for link " + alias);
TNlClass tclass(link, GetParent(), Handle);
if (tclass.Exists()) {
if (!tclass.Valid(Prio[alias], Rate[alias], Ceil[alias]))
(void)tclass.Remove();
else
continue;
}
TError error = tclass.Create(Prio[alias], Rate[alias], Ceil[alias]);
if (!firstError)
firstError = error;
}
if (firstError)
return firstError;
return TError::Success();
}
示例8: sizeof
TError TClient::IdentifyClient(TContainerHolder &holder, bool initial) {
std::shared_ptr<TContainer> ct;
struct ucred cr;
socklen_t len = sizeof(cr);
TError error;
if (getsockopt(Fd, SOL_SOCKET, SO_PEERCRED, &cr, &len))
return TError(EError::Unknown, errno, "Cannot identify client: getsockopt() failed");
/* check that request from the same pid and container is still here */
if (!initial && Pid == cr.pid && TaskCred.Uid == cr.uid &&
TaskCred.Gid == cr.gid && !ClientContainer.expired())
return TError::Success();
TaskCred.Uid = cr.uid;
TaskCred.Gid = cr.gid;
Pid = cr.pid;
error = holder.FindTaskContainer(Pid, ct);
if (error && error.GetErrno() != ENOENT)
L_WRN() << "Cannot identify container of pid " << Pid
<< " : " << error << std::endl;
if (error)
return error;
if (!ct->IsPortoEnabled())
return TError(EError::Permission,
"Porto disabled in container " + ct->GetName());
ClientContainer = ct;
error = TPath("/proc/" + std::to_string(Pid) + "/comm").ReadAll(Comm, 64);
if (error)
Comm = "<unknown process>";
else
Comm.resize(Comm.length() - 1); /* cut \n at the end */
if (ct->IsRoot()) {
Cred.Uid = cr.uid;
Cred.Gid = cr.gid;
error = LoadGroups();
if (error && error.GetErrno() != ENOENT)
L_WRN() << "Cannot load supplementary group list" << Pid
<< " : " << error << std::endl;
} else {
/* requests from containers are executed in behalf of their owners */
Cred = ct->OwnerCred;
}
ReadOnlyAccess = !Cred.IsPortoUser();
return TError::Success();
}
示例9: GetTaskParent
TError GetTaskParent(pid_t pid, pid_t &parent_pid) {
std::string path = "/proc/" + std::to_string(pid) + "/stat";
int res, ppid;
FILE *file;
file = fopen(path.c_str(), "r");
if (!file)
return TError(EError::Unknown, errno, "fopen(" + path + ")");
res = fscanf(file, "%*d (%*[^)]) %*c %d", &ppid);
fclose(file);
if (res != 1)
return TError(EError::Unknown, errno, "Cannot parse " + path);
parent_pid = ppid;
return TError::Success();
}
示例10: Create
TError TContainerHolder::CreateRoot(TScopedLock &holder_lock) {
std::shared_ptr<TContainer> container;
TError error;
error = Create(holder_lock, ROOT_CONTAINER, TCred(0, 0), container);
if (error)
return error;
if (container->GetId() != ROOT_CONTAINER_ID)
return TError(EError::Unknown, "Unexpected root container id " + std::to_string(container->GetId()));
error = IdMap.GetAt(DEFAULT_TC_MINOR);
if (error)
return error;
error = container->Prop->Set<bool>(P_ISOLATE, false);
if (error)
return error;
error = container->Prop->Set<std::vector<std::string>>(P_NET, { "host" });
if (error)
return error;
error = container->Start(nullptr, true);
if (error)
return error;
return TError::Success();
}
示例11: TError
TError TCgroup::Remove() const {
struct stat st;
TError error;
if (Secondary())
return TError(EError::Unknown, "Cannot create secondary cgroup " + Type());
L_ACT() << "Remove cgroup " << *this << std::endl;
error = Path().Rmdir();
/* workaround for bad synchronization */
if (error && error.GetErrno() == EBUSY &&
!Path().StatStrict(st) && st.st_nlink == 2) {
for (int i = 0; i < 100; i++) {
usleep(config().daemon().cgroup_remove_timeout_s() * 10000);
error = Path().Rmdir();
if (!error || error.GetErrno() != EBUSY)
break;
}
}
if (error && (error.GetErrno() != ENOENT || Exists()))
L_ERR() << "Cannot remove cgroup " << *this << " : " << error << std::endl;
return error;
}
示例12: rtnl_addr_alloc
TError TNlLink::AddAddress(const TNlAddr &addr) {
struct rtnl_addr *a = rtnl_addr_alloc();
if (!a)
return TError(EError::Unknown, "Cannot allocate address");
rtnl_addr_set_link(a, Link);
rtnl_addr_set_family(a, nl_addr_get_family(addr.Addr));
rtnl_addr_set_flags(a, IFA_F_NODAD);
int ret = rtnl_addr_set_local(a, addr.Addr);
if (ret < 0) {
rtnl_addr_put(a);
return Error(ret, "Cannot set local address");
}
ret = rtnl_addr_add(GetSock(), a, 0);
if (ret < 0) {
rtnl_addr_put(a);
return Error(ret, "Cannot add address");
}
rtnl_addr_put(a);
return TError::Success();
}
示例13: rtnl_neigh_alloc
TError TNl::ProxyNeighbour(int ifindex, const TNlAddr &addr, bool add) {
struct rtnl_neigh *neigh;
int ret;
neigh = rtnl_neigh_alloc();
if (!neigh)
return TError(EError::Unknown, "Cannot allocate neighbour");
ret = rtnl_neigh_set_dst(neigh, addr.Addr);
if (ret) {
rtnl_neigh_put(neigh);
return Error(ret, "Cannot set neighbour dst");
}
rtnl_neigh_set_flags(neigh, NTF_PROXY);
rtnl_neigh_set_state(neigh, NUD_PERMANENT);
rtnl_neigh_set_ifindex(neigh, ifindex);
if (add) {
Dump("add", neigh);
ret = rtnl_neigh_add(Sock, neigh, NLM_F_CREATE | NLM_F_REPLACE);
} else {
Dump("del", neigh);
ret = rtnl_neigh_delete(Sock, neigh, 0);
if (ret == -NLE_OBJ_NOTFOUND)
ret = 0;
}
rtnl_neigh_put(neigh);
if (ret)
return Error(ret, "Cannot modify neighbour for l3 network");
return TError::Success();
}
示例14: GameServer
void CGrottoGame::SetupGame(tstring sType)
{
if (sType == "level")
{
CGrottoPlayer* pPlayer = GameServer()->Create<CGrottoPlayer>("CGrottoPlayer");
Game()->AddPlayer(pPlayer);
CPlayerCharacter* pCharacter = GameServer()->Create<CPlayerCharacter>("CPlayerCharacter");
pCharacter->SetGlobalOrigin(Vector(0, 0, 0));
pPlayer->SetCharacter(pCharacter);
GameServer()->LoadLevel(CVar::GetCVarValue("game_level"));
pCharacter->MoveToPlayerStart();
Application()->SetMouseCursorEnabled(false);
}
else if (sType == "menu")
{
Application()->SetMouseCursorEnabled(true);
}
else
{
TError("Unrecognized game type: " + sType + "\n");
}
}
示例15: rtnl_class_alloc_cache
TError TNlClass::Load(const TNl &nl) {
struct nl_cache *cache;
struct rtnl_class *tclass;
int ret = rtnl_class_alloc_cache(nl.GetSock(), Index, &cache);
if (ret < 0)
return nl.Error(ret, "Cannot allocate class cache");
tclass = rtnl_class_get(cache, Index, Handle);
if (!tclass) {
nl_cache_free(cache);
return TError(EError::Unknown, "Can't find tc class");
}
Kind = rtnl_tc_get_kind(TC_CAST(tclass));
if (Kind == "htb") {
Prio = rtnl_htb_get_prio(tclass);
Rate = rtnl_htb_get_rate(tclass);
Ceil = rtnl_htb_get_ceil(tclass);
}
if (Kind == "hfsc") {
struct tc_service_curve sc;
if (!rtnl_class_hfsc_get_fsc(tclass, &sc))
Rate = sc.m2;
if (!rtnl_class_hfsc_get_usc(tclass, &sc))
Ceil = sc.m2;
}
rtnl_class_put(tclass);
nl_cache_free(cache);
return TError::Success();
}