switch (ix) {
case 0:
{
+ std::string obj_name{parent->relative_object_name()};
+ if (obj_name.back() != '/')
+ obj_name += "/";
+ obj_name += path;
RGWStatObjRequest req(cct, get_user(),
- parent->bucket_name(), object_name,
+ parent->bucket_name(), obj_name,
RGWStatObjRequest::FLAG_NONE);
int rc = rgwlib.get_fe()->execute_req(&req);
if ((rc == 0) &&
fhr = lookup_fh(parent, path, RGWFileHandle::FLAG_NONE);
if (get<0>(fhr)) {
RGWFileHandle* rgw_fh = get<0>(fhr);
+ rgw_fh->set_size(req.get_size());
rgw_fh->set_mtime({req.get_mtime(), 0});
}
goto done;
return fhr;
} /* RGWLibFS::stat_leaf */
+ int RGWLibFS::getattr(RGWFileHandle* rgw_fh, struct stat* st)
+ {
+ switch(rgw_fh->fh.fh_type) {
+ case RGW_FS_TYPE_FILE:
+ break;
+ case RGW_FS_TYPE_DIRECTORY:
+ default:
+ break;
+ };
+
+ return rgw_fh->stat(st);;
+ } /* RGWLibFS::getattr */
+
void RGWLibFS::close()
{
state.flags |= FLAG_CLOSED;
int rgw_getattr(struct rgw_fs *rgw_fs,
struct rgw_file_handle *fh, struct stat *st, uint32_t flags)
{
+ RGWLibFS *fs = static_cast<RGWLibFS*>(rgw_fs->fs_private);
RGWFileHandle* rgw_fh = get_rgwfh(fh);
- return -(rgw_fh->stat(st));
+
+ return -(fs->getattr(rgw_fh, st));
}
/*
return fh;
}
+ int getattr(RGWFileHandle* rgw_fh, struct stat* st);
+
LookupFHResult stat_bucket(RGWFileHandle* parent,
const char *path, uint32_t flags);
return 0;
}
-}; /* RGWGetObjRequest */
+}; /* RGWReadRequest */
/*
delete object
}
/* attributes */
- uint64_t size() { return _size; }
+ uint64_t get_size() { return _size; }
time_t ctime() { return mod_time; } // XXX
time_t mtime() { return mod_time; }
map<string, bufferlist>& get_attrs() { return attrs; }
s->op = OP_GET;
/* XXX derp derp derp */
- std::string uri = make_uri(bucket_name, obj_name);
- s->relative_uri = uri;
- s->info.request_uri = uri; // XXX
- s->info.effective_uri = uri;
+ s->relative_uri = make_uri(bucket_name, obj_name);
+ s->info.request_uri = s->relative_uri; // XXX
+ s->info.effective_uri = s->relative_uri;
s->info.request_params = "";
s->info.domain = ""; /* XXX ? */
(sobj.rgw_fh->object_name().find("sfile_1")
!= std::string::npos)) {
ASSERT_TRUE(sobj.rgw_fh->is_file());
+ ASSERT_EQ(sobj.rgw_fh->get_size(), 16UL);
// do it
memset(buf, 0, 256);
rc = rgw_read(fs, sobj.fh, 0, 256, &nread, buf, RGW_READ_FLAG_NONE);