irods / irods_resource_plugin_rados

Cacheless Ceph/rados resource plugin for iRODS
BSD 3-Clause "New" or "Revised" License
7 stars 6 forks source link

added GCC compatibility #12

Closed joergsteinkamp closed 4 years ago

joergsteinkamp commented 6 years ago

Caused an boost::any_cast runtime error, since no matching function was found, when compiled with GCC. See https://github.com/irods/irods/issues/4083 for a detailed description. Clang compatibility should be checked first.

joergsteinkamp commented 5 years ago

I introduced a new bug in the pull request! for irados_read_plugin '_buf' must of course not be 'const'

diff --git a/irados/libirados.cpp b/irados/libirados.cpp
index 1c5d66f..a1dac08 100644
--- a/irados/libirados.cpp
+++ b/irados/libirados.cpp
@@ -566,7 +566,7 @@ int get_next_fd() {
     // interface for POSIX Read
     irods::error irados_read_plugin(
         irods::plugin_context& _ctx,
-        const void* _buf,
+        void* _buf,
         const int _len) {
         irods::error result = SUCCESS();

@@ -1385,8 +1385,8 @@ irods::resource* plugin_factory(const std::string& _inst_name,
     //     plugin loading.
     resc->add_operation(irods::RESOURCE_OP_CREATE, &irados_create_plugin);
     resc->add_operation(irods::RESOURCE_OP_OPEN, &irados_open_plugin);
-    resc->add_operation<const void*,int>(irods::RESOURCE_OP_READ, std::function<irods::error(irods::plugin_context&,const void*,int)>(irados_read_plugin));
-    resc->add_operation<const void*,int>(irods::RESOURCE_OP_WRITE, std::function<irods::error(irods::plugin_context&,const void*,int)>(irados_write_plugin));
+    resc->add_operation<void*, int>(irods::RESOURCE_OP_READ, std::function<irods::error(irods::plugin_context&, void*, int)>(irados_read_plugin));
+    resc->add_operation<const void*, int>(irods::RESOURCE_OP_WRITE, std::function<irods::error(irods::plugin_context&,const void*, int)>(irados_write_plugin));
     resc->add_operation(irods::RESOURCE_OP_CLOSE, &irados_close_plugin);
     resc->add_operation(irods::RESOURCE_OP_UNLINK, &irados_unlink_plugin);
     resc->add_operation<struct stat*>(irods::RESOURCE_OP_STAT, std::function<irods::error(irods::plugin_context&, struct stat*)>(irados_stat_plugin));
trel commented 5 years ago

ah, very good. just force push to your gcc branch, and this PR will update itself

trel commented 5 years ago

Please squash these two into one - and I'll merge them in.

That way we'll have a clean commit - and your name will remain on the work.

Thanks!

trel commented 5 years ago

@joergsteinkamp please squash and force-push, we're coming around soon to a release. thanks!

trel commented 4 years ago

This plugin will probably be archived - the way to talk to rados has shifted to be via CephFS or the S3 protocol.