Skip to content

Commit

Permalink
Merge pull request #12001 from wmtan/MultipleSubProcesses
Browse files Browse the repository at this point in the history
Support multiple subprocesses
  • Loading branch information
davidlange6 committed Oct 28, 2015
2 parents d7d8b2b + 4d46207 commit 368d54e
Show file tree
Hide file tree
Showing 25 changed files with 2,349 additions and 241 deletions.
6 changes: 3 additions & 3 deletions FWCore/Framework/interface/EventProcessor.h
Original file line number Diff line number Diff line change
Expand Up @@ -230,8 +230,8 @@ namespace edm {

void setupSignal();

bool hasSubProcess() const {
return subProcess_.get() != 0;
bool hasSubProcesses() const {
return subProcesses_.get() != nullptr && !subProcesses_->empty();
}

void possiblyContinueAfterForkChildFailure();
Expand Down Expand Up @@ -269,7 +269,7 @@ namespace edm {
ProcessContext processContext_;
PathsAndConsumesOfModules pathsAndConsumesOfModules_;
std::auto_ptr<Schedule> schedule_;
std::auto_ptr<SubProcess> subProcess_;
std::unique_ptr<std::vector<SubProcess> > subProcesses_;
std::unique_ptr<HistoryAppender> historyAppender_;

std::unique_ptr<FileBlock> fb_;
Expand Down
2 changes: 1 addition & 1 deletion FWCore/Framework/interface/Schedule.h
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ namespace edm {
ExceptionToActionTable const& actions,
std::shared_ptr<ActivityRegistry> areg,
std::shared_ptr<ProcessConfiguration> processConfiguration,
const ParameterSet* subProcPSet,
bool hasSubprocesses,
PreallocationConfiguration const& config,
ProcessContext const* processContext);

Expand Down
2 changes: 1 addition & 1 deletion FWCore/Framework/interface/ScheduleItems.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ namespace edm {

std::auto_ptr<Schedule>
initSchedule(ParameterSet& parameterSet,
ParameterSet const* subProcessPSet,
bool hasSubprocesses,
PreallocationConfiguration const& iAllocConfig,
ProcessContext const*);

Expand Down
87 changes: 72 additions & 15 deletions FWCore/Framework/interface/SubProcess.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,10 @@ namespace edm {

virtual ~SubProcess();

SubProcess(SubProcess const&) = delete; // Disallow copying and moving
SubProcess& operator=(SubProcess const&) = delete; // Disallow copying and moving
SubProcess(SubProcess const&) = delete; // Disallow copying
SubProcess& operator=(SubProcess const&) = delete; // Disallow copying
SubProcess(SubProcess&&) = default; // Allow Moving
SubProcess& operator=(SubProcess&&) = default; // Allow moving

//From OutputModule
void selectProducts(ProductRegistry const& preg,
Expand Down Expand Up @@ -102,21 +104,33 @@ namespace edm {
void closeOutputFiles() {
ServiceRegistry::Operate operate(serviceToken_);
schedule_->closeOutputFiles();
if(subProcess_.get()) subProcess_->closeOutputFiles();
if(hasSubProcesses()) {
for(auto& subProcess : *subProcesses_) {
subProcess.closeOutputFiles();
}
}
}

// Call openNewFileIfNeeded() on all OutputModules
void openNewOutputFilesIfNeeded() {
ServiceRegistry::Operate operate(serviceToken_);
schedule_->openNewOutputFilesIfNeeded();
if(subProcess_.get()) subProcess_->openNewOutputFilesIfNeeded();
if(hasSubProcesses()) {
for(auto& subProcess : *subProcesses_) {
subProcess.openNewOutputFilesIfNeeded();
}
}
}

// Call openFiles() on all OutputModules
void openOutputFiles(FileBlock& fb) {
ServiceRegistry::Operate operate(serviceToken_);
schedule_->openOutputFiles(fb);
if(subProcess_.get()) subProcess_->openOutputFiles(fb);
if(hasSubProcesses()) {
for(auto& subProcess : *subProcesses_) {
subProcess.openOutputFiles(fb);
}
}
}

void updateBranchIDListHelper(BranchIDLists const&);
Expand All @@ -128,25 +142,47 @@ namespace edm {
void respondToCloseInputFile(FileBlock const& fb) {
ServiceRegistry::Operate operate(serviceToken_);
schedule_->respondToCloseInputFile(fb);
if(subProcess_.get()) subProcess_->respondToCloseInputFile(fb);
if(hasSubProcesses()) {
for(auto& subProcess : *subProcesses_) {
subProcess.respondToCloseInputFile(fb);
}
}
}

// Call shouldWeCloseFile() on all OutputModules.
bool shouldWeCloseOutput() const {
ServiceRegistry::Operate operate(serviceToken_);
return schedule_->shouldWeCloseOutput() || (subProcess_.get() ? subProcess_->shouldWeCloseOutput() : false);
if(schedule_->shouldWeCloseOutput()) {
return true;
}
if(hasSubProcesses()) {
for(auto const& subProcess : *subProcesses_) {
if(subProcess.shouldWeCloseOutput()) {
return true;
}
}
}
return false;
}

void preForkReleaseResources() {
ServiceRegistry::Operate operate(serviceToken_);
schedule_->preForkReleaseResources();
if(subProcess_.get()) subProcess_->preForkReleaseResources();
if(hasSubProcesses()) {
for(auto& subProcess : *subProcesses_) {
subProcess.preForkReleaseResources();
}
}
}

void postForkReacquireResources(unsigned int iChildIndex, unsigned int iNumberOfChildren) {
ServiceRegistry::Operate operate(serviceToken_);
schedule_->postForkReacquireResources(iChildIndex, iNumberOfChildren);
if(subProcess_.get()) subProcess_->postForkReacquireResources(iChildIndex, iNumberOfChildren);
if(hasSubProcesses()) {
for(auto& subProcess : *subProcesses_) {
subProcess.postForkReacquireResources(iChildIndex, iNumberOfChildren);
}
}
}

/// Return a vector allowing const access to all the ModuleDescriptions for this SubProcess
Expand Down Expand Up @@ -181,7 +217,11 @@ namespace edm {
void enableEndPaths(bool active) {
ServiceRegistry::Operate operate(serviceToken_);
schedule_->enableEndPaths(active);
if(subProcess_.get()) subProcess_->enableEndPaths(active);
if(hasSubProcesses()) {
for(auto& subProcess : *subProcesses_) {
subProcess.enableEndPaths(active);
}
}
}

/// Return true if end_paths are active, and false if they are inactive.
Expand All @@ -201,14 +241,28 @@ namespace edm {
/// If there is a subprocess, get this information from the subprocess.
bool terminate() const {
ServiceRegistry::Operate operate(serviceToken_);
return subProcess_.get() ? subProcess_->terminate() : schedule_->terminate();
if(schedule_->terminate()) {
return true;
}
if(hasSubProcesses()) {
for(auto const& subProcess : *subProcesses_) {
if(subProcess.terminate()) {
return true;
}
}
}
return false;
}

/// Clear all the counters in the trigger report.
void clearCounters() {
ServiceRegistry::Operate operate(serviceToken_);
schedule_->clearCounters();
if(subProcess_.get()) subProcess_->clearCounters();
if(hasSubProcesses()) {
for(auto& subProcess : *subProcesses_) {
subProcess.clearCounters();
}
}
}

private:
Expand All @@ -230,6 +284,9 @@ namespace edm {
return droppedBranchIDToKeptBranchID_;
}

bool hasSubProcesses() const {
return subProcesses_.get() != nullptr && !subProcesses_->empty();
}

std::shared_ptr<ActivityRegistry> actReg_;
ServiceToken serviceToken_;
Expand All @@ -249,9 +306,9 @@ namespace edm {
std::vector<HistoryAppender> historyAppenders_;
PrincipalCache principalCache_;
boost::shared_ptr<eventsetup::EventSetupProvider> esp_;
std::auto_ptr<Schedule> schedule_;
std::unique_ptr<Schedule> schedule_;
std::map<ProcessHistoryID, ProcessHistoryID> parentToChildPhID_;
std::auto_ptr<SubProcess> subProcess_;
std::unique_ptr<std::vector<SubProcess> > subProcesses_;
std::unique_ptr<ParameterSet> processParameterSet_;

// keptProducts_ are pointers to the BranchDescription objects describing
Expand All @@ -275,6 +332,6 @@ namespace edm {
};

// free function
std::auto_ptr<ParameterSet> popSubProcessParameterSet(ParameterSet& parameterSet);
std::unique_ptr<std::vector<ParameterSet> > popSubProcessVParameterSet(ParameterSet& parameterSet);
}
#endif
Loading

0 comments on commit 368d54e

Please sign in to comment.