Revision 9f135224 snf-pithos-app/pithos/api/util.py

b/snf-pithos-app/pithos/api/util.py
1084 1084
                # Add a PithosBackend as attribute of the request object
1085 1085
                request.backend = get_backend()
1086 1086
                request.backend.lock_container_path = lock_container_path
1087
                request.backend.wrapper.execute()
1088
                request.backend.serials = []
1089
                request.backend.messages = []
1090

  
1087 1091
                # Many API method expect thet X-Auth-Token in request,token
1088 1092
                request.token = request.x_auth_token
1089 1093
                update_request_headers(request)
1090 1094
                response = func(request, *args, **kwargs)
1091 1095
                update_response_headers(request, response)
1096

  
1097
                # send messages produced
1098
                for m in request.backend.messages:
1099
                    request.backend.queue.send(*m)
1100

  
1101
                # register serials
1102
                if request.backend.serials:
1103
                    request.backend.commission_serials.insert_many(
1104
                        request.backend.serials)
1105

  
1106
                    # commit to ensure that the serials are registered
1107
                    # even if resolve commission fails
1108
                    request.backend.wrapper.commit()
1109

  
1110
                    # start new transaction
1111
                    request.backend.wrapper.execute()
1112

  
1113
                    r = request.backend.astakosclient.resolve_commissions(
1114
                                token=request.backend.service_token,
1115
                                accept_serials=request.backend.serials,
1116
                                reject_serials=[])
1117
                    request.backend.commission_serials.delete_many(
1118
                        r['accepted'])
1119

  
1120
                request.backend.wrapper.commit()
1092 1121
                return response
1122
            except:
1123
                if request.backend.serials:
1124
                    request.backend.astakosclient.resolve_commissions(
1125
                        token=request.backend.service_token,
1126
                        accept_serials=[],
1127
                        reject_serials=request.backend.serials)
1128
                request.backend.wrapper.rollback()
1129
                raise
1093 1130
            finally:
1094 1131
                # Always close PithosBackend connection
1095 1132
                if getattr(request, "backend", None) is not None:

Also available in: Unified diff