@@ -987,122 +987,168 @@ func (c *ClickHouseConnector) GetBlockHeadersDescending(chainId *big.Int, from *
987
987
return blockHeaders , nil
988
988
}
989
989
990
- func (c * ClickHouseConnector ) DeleteBlockData (chainId * big.Int , blockNumbers []* big.Int ) error {
990
+ func (c * ClickHouseConnector ) DeleteBlockData (chainId * big.Int , blockNumbers []* big.Int ) ([]common. BlockData , error ) {
991
991
var deleteErr error
992
992
var deleteErrMutex sync.Mutex
993
993
var wg sync.WaitGroup
994
994
wg .Add (4 )
995
995
996
+ // Create a map to store block data that will be deleted
997
+ deletedBlockDataByNumber := make (map [* big.Int ]common.BlockData )
996
998
go func () {
997
999
defer wg .Done ()
998
- if err := c .deleteBlocks (chainId , blockNumbers ); err != nil {
1000
+ deletedBlocks , err := c .deleteBlocks (chainId , blockNumbers )
1001
+ if err != nil {
999
1002
deleteErrMutex .Lock ()
1000
1003
deleteErr = fmt .Errorf ("error deleting blocks: %v" , err )
1001
1004
deleteErrMutex .Unlock ()
1002
1005
}
1006
+ for _ , block := range deletedBlocks {
1007
+ data := deletedBlockDataByNumber [block .Number ]
1008
+ data .Block = block
1009
+ deletedBlockDataByNumber [block .Number ] = data
1010
+ }
1003
1011
}()
1004
1012
1005
1013
go func () {
1006
1014
defer wg .Done ()
1007
- if err := c .deleteLogs (chainId , blockNumbers ); err != nil {
1015
+ deletedLogs , err := c .deleteLogs (chainId , blockNumbers )
1016
+ if err != nil {
1008
1017
deleteErrMutex .Lock ()
1009
1018
deleteErr = fmt .Errorf ("error deleting logs: %v" , err )
1010
1019
deleteErrMutex .Unlock ()
1011
1020
}
1021
+ for _ , log := range deletedLogs {
1022
+ data := deletedBlockDataByNumber [log .BlockNumber ]
1023
+ data .Logs = append (data .Logs , log )
1024
+ deletedBlockDataByNumber [log .BlockNumber ] = data
1025
+ }
1012
1026
}()
1013
1027
1014
1028
go func () {
1015
1029
defer wg .Done ()
1016
- if err := c .deleteTransactions (chainId , blockNumbers ); err != nil {
1030
+ deletedTransactions , err := c .deleteTransactions (chainId , blockNumbers )
1031
+ if err != nil {
1017
1032
deleteErrMutex .Lock ()
1018
1033
deleteErr = fmt .Errorf ("error deleting transactions: %v" , err )
1019
1034
deleteErrMutex .Unlock ()
1020
1035
}
1036
+ for _ , tx := range deletedTransactions {
1037
+ data := deletedBlockDataByNumber [tx .BlockNumber ]
1038
+ data .Transactions = append (data .Transactions , tx )
1039
+ deletedBlockDataByNumber [tx .BlockNumber ] = data
1040
+ }
1021
1041
}()
1022
1042
1023
1043
go func () {
1024
1044
defer wg .Done ()
1025
- if err := c .deleteTraces (chainId , blockNumbers ); err != nil {
1045
+ deletedTraces , err := c .deleteTraces (chainId , blockNumbers )
1046
+ if err != nil {
1026
1047
deleteErrMutex .Lock ()
1027
1048
deleteErr = fmt .Errorf ("error deleting traces: %v" , err )
1028
1049
deleteErrMutex .Unlock ()
1029
1050
}
1051
+ for _ , trace := range deletedTraces {
1052
+ data := deletedBlockDataByNumber [trace .BlockNumber ]
1053
+ data .Traces = append (data .Traces , trace )
1054
+ deletedBlockDataByNumber [trace .BlockNumber ] = data
1055
+ }
1030
1056
}()
1031
1057
1032
1058
wg .Wait ()
1033
1059
1034
1060
if deleteErr != nil {
1035
- return deleteErr
1061
+ return nil , deleteErr
1036
1062
}
1037
- return nil
1063
+ deletedBlockData := make ([]common.BlockData , 0 , len (deletedBlockDataByNumber ))
1064
+ for _ , data := range deletedBlockDataByNumber {
1065
+ deletedBlockData = append (deletedBlockData , data )
1066
+ }
1067
+ return deletedBlockData , nil
1038
1068
}
1039
1069
1040
- func (c * ClickHouseConnector ) deleteBlocks (chainId * big.Int , blockNumbers []* big.Int ) error {
1070
+ func (c * ClickHouseConnector ) deleteBlocks (chainId * big.Int , blockNumbers []* big.Int ) ([]common. Block , error ) {
1041
1071
blocksQueryResult , err := c .GetBlocks (QueryFilter {
1042
1072
ChainId : chainId ,
1043
1073
BlockNumbers : blockNumbers ,
1044
1074
ForceConsistentData : true ,
1045
1075
}, "*" )
1046
1076
if err != nil {
1047
- return err
1077
+ return nil , err
1048
1078
}
1049
1079
if len (blocksQueryResult .Data ) == 0 {
1050
- return nil // No blocks to delete
1080
+ return nil , nil // No blocks to delete
1051
1081
}
1052
- return c .insertBlocks (blocksQueryResult .Data , InsertOptions {
1082
+ err = c .insertBlocks (blocksQueryResult .Data , InsertOptions {
1053
1083
AsDeleted : true ,
1054
1084
})
1085
+ if err != nil {
1086
+ return nil , err
1087
+ }
1088
+ return blocksQueryResult .Data , nil
1055
1089
}
1056
1090
1057
- func (c * ClickHouseConnector ) deleteLogs (chainId * big.Int , blockNumbers []* big.Int ) error {
1091
+ func (c * ClickHouseConnector ) deleteLogs (chainId * big.Int , blockNumbers []* big.Int ) ([]common. Log , error ) {
1058
1092
logsQueryResult , err := c .GetLogs (QueryFilter {
1059
1093
ChainId : chainId ,
1060
1094
BlockNumbers : blockNumbers ,
1061
1095
ForceConsistentData : true ,
1062
1096
}, "*" )
1063
1097
if err != nil {
1064
- return err
1098
+ return nil , err
1065
1099
}
1066
1100
if len (logsQueryResult .Data ) == 0 {
1067
- return nil // No logs to delete
1101
+ return nil , nil // No logs to delete
1068
1102
}
1069
- return c .insertLogs (logsQueryResult .Data , InsertOptions {
1103
+ err = c .insertLogs (logsQueryResult .Data , InsertOptions {
1070
1104
AsDeleted : true ,
1071
1105
})
1106
+ if err != nil {
1107
+ return nil , err
1108
+ }
1109
+ return logsQueryResult .Data , nil
1072
1110
}
1073
1111
1074
- func (c * ClickHouseConnector ) deleteTransactions (chainId * big.Int , blockNumbers []* big.Int ) error {
1112
+ func (c * ClickHouseConnector ) deleteTransactions (chainId * big.Int , blockNumbers []* big.Int ) ([]common. Transaction , error ) {
1075
1113
txsQueryResult , err := c .GetTransactions (QueryFilter {
1076
1114
ChainId : chainId ,
1077
1115
BlockNumbers : blockNumbers ,
1078
1116
ForceConsistentData : true ,
1079
1117
}, "*" )
1080
1118
if err != nil {
1081
- return err
1119
+ return nil , err
1082
1120
}
1083
1121
if len (txsQueryResult .Data ) == 0 {
1084
- return nil // No transactions to delete
1122
+ return nil , nil // No transactions to delete
1085
1123
}
1086
- return c .insertTransactions (txsQueryResult .Data , InsertOptions {
1124
+ err = c .insertTransactions (txsQueryResult .Data , InsertOptions {
1087
1125
AsDeleted : true ,
1088
1126
})
1127
+ if err != nil {
1128
+ return nil , err
1129
+ }
1130
+ return txsQueryResult .Data , nil
1089
1131
}
1090
1132
1091
- func (c * ClickHouseConnector ) deleteTraces (chainId * big.Int , blockNumbers []* big.Int ) error {
1133
+ func (c * ClickHouseConnector ) deleteTraces (chainId * big.Int , blockNumbers []* big.Int ) ([]common. Trace , error ) {
1092
1134
tracesQueryResult , err := c .GetTraces (QueryFilter {
1093
1135
ChainId : chainId ,
1094
1136
BlockNumbers : blockNumbers ,
1095
1137
ForceConsistentData : true ,
1096
1138
}, "*" )
1097
1139
if err != nil {
1098
- return err
1140
+ return nil , err
1099
1141
}
1100
1142
if len (tracesQueryResult .Data ) == 0 {
1101
- return nil // No traces to delete
1143
+ return nil , nil // No traces to delete
1102
1144
}
1103
- return c .insertTraces (tracesQueryResult .Data , InsertOptions {
1145
+ err = c .insertTraces (tracesQueryResult .Data , InsertOptions {
1104
1146
AsDeleted : true ,
1105
1147
})
1148
+ if err != nil {
1149
+ return nil , err
1150
+ }
1151
+ return tracesQueryResult .Data , nil
1106
1152
}
1107
1153
1108
1154
// TODO make this atomic
0 commit comments