Global Resource Directory由Global Cache Service 来管理
记录资源的模式、资源的角色、block在实例中的状态、在各个活动的节点发布资源的master、在必要的时候重新发布master(例如实例的启动和关闭)
Global Cache Service
1、资源模式,三种
null(默认的)
share(s)(查询)
exclusive(x)(可以改变block的内容,其他的实例就是null mode)。
2、资源角色,两种
Local:第一次请求资源的初试模式;只有一个实例可以有这个block的dirty copy
global:当一个block在多个实例中变dirty时,local就变成了Global Block只能由Global Cache Service写到磁盘中
Cache Fusion Block的传输
例如:有ABCD四个节点,Global Cache Service:GCS
1.Read with no transfer
如果c节点需要向共享磁盘文件上读一个block,那么它向Global Cache Service发送请求,这个时候请求被定向到节点D,D是这个BLOCK的MASTER(每个资源都有master)。GCS把资源授权为Share Mode和local Role,在目录中记录下了他的状态(目录在节点D),然后通知C,C把这个资源从null改成share。C开始I/O,现在C有了这个BLOCK以SHARE模式从磁盘文件读取。
2.Read to write transfer
B也要这个block,并且不仅是读,而且还要改变它的内容。B向D(这个block的master)的GCS发出请求,GCS向C发出请求,要求C把这个block给B,C把block给B,B收到后,告诉GCS,现在B可以修改这个block了。
3.Write to write transfer
A向D节点的GCS发出请求,GCS告诉B节点放弃他的Exclusive锁,并且把当前的Image传到A,如果这个请求没有完成,就会放到GCS的队列里。B把这个block传到A,这个时候要写Log,强制lg flush,把模式变成null。发送到A并且告诉它这个Exclusive的资源可以用了。A收到这个block的image,会通知GCS并且告诉它block的status是exclusive,这个时候,B不能对这个block做操作,虽然在它的buffer
cache中,它还有这个block的copy。
4.Write to read transfer
C要读这个block,先向D(Master)发出请求,GCS要求A把它传输到C,A接受到请求完成它的工作,这可能会在A写LOG和LOG FLUSH 在发送这个block之前。A会把它的Exclusive锁降低到share模式。C把从A收到的block的SCN取出来,建设成一个资源Assumption信息为GCS更新Global Resource Directory。