Thanks for the patch.
I think it can interest other users so I will integrate it to next v2.5.x and also port it to v3.

I just have a question about the following change. Why did you remove the "return rc"?

diff -urN tmp/robinhood-2.5.5/src/fs_scan/fs_scan.c robinhood-2.5.5/src/fs_scan/fs_scan.c --- tmp/robinhood-2.5.5/src/fs_scan/fs_scan.c2015-04-16 14:32:52.561687000 +0000
+++ robinhood-2.5.5/src/fs_scan/fs_scan.c2015-11-11 22:56:13.445035000 +0000
@@ -793,7 +793,6 @@
         if (!rc)
             /* device id is not the one seen by client: change it */
             inode->st_dev = fsdev;
-        return rc;
     }

Thomas


On 11/12/15 00:50, Craig Tierney - NOAA Affiliate wrote:
Thomas,

Thanks for the pointer to the code. The fact that the code is old means it isn't something you want to support upstream. Is that true?

What about something less intrusive? How about a way to say that last_access should be just the POSIX access time, and not the MAX of atime, mtime, and ctime? I wrote a small patch that did this.

Craig

diff -urN tmp/robinhood-2.5.5/src/common/global_config.c robinhood-2.5.5/src/common/global_config.c --- tmp/robinhood-2.5.5/src/common/global_config.c2014-11-25 09:02:52.000000000 +0000 +++ robinhood-2.5.5/src/common/global_config.c2015-11-11 20:36:45.003202000 +0000
@@ -54,6 +54,7 @@
rh_strncpy(conf->lock_file, "/var/locks/robinhood.lock", RBH_PATH_MAX);
     conf->stay_in_fs = TRUE;
     conf->check_mounted = TRUE;
+    conf->last_access_only_atime = FALSE;
     conf->fs_key = FSKEY_FSNAME;

 #if defined( _LUSTRE ) && defined( _MDS_STAT_SUPPORT )
@@ -77,6 +78,7 @@
print_line( output, 1, "lock_file : \"/var/locks/robinhood.lock\"" );
     print_line( output, 1, "stay_in_fs    :  TRUE" );
     print_line( output, 1, "check_mounted :  TRUE" );
+    print_line( output, 1, "last_access_only_atime :  FALSE" );

 #if defined( _LUSTRE ) && defined( _MDS_STAT_SUPPORT )
     print_line( output, 1, "direct_mds_stat :   FALSE" );
@@ -92,7 +94,7 @@
     global_config_t *conf = ( global_config_t * ) module_config;

     static const char *allowed_params[] = {
-        "fs_path", "fs_type", "lock_file", "stay_in_fs", "check_mounted",
+ "fs_path", "fs_type", "lock_file", "stay_in_fs", "check_mounted", "last_access_only_atime",
         "direct_mds_stat", "fs_key",
 NULL
     };
@@ -163,6 +165,14 @@
     else if ( rc != ENOENT )
         conf->check_mounted = tmpval;

+ /* /!\ last_access_only_atime is a piece of bit field, it should not be passed directly: using tmpval instead */ + rc = GetBoolParam( general_block, GLOBAL_CONFIG_BLOCK, "last_access_only_atime",
+                       0, &tmpval, NULL, NULL, msg_out );
+    if ( ( rc != 0 ) && ( rc != ENOENT ) )
+        return rc;
+    else if ( rc != ENOENT )
+        conf->last_access_only_atime = tmpval;
+
     /* fs_key param */
     char tmpstr[128];
     rc = GetStringParam( general_block, GLOBAL_CONFIG_BLOCK, "fs_key",
@@ -231,6 +241,13 @@
         global_config.check_mounted = conf->check_mounted;
     }

+ if ( global_config.last_access_only_atime != conf->last_access_only_atime )
+    {
+ DisplayLog( LVL_EVENT, "GlobalConfig", GLOBAL_CONFIG_BLOCK "::last_access_only_atime updated: %s->%s", + bool2str( global_config.last_access_only_atime ), bool2str( conf->last_access_only_atime ) ); + global_config.last_access_only_atime = conf->last_access_only_atime;
+    }
+
 #if defined( _LUSTRE ) && defined( _MDS_STAT_SUPPORT )
     if ( conf->direct_mds_stat != global_config.direct_mds_stat )
     {
@@ -274,6 +291,10 @@
     fprintf( output, "\n" );
     print_line( output, 1, "# check that the filesystem is mounted" );
     print_line( output, 1, "check_mounted = TRUE ;" );
+    fprintf( output, "\n" );
+ print_line( output, 1, "# Set the last_access time by only the atime variable, and not MAX3(atime,mtime,ctime)" ); + print_line( output, 1, "# There are no guarantees that all filesystems will correctly store atime" );
+    print_line( output, 1, "last_access_only_atime = FALSE ;" );

 #if defined( _LUSTRE ) && defined( _MDS_STAT_SUPPORT )
     fprintf( output, "\n" );
diff -urN tmp/robinhood-2.5.5/src/common/RobinhoodMisc.c robinhood-2.5.5/src/common/RobinhoodMisc.c --- tmp/robinhood-2.5.5/src/common/RobinhoodMisc.c2015-02-26 09:39:47.919878000 +0000 +++ robinhood-2.5.5/src/common/RobinhoodMisc.c2015-11-11 23:00:24.950352000 +0000
@@ -444,6 +444,7 @@

void PosixStat2EntryAttr( struct stat *p_inode, attr_set_t * p_attr_set, int size_info )
 {
+
     ATTR_MASK_SET( p_attr_set, owner );
     uid2str( p_inode->st_uid, ATTR( p_attr_set, owner ) );

@@ -464,9 +465,18 @@
 #endif

         /* times are also wrong when they come from the MDT device */
+
+
         ATTR_MASK_SET( p_attr_set, last_access );
-        ATTR( p_attr_set, last_access ) =
- MAX3( p_inode->st_atime, p_inode->st_mtime, p_inode->st_ctime );
+
+/* Vary the setting of last_access depending on value of global_config.last_access_only_atime */
+if (global_config.last_access_only_atime) {
+ ATTR( p_attr_set, last_access ) = p_inode->st_atime;
+} else {
+ ATTR( p_attr_set, last_access ) =
+   MAX3( p_inode->st_atime, p_inode->st_mtime, p_inode->st_ctime );
+}
+

         ATTR_MASK_SET( p_attr_set, last_mod );
         ATTR( p_attr_set, last_mod ) = p_inode->st_mtime;
diff -urN tmp/robinhood-2.5.5/src/fs_scan/fs_scan.c robinhood-2.5.5/src/fs_scan/fs_scan.c --- tmp/robinhood-2.5.5/src/fs_scan/fs_scan.c2015-04-16 14:32:52.561687000 +0000 +++ robinhood-2.5.5/src/fs_scan/fs_scan.c2015-11-11 22:56:13.445035000 +0000
@@ -793,7 +793,6 @@
         if (!rc)
             /* device id is not the one seen by client: change it */
             inode->st_dev = fsdev;
-        return rc;
     }
     else
 #endif
diff -urN tmp/robinhood-2.5.5/src/include/global_config.h robinhood-2.5.5/src/include/global_config.h --- tmp/robinhood-2.5.5/src/include/global_config.h2014-11-25 09:02:52.000000000 +0000 +++ robinhood-2.5.5/src/include/global_config.h2015-11-11 20:13:20.815117000 +0000
@@ -49,6 +49,7 @@
     /* behavior flags */
     int            stay_in_fs:1;
     int            check_mounted:1;
+    int  last_access_only_atime:1;

 #if defined( _LUSTRE ) && defined ( _MDS_STAT_SUPPORT )
     /** Direct stat to MDS on Lustre filesystems */

On Wed, Nov 11, 2015 at 2:20 PM, Thomas LEIBOVICI (mail perso) <[email protected] <mailto:[email protected]>> wrote:

    This patch from Cray enables storing real atime/mtime/cime in rbh
    DB and using them as rbh-find options :

    
https://github.com/fzago-cray/robinhood/commit/acc3d7144ecff99f16af6ab776380c9bcc57ec7d

    It is a little old (april 2013) but may still apply on current code.

    HTH
    Regards


    Le 11/11/2015 20:32, Craig Tierney - NOAA Affiliate a écrit :
    Thomas,

    Thanks for the response.  My problem is that we fake directory
    based quotas by ensuring that the ownership of files matches the
    top level directory.  This means we have to walk the filesystem
    and change the group ownership if needed.  The problem is that
    this changes the mtime and Robinhood then thinks the file was
    access, but it wasn't.

    Craig

    On Wed, Nov 11, 2015 at 12:21 PM, Thomas LEIBOVICI (mail perso)
    <[email protected] <mailto:[email protected]>> wrote:

        Le 10/11/2015 23:31, Craig Tierney - NOAA Affiliate a écrit :
        Thomas,

        Thanks for the quick response. To confirm, use of atime with
        rbh-find will compare times to the last_access time?

        Yes.
        I understand this can be confusing but last_access is taken
        as the last activity on the file (max(atime, mtime, ctime))
        which appears to be a suitable criteria for purge policies in
        particular.

        Regards.


        Craig

        On Tue, Nov 10, 2015 at 2:19 PM, Thomas LEIBOVICI (mail
        perso) <[email protected]
        <mailto:[email protected]>> wrote:

            Hi Craig,

            rbh's last_mod = stat's mtime
            rbh's last_access = max(atime, mtime, ctime)
            with Lustre changelogs:
                rbh creation is the timestamp of the CREATE record
            of the entry
            when scanning :
                rbh creation is the ctime of the entry the first
            time it was seen.

            Regards
            Thomas


            Le 10/11/2015 21:09, Craig Tierney - NOAA Affiliate wrote:
            Hello,

            I have a question regarding the difference in names of
            timestamps used in Robinhood.  When I run stat on a
            file, it reports 3 times.  These are Access, Change,
            and Modify.  When I run rbh-report --entry-info on the
            same file, Robinhood uses creation, last_access, and
            last_mod.

            Are last_access from RBH and Access from stat supposed
            to be the same? What about Modify and last_mod?  How
            does the timestamp Change from stat and creation from
            RBH relate?

            Thanks,
            Craig


            
------------------------------------------------------------------------------


            _______________________________________________
            robinhood-support mailing list
            [email protected]
            <mailto:[email protected]>
            https://lists.sourceforge.net/lists/listinfo/robinhood-support



            
------------------------------------------------------------------------
            Avast logo <http://www.avast.com/>    

            L'absence de virus dans ce courrier électronique a été
            vérifiée par le logiciel antivirus Avast.
            www.avast.com <http://www.avast.com/>






        ------------------------------------------------------------------------
        Avast logo <http://www.avast.com/>        

        L'absence de virus dans ce courrier électronique a été
        vérifiée par le logiciel antivirus Avast.
        www.avast.com <http://www.avast.com/>






    ------------------------------------------------------------------------
    Avast logo <http://www.avast.com/>    

    L'absence de virus dans ce courrier électronique a été vérifiée
    par le logiciel antivirus Avast.
    www.avast.com <http://www.avast.com/>





------------------------------------------------------------------------------


_______________________________________________
robinhood-support mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/robinhood-support

------------------------------------------------------------------------------
_______________________________________________
robinhood-support mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/robinhood-support

Reply via email to