-
Notifications
You must be signed in to change notification settings - Fork 4
/
972.txt
83 lines (59 loc) · 5.08 KB
/
972.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
* 仕様書
[REFS[
- [1] [CITE@en[RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)]] ([TIME[2014-09-21 17:04:59 +09:00]] 版) <http://tools.ietf.org/html/rfc4918#section-6>
]REFS]
* 意味
[2] [[資源]]を[DFN[[RUBYB[[[ロック]]]@en[lock]]]] ([[動詞]]) することにより、
[[資源]]へのアクセスを[[直列化]]することができ、他の [[principal]]
が同時に[[資源]]を編集しないこと、すなわち [[lost update]] 問題を防ぐことができます。 [SRC[>>1]]
[5] [DFN[[RUBYB[[[ロック]]]@en[lock]]]] ([[名詞]]) は、
直接または間接に[[資源]]を[[ロック]]するものです [SRC[>>1]]。
[11] [[ロック]]は、大域的に固有な[[ロックトークン]]により識別されます [SRC[>>1]]。
[3] [[ロック]]は、関与する [[principal]] の数により排他的か共有かに分類できます [SRC[>>1]]。
[13] [DFN[[RUBYB[[[排他的ロック]]]@en[exclusive lock]]]]は、
他の [[principal]] のアクセスを排除することによって、 [[WebDAV]]
の仕組みのみにより変更の[[衝突]]を防止するものです [SRC[>>1]]。
[15] [DFN[[RUBYB[共有ロック]@en[shared lock]]]]は、他の [[principal]]
が操作中であることを知らせるだけのものです。この場合 [[WebDAV]] 外の方法
(直接の対話や[[ポストイット]]、[[電子メール]]など) によって協調が必要かもしれません。
[SRC[>>1]]
;; [16] 経験上、[[排他的ロック]]のみだと何らかの理由で[[ロック]]が解放されなくなる問題が起こりがちなため、
[[共有ロック]]が導入されました [SRC[>>1]]。[[排他的ロック]]でも[[タイムアウト]]や管理者操作で解除はできますが、
[[共有ロック]]の方がより便利です [SRC[>>1]]。
[4] [[ロック]]は、保証されるアクセスの種類によっても分類できます [SRC[>>1]]。
「書き込み」ロックが定義されており、他の種類にも拡張できます [SRC[>>1]]。
[17] [[WebDAV]] に従う[[資源]]は、
[[排他的ロック]]と[[共有ロック]]のいずれかおよびアクセスの種類の任意の組み合わせについて、
対応してもしなくても構いません。[[ロック]]にまったく対応しなくても構いません。 [SRC[>>1]]
;; [18] [[WebDAV]] の裏側で用いられているシステムで対応する[[ロック]]の手法が様々であることから、
実装の柔軟性を認めています [SRC[>>1]]。
[20] [[ロック]]は、次の情報を有します。
[FIG(short list)[
- [[ロックトークン]]
- [[ロック根]]
- [[ロック作成者]]
]FIG]
* ロックの作成
[6] ある[[資源]]の [[URL]] に対する [CODE(HTTP)@en[[[LOCK]]]]
[[要求]]で新しい[[ロック]]が作られるなら、その[[資源]]は直接[[ロック]]されます。
なお [CODE(HTTP)@en[[[LOCK]]]] [[要求]]の時点で [[URL]] が[[資源]]に[[写像]]されていなければ、
新しい空の[[資源]]が作られて直接[[ロック]]されます。 [SRC[>>1]]
[8] 深さ無限の[[ロック]]により[[ロック]]されている[[コレクション]]は、
その[[メンバー]]である[[資源]]すべてが間接的に[[ロック]]されます。 [SRC[>>1]]
[9] [[ロック]]されている[[コレクション]]について新しい[[資源]]を[[メンバー]]とすると、
その[[資源]]も[[コレクション]]の[[ロック]]によって間接的に[[ロック]]しなければ[['''なりません''']]。
その[[資源]]は既に[[衝突]]する[[ロック]]を有していては[['''なりません''']]。 [SRC[>>1]]
[7] [[排他的ロック]]は、同じ[[資源]]の直接または間接のいかなる種類の[[ロック]]とも[[衝突]]します。
[[鯖]]は、ある[[資源]]において[[衝突]]する[[ロック]]を作っては[['''なりません''']]。 [SRC[>>1]]
[23] [[ロック]]を作成した [[principal]] は、その[[ロック]]の[[ロック作成者]]となります。
[[鯖]]は[[ロック]]を作成できる [[principal]] を制限しても構いません [SRC[>>1]]。
* ロックの削除
[12] [CODE(HTTP)@en[[[UNLOCK]]]] [[要求]]は、指定した[[ロックトークン]]の[[ロック]]を削除します。
[[ロック]]が削除されると、その[[ロック]]による[[資源]]の[[ロック]]は解除されます。 [SRC[>>1]]
[10] [[ロック]]されている[[コレクション]]についてある[[資源]]を[[メンバー]]でなくすると、
その[[資源]]は[[コレクション]]の[[ロック]]による間接的な[[ロック]]から除外しなければ[['''なりません''']]。 [SRC[>>1]]
[14] ある[[要求]]によって[[ロック]]の[[ロック根]]が[[写像]]されない [[URL]]
となった時、その[[ロック]]はその[[要求]]によって削除されなければ[['''なりません''']]。
[SRC[>>1]]
[21] [[ロック]]を削除できるのは、[[ロック作成者]]か、[[ロック]]を削除する[[特権]]を有する
[[principal]] です。