]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: some more multipard upload list
authorYehuda Sadeh <yehuda@hq.newdream.net>
Thu, 2 Jun 2011 20:45:20 +0000 (13:45 -0700)
committerYehuda Sadeh <yehuda@hq.newdream.net>
Thu, 2 Jun 2011 20:45:20 +0000 (13:45 -0700)
src/rgw/rgw_common.h
src/rgw/rgw_op.cc
src/rgw/rgw_rest_s3.cc

index 2e51cb6ecfca884cd48050a9b691113337101478..27868e5c83b9708020e968346d555cd09c1c6f70 100644 (file)
@@ -423,6 +423,7 @@ struct RGWUploadPartInfo {
   uint32_t num;
   uint64_t size;
   string etag;
+  utime_t modified;
 
   void encode(bufferlist& bl) const {
     __u8 struct_v = 1;
@@ -430,6 +431,7 @@ struct RGWUploadPartInfo {
     ::encode(num, bl);
     ::encode(size, bl);
     ::encode(etag, bl);
+    ::encode(modified, bl);
   }
   void decode(bufferlist::iterator& bl) {
     __u8 struct_v;
@@ -437,6 +439,7 @@ struct RGWUploadPartInfo {
     ::decode(num, bl);
     ::decode(size, bl);
     ::decode(etag, bl);
+    ::decode(modified, bl);
   }
 };
 WRITE_CLASS_ENCODER(RGWUploadPartInfo)
index 5829fe263acd0dc44e18cf67828ca3181605571d..fcc744787034a0de9c71283d73fcbe62b9377491 100644 (file)
@@ -496,6 +496,7 @@ void RGWPutObj::execute()
       info.num = atoi(part_num.c_str());
       info.etag = etag;
       info.size = s->obj_size;
+      info.modified = g_clock.now();
       ::encode(info, bl);
       meta_attrs[p] = bl;
       
index b4fcce4e4d77ea6cc90f2b723b2e450496be7d20..476d2dbf981a3dfdf7ff4e2814c50d0180ba389e 100644 (file)
@@ -304,8 +304,18 @@ void RGWListMultipart_REST_S3::send_response()
     s->formatter->dump_value_str("NextPartNumberMarker", "%d", cur_max + 1);
     s->formatter->dump_value_str("MaxParts", "%d", max_parts);
     s->formatter->dump_value_str("IsTruncated", "%s", (test_iter == parts.end() ? "false" : "true"));
+
     for (; iter != parts.end(); ++iter) {
       RGWUploadPartInfo& info = iter->second;
+
+      time_t sec = info.modified.sec();
+      struct tm tmp;
+      localtime_r(&sec, &tmp);
+      char buf[TIME_BUF_SIZE];
+      if (strftime(buf, sizeof(buf), "%Y-%m-%dT%T.000Z", &tmp) > 0) {
+        s->formatter->dump_value_str("LastModified", buf);
+      }
+
       s->formatter->open_obj_section("Part");
       s->formatter->dump_value_int("PartNumber", "%u", info.num);
       s->formatter->dump_value_str("ETag", "%s", info.etag.c_str());