CMS 3D CMS Logo

Public Member Functions

cond::AlignSplitIOV Class Reference

Inheritance diagram for cond::AlignSplitIOV:
cond::Utilities

List of all members.

Public Member Functions

 AlignSplitIOV ()
int execute ()
template<class T >
std::string processPayloadContainer (cond::DbSession &sourcedb, cond::DbSession &destdb, const std::string &token, const std::string &containerName)
 ~AlignSplitIOV ()

Detailed Description

Definition at line 35 of file aligncond_split_iov.cc.


Constructor & Destructor Documentation

cond::AlignSplitIOV::AlignSplitIOV ( )

Definition at line 49 of file aligncond_split_iov.cc.

References cond::Utilities::addAuthenticationOptions(), and cond::Utilities::addConnectOption().

 :Utilities("aligncond_split_iov")
{
  addConnectOption("sourceConnect","s","source connection string(required)");
  addConnectOption("destConnect","d","destionation connection string(required)");
  addOption<std::string>("sourceTag","i","tag to export( default = destination tag)");
  addOption<std::string>("destTag","t","destination tag (required)");
  addAuthenticationOptions();
  addOption<bool>("verbose","v","verbose");
}
cond::AlignSplitIOV::~AlignSplitIOV ( )

Definition at line 60 of file aligncond_split_iov.cc.

{

}

Member Function Documentation

int cond::AlignSplitIOV::execute ( ) [virtual]

Reimplemented from cond::Utilities.

Definition at line 65 of file aligncond_split_iov.cc.

References cond::MetaData::addMapping(), cond::IOVEditor::append(), cond::IOVProxy::begin(), cond::DbSession::classNameForItem(), cond::DbScopedTransaction::commit(), gather_cfg::cout, cond::IOVEditor::create(), idDealer::editor, cond::IOVProxy::end(), cond::TimeTypeSpecs::endValue, cond::MetaData::getToken(), o2o::iov, max(), min, stor::utils::sleep(), cond::IOVEditor::stamp(), cond::DbTransaction::start(), cond::DbScopedTransaction::start(), cond::IOVProxy::timetype(), cond::timeTypeSpecs, cond::IOVEditor::token(), cond::DbSession::transaction(), python::IdGenerator::transaction, and cond::userInfo().

{
  initializePluginManager();
 
  std::string sourceConnect = getOptionValue<std::string>("sourceConnect");
  std::string destConnect = getOptionValue<std::string>("destConnect");
  
  std::string destTag = getOptionValue<std::string>("destTag");
  std::string sourceTag(destTag);
  if (hasOptionValue("sourceTag"))
    sourceTag = getOptionValue<std::string>("sourceTag");
  bool verbose = hasOptionValue("verbose");
  
  cond::Time_t since = std::numeric_limits<cond::Time_t>::min();
  cond::Time_t till = std::numeric_limits<cond::Time_t>::max();

  std::string sourceiovtoken;
  cond::TimeType sourceiovtype;

  std::string destiovtoken;

  cond::DbSession sourcedb = openDbSession("sourceConnect", false);
  cond::DbSession destdb = openDbSession("destConnect");

  sourcedb.transaction().start(false);
  cond::MetaData sourceMetadata(sourcedb);
  sourceiovtoken = sourceMetadata.getToken(sourceTag);
  if (sourceiovtoken.empty()) 
    throw std::runtime_error(std::string("tag ") + sourceTag + std::string(" not found"));

  if (verbose)
    std::cout << "source iov token: " << sourceiovtoken << std::endl;

  cond::IOVProxy iov(sourcedb, sourceiovtoken);
  sourceiovtype = iov.timetype();
  if (verbose)
    std::cout << "source iov type " << sourceiovtype << std::endl;

  since = std::max(since, cond::timeTypeSpecs[sourceiovtype].beginValue);
  till  = std::min(till,  cond::timeTypeSpecs[sourceiovtype].endValue);
  
  unsigned int counter = 0;
  for (cond::IOVProxy::const_iterator ioviterator = iov.begin();
       ioviterator != iov.end();
       ++ioviterator) {

    std::stringstream newTag;
    newTag << destTag << "_" << counter;
    
    std::cout << "iov " << counter << ":\t" 
              << ioviterator->since() << " \t "
              << ioviterator->till() << std::endl;
    
    if (verbose)
      std::cout << "\t" << ioviterator->token() << std::endl;

    cond::DbScopedTransaction transaction(destdb);
    transaction.start(false);
    std::string payloadContainerName = sourcedb.classNameForItem(ioviterator->token());
    std::string objToken;
    if (payloadContainerName=="Alignments")
      objToken = processPayloadContainer<Alignments>(sourcedb, destdb, 
                                                     ioviterator->token(), payloadContainerName);
    else if (payloadContainerName=="AlignmentErrors")
      objToken = processPayloadContainer<AlignmentErrors>(sourcedb, destdb,
                                                          ioviterator->token(), payloadContainerName);
    else if (payloadContainerName=="AlignmentSurfaceDeformations")
      objToken = processPayloadContainer<AlignmentSurfaceDeformations>(sourcedb, destdb,
                                                                       ioviterator->token(), payloadContainerName);
    else {
      return 1;
    }

    cond::IOVEditor editor(destdb);
    editor.create(iov.timetype(), cond::timeTypeSpecs[sourceiovtype].endValue);
    editor.append(cond::timeTypeSpecs[sourceiovtype].beginValue, objToken);
    std::string iovToken = editor.token();
    editor.stamp(cond::userInfo(),false);
 
    cond::MetaData metadata(destdb);
    metadata.addMapping(newTag.str(), iovToken, sourceiovtype);
    transaction.commit();
    
    ::sleep(1);

    ++counter;
  }
  
  std::cout << "Total # of payload objects: " << counter << std::endl;
  
  return 0;
}
template<class T >
std::string cond::AlignSplitIOV::processPayloadContainer ( cond::DbSession sourcedb,
cond::DbSession destdb,
const std::string &  token,
const std::string &  containerName 
)

Definition at line 159 of file aligncond_split_iov.cc.

References cond::DbSession::createDatabase(), cond::DbSession::getTypedObject(), and cond::DbSession::storeObject().

{
  boost::shared_ptr<T> object = sourcedb.getTypedObject<T>(token);
  destdb.createDatabase();
  return destdb.storeObject(object.get(), containerName);
}