Skip to content

Commit f2a97fe

Browse files
authored
Merge pull request #195 from awslabs/no_api_cache_purging_on_reset
Not purging the API cache on reset
2 parents dcde7e1 + 03bf688 commit f2a97fe

File tree

2 files changed

+139
-2
lines changed

2 files changed

+139
-2
lines changed

src/source/CurlApiCallbacks.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -713,8 +713,10 @@ STATUS shutdownStreamCurl(UINT64 customData, STREAM_HANDLE streamHandle, BOOL re
713713
CHK_STATUS(curlApiCallbacksShutdownActiveUploads(pCurlApiCallbacks, streamHandle, INVALID_UPLOAD_HANDLE_VALUE,
714714
CURL_API_CALLBACKS_SHUTDOWN_TIMEOUT, FALSE, FALSE));
715715

716-
// Clear out the cached endpoints
717-
CHK_STATUS(curlApiCallbacksShutdownCachedEndpoints(pCurlApiCallbacks, streamHandle, TRUE));
716+
// Clear out the cached endpoints only when not resetting
717+
if (!resetStream) {
718+
CHK_STATUS(curlApiCallbacksShutdownCachedEndpoints(pCurlApiCallbacks, streamHandle, TRUE));
719+
}
718720

719721
// at this point all remaining threads should not be blocked and reach termination shortly. Thus spin wait for it
720722
// to remove itself from the pActiveRequests hashtable and pActiveUploads list

tst/ProducerFunctionalityTest.cpp

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,141 @@ TEST_F(ProducerFunctionalityTest, create_client_repeated_create_stream_put_frame
291291
EXPECT_EQ(STATUS_SUCCESS, freeKinesisVideoStream(&streamHandle));
292292
mStreams[0] = INVALID_STREAM_HANDLE_VALUE;
293293
}
294+
295+
EXPECT_EQ(FUNCTIONALITY_TEST_STRESS_TEST_ITERATION, mCurlDescribeStreamCount);
296+
EXPECT_EQ(FUNCTIONALITY_TEST_STRESS_TEST_ITERATION, mCurlGetDataEndpointCount);
297+
}
298+
299+
TEST_F(ProducerFunctionalityTest, create_caching_endpoint_repeated_create_stream_put_frame_free_stream)
300+
{
301+
UINT32 i, j;
302+
STREAM_HANDLE streamHandle = INVALID_STREAM_HANDLE_VALUE;
303+
UINT32 totalFragments = 2;
304+
UINT32 totalFrames = totalFragments * TEST_FPS;
305+
306+
createDefaultProducerClient(TRUE, FUNCTIONALITY_TEST_CREATE_STREAM_TIMEOUT);
307+
308+
for (i = 0; i < FUNCTIONALITY_TEST_STRESS_TEST_ITERATION; i++) {
309+
310+
EXPECT_EQ(STATUS_SUCCESS, createTestStream(0, STREAMING_TYPE_REALTIME, TEST_MAX_STREAM_LATENCY, TEST_STREAM_BUFFER_DURATION, FALSE));
311+
streamHandle = mStreams[0];
312+
EXPECT_TRUE(streamHandle != INVALID_STREAM_HANDLE_VALUE);
313+
314+
for (j = 0; j < totalFrames; ++j) {
315+
EXPECT_EQ(STATUS_SUCCESS, putKinesisVideoFrame(streamHandle, &mFrame));
316+
updateFrame();
317+
}
318+
319+
mFrame.flags = FRAME_FLAG_NONE;
320+
mFrame.presentationTs = 0;
321+
mFrame.decodingTs = 0;
322+
mFrame.index = 0;
323+
324+
EXPECT_EQ(STATUS_SUCCESS, stopKinesisVideoStreamSync(streamHandle));
325+
EXPECT_EQ(STATUS_SUCCESS, freeKinesisVideoStream(&streamHandle));
326+
mStreams[0] = INVALID_STREAM_HANDLE_VALUE;
327+
}
328+
329+
EXPECT_EQ(0, mCurlDescribeStreamCount);
330+
EXPECT_EQ(FUNCTIONALITY_TEST_STRESS_TEST_ITERATION, mCurlGetDataEndpointCount);
331+
}
332+
333+
TEST_F(ProducerFunctionalityTest, create_caching_endpoint_client_repeated_create_stream_put_frame_reset_stream)
334+
{
335+
UINT32 i, j;
336+
STREAM_HANDLE streamHandle = INVALID_STREAM_HANDLE_VALUE;
337+
UINT32 totalFragments = 2;
338+
UINT32 totalFrames = totalFragments * TEST_FPS;
339+
340+
createDefaultProducerClient(TRUE, FUNCTIONALITY_TEST_CREATE_STREAM_TIMEOUT);
341+
342+
EXPECT_EQ(STATUS_SUCCESS, createTestStream(0, STREAMING_TYPE_REALTIME, TEST_MAX_STREAM_LATENCY, TEST_STREAM_BUFFER_DURATION, FALSE));
343+
streamHandle = mStreams[0];
344+
EXPECT_TRUE(streamHandle != INVALID_STREAM_HANDLE_VALUE);
345+
346+
for (i = 0; i < FUNCTIONALITY_TEST_STRESS_TEST_ITERATION; i++) {
347+
for (j = 0; j < totalFrames; ++j) {
348+
EXPECT_EQ(STATUS_SUCCESS, putKinesisVideoFrame(streamHandle, &mFrame));
349+
updateFrame();
350+
}
351+
352+
mFrame.flags = FRAME_FLAG_NONE;
353+
mFrame.presentationTs = 0;
354+
mFrame.decodingTs = 0;
355+
mFrame.index = 0;
356+
357+
EXPECT_EQ(STATUS_SUCCESS, stopKinesisVideoStreamSync(streamHandle));
358+
EXPECT_EQ(STATUS_SUCCESS, kinesisVideoStreamResetStream(streamHandle));
359+
}
360+
361+
EXPECT_EQ(0, mCurlDescribeStreamCount);
362+
EXPECT_EQ(1, mCurlGetDataEndpointCount);
363+
}
364+
365+
TEST_F(ProducerFunctionalityTest, create_caching_all_repeated_create_stream_put_frame_free_stream)
366+
{
367+
UINT32 i, j;
368+
STREAM_HANDLE streamHandle = INVALID_STREAM_HANDLE_VALUE;
369+
UINT32 totalFragments = 2;
370+
UINT32 totalFrames = totalFragments * TEST_FPS;
371+
372+
createDefaultProducerClient(API_CALL_CACHE_TYPE_ALL, FUNCTIONALITY_TEST_CREATE_STREAM_TIMEOUT);
373+
374+
for (i = 0; i < FUNCTIONALITY_TEST_STRESS_TEST_ITERATION; i++) {
375+
376+
EXPECT_EQ(STATUS_SUCCESS, createTestStream(0, STREAMING_TYPE_REALTIME, TEST_MAX_STREAM_LATENCY, TEST_STREAM_BUFFER_DURATION, FALSE));
377+
streamHandle = mStreams[0];
378+
EXPECT_TRUE(streamHandle != INVALID_STREAM_HANDLE_VALUE);
379+
380+
for (j = 0; j < totalFrames; ++j) {
381+
EXPECT_EQ(STATUS_SUCCESS, putKinesisVideoFrame(streamHandle, &mFrame));
382+
updateFrame();
383+
}
384+
385+
mFrame.flags = FRAME_FLAG_NONE;
386+
mFrame.presentationTs = 0;
387+
mFrame.decodingTs = 0;
388+
mFrame.index = 0;
389+
390+
EXPECT_EQ(STATUS_SUCCESS, stopKinesisVideoStreamSync(streamHandle));
391+
EXPECT_EQ(STATUS_SUCCESS, freeKinesisVideoStream(&streamHandle));
392+
mStreams[0] = INVALID_STREAM_HANDLE_VALUE;
393+
}
394+
395+
EXPECT_EQ(FUNCTIONALITY_TEST_STRESS_TEST_ITERATION, mCurlDescribeStreamCount);
396+
EXPECT_EQ(FUNCTIONALITY_TEST_STRESS_TEST_ITERATION, mCurlGetDataEndpointCount);
397+
}
398+
399+
TEST_F(ProducerFunctionalityTest, create_caching_all_client_repeated_create_stream_put_frame_reset_stream)
400+
{
401+
UINT32 i, j;
402+
STREAM_HANDLE streamHandle = INVALID_STREAM_HANDLE_VALUE;
403+
UINT32 totalFragments = 2;
404+
UINT32 totalFrames = totalFragments * TEST_FPS;
405+
406+
createDefaultProducerClient(API_CALL_CACHE_TYPE_ALL, FUNCTIONALITY_TEST_CREATE_STREAM_TIMEOUT);
407+
408+
EXPECT_EQ(STATUS_SUCCESS, createTestStream(0, STREAMING_TYPE_REALTIME, TEST_MAX_STREAM_LATENCY, TEST_STREAM_BUFFER_DURATION, FALSE));
409+
streamHandle = mStreams[0];
410+
EXPECT_TRUE(streamHandle != INVALID_STREAM_HANDLE_VALUE);
411+
412+
for (i = 0; i < FUNCTIONALITY_TEST_STRESS_TEST_ITERATION; i++) {
413+
for (j = 0; j < totalFrames; ++j) {
414+
EXPECT_EQ(STATUS_SUCCESS, putKinesisVideoFrame(streamHandle, &mFrame));
415+
updateFrame();
416+
}
417+
418+
mFrame.flags = FRAME_FLAG_NONE;
419+
mFrame.presentationTs = 0;
420+
mFrame.decodingTs = 0;
421+
mFrame.index = 0;
422+
423+
EXPECT_EQ(STATUS_SUCCESS, stopKinesisVideoStreamSync(streamHandle));
424+
EXPECT_EQ(STATUS_SUCCESS, kinesisVideoStreamResetStream(streamHandle));
425+
}
426+
427+
EXPECT_EQ(1, mCurlDescribeStreamCount);
428+
EXPECT_EQ(1, mCurlGetDataEndpointCount);
294429
}
295430

296431
TEST_F(ProducerFunctionalityTest, create_client_repeated_create_stream_put_frame_free_stream_multi_stream)

0 commit comments

Comments
 (0)