void ServerEntry::released(const SessionIPtr& session) { if(!_loaded.get() && !_load.get()) { return; } ServerDescriptorPtr desc = _loaded.get() ? _loaded->descriptor : _load->descriptor; // // If the server has the session activation mode, we re-load the // server on the node as its deployment might have changed (it's // possible to use ${session.*} variable with server with the // session activation mode. Synchronizing the server will also // shutdown the server on the node. // if(desc->activation == "session") { _updated = true; if(!_load.get()) { _load.reset(_loaded.release()); } _load->sessionId = ""; _session = 0; } TraceLevelsPtr traceLevels = _cache.getTraceLevels(); Glacier2::IdentitySetPrx identitySet = session->getGlacier2IdentitySet(); Glacier2::StringSetPrx adapterIdSet = session->getGlacier2AdapterIdSet(); if(identitySet && adapterIdSet) { ServerHelperPtr helper = createHelper(desc); multiset<string> adapterIds; multiset<Ice::Identity> identities; helper->getIds(adapterIds, identities); try { // // SunCC won't accept the following: // // ctl->adapterIds()->remove(Ice::StringSeq(adapterIds.begin(), adapterIds.end())); // ctl->identities()->remove(Ice::IdentitySeq(identities.begin(), identities.end())); // Ice::StringSeq adapterIdSeq; for(multiset<string>::iterator p = adapterIds.begin(); p != adapterIds.end(); ++p) { adapterIdSeq.push_back(*p); } Ice::IdentitySeq identitySeq; for(multiset<Ice::Identity>::iterator q = identities.begin(); q != identities.end(); ++q) { identitySeq.push_back(*q); } adapterIdSet->remove(adapterIdSeq); identitySet->remove(identitySeq); } catch(const Ice::LocalException& ex) { if(traceLevels && traceLevels->server > 0) { Ice::Trace out(traceLevels->logger, traceLevels->serverCat); out << "couldn't remove Glacier2 filters for server `" << _id << "' allocated by `"; out << session->getId() << ":\n" << ex; } } } if(traceLevels && traceLevels->server > 1) { Ice::Trace out(traceLevels->logger, traceLevels->serverCat); out << "server `" << _id << "' released by `" << session->getId() << "' (" << _count << ")"; } }
void TestControllerI::step(const Glacier2::SessionPrx& currentSession, const TestToken& currentState, TestToken& newState, const Ice::Current&) { switch(currentState.code) { case Test::Finished: { assert("TestController::step() shouldn't have been called with a state of Finished" == 0); break; } case Test::Running: { TestConfiguration& config = _configurations[currentState.config]; assert(!config.description.empty()); bool found = false; SessionTuple session; for(vector<SessionTuple>::const_iterator i = _sessions.begin(); i != _sessions.end() && !found; ++i) { if(i->session == currentSession) { session = *i; found = true; } } assert(found); // // New sessions force configuration step. // bool reconfigure = !session.configured; // // We start with the previous known state. // newState = currentState; ++newState.caseIndex; if(!(newState.caseIndex < (long)config.cases.size())) { // // We are out of test cases for this configuration. Move to // the next configuration. // ++newState.config; if(!(newState.config < (long)_configurations.size())) { newState.code = Test::Finished; newState.expectedResult = false; newState.description = "No more tests"; newState.testReference = ""; newState.config = -1; newState.caseIndex = -1; return; } // // New test configuration! // config = _configurations[newState.config]; newState.description = config.description; newState.caseIndex = 0; reconfigure = true; } newState.expectedResult = config.cases[newState.caseIndex].expectedResult; newState.testReference = config.cases[newState.caseIndex].proxy; if(reconfigure) { Glacier2::StringSetPrx categories = session.sessionControl->categories(); categories->add(config.categoryFiltersAccept); Glacier2::StringSetPrx adapterIds = session.sessionControl->adapterIds(); adapterIds->add(config.adapterIdFiltersAccept); Glacier2::IdentitySetPrx ids = session.sessionControl->identities(); ids->add(config.objectIdFiltersAccept); session.configured = true; } break; } default: { newState.code = Running; newState.config = 0; newState.caseIndex = 0; newState.testReference = ""; newState.description = "Initial running state"; newState.expectedResult = false; break; } } }