History

implement retries for global requests that might have to wait one sample for their relevant object to be constructed

Jack Atherton committed 8 years ago

Commit 4edd3671 parent 52b166a2 files · +291 −14Browse files

Showing the changes to src/core/chuck_vm.cpp (1 of 2 files). Show all

Unified · Split

src/core/chuck_vm.cpp+284−14
@@ -154,6 +154,7 @@ Chuck_VM::Chuck_VM() · 153 unmodified lines
154154
155155 // REFACTOR-2017: TODO might want to dynamically grow queue?
156156 m_global_request_queue.init( 16384 );
157+ m_global_request_retry_queue.init( 16384 );
157158 }
158159
159160
@@ -1888,6 +1889,8 @@ t_CKBOOL Chuck_VM::broadcast_global_event( std::string name ) · 1728 unmodified lines
18881889 Chuck_Global_Request r;
18891890 r.type = signal_global_event_request;
18901891 r.signalEventRequest = signal_event_message;
1892+ // chuck object might not be constructed on time. retry only once
1893+ r.retries = 1;
18911894
18921895 m_global_request_queue.put( r );
18931896
@@ -1913,6 +1916,8 @@ t_CKBOOL Chuck_VM::listen_for_global_event( std::string name, · 19 unmodified lines
19131916 Chuck_Global_Request r;
19141917 r.type = listen_for_global_event_request;
19151918 r.listenForEventRequest = listen_event_message;
1919+ // chuck object might not be constructed on time. retry only once
1920+ r.retries = 1;
19161921
19171922 m_global_request_queue.put( r );
19181923
@@ -2127,6 +2132,8 @@ t_CKBOOL Chuck_VM::set_global_int_array( std::string name, t_CKINT arrayValues[] · 208 unmodified lines
21272132 Chuck_Global_Request r;
21282133 r.type = set_global_int_array_request;
21292134 r.setIntArrayRequest = message;
2135+ // chuck object might not be constructed on time. retry only once
2136+ r.retries = 1;
21302137
21312138 m_global_request_queue.put( r );
21322139
@@ -2150,6 +2157,8 @@ t_CKBOOL Chuck_VM::get_global_int_array( std::string name, void (* callback)(t_C · 17 unmodified lines
21502157 Chuck_Global_Request r;
21512158 r.type = get_global_int_array_request;
21522159 r.getIntArrayRequest = message;
2160+ // chuck object might not be constructed on time. retry only once
2161+ r.retries = 1;
21532162
21542163 m_global_request_queue.put( r );
21552164
@@ -2174,6 +2183,8 @@ t_CKBOOL Chuck_VM::set_global_int_array_value( std::string name, t_CKUINT index, · 18 unmodified lines
21742183 Chuck_Global_Request r;
21752184 r.type = set_global_int_array_value_request;
21762185 r.setIntArrayValueRequest = message;
2186+ // chuck object might not be constructed on time. retry only once
2187+ r.retries = 1;
21772188
21782189 m_global_request_queue.put( r );
21792190
@@ -2198,6 +2209,8 @@ t_CKBOOL Chuck_VM::get_global_int_array_value( std::string name, t_CKUINT index, · 18 unmodified lines
21982209 Chuck_Global_Request r;
21992210 r.type = get_global_int_array_value_request;
22002211 r.getIntArrayValueRequest = message;
2212+ // chuck object might not be constructed on time. retry only once
2213+ r.retries = 1;
22012214
22022215 m_global_request_queue.put( r );
22032216
@@ -2222,6 +2235,8 @@ t_CKBOOL Chuck_VM::set_global_associative_int_array_value( std::string name, std · 18 unmodified lines
22222235 Chuck_Global_Request r;
22232236 r.type = set_global_associative_int_array_value_request;
22242237 r.setAssociativeIntArrayValueRequest = message;
2238+ // chuck object might not be constructed on time. retry only once
2239+ r.retries = 1;
22252240
22262241 m_global_request_queue.put( r );
22272242
@@ -2246,6 +2261,8 @@ t_CKBOOL Chuck_VM::get_global_associative_int_array_value( std::string name, std · 18 unmodified lines
22462261 Chuck_Global_Request r;
22472262 r.type = get_global_associative_int_array_value_request;
22482263 r.getAssociativeIntArrayValueRequest = message;
2264+ // chuck object might not be constructed on time. retry only once
2265+ r.retries = 1;
22492266
22502267 m_global_request_queue.put( r );
22512268
@@ -2273,6 +2290,8 @@ t_CKBOOL Chuck_VM::set_global_float_array( std::string name, t_CKFLOAT arrayValu · 21 unmodified lines
22732290 Chuck_Global_Request r;
22742291 r.type = set_global_float_array_request;
22752292 r.setFloatArrayRequest = message;
2293+ // chuck object might not be constructed on time. retry only once
2294+ r.retries = 1;
22762295
22772296 m_global_request_queue.put( r );
22782297
@@ -2296,6 +2315,8 @@ t_CKBOOL Chuck_VM::get_global_float_array( std::string name, void (* callback)(t · 17 unmodified lines
22962315 Chuck_Global_Request r;
22972316 r.type = get_global_float_array_request;
22982317 r.getFloatArrayRequest = message;
2318+ // chuck object might not be constructed on time. retry only once
2319+ r.retries = 1;
22992320
23002321 m_global_request_queue.put( r );
23012322
@@ -2320,6 +2341,8 @@ t_CKBOOL Chuck_VM::set_global_float_array_value( std::string name, t_CKUINT inde · 18 unmodified lines
23202341 Chuck_Global_Request r;
23212342 r.type = set_global_float_array_value_request;
23222343 r.setFloatArrayValueRequest = message;
2344+ // chuck object might not be constructed on time. retry only once
2345+ r.retries = 1;
23232346
23242347 m_global_request_queue.put( r );
23252348
@@ -2344,6 +2367,8 @@ t_CKBOOL Chuck_VM::get_global_float_array_value( std::string name, t_CKUINT inde · 18 unmodified lines
23442367 Chuck_Global_Request r;
23452368 r.type = get_global_float_array_value_request;
23462369 r.getFloatArrayValueRequest = message;
2370+ // chuck object might not be constructed on time. retry only once
2371+ r.retries = 1;
23472372
23482373 m_global_request_queue.put( r );
23492374
@@ -2368,6 +2393,8 @@ t_CKBOOL Chuck_VM::set_global_associative_float_array_value( std::string name, s · 18 unmodified lines
23682393 Chuck_Global_Request r;
23692394 r.type = set_global_associative_float_array_value_request;
23702395 r.setAssociativeFloatArrayValueRequest = message;
2396+ // chuck object might not be constructed on time. retry only once
2397+ r.retries = 1;
23712398
23722399 m_global_request_queue.put( r );
23732400
@@ -2392,6 +2419,8 @@ t_CKBOOL Chuck_VM::get_global_associative_float_array_value( std::string name, s · 18 unmodified lines
23922419 Chuck_Global_Request r;
23932420 r.type = get_global_associative_float_array_value_request;
23942421 r.getAssociativeFloatArrayValueRequest = message;
2422+ // chuck object might not be constructed on time. retry only once
2423+ r.retries = 1;
23952424
23962425 m_global_request_queue.put( r );
23972426
@@ -2591,8 +2620,12 @@ void Chuck_VM::cleanup_global_variables() · 193 unmodified lines
25912620 //-----------------------------------------------------------------------------
25922621 void Chuck_VM::handle_global_queue_messages()
25932622 {
2623+ bool should_retry_this_request = false;
2624+
25942625 while( m_global_request_queue.more() )
25952626 {
2627+ should_retry_this_request = false;
2628+
25962629 Chuck_Global_Request message;
25972630 if( m_global_request_queue.get( & message ) )
25982631 {
@@ -2689,8 +2722,24 @@ void Chuck_VM::handle_global_queue_messages() · 90 unmodified lines
26892722 event->signal_global();
26902723 }
26912724 }
2725+ else
2726+ {
2727+ // name does not exist. possible that object just doesn't exist yet.
2728+ if( message.retries > 0 )
2729+ {
2730+ should_retry_this_request = true;
2731+ }
2732+ }
2733+
26922734 // clean up request storage
2693− delete message.signalEventRequest;
2735+ if( should_retry_this_request )
2736+ {
2737+ m_global_request_retry_queue.put( message );
2738+ }
2739+ else
2740+ {
2741+ delete message.signalEventRequest;
2742+ }
26942743 break;
26952744
26962745 case listen_for_global_event_request:
@@ -2714,9 +2763,24 @@ void Chuck_VM::handle_global_queue_messages() · 17 unmodified lines
27142763 message.listenForEventRequest->listen_forever );
27152764 }
27162765 }
2766+ else
2767+ {
2768+ // name does not exist. possible that object just doesn't exist yet.
2769+ if( message.retries > 0 )
2770+ {
2771+ should_retry_this_request = true;
2772+ }
2773+ }
27172774 }
27182775 // clean up request storage
2719− delete message.listenForEventRequest;
2776+ if( should_retry_this_request )
2777+ {
2778+ m_global_request_retry_queue.put( message );
2779+ }
2780+ else
2781+ {
2782+ delete message.listenForEventRequest;
2783+ }
27202784 break;
27212785 case set_global_int_array_request:
27222786 {
@@ -2742,10 +2806,25 @@ void Chuck_VM::handle_global_queue_messages() · 19 unmodified lines
27422806 }
27432807 }
27442808 }
2809+ else
2810+ {
2811+ // name does not exist. possible that object just doesn't exist yet.
2812+ if( message.retries > 0 )
2813+ {
2814+ should_retry_this_request = true;
2815+ }
2816+ }
27452817 }
27462818
27472819 // clean up request storage
2748− delete message.setIntArrayRequest;
2820+ if( should_retry_this_request )
2821+ {
2822+ m_global_request_retry_queue.put( message );
2823+ }
2824+ else
2825+ {
2826+ delete message.setIntArrayRequest;
2827+ }
27492828 break;
27502829 case get_global_int_array_request:
27512830 {
@@ -2768,10 +2847,25 @@ void Chuck_VM::handle_global_queue_messages() · 16 unmodified lines
27682847 );
27692848 }
27702849 }
2850+ else
2851+ {
2852+ // name does not exist. possible that object just doesn't exist yet.
2853+ if( message.retries > 0 )
2854+ {
2855+ should_retry_this_request = true;
2856+ }
2857+ }
27712858 }
27722859
27732860 // clean up request storage
2774− delete message.getIntArrayRequest;
2861+ if( should_retry_this_request )
2862+ {
2863+ m_global_request_retry_queue.put( message );
2864+ }
2865+ else
2866+ {
2867+ delete message.getIntArrayRequest;
2868+ }
27752869 break;
27762870 case set_global_int_array_value_request:
27772871 {
@@ -2794,10 +2888,25 @@ void Chuck_VM::handle_global_queue_messages() · 16 unmodified lines
27942888 }
27952889 }
27962890 }
2891+ else
2892+ {
2893+ // name does not exist. possible that object just doesn't exist yet.
2894+ if( message.retries > 0 )
2895+ {
2896+ should_retry_this_request = true;
2897+ }
2898+ }
27972899 }
27982900
27992901 // clean up request storage
2800− delete message.setIntArrayValueRequest;
2902+ if( should_retry_this_request )
2903+ {
2904+ m_global_request_retry_queue.put( message );
2905+ }
2906+ else
2907+ {
2908+ delete message.setIntArrayValueRequest;
2909+ }
28012910 break;
28022911 case get_global_int_array_value_request:
28032912 {
@@ -2820,10 +2929,25 @@ void Chuck_VM::handle_global_queue_messages() · 16 unmodified lines
28202929 request->callback( result );
28212930 }
28222931 }
2932+ else
2933+ {
2934+ // name does not exist. possible that object just doesn't exist yet.
2935+ if( message.retries > 0 )
2936+ {
2937+ should_retry_this_request = true;
2938+ }
2939+ }
28232940 }
28242941
28252942 // clean up request storage
2826− delete message.getIntArrayValueRequest;
2943+ if( should_retry_this_request )
2944+ {
2945+ m_global_request_retry_queue.put( message );
2946+ }
2947+ else
2948+ {
2949+ delete message.getIntArrayValueRequest;
2950+ }
28272951 break;
28282952 case set_global_associative_int_array_value_request:
28292953 {
@@ -2843,10 +2967,25 @@ void Chuck_VM::handle_global_queue_messages() · 13 unmodified lines
28432967 intArray->set( request->key, request->value );
28442968 }
28452969 }
2970+ else
2971+ {
2972+ // name does not exist. possible that object just doesn't exist yet.
2973+ if( message.retries > 0 )
2974+ {
2975+ should_retry_this_request = true;
2976+ }
2977+ }
28462978 }
28472979
28482980 // clean up request storage
2849− delete message.setAssociativeIntArrayValueRequest;
2981+ if( should_retry_this_request )
2982+ {
2983+ m_global_request_retry_queue.put( message );
2984+ }
2985+ else
2986+ {
2987+ delete message.setAssociativeIntArrayValueRequest;
2988+ }
28502989 break;
28512990 case get_global_associative_int_array_value_request:
28522991 {
@@ -2869,10 +3008,25 @@ void Chuck_VM::handle_global_queue_messages() · 16 unmodified lines
28693008 request->callback( result );
28703009 }
28713010 }
3011+ else
3012+ {
3013+ // name does not exist. possible that object just doesn't exist yet.
3014+ if( message.retries > 0 )
3015+ {
3016+ should_retry_this_request = true;
3017+ }
3018+ }
28723019 }
28733020
28743021 // clean up request storage
2875− delete message.getAssociativeIntArrayValueRequest;
3022+ if( should_retry_this_request )
3023+ {
3024+ m_global_request_retry_queue.put( message );
3025+ }
3026+ else
3027+ {
3028+ delete message.getAssociativeIntArrayValueRequest;
3029+ }
28763030 break;
28773031 case set_global_float_array_request:
28783032 {
@@ -2898,10 +3052,25 @@ void Chuck_VM::handle_global_queue_messages() · 19 unmodified lines
28983052 }
28993053 }
29003054 }
3055+ else
3056+ {
3057+ // name does not exist. possible that object just doesn't exist yet.
3058+ if( message.retries > 0 )
3059+ {
3060+ should_retry_this_request = true;
3061+ }
3062+ }
29013063 }
29023064
29033065 // clean up request storage
2904− delete message.setFloatArrayRequest;
3066+ if( should_retry_this_request )
3067+ {
3068+ m_global_request_retry_queue.put( message );
3069+ }
3070+ else
3071+ {
3072+ delete message.setFloatArrayRequest;
3073+ }
29053074 break;
29063075 case get_global_float_array_request:
29073076 {
@@ -2923,10 +3092,25 @@ void Chuck_VM::handle_global_queue_messages() · 15 unmodified lines
29233092 );
29243093 }
29253094 }
3095+ else
3096+ {
3097+ // name does not exist. possible that object just doesn't exist yet.
3098+ if( message.retries > 0 )
3099+ {
3100+ should_retry_this_request = true;
3101+ }
3102+ }
29263103 }
29273104
29283105 // clean up request storage
2929− delete message.getFloatArrayRequest;
3106+ if( should_retry_this_request )
3107+ {
3108+ m_global_request_retry_queue.put( message );
3109+ }
3110+ else
3111+ {
3112+ delete message.getFloatArrayRequest;
3113+ }
29303114 break;
29313115 case set_global_float_array_value_request:
29323116 {
@@ -2949,10 +3133,25 @@ void Chuck_VM::handle_global_queue_messages() · 16 unmodified lines
29493133 }
29503134 }
29513135 }
3136+ else
3137+ {
3138+ // name does not exist. possible that object just doesn't exist yet.
3139+ if( message.retries > 0 )
3140+ {
3141+ should_retry_this_request = true;
3142+ }
3143+ }
29523144 }
29533145
29543146 // clean up request storage
2955− delete message.setFloatArrayValueRequest;
3147+ if( should_retry_this_request )
3148+ {
3149+ m_global_request_retry_queue.put( message );
3150+ }
3151+ else
3152+ {
3153+ delete message.setFloatArrayValueRequest;
3154+ }
29563155 break;
29573156 case get_global_float_array_value_request:
29583157 {
@@ -2974,10 +3173,25 @@ void Chuck_VM::handle_global_queue_messages() · 15 unmodified lines
29743173 request->callback( result );
29753174 }
29763175 }
3176+ else
3177+ {
3178+ // name does not exist. possible that object just doesn't exist yet.
3179+ if( message.retries > 0 )
3180+ {
3181+ should_retry_this_request = true;
3182+ }
3183+ }
29773184 }
29783185
29793186 // clean up request storage
2980− delete message.getFloatArrayValueRequest;
3187+ if( should_retry_this_request )
3188+ {
3189+ m_global_request_retry_queue.put( message );
3190+ }
3191+ else
3192+ {
3193+ delete message.getFloatArrayValueRequest;
3194+ }
29813195 break;
29823196 case set_global_associative_float_array_value_request:
29833197 {
@@ -2997,10 +3211,25 @@ void Chuck_VM::handle_global_queue_messages() · 13 unmodified lines
29973211 floatArray->set( request->key, request->value );
29983212 }
29993213 }
3214+ else
3215+ {
3216+ // name does not exist. possible that object just doesn't exist yet.
3217+ if( message.retries > 0 )
3218+ {
3219+ should_retry_this_request = true;
3220+ }
3221+ }
30003222 }
30013223
30023224 // clean up request storage
3003− delete message.setAssociativeFloatArrayValueRequest;
3225+ if( should_retry_this_request )
3226+ {
3227+ m_global_request_retry_queue.put( message );
3228+ }
3229+ else
3230+ {
3231+ delete message.setAssociativeFloatArrayValueRequest;
3232+ }
30043233 break;
30053234 case get_global_associative_float_array_value_request:
30063235 {
@@ -3022,10 +3251,25 @@ void Chuck_VM::handle_global_queue_messages() · 15 unmodified lines
30223251 request->callback( result );
30233252 }
30243253 }
3254+ else
3255+ {
3256+ // name does not exist. possible that object just doesn't exist yet.
3257+ if( message.retries > 0 )
3258+ {
3259+ should_retry_this_request = true;
3260+ }
3261+ }
30253262 }
30263263
30273264 // clean up request storage
3028− delete message.getAssociativeFloatArrayValueRequest;
3265+ if( should_retry_this_request )
3266+ {
3267+ m_global_request_retry_queue.put( message );
3268+ }
3269+ else
3270+ {
3271+ delete message.getAssociativeFloatArrayValueRequest;
3272+ }
30293273 break;
30303274 }
30313275 }
@@ -3035,6 +3279,32 @@ void Chuck_VM::handle_global_queue_messages() · 3 unmodified lines
30353279 break;
30363280 }
30373281 }
3282+
3283+ // process retries
3284+ while( m_global_request_retry_queue.more() )
3285+ {
3286+ // get the request
3287+ Chuck_Global_Request message;
3288+ if( m_global_request_retry_queue.get( &message ) )
3289+ {
3290+ // make sure it should be retried
3291+ if( message.retries == 0 )
3292+ {
3293+ // trying to retry something that shouldn't be.
3294+ continue;
3295+ }
3296+
3297+ // decrement the number of retries
3298+ message.retries--;
3299+ // add it back to the queue for next time
3300+ m_global_request_queue.put( message );
3301+ }
3302+ else
3303+ {
3304+ // get failed. problem?
3305+ break;
3306+ }
3307+ }
30383308 }
30393309
30403310

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t