@@ -895,7 +895,7 @@ public void testCreateMVWithCoolDownTime() throws Exception {
895
895
}
896
896
897
897
@ Test
898
- public void testMaterializedViewReload () throws Exception {
898
+ public void testMaterializedViewReloadNotPostLoadImage () throws Exception {
899
899
starRocksAssert .withDatabase ("test" ).useDatabase ("test" )
900
900
.withTable ("CREATE TABLE base_table\n " +
901
901
"(\n " +
@@ -926,6 +926,7 @@ public void testMaterializedViewReload() throws Exception {
926
926
"REFRESH manual\n " +
927
927
"as select k1,k2,v1 from base_mv;" );
928
928
Database testDb = GlobalStateMgr .getCurrentState ().getLocalMetastore ().getDb ("test" );
929
+ Table baseTable = GlobalStateMgr .getCurrentState ().getLocalMetastore ().getTable (testDb .getFullName (), "base_table" );
929
930
MaterializedView baseMv = ((MaterializedView ) GlobalStateMgr .getCurrentState ().getLocalMetastore ()
930
931
.getTable (testDb .getFullName (), "base_mv" ));
931
932
MaterializedView mv1 = ((MaterializedView ) GlobalStateMgr .getCurrentState ().getLocalMetastore ()
@@ -934,26 +935,123 @@ public void testMaterializedViewReload() throws Exception {
934
935
.getTable (testDb .getFullName (), "mv2" ));
935
936
936
937
{
937
- // before post image reload, all materialized views has `reloaded` flag set to false
938
- Assert .assertFalse (mv1 .isReloaded ());
939
- Assert .assertFalse (mv2 .isReloaded ());
940
- Assert .assertFalse (baseMv .isReloaded ());
938
+ Config .enable_mv_post_image_reload_cache = false ;
939
+ boolean postLoadImage = false ;
941
940
942
- GlobalStateMgr .getCurrentState ().processMvRelatedMeta ();
941
+ baseMv .setReloaded (false );
942
+ baseTable .removeRelatedMaterializedView (baseMv .getMvId ());
943
+ baseMv .removeRelatedMaterializedView (mv1 .getMvId ());
944
+ baseMv .removeRelatedMaterializedView (mv2 .getMvId ());
943
945
944
- // after post image reload, all materialized views should have `reloaded` flag reset to false
945
- Assert .assertFalse (mv1 .isReloaded ());
946
- Assert .assertFalse (mv2 .isReloaded ());
947
- Assert .assertFalse (baseMv .isReloaded ());
946
+ mv1 .onReload (postLoadImage );
947
+ mv2 .onReload (postLoadImage );
948
+
949
+ Assert .assertFalse (baseMv .hasReloaded ());
950
+ Assert .assertEquals (1 , baseTable .getRelatedMaterializedViews ().size ());
951
+ Assert .assertEquals (2 , baseMv .getRelatedMaterializedViews ().size ());
952
+ Assert .assertTrue (baseMv .getRelatedMaterializedViews ().contains (mv1 .getMvId ()));
953
+ Assert .assertTrue (baseMv .getRelatedMaterializedViews ().contains (mv2 .getMvId ()));
948
954
}
949
955
950
956
{
957
+ Config .enable_mv_post_image_reload_cache = true ;
951
958
boolean postLoadImage = true ;
959
+
960
+ baseMv .setReloaded (false );
961
+ baseTable .removeRelatedMaterializedView (baseMv .getMvId ());
962
+ baseMv .removeRelatedMaterializedView (mv1 .getMvId ());
963
+ baseMv .removeRelatedMaterializedView (mv2 .getMvId ());
964
+
965
+ mv1 .onReload (postLoadImage );
966
+ mv2 .onReload (postLoadImage );
967
+
968
+ Assert .assertTrue (baseMv .hasReloaded ());
969
+ Assert .assertEquals (1 , baseTable .getRelatedMaterializedViews ().size ());
970
+ Assert .assertEquals (2 , baseMv .getRelatedMaterializedViews ().size ());
971
+ Assert .assertTrue (baseMv .getRelatedMaterializedViews ().contains (mv1 .getMvId ()));
972
+ Assert .assertTrue (baseMv .getRelatedMaterializedViews ().contains (mv2 .getMvId ()));
973
+ }
974
+
975
+ {
976
+ Config .enable_mv_post_image_reload_cache = true ;
977
+ boolean postLoadImage = false ;
978
+
979
+ baseMv .setReloaded (false );
980
+ baseTable .removeRelatedMaterializedView (baseMv .getMvId ());
981
+ baseMv .removeRelatedMaterializedView (mv1 .getMvId ());
982
+ baseMv .removeRelatedMaterializedView (mv2 .getMvId ());
983
+
952
984
mv1 .onReload (postLoadImage );
953
985
mv2 .onReload (postLoadImage );
954
- Assert .assertTrue (mv1 .isReloaded ());
955
- Assert .assertTrue (mv2 .isReloaded ());
956
- Assert .assertTrue (baseMv .isReloaded ());
986
+
987
+ Assert .assertFalse (baseMv .hasReloaded ());
988
+ Assert .assertEquals (1 , baseTable .getRelatedMaterializedViews ().size ());
989
+ Assert .assertEquals (2 , baseMv .getRelatedMaterializedViews ().size ());
990
+ Assert .assertTrue (baseMv .getRelatedMaterializedViews ().contains (mv1 .getMvId ()));
991
+ Assert .assertTrue (baseMv .getRelatedMaterializedViews ().contains (mv2 .getMvId ()));
957
992
}
958
993
}
994
+
995
+
996
+ @ Test
997
+ public void testMaterializedViewReloadPostLoadImage () throws Exception {
998
+ starRocksAssert .withDatabase ("test" ).useDatabase ("test" )
999
+ .withTable ("CREATE TABLE base_table\n " +
1000
+ "(\n " +
1001
+ " k1 date,\n " +
1002
+ " k2 int,\n " +
1003
+ " v1 int sum\n " +
1004
+ ")\n " +
1005
+ "PARTITION BY RANGE(k1)\n " +
1006
+ "(\n " +
1007
+ " PARTITION p1 values [('2022-02-01'),('2022-02-16')),\n " +
1008
+ " PARTITION p2 values [('2022-02-16'),('2022-03-01'))\n " +
1009
+ ")\n " +
1010
+ "DISTRIBUTED BY HASH(k2) BUCKETS 3\n " +
1011
+ "PROPERTIES('replication_num' = '1');" )
1012
+ .withMaterializedView ("CREATE MATERIALIZED VIEW base_mv\n " +
1013
+ "PARTITION BY k1\n " +
1014
+ "DISTRIBUTED BY HASH(k2) BUCKETS 3\n " +
1015
+ "REFRESH manual\n " +
1016
+ "as select k1,k2,v1 from base_table;" )
1017
+ .withMaterializedView ("CREATE MATERIALIZED VIEW mv1\n " +
1018
+ "PARTITION BY k1\n " +
1019
+ "DISTRIBUTED BY HASH(k2) BUCKETS 3\n " +
1020
+ "REFRESH manual\n " +
1021
+ "as select k1,k2,v1 from base_mv;" )
1022
+ .withMaterializedView ("CREATE MATERIALIZED VIEW mv2\n " +
1023
+ "PARTITION BY k1\n " +
1024
+ "DISTRIBUTED BY HASH(k2) BUCKETS 3\n " +
1025
+ "REFRESH manual\n " +
1026
+ "as select k1,k2,v1 from base_mv;" );
1027
+ Database testDb = GlobalStateMgr .getCurrentState ().getLocalMetastore ().getDb ("test" );
1028
+ Table baseTable = GlobalStateMgr .getCurrentState ().getLocalMetastore ().getTable (testDb .getFullName (), "base_table" );
1029
+ MaterializedView baseMv = ((MaterializedView ) GlobalStateMgr .getCurrentState ().getLocalMetastore ()
1030
+ .getTable (testDb .getFullName (), "base_mv" ));
1031
+ MaterializedView mv1 = ((MaterializedView ) GlobalStateMgr .getCurrentState ().getLocalMetastore ()
1032
+ .getTable (testDb .getFullName (), "mv1" ));
1033
+ MaterializedView mv2 = ((MaterializedView ) GlobalStateMgr .getCurrentState ().getLocalMetastore ()
1034
+ .getTable (testDb .getFullName (), "mv2" ));
1035
+
1036
+ baseTable .removeRelatedMaterializedView (baseMv .getMvId ());
1037
+ baseMv .removeRelatedMaterializedView (mv1 .getMvId ());
1038
+ baseMv .removeRelatedMaterializedView (mv2 .getMvId ());
1039
+
1040
+ Assert .assertFalse (mv1 .hasReloaded ());
1041
+ Assert .assertFalse (mv2 .hasReloaded ());
1042
+ Assert .assertFalse (baseMv .hasReloaded ());
1043
+
1044
+ Config .enable_mv_post_image_reload_cache = true ;
1045
+ // do post image reload
1046
+ GlobalStateMgr .getCurrentState ().processMvRelatedMeta ();
1047
+
1048
+ // after post image reload, all materialized views should have `reloaded` flag reset to false
1049
+ Assert .assertFalse (mv1 .hasReloaded ());
1050
+ Assert .assertFalse (mv2 .hasReloaded ());
1051
+ Assert .assertFalse (baseMv .hasReloaded ());
1052
+ Assert .assertEquals (1 , baseTable .getRelatedMaterializedViews ().size ());
1053
+ Assert .assertEquals (2 , baseMv .getRelatedMaterializedViews ().size ());
1054
+ Assert .assertTrue (baseMv .getRelatedMaterializedViews ().contains (mv1 .getMvId ()));
1055
+ Assert .assertTrue (baseMv .getRelatedMaterializedViews ().contains (mv2 .getMvId ()));
1056
+ }
959
1057
}
0 commit comments