@@ -187,43 +187,12 @@ describe('SearchSessionService', () => {
187187 ) . rejects . toMatchInlineSnapshot ( `[Error: locatorId is required]` ) ;
188188 } ) ;
189189
190- it ( 'saving updates an existing saved object and persists it' , async ( ) => {
191- const mockUpdateSavedObject = {
192- ...mockSavedObject ,
193- attributes : { } ,
194- } ;
195- savedObjectsClient . get . mockResolvedValue ( mockSavedObject ) ;
196- savedObjectsClient . update . mockResolvedValue ( mockUpdateSavedObject ) ;
197-
198- await service . save ( { savedObjectsClient } , mockUser1 , sessionId , {
199- name : 'banana' ,
200- appId : 'nanana' ,
201- locatorId : 'panama' ,
202- } ) ;
203-
204- expect ( savedObjectsClient . update ) . toHaveBeenCalled ( ) ;
205- expect ( savedObjectsClient . create ) . not . toHaveBeenCalled ( ) ;
206-
207- const [ type , id , callAttributes ] = savedObjectsClient . update . mock . calls [ 0 ] ;
208- expect ( type ) . toBe ( SEARCH_SESSION_TYPE ) ;
209- expect ( id ) . toBe ( sessionId ) ;
210- expect ( callAttributes ) . not . toHaveProperty ( 'idMapping' ) ;
211- expect ( callAttributes ) . toHaveProperty ( 'name' , 'banana' ) ;
212- expect ( callAttributes ) . toHaveProperty ( 'appId' , 'nanana' ) ;
213- expect ( callAttributes ) . toHaveProperty ( 'locatorId' , 'panama' ) ;
214- expect ( callAttributes ) . toHaveProperty ( 'initialState' , { } ) ;
215- expect ( callAttributes ) . toHaveProperty ( 'restoreState' , { } ) ;
216- } ) ;
217-
218- it ( 'saving creates a new persisted saved object, if it did not exist' , async ( ) => {
190+ it ( 'saving creates a new persisted saved object' , async ( ) => {
219191 const mockCreatedSavedObject = {
220192 ...mockSavedObject ,
221193 attributes : { } ,
222194 } ;
223195
224- savedObjectsClient . update . mockRejectedValue (
225- SavedObjectsErrorHelpers . createGenericNotFoundError ( sessionId )
226- ) ;
227196 savedObjectsClient . create . mockResolvedValue ( mockCreatedSavedObject ) ;
228197
229198 await service . save ( { savedObjectsClient } , mockUser1 , sessionId , {
@@ -232,7 +201,7 @@ describe('SearchSessionService', () => {
232201 locatorId : 'panama' ,
233202 } ) ;
234203
235- expect ( savedObjectsClient . update ) . toHaveBeenCalledTimes ( 1 ) ;
204+ expect ( savedObjectsClient . update ) . toHaveBeenCalledTimes ( 0 ) ;
236205 expect ( savedObjectsClient . create ) . toHaveBeenCalledTimes ( 1 ) ;
237206
238207 const [ type , callAttributes , options ] = savedObjectsClient . create . mock . calls [ 0 ] ;
@@ -738,147 +707,19 @@ describe('SearchSessionService', () => {
738707 } ) ;
739708 } ) ;
740709
741- it ( 'retries updating the saved object if there was a ES conflict 409 ' , async ( ) => {
710+ it ( 'passes retryOnConflict param to es ' , async ( ) => {
742711 const searchRequest = { params : { } } ;
743712 const searchId = 'FnpFYlBpeXdCUTMyZXhCLTc1TWFKX0EbdDFDTzJzTE1Sck9PVTBIcW1iU05CZzo4MDA0' ;
744713
745- const mockUpdateSavedObject = {
746- ...mockSavedObject ,
747- attributes : { } ,
748- } ;
749-
750- let counter = 0 ;
751-
752- savedObjectsClient . update . mockImplementation ( ( ) => {
753- return new Promise ( ( resolve , reject ) => {
754- if ( counter === 0 ) {
755- counter ++ ;
756- reject ( SavedObjectsErrorHelpers . createConflictError ( SEARCH_SESSION_TYPE , searchId ) ) ;
757- } else {
758- resolve ( mockUpdateSavedObject ) ;
759- }
760- } ) ;
761- } ) ;
762-
763- await service . trackId ( { savedObjectsClient } , mockUser1 , searchRequest , searchId , {
764- sessionId,
765- strategy : MOCK_STRATEGY ,
766- } ) ;
767-
768- expect ( savedObjectsClient . update ) . toHaveBeenCalledTimes ( 2 ) ;
769- expect ( savedObjectsClient . create ) . not . toHaveBeenCalled ( ) ;
770- } ) ;
771-
772- it ( 'retries updating the saved object if theres a ES conflict 409, but stops after MAX_RETRIES times' , async ( ) => {
773- const searchRequest = { params : { } } ;
774- const searchId = 'FnpFYlBpeXdCUTMyZXhCLTc1TWFKX0EbdDFDTzJzTE1Sck9PVTBIcW1iU05CZzo4MDA0' ;
775-
776- savedObjectsClient . update . mockImplementation ( ( ) => {
777- return new Promise ( ( resolve , reject ) => {
778- reject ( SavedObjectsErrorHelpers . createConflictError ( SEARCH_SESSION_TYPE , searchId ) ) ;
779- } ) ;
780- } ) ;
781-
782- await service . trackId ( { savedObjectsClient } , mockUser1 , searchRequest , searchId , {
783- sessionId,
784- strategy : MOCK_STRATEGY ,
785- } ) ;
786-
787- // Track ID doesn't throw errors even in cases of failure!
788- expect ( savedObjectsClient . update ) . toHaveBeenCalledTimes ( MAX_UPDATE_RETRIES ) ;
789- expect ( savedObjectsClient . create ) . not . toHaveBeenCalled ( ) ;
790- } ) ;
791-
792- it ( 'creates the saved object in non persisted state, if search session doesnt exists' , async ( ) => {
793- const searchRequest = { params : { } } ;
794- const requestHash = createRequestHash ( searchRequest . params ) ;
795- const searchId = 'FnpFYlBpeXdCUTMyZXhCLTc1TWFKX0EbdDFDTzJzTE1Sck9PVTBIcW1iU05CZzo4MDA0' ;
796-
797- const mockCreatedSavedObject = {
798- ...mockSavedObject ,
799- attributes : { } ,
800- } ;
801-
802- savedObjectsClient . update . mockRejectedValue (
803- SavedObjectsErrorHelpers . createGenericNotFoundError ( sessionId )
804- ) ;
805- savedObjectsClient . create . mockResolvedValue ( mockCreatedSavedObject ) ;
806-
807714 await service . trackId ( { savedObjectsClient } , mockUser1 , searchRequest , searchId , {
808715 sessionId,
809716 strategy : MOCK_STRATEGY ,
810717 } ) ;
811718
812719 expect ( savedObjectsClient . update ) . toHaveBeenCalled ( ) ;
813- expect ( savedObjectsClient . create ) . toHaveBeenCalled ( ) ;
814-
815- const [ type , callAttributes , options ] = savedObjectsClient . create . mock . calls [ 0 ] ;
816- expect ( type ) . toBe ( SEARCH_SESSION_TYPE ) ;
817- expect ( options ) . toStrictEqual ( { id : sessionId } ) ;
818- expect ( callAttributes ) . toHaveProperty ( 'idMapping' , {
819- [ requestHash ] : {
820- id : searchId ,
821- strategy : MOCK_STRATEGY ,
822- } ,
823- } ) ;
824- expect ( callAttributes ) . toHaveProperty ( 'expires' ) ;
825- expect ( callAttributes ) . toHaveProperty ( 'created' ) ;
826- expect ( callAttributes ) . toHaveProperty ( 'sessionId' , sessionId ) ;
827- } ) ;
828-
829- it ( 'retries updating if update returned 404 and then update returned conflict 409 (first create race condition)' , async ( ) => {
830- const searchRequest = { params : { } } ;
831- const searchId = 'FnpFYlBpeXdCUTMyZXhCLTc1TWFKX0EbdDFDTzJzTE1Sck9PVTBIcW1iU05CZzo4MDA0' ;
832-
833- const mockUpdateSavedObject = {
834- ...mockSavedObject ,
835- attributes : { } ,
836- } ;
837-
838- let counter = 0 ;
839-
840- savedObjectsClient . update . mockImplementation ( ( ) => {
841- return new Promise ( ( resolve , reject ) => {
842- if ( counter === 0 ) {
843- counter ++ ;
844- reject ( SavedObjectsErrorHelpers . createGenericNotFoundError ( sessionId ) ) ;
845- } else {
846- resolve ( mockUpdateSavedObject ) ;
847- }
848- } ) ;
849- } ) ;
850-
851- savedObjectsClient . create . mockRejectedValue (
852- SavedObjectsErrorHelpers . createConflictError ( SEARCH_SESSION_TYPE , searchId )
853- ) ;
854-
855- await service . trackId ( { savedObjectsClient } , mockUser1 , searchRequest , searchId , {
856- sessionId,
857- strategy : MOCK_STRATEGY ,
858- } ) ;
859-
860- expect ( savedObjectsClient . update ) . toHaveBeenCalledTimes ( 2 ) ;
861- expect ( savedObjectsClient . create ) . toHaveBeenCalledTimes ( 1 ) ;
862- } ) ;
863-
864- it ( 'retries everything at most MAX_RETRIES times' , async ( ) => {
865- const searchRequest = { params : { } } ;
866- const searchId = 'FnpFYlBpeXdCUTMyZXhCLTc1TWFKX0EbdDFDTzJzTE1Sck9PVTBIcW1iU05CZzo4MDA0' ;
867-
868- savedObjectsClient . update . mockRejectedValue (
869- SavedObjectsErrorHelpers . createGenericNotFoundError ( sessionId )
870- ) ;
871- savedObjectsClient . create . mockRejectedValue (
872- SavedObjectsErrorHelpers . createConflictError ( SEARCH_SESSION_TYPE , searchId )
873- ) ;
874-
875- await service . trackId ( { savedObjectsClient } , mockUser1 , searchRequest , searchId , {
876- sessionId,
877- strategy : MOCK_STRATEGY ,
878- } ) ;
879720
880- expect ( savedObjectsClient . update ) . toHaveBeenCalledTimes ( MAX_UPDATE_RETRIES ) ;
881- expect ( savedObjectsClient . create ) . toHaveBeenCalledTimes ( MAX_UPDATE_RETRIES ) ;
721+ const [ , , , opts ] = savedObjectsClient . update . mock . calls [ 0 ] ;
722+ expect ( opts ) . toHaveProperty ( 'retryOnConflict' , MAX_UPDATE_RETRIES ) ;
882723 } ) ;
883724
884725 it ( 'batches updates for the same session' , async ( ) => {
0 commit comments