BUGS: new easy item about release page
[qa/debsources.git] / BUGS
1 #    -*- mode: org -*-
2
3 * TODO [#A] [0/2] new stats happy                           :web:stats:infra:
4 ** TODO postgres db size
5 ** TODO number of binary packages
6    depends: "inject binary<->source mappings in DB"
7
8 * TODO [#B] [0/3] database schema refactoring          :model:refactoring:cb:
9 ** TODO merge package and version into one table
10 ** TODO (un)distinguish Source and Binary packages where it is necessary
11 ** TODO  uniform reference to version_id
12    currently it's sometime version_id, other sourceversion_id
13
14 * TODO [#B] file-level deduplication, using checksums                 :infra:
15   depends (to be done properly) on "database schema refactoring"
16
17 * TODO inject binary<->source mappings in DB                       :infra:db:
18
19 * TODO [0/2] multiple archive support                                 :infra:
20   to do so, we need to do a separate debmirror run, as the security archive is
21   not hosted on the regular mirror network
22 ** TODO add debian-security
23 ** TODO add (some of) archive.debian.org releases
24    these are now currently mirrored on tytso:/srv/debian-archive
25
26 * TODO stats: injection of arbitrary data point                 :infra:stats:
27   e.g. to inject sloccount of past releases
28
29 * TODO stats: add totals (i.e. non per-suite)                :web:stats:easy:
30   to all tables listed at http://sources.debian.net/stats/
31
32 * TODO stats: make pie charts more readable     :infra:stats:matplotlib:easy:
33   e.g. by /not/ listing languages below a given thresholds, and aggregating
34   them into a "other" pseudo-language
35
36 * TODO stats: make trend charts more readable   :infra:stats:matplotlib:easy:
37   e.g. avoid overlapping labels, remove/customize + delta on Y axes, etc.
38
39 * TODO infobox: add ctags count                            :web:easy:infobox:
40
41 * TODO release pages: add version number and date          :web:easy:release:
42   which are now available in the suites table
43
44 * TODO "update statistics" stage is too slow               :infra:stats:perf:
45   Currently, it takes about 12 minutes on tytso. It can be optimized by
46   avoiding redoing statistic queries for each live suites (currently: 9), where
47   each query does a sequential scan (due to count(*), despite "index mostly
48   scan"). Instead, we can do GROUP BY queries, taking at once stats for all
49   suites. Proof of concept and benchmarks available in
50   doc/update-stats-query.bench.sql
51
52 * TODO check-in derivatives from the census               :infra:derivatives:
53
54 * TODO mention suite(s) when listing versions           :web:navigation:easy:
55   e.g. when visiting http://sources.debian.net/src/linux, one should see which
56   version is in which suite. Note that one version might be in multiple suites.
57
58 * TODO suite-based navigation                           :web:navigation:easy:
59   add the ability to browse available packages per suite, e.g. with URLs like
60   http://sources.debian.net/suite/jessie/prefix/d/
61
62 * TODO file name search                                       :web:search:db:
63 ** benchmark
64    too slow without decent index:
65      debsources=> select count(*) from files where path like '%stdio%';
66      count
67     -------
68       9643
69     (1 row)
70
71     Time: 7736,861 ms
72
73    but OK with trigram indexing:
74
75     debsources=> \d ix_files_path_trgm
76           Index "public.ix_files_path_trgm"
77      Column |  Type   |          Definition
78     --------+---------+------------------------------
79      encode | integer | encode(path, 'escape'::text)
80     gin, for table "public.files"
81
82     debsources=> select count(*) from files where encode(path, 'escape') like
83   '%stdio%';
84      count
85     -------
86       9643
87     (1 row)
88
89     Time: 77,558 ms
90
91   the above need CREATE EXTENSION 'trgm';
92
93 * TODO update-debsources --trigger should skip update stages          :infra:
94   At the very least it should skip: update statistics, update charts, update
95   suites mappings. Should it become a separate tool? Or should we expose on the
96   cmdline the support to select individual update stages? (see updater.py)
97
98 * TODO missing test: `/api/checksum/foo/`                 :web:api:test:easy:
99
100 * TODO suite test data: differentiate sid and jessie                   :test:
101   Currently, the set of packages in sid and jessie are exactly the same. Add
102   one or more packages which is in sid but not in jessie.
103
104 * TODO tarball-in-tarball                                         :infra:web:
105   Explode nested tarballs, partly for some packaging habits still present in
106   the archive (although they should die a horrible death), more importantly due
107   to upstream shipping tarballs.
108   
109   From #debian-qa:
110   > 04:43 < pabs> zack: well apart from tarball-in-tarball some upstreams ship
111   >               tarballs/zip files
112   > 04:49 < pabs> zack: apt-file counts 2022 .zip files and 6892 .tar* files,
113   >               242 .tgz, 22 .tbz* and 7 txz files in source packages
114   
115 ** tentative solution
116 *** web: discriminate on trailing slash
117     - /foo/bar/baz.tar.gz     -> download the tarball
118     - /foo/bar/baz.tar.gz/qux -> navigate in it
119 *** infra: not clear
120     We need some FS attribute to avoid clashes tar-vs-extraction-dir and
121     minimize the risks of collisions. Could be some highly unlikely suffix (but
122     then it will need to be excluded via apache navigation from /data/). Or
123     some metadata via xattr. Or a separate hierarchy for extracted tarballs.
124
125 * TODO popup messages between lines instead of on the right       :web:popup:
126   - rationale #1: popups are invisible for very long source code lines
127     e.g.: http://sources.debian.net/src/vim/2:7.3.547-7/runtime/syntax/sicad.vim?hl=133&msg=133%3Atest%3Atest#L133
128   - rationale #2: it is the only sane way to show multiple pop-ups avoding
129     they clash with one another
130
131 * TODO multiple popup messages                                    :web:popup:
132   to be able to show multiple error( location)s on the same source file
133
134 * TODO qualified ctags                                   :plugin:ctags:infra:
135   Add --extra=+q to ctags invocation. "However, that this could potentially
136   more than double the size of the tag file". Bug report by Olly Betts
137   on #debian-devel.
138 ** benchmarks
139 *** computation time is ~10-15% slower with +q
140 *** size
141     - libreoffice (C++)
142       zack@tytso:~/ctags-bench/libreoffice-4.1.5$ wc ../libreoffice*ctags
143       561396   3872260  61123731 ../libreoffice-4.1.5.ctags
144       972942   6799455 117133590 ../libreoffice-4.1.5.extra+q.ctags
145     - chromium-browser (C/C++)
146       zack@tytso:~/ctags-bench/chromium-browser-32.0.1700.123$ wc ../chromium-browser*ctags
147       1618199  10931585 205005488 ../chromium-browser-32.0.1700.123.ctags
148       2472627  17064351 342772532 ../chromium-browser-32.0.1700.123.extra+q.ctags
149     - linux (C)
150       zack@tytso:~/ctags-bench/linux-3.12.9$ wc ../linux*ctags
151       2146431  14340875 208057034 ../linux-3.12.9.ctags
152       2610525  17780208 269391932 ../linux-3.12.9.extra+q.ctags
153 *** bottom line
154     it's doable, but will need to rerun all ctags indexing
155
156 * TODO debian cross reference (lxr.debian.net)                    :web:ctags:
157   A-la http://lxr.linux.no/ . Suggested by Pierre Habouzit. Main problem is of
158   scope, cross-ref is mostly reasonable within the same package; /possibly/
159   reasonable between dependent packages; largely unresonable among unrelated
160   packages. (Not to mention the risk of cross-referincing across different
161   languages; although we should have the info to avoid that...)
162
163 * TODO highlight #Lxxx lines by default              :web:ui:javascript:easy:
164   On Thu, Jun 13, 2013 at 12:19:58AM +0200, Joachim Breitner wrote:
165   > An URL like
166   > http://sources.debian.net/src/cairo/1.12.14-4/boilerplate/cairo-boilerplate-xcb.c#L395
167   > should highlight that line. And ideally put it in the middle of the
168   > screen, instead of the top (this might require some JS fiddling).
169
170 * TODO allow symlink within same package/version               :web:security:
171   currently /all/ symlinks are forbidden for security reasons
172
173 * TODO .pc/ exclusion should become a configuration entry      :web:browsing:
174   ..in a more general configuration variable in etc/webconfig.py. Similar to
175   HIGHLIGHT_CLASSES, although we probably don't need regex for exclusions. See
176   http://anonscm.debian.org/gitweb/?p=qa/debsources.git;a=blob;f=web/flask/app/models_app.py;hb=HEAD#l166
177
178 * TODO package debsources with python distribute              :web:packaging:
179   it will simple things like imports and the deployment would be easier
180
181 * TODO make web UI parts conditional on plugin enablement         :infra:web:
182
183 * TODO shutter effect                                       :web:hilight:css:
184   When we highlight a line, we have to use a display:inline tag (whose
185   rendering isn't cool, because an highlighted block doesn't have the
186   same width verywhere). With a display:blog tag, newlines are added
187   by the browser/highlight.js (?), because tags conflicts with
188   highlight.js tags (when a hl.js lexem is multiline).
189   Try to highlight lines 3-4 of this to see the bug:
190
191   def hello():
192      """aaa
193      aaa
194      """ zzz = 3
195
196   Edit: the browser close tags automatically, and since our tags
197   aren't correct (ie
198   <span class="string"><div class="highlight">foo</span></div>
199   ), closing display:block tags are inserted.
200
201  Debugging: maybe with inline-block and other css tricks
202
203 * TODO use relative paths in sources.txt             :infra:refactoring:easy:
204   - 4th field should be relative to conf['mirror_dir']
205   - 5th field should be relative to conf['sources_dir']
206   see test_updater.py for reference
207
208 * TODO migrate to sources.debian.org                              :infra:dsa:
209   conversation started by Zack with DSA
210   Message-ID: <20131229152159.GA8400@upsilon.cc>
211
212 * TODO add binary->source redirection map                         :infra:web:
213   Idea: http://sources.d.n/src/FOO -> http://sources.d.n/src/MAP[FOO], as long
214   as FOO _does not exists_ as a source package.  Feature suggested in response
215   to Selim T. Erdogan, Message-ID: <20130712112459.GA3156@cs.utexas.edu>
216 ** depends: "inject binary<->source mappings in DB"
217
218 * TODO /latest redirection for /data URLs                      :infra:apache:
219   [ bug report from Simon Paillard, Message-Id: <20130907214628.GY17455@mraw.org> ]
220   to implement this we need to generate batchly redirection maps (as we did in
221   the past) and configura Apache to use them, as /data is served directly by
222   Apache
223
224 * TODO bulk ctags insertion traceback           :ctags:bulk:traceback:ATTACH:
225   :PROPERTIES:
226   :Attachments: 1.3.1-4.ctags
227   :ID:       b9a3371f-6e2d-4e60-82e4-9d7c7543ba86
228   :END:
229     Traceback (most recent call last):
230       File "bin/bulk-insert-ctags", line 94, in <module>
231         main(conf, ctagsfile=args.file)
232       File "bin/bulk-insert-ctags", line 73, in main
233         insert_ctags(conn, ctagsfile)
234       File "bin/bulk-insert-ctags", line 65, in insert_ctags
235         conn.execute(INSERT_CTAGS_Q, ctags)
236       File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1449, in execute
237         params)
238       File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1584, in _execute_clauseelement
239         compiled_sql, distilled_params
240       File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1698, in _execute_context
241         context)
242       File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1680, in _execute_context
243         context)
244       File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 328, in do_executemany
245         cursor.executemany(statement, parameters)
246     sqlalchemy.exc.ProgrammingError: (ProgrammingError) can't adapt type 'RowProxy' '\n    INSERT INTO ctags (version_id, tag, path, line, kind, language)\n    VALUES (%(version_id)s, %(tag)s, %(path)s, %(line)s, %(kind)s, %(language)s)\n    ' ({'kind': 'f', 'language': 'sh', 'version_id': (38474,), 'tag': u'is_absolute', 'path': <psycopg2._psycopg.Binary object at 0x2800248>, 'line': 51}, {'kind': 'f', 'language': 'sh', 'version_id': (38474,), 'tag': u'absolute_or_prefix', 'path': <psycopg2._psycopg.Binary object at 0x2800200>, 'line': 57}, {'kind': 'f', 'language': 'sh', 'version_id': (38474,), 'tag': u'showhelp', 'path': <psycopg2._psycopg.Binary object at 0x2800290>, 'line': 65}, {'kind': 'f', 'language': 'sh', 'version_id': (38474,), 'tag': u'yorn', 'path': <psycopg2._psycopg.Binary object at 0x2800320>, 'line': 202}, {'kind': 'f', 'language': 'sh', 'version_id': (38474,), 'tag': u'nory', 'path': <psycopg2._psycopg.Binary object at 0x2800368>, 'line': 207}, {'kind': 'f', 'language': 'sh', 'version_id': (38474,), 'tag': u'message', 'path': <psycopg2._psycopg.Binary object at 0x28003b0>, 'line': 213}, {'kind': 'f', 'language': 'sh', 'version_id': (38474,), 'tag': u'info', 'path': <psycopg2._psycopg.Binary object at 0x28003f8>, 'line': 214}, {'kind': 'f', 'language': 'sh', 'version_id': (38474,), 'tag': u'warning', 'path': <psycopg2._psycopg.Binary object at 0x2800440>, 'line': 215}  ... displaying 10 of 436 total bound parameter sets ...  {'kind': 'f', 'language': 'sh', 'version_id': (38474,), 'tag': u'duplex', 'path': <psycopg2._psycopg.Binary object at 0x2a11e18>, 'line': 734}, {'kind': 'f', 'language': 'sh', 'version_id': (38474,), 'tag': u'viewps', 'path': <psycopg2._psycopg.Binary object at 0x2a11e60>, 'line': 757})
247
248   test recipe (bulk):
249   - find /srv/debsources/sources -mindepth 4 -maxdepth 4 -name '*.ctags > ctags.txt
250   - while read f ; do bin/bulk-insert-ctags -c etc/config.batch.ini $f ; done < ctags.txt
251
252   test recipe (single file):
253   - bin/bulk-insert-ctags -c etc/config.batch.ini 1.3.1-4.ctags
254     (see attachment)
255
256 * TODO package iausofa-c in wrong section               :bug:sourcesdn:infra:
257   it is reported to be in main, but files are looked for in non-free
258
259   e.g. traceback during last sloccount recalculation
260
261   updater:ERROR trigger failure on iausofa-c/2013.12.02-1
262   Traceback (most recent call last):
263     File "/space/debsources/python/updater.py", line 182, in extract_package
264       triggers=conf['force_triggers'], dry=conf['dry_run'])
265     File "/space/debsources/python/updater.py", line 137, in notify_plugins
266       action(session, pkg, pkgdir, file_table)
267     File "/space/debsources/python/plugins/hook_sloccount.py", line 94, in add_package
268       slocs = parse_sloccount(slocfile)
269     File "/space/debsources/python/plugins/hook_sloccount.py", line 57, in parse_sloccount
270       with open(path) as sloccount:
271   IOError: [Errno 2] No such file or directory: u'/srv/debsources/sources/non-free/i/iausofa-c/2013.12.02-1.sloccount'
272
273   and the same for version
274   /srv/debsources/sources/non-free/i/iausofa-c/2013.12.02-1.sloccount
275
276   did the package change section and that causes problem?
277
278 * TODO move queries for the web app in a separate file      :web:refactoring:
279   SQLAlchemy queries in models.py should be in a new file,
280   e.g. webqueries.py.
281
282 * TODO Produce RDF meta-data interlinked with the PTS'              :rdf:web:
283   The idea would be to generate machine parseable meta-data, as RDF,
284   through content-negociation which would allow to interlink source
285   package descriptions with those generated by the PTS
286   -- obergix@debian.org
287
288 * TODO refactor app/views.py                                     :web:python:
289   The GeneralView object should be inheritated to PaginationView, in
290   order for all routes which use pagination (ctags, checksums, etc) to
291   automatically have these features. In this case, the json view is
292   not paginated but the html view is.
293
294 * TODO multiple ctags search                                        :web:sql:
295   A search which returns *files* (and not a line in a file), which
296   contain all searched ctags.
297   See TODO in python/models.py.