PNFS协议中stateid分析

news/2024/7/4 7:18:49
1.“owners”通常对应着客户端内部的进程
2.当服务器授予了一个任意类型的锁时(包括open、字节粒度锁、delegation和layout),会返回一个唯一的stateid,这个stateid则代表了属于同一个文件、同一种类型、并且共享相同的所有权特性的的一个锁集合(经常的情况是一个锁)。
3.记, 当给定一个stateid时,服务器可以通过stateid找到关联的一个或者多个state owner ( 多个state owner 的情况是指open-owner/lock-owner对)以及关联的filehandle。当stateid 被使用时, 当前的filehandle 一定是与这个stateid相关联的filehandle。
4.与一个给定的client ID相关联的所有的stateid都与一个共用的lease相关联。这个lease表示对这些stateid以及它们代表的对象的所有权
5.除了一些特殊类型外,每个stateid代表了一类锁,
O stateid可以表示文件的打开。
这种情况下每个stateid代表了一个给定“客户端ID/打开属
主/文件句柄”三元组的 open状态。当OPEN操作导致
upgrade和OPEN_DOWNGRADE操作时,这些stateid会发生
变化(即后续stateid的seqid值增加)以作为OPEN的回应。
O stateid可以表示字节范围锁的集合。
一个特定属主在一个特定文件上持有的所有锁,以及在特定打
开文件的“庇护”下所获得的所有锁,都和含seqid的单个
stateid相关联。每当LOCK和LOCKU操作影响到锁集合时,
该seqid的值就会增加。
O stateid可以表示文件授权。授权是服务器向客户端赋予的
一种可召回的保证。在该授权被返回之前,其他客户端都不可
以引用或修改这个文件。在NFSv4.1中,在常规文件和非常
规文件上都可以获取文件授权。
一个stateid代表了客户端为某特定文件句柄所持有的单个
授权。
O stateid可以表示目录授权。目录授权服务器向客户端赋予
的一种可召回的保证。在该授权被返回之前,其他客户端都不
可以引用或修改该目录。
一个stateid代表了客户端为某特定目录文件句柄所持有的
单个授权。
O stateid可以表示布局。布局是服务器向客户端赋予的一种
可召回的保证。可通过另一数据访问协议在指定的地方访问特
定的文件。这样的访问只限于某些特殊的字节范围集合,而且
可以持续访问,直到那些字节范围减少或者布局被返回为止。
6.stateid分为两个域:一个96比特的用来识别具体锁集合的
“other”域,以及一个32比特的“seqid”序列值。除了
特殊stateid(参见8.2.3节)的情况之外,“other”域
的一个特定值表示了某指定文件或目录上的相同类型(如字
节范围锁、打开、授权或者布局)的锁集合,这些锁共享相
同的ownership characteristics。而seqid域则指定
了这个锁集合的特定实例, seqid值增加可用来显示该锁
集合的变化。当在锁集合中增加或删除锁,或者锁应用的字
节范围发生变化,或者这个类型的一个或多个锁upgrade或
downgrade,都会使seqid的值增加。
7.故障恢复的关键要求是客户端和服务器都要知道对方何时
已发生故障。此外,还要求客户端在服务器重启前后拥有
一致的数据视图。所有可能在客户端或网络缓存中排队的
READ和WRITE操作必须等到客户端成功地恢复了保护
READ和WRITE操作的锁之后才能执行。在服务器能可靠地
确定客户端已经恢复了足够的锁状态以保证这种操作能够
被毫无风险地处理之前,任何到达服务器的操作都必须被
拒绝。出现这种情况是由于下面两种原因之一:
o 提供的状态不再有效——因为状态跟一个现在无效的
客户端ID关联。在这种情况下客户端将收到一个
NFS4ERR_BADSESSION 错误或者一个
NFS4ERR_DEADSESSION错误,并且任何打算“把一个
新会话附接到该无效客户端ID” 的尝试都会导致一个
NFS4ERR_STALE_CLIENTID错误。
o 后续的锁恢复操作可能使得不适合执行本操作
(NFS4ERR_GRACE)。


http://www.niftyadmin.cn/n/3060769.html

相关文章

webpack4.0源码分析之Tapable

1 Tapable简介 webpack本质上是一种事件流的机制,它的工作流程就是将各个插件串联起来,而实现这一切的核心就是Tapable,webpack中最核心的负责编译的Compiler和负责创建bundles的Compilation都是Tapable的实例。本文主要介绍一下Tapable中的钩…

mmap()系统调用

mmap()系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以向访问普通内存一样对文件进行访问,不必再调用read(),write()等操作。 注:实际上,m…

jstat分析JVM内存

出处:http://liulinxia02.blog.163.com/blog/static/268687720117251501253/ Jstat 是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资…

Linux系统有7个运行级别

Linux系统有7个运行级别(runlevel)运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆运行级别2:多…

RCU介绍

http://www.ibm.com/developerworks/cn/linux/l-rcu/

Hive的访问接口

Hive提供了三种客户端访问接口: 1)Hive CLI(Hive Command Line,Hive命令行),客户端可以直接在命令行模式下进行操作。 2)hwi(Hive Web Interface,Hive Web接口&#xff0…

centos挂载错误

[rootlocalhost ~]# mount /dev/cdrom /mnt/cdrom/mount: block device /dev/sr0 is write-protected, mounting read-only虚拟机挂着光驱光驱时提示只读,用以下命令可解决该报错,mount -o remount,rw /dev/cdrom /mnt/cdrom转自:http://blog…

Hive基本命令整理

创建表: hive> CREATE TABLE pokes (foo INT, bar STRING); Creates a table called pokes with two columns, the first being an integer and the other a string 创建一个新表,结构与其他一样 hive> create table new_table like reco…