Beispiel #1
0
std::string TPath::BaseName() const {
    char *dup = strdup(Path.c_str());
    PORTO_ASSERT(dup != nullptr);
    char *p = basename(dup);
    std::string out(p);
    free(dup);

    return out;
}
Beispiel #2
0
std::vector<std::shared_ptr<TContainer> > TContainerHolder::List(bool all) const {
    std::vector<std::shared_ptr<TContainer> > ret;

    for (auto c : Containers) {
        PORTO_ASSERT(c.first == c.second->GetName());
        if (!all && c.second->IsPortoRoot())
            continue;
        ret.push_back(c.second);
    }

    return ret;
}
Beispiel #3
0
TError TNetwork::Prepare() {
    PORTO_ASSERT(Qdisc == nullptr);
    PORTO_ASSERT(Tclass == nullptr);
    PORTO_ASSERT(Filter == nullptr);
    PORTO_ASSERT(Links.size() == 0);

    auto lock = ScopedLock();

    TError error = OpenLinks(Links);
    if (error)
        return error;

    for (auto link : Links) {
        TError error = PrepareLink(link);
        if (error)
            return error;
    }

    Qdisc = std::make_shared<TQdisc>(shared_from_this(), rootHandle, defClass);
    Filter = std::make_shared<TFilter>(shared_from_this(), Qdisc);
    Tclass = std::make_shared<TTclass>(shared_from_this(), Qdisc, defClass);

    return TError::Success();
}
Beispiel #4
0
void TContainerHolder::Unlink(TScopedLock &holder_lock, std::shared_ptr<TContainer> c) {
    for (auto name: c->GetChildren()) {
        std::shared_ptr<TContainer> child;
        if (Get(name, child))
            continue;

        Unlink(holder_lock, child);
    }

    c->Destroy(holder_lock);

    TError error = IdMap.Put(c->GetId());
    PORTO_ASSERT(!error);
    Containers.erase(c->GetName());
    Statistics->Created--;
}
Beispiel #5
0
TNlLink::TNlLink(std::shared_ptr<TNl> sock, const std::string &name) {
    Nl = sock;
    Link = rtnl_link_alloc();
    PORTO_ASSERT(Link);
    rtnl_link_set_name(Link, name.c_str());
}
Beispiel #6
0
gid_t GetPortoGroupId() {
    PORTO_ASSERT(PortoGroup);
    return PortoGroup;
}
Beispiel #7
0
TCgroup TSubsystem::Cgroup(const std::string &name) const {
    PORTO_ASSERT(name[0] == '/');
    return TCgroup(this, name);
}
Beispiel #8
0
TCgroup TCgroup::Child(const std::string& name) const {
    PORTO_ASSERT(name[0] != '/');
    if (IsRoot())
        return TCgroup(Subsystem, "/" + name);
    return TCgroup(Subsystem, Name + "/" + name);
}
Beispiel #9
0
void TClient::FinishRequest() {
    PORTO_ASSERT(CurrentClient == this);
    CurrentClient = nullptr;
}
Beispiel #10
0
void TClient::StartRequest() {
    RequestStartMs = GetCurrentTimeMs();
    PORTO_ASSERT(CurrentClient == nullptr);
    CurrentClient = this;
}