Author: jleroux Date: Tue Dec 17 22:46:29 2013 New Revision: 1551746 URL: http://svn.apache.org/r1551746 Log: "Applied fix from trunk for revision: 1551744 " ------------------------------------------------------------------------ r1551744 | jleroux | 2013-12-17 23:45:20 +0100 (mar. 17 déc. 2013) | 7 lignes
A slightly modified patch from Leon for "sequence-bank-size attributes does not work anymore" https://issues.apache.org/jira/browse/OFBIZ-5429 No matter how I set "sequence-bank-size" for an entity (in my example, its "EntityAuditLog"), the bank size is always default value "10". It seems that this feature was lost by a serials update of revision 922724 to 922733 submitted by doogie. jleroux: This thread http://markmail.org/message/ifosqek74gqtv7fz trace the root cause Leon's fix is safe from a concurrency perspective. I just added a check on SequenceBank.maxBankSize and put some doc in the XSD ------------------------------------------------------------------------ Modified: ofbiz/branches/release12.04/ (props changed) ofbiz/branches/release12.04/framework/entity/dtd/entitymodel.xsd ofbiz/branches/release12.04/framework/entity/src/org/ofbiz/entity/util/SequenceUtil.java Propchange: ofbiz/branches/release12.04/ ------------------------------------------------------------------------------ Merged /ofbiz/trunk:r1551744 Modified: ofbiz/branches/release12.04/framework/entity/dtd/entitymodel.xsd URL: http://svn.apache.org/viewvc/ofbiz/branches/release12.04/framework/entity/dtd/entitymodel.xsd?rev=1551746&r1=1551745&r2=1551746&view=diff ============================================================================== --- ofbiz/branches/release12.04/framework/entity/dtd/entitymodel.xsd (original) +++ ofbiz/branches/release12.04/framework/entity/dtd/entitymodel.xsd Tue Dec 17 22:46:29 2013 @@ -86,7 +86,14 @@ under the License. <xs:attribute name="package-name" type="xs:string" use="required"/> <xs:attribute name="default-resource-name" type="xs:string"/> <xs:attribute name="dependent-on" type="xs:string"/> - <xs:attribute name="sequence-bank-size" type="xs:string"/> + <xs:attribute name="sequence-bank-size" type="xs:string"> + <xs:annotation> + <xs:documentation> + The 10 default value is defined in the SequenceBank class by the defaultBankSize constant. + Can't be more than 5000 which is defined by the maxBankSize constant. + </xs:documentation> + </xs:annotation> + </xs:attribute> <xs:attribute name="enable-lock" default="false" type="boolean"/> <xs:attribute name="no-auto-stamp" default="false" type="boolean"/> <xs:attribute name="never-cache" default="false" type="boolean"/> @@ -485,7 +492,14 @@ under the License. <xs:attribute name="entity-name" type="xs:string" use="required"/> <xs:attribute name="default-resource-name" type="xs:string"/> <xs:attribute name="dependent-on" type="xs:string"/> - <xs:attribute name="sequence-bank-size" type="xs:string"/> + <xs:attribute name="sequence-bank-size" type="xs:string"> + <xs:annotation> + <xs:documentation> + The 10 default value is defined in the SequenceBank class by the defaultBankSize constant. + Can't be more than 5000 which is defined by the maxBankSize constant. + </xs:documentation> + </xs:annotation> + </xs:attribute> <xs:attribute name="enable-lock" type="boolean"/> <xs:attribute name="no-auto-stamp" type="boolean"/> <xs:attribute name="never-cache" type="boolean"/> Modified: ofbiz/branches/release12.04/framework/entity/src/org/ofbiz/entity/util/SequenceUtil.java URL: http://svn.apache.org/viewvc/ofbiz/branches/release12.04/framework/entity/src/org/ofbiz/entity/util/SequenceUtil.java?rev=1551746&r1=1551745&r2=1551746&view=diff ============================================================================== --- ofbiz/branches/release12.04/framework/entity/src/org/ofbiz/entity/util/SequenceUtil.java (original) +++ ofbiz/branches/release12.04/framework/entity/src/org/ofbiz/entity/util/SequenceUtil.java Tue Dec 17 22:46:29 2013 @@ -48,7 +48,6 @@ public class SequenceUtil { private final Map<String, SequenceBank> sequences = new Hashtable<String, SequenceBank>(); private final GenericHelperInfo helperInfo; - private final long bankSize; private final String tableName; private final String nameColName; private final String idColName; @@ -74,11 +73,6 @@ public class SequenceUtil { throw new IllegalArgumentException("Could not find the field definition for the sequence id field " + idFieldName); } this.idColName = idField.getColName(); - long bankSize = SequenceBank.defaultBankSize; - if (seqEntity.getSequenceBankSize() != null) { - bankSize = seqEntity.getSequenceBankSize().longValue(); - } - this.bankSize = bankSize; clustered = delegator.useDistributedCacheClear() || "Y".equals(UtilProperties.getPropertyValue("general.properties", "clustered")); } @@ -104,7 +98,12 @@ public class SequenceUtil { synchronized(this) { bank = sequences.get(seqName); if (bank == null) { - bank = new SequenceBank(seqName); + long bankSize = SequenceBank.defaultBankSize; + if (seqModelEntity != null && seqModelEntity.getSequenceBankSize() != null) { + bankSize = seqModelEntity.getSequenceBankSize().longValue(); + if (bankSize > SequenceBank.maxBankSize) bankSize = SequenceBank.maxBankSize; + } + bank = new SequenceBank(seqName, bankSize); sequences.put(seqName, bank); } } @@ -124,11 +123,13 @@ public class SequenceUtil { private long curSeqId; private long maxSeqId; private final String seqName; + private final long bankSize; - private SequenceBank(String seqName) { + private SequenceBank(String seqName, long bankSize) { this.seqName = seqName; curSeqId = 0; maxSeqId = 0; + this.bankSize = bankSize; fillBank(1); } @@ -167,7 +168,7 @@ public class SequenceUtil { // no need to get a new bank, SeqIds available if ((curSeqId + stagger) <= maxSeqId) return; - long bankSize = SequenceUtil.this.bankSize; + long bankSize = this.bankSize; if (stagger > 1) { // NOTE: could use staggerMax for this, but if that is done it would be easier to guess a valid next id without a brute force attack bankSize = stagger * defaultBankSize;