@@ -315,6 +315,11 @@ func (s *NosqlTableResourceCrud) getTableFromWorkRequest(workId *string, retryPo
315315 }
316316 return err
317317 }
318+
319+ // For update, we send multiple requests and we don't want to override the state file for each request
320+ if actionTypeEnum == oci_nosql .WorkRequestResourceActionTypeUpdated {
321+ return nil
322+ }
318323 s .D .SetId (* tableId )
319324 s .D .Set ("table_name_or_id" , * tableId )
320325
@@ -448,15 +453,30 @@ func (s *NosqlTableResourceCrud) Get() error {
448453}
449454
450455func (s * NosqlTableResourceCrud ) Update () error {
451- if compartment , ok := s .D .GetOkExists ("compartment_id" ); ok && s .D .HasChange ("compartment_id" ) {
456+ if _ , ok := s .D .GetOkExists ("compartment_id" ); ok && s .D .HasChange ("compartment_id" ) {
452457 oldRaw , newRaw := s .D .GetChange ("compartment_id" )
453458 if newRaw != "" && oldRaw != "" {
454- err := s .updateCompartment (compartment )
459+ fromCompartmentId := oldRaw .(string )
460+ toCompartmentId := newRaw .(string )
461+ err := s .updateCompartment (fromCompartmentId , toCompartmentId )
455462 if err != nil {
456463 return err
457464 }
458465 }
459466 }
467+
468+ defer func () {
469+ // get latest state of the instance
470+ err := s .Get ()
471+ if err != nil {
472+ log .Printf ("[ERROR] unable to invoke GET() after UPDATE '%v'" , err )
473+ }
474+ // write latest state
475+ if err := s .SetData (); err != nil {
476+ log .Printf ("[ERROR] unable to invoke setData() '%v'" , err )
477+ }
478+ }()
479+
460480 request := oci_nosql.UpdateTableRequest {}
461481
462482 request .RequestMetadata .RetryPolicy = getRetryPolicy (s .DisableNotFoundRetries , "nosql" )
@@ -530,7 +550,7 @@ func sendUpdateRequest(s *NosqlTableResourceCrud, request oci_nosql.UpdateTableR
530550 if err != nil {
531551 return err
532552 }
533- return s . SetData ()
553+ return nil
534554}
535555
536556func (s * NosqlTableResourceCrud ) Delete () error {
@@ -737,27 +757,30 @@ func TableSummaryToMap(obj oci_nosql.TableSummary) map[string]interface{} {
737757 return result
738758}
739759
740- func (s * NosqlTableResourceCrud ) updateCompartment (compartment interface {} ) error {
760+ func (s * NosqlTableResourceCrud ) updateCompartment (fromCompartmentId , toCompartmentId string ) error {
741761 changeCompartmentRequest := oci_nosql.ChangeTableCompartmentRequest {}
742762
743- if fromCompartmentId , ok := s .D .GetOkExists ("from_compartment_id" ); ok {
744- tmp := fromCompartmentId .(string )
745- changeCompartmentRequest .FromCompartmentId = & tmp
746- }
763+ changeCompartmentRequest .FromCompartmentId = & fromCompartmentId
747764
748765 if tableNameOrId , ok := s .D .GetOkExists ("table_name_or_id" ); ok {
749766 tmp := tableNameOrId .(string )
750767 changeCompartmentRequest .TableNameOrId = & tmp
768+ } else if s .D .Id () != "" {
769+ tmp := s .D .Id ()
770+ changeCompartmentRequest .TableNameOrId = & tmp
751771 }
752772
753- if toCompartmentId , ok := s .D .GetOkExists ("to_compartment_id" ); ok {
754- tmp := toCompartmentId .(string )
755- changeCompartmentRequest .ToCompartmentId = & tmp
756- }
773+ changeCompartmentRequest .ToCompartmentId = & toCompartmentId
757774
758775 changeCompartmentRequest .RequestMetadata .RetryPolicy = getRetryPolicy (s .DisableNotFoundRetries , "nosql" )
759776
760- _ , err := s .Client .ChangeTableCompartment (context .Background (), changeCompartmentRequest )
777+ response , err := s .Client .ChangeTableCompartment (context .Background (), changeCompartmentRequest )
778+ if err != nil {
779+ return err
780+ }
781+
782+ workId := response .OpcWorkRequestId
783+ err = s .getTableFromWorkRequest (workId , getRetryPolicy (s .DisableNotFoundRetries , "nosql" ), oci_nosql .WorkRequestResourceActionTypeUpdated , s .D .Timeout (schema .TimeoutUpdate ))
761784 if err != nil {
762785 return err
763786 }
0 commit comments