Commit 0aa2d510 authored by Eric Cano's avatar Eric Cano
Browse files

Fixed uninitialized values after extending policy structure.

The values are now hardcoded.
Cleanup:
  - Removed object store unit tests for data now in the catalogue.
  - Removed now unnecessary 2nd step addition of retry limits to archive jobs.
  - Removed deprecated ArchiveToFileRequest files.
parent 5bb19ee4
......@@ -46,8 +46,6 @@ struct MountPolicy {
uint64_t retrievePriority;
uint64_t retrieveMinRequestAge;
uint64_t maxDrivesAllowed;
uint64_t maxRetriesWithinMount;
uint64_t maxTotalRetries;
EntryLog creationLog;
EntryLog lastModificationLog;
std::string comment;
......
......@@ -46,21 +46,20 @@ void cta::objectstore::ArchiveRequest::initialize() {
}
void cta::objectstore::ArchiveRequest::addJob(uint16_t copyNumber,
const std::string& tapepool, const std::string& archivequeueaddress) {
const std::string& tapepool, const std::string& archivequeueaddress,
uint16_t maxRetiesWithinMount, uint16_t maxTotalRetries) {
checkPayloadWritable();
auto *j = m_payload.add_jobs();
j->set_copynb(copyNumber);
j->set_status(serializers::ArchiveJobStatus::AJS_PendingNsCreation);
j->set_status(serializers::ArchiveJobStatus::AJS_LinkingToArchiveQueue);
j->set_tapepool(tapepool);
j->set_owner("");
j->set_archivequeueaddress(archivequeueaddress);
j->set_totalretries(0);
j->set_retrieswithinmount(0);
j->set_lastmountwithfailure(0);
// Those 2 values are set to 0 as at creation time, we do not read the
// tape pools yet.
j->set_maxretrieswithinmount(0);
j->set_maxtotalretries(0);
j->set_maxretrieswithinmount(maxRetiesWithinMount);
j->set_maxtotalretries(maxTotalRetries);
}
bool cta::objectstore::ArchiveRequest::setJobSuccessful(uint16_t copyNumber) {
......@@ -80,21 +79,6 @@ bool cta::objectstore::ArchiveRequest::setJobSuccessful(uint16_t copyNumber) {
throw NoSuchJob("In ArchiveRequest::setJobSuccessful(): job not found");
}
void cta::objectstore::ArchiveRequest::setJobFailureLimits(uint16_t copyNumber,
uint16_t maxRetiesWithinMount, uint16_t maxTotalRetries) {
checkPayloadWritable();
auto * jl = m_payload.mutable_jobs();
for (auto j=jl->begin(); j!=jl->end(); j++) {
if (j->copynb() == copyNumber) {
j->set_maxretrieswithinmount(maxRetiesWithinMount);
j->set_maxtotalretries(maxTotalRetries);
return;
}
}
throw NoSuchJob("In ArchiveRequest::setJobFailureLimits(): job not found");
}
bool cta::objectstore::ArchiveRequest::addJobFailure(uint16_t copyNumber,
uint64_t mountId) {
checkPayloadWritable();
......
......@@ -42,9 +42,7 @@ public:
void initialize();
// Job management ============================================================
void addJob(uint16_t copyNumber, const std::string & tapepool,
const std::string & archivequeueaddress);
void setJobFailureLimits(uint16_t copyNumber,
uint16_t maxRetiesWithinMount, uint16_t maxTotalRetries);
const std::string & archivequeueaddress, uint16_t maxRetiesWithinMount, uint16_t maxTotalRetries);
void setJobSelected(uint16_t copyNumber, const std::string & owner);
void setJobPending(uint16_t copyNumber);
bool setJobSuccessful(uint16_t copyNumber); //< returns true if this is the last job
......
/*
* The CERN Tape Archive (CTA) project
* Copyright (C) 2015 CERN
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "GenericObject.hpp"
#include "EntryLog.hpp"
#include "UserIdentity.hpp"
#include "ArchiveQueue.hpp"
#include "ArchiveToFileRequest.hpp"
#include <json-c/json.h>
cta::objectstore::ArchiveToFileRequest::ArchiveToFileRequest(
const std::string& address, Backend& os):
ObjectOps<serializers::ArchiveToFileRequest, serializers::ArchiveToFileRequest_t>(os, address) { }
cta::objectstore::ArchiveToFileRequest::ArchiveToFileRequest(
Backend& os):
ObjectOps<serializers::ArchiveToFileRequest, serializers::ArchiveToFileRequest_t>(os) { }
cta::objectstore::ArchiveToFileRequest::ArchiveToFileRequest(GenericObject& go):
ObjectOps<serializers::ArchiveToFileRequest, serializers::ArchiveToFileRequest_t>(go.objectStore()) {
// Here we transplant the generic object into the new object
go.transplantHeader(*this);
// And interpret the header.
getPayloadFromHeader();
}
void cta::objectstore::ArchiveToFileRequest::initialize() {
// Setup underlying object
ObjectOps<serializers::ArchiveToFileRequest, serializers::ArchiveToFileRequest_t>::initialize();
// This object is good to go (to storage)
m_payloadInterpreted = true;
}
void cta::objectstore::ArchiveToFileRequest::addJob(uint16_t copyNumber,
const std::string& tapepool, const std::string& archivequeueaddress) {
checkPayloadWritable();
auto *j = m_payload.add_jobs();
j->set_copynb(copyNumber);
j->set_status(serializers::ArchiveJobStatus::AJS_PendingNsCreation);
j->set_tapepool(tapepool);
j->set_owner("");
j->set_archivequeueaddress(archivequeueaddress);
j->set_totalretries(0);
j->set_retrieswithinmount(0);
j->set_lastmountwithfailure(0);
// Those 2 values are set to 0 as at creation time, we do not read the
// tape pools yet.
j->set_maxretrieswithinmount(0);
j->set_maxtotalretries(0);
}
bool cta::objectstore::ArchiveToFileRequest::setJobSuccessful(uint16_t copyNumber) {
checkPayloadWritable();
auto * jl = m_payload.mutable_jobs();
for (auto j=jl->begin(); j!=jl->end(); j++) {
if (j->copynb() == copyNumber) {
j->set_status(serializers::ArchiveJobStatus::AJS_Complete);
for (auto j2=jl->begin(); j2!=jl->end(); j2++) {
if (j2->status()!= serializers::ArchiveJobStatus::AJS_Complete &&
j2->status()!= serializers::ArchiveJobStatus::AJS_Failed)
return false;
}
return true;
}
}
throw NoSuchJob("In ArchiveToFileRequest::setJobSuccessful(): job not found");
}
void cta::objectstore::ArchiveToFileRequest::setJobFailureLimits(uint16_t copyNumber,
uint16_t maxRetiesWithinMount, uint16_t maxTotalRetries) {
checkPayloadWritable();
auto * jl = m_payload.mutable_jobs();
for (auto j=jl->begin(); j!=jl->end(); j++) {
if (j->copynb() == copyNumber) {
j->set_maxretrieswithinmount(maxRetiesWithinMount);
j->set_maxtotalretries(maxTotalRetries);
return;
}
}
throw NoSuchJob("In ArchiveToFileRequest::setJobFailureLimits(): job not found");
}
bool cta::objectstore::ArchiveToFileRequest::addJobFailure(uint16_t copyNumber,
uint64_t mountId) {
checkPayloadWritable();
auto * jl = m_payload.mutable_jobs();
// Find the job and update the number of failures (and return the new count)
for (auto j=jl->begin(); j!=jl->end(); j++) {
if (j->copynb() == copyNumber) {
if (j->lastmountwithfailure() == mountId) {
j->set_retrieswithinmount(j->retrieswithinmount() + 1);
} else {
j->set_retrieswithinmount(1);
j->set_lastmountwithfailure(mountId);
}
j->set_totalretries(j->totalretries() + 1);
}
if (j->totalretries() >= j->maxtotalretries()) {
j->set_status(serializers::AJS_Failed);
finishIfNecessary();
return true;
} else {
j->set_status(serializers::AJS_PendingMount);
return false;
}
}
throw NoSuchJob ("In ArchiveToFileRequest::addJobFailure(): could not find job");
}
void cta::objectstore::ArchiveToFileRequest::setAllJobsLinkingToArchiveQueue() {
checkPayloadWritable();
auto * jl=m_payload.mutable_jobs();
for (auto j=jl->begin(); j!=jl->end(); j++) {
j->set_status(serializers::AJS_LinkingToArchiveQueue);
}
}
void cta::objectstore::ArchiveToFileRequest::setAllJobsFailed() {
checkPayloadWritable();
auto * jl=m_payload.mutable_jobs();
for (auto j=jl->begin(); j!=jl->end(); j++) {
j->set_status(serializers::AJS_Failed);
}
}
void cta::objectstore::ArchiveToFileRequest::setAllJobsPendingNSdeletion() {
checkPayloadWritable();
auto * jl=m_payload.mutable_jobs();
for (auto j=jl->begin(); j!=jl->end(); j++) {
j->set_status(serializers::AJS_PendingNsDeletion);
}
}
void cta::objectstore::ArchiveToFileRequest::setArchiveFile(
const cta::common::archiveNS::ArchiveFile& archiveFile) {
checkPayloadWritable();
auto *af = m_payload.mutable_archivefile();
af->set_checksum(archiveFile.checksum);
af->set_fileid(archiveFile.fileId);
af->set_lastmodificationtime(archiveFile.lastModificationTime);
af->set_nshostname(archiveFile.nsHostName);
af->set_size(archiveFile.size);
}
cta::common::archiveNS::ArchiveFile cta::objectstore::ArchiveToFileRequest::getArchiveFile() {
checkPayloadReadable();
auto checksum = m_payload.archivefile().checksum();
auto fileId = m_payload.archivefile().fileid();
const time_t lastModificationTime = m_payload.archivefile().lastmodificationtime();
auto nsHostName = m_payload.archivefile().nshostname();
auto size = m_payload.archivefile().size();
return common::archiveNS::ArchiveFile{nsHostName, fileId, size, checksum, lastModificationTime};
}
void cta::objectstore::ArchiveToFileRequest::setRemoteFile(
const RemotePathAndStatus& remoteFile) {
checkPayloadWritable();
m_payload.mutable_remotefile()->set_mode(remoteFile.status.mode);
m_payload.mutable_remotefile()->set_size(remoteFile.status.size);
m_payload.mutable_remotefile()->set_path(remoteFile.path.getRaw());
cta::objectstore::UserIdentity ui(remoteFile.status.owner);
ui.serialize(*m_payload.mutable_remotefile()->mutable_owner());
}
cta::RemotePathAndStatus cta::objectstore::ArchiveToFileRequest::getRemoteFile() {
checkPayloadReadable();
RemotePath retPath(m_payload.remotefile().path());
cta::objectstore::UserIdentity ui;
ui.deserialize(m_payload.remotefile().owner());
RemoteFileStatus retStatus(ui,
m_payload.remotefile().mode(),
m_payload.remotefile().size());
return cta::RemotePathAndStatus(retPath, retStatus);
}
void cta::objectstore::ArchiveToFileRequest::setPriority(uint64_t priority) {
checkPayloadWritable();
m_payload.set_priority(priority);
}
uint64_t cta::objectstore::ArchiveToFileRequest::getPriority() {
checkPayloadReadable();
return m_payload.priority();
}
void cta::objectstore::ArchiveToFileRequest::setEntryLog(
const objectstore::EntryLog& creationLog) {
checkPayloadWritable();
creationLog.serialize(*m_payload.mutable_log());
}
auto cta::objectstore::ArchiveToFileRequest::getCreationLog() -> EntryLog {
checkPayloadReadable();
EntryLog ret;
ret.deserialize(m_payload.log());
return ret;
}
void cta::objectstore::ArchiveToFileRequest::setArchiveToDirRequestAddress(
const std::string& dirRequestAddress) {
checkPayloadWritable();
m_payload.set_archivetodiraddress(dirRequestAddress);
}
std::list<cta::objectstore::ArchiveToFileRequest::JobDump> cta::objectstore::ArchiveToFileRequest::dumpJobs() {
checkPayloadReadable();
std::list<JobDump> ret;
auto & jl = m_payload.jobs();
for (auto j=jl.begin(); j!=jl.end(); j++) {
ret.push_back(JobDump());
ret.back().copyNb = j->copynb();
ret.back().tapePool = j->tapepool();
ret.back().ArchiveQueueAddress = j->archivequeueaddress();
}
return ret;
}
void cta::objectstore::ArchiveToFileRequest::setJobOwner(
uint16_t copyNumber, const std::string& owner) {
checkPayloadWritable();
// Find the right job
auto mutJobs = m_payload.mutable_jobs();
for (auto job=mutJobs->begin(); job!=mutJobs->end(); job++) {
if (job->copynb() == copyNumber) {
job->set_owner(owner);
return;
}
}
throw NoSuchJob("In ArchiveToFileRequest::setJobOwner: no such job");
}
bool cta::objectstore::ArchiveToFileRequest::finishIfNecessary() {
checkPayloadWritable();
// This function is typically called after changing the status of one job
// in memory. If the job is complete, we will just remove it.
// TODO: we will have to push the result to the ArchiveToDirRequest when
// it gets implemented.
// If all the jobs are either complete or failed, we can remove the request.
auto & jl=m_payload.jobs();
for (auto j=jl.begin(); j!=jl.end(); j++) {
if (j->status() != serializers::AJS_Complete
&& j->status() != serializers::AJS_Failed) {
return false;
}
}
remove();
return true;
}
std::string cta::objectstore::ArchiveToFileRequest::dump() {
checkPayloadReadable();
std::stringstream ret;
ret << "ArchiveToFileRequest" << std::endl;
struct json_object * jo = json_object_new_object();
json_object_object_add(jo, "archivetodiraddress", json_object_new_string(m_payload.archivetodiraddress().c_str()));
json_object_object_add(jo, "priority", json_object_new_int64(m_payload.priority()));
// Object for archive file
json_object * jaf = json_object_new_object();
json_object_object_add(jaf, "checksum", json_object_new_int(m_payload.archivefile().checksum()));
json_object_object_add(jaf, "fileid", json_object_new_int(m_payload.archivefile().fileid()));
json_object_object_add(jaf, "lastmodificationtime", json_object_new_int64(m_payload.archivefile().lastmodificationtime()));
json_object_object_add(jaf, "nshostname", json_object_new_string(m_payload.archivefile().nshostname().c_str()));
json_object_object_add(jaf, "size", json_object_new_int64(m_payload.archivefile().size()));
json_object_object_add(jo, "archiveFile", jaf);
// Array for jobs
json_object * jja = json_object_new_array();
auto & jl = m_payload.jobs();
for (auto j=jl.begin(); j!=jl.end(); j++) {
// Object for job
json_object * jj = json_object_new_object();
json_object_object_add(jj, "copynb", json_object_new_int64(j->copynb()));
json_object_object_add(jj, "lastmountwithfailure", json_object_new_int64(j->lastmountwithfailure()));
json_object_object_add(jj, "maxretrieswithinmount", json_object_new_int64(j->maxretrieswithinmount()));
json_object_object_add(jj, "maxtotalretries", json_object_new_int64(j->maxtotalretries()));
json_object_object_add(jj, "owner", json_object_new_string(j->owner().c_str()));
json_object_object_add(jj, "retrieswithinmount", json_object_new_int64(j->retrieswithinmount()));
json_object_object_add(jj, "status", json_object_new_int64(j->status()));
json_object_object_add(jj, "tapepool", json_object_new_string(j->tapepool().c_str()));
json_object_object_add(jj, "tapepoolAddress", json_object_new_string(j->archivequeueaddress().c_str()));
json_object_object_add(jj, "totalRetries", json_object_new_int64(j->totalretries()));
json_object_array_add(jja, jj);
}
json_object_object_add(jo, "jobs", jja);
// Object for log
json_object * jlog = json_object_new_object();
json_object_object_add(jlog, "comment", json_object_new_string(m_payload.log().comment().c_str()));
json_object_object_add(jlog, "host", json_object_new_string(m_payload.log().host().c_str()));
json_object_object_add(jlog, "time", json_object_new_int64(m_payload.log().time()));
json_object_object_add(jo, "log", jlog);
// Object for remote file
json_object * jrf = json_object_new_object();
json_object_object_add(jrf, "mode", json_object_new_int(m_payload.remotefile().mode()));
json_object_object_add(jrf, "path", json_object_new_string(m_payload.remotefile().path().c_str()));
json_object_object_add(jrf, "size", json_object_new_int64(m_payload.remotefile().size()));
json_object_object_add(jo, "remoteFile", jrf);
ret << json_object_to_json_string_ext(jo, JSON_C_TO_STRING_PRETTY) << std::endl;
json_object_put(jo);
return ret.str();
}
/*
* The CERN Tape Archive (CTA) project
* Copyright (C) 2015 CERN
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "ObjectOps.hpp"
#include "objectstore/cta.pb.h"
#include "common/archiveNS/ArchiveFile.hpp"
#include "common/remoteFS/RemotePathAndStatus.hpp"
#include <list>
namespace cta { namespace objectstore {
class Backend;
class Agent;
class GenericObject;
class EntryLog;
class ArchiveToFileRequest: public ObjectOps<serializers::ArchiveToFileRequest, serializers::ArchiveToFileRequest_t> {
public:
ArchiveToFileRequest(const std::string & address, Backend & os);
ArchiveToFileRequest(Backend & os);
ArchiveToFileRequest(GenericObject & go);
void initialize();
// Job management ============================================================
void addJob(uint16_t copyNumber, const std::string & tapepool,
const std::string & archivequeueaddress);
void setJobFailureLimits(uint16_t copyNumber,
uint16_t maxRetiesWithinMount, uint16_t maxTotalRetries);
void setJobSelected(uint16_t copyNumber, const std::string & owner);
void setJobPending(uint16_t copyNumber);
bool setJobSuccessful(uint16_t copyNumber); //< returns true if this is the last job
bool addJobFailure(uint16_t copyNumber, uint64_t sessionId); //< returns true the job failed
serializers::ArchiveJobStatus getJobStatus(uint16_t copyNumber);
// Handling of the consequences of a job status change for the entire request.
// This function returns true if the request got finished.
bool finishIfNecessary();
// Mark all jobs as pending mount (following their linking to a archive queue)
void setAllJobsLinkingToArchiveQueue();
// Mark all the jobs as being deleted, in case of a cancellation
void setAllJobsFailed();
// Mark all the jobs as pending deletion from NS.
void setAllJobsPendingNSdeletion();
CTA_GENERATE_EXCEPTION_CLASS(NoSuchJob);
// Set a job ownership
void setJobOwner(uint16_t copyNumber, const std::string & owner);
// Request management ========================================================
void setSuccessful();
void setFailed();
// ===========================================================================
void setArchiveFile(const cta::common::archiveNS::ArchiveFile & archiveFile);
cta::common::archiveNS::ArchiveFile getArchiveFile();
void setRemoteFile (const RemotePathAndStatus & remoteFile);
cta::RemotePathAndStatus getRemoteFile();
void setPriority (uint64_t priority);
uint64_t getPriority();
void setEntryLog (const objectstore::EntryLog& creationLog);
EntryLog getCreationLog();
void setArchiveToDirRequestAddress(const std::string & dirRequestAddress);
class JobDump {
public:
uint16_t copyNb;
std::string tapePool;
std::string ArchiveQueueAddress;
};
std::list<JobDump> dumpJobs();
void garbageCollect(const std::string &presumedOwner) {}
std::string dump();
};
}}
/*
* The CERN Tape Archive (CTA) project
* Copyright (C) 2015 CERN
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <gtest/gtest.h>
#include "ArchiveToFileRequest.hpp"
#include "BackendVFS.hpp"
#include "Agent.hpp"
#include "EntryLog.hpp"
#include "UserIdentity.hpp"
namespace unitTests {
TEST(ObjectStore, ArchiveToFileRequestBasicAccess) {
cta::objectstore::BackendVFS be;
cta::objectstore::Agent agent(be);
agent.generateName("unitTest");
time_t now;
std::string tapeAddress = agent.nextId("ArchiveToFileRequest");
{
// Try to create the ArchiveToFileRequest entry
cta::objectstore::ArchiveToFileRequest atfr(tapeAddress, be);
atfr.initialize();cta::common::archiveNS::ArchiveFile af;
af.fileId = 1232456789L;
atfr.setArchiveFile(af);
atfr.setRemoteFile(cta::RemotePathAndStatus(cta::RemotePath("eos://dir2/file2"),
cta::RemoteFileStatus(cta::common::dataStructures::UserIdentity("user0", "group0"), 0744, 12345678)));
cta::common::dataStructures::EntryLog el;
el.username = "user0";
el.host = "testHost";
el.time = now = time(NULL);
atfr.setEntryLog(el);
atfr.setPriority(12);
atfr.insert();
}
{
// Try to load back the Request and dump it.
cta::objectstore::ArchiveToFileRequest atfr(tapeAddress, be);
cta::objectstore::ScopedSharedLock atfrl(atfr);
atfr.fetch();
ASSERT_EQ(1232456789L, atfr.getArchiveFile().fileId);
ASSERT_EQ("eos://dir2/file2", atfr.getRemoteFile().path.getRaw());
ASSERT_EQ(12345678, atfr.getRemoteFile().status.size);
cta::objectstore::EntryLog log(atfr.getCreationLog());
ASSERT_EQ("user0", log.username);
ASSERT_EQ("testHost", log.host);
ASSERT_EQ(now, log.time);
}
}
}
\ No newline at end of file
......@@ -30,7 +30,6 @@ set (CTAProtoFiles
PROTOBUF_GENERATE_CPP(CTAProtoSources CTAProtoHeaders ${CTAProtoFiles})
set (CTAProtoDependants objectstore/Agent.hpp
objectstore/ArchiveToFileRequest.hpp
objectstore/ArchiveRequest.hpp
objectstore/CreationLog.hpp
objectstore/GenericObject.hpp
......@@ -58,7 +57,6 @@ add_library (ctaobjectstore SHARED
AgentWatchdog.cpp
ArchiveQueue.cpp
RetrieveQueue.cpp
ArchiveToFileRequest.cpp
ArchiveRequest.cpp
RetrieveToFileRequest.cpp
RetrieveRequest.cpp
......@@ -81,7 +79,6 @@ set(ObjectStoreUnitTests
RootEntryTest.cpp
RetrieveQueueTest.cpp
GarbageCollectorTest.cpp
ArchiveToFileRequestTest.cpp
)
add_library(ctaobjectstoreunittests SHARED ${ObjectStoreUnitTests})
......
......@@ -303,16 +303,14 @@ TEST(ObjectStore, GarbageCollectorArchiveRequest) {
agA.addToOwnership(atfrAddr);
agA.commit();
if (pass < 1) { pass++; continue; }
// - created, but not linked to tape pools. Those jobs will be in PendingNSCreation
// state. The request will be garbage collected to the orphaned queue.
// The scheduler will then determine whether the request should be pushed
// further or cancelled, depending on the NS status.
// - created, but not linked to tape pools. Those jobs will be queued by the garbage
// collector.
cta::objectstore::ArchiveRequest ar(atfrAddr, be);
ar.initialize();
ar.setArchiveFileID(123456789L);
ar.setDiskFileID("eos://diskFile");
ar.addJob(1, "ArchiveQueue0", tpAddr[0]);
ar.addJob(2, "ArchiveQueue1", tpAddr[1]);
ar.addJob(1, "ArchiveQueue0", tpAddr[0], 1, 1);
ar.addJob(2, "ArchiveQueue1", tpAddr[1], 1, 1);
ar.setOwner(agA.getAddressIfSet());
cta::common::dataStructures::MountPolicy mp;
ar.setMountPolicy(mp);
......@@ -403,8 +401,8 @@ TEST(ObjectStore, GarbageCollectorArchiveRequest) {
auto d1=aq1.dumpJobs();