Skip to content

Commit

Permalink
Add retry config (#189)
Browse files Browse the repository at this point in the history
* Add retry config

* Change max retry timeout

* Add UNAVAILABLE to retryableStatusCodes

* Update retryPolicy rules

* Update to apply to all methods

* Add option to enable retry
  • Loading branch information
Teddy-1000 authored Oct 2, 2024
1 parent 4945d72 commit ea44877
Showing 1 changed file with 25 additions and 2 deletions.
27 changes: 25 additions & 2 deletions ingest/api/grpc_putter.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import logging
import os
import json

from functools import cache

Expand All @@ -12,7 +13,29 @@

@cache
def get_grpc_stub():
channel = grpc.aio.insecure_channel(f"{os.getenv('DSHOST', 'store')}:{os.getenv('DSPORT', '50050')}")
options = []
grpc_config = json.dumps(
{
"methodConfig": [
{
"name": [{}],
"retryPolicy": {
"maxAttempts": 5,
"initialBackoff": "0.5s",
"maxBackoff": "8s",
"backoffMultiplier": 2,
"retryableStatusCodes": ["INTERNAL", "UNAVAILABLE", "OUT_OF_RANGE"],
},
}
]
}
)
options.append(("grpc.enable_retries", 1))
options.append(("grpc.service_config", grpc_config))
channel = grpc.aio.insecure_channel(
f"{os.getenv('DSHOST', 'store')}:{os.getenv('DSPORT', '50050')}", options=options
)

return dstore_grpc.DatastoreStub(channel)


Expand All @@ -23,4 +46,4 @@ async def putObsRequest(put_obs_request):
logger.debug("RPC call succeeded.")
except grpc.aio.AioRpcError as grpc_error:
logger.critical(f"RPC call failed: {grpc_error.code()}\n{grpc_error.details()}")
raise HTTPException(detail=grpc_error.details(), status_code=400)
raise HTTPException(detail=f"GRPC_ERROR:{grpc_error.details()}", status_code=400)

1 comment on commit ea44877

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

API Unit Test Coverage Report
FileStmtsMissCoverMissing
\_\_init\_\_.py00100% 
datastore_pb2.py655220%34–85
datastore_pb2_grpc.py542750%15–16, 19, 65–80, 121–123, 128–130, 135–137, 142–144, 148–173, 219, 246, 273, 300
export_metrics.py100100% 
grpc_getter.py201145%15–19, 23–26, 30–32, 36–38
locustfile.py15150%1–31
main.py43784%45, 50, 60, 70–71, 81–82
metadata_endpoints.py653152%45–54, 58, 85, 100–219, 223
response_classes.py50100% 
utilities.py1744674%20, 38, 45, 67–70, 78–89, 94–101, 121, 125, 127, 155, 161, 179, 193–194, 198, 214–218, 222–228, 232–234, 264, 268, 290, 295
custom_geo_json
   edr_feature_collection.py60100% 
formatters
   \_\_init\_\_.py110100% 
   covjson.py59198%91
   geojson.py21290%27, 52
openapi
   custom_dimension_examples.py40100% 
   edr_query_parameter_descriptions.py110100% 
   openapi_examples.py130100% 
routers
   \_\_init\_\_.py00100% 
   edr.py101496%348–349, 438–439
   feature.py471960%99–132, 148–153, 159–181
TOTAL72421570% 

API Unit Test Coverage Summary

Tests Skipped Failures Errors Time
30 0 💤 0 ❌ 0 🔥 1.935s ⏱️

Please sign in to comment.