3232import org .apache .gravitino .MetadataObject ;
3333
3434/** Built-in policy content for Iceberg compaction strategy. */
35- public class IcebergDataCompactionContent implements PolicyContent {
35+ public class IcebergDataCompactionContent extends AbstractExecutablePolicyContent {
3636 /** Property key for strategy type. */
3737 public static final String STRATEGY_TYPE_KEY = "strategy.type" ;
3838 /** Strategy type value for iceberg data compaction. */
@@ -130,7 +130,7 @@ public class IcebergDataCompactionContent implements PolicyContent {
130130
131131 /** Default constructor for Jackson deserialization only. */
132132 private IcebergDataCompactionContent () {
133- this (null , null , null , null , null , null , null , null );
133+ this (null , null , null , null , null , null , null , null , PolicyExecutionSpec . empty () );
134134 }
135135
136136 IcebergDataCompactionContent (
@@ -142,6 +142,29 @@ private IcebergDataCompactionContent() {
142142 String rewriteStrategy ,
143143 String sortOrder ,
144144 Map <String , String > rewriteOptions ) {
145+ this (
146+ minDataFileMse ,
147+ minDeleteFileNumber ,
148+ dataFileMseWeight ,
149+ deleteFileNumberWeight ,
150+ maxPartitionNum ,
151+ rewriteStrategy ,
152+ sortOrder ,
153+ rewriteOptions ,
154+ PolicyExecutionSpec .empty ());
155+ }
156+
157+ IcebergDataCompactionContent (
158+ Long minDataFileMse ,
159+ Long minDeleteFileNumber ,
160+ Long dataFileMseWeight ,
161+ Long deleteFileNumberWeight ,
162+ Long maxPartitionNum ,
163+ String rewriteStrategy ,
164+ String sortOrder ,
165+ Map <String , String > rewriteOptions ,
166+ PolicyExecutionSpec executionSpec ) {
167+ super (executionSpec );
145168 // Nullable inputs are treated as "use default" to simplify policy creation.
146169 this .minDataFileMse = minDataFileMse == null ? DEFAULT_MIN_DATA_FILE_MSE : minDataFileMse ;
147170 this .minDeleteFileNumber =
@@ -267,7 +290,7 @@ public Map<String, Object> rules() {
267290
268291 @ Override
269292 public void validate () throws IllegalArgumentException {
270- PolicyContent . super .validate ();
293+ super .validate ();
271294 // All fields are defaulted in the constructor, so only range checks are needed here.
272295 Preconditions .checkArgument (minDataFileMse >= 0 , "minDataFileMse must be >= 0" );
273296 Preconditions .checkArgument (minDeleteFileNumber >= 0 , "minDeleteFileNumber must be >= 0" );
@@ -314,7 +337,8 @@ public boolean equals(Object o) {
314337 return false ;
315338 }
316339 IcebergDataCompactionContent that = (IcebergDataCompactionContent ) o ;
317- return Objects .equals (minDataFileMse , that .minDataFileMse )
340+ return executionFieldsEqual (that )
341+ && Objects .equals (minDataFileMse , that .minDataFileMse )
318342 && Objects .equals (minDeleteFileNumber , that .minDeleteFileNumber )
319343 && Objects .equals (dataFileMseWeight , that .dataFileMseWeight )
320344 && Objects .equals (deleteFileNumberWeight , that .deleteFileNumberWeight )
@@ -327,6 +351,7 @@ public boolean equals(Object o) {
327351 @ Override
328352 public int hashCode () {
329353 return Objects .hash (
354+ executionFieldsHashCode (),
330355 minDataFileMse ,
331356 minDeleteFileNumber ,
332357 dataFileMseWeight ,
@@ -339,25 +364,30 @@ public int hashCode() {
339364
340365 @ Override
341366 public String toString () {
342- return "IcebergDataCompactionContent{"
343- + "minDataFileMse="
344- + minDataFileMse
345- + ", minDeleteFileNumber="
346- + minDeleteFileNumber
347- + ", dataFileMseWeight="
348- + dataFileMseWeight
349- + ", deleteFileNumberWeight="
350- + deleteFileNumberWeight
351- + ", maxPartitionNum="
352- + maxPartitionNum
353- + ", rewriteStrategy='"
354- + rewriteStrategy
355- + '\''
356- + ", sortOrder='"
357- + sortOrder
358- + '\''
359- + ", rewriteOptions="
360- + rewriteOptions
361- + '}' ;
367+ StringBuilder sb =
368+ new StringBuilder ("IcebergDataCompactionContent{" )
369+ .append ("minDataFileMse=" )
370+ .append (minDataFileMse )
371+ .append (", minDeleteFileNumber=" )
372+ .append (minDeleteFileNumber )
373+ .append (", dataFileMseWeight=" )
374+ .append (dataFileMseWeight )
375+ .append (", deleteFileNumberWeight=" )
376+ .append (deleteFileNumberWeight )
377+ .append (", maxPartitionNum=" )
378+ .append (maxPartitionNum )
379+ .append (", rewriteStrategy='" )
380+ .append (rewriteStrategy )
381+ .append ('\'' )
382+ .append (", sortOrder='" )
383+ .append (sortOrder )
384+ .append ('\'' )
385+ // Never render rewriteOptions values; same redaction as jobOptions / updaterOptions.
386+ .append (", rewriteOptionsKeys=" )
387+ .append (rewriteOptions .keySet ())
388+ .append (", " );
389+ appendExecutionFields (sb );
390+ sb .append ('}' );
391+ return sb .toString ();
362392 }
363393}
0 commit comments