@@ -425,7 +425,10 @@ int ObHybridVectorRefreshTask::get_embedded_table_column_ids(ObPluginVectorIndex
425425 }
426426 }
427427 task_ctx->part_key_num_ = part_key_column_ids.count ();
428- if (OB_SUCC (ret) && OB_FAIL (task_ctx->embedded_table_column_ids_ .push_back (vector_column_id))) {
428+ if (OB_FAIL (ret)) {
429+ } else if (OB_FAIL (task_ctx->embedded_table_column_ids_ .push_back (vector_column_id))) {
430+ LOG_WARN (" failed to push vector column id." , K (ret));
431+ } else if (OB_FAIL (task_ctx->embedded_table_update_ids_ .push_back (vector_column_id))) {
429432 LOG_WARN (" failed to push vector column id." , K (ret));
430433 }
431434
@@ -902,7 +905,7 @@ int ObHybridVectorRefreshTask::after_embedding(ObPluginVectorIndexAdaptor &adapt
902905 ObArray<float *> output_vector;
903906 float *vector_buf = nullptr ;
904907 ObHybridVectorRefreshTaskCtx *task_ctx = static_cast <ObHybridVectorRefreshTaskCtx *>(get_task_ctx ());
905- storage::ObValueRowIterator embedded_iter;
908+ ObVecIndexATaskUpdIterator embedded_iter;
906909 storage::ObValueRowIterator index_id_iter;
907910 storage::ObValueRowIterator delta_delete_iter;
908911 embedded_iter.init ();
@@ -946,13 +949,15 @@ int ObHybridVectorRefreshTask::after_embedding(ObPluginVectorIndexAdaptor &adapt
946949 ret = OB_ALLOCATE_MEMORY_FAILED ;
947950 LOG_WARN (" failed to alloc mem." , K (ret), K (dim));
948951 } else {
949- HEAP_VARS_3 ((blocksstable::ObDatumRow, datum_row, tenant_id_), (storage::ObTableScanParam, vid_rowkey_scan_param), (schema::ObTableParam, vid_rowkey_table_param, allocator_)) {
952+ HEAP_VARS_4 ((blocksstable::ObDatumRow, datum_row, tenant_id_), (blocksstable::ObDatumRow, new_row , tenant_id_), (storage::ObTableScanParam, vid_rowkey_scan_param), (schema::ObTableParam, vid_rowkey_table_param, allocator_)) {
950953 ObArenaAllocator scan_allocator (" VecEmbedding" , OB_MALLOC_NORMAL_BLOCK_SIZE , MTL_ID ());
951954 common::ObNewRowIterator *vid_rowkey_iter = nullptr ;
952955 ObTableScanIterator *table_scan_iter = nullptr ;
953956 int64_t loop_cnt = 0 ;
954957 if (OB_FAIL (datum_row.init (task_ctx->embedded_table_column_ids_ .count ()))) {
955958 LOG_WARN (" fail to init datum row" , K (ret), K (task_ctx->embedded_table_column_ids_ ), K (datum_row));
959+ } else if (OB_FAIL (new_row.init (task_ctx->embedded_table_column_ids_ .count ()))) {
960+ LOG_WARN (" fail to init datum row" , K (ret), K (task_ctx->embedded_table_column_ids_ ), K (new_row));
956961 } else if (adaptor.get_is_need_vid () && OB_FAIL (ObPluginVectorIndexUtils::read_local_tablet (ls_id_,
957962 &adaptor,
958963 ctx_->task_status_ .target_scn_ ,
@@ -970,7 +975,7 @@ int ObHybridVectorRefreshTask::after_embedding(ObPluginVectorIndexAdaptor &adapt
970975 for (int64_t i = 0 ; i < dim; i++) {
971976 vector_buf[i] = output_vector.at (row_id)[i];
972977 }
973- datum_row.storage_datums_ [task_ctx->embedded_table_column_ids_ .count () - 1 ].set_string ( reinterpret_cast < char *>(vector_buf), dim * sizeof ( float ) );
978+ datum_row.storage_datums_ [task_ctx->embedded_table_column_ids_ .count () - 1 ].set_null ( );
974979 for (int i = task_ctx->embedded_table_column_ids_ .count () - 2 ; i > task_ctx->embedded_table_column_ids_ .count () - 2 - task_ctx->part_key_num_ ; i--) {
975980 datum_row.storage_datums_ [i].set_null ();
976981 }
@@ -1007,11 +1012,13 @@ int ObHybridVectorRefreshTask::after_embedding(ObPluginVectorIndexAdaptor &adapt
10071012 }
10081013 }
10091014 if (OB_SUCC (ret)) {
1010- if (OB_FAIL (embedded_iter.add_row (datum_row))) {
1015+ if (OB_FAIL (new_row.deep_copy (datum_row, allocator_))) {
1016+ LOG_WARN (" failed to copy row" , K (ret), K (datum_row));
1017+ } else if (FALSE_IT (new_row.storage_datums_ [task_ctx->embedded_table_column_ids_ .count () - 1 ].set_string (reinterpret_cast <char *>(vector_buf), dim * sizeof (float )))) {
1018+ } else if (OB_FAIL (embedded_iter.add_row (datum_row, new_row))) {
10111019 LOG_WARN (" failed to add row to index id iter" , K (ret));
10121020 }
10131021 datum_row.reuse ();
1014-
10151022 }
10161023
10171024 CHECK_TASK_CANCELLED_IN_PROCESS (ret, loop_cnt, ctx_);
@@ -1039,7 +1046,7 @@ int ObHybridVectorRefreshTask::after_embedding(ObPluginVectorIndexAdaptor &adapt
10391046 LOG_WARN (" unexpected error" , K (ret), KPC (task_ctx), K (oas));
10401047 } else if (OB_FAIL (init_dml_param (adaptor.get_embedded_table_id (), dml_param, table_dml_param, task_ctx->embedded_table_column_ids_ , tx_desc, snapshot, store_ctx_guard))) {
10411048 LOG_WARN (" failed to init dml param" , K (ret), K (dml_param), K (table_dml_param));
1042- } else if (OB_FAIL (oas->insert_rows (ls_id_, adaptor.get_embedded_tablet_id (), *tx_desc, dml_param, task_ctx->embedded_table_column_ids_ , &embedded_iter, affected_rows))) {
1049+ } else if (OB_FAIL (oas->update_rows (ls_id_, adaptor.get_embedded_tablet_id (), *tx_desc, dml_param, task_ctx->embedded_table_column_ids_ , task_ctx-> embedded_table_update_ids_ , &embedded_iter, affected_rows))) {
10431050 LOG_WARN (" failed to insert rows to embedded table" , K (ret), K (adaptor.get_embedded_tablet_id ()));
10441051 }
10451052 store_ctx_guard.reset ();
0 commit comments