*** 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; |