3838import com .scalar .db .exception .transaction .RollbackException ;
3939import com .scalar .db .exception .transaction .TransactionException ;
4040import com .scalar .db .exception .transaction .UnknownTransactionStatusException ;
41+ import com .scalar .db .io .CollationComparator ;
4142import com .scalar .db .io .Key ;
4243import com .scalar .db .service .StorageFactory ;
4344import com .scalar .db .transaction .consensuscommit .CoordinatorGroupCommitter .CoordinatorGroupCommitKeyManipulator ;
@@ -76,6 +77,7 @@ public class ConsensusCommitManager extends AbstractDistributedTransactionManage
7677 private final ConsensusCommitOperationChecker operationChecker ;
7778 @ Nullable private final CoordinatorGroupCommitter groupCommitter ;
7879 private final boolean coordinatorWriteOmissionOnReadOnlyEnabled ;
80+ private final CollationComparator collationComparator ;
7981
8082 @ SuppressFBWarnings ("EI_EXPOSE_REP2" )
8183 @ Inject
@@ -95,14 +97,16 @@ public ConsensusCommitManager(
9597 groupCommitter = CoordinatorGroupCommitter .from (config ).orElse (null );
9698 coordinatorWriteOmissionOnReadOnlyEnabled =
9799 config .isCoordinatorWriteOmissionOnReadOnlyEnabled ();
100+ collationComparator = CollationComparator .from (databaseConfig );
98101 crud =
99102 new CrudHandler (
100103 storage ,
101104 recoveryExecutor ,
102105 tableMetadataManager ,
103106 config .isIncludeMetadataEnabled (),
104107 config .isIndexEventuallyConsistentReadEnabled (),
105- parallelExecutor );
108+ parallelExecutor ,
109+ collationComparator );
106110 StorageInfoProvider storageInfoProvider = new StorageInfoProvider (admin );
107111 commit = createCommitHandler (config , storageInfoProvider );
108112 isolation = config .getIsolation ();
@@ -113,7 +117,8 @@ public ConsensusCommitManager(
113117 tableMetadataManager ,
114118 virtualTableInfoManager ,
115119 storageInfoProvider ,
116- config .isIncludeMetadataEnabled ());
120+ config .isIncludeMetadataEnabled (),
121+ databaseConfig .getCollation ());
117122
118123 ConsensusCommitUtils .warnIfBeforeIndexesAreMissing (admin , config );
119124 }
@@ -135,14 +140,16 @@ protected ConsensusCommitManager(DatabaseConfig databaseConfig) {
135140 groupCommitter = CoordinatorGroupCommitter .from (config ).orElse (null );
136141 coordinatorWriteOmissionOnReadOnlyEnabled =
137142 config .isCoordinatorWriteOmissionOnReadOnlyEnabled ();
143+ collationComparator = CollationComparator .from (databaseConfig );
138144 crud =
139145 new CrudHandler (
140146 storage ,
141147 recoveryExecutor ,
142148 tableMetadataManager ,
143149 config .isIncludeMetadataEnabled (),
144150 config .isIndexEventuallyConsistentReadEnabled (),
145- parallelExecutor );
151+ parallelExecutor ,
152+ collationComparator );
146153 StorageInfoProvider storageInfoProvider = new StorageInfoProvider (admin );
147154 commit = createCommitHandler (config , storageInfoProvider );
148155 isolation = config .getIsolation ();
@@ -153,7 +160,8 @@ protected ConsensusCommitManager(DatabaseConfig databaseConfig) {
153160 tableMetadataManager ,
154161 virtualTableInfoManager ,
155162 storageInfoProvider ,
156- config .isIncludeMetadataEnabled ());
163+ config .isIncludeMetadataEnabled (),
164+ databaseConfig .getCollation ());
157165
158166 ConsensusCommitUtils .warnIfBeforeIndexesAreMissing (admin , config );
159167 }
@@ -186,6 +194,7 @@ protected ConsensusCommitManager(DatabaseConfig databaseConfig) {
186194 this .groupCommitter = groupCommitter ;
187195 this .coordinatorWriteOmissionOnReadOnlyEnabled =
188196 config .isCoordinatorWriteOmissionOnReadOnlyEnabled ();
197+ this .collationComparator = CollationComparator .from (databaseConfig );
189198 this .isolation = isolation ;
190199 VirtualTableInfoManager virtualTableInfoManager =
191200 new VirtualTableInfoManager (admin , databaseConfig .getMetadataCacheExpirationTimeSecs ());
@@ -195,13 +204,15 @@ protected ConsensusCommitManager(DatabaseConfig databaseConfig) {
195204 tableMetadataManager ,
196205 virtualTableInfoManager ,
197206 storageInfoProvider ,
198- config .isIncludeMetadataEnabled ());
207+ config .isIncludeMetadataEnabled (),
208+ databaseConfig .getCollation ());
199209 }
200210
201211 // `groupCommitter` must be set before calling this method.
202212 private CommitHandler createCommitHandler (
203213 ConsensusCommitConfig config , StorageInfoProvider storageInfoProvider ) {
204- MutationsGrouper mutationsGrouper = new MutationsGrouper (storageInfoProvider );
214+ MutationsGrouper mutationsGrouper =
215+ new MutationsGrouper (storageInfoProvider , collationComparator );
205216 if (isGroupCommitEnabled ()) {
206217 return new CommitHandlerWithGroupCommit (
207218 storage ,
@@ -309,7 +320,8 @@ DistributedTransaction begin(
309320 txId = groupCommitter .reserve (txId );
310321 groupCommitSlotReserved = true ;
311322 }
312- Snapshot snapshot = new Snapshot (txId , tableMetadataManager , parallelExecutor );
323+ Snapshot snapshot =
324+ new Snapshot (txId , tableMetadataManager , parallelExecutor , collationComparator );
313325 TransactionContext context =
314326 new TransactionContext (
315327 txId , snapshot , isolation , readOnly , oneOperation , groupCommitSlotReserved );
0 commit comments