From fe573d6a77a1b8802c5f4d5d3b08f7d4fe6d82e5 Mon Sep 17 00:00:00 2001
From: mr245 <mr245@bath.ac.uk>
Date: Wed, 10 Feb 2016 14:27:08 +0000
Subject: [PATCH] add support for rados_striper functions in rados_device.c
 where it currently dosn't exist

---
 src/stored/backends/rados_device.c | 46 +++++++++++++++++++++++++++++++++-----
 1 file changed, 41 insertions(+), 5 deletions(-)

diff --git a/src/stored/backends/rados_device.c b/src/stored/backends/rados_device.c
index da6b64a..cee871d 100644
--- a/src/stored/backends/rados_device.c
+++ b/src/stored/backends/rados_device.c
@@ -210,8 +210,11 @@ int rados_device::d_open(const char *pathname, int flags, int mode)
    /*
     * See if the object already exists.
     */
+#ifdef HAVE_RADOS_STRIPER
+   status = rados_striper_stat(m_striper, getVolCatName(), &object_size, &object_mtime);
+#else
    status = rados_stat(m_ctx, getVolCatName(), &object_size, &object_mtime);
-
+#endif
    /*
     * See if the O_CREAT flag is set.
     */
@@ -225,8 +228,8 @@ int rados_device::d_open(const char *pathname, int flags, int mode)
              */
 #ifdef HAVE_RADOS_STRIPER
             if (m_stripe_volume) {
-               rados_striper_write(m_ctx, getVolCatName(), " ", 1, 0);
-               rados_striper_trunc(m_ctx, getVolCatName(), 0);
+               rados_striper_write(m_striper, getVolCatName(), " ", 1, 0);
+               rados_striper_trunc(m_striper, getVolCatName(), 0);
             } else {
 #endif
                rados_write(m_ctx, getVolCatName(), " ", 1, 0);
@@ -323,7 +326,7 @@ ssize_t rados_device::d_write(int fd, const void *buffer, size_t count)
       int status;
 
 #ifdef HAVE_RADOS_STRIPER
-      if (m_striper) {
+      if (m_stripe_volume) {
          status = rados_striper_write(m_striper, getVolCatName(), (char *)buffer, count, m_offset);
       } else {
 #endif
@@ -386,11 +389,25 @@ boffset_t rados_device::d_lseek(DCR *dcr, boffset_t offset, int whence)
       uint64_t object_size;
       time_t object_mtime;
 
+#ifdef HAVE_RADOS_STRIPER
+      if (m_stripe_volume) {
+         if (rados_striper_stat(m_striper, getVolCatName(), &object_size, &object_mtime) == 0) {
+            m_offset = object_size + offset;
+         } else {
+            return -1;
+         }
+      } else {
+#endif
       if (rados_stat(m_ctx, getVolCatName(), &object_size, &object_mtime) == 0) {
          m_offset = object_size + offset;
       } else {
          return -1;
       }
+
+#ifdef HAVE_RADOS_STRIPER
+      }
+#endif
+
       break;
    }
    default:
@@ -410,7 +427,7 @@ bool rados_device::d_truncate(DCR *dcr)
 
 #ifdef HAVE_RADOS_STRIPER
       if (m_stripe_volume) {
-         status = rados_striper_trunc(m_ctx, getVolCatName(), 0);
+         status = rados_striper_trunc(m_striper, getVolCatName(), 0);
       } else {
 #endif
          status = rados_trunc(m_ctx, getVolCatName(), 0);
@@ -424,7 +441,16 @@ bool rados_device::d_truncate(DCR *dcr)
          return false;
       }
 
+#ifdef HAVE_RADOS_STRIPER
+      if (m_stripe_volume) {
+         status = rados_striper_stat(m_striper, getVolCatName(), &object_size, &object_mtime);
+      } else {
+#endif
       status = rados_stat(m_ctx, getVolCatName(), &object_size, &object_mtime);
+#ifdef HAVE_RADOS_STRIPER
+      }
+#endif
+
       if (status < 0) {
          Mmsg2(errmsg, _("Unable to stat volume %s. ERR=%s\n"), getVolCatName(), be.bstrerror(-status));
          Dmsg1(100, "%s", errmsg);
@@ -432,7 +458,17 @@ bool rados_device::d_truncate(DCR *dcr)
       }
 
       if (object_size != 0) { /* rados_trunc() didn't work. */
+
+#ifdef HAVE_RADOS_STRIPER
+         if (m_stripe_volume) {
+            status = rados_striper_remove(m_striper, getVolCatName());
+         } else {
+#endif
          status = rados_remove(m_ctx, getVolCatName());
+#ifdef HAVE_RADOS_STRIPER
+         }
+#endif
+
          if (status < 0) {
             Mmsg2(errmsg, _("Unable to remove volume %s. ERR=%s\n"), getVolCatName(), be.bstrerror(-status));
             Dmsg1(100, "%s", errmsg);
-- 
2.4.10

