~ubuntu-branches/ubuntu/utopic/nordugrid-arc/utopic

« back to all changes in this revision

Viewing changes to src/services/a-rex/delegation/FileRecord.cpp

  • Committer: Package Import Robot
  • Author(s): Mattias Ellert
  • Date: 2014-05-01 20:51:02 UTC
  • mfrom: (1.1.11)
  • Revision ID: package-import@ubuntu.com-20140501205102-icy9t3348uxobyx7
Tags: 4.1.0-1
* 4.1.0 Release
* Call dh_autoreconf to support ppc64le (Closes: #744639)

Show diffs side-by-side

added added

removed removed

Lines of Context:
120
120
    db_link_ = new Db(db_env_,DB_CXX_NO_EXCEPTIONS);
121
121
    if(!dberr("Error setting flag DB_DUPSORT",db_lock_->set_flags(DB_DUPSORT))) return false;
122
122
    if(!dberr("Error setting flag DB_DUPSORT",db_locked_->set_flags(DB_DUPSORT))) return false;
123
 
    if(!dberr("Error associating databases",db_link_->associate(NULL,db_lock_,&locked_callback,0))) return false;
124
 
    if(!dberr("Error associating databases",db_link_->associate(NULL,db_locked_,&lock_callback,0))) return false;
 
123
    if(!dberr("Error associating databases",db_link_->associate(NULL,db_lock_,&lock_callback,0))) return false;
 
124
    if(!dberr("Error associating databases",db_link_->associate(NULL,db_locked_,&locked_callback,0))) return false;
125
125
    if(!dberr("Error opening database 'meta'",
126
126
          db_rec_->open(NULL,dbpath.c_str(),   "meta",  DB_BTREE,oflags,mode))) return false;
127
127
    if(!dberr("Error opening database 'link'",
425
425
      std::string owner;
426
426
      uint32_t size = data.get_size();
427
427
      void* buf = data.get_data();
 
428
      buf = parse_string(id,buf,size); //  lock_id - skip
428
429
      buf = parse_string(id,buf,size);
429
430
      buf = parse_string(owner,buf,size);
430
431
      ids.push_back(std::pair<std::string,std::string>(id,owner));
440
441
    return true;
441
442
  }
442
443
 
 
444
 
 
445
  bool FileRecord::ListLocked(const std::string& lock_id, std::list<std::pair<std::string,std::string> >& ids) {
 
446
    if(!valid_) return false;
 
447
    Glib::Mutex::Lock lock(lock_);
 
448
    Dbc* cur = NULL;
 
449
    if(!dberr("listlocked:cursor",db_lock_->cursor(NULL,&cur,0))) return false;
 
450
    Dbt key;
 
451
    Dbt data;
 
452
    make_string(lock_id,key);
 
453
    void* pkey = key.get_data();
 
454
    if(!dberr("listlocked:get1",cur->get(&key,&data,DB_SET))) { // TODO: handle errors
 
455
      ::free(pkey);
 
456
      cur->close(); return false;
 
457
    };
 
458
    for(;;) {
 
459
      std::string id;
 
460
      std::string owner;
 
461
      uint32_t size = data.get_size();
 
462
      void* buf = data.get_data();
 
463
      buf = parse_string(id,buf,size); //  lock_id - skip
 
464
      buf = parse_string(id,buf,size);
 
465
      buf = parse_string(owner,buf,size);
 
466
      ids.push_back(std::pair<std::string,std::string>(id,owner));
 
467
      if(cur->get(&key,&data,DB_NEXT_DUP) != 0) break;
 
468
    };
 
469
    ::free(pkey);
 
470
    cur->close();
 
471
    return true;
 
472
  }
 
473
 
443
474
  bool FileRecord::ListLocks(std::list<std::string>& locks) {
444
475
    if(!valid_) return false;
445
476
    Glib::Mutex::Lock lock(lock_);
458
489
    return true;
459
490
  }
460
491
 
 
492
  bool FileRecord::ListLocks(const std::string& id, const std::string& owner, std::list<std::string>& locks) {
 
493
    // Not implemented yet
 
494
    return false;
 
495
  }
 
496
 
461
497
  FileRecord::Iterator::Iterator(FileRecord& frec):frec_(frec),cur_(NULL) {
462
498
    Glib::Mutex::Lock lock(frec_.lock_);
463
499
    if(!frec_.dberr("Iterator:cursor",frec_.db_rec_->cursor(NULL,&cur_,0))) {