blob: 1d595f44ac6cd78c86ad14b008484b98c0f12259 [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
/**
* \file JournalParameters.cpp
*/
#include "JournalParameters.h"
#include <cstdlib> // std::atof, std::atoi, std::atol
namespace tests {
namespace storePerftools {
namespace jrnlPerf {
#ifndef JOURNAL2
// static declarations - for jrnl2, these are inherited
std::string JournalParameters::s_defaultJrnlDir = "/tmp/store";
std::string JournalParameters::s_defaultJrnlBaseFileName = "JournalData";
uint16_t JournalParameters::s_defaultNumJrnlFiles = 8;
uint32_t JournalParameters::s_defaultJrnlFileSize_sblks = 3072;
uint16_t JournalParameters::s_defaultWriteBuffNumPgs = 32;
uint32_t JournalParameters::s_defaultWriteBuffPgSize_sblks = 128;
#endif
JournalParameters::JournalParameters() :
#ifdef JOURNAL2
qpid::asyncStore::jrnl2::JournalParameters()
#else
Parameters(),
m_jrnlDir(s_defaultJrnlDir),
m_jrnlBaseFileName(s_defaultJrnlBaseFileName),
m_numJrnlFiles(s_defaultNumJrnlFiles),
m_jrnlFileSize_sblks(s_defaultJrnlFileSize_sblks),
m_writeBuffNumPgs(s_defaultWriteBuffNumPgs),
m_writeBuffPgSize_sblks(s_defaultWriteBuffPgSize_sblks)
#endif
{}
JournalParameters::JournalParameters(const std::string& jrnlDir,
const std::string& jrnlBaseFileName,
const uint16_t numJrnlFiles,
const uint32_t jrnlFileSize_sblks,
const uint16_t writeBuffNumPgs,
const uint32_t writeBuffPgSize_sblks) :
#ifdef JOURNAL2
qpid::asyncStore::jrnl2::JournalParameters(jrnlDir, jrnlBaseFileName, numJrnlFiles, jrnlFileSize_sblks, writeBuffNumPgs,
writeBuffPgSize_sblks)
#else
Parameters(),
m_jrnlDir(jrnlDir),
m_jrnlBaseFileName(jrnlBaseFileName),
m_numJrnlFiles(numJrnlFiles),
m_jrnlFileSize_sblks(jrnlFileSize_sblks),
m_writeBuffNumPgs(writeBuffNumPgs),
m_writeBuffPgSize_sblks(writeBuffPgSize_sblks)
#endif
{}
#ifdef JOURNAL2
JournalParameters::JournalParameters(const qpid::asyncStore::jrnl2::JournalParameters& jp) :
qpid::asyncStore::jrnl2::JournalParameters(jp)
{}
#endif
JournalParameters::JournalParameters(const JournalParameters& jp) :
#ifdef JOURNAL2
qpid::asyncStore::jrnl2::JournalParameters(jp)
#else
Parameters(),
m_jrnlDir(jp.m_jrnlDir),
m_jrnlBaseFileName(jp.m_jrnlBaseFileName),
m_numJrnlFiles(jp.m_numJrnlFiles),
m_jrnlFileSize_sblks(jp.m_jrnlFileSize_sblks),
m_writeBuffNumPgs(jp.m_writeBuffNumPgs),
m_writeBuffPgSize_sblks(jp.m_writeBuffPgSize_sblks)
#endif
{}
JournalParameters::~JournalParameters() {}
void
JournalParameters::toStream(std::ostream& os) const {
os << "Journal Parameters:" << std::endl;
os << " jrnlDir = \"" << m_jrnlDir << "\"" << std::endl;
os << " jrnlBaseFileName = \"" << m_jrnlBaseFileName << "\"" << std::endl;
os << " numJrnlFiles = " << m_numJrnlFiles << std::endl;
os << " jrnlFileSize_sblks = " << m_jrnlFileSize_sblks << std::endl;
os << " writeBuffNumPgs = " << m_writeBuffNumPgs << std::endl;
os << " writeBuffPgSize_sblks = " << m_writeBuffPgSize_sblks << std::endl;
}
bool
JournalParameters::parseArg(const int arg,
const char* optarg) {
switch(arg) {
case 'j':
m_jrnlDir.assign(optarg);
break;
case 'b':
m_jrnlBaseFileName.assign(optarg);
break;
case 'f':
m_numJrnlFiles = uint16_t(std::atoi(optarg));
break;
case 's':
m_jrnlFileSize_sblks = uint32_t(std::atol(optarg));
break;
case 'p':
m_writeBuffNumPgs = uint16_t(std::atoi(optarg));
break;
case 'c':
m_writeBuffPgSize_sblks = uint32_t(std::atol(optarg));
break;
default:
return false;
}
return true;
}
// static
void
JournalParameters::printArgs(std::ostream& os) {
os << "Journal parameters:" << std::endl;
os << " -j --jrnl_dir: Store directory [\""
<< JournalParameters::s_defaultJrnlDir << "\"]" << std::endl;
os << " -b --jrnl_base_filename: Base name for journal files [\""
<< JournalParameters::s_defaultJrnlBaseFileName << "\"]" << std::endl;
os << " -f --num_jfiles: Number of journal files ["
<< JournalParameters::s_defaultNumJrnlFiles << "]" << std::endl;
os << " -s --jfsize_sblks: Size of each journal file in sblks (512 byte blocks) ["
<< JournalParameters::s_defaultJrnlFileSize_sblks << "]" << std::endl;
os << " -p --wcache_num_pages: Number of write buffer pages ["
<< JournalParameters::s_defaultWriteBuffNumPgs << "]" << std::endl;
os << " -c --wcache_pgsize_sblks: Size of each write buffer page in sblks (512 byte blocks) ["
<< JournalParameters::s_defaultWriteBuffPgSize_sblks << "]" << std::endl;
}
// static
std::string
JournalParameters::shortArgs() {
return "j:b:f:s:p:c:";
}
}}} // namespace tests::storePerftools::jrnlPerf