}
// check for changed request mappings
- for (hash_map<tid_t,Op*>::iterator p = ops.begin();
- p != ops.end();
- ++p) {
+ map<tid_t,Op*>::iterator p = ops.begin();
+ while (p != ops.end()) {
Op *op = p->second;
+ ++p; // check_op_pool_dne() may touch ops; prevent iterator invalidation
ldout(cct, 10) << " checking op " << op->tid << dendl;
int r = recalc_op_target(op);
switch (r) {
// unpause requests?
if ((was_pauserd && !pauserd) ||
(was_pausewr && !pausewr))
- for (hash_map<tid_t,Op*>::iterator p = ops.begin();
+ for (map<tid_t,Op*>::iterator p = ops.begin();
p != ops.end();
p++) {
Op *op = p->second;
cutoff -= cct->_conf->objecter_timeout; // timeout
unsigned laggy_ops = 0;
- for (hash_map<tid_t,Op*>::iterator p = ops.begin();
+ for (map<tid_t,Op*>::iterator p = ops.begin();
p != ops.end();
p++) {
Op *op = p->second;
void Objecter::dump_active()
{
ldout(cct, 20) << "dump_active .. " << num_homeless_ops << " homeless" << dendl;
- for (hash_map<tid_t,Op*>::iterator p = ops.begin(); p != ops.end(); p++) {
+ for (map<tid_t,Op*>::iterator p = ops.begin(); p != ops.end(); p++) {
Op *op = p->second;
ldout(cct, 20) << op->tid << "\t" << op->pgid << "\tosd." << (op->session ? op->session->osd : -1)
<< "\t" << op->oid << "\t" << op->ops << dendl;
void Objecter::dump_ops(Formatter& fmt) const
{
fmt.open_array_section("ops");
- for (hash_map<tid_t,Op*>::const_iterator p = ops.begin();
+ for (map<tid_t,Op*>::const_iterator p = ops.begin();
p != ops.end();
++p) {
Op *op = p->second;
#include <list>
#include <map>
#include <memory>
-#include <ext/hash_map>
using namespace std;
using namespace __gnu_cxx;
private:
// pending ops
- hash_map<tid_t,Op*> ops;
+ map<tid_t,Op*> ops;
int num_homeless_ops;
map<uint64_t, LingerOp*> linger_ops;
map<tid_t,PoolStatOp*> poolstat_ops;