76 lines
2.0 KiB
Diff
76 lines
2.0 KiB
Diff
|
*** sequence/sequence.c.orig 2008-05-05 13:25:09.000000000 -0700
|
||
|
--- sequence/sequence.c 2008-08-15 09:58:46.000000000 -0700
|
||
|
***************
|
||
|
*** 187,193 ****
|
||
|
if ((ret = __db_get_flags(dbp, &tflags)) != 0)
|
||
|
goto err;
|
||
|
|
||
|
! if (DB_IS_READONLY(dbp)) {
|
||
|
ret = __db_rdonly(dbp->env, "DB_SEQUENCE->open");
|
||
|
goto err;
|
||
|
}
|
||
|
--- 187,197 ----
|
||
|
if ((ret = __db_get_flags(dbp, &tflags)) != 0)
|
||
|
goto err;
|
||
|
|
||
|
! /*
|
||
|
! * We can let replication clients open sequences, but must
|
||
|
! * check later that they do not update them.
|
||
|
! */
|
||
|
! if (F_ISSET(dbp, DB_AM_RDONLY)) {
|
||
|
ret = __db_rdonly(dbp->env, "DB_SEQUENCE->open");
|
||
|
goto err;
|
||
|
}
|
||
|
***************
|
||
|
*** 244,249 ****
|
||
|
--- 248,258 ----
|
||
|
if ((ret != DB_NOTFOUND && ret != DB_KEYEMPTY) ||
|
||
|
!LF_ISSET(DB_CREATE))
|
||
|
goto err;
|
||
|
+ if (IS_REP_CLIENT(env) &&
|
||
|
+ !F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
|
||
|
+ ret = __db_rdonly(env, "DB_SEQUENCE->open");
|
||
|
+ goto err;
|
||
|
+ }
|
||
|
ret = 0;
|
||
|
|
||
|
rp = &seq->seq_record;
|
||
|
***************
|
||
|
*** 296,302 ****
|
||
|
*/
|
||
|
rp = seq->seq_data.data;
|
||
|
if (rp->seq_version == DB_SEQUENCE_OLDVER) {
|
||
|
! oldver: rp->seq_version = DB_SEQUENCE_VERSION;
|
||
|
if (!F_ISSET(env, ENV_LITTLEENDIAN)) {
|
||
|
if (IS_DB_AUTO_COMMIT(dbp, txn)) {
|
||
|
if ((ret =
|
||
|
--- 305,316 ----
|
||
|
*/
|
||
|
rp = seq->seq_data.data;
|
||
|
if (rp->seq_version == DB_SEQUENCE_OLDVER) {
|
||
|
! oldver: if (IS_REP_CLIENT(env) &&
|
||
|
! !F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
|
||
|
! ret = __db_rdonly(env, "DB_SEQUENCE->open");
|
||
|
! goto err;
|
||
|
! }
|
||
|
! rp->seq_version = DB_SEQUENCE_VERSION;
|
||
|
if (!F_ISSET(env, ENV_LITTLEENDIAN)) {
|
||
|
if (IS_DB_AUTO_COMMIT(dbp, txn)) {
|
||
|
if ((ret =
|
||
|
***************
|
||
|
*** 707,712 ****
|
||
|
--- 721,733 ----
|
||
|
|
||
|
MUTEX_LOCK(env, seq->mtx_seq);
|
||
|
|
||
|
+ if (handle_check && IS_REP_CLIENT(env) &&
|
||
|
+ !F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
|
||
|
+ ret = __db_rdonly(env, "DB_SEQUENCE->get");
|
||
|
+ goto err;
|
||
|
+ }
|
||
|
+
|
||
|
+
|
||
|
if (rp->seq_min + delta > rp->seq_max) {
|
||
|
__db_errx(env, "Sequence overflow");
|
||
|
ret = EINVAL;
|