5151from  synapse .api .room_versions  import  KNOWN_ROOM_VERSIONS , RoomVersion 
5252from  synapse .event_auth  import  validate_event_for_room_version 
5353from  synapse .events  import  EventBase 
54+ from  synapse .events .snapshot  import  UnpersistedEventContext 
5455from  synapse .events .utils  import  copy_and_fixup_power_levels_contents 
5556from  synapse .handlers .relations  import  BundledAggregations 
5657from  synapse .module_api  import  NOT_SPAM 
@@ -211,7 +212,7 @@ async def upgrade_room(
211212                # the required power level to send the tombstone event. 
212213                (
213214                    tombstone_event ,
214-                     tombstone_context ,
215+                     tombstone_unpersisted_context ,
215216                ) =  await  self .event_creation_handler .create_event (
216217                    requester ,
217218                    {
@@ -225,6 +226,9 @@ async def upgrade_room(
225226                        },
226227                    },
227228                )
229+                 tombstone_context  =  await  tombstone_unpersisted_context .persist (
230+                     tombstone_event 
231+                 )
228232                validate_event_for_room_version (tombstone_event )
229233                await  self ._event_auth_handler .check_auth_rules_from_context (
230234                    tombstone_event 
@@ -1092,7 +1096,7 @@ async def create_event(
10921096            content : JsonDict ,
10931097            for_batch : bool ,
10941098            ** kwargs : Any ,
1095-         ) ->  Tuple [EventBase , synapse .events .snapshot .EventContext ]:
1099+         ) ->  Tuple [EventBase , synapse .events .snapshot .UnpersistedEventContextBase ]:
10961100            """ 
10971101            Creates an event and associated event context. 
10981102            Args: 
@@ -1111,20 +1115,23 @@ async def create_event(
11111115
11121116            event_dict  =  create_event_dict (etype , content , ** kwargs )
11131117
1114-             new_event , new_context  =  await  self .event_creation_handler .create_event (
1118+             (
1119+                 new_event ,
1120+                 new_unpersisted_context ,
1121+             ) =  await  self .event_creation_handler .create_event (
11151122                creator ,
11161123                event_dict ,
11171124                prev_event_ids = prev_event ,
11181125                depth = depth ,
11191126                state_map = state_map ,
11201127                for_batch = for_batch ,
1121-                 current_state_group = current_state_group ,
11221128            )
1129+ 
11231130            depth  +=  1 
11241131            prev_event  =  [new_event .event_id ]
11251132            state_map [(new_event .type , new_event .state_key )] =  new_event .event_id 
11261133
1127-             return  new_event , new_context 
1134+             return  new_event , new_unpersisted_context 
11281135
11291136        try :
11301137            config  =  self ._presets_dict [preset_config ]
@@ -1134,10 +1141,10 @@ async def create_event(
11341141            )
11351142
11361143        creation_content .update ({"creator" : creator_id })
1137-         creation_event , creation_context  =  await  create_event (
1144+         creation_event , unpersisted_creation_context  =  await  create_event (
11381145            EventTypes .Create , creation_content , False 
11391146        )
1140- 
1147+          creation_context   =   await   unpersisted_creation_context . persist ( creation_event ) 
11411148        logger .debug ("Sending %s in new room" , EventTypes .Member )
11421149        ev  =  await  self .event_creation_handler .handle_new_client_event (
11431150            requester = creator ,
@@ -1181,7 +1188,6 @@ async def create_event(
11811188            power_event , power_context  =  await  create_event (
11821189                EventTypes .PowerLevels , pl_content , True 
11831190            )
1184-             current_state_group  =  power_context ._state_group 
11851191            events_to_send .append ((power_event , power_context ))
11861192        else :
11871193            power_level_content : JsonDict  =  {
@@ -1230,14 +1236,12 @@ async def create_event(
12301236                power_level_content ,
12311237                True ,
12321238            )
1233-             current_state_group  =  pl_context ._state_group 
12341239            events_to_send .append ((pl_event , pl_context ))
12351240
12361241        if  room_alias  and  (EventTypes .CanonicalAlias , "" ) not  in   initial_state :
12371242            room_alias_event , room_alias_context  =  await  create_event (
12381243                EventTypes .CanonicalAlias , {"alias" : room_alias .to_string ()}, True 
12391244            )
1240-             current_state_group  =  room_alias_context ._state_group 
12411245            events_to_send .append ((room_alias_event , room_alias_context ))
12421246
12431247        if  (EventTypes .JoinRules , "" ) not  in   initial_state :
@@ -1246,7 +1250,6 @@ async def create_event(
12461250                {"join_rule" : config ["join_rules" ]},
12471251                True ,
12481252            )
1249-             current_state_group  =  join_rules_context ._state_group 
12501253            events_to_send .append ((join_rules_event , join_rules_context ))
12511254
12521255        if  (EventTypes .RoomHistoryVisibility , "" ) not  in   initial_state :
@@ -1255,7 +1258,6 @@ async def create_event(
12551258                {"history_visibility" : config ["history_visibility" ]},
12561259                True ,
12571260            )
1258-             current_state_group  =  visibility_context ._state_group 
12591261            events_to_send .append ((visibility_event , visibility_context ))
12601262
12611263        if  config ["guest_can_join" ]:
@@ -1265,14 +1267,12 @@ async def create_event(
12651267                    {EventContentFields .GUEST_ACCESS : GuestAccess .CAN_JOIN },
12661268                    True ,
12671269                )
1268-                 current_state_group  =  guest_access_context ._state_group 
12691270                events_to_send .append ((guest_access_event , guest_access_context ))
12701271
12711272        for  (etype , state_key ), content  in  initial_state .items ():
12721273            event , context  =  await  create_event (
12731274                etype , content , True , state_key = state_key 
12741275            )
1275-             current_state_group  =  context ._state_group 
12761276            events_to_send .append ((event , context ))
12771277
12781278        if  config ["encrypted" ]:
@@ -1284,9 +1284,16 @@ async def create_event(
12841284            )
12851285            events_to_send .append ((encryption_event , encryption_context ))
12861286
1287+         datastore  =  self .hs .get_datastores ().state 
1288+         events_and_context  =  (
1289+             await  UnpersistedEventContext .batch_persist_unpersisted_contexts (
1290+                 events_to_send , room_id , current_state_group , datastore 
1291+             )
1292+         )
1293+ 
12871294        last_event  =  await  self .event_creation_handler .handle_new_client_event (
12881295            creator ,
1289-             events_to_send ,
1296+             events_and_context ,
12901297            ignore_shadow_ban = True ,
12911298            ratelimit = False ,
12921299        )
0 commit comments