@@ -102,7 +102,7 @@ public long next(DingoCommonId tableId) {
102102 }
103103 }
104104
105- private void updateIncrement (DingoCommonId tableId , long increment ) {
105+ public void updateIncrement (DingoCommonId tableId , long increment ) {
106106 Meta .UpdateAutoIncrementRequest request = Meta .UpdateAutoIncrementRequest .newBuilder ()
107107 .setTableId (mapping (tableId ))
108108 .setStartId (increment )
@@ -117,18 +117,42 @@ public void update(DingoCommonId tableId, long incrementId) {
117117 try {
118118 AutoIncrement autoIncrement = innerCache .computeIfAbsent (tableId ,
119119 id -> new AutoIncrement (id , increment , offset , this ::fetcher ));
120+ if (autoIncrement .getLimit () == 0 ) {
121+ autoIncrement .inc ();
122+ }
120123 if (incrementId < autoIncrement .getLimit () && incrementId >= autoIncrement .current ()) {
121124 autoIncrement .inc (incrementId );
122125 } else {
123126 // update server startid
124127 autoIncrement .inc (incrementId );
125128 if (autoIncrement .getLimit () > 0 && incrementId > autoIncrement .getLimit ()) {
126- updateIncrement (tableId , incrementId );
129+ long maxId = current (tableId );
130+ if (incrementId > maxId ) {
131+ updateIncrement (tableId , incrementId );
132+ }
127133 }
128134 }
129135 } finally {
130136 rwLock .writeLock ().unlock ();
131137 }
132138 }
133139
140+ public void reset (DingoCommonId tableId ) {
141+ rwLock .writeLock ().lock ();
142+ try {
143+ innerCache .remove (tableId );
144+ } finally {
145+ rwLock .writeLock ().unlock ();
146+ }
147+ }
148+
149+ public void reset () {
150+ rwLock .writeLock ().lock ();
151+ try {
152+ innerCache .clear ();
153+ } finally {
154+ rwLock .writeLock ().unlock ();
155+ }
156+ }
157+
134158}
0 commit comments