Skip to content

Commit 5c7613b

Browse files
committed
expose timeout and read buffer size parameters for arc reader
1 parent dfe851e commit 5c7613b

File tree

1 file changed

+40
-33
lines changed

1 file changed

+40
-33
lines changed

gcp/src/ARCFileReader.cxx

Lines changed: 40 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,11 @@ enum {
7979
class ARCFileReader : public G3Module {
8080
public:
8181
ARCFileReader(const std::string &path,
82-
Experiment experiment=Experiment::SPT, bool track_filename=false);
82+
Experiment experiment=Experiment::SPT, float timeout=-1.,
83+
bool track_filename=false, size_t buffersize=1024*1024);
8384
ARCFileReader(const std::vector<std::string> & filename,
84-
Experiment experiment=Experiment::SPT, bool track_filename=false);
85+
Experiment experiment=Experiment::SPT, float timeout=-1.,
86+
bool track_filename=false, size_t buffersize=1024*1024);
8587
virtual ~ARCFileReader();
8688

8789
void Process(G3FramePtr frame, std::deque<G3FramePtr> &out);
@@ -119,43 +121,33 @@ class ARCFileReader : public G3Module {
119121
std::string cur_file_;
120122

121123
Experiment experiment;
124+
void SetExperiment(Experiment exp);
122125
G3TimePtr GCPToTime(uint8_t *buffer, off_t offset);
123126

127+
float timeout_;
124128
bool track_filename_;
129+
size_t buffersize_;
125130

126131
SET_LOGGER("ARCFileReader");
127132
};
128133

129134

130135
ARCFileReader::ARCFileReader(const std::string &path,
131-
Experiment experiment, bool track_filename) :
132-
stream_(nullptr), experiment(experiment), track_filename_(track_filename)
136+
Experiment experiment, float timeout, bool track_filename, size_t buffersize) :
137+
stream_(nullptr), timeout_(timeout), track_filename_(track_filename),
138+
buffersize_(buffersize)
133139
{
134-
if (experiment == Experiment::SPT || experiment == Experiment::BK) {
135-
ms_jiffie_base_ = G3Units::ms;
136-
} else if (experiment == Experiment::PB) {
137-
ms_jiffie_base_ = 86400/INT_MAX;
138-
} else {
139-
log_fatal("Unrecognized Experiment");
140-
}
141-
140+
SetExperiment(experiment);
142141
g3_check_input_path(path);
143142
StartFile(path);
144143
}
145144

146-
147-
148145
ARCFileReader::ARCFileReader(const std::vector<std::string> &filename,
149-
Experiment experiment, bool track_filename) :
150-
stream_(nullptr), experiment(experiment), track_filename_(track_filename)
146+
Experiment experiment, float timeout, bool track_filename, size_t buffersize) :
147+
stream_(nullptr), timeout_(timeout), track_filename_(track_filename),
148+
buffersize_(buffersize)
151149
{
152-
if (experiment == Experiment::SPT || experiment == Experiment::BK) {
153-
ms_jiffie_base_ = G3Units::ms;
154-
} else if (experiment == Experiment::PB) {
155-
ms_jiffie_base_ = 86400/INT_MAX;
156-
} else {
157-
log_fatal("Unrecognized Experiment");
158-
}
150+
SetExperiment(experiment);
159151

160152
if (filename.size() == 0)
161153
log_fatal("Empty file list provided to G3Reader");
@@ -171,21 +163,33 @@ ARCFileReader::ARCFileReader(const std::vector<std::string> &filename,
171163

172164
}
173165

174-
175166
ARCFileReader::~ARCFileReader()
176167
{
177168
g3_istream_close(stream_);
178169
}
179170

180171

172+
void ARCFileReader::SetExperiment(Experiment exp)
173+
{
174+
experiment = exp;
175+
176+
if (experiment == Experiment::SPT || experiment == Experiment::BK) {
177+
ms_jiffie_base_ = G3Units::ms;
178+
} else if (experiment == Experiment::PB) {
179+
ms_jiffie_base_ = 86400/INT_MAX;
180+
} else {
181+
log_fatal("Unrecognized Experiment");
182+
}
183+
}
184+
181185
void ARCFileReader::StartFile(const std::string & path)
182186
{
183187
int32_t size, opcode;
184188
uint8_t *buffer;
185189

186190
// Open file, including whatever decompression/network access/etc.
187191
// may be required
188-
g3_istream_from_path(stream_, path, -1, 1024*1024, "");
192+
g3_istream_from_path(stream_, path, timeout_, buffersize_, "");
189193
fd_ = g3_istream_handle(stream_);
190194
cur_file_ = path;
191195
revision_ = 0;
@@ -206,7 +210,7 @@ void ARCFileReader::StartFile(const std::string & path)
206210

207211
if (opcode != ARC_SIZE_RECORD)
208212
log_fatal("No ARC_SIZE_RECORD at beginning of %s",
209-
path.c_str());
213+
cur_file_.c_str());
210214
if ((fd_ < 0 && size != 4) || (fd_ >= 0 && size != 8))
211215
log_fatal("Incorrectly sized ARC_SIZE_RECORD (%d)", size);
212216
stream_.read((char *)&size, sizeof(size)); /* Skip size field */
@@ -220,19 +224,19 @@ void ARCFileReader::StartFile(const std::string & path)
220224
opcode = ntohl(opcode);
221225
if (opcode != ARC_ARRAYMAP_RECORD)
222226
log_fatal("No ARC_ARRAYMAP_RECORD at beginning of %s",
223-
path.c_str());
227+
cur_file_.c_str());
224228

225229
buffer = new uint8_t[size];
226230
stream_.read((char *)buffer, size);
227231
if (stream_.eof()) {
228232
delete [] buffer;
229233
log_fatal("%s truncated; unable to read register map",
230-
path.c_str());
234+
cur_file_.c_str());
231235
}
232236
if (!stream_.good()) {
233237
delete [] buffer;
234238
log_fatal("Read error on %s while reading register map",
235-
path.c_str());
239+
cur_file_.c_str());
236240
}
237241

238242
ParseArrayMap(buffer, size);
@@ -869,10 +873,13 @@ PYBINDINGS("gcp") {
869873
"For non-SPT ARC file formats, please set Experiment to the "
870874
"appropriate value. Set track_filename to True to record the "
871875
"filename for each frame in the ._filename attribute (fragile).",
872-
init<std::string, Experiment, bool>((arg("filename"),
873-
arg("experiment")=Experiment::SPT, arg("track_filename")=false)))
874-
.def(init<std::vector<std::string>, Experiment, bool>((arg("filename"),
875-
arg("experiment")=Experiment::SPT, arg("track_filename")=false)))
876+
init<std::string, Experiment, float, bool, size_t>((arg("filename"),
877+
arg("experiment")=Experiment::SPT, arg("timeout")=-1.,
878+
arg("track_filename")=false, arg("buffersize")=1024*1024)))
879+
.def(init<std::vector<std::string>, Experiment, float, bool, size_t>(
880+
(arg("filename"), arg("experiment")=Experiment::SPT,
881+
arg("timeout")=-1., arg("track_filename")=false,
882+
arg("buffersize")=1024*1024)))
876883
.def_readonly("__g3module__", true)
877884
;
878885
}

0 commit comments

Comments
 (0)