Example #1
0
def testDeadlock(t, env):
    """Trigger deadlock bug

    FLAGS: debug all
    CODE: DEBUG1
    """
    c1 = env.c1.new_client(env.testname(t))
    sess1 = c1.create_session()
    owner = open_owner4(0, "My Open Owner")
    how = openflag4(OPEN4_CREATE, createhow4(GUARDED4, {FATTR4_SIZE:0}))
    claim = open_claim4(CLAIM_NULL, env.testname(t))
    open_op = op.open(0, OPEN4_SHARE_ACCESS_BOTH , OPEN4_SHARE_DENY_NONE,
                      owner, how, claim)
    res = sess1.compound(env.home + [open_op, op.getfh()]) # OPEN
    fh = res.resarray[-1].object
    stateid = res.resarray[-2].stateid
    ####
    def ops(i):
        return [op.putfh(fh),
                op.write(stateid, i*1000, UNSTABLE4, chr(97+i)*100),
                op.getattr(42950721818L)
                ]
    xids = [sess1.compound_async(ops(i), slot=i) for i in range(4)]
    for xid in xids:
        res = sess1.listen(xid)
        check(res)
        print res
    res = close_file(sess1, fh, stateid=stateid)
    check(res)
Example #2
0
def testReadWrite(t, env):
    """Do a simple READ and WRITE

    FLAGS: open all
    CODE: OPEN400
    """
    c1 = env.c1.new_client(env.testname(t))
    sess1 = c1.create_session()
    owner = open_owner4(0, "My Open Owner")
    how = openflag4(OPEN4_CREATE, createhow4(GUARDED4, {FATTR4_SIZE:0}))
    claim = open_claim4(CLAIM_NULL, env.testname(t))
    open_op = op.open(0, OPEN4_SHARE_ACCESS_BOTH , OPEN4_SHARE_DENY_NONE,
                      owner, how, claim)
    fh_op = op.putrootfh()
    res = sess1.compound([fh_op, open_op, op.getfh()]) # OPEN
    print res
    check(res)
    fh = res.resarray[-1].object
    stateid = res.resarray[-2].stateid
    stateid.seqid = 0
    res = sess1.compound([op.putfh(fh), op.write(stateid, 5, FILE_SYNC4, "write test data")])
    print res
    check(res)
    res = sess1.compound([op.putfh(fh), op.read(stateid, 0, 1000)])
    print res
    check(res)
    res = close_file(sess1, fh, stateid=stateid)
    check(res)
Example #3
0
 def open_file(self, mds_fh):
     seqid=0
     access = const4.OPEN4_SHARE_ACCESS_BOTH
     deny = const4.OPEN4_SHARE_DENY_NONE
     attrs = {const4.FATTR4_MODE: 0777}
     owner = "mds"
     mode = const4.GUARDED4
     verifier = self.sess.c.verifier
     openflag = type4.openflag4(const4.OPEN4_CREATE, type4.createhow4(mode, attrs, verifier))
     name = self.fh_to_name(mds_fh)
     while True:
         if mds_fh in self.filehandles:
             return
         open_op = op4.open(seqid, access, deny,
                           type4.open_owner4(self.sess.client.clientid, owner),
                           openflag, type4.open_claim4(const4.CLAIM_NULL, name))
         res = self._execute(nfs4lib.use_obj(self.path_fh) + [open_op, op4.getfh()], exceptions=[const4.NFS4ERR_EXIST])
         if res.status == const4.NFS4_OK:
              ds_fh = res.resarray[-1].opgetfh.resok4.object
              ds_openstateid = type4.stateid4(0, res.resarray[-2].stateid.other)
              self.filehandles[mds_fh] = (ds_fh, ds_openstateid)
              return
         elif res.status == const4.NFS4ERR_EXIST:
              openflag = type4.openflag4(const4.OPEN4_NOCREATE)
         else:
             raise RuntimeError
Example #4
0
def testDeadlock(t, env):
    """Trigger deadlock bug

    FLAGS: debug all
    CODE: DEBUG1
    """
    c1 = env.c1.new_client(env.testname(t))
    sess1 = c1.create_session()
    owner = open_owner4(0, "My Open Owner")
    how = openflag4(OPEN4_CREATE, createhow4(GUARDED4, {FATTR4_SIZE: 0}))
    claim = open_claim4(CLAIM_NULL, env.testname(t))
    open_op = op.open(0, OPEN4_SHARE_ACCESS_BOTH, OPEN4_SHARE_DENY_NONE, owner,
                      how, claim)
    res = sess1.compound(env.home + [open_op, op.getfh()])  # OPEN
    fh = res.resarray[-1].object
    stateid = res.resarray[-2].stateid

    ####
    def ops(i):
        return [
            op.putfh(fh),
            op.write(stateid, i * 1000, UNSTABLE4,
                     chr(97 + i) * 100),
            op.getattr(42950721818L)
        ]

    xids = [sess1.compound_async(ops(i), slot=i) for i in range(4)]
    for xid in xids:
        res = sess1.listen(xid)
        check(res)
        print res
    res = close_file(sess1, fh, stateid=stateid)
    check(res)
Example #5
0
def testReadWrite(t, env):
    """Do a simple READ and WRITE

    FLAGS: open all
    CODE: OPEN400
    """
    c1 = env.c1.new_client(env.testname(t))
    sess1 = c1.create_session()
    owner = open_owner4(0, "My Open Owner")
    how = openflag4(OPEN4_CREATE, createhow4(GUARDED4, {FATTR4_SIZE: 0}))
    claim = open_claim4(CLAIM_NULL, env.testname(t))
    open_op = op.open(0, OPEN4_SHARE_ACCESS_BOTH, OPEN4_SHARE_DENY_NONE, owner,
                      how, claim)
    fh_op = op.putrootfh()
    res = sess1.compound([fh_op, open_op, op.getfh()])  # OPEN
    print res
    check(res)
    fh = res.resarray[-1].object
    stateid = res.resarray[-2].stateid
    stateid.seqid = 0
    res = sess1.compound(
        [op.putfh(fh),
         op.write(stateid, 5, FILE_SYNC4, "write test data")])
    print res
    check(res)
    res = sess1.compound([op.putfh(fh), op.read(stateid, 0, 1000)])
    print res
    check(res)
    res = close_file(sess1, fh, stateid=stateid)
    check(res)
Example #6
0
 def open_file(self, mds_fh):
     seqid = 0
     access = const4.OPEN4_SHARE_ACCESS_BOTH
     deny = const4.OPEN4_SHARE_DENY_NONE
     attrs = {const4.FATTR4_MODE: 0777}
     owner = "mds"
     mode = const4.GUARDED4
     verifier = self.sess.c.verifier
     openflag = type4.openflag4(const4.OPEN4_CREATE,
                                type4.createhow4(mode, attrs, verifier))
     name = self.fh_to_name(mds_fh)
     while True:
         if mds_fh in self.filehandles:
             return
         open_op = op4.open(
             seqid, access, deny,
             type4.open_owner4(self.sess.client.clientid, owner), openflag,
             type4.open_claim4(const4.CLAIM_NULL, name))
         res = self._execute(nfs4lib.use_obj(self.path_fh) +
                             [open_op, op4.getfh()],
                             exceptions=[const4.NFS4ERR_EXIST])
         if res.status == const4.NFS4_OK:
             ds_fh = res.resarray[-1].opgetfh.resok4.object
             ds_openstateid = type4.stateid4(0,
                                             res.resarray[-2].stateid.other)
             self.filehandles[mds_fh] = (ds_fh, ds_openstateid)
             return
         elif res.status == const4.NFS4ERR_EXIST:
             openflag = type4.openflag4(const4.OPEN4_NOCREATE)
         else:
             raise RuntimeError