File tree Expand file tree Collapse file tree 1 file changed +36
-2
lines changed Expand file tree Collapse file tree 1 file changed +36
-2
lines changed Original file line number Diff line number Diff line change @@ -33,11 +33,45 @@ def retry
33
33
end
34
34
35
35
private
36
- BACKTRACE_LINES_LIMIT = 400
36
+ JSON_OVERHEAD = 256
37
+ DEFAULT_BACKTRACE_LINES_LIMIT = 400
37
38
38
39
def expand_error_details_from_exception
39
40
if exception
40
- self . error = { exception_class : exception . class . name , message : exception . message , backtrace : exception . backtrace . first ( BACKTRACE_LINES_LIMIT ) }
41
+ self . error = { exception_class : exception_class_name , message : exception_message , backtrace : exception_backtrace }
42
+ end
43
+ end
44
+
45
+ def exception_class_name
46
+ exception . class . name
47
+ end
48
+
49
+ def exception_message
50
+ exception . message
51
+ end
52
+
53
+ def exception_backtrace
54
+ if column = self . class . connection . schema_cache . columns_hash ( self . class . table_name ) [ "error" ]
55
+ limit = column . limit - exception_class_name . bytesize - exception_message . bytesize - JSON_OVERHEAD
56
+
57
+ if exception . backtrace . to_json . bytesize <= limit
58
+ exception . backtrace
59
+ else
60
+ truncate_backtrace ( exception . backtrace , limit )
61
+ end
62
+ else
63
+ exception . backtrace . take ( DEFAULT_BACKTRACE_LINES_LIMIT )
64
+ end
65
+ end
66
+
67
+ def truncate_backtrace ( lines , limit )
68
+ [ ] . tap do |truncated_backtrace |
69
+ lines . each do |line |
70
+ if ( truncated_backtrace << line ) . to_json . bytesize > limit
71
+ truncated_backtrace . pop
72
+ break
73
+ end
74
+ end
41
75
end
42
76
end
43
77
end
You can’t perform that action at this time.
0 commit comments