more tweaks
authorroot <root@hsm1n1.VSOFS1.COM>
Sat, 16 Aug 2008 14:12:20 +0000 (00:12 +1000)
committerroot <root@hsm1n1.VSOFS1.COM>
Sat, 16 Aug 2008 14:12:20 +0000 (00:12 +1000)
README
hacksm_migrate.c

diff --git a/README b/README
index fc2c3e4..007a9b3 100644 (file)
--- a/README
+++ b/README
@@ -1,20 +1,18 @@
 This is a experimental HSM daemon and migrate tool. It is meant to be
 a platform for testing ideas in HSM migration.
 
-To download the code, either fetch with your web browser, or use git
-like this:
-
-   git clone http://samba.org/~tridge/hacksm/.git
-
 To use it first setup a shared filesystem with NFS to hold the HSM
-"store", putting it in the HSM_STORE location from hacksm.h. The
-default is /hacksm_store
+"store", putting it in the HSM_STORE location from hacksm.h
 
 Then start the HSM daemon like this:
 
    hacksmd /gpfs &
 
+You can then migrate files using hacksm_migrate, and view their state
+using hacksm_ls
+
 Note that if you have TSM installed you need to disable it. The simplest method is:
+
    onnode -p all mv /opt/tivoli /opt/tivoli.SAVED
 
 then reboot. 
@@ -22,15 +20,6 @@ then reboot.
 You will need to start hacksmd after mmstartup, but before you mount
 the filesystem.
 
-You can then migrate files using hacksm_migrate, and view their state
-using hacksm_ls
-
-You may also want to look at
-  http://samba.org/~tridge/junkcode/tsm_torture.c
-
-for a test program that stresses out HSM implementations
-
 The "store" for hacksm is just a directory with files named by device
 and inode number. When a file is migrated the data is moved to the
 store and a dmapi hole is punched in the original file. This mimicks
index 3896b53..0f2a656 100644 (file)
@@ -148,17 +148,10 @@ static int hsm_migrate(const char *path)
        fsync(fd);
        close(fd);
 
-       strncpy(h.magic, HSM_MAGIC, sizeof(h.magic));
-       h.size = st.st_size;
-       h.migrate_time = time(NULL);
-       h.device = st.st_dev;
-       h.inode = st.st_ino;
-       h.state = HSM_STATE_START;
-
        /* this sleep is to work around a race in dmapi on GPFS. A read might have started
           before we setup the managed region. We need the read to complete before
           we can punch holes in the file. There must be a better way .... */
-       msleep(300);
+       msleep(1);
 
        /* now upgrade to a exclusive right on the file */
        ret = dm_upgrade_right(dmapi.sid, hanp, hlen, token);
@@ -167,6 +160,13 @@ static int hsm_migrate(const char *path)
                goto respond;
        }
 
+       strncpy(h.magic, HSM_MAGIC, sizeof(h.magic));
+       h.size = st.st_size;
+       h.migrate_time = time(NULL);
+       h.device = st.st_dev;
+       h.inode = st.st_ino;
+       h.state = HSM_STATE_START;
+
        ret = dm_set_dmattr(dmapi.sid, hanp, hlen, token, &attrname, 0, sizeof(h), (void*)&h);
        if (ret == -1) {
                printf("failed dm_set_dmattr on %s - %s\n", path, strerror(errno));
@@ -185,6 +185,21 @@ static int hsm_migrate(const char *path)
                goto respond;
        }
 
+       /* give those pesky reads another chance */
+       ret = dm_downgrade_right(dmapi.sid, hanp, hlen, token);
+       if (ret != 0) {
+               printf("dm_downgrade_right failed for %s - %s\n", path, strerror(errno));
+               goto respond;
+       }
+       
+       msleep(1);
+
+       ret = dm_upgrade_right(dmapi.sid, hanp, hlen, token);
+       if (ret != 0) {
+               printf("dm_downgrade_right failed for %s - %s\n", path, strerror(errno));
+               goto respond;
+       }
+
 
        ret = dm_get_dmattr(dmapi.sid, hanp, hlen, token, &attrname, 
                            sizeof(h), &h, &rlen);