bool MM_EnvironmentBase::initialize(MM_GCExtensionsBase *extensions) { setEnvironmentId(MM_AtomicOperations::add(&extensions->currentEnvironmentCount, 1) - 1); setAllocationColor(extensions->newThreadAllocationColor); if (extensions->isStandardGC()) { /* pass veryLargeObjectThreshold = 0 to initialize limited size of veryLargeEntryPool for thread (to reduce footprint), * but if the threshold is bigger than maxHeap size, we would pass orignal threshold to indicate no veryLargeEntryPool needed */ uintptr_t veryLargeObjectThreshold = (extensions->largeObjectAllocationProfilingVeryLargeObjectThreshold <= extensions->memoryMax)?0:extensions->largeObjectAllocationProfilingVeryLargeObjectThreshold; if (!_freeEntrySizeClassStats.initialize(this, extensions->largeObjectAllocationProfilingTopK, extensions->freeMemoryProfileMaxSizeClasses, veryLargeObjectThreshold)) { return false; } } #if defined(OMR_GC_MODRON_SCAVENGER) || defined(OMR_GC_VLHGC) if (!_hotFieldStats.initialize(this)) { return false; } #endif /* defined(OMR_GC_MODRON_SCAVENGER) || defined(OMR_GC_VLHGC) */ #if defined(OMR_GC_SEGREGATED_HEAP) if (extensions->isSegregatedHeap()) { _regionWorkList = MM_RegionPoolSegregated::allocateHeapRegionQueue(this, MM_HeapRegionList::HRL_KIND_LOCAL_WORK, true, false, false); if (NULL == _regionWorkList) { return false; } _regionLocalFree = MM_RegionPoolSegregated::allocateHeapRegionQueue(this, MM_HeapRegionList::HRL_KIND_LOCAL_WORK, true, false, false); if (NULL == _regionLocalFree) { return false; } _regionLocalFull = MM_RegionPoolSegregated::allocateHeapRegionQueue(this, MM_HeapRegionList::HRL_KIND_LOCAL_WORK, true, false, false); if (NULL == _regionLocalFull) { return false; } } #endif /* OMR_GC_SEGREGATED_HEAP */ return true; }
void WorkflowTest::testDefaultWorkflow() { // TODO: init/begin/end trans // STEP 1: create transaction object SwdbPrivate::Transaction trans(conn); CPPUNIT_ASSERT(trans.getDone() == false); // STEP 2: set vars trans.setReleasever("26"); // populate goal // resolve dependencies // prepare RPM transaction // STEP 3: associate RPMs to the transaction // bash-4.4.12-5.fc26.x86_64 auto rpm_bash = std::make_shared< RPMItem >(conn); rpm_bash->setName("bash"); rpm_bash->setEpoch(0); rpm_bash->setVersion("4.4.12"); rpm_bash->setRelease("5.fc26"); rpm_bash->setArch("x86_64"); std::string repoid = "base"; TransactionItemAction action = TransactionItemAction::INSTALL; TransactionItemReason reason = TransactionItemReason::GROUP; trans.addItem(rpm_bash, repoid, action, reason); // systemd-233-6.fc26 auto rpm_systemd = std::make_shared< RPMItem >(conn); rpm_systemd->setName("systemd"); rpm_systemd->setEpoch(0); rpm_systemd->setVersion("233"); rpm_systemd->setRelease("6.fc26"); rpm_systemd->setArch("x86_64"); repoid = "base"; action = TransactionItemAction::OBSOLETE; reason = TransactionItemReason::USER; auto ti_rpm_systemd = trans.addItem(rpm_systemd, repoid, action, reason); // sysvinit-2.88-14.dsf.fc20 auto rpm_sysvinit = std::make_shared< RPMItem >(conn); rpm_sysvinit->setName("sysvinit"); rpm_sysvinit->setEpoch(0); rpm_sysvinit->setVersion("2.88"); rpm_sysvinit->setRelease("14.dsf.fc20"); rpm_sysvinit->setArch("x86_64"); repoid = "f20"; action = TransactionItemAction::OBSOLETED; reason = TransactionItemReason::USER; auto ti_rpm_sysvinit = trans.addItem(rpm_sysvinit, repoid, action, reason); ti_rpm_sysvinit->addReplacedBy(ti_rpm_systemd); auto comps_group_core = std::make_shared< CompsGroupItem >(conn); comps_group_core->setGroupId("core"); comps_group_core->setName("Core"); comps_group_core->setTranslatedName("Úplný základ"); comps_group_core->addPackage("bash", true, CompsPackageType::MANDATORY); repoid = ""; action = TransactionItemAction::INSTALL; reason = TransactionItemReason::USER; trans.addItem(comps_group_core, repoid, action, reason); auto comps_environment_minimal = std::make_shared< CompsEnvironmentItem >(conn); comps_environment_minimal->setEnvironmentId("minimal"); comps_environment_minimal->setName("Minimal"); comps_environment_minimal->setTranslatedName("mmm"); comps_environment_minimal->addGroup("core", true, CompsPackageType::MANDATORY); repoid = ""; action = TransactionItemAction::INSTALL; reason = TransactionItemReason::USER; trans.addItem(comps_environment_minimal, repoid, action, reason); // STEP 4: save transaction and all associated items trans.begin(); // STEP 5: run RPM transaction; callback: mark completed items for (auto i : trans.getItems()) { i->setDone(true); i->save(); } // STEP 6 // mark completed transaction trans.finish(true); CPPUNIT_ASSERT(trans.getDone() == true); // VERIFY // verify that data is available via public API auto trans2 = libdnf::Transaction(conn, trans.getId()); CPPUNIT_ASSERT(trans2.getDone() == true); CPPUNIT_ASSERT(trans2.getItems().size() == 5); for (auto i : trans2.getItems()) { if (i->getId() == 1) { CPPUNIT_ASSERT(i->getAction() == TransactionItemAction::INSTALL); CPPUNIT_ASSERT(i->getReason() == TransactionItemReason::GROUP); CPPUNIT_ASSERT(i->getRepoid() == "base"); } else if (i->getId() == 2) { CPPUNIT_ASSERT(i->getAction() == TransactionItemAction::OBSOLETE); CPPUNIT_ASSERT(i->getReason() == TransactionItemReason::USER); CPPUNIT_ASSERT(i->getRepoid() == "base"); } else if (i->getId() == 3) { CPPUNIT_ASSERT(i->getAction() == TransactionItemAction::OBSOLETED); CPPUNIT_ASSERT(i->getReason() == TransactionItemReason::USER); CPPUNIT_ASSERT(i->getRepoid() == "f20"); } // CPPUNIT_ASSERT(i->getItem()->getItemType() == "rpm"); CPPUNIT_ASSERT(i->getDone() == true); // std::cout << "TransactionItem: " << i->getItem()->toStr() << std::endl; if (i->getItem()->getItemType() == ItemType::GROUP) { auto grp = std::dynamic_pointer_cast< CompsGroupItem >(i->getItem()); CPPUNIT_ASSERT(grp->getPackages().size() == 1); for (auto i : grp->getPackages()) { // std::cout << " CompsGroupPackage: " << i->getName() << std::endl; } } if (i->getItem()->getItemType() == ItemType::ENVIRONMENT) { auto env = std::dynamic_pointer_cast< CompsEnvironmentItem >(i->getItem()); CPPUNIT_ASSERT(env->getGroups().size() == 1); for (auto i : env->getGroups()) { // std::cout << " CompsEnvironmentGroup: @" << i->getGroupId() << std::endl; } } } }