[bug fix]hold first_sstable when create ddl sstable
This commit is contained in:
		| @ -520,11 +520,11 @@ int ObTabletDDLUtil::prepare_index_data_desc(ObTablet &tablet, | |||||||
| } | } | ||||||
|  |  | ||||||
| int ObTabletDDLUtil::try_get_first_ddl_sstable(ObTablet &tablet, | int ObTabletDDLUtil::try_get_first_ddl_sstable(ObTablet &tablet, | ||||||
|  |                                                ObTableStoreIterator &ddl_table_iter, | ||||||
|                                                blocksstable::ObSSTable *&first_sstable) |                                                blocksstable::ObSSTable *&first_sstable) | ||||||
| { | { | ||||||
|   int ret = OB_SUCCESS; |   int ret = OB_SUCCESS; | ||||||
|   first_sstable = nullptr; |   first_sstable = nullptr; | ||||||
|   ObTableStoreIterator ddl_table_iter; |  | ||||||
|  |  | ||||||
|   ObITable *first_ddl_sstable = nullptr; |   ObITable *first_ddl_sstable = nullptr; | ||||||
|   if (OB_FAIL(tablet.get_ddl_sstables(ddl_table_iter))) { |   if (OB_FAIL(tablet.get_ddl_sstables(ddl_table_iter))) { | ||||||
|  | |||||||
| @ -150,6 +150,7 @@ public: | |||||||
|                                      const blocksstable::ObSSTable *first_ddl_sstable, |                                      const blocksstable::ObSSTable *first_ddl_sstable, | ||||||
|                                      blocksstable::ObWholeDataStoreDesc &data_desc); |                                      blocksstable::ObWholeDataStoreDesc &data_desc); | ||||||
|   static int try_get_first_ddl_sstable(ObTablet &tablet, |   static int try_get_first_ddl_sstable(ObTablet &tablet, | ||||||
|  |                                        ObTableStoreIterator &ddl_table_iter, | ||||||
|                                        blocksstable::ObSSTable *&first_sstable); |                                        blocksstable::ObSSTable *&first_sstable); | ||||||
|   static int create_ddl_sstable(ObTablet &tablet, |   static int create_ddl_sstable(ObTablet &tablet, | ||||||
|                                 const ObTabletDDLParam &ddl_param, |                                 const ObTabletDDLParam &ddl_param, | ||||||
|  | |||||||
| @ -709,8 +709,9 @@ int ObDDLKV::close(ObTablet &tablet) | |||||||
|     ddl_param.start_scn_ = ddl_start_scn_; |     ddl_param.start_scn_ = ddl_start_scn_; | ||||||
|     ddl_param.snapshot_version_ = snapshot_version_; |     ddl_param.snapshot_version_ = snapshot_version_; | ||||||
|     ddl_param.data_format_version_ = data_format_version_; |     ddl_param.data_format_version_ = data_format_version_; | ||||||
|  |     ObTableStoreIterator ddl_table_iter; // need to hold first_sstable until finish | ||||||
|     ObSSTable *first_sstable = nullptr; |     ObSSTable *first_sstable = nullptr; | ||||||
|     if (OB_FAIL(ObTabletDDLUtil::try_get_first_ddl_sstable(tablet, first_sstable))) { |     if (OB_FAIL(ObTabletDDLUtil::try_get_first_ddl_sstable(tablet, ddl_table_iter, first_sstable))) { | ||||||
|       LOG_WARN("fail to get first sstable", K(ret), K(tablet)); |       LOG_WARN("fail to get first sstable", K(ret), K(tablet)); | ||||||
|     } else if (OB_FAIL(ObTabletDDLUtil::create_ddl_sstable(tablet, ddl_param, meta_array, first_sstable, allocator, sstable))) { |     } else if (OB_FAIL(ObTabletDDLUtil::create_ddl_sstable(tablet, ddl_param, meta_array, first_sstable, allocator, sstable))) { | ||||||
|       LOG_WARN("create ddl sstable failed", K(ret), K(ddl_param), KP(first_sstable)); |       LOG_WARN("create ddl sstable failed", K(ret), K(ddl_param), KP(first_sstable)); | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 renju96
					renju96