Merge lp:~hrvojem/percona-xtradb-cluster/rn-5.5.23 into lp:~percona-core/percona-xtradb-cluster/5.5.23
- rn-5.5.23
- Merge into 5.5.23
Proposed by
Hrvoje Matijakovic
Status: | Merged |
---|---|
Merge reported by: | Hrvoje Matijakovic |
Merged at revision: | not available |
Proposed branch: | lp:~hrvojem/percona-xtradb-cluster/rn-5.5.23 |
Merge into: | lp:~percona-core/percona-xtradb-cluster/5.5.23 |
Diff against target: |
491 lines (+425/-4) 5 files modified
doc/source/conf.py (+6/-2) doc/source/ext/psdom.py (+387/-0) doc/source/index.rst (+3/-2) doc/source/release-notes/Percona-XtraDB-Cluster-5.5.23.rst (+19/-0) doc/source/release-notes/release-notes_index.rst (+10/-0) |
To merge this branch: | bzr merge lp:~hrvojem/percona-xtradb-cluster/rn-5.5.23 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Percona core | Pending | ||
Review via email: mp+106017@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'doc/source/conf.py' |
2 | --- doc/source/conf.py 2012-05-02 15:33:18 +0000 |
3 | +++ doc/source/conf.py 2012-05-16 16:48:20 +0000 |
4 | @@ -23,12 +23,14 @@ |
5 | # If your documentation needs a minimal Sphinx version, state it here. |
6 | #needs_sphinx = '1.0' |
7 | |
8 | +sys.path.append(os.path.abspath('ext')) |
9 | + |
10 | # Add any Sphinx extension module names here, as strings. They can be extensions |
11 | # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. |
12 | |
13 | extensions = ['sphinx.ext.intersphinx', 'sphinx.ext.todo', |
14 | 'sphinx.ext.coverage', 'sphinx.ext.ifconfig', |
15 | - 'sphinx.ext.extlinks'] |
16 | + 'sphinx.ext.extlinks', 'psdom'] |
17 | |
18 | # Add any paths that contain templates here, relative to this directory. |
19 | templates_path = ['_templates'] |
20 | @@ -51,7 +53,7 @@ |
21 | # built documents. |
22 | # |
23 | # The short X.Y version. |
24 | -version = '5.5.20' |
25 | +version = '5.5.23' |
26 | # The full version, including alpha/beta/rc tags. |
27 | release = '5.5.23-23.4' |
28 | |
29 | @@ -72,6 +74,8 @@ |
30 | # The reST default role (used for this markup: `text`) to use for all documents. |
31 | #default_role = None |
32 | |
33 | +primary_domain = 'psdom' |
34 | + |
35 | # If true, '()' will be appended to :func: etc. cross-reference text. |
36 | #add_function_parentheses = True |
37 | |
38 | |
39 | === added directory 'doc/source/ext' |
40 | === added file 'doc/source/ext/psdom.py' |
41 | --- doc/source/ext/psdom.py 1970-01-01 00:00:00 +0000 |
42 | +++ doc/source/ext/psdom.py 2012-05-16 16:48:20 +0000 |
43 | @@ -0,0 +1,387 @@ |
44 | +# -*- coding: utf-8 -*- |
45 | +""" |
46 | + The Percona Server domain. |
47 | + |
48 | + :copyright: Copyright 2011 by Percona Inc. |
49 | + :license: GPL3, see LICENSE for details. |
50 | +""" |
51 | + |
52 | +import re |
53 | +import string |
54 | + |
55 | +from docutils import nodes |
56 | +from docutils.parsers.rst import directives |
57 | + |
58 | +from sphinx import addnodes |
59 | +from sphinx.roles import XRefRole |
60 | +from sphinx.locale import l_, _ |
61 | +from sphinx.domains import Domain, ObjType, Index |
62 | +from sphinx.directives import ObjectDescription |
63 | +from sphinx.util.nodes import make_refnode |
64 | +from sphinx.util.compat import Directive |
65 | +from sphinx.util.docfields import Field, GroupedField, TypedField |
66 | + |
67 | + |
68 | +# RE to split at word boundaries |
69 | +wsplit_re = re.compile(r'\W+') |
70 | +tern_re = re.compile(r'.*(\.|\:\:).*(\.).*') |
71 | + |
72 | +class PSschemaObject(ObjectDescription): |
73 | + """ |
74 | + Description of a general PS object. |
75 | + """ |
76 | + option_spec = { |
77 | + 'noindex': directives.flag, |
78 | + } |
79 | + |
80 | + |
81 | + def handle_signature(self, sig, signode): |
82 | + """Transform a PSschema signature into RST nodes.""" |
83 | + # first try the function pointer signature regex, it's more specific |
84 | + |
85 | + name = sig |
86 | + |
87 | + signode += addnodes.desc_name('', '') |
88 | + |
89 | + objectname = self.env.temp_data.get('psdom:object') |
90 | + ot = self.objtype |
91 | + ws = wsplit_re.split(sig) |
92 | + |
93 | + if ot == 'db': |
94 | + sig_prefix = "database " |
95 | + else: |
96 | + sig_prefix = ot + " " |
97 | + |
98 | + signode += addnodes.desc_annotation(sig_prefix, sig_prefix) |
99 | + |
100 | + # for part in filter(None, ws): |
101 | + # tnode = nodes.Text(part, part) |
102 | + # pnode = addnodes.pending_xref( |
103 | + # '', refdomain='psdom', reftype='type', reftarget=part, |
104 | + # modname=None, classname=None) |
105 | + # pnode = tnode |
106 | + # signode += pnode |
107 | + |
108 | + if len(ws) > 2: |
109 | + dbname, tablename, columnname = ws |
110 | + name = columnname |
111 | + fullname = tablename + "." + columnname |
112 | + elif len(ws) == 2: |
113 | + if ot == 'table': |
114 | + dbname, tablename = ws |
115 | + dbname += "." |
116 | + name = tablename |
117 | + signode['table'] = tablename |
118 | + signode += addnodes.desc_addname(dbname, dbname) |
119 | + signode += addnodes.desc_name(tablename, tablename) |
120 | + # fullname = dbname + "." + tablename |
121 | + fullname = tablename |
122 | + if ot == 'column': |
123 | + tablename, columnname = ws |
124 | + tablename += " " |
125 | + signode += addnodes.desc_addname(tablename, tablename) |
126 | + signode += addnodes.desc_name(columnname, columnname) |
127 | + signode['table'] = tablename |
128 | + fullname = tablename + "." + columnname |
129 | + else: |
130 | + if ot == 'table': |
131 | + tablename = ws[0] |
132 | + signode['table'] = tablename |
133 | + dbname = self.options.get( |
134 | + 'db', self.env.temp_data.get('psdom:db')) |
135 | + dbname += "." |
136 | + self.env.temp_data['psdom:table'] = tablename |
137 | + signode += addnodes.desc_addname(dbname, dbname) |
138 | + signode += addnodes.desc_name(tablename, tablename) |
139 | + signode['table'] = tablename |
140 | + if ot == 'column': |
141 | + columnname = ws[0] |
142 | + signode['column'] = columnname |
143 | + tablename = self.options.get( |
144 | + 'table', self.env.temp_data.get('psdom:table')) |
145 | + tablename += "." |
146 | + signode += addnodes.desc_addname(tablename, tablename) |
147 | + signode += addnodes.desc_name(columnname, columnname) |
148 | + if ot == 'db': |
149 | + dbname = ws[0] |
150 | + signode['db'] = dbname |
151 | + name = dbname |
152 | + self.env.temp_data['psdom:db'] = dbname |
153 | + signode += addnodes.desc_name(dbname, dbname) |
154 | + fullname = ws[0] |
155 | + |
156 | + signode['fullname'] = fullname |
157 | + |
158 | + return fullname |
159 | + |
160 | + def get_index_text(self, name): |
161 | + if self.objtype == 'db': |
162 | + return _('%s (database)') % name |
163 | + elif self.objtype == 'table': |
164 | + return _('%s (table)') % name |
165 | + elif self.objtype == 'column': |
166 | + return _('%s (column)') % name |
167 | + else: |
168 | + return '' |
169 | + |
170 | + def add_target_and_index(self, name, sig, signode): |
171 | + # note target |
172 | + if name not in self.state.document.ids: |
173 | + signode['names'].append(name) |
174 | + signode['ids'].append(name) |
175 | + signode['first'] = (not self.names) |
176 | + self.state.document.note_explicit_target(signode) |
177 | + inv = self.env.domaindata['psdom']['objects'] |
178 | + if name in inv: |
179 | + self.env.warn( |
180 | + self.env.docname, |
181 | + 'duplicate PSschema object description of %s, ' % name + |
182 | + 'other instance in ' + self.env.doc2path(inv[name][0]), |
183 | + self.lineno) |
184 | + inv[name] = (self.env.docname, self.objtype) |
185 | + |
186 | + indextext = self.get_index_text(name) |
187 | + if indextext: |
188 | + self.indexnode['entries'].append(('single', indextext, name, '')) |
189 | + |
190 | + |
191 | +class PSconfigObject(ObjectDescription): |
192 | + """ |
193 | + Description of a general PS Config object. |
194 | + """ |
195 | + option_spec = { |
196 | + 'noindex': directives.flag, |
197 | + } |
198 | + |
199 | + def handle_signature(self, sig, signode): |
200 | + """Transform a PSconfig signature into RST nodes.""" |
201 | + # first try the function pointer signature regex, it's more specific |
202 | + |
203 | + name = sig |
204 | + ot = self.objtype |
205 | + |
206 | + sig_prefix = ot + " " |
207 | + signode += addnodes.desc_annotation(sig_prefix, sig_prefix) |
208 | + |
209 | + signode += addnodes.desc_name(name, name) |
210 | + signode['fullname'] = name |
211 | + |
212 | + return name |
213 | + |
214 | + def get_index_text(self, name): |
215 | + if self.objtype == 'option': |
216 | + return _('%s (option)') % name |
217 | + elif self.objtype == 'variable': |
218 | + return _('%s (variable)') % name |
219 | + else: |
220 | + return '' |
221 | + |
222 | + def add_target_and_index(self, name, sig, signode): |
223 | + # note target |
224 | + if name not in self.state.document.ids: |
225 | + signode['names'].append(name) |
226 | + signode['ids'].append(name) |
227 | + signode['first'] = (not self.names) |
228 | + self.state.document.note_explicit_target(signode) |
229 | + inv = self.env.domaindata['psdom']['objects'] |
230 | + if name in inv: |
231 | + self.env.warn( |
232 | + self.env.docname, |
233 | + 'duplicate PSconfig object description of %s, ' % name + |
234 | + 'other instance in ' + self.env.doc2path(inv[name][0]), |
235 | + self.lineno) |
236 | + inv[name] = (self.env.docname, self.objtype) |
237 | + |
238 | + indextext = self.get_index_text(name) |
239 | + if indextext: |
240 | + self.indexnode['entries'].append(('single', indextext, name, '')) |
241 | + |
242 | + |
243 | +class PSTable(PSschemaObject): |
244 | + |
245 | + doc_field_types = [ |
246 | + TypedField('column', label=l_('Columns'), rolename='obj', |
247 | + names=('col', 'column', 'cols'), |
248 | + typerolename='obj', typenames=('paramtype', 'type')), |
249 | + Field('inpatch', label=l_('Included in Patch'), has_arg=False, |
250 | + names=('inpatch')), |
251 | + TypedField('versioninfo', label=l_('Version Info'), rolename='obj', |
252 | + names=('version', 'versioninfo'), |
253 | + typerolename='obj', typenames=('paramtype', 'type')), |
254 | + ] |
255 | + |
256 | +class PSDatabase(PSschemaObject): |
257 | + |
258 | + doc_field_types = [ |
259 | + TypedField('tbl', label=l_('Tables'), |
260 | + names=('tbl', 'table',), |
261 | + typerolename='obj', typenames=('paramtype', 'type')), |
262 | + Field('engine', label=l_('Storage Engine'), has_arg=False, |
263 | + names=('engine')), |
264 | + Field('inpatch', label=l_('Included in Patch'), has_arg=False, |
265 | + names=('inpatch')), |
266 | + ] |
267 | + |
268 | +class PSColumn(PSschemaObject): |
269 | + |
270 | + doc_field_types = [ |
271 | + TypedField('coltype', label=l_('Type'), rolename='obj', |
272 | + names=('coltype', 'type'), |
273 | + typerolename='obj', typenames=('paramtype', 'type')), |
274 | + Field('inpatch', label=l_('Included in Patch'), has_arg=False, |
275 | + names=('inpatch')), |
276 | + ] |
277 | + |
278 | +class PSVariable(PSconfigObject): |
279 | + |
280 | + doc_field_types = [ |
281 | + Field('scope', label=l_('Scope'), has_arg=False, |
282 | + names=('scope', 'varscope')), |
283 | + Field('cmdline', label=l_('Command Line'), has_arg=False, |
284 | + names=('cmdline', 'cline', 'cli')), |
285 | + Field('configfile', label=l_('Config File'), has_arg=False, |
286 | + names=('conffile', 'configfile', 'conf', 'cfile')), |
287 | + Field('dynamic', label=l_('Dynamic'), has_arg=False, |
288 | + names=('dynvar', 'dyn')), |
289 | + Field('vartype', label=l_('Variable Type'), has_arg=False, |
290 | + names=('vartype', 'vtype')), |
291 | + Field('default', label=l_('Default Value'), has_arg=False, |
292 | + names=('default', 'df')), |
293 | + Field('range', label=l_('Range'), has_arg=False, |
294 | + names=('range', 'range')), |
295 | + Field('allowed', label=l_('Allowed Values'), has_arg=False, |
296 | + names=('allowed', 'av')), |
297 | + Field('unit', label=l_('Units'), has_arg=False, |
298 | + names=('unit', 'un')), |
299 | + Field('inpatch', label=l_('Included in Patch'), has_arg=False, |
300 | + names=('inpatch')), |
301 | + TypedField('versioninfo', label=l_('Version Info'), rolename='obj', |
302 | + names=('version', 'versioninfo'), |
303 | + typerolename='obj', typenames=('paramtype', 'type')), |
304 | + ] |
305 | + |
306 | +class PSOption(PSconfigObject): |
307 | + pass |
308 | + |
309 | +class PSReleaseNotes(Directive): |
310 | + """ |
311 | + Directive to mark description of Release Notes. |
312 | + """ |
313 | + |
314 | + has_content = False |
315 | + required_arguments = 1 |
316 | + optional_arguments = 0 |
317 | + final_argument_whitespace = False |
318 | + option_spec = { |
319 | + 'platform': lambda x: x, |
320 | + 'noindex': directives.flag, |
321 | + } |
322 | + |
323 | + def run(self): |
324 | + env = self.state.document.settings.env |
325 | + rnname = self.arguments[0].strip() |
326 | + noindex = 'noindex' in self.options |
327 | + env.temp_data['psdome:rn'] = rnname |
328 | + ret = [] |
329 | + if not noindex: |
330 | + env.domaindata['psdom']['objects'][rnname] = \ |
331 | + (env.docname, self.options.get('platform', '')) |
332 | + # make a duplicate entry in 'objects' to facilitate searching for the |
333 | + # module in PythonDomain.find_obj() |
334 | + env.domaindata['psdom']['objects'][rnname] = (env.docname, 'rn') |
335 | + targetnode = nodes.target('', '', ids=['release-' + rnname]) |
336 | + self.state.document.note_explicit_target(targetnode) |
337 | + # the platform and synopsis aren't printed; in fact, they are only used |
338 | + # in the modindex currently |
339 | + ret.append(targetnode) |
340 | + indextext = _('%s (release notes)') % rnname |
341 | + inode = addnodes.index(entries=[('single', indextext, |
342 | + 'module-' + rnname, '')]) |
343 | + ret.append(inode) |
344 | + return ret |
345 | + |
346 | +class PSXRefRole(XRefRole): |
347 | + def process_link(self, env, refnode, has_explicit_title, title, target): |
348 | + if not has_explicit_title: |
349 | + target = target.lstrip('~') # only has a meaning for the title |
350 | + # if the first character is a tilde, don't display the module/class |
351 | + # parts of the contents |
352 | + if title[0:1] == '~': |
353 | + title = title[1:] |
354 | + dot = title.rfind('.') |
355 | + if dot != -1: |
356 | + title = title[dot+1:] |
357 | + return title, target |
358 | + |
359 | + |
360 | +class PerconaServerDomain(Domain): |
361 | + """Percona Server domain.""" |
362 | + name = 'psdom' |
363 | + label = 'Percona Server' |
364 | + object_types = { |
365 | + 'db': ObjType(l_('db'), 'db'), |
366 | + 'table': ObjType(l_('table'), 'table'), |
367 | + 'column': ObjType(l_('column'), 'column'), |
368 | + 'option': ObjType(l_('option'), 'option'), |
369 | + 'variable': ObjType(l_('variable'), 'data'), |
370 | + } |
371 | + |
372 | + directives = { |
373 | + 'db': PSDatabase, |
374 | + 'table': PSTable, |
375 | + 'column': PSColumn, |
376 | + 'option': PSVariable, |
377 | + 'variable': PSVariable, |
378 | + 'rn': PSReleaseNotes |
379 | + } |
380 | + roles = { |
381 | + 'db' : PSXRefRole(), |
382 | + 'table': PSXRefRole(), |
383 | + 'column': PSXRefRole(), |
384 | + 'option': PSXRefRole(), |
385 | + 'variable': PSXRefRole(), |
386 | + 'rn': PSXRefRole(), |
387 | + } |
388 | + initial_data = { |
389 | + 'objects': {}, # fullname -> docname, objtype |
390 | + } |
391 | + |
392 | + def clear_doc(self, docname): |
393 | + for fullname, (fn, _) in self.data['objects'].items(): |
394 | + if fn == docname: |
395 | + del self.data['objects'][fullname] |
396 | + |
397 | + def resolve_xref(self, env, fromdocname, builder, |
398 | + typ, target, node, contnode): |
399 | + # strip pointer asterisk |
400 | + target = target.rstrip(' *') |
401 | + if target not in self.data['objects']: |
402 | + return None |
403 | + obj = self.data['objects'][target] |
404 | + return make_refnode(builder, fromdocname, obj[0], target, |
405 | + contnode, target) |
406 | + |
407 | + def get_objects(self): |
408 | + for refname, (docname, type) in self.data['objects'].iteritems(): |
409 | + yield (refname, refname, type, docname, refname, 1) |
410 | + |
411 | + def find_obj(self, env, obj, name, typ, searchorder=0): |
412 | + if name[-2:] == '()': |
413 | + name = name[:-2] |
414 | + objects = self.data['objects'] |
415 | + newname = None |
416 | + if searchorder == 1: |
417 | + if obj and obj + '.' + name in objects: |
418 | + newname = obj + '.' + name |
419 | + else: |
420 | + newname = name |
421 | + else: |
422 | + if name in objects: |
423 | + newname = name |
424 | + elif obj and obj + '.' + name in objects: |
425 | + newname = obj + '.' + name |
426 | + return newname, objects.get(newname) |
427 | + |
428 | +def setup(app): |
429 | + app.add_config_value('databases', {}, 'env') |
430 | + app.add_domain(PerconaServerDomain) |
431 | |
432 | === modified file 'doc/source/index.rst' |
433 | --- doc/source/index.rst 2012-04-24 13:38:51 +0000 |
434 | +++ doc/source/index.rst 2012-05-16 16:48:20 +0000 |
435 | @@ -98,13 +98,14 @@ |
436 | `Galera Wiki <http://www.codership.com/wiki/doku.php>`_ |
437 | |
438 | |
439 | -Misc |
440 | -==== |
441 | +Reference |
442 | +========= |
443 | |
444 | .. toctree:: |
445 | :maxdepth: 1 |
446 | :glob: |
447 | |
448 | + release-notes/release-notes_index |
449 | glossary |
450 | |
451 | Indices and tables |
452 | |
453 | === added directory 'doc/source/release-notes' |
454 | === added file 'doc/source/release-notes/Percona-XtraDB-Cluster-5.5.23.rst' |
455 | --- doc/source/release-notes/Percona-XtraDB-Cluster-5.5.23.rst 1970-01-01 00:00:00 +0000 |
456 | +++ doc/source/release-notes/Percona-XtraDB-Cluster-5.5.23.rst 2012-05-16 16:48:20 +0000 |
457 | @@ -0,0 +1,19 @@ |
458 | +.. rn:: 5.5.23 |
459 | + |
460 | +===================================== |
461 | + |Percona XtraDB Cluster| 5.5.23-23.5 |
462 | +===================================== |
463 | + |
464 | +Percona is glad to announce the release of |Percona XtraDB Cluster| on May 14, 2012. Binaries are available from `downloads area <http://www.percona.com/downloads/Percona-XtraDB-Cluster/5.5.23-23.5/>`_ or from our `software repositories <http://www.percona.com/doc/percona-xtradb-cluster/installation.html#using-percona-software-repositories>`_. |
465 | + |
466 | +This is an General Availability release. We did our best to eliminate bugs and problems during alpha and beta testing release, but this is a software, so bugs are expected. If you encounter them, please report them to our `bug tracking system <https://bugs.launchpad.net/percona-xtradb-cluster/+filebug>`_. |
467 | + |
468 | +List of changes: |
469 | + * Fixes merged from upstream (`Codership-mysql <http://www.codership.com/content/wsrep-patch-235-mysql-5523-released>`_). |
470 | + * Support for MyISAM, now changes to MyISAM tables are replicated to other nodes. |
471 | + * Improvements to XtraBackup SST methods, better error handling. |
472 | + * New SST wsrep_sst_method=skip, useful when you start all nodes from the same sources (i.e. backup). |
473 | + * Ability to pass list of IP addresses for a new node, it will connect to the first available. |
474 | + |
475 | +Based on `Percona Server 5.5.23-25.3 <http://www.percona.com/doc/percona-server/5.5/release-notes/Percona-Server-5.5.23-25.3.html>`_ including all the bug fixes in it, and the latest `Galera 2.x replicator <https://code.launchpad.net/~codership/galera/2.x>`_, |Percona XtraDB Cluster| 5.5.23-25.3 is now the current stable release. All of |Percona|'s software is open-source and free. |
476 | + |
477 | |
478 | === added file 'doc/source/release-notes/release-notes_index.rst' |
479 | --- doc/source/release-notes/release-notes_index.rst 1970-01-01 00:00:00 +0000 |
480 | +++ doc/source/release-notes/release-notes_index.rst 2012-05-16 16:48:20 +0000 |
481 | @@ -0,0 +1,10 @@ |
482 | +====================================== |
483 | +|Percona XtraDB Cluster| Release notes |
484 | +====================================== |
485 | + |
486 | +.. toctree:: |
487 | + :maxdepth: 1 |
488 | + :glob: |
489 | + |
490 | + Percona-XtraDB-Cluster-5.5.2* |
491 | + |