← Back to team overview

lttng team mailing list archive

[Bug 2017006] Re: fix build issue for kinetic

 

** Also affects: lttng-modules (Ubuntu Lunar)
   Importance: Medium
     Assignee: Roxana Nicolescu (roxanan)
       Status: New

** Changed in: lttng-modules (Ubuntu Lunar)
       Status: New => Fix Released

** Changed in: lttng-modules (Ubuntu Lunar)
       Status: Fix Released => New

** Description changed:

  [SRU Justification]
  
  Impact:
  Upstream stable added a change in the format of jbd2 in 5.15.87 that was cherry-picked to kinetic:linux.
  
  This is incompatible with the current changes in the lttng-module
  kinetic.
  
  We previously encountered this issue for focal https://bugs.launchpad.net/ubuntu-kernel-tests/+bug/2004644
  and we proactively released a new version for kinetic.
  The problem is the fix does not really work as expected.
  
  As shown in the logs below,
  The build error is triggered because some function declaration does not match the kernel's.
  In `include/instrumentation/events/jbd2.h` in lttng-modules, there is a conditional declaration based on the kernel version. 5.19 is missing there, therefore kinetic will fallback to the old declaration. Probably the reason 5.19 is not there is because this version has reached end of life last year.
  
  Fix
  Add [5.19.0 - 5.19.19] interval
- This requires a new release for kinetic and jammy because jammy 5.19 backports are affected as well.
+ This requires a new release for kinetic and jammy because jammy 5.19 backports are affected as well. Also lunar, because some riscv kernels are still on 5.19 as well.
  
  Regression potential:
  We may notice new failures in ubuntu_lttng_smoke_test once this will compile and run. But it was tested locally and results were good, so probability is very very low.
  
  35:35 DEBUG| [stdout] In file included from /var/lib/dkms/lttng-modules/2.13.8/build/src/probes/../../include/lttng/define_trace.h:87,
        860 	  	02:35:35 DEBUG| [stdout]                  from /var/lib/dkms/lttng-modules/2.13.8/build/src/probes/../../include/instrumentation/events/jbd2.h:293,
        861 	  	02:35:35 DEBUG| [stdout]                  from /var/lib/dkms/lttng-modules/2.13.8/build/src/probes/lttng-probe-jbd2.c:29:
        862 	  	02:35:35 DEBUG| [stdout] /var/lib/dkms/lttng-modules/2.13.8/build/src/probes/../../include/lttng/tracepoint-event-impl.h:133:6: error: conflicting types for ‘trace_jbd2_run_stats’; have ‘void(dev_t,  long unsigned int,  struct transaction_run_stats_s *)’ {aka ‘void(unsigned int,  long unsigned int,  struct transaction_run_stats_s *)’}
        863 	  	02:35:35 DEBUG| [stdout]   133 | void trace_##_name(_proto);
        864 	  	02:35:35 DEBUG| [stdout]       |      ^~~~~~
        865 	  	02:35:35 DEBUG| [stdout] /var/lib/dkms/lttng-modules/2.13.8/build/src/probes/../../include/lttng/tracepoint-event-impl.h:45:9: note: in expansion of macro ‘LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP’
        866 	  	02:35:35 DEBUG| [stdout]    45 |         LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(map, name, map, PARAMS(proto), PARAMS(args))
        867 	  	02:35:35 DEBUG| [stdout]       |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        868 	  	02:35:35 DEBUG| [stdout] /var/lib/dkms/lttng-modules/2.13.8/build/src/probes/../../include/lttng/tracepoint-event-impl.h:87:9: note: in expansion of macro ‘LTTNG_TRACEPOINT_EVENT_MAP’
        869 	  	02:35:35 DEBUG| [stdout]    87 |         LTTNG_TRACEPOINT_EVENT_MAP(name, name,                          \
        870 	  	02:35:35 DEBUG| [stdout]       |         ^~~~~~~~~~~~~~~~~~~~~~~~~~
        871 	  	02:35:35 DEBUG| [stdout] /var/lib/dkms/lttng-modules/2.13.8/build/src/probes/../../include/instrumentation/events/jbd2.h:180:1: note: in expansion of macro ‘LTTNG_TRACEPOINT_EVENT’
        872 	  	02:35:35 DEBUG| [stdout]   180 | LTTNG_TRACEPOINT_EVENT(jbd2_run_stats,
        873 	  	02:35:35 DEBUG| [stdout]       | ^~~~~~~~~~~~~~~~~~~~~~
        874 	  	02:35:35 DEBUG| [stdout] In file included from ./include/trace/events/jbd2.h:9,
        875 	  	02:35:35 DEBUG| [stdout]                  from /var/lib/dkms/lttng-modules/2.13.8/build/src/probes/lttng-probe-jbd2.c:18:
        876 	  	02:35:35 DEBUG| [stdout] ./include/linux/tracepoint.h:245:28: note: previous definition of ‘trace_jbd2_run_stats’ with type ‘void(dev_t,  tid_t,  struct transaction_run_stats_s *)’ {aka ‘void(unsigned int,  unsigned int,  struct transaction_run_stats_s *)’}
        877 	  	02:35:35 DEBUG| [stdout]   245 |         static inline void trace_##name(proto)                          \
        878 	  	02:35:35 DEBUG| [stdout]       |                            ^~~~~~
        879 	  	02:35:35 DEBUG| [stdout] ./include/linux/tracepoint.h:419:9: note: in expansion of macro ‘__DECLARE_TRACE’
        880 	  	02:35:35 DEBUG| [stdout]   419 |         __DECLARE_TRACE(name, PARAMS(proto), PARAMS(args),              \
        881 	  	02:35:35 DEBUG| [stdout]       |         ^~~~~~~~~~~~~~~
        882 	  	02:35:35 DEBUG| [stdout] ./include/linux/tracepoint.h:553:9: note: in expansion of macro ‘DECLARE_TRACE’
        883 	  	02:35:35 DEBUG| [stdout]   553 |         DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))
        884 	  	02:35:35 DEBUG| [stdout]       |         ^~~~~~~~~~~~~
        885 	  	02:35:35 DEBUG| [stdout] ./include/trace/events/jbd2.h:248:1: note: in expansion of macro ‘TRACE_EVENT’
        886 	  	02:35:35 DEBUG| [stdout]   248 | TRACE_EVENT(jbd2_run_stats,
        887 	  	02:35:35 DEBUG| [stdout]       | ^~~~~~~~~~~
        888 	  	02:35:35 DEBUG| [stdout] /var/lib/dkms/lttng-modules/2.13.8/build/src/probes/../../include/lttng/tracepoint-event-impl.h:133:6: error: conflicting types for ‘trace_jbd2_checkpoint_stats’; have ‘void(dev_t,  long unsigned int,  struct transaction_chp_stats_s *)’ {aka ‘void(unsigned int,  long unsigned int,  struct transaction_chp_stats_s *)’}
        889 	  	02:35:35 DEBUG| [stdout]   133 | void trace_##_name(_proto);
        890 	  	02:35:35 DEBUG| [stdout]       |      ^~~~~~
        891 	  	02:35:35 DEBUG| [stdout] /var/lib/dkms/lttng-modules/2.13.8/build/src/probes/../../include/lttng/tracepoint-event-impl.h:45:9: note: in expansion of macro ‘LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP’
        892 	  	02:35:35 DEBUG| [stdout]    45 |         LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(map, name, map, PARAMS(proto), PARAMS(args))
        893 	  	02:35:35 DEBUG| [stdout]       |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        894 	  	02:35:35 DEBUG| [stdout] /var/lib/dkms/lttng-modules/2.13.8/build/src/probes/../../include/lttng/tracepoint-event-impl.h:87:9: note: in expansion of macro ‘LTTNG_TRACEPOINT_EVENT_MAP’
        895 	  	02:35:35 DEBUG| [stdout]    87 |         LTTNG_TRACEPOINT_EVENT_MAP(name, name,                          \
        896 	  	02:35:35 DEBUG| [stdout]       |         ^~~~~~~~~~~~~~~~~~~~~~~~~~
        897 	  	02:35:35 DEBUG| [stdout] /var/lib/dkms/lttng-modules/2.13.8/build/src/probes/../../include/instrumentation/events/jbd2.h:200:1: note: in expansion of macro ‘LTTNG_TRACEPOINT_EVENT’
        898 	  	02:35:35 DEBUG| [stdout]   200 | LTTNG_TRACEPOINT_EVENT(jbd2_checkpoint_stats,
        899 	  	02:35:35 DEBUG| [stdout]       | ^~~~~~~~~~~~~~~~~~~~~~
        900 	  	02:35:35 DEBUG| [stdout] ./include/linux/tracepoint.h:245:28: note: previous definition of ‘trace_jbd2_checkpoint_stats’ with type ‘void(dev_t,  tid_t,  struct transaction_chp_stats_s *)’ {aka ‘void(unsigned int,  unsigned int,  struct transaction_chp_stats_s *)’}
        901 	  	02:35:35 DEBUG| [stdout]   245 |         static inline void trace_##name(proto)                          \
        902 	  	02:35:35 DEBUG| [stdout]       |                            ^~~~~~
        903 	  	02:35:35 DEBUG| [stdout] ./include/linux/tracepoint.h:419:9: note: in expansion of macro ‘__DECLARE_TRACE’
        904 	  	02:35:35 DEBUG| [stdout]   419 |         __DECLARE_TRACE(name, PARAMS(proto), PARAMS(args),              \
        905 	  	02:35:35 DEBUG| [stdout]       |         ^~~~~~~~~~~~~~~
        906 	  	02:35:35 DEBUG| [stdout] ./include/linux/tracepoint.h:553:9: note: in expansion of macro ‘DECLARE_TRACE’
        907 	  	02:35:35 DEBUG| [stdout]   553 |         DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))
        908 	  	02:35:35 DEBUG| [stdout]       |         ^~~~~~~~~~~~~
        909 	  	02:35:35 DEBUG| [stdout] ./include/trace/events/jbd2.h:296:1: note: in expansion of macro ‘TRACE_EVENT’
        910 	  	02:35:35 DEBUG| [stdout]   296 | TRACE_EVENT(jbd2_checkpoint_stats,
        911 	  	02:35:35 DEBUG| [stdout]       | ^~~~~~~~~~~
        912 	  	02:35:35 DEBUG| [stdout] make[3]: *** [scripts/Makefile.build:257: /var/lib/dkms/lttng-modules/2.13.8/build/src/probes/lttng-probe-jbd2.o] Error 1
        913 	  	02:35:35 DEBUG| [stdout] make[2]: *** [scripts/Makefile.build:474: /var/lib/dkms/lttng-modules/2.13.8/build/src/probes] Error 2
        914 	  	02:35:35 DEBUG| [stdout] make[1]: *** [scripts/Makefile.build:474: /var/lib/dkms/lttng-modules/2.13.8/build/src] Error 2
        915 	  	02:35:35 DEBUG| [stdout] make: *** [Makefile:1850: /var/lib/dkms/lttng-modules/2.13.8/build] Error 2
        916 	  	02:35:35 DEBUG| [stdout] make: Leaving directory '/usr/src/linux-headers-5.19.0-42-generic'
        917 	  	02:35:35 ERROR| Exception escaping from test:
        918 	  	Traceback (most recent call last):
        919 	  	  File "/home/ubuntu/autotest/client/shared/test.py", line 378, in _exec
        920 	  	    _cherry_pick_call(self.initialize, *args, **dargs)
        921 	  	  File "/home/ubuntu/autotest/client/shared/test.py", line 738, in _cherry_pick_call
        922 	  	    return func(*p_args, **p_dargs)
        923 	  	  File "/home/ubuntu/autotest/client/tests/ubuntu_lttng_smoke_test/ubuntu_lttng_smoke_test.py", line 58, in initialize
        924 	  	    raise error.TestError('DKMS failed to install')

** Summary changed:

- fix build issue for kinetic
+ fix build issue for v5.19 kernels (jammy-hwe, kinetic, lunar-riscv)

** Changed in: lttng-modules (Ubuntu Lunar)
       Status: New => In Progress

-- 
You received this bug notification because you are a member of Ubuntu
LTTng, which is subscribed to lttng-modules in Ubuntu.
Matching subscriptions: lttng-modules-bugs
https://bugs.launchpad.net/bugs/2017006

Title:
  fix build issue for v5.19 kernels (jammy-hwe, kinetic, lunar-riscv)

Status in lttng-modules package in Ubuntu:
  In Progress
Status in lttng-modules source package in Jammy:
  In Progress
Status in lttng-modules source package in Kinetic:
  In Progress
Status in lttng-modules source package in Lunar:
  In Progress

Bug description:
  [SRU Justification]

  Impact:
  Upstream stable added a change in the format of jbd2 in 5.15.87 that was cherry-picked to kinetic:linux.

  This is incompatible with the current changes in the lttng-module
  kinetic.

  We previously encountered this issue for focal https://bugs.launchpad.net/ubuntu-kernel-tests/+bug/2004644
  and we proactively released a new version for kinetic.
  The problem is the fix does not really work as expected.

  As shown in the logs below,
  The build error is triggered because some function declaration does not match the kernel's.
  In `include/instrumentation/events/jbd2.h` in lttng-modules, there is a conditional declaration based on the kernel version. 5.19 is missing there, therefore kinetic will fallback to the old declaration. Probably the reason 5.19 is not there is because this version has reached end of life last year.

  Fix
  Add [5.19.0 - 5.19.19] interval
  This requires a new release for kinetic and jammy because jammy 5.19 backports are affected as well. Also lunar, because some riscv kernels are still on 5.19 as well.

  Regression potential:
  We may notice new failures in ubuntu_lttng_smoke_test once this will compile and run. But it was tested locally and results were good, so probability is very very low.

  35:35 DEBUG| [stdout] In file included from /var/lib/dkms/lttng-modules/2.13.8/build/src/probes/../../include/lttng/define_trace.h:87,
        860 	  	02:35:35 DEBUG| [stdout]                  from /var/lib/dkms/lttng-modules/2.13.8/build/src/probes/../../include/instrumentation/events/jbd2.h:293,
        861 	  	02:35:35 DEBUG| [stdout]                  from /var/lib/dkms/lttng-modules/2.13.8/build/src/probes/lttng-probe-jbd2.c:29:
        862 	  	02:35:35 DEBUG| [stdout] /var/lib/dkms/lttng-modules/2.13.8/build/src/probes/../../include/lttng/tracepoint-event-impl.h:133:6: error: conflicting types for ‘trace_jbd2_run_stats’; have ‘void(dev_t,  long unsigned int,  struct transaction_run_stats_s *)’ {aka ‘void(unsigned int,  long unsigned int,  struct transaction_run_stats_s *)’}
        863 	  	02:35:35 DEBUG| [stdout]   133 | void trace_##_name(_proto);
        864 	  	02:35:35 DEBUG| [stdout]       |      ^~~~~~
        865 	  	02:35:35 DEBUG| [stdout] /var/lib/dkms/lttng-modules/2.13.8/build/src/probes/../../include/lttng/tracepoint-event-impl.h:45:9: note: in expansion of macro ‘LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP’
        866 	  	02:35:35 DEBUG| [stdout]    45 |         LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(map, name, map, PARAMS(proto), PARAMS(args))
        867 	  	02:35:35 DEBUG| [stdout]       |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        868 	  	02:35:35 DEBUG| [stdout] /var/lib/dkms/lttng-modules/2.13.8/build/src/probes/../../include/lttng/tracepoint-event-impl.h:87:9: note: in expansion of macro ‘LTTNG_TRACEPOINT_EVENT_MAP’
        869 	  	02:35:35 DEBUG| [stdout]    87 |         LTTNG_TRACEPOINT_EVENT_MAP(name, name,                          \
        870 	  	02:35:35 DEBUG| [stdout]       |         ^~~~~~~~~~~~~~~~~~~~~~~~~~
        871 	  	02:35:35 DEBUG| [stdout] /var/lib/dkms/lttng-modules/2.13.8/build/src/probes/../../include/instrumentation/events/jbd2.h:180:1: note: in expansion of macro ‘LTTNG_TRACEPOINT_EVENT’
        872 	  	02:35:35 DEBUG| [stdout]   180 | LTTNG_TRACEPOINT_EVENT(jbd2_run_stats,
        873 	  	02:35:35 DEBUG| [stdout]       | ^~~~~~~~~~~~~~~~~~~~~~
        874 	  	02:35:35 DEBUG| [stdout] In file included from ./include/trace/events/jbd2.h:9,
        875 	  	02:35:35 DEBUG| [stdout]                  from /var/lib/dkms/lttng-modules/2.13.8/build/src/probes/lttng-probe-jbd2.c:18:
        876 	  	02:35:35 DEBUG| [stdout] ./include/linux/tracepoint.h:245:28: note: previous definition of ‘trace_jbd2_run_stats’ with type ‘void(dev_t,  tid_t,  struct transaction_run_stats_s *)’ {aka ‘void(unsigned int,  unsigned int,  struct transaction_run_stats_s *)’}
        877 	  	02:35:35 DEBUG| [stdout]   245 |         static inline void trace_##name(proto)                          \
        878 	  	02:35:35 DEBUG| [stdout]       |                            ^~~~~~
        879 	  	02:35:35 DEBUG| [stdout] ./include/linux/tracepoint.h:419:9: note: in expansion of macro ‘__DECLARE_TRACE’
        880 	  	02:35:35 DEBUG| [stdout]   419 |         __DECLARE_TRACE(name, PARAMS(proto), PARAMS(args),              \
        881 	  	02:35:35 DEBUG| [stdout]       |         ^~~~~~~~~~~~~~~
        882 	  	02:35:35 DEBUG| [stdout] ./include/linux/tracepoint.h:553:9: note: in expansion of macro ‘DECLARE_TRACE’
        883 	  	02:35:35 DEBUG| [stdout]   553 |         DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))
        884 	  	02:35:35 DEBUG| [stdout]       |         ^~~~~~~~~~~~~
        885 	  	02:35:35 DEBUG| [stdout] ./include/trace/events/jbd2.h:248:1: note: in expansion of macro ‘TRACE_EVENT’
        886 	  	02:35:35 DEBUG| [stdout]   248 | TRACE_EVENT(jbd2_run_stats,
        887 	  	02:35:35 DEBUG| [stdout]       | ^~~~~~~~~~~
        888 	  	02:35:35 DEBUG| [stdout] /var/lib/dkms/lttng-modules/2.13.8/build/src/probes/../../include/lttng/tracepoint-event-impl.h:133:6: error: conflicting types for ‘trace_jbd2_checkpoint_stats’; have ‘void(dev_t,  long unsigned int,  struct transaction_chp_stats_s *)’ {aka ‘void(unsigned int,  long unsigned int,  struct transaction_chp_stats_s *)’}
        889 	  	02:35:35 DEBUG| [stdout]   133 | void trace_##_name(_proto);
        890 	  	02:35:35 DEBUG| [stdout]       |      ^~~~~~
        891 	  	02:35:35 DEBUG| [stdout] /var/lib/dkms/lttng-modules/2.13.8/build/src/probes/../../include/lttng/tracepoint-event-impl.h:45:9: note: in expansion of macro ‘LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP’
        892 	  	02:35:35 DEBUG| [stdout]    45 |         LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(map, name, map, PARAMS(proto), PARAMS(args))
        893 	  	02:35:35 DEBUG| [stdout]       |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        894 	  	02:35:35 DEBUG| [stdout] /var/lib/dkms/lttng-modules/2.13.8/build/src/probes/../../include/lttng/tracepoint-event-impl.h:87:9: note: in expansion of macro ‘LTTNG_TRACEPOINT_EVENT_MAP’
        895 	  	02:35:35 DEBUG| [stdout]    87 |         LTTNG_TRACEPOINT_EVENT_MAP(name, name,                          \
        896 	  	02:35:35 DEBUG| [stdout]       |         ^~~~~~~~~~~~~~~~~~~~~~~~~~
        897 	  	02:35:35 DEBUG| [stdout] /var/lib/dkms/lttng-modules/2.13.8/build/src/probes/../../include/instrumentation/events/jbd2.h:200:1: note: in expansion of macro ‘LTTNG_TRACEPOINT_EVENT’
        898 	  	02:35:35 DEBUG| [stdout]   200 | LTTNG_TRACEPOINT_EVENT(jbd2_checkpoint_stats,
        899 	  	02:35:35 DEBUG| [stdout]       | ^~~~~~~~~~~~~~~~~~~~~~
        900 	  	02:35:35 DEBUG| [stdout] ./include/linux/tracepoint.h:245:28: note: previous definition of ‘trace_jbd2_checkpoint_stats’ with type ‘void(dev_t,  tid_t,  struct transaction_chp_stats_s *)’ {aka ‘void(unsigned int,  unsigned int,  struct transaction_chp_stats_s *)’}
        901 	  	02:35:35 DEBUG| [stdout]   245 |         static inline void trace_##name(proto)                          \
        902 	  	02:35:35 DEBUG| [stdout]       |                            ^~~~~~
        903 	  	02:35:35 DEBUG| [stdout] ./include/linux/tracepoint.h:419:9: note: in expansion of macro ‘__DECLARE_TRACE’
        904 	  	02:35:35 DEBUG| [stdout]   419 |         __DECLARE_TRACE(name, PARAMS(proto), PARAMS(args),              \
        905 	  	02:35:35 DEBUG| [stdout]       |         ^~~~~~~~~~~~~~~
        906 	  	02:35:35 DEBUG| [stdout] ./include/linux/tracepoint.h:553:9: note: in expansion of macro ‘DECLARE_TRACE’
        907 	  	02:35:35 DEBUG| [stdout]   553 |         DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))
        908 	  	02:35:35 DEBUG| [stdout]       |         ^~~~~~~~~~~~~
        909 	  	02:35:35 DEBUG| [stdout] ./include/trace/events/jbd2.h:296:1: note: in expansion of macro ‘TRACE_EVENT’
        910 	  	02:35:35 DEBUG| [stdout]   296 | TRACE_EVENT(jbd2_checkpoint_stats,
        911 	  	02:35:35 DEBUG| [stdout]       | ^~~~~~~~~~~
        912 	  	02:35:35 DEBUG| [stdout] make[3]: *** [scripts/Makefile.build:257: /var/lib/dkms/lttng-modules/2.13.8/build/src/probes/lttng-probe-jbd2.o] Error 1
        913 	  	02:35:35 DEBUG| [stdout] make[2]: *** [scripts/Makefile.build:474: /var/lib/dkms/lttng-modules/2.13.8/build/src/probes] Error 2
        914 	  	02:35:35 DEBUG| [stdout] make[1]: *** [scripts/Makefile.build:474: /var/lib/dkms/lttng-modules/2.13.8/build/src] Error 2
        915 	  	02:35:35 DEBUG| [stdout] make: *** [Makefile:1850: /var/lib/dkms/lttng-modules/2.13.8/build] Error 2
        916 	  	02:35:35 DEBUG| [stdout] make: Leaving directory '/usr/src/linux-headers-5.19.0-42-generic'
        917 	  	02:35:35 ERROR| Exception escaping from test:
        918 	  	Traceback (most recent call last):
        919 	  	  File "/home/ubuntu/autotest/client/shared/test.py", line 378, in _exec
        920 	  	    _cherry_pick_call(self.initialize, *args, **dargs)
        921 	  	  File "/home/ubuntu/autotest/client/shared/test.py", line 738, in _cherry_pick_call
        922 	  	    return func(*p_args, **p_dargs)
        923 	  	  File "/home/ubuntu/autotest/client/tests/ubuntu_lttng_smoke_test/ubuntu_lttng_smoke_test.py", line 58, in initialize
        924 	  	    raise error.TestError('DKMS failed to install')

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/lttng-modules/+bug/2017006/+subscriptions



References