@@ -181,6 +181,42 @@ VRT_r_obj_reason(VRT_CTX)
181
181
H__Reason ));
182
182
}
183
183
184
+ /*--------------------------------------------------------------------
185
+ * stale_oc fields
186
+ */
187
+
188
+ VCL_INT
189
+ VRT_r_obj_stale_status (VRT_CTX )
190
+ {
191
+ CHECK_OBJ_NOTNULL (ctx , VRT_CTX_MAGIC );
192
+ CHECK_OBJ_NOTNULL (ctx -> bo , BUSYOBJ_MAGIC );
193
+ CHECK_OBJ_NOTNULL (ctx -> bo -> stale_oc , OBJCORE_MAGIC );
194
+
195
+ return HTTP_GetStatusPack (ctx -> bo -> wrk ,ctx -> bo -> stale_oc );
196
+ }
197
+
198
+ VCL_STRING
199
+ VRT_r_obj_stale_proto (VRT_CTX )
200
+ {
201
+ CHECK_OBJ_NOTNULL (ctx , VRT_CTX_MAGIC );
202
+ CHECK_OBJ_NOTNULL (ctx -> bo , BUSYOBJ_MAGIC );
203
+ CHECK_OBJ_NOTNULL (ctx -> bo -> stale_oc , OBJCORE_MAGIC );
204
+
205
+ return (HTTP_GetHdrPack (ctx -> bo -> wrk , ctx -> bo -> stale_oc ,
206
+ H__Proto ));
207
+ }
208
+
209
+ VCL_STRING
210
+ VRT_r_obj_stale_reason (VRT_CTX )
211
+ {
212
+ CHECK_OBJ_NOTNULL (ctx , VRT_CTX_MAGIC );
213
+ CHECK_OBJ_NOTNULL (ctx -> bo , BUSYOBJ_MAGIC );
214
+ CHECK_OBJ_NOTNULL (ctx -> bo -> stale_oc , OBJCORE_MAGIC );
215
+
216
+ return (HTTP_GetHdrPack (ctx -> bo -> wrk , ctx -> bo -> stale_oc ,
217
+ H__Reason ));
218
+ }
219
+
184
220
/*--------------------------------------------------------------------
185
221
* beresp bool-fields
186
222
*/
@@ -540,6 +576,33 @@ VRT_r_obj_can_esi(VRT_CTX)
540
576
541
577
/*--------------------------------------------------------------------*/
542
578
579
+ VCL_STEVEDORE
580
+ VRT_r_obj_stale_storage (VRT_CTX )
581
+ {
582
+ CHECK_OBJ_NOTNULL (ctx , VRT_CTX_MAGIC );
583
+ CHECK_OBJ_NOTNULL (ctx -> bo , BUSYOBJ_MAGIC );
584
+ CHECK_OBJ_NOTNULL (ctx -> bo -> stale_oc , OBJCORE_MAGIC );
585
+ AN (ctx -> bo -> stale_oc -> stobj );
586
+ CHECK_OBJ_NOTNULL (ctx -> bo -> stale_oc -> stobj -> stevedore ,
587
+ STEVEDORE_MAGIC );
588
+
589
+ return (ctx -> bo -> stale_oc -> stobj -> stevedore );
590
+ }
591
+
592
+ /*--------------------------------------------------------------------*/
593
+
594
+ VCL_BOOL
595
+ VRT_r_obj_stale_can_esi (VRT_CTX )
596
+ {
597
+ CHECK_OBJ_NOTNULL (ctx , VRT_CTX_MAGIC );
598
+ CHECK_OBJ_NOTNULL (ctx -> bo , BUSYOBJ_MAGIC );
599
+ CHECK_OBJ_NOTNULL (ctx -> bo -> stale_oc , OBJCORE_MAGIC );
600
+
601
+ return (ObjHasAttr (ctx -> bo -> wrk , ctx -> bo -> stale_oc , OA_ESIDATA ));
602
+ }
603
+
604
+ /*--------------------------------------------------------------------*/
605
+
543
606
#define REQ_VAR_L (nm , elem , type , extra ) \
544
607
\
545
608
VCL_VOID \
@@ -765,9 +828,13 @@ VRT_r_##which##_##fld(VRT_CTX) \
765
828
766
829
/*lint -save -e835 */ // Zero right hand arg to '-'
767
830
831
+ VRT_DO_EXP_R (obj_stale , ctx -> bo -> stale_oc , ttl ,
832
+ ttl_now (ctx ) - ctx -> bo -> stale_oc -> t_origin )
768
833
VRT_DO_EXP_R (obj , ctx -> req -> objcore , ttl ,
769
834
ttl_now (ctx ) - ctx -> req -> objcore -> t_origin )
835
+ VRT_DO_EXP_R (obj_stale , ctx -> bo -> stale_oc , grace , 0 )
770
836
VRT_DO_EXP_R (obj , ctx -> req -> objcore , grace , 0 )
837
+ VRT_DO_EXP_R (obj_stale , ctx -> bo -> stale_oc , keep , 0 )
771
838
VRT_DO_EXP_R (obj , ctx -> req -> objcore , keep , 0 )
772
839
VRT_DO_EXP_L (beresp , ctx -> bo -> fetch_objcore , ttl ,
773
840
ttl_now (ctx ) - ctx -> bo -> fetch_objcore -> t_origin )
@@ -799,6 +866,7 @@ VRT_DO_TIME_R(resp, req, t_resp)
799
866
VRT_DO_TIME_R (bereq , bo , t_first )
800
867
VRT_DO_TIME_R (beresp , bo , t_resp )
801
868
VRT_DO_TIME_R (obj , req -> objcore , t_origin )
869
+ VRT_DO_TIME_R (obj_stale , bo -> stale_oc , t_origin )
802
870
803
871
/*--------------------------------------------------------------------
804
872
*/
@@ -813,6 +881,7 @@ VRT_r_##which##_##age(VRT_CTX) \
813
881
return (ttl_now(ctx) - oc->t_origin); \
814
882
}
815
883
884
+ VRT_DO_AGE_R (obj_stale , ctx -> bo -> stale_oc )
816
885
VRT_DO_AGE_R (obj , ctx -> req -> objcore )
817
886
VRT_DO_AGE_R (beresp , ctx -> bo -> fetch_objcore )
818
887
@@ -986,6 +1055,28 @@ VRT_r_obj_uncacheable(VRT_CTX)
986
1055
987
1056
/*--------------------------------------------------------------------*/
988
1057
1058
+ VCL_INT
1059
+ VRT_r_obj_stale_hits (VRT_CTX )
1060
+ {
1061
+ CHECK_OBJ_NOTNULL (ctx , VRT_CTX_MAGIC );
1062
+ CHECK_OBJ_NOTNULL (ctx -> bo , BUSYOBJ_MAGIC );
1063
+ CHECK_OBJ_NOTNULL (ctx -> bo -> stale_oc , OBJCORE_MAGIC );
1064
+
1065
+ return (ctx -> bo -> stale_oc -> hits );
1066
+ }
1067
+
1068
+ VCL_BOOL
1069
+ VRT_r_obj_stale_uncacheable (VRT_CTX )
1070
+ {
1071
+ CHECK_OBJ_NOTNULL (ctx , VRT_CTX_MAGIC );
1072
+ CHECK_OBJ_NOTNULL (ctx -> bo , BUSYOBJ_MAGIC );
1073
+ CHECK_OBJ_NOTNULL (ctx -> bo -> stale_oc , OBJCORE_MAGIC );
1074
+
1075
+ return (ctx -> bo -> stale_oc -> flags & OC_F_HFM ? 1 : 0 );
1076
+ }
1077
+
1078
+ /*--------------------------------------------------------------------*/
1079
+
989
1080
VCL_BOOL
990
1081
VRT_r_resp_is_streaming (VRT_CTX )
991
1082
{
0 commit comments