]>
Commit | Line | Data |
---|---|---|
00c6a2e7 AM |
1 | *** sequence/sequence.c.orig 2008-05-05 13:25:09.000000000 -0700 |
2 | --- sequence/sequence.c 2008-08-15 09:58:46.000000000 -0700 | |
3 | *************** | |
4 | *** 187,193 **** | |
5 | if ((ret = __db_get_flags(dbp, &tflags)) != 0) | |
6 | goto err; | |
7 | ||
8 | ! if (DB_IS_READONLY(dbp)) { | |
9 | ret = __db_rdonly(dbp->env, "DB_SEQUENCE->open"); | |
10 | goto err; | |
11 | } | |
12 | --- 187,197 ---- | |
13 | if ((ret = __db_get_flags(dbp, &tflags)) != 0) | |
14 | goto err; | |
15 | ||
16 | ! /* | |
17 | ! * We can let replication clients open sequences, but must | |
18 | ! * check later that they do not update them. | |
19 | ! */ | |
20 | ! if (F_ISSET(dbp, DB_AM_RDONLY)) { | |
21 | ret = __db_rdonly(dbp->env, "DB_SEQUENCE->open"); | |
22 | goto err; | |
23 | } | |
24 | *************** | |
25 | *** 244,249 **** | |
26 | --- 248,258 ---- | |
27 | if ((ret != DB_NOTFOUND && ret != DB_KEYEMPTY) || | |
28 | !LF_ISSET(DB_CREATE)) | |
29 | goto err; | |
30 | + if (IS_REP_CLIENT(env) && | |
31 | + !F_ISSET(dbp, DB_AM_NOT_DURABLE)) { | |
32 | + ret = __db_rdonly(env, "DB_SEQUENCE->open"); | |
33 | + goto err; | |
34 | + } | |
35 | ret = 0; | |
36 | ||
37 | rp = &seq->seq_record; | |
38 | *************** | |
39 | *** 296,302 **** | |
40 | */ | |
41 | rp = seq->seq_data.data; | |
42 | if (rp->seq_version == DB_SEQUENCE_OLDVER) { | |
43 | ! oldver: rp->seq_version = DB_SEQUENCE_VERSION; | |
44 | if (!F_ISSET(env, ENV_LITTLEENDIAN)) { | |
45 | if (IS_DB_AUTO_COMMIT(dbp, txn)) { | |
46 | if ((ret = | |
47 | --- 305,316 ---- | |
48 | */ | |
49 | rp = seq->seq_data.data; | |
50 | if (rp->seq_version == DB_SEQUENCE_OLDVER) { | |
51 | ! oldver: if (IS_REP_CLIENT(env) && | |
52 | ! !F_ISSET(dbp, DB_AM_NOT_DURABLE)) { | |
53 | ! ret = __db_rdonly(env, "DB_SEQUENCE->open"); | |
54 | ! goto err; | |
55 | ! } | |
56 | ! rp->seq_version = DB_SEQUENCE_VERSION; | |
57 | if (!F_ISSET(env, ENV_LITTLEENDIAN)) { | |
58 | if (IS_DB_AUTO_COMMIT(dbp, txn)) { | |
59 | if ((ret = | |
60 | *************** | |
61 | *** 707,712 **** | |
62 | --- 721,733 ---- | |
63 | ||
64 | MUTEX_LOCK(env, seq->mtx_seq); | |
65 | ||
66 | + if (handle_check && IS_REP_CLIENT(env) && | |
67 | + !F_ISSET(dbp, DB_AM_NOT_DURABLE)) { | |
68 | + ret = __db_rdonly(env, "DB_SEQUENCE->get"); | |
69 | + goto err; | |
70 | + } | |
71 | + | |
72 | + | |
73 | if (rp->seq_min + delta > rp->seq_max) { | |
74 | __db_errx(env, "Sequence overflow"); | |
75 | ret = EINVAL; |